diff --git a/README.rst b/README.rst index e0440db0bb..d0f8ca284f 100644 --- a/README.rst +++ b/README.rst @@ -38,4 +38,3 @@ If you think you have found a bug in Geant4, please open a ticket on our `Bugzil Contributing to Geant4 ===== Please see the main `Contribution Guide <./CONTRIBUTING.rst>`_. - diff --git a/environments/g4py/README.md b/environments/g4py/README.md new file mode 100644 index 0000000000..76ec00d0c3 --- /dev/null +++ b/environments/g4py/README.md @@ -0,0 +1,78 @@ +Geant4Py +======== + +_A set of python modules for using Geant4_ + + +System Requirements +------------------- + +### CMake +Building system is migrated to CMake system. + +### Python + +Python2.x and Python 3.x (experimental) + +### Boost + +Boost_Python is needed. + +### (Optional) + +ROOT for histogramming/analysis + +### Tested Platforms + +* CentOS7 (Python2) +* Ubuntu 18.04 LTS (Python3) + +How to Install +-------------- +Before building library, *GEANT4_INSTALL* environment variable should be set. + + # export GEANT4_INSTALL= (zsh, bash) + # setenv GEANT4_INSTALL (csh) + (G4 install path is the path specified by "CMAKE_INSTALL_PREFIX" when building Geant4) + +then + + # mkdir build + # cd build + # cmake .. + # make + # make install + +By default, g4py is installed in \/lib(64) directory. + +Before doing tests with CTest, you have to set environment variables +for Geant4 data. + + # make + # make install + # ctest + +performs automatic unit/integration tests with CTest. + +How to Use: +----------- +Some environment variables are required at run time. + +### *PYTHONPATH* + +Python module search directories, given by a colon-separated list of directories, like + + + # export PYTHONPATH=/lib64:/lib64/examples:/lib64/tests (zsh, bash) + # setenv PYTHONPATH /lib64:/lib64/examples:/lib64/tests (csh) + +### *LD_LIBRARY_PATH* + +You might need define LD_LIBRARY_PATH for Geant4 libraries. + # export LD_LIBRARY_PATH=/lib (zsh, bash) + # setenv LD_LIBRARY_PATH=/lib (csh) + +### Getting started +You can import Geant4Py modules in Python just like + + >>> import Geant4 diff --git a/environments/g4py/examples/README b/environments/g4py/examples/README new file mode 100644 index 0000000000..c445d98866 --- /dev/null +++ b/environments/g4py/examples/README @@ -0,0 +1,33 @@ +------------------------------------------------------------------- + +This directory contains a set of examples for Geant4Py. + +[demos/water_phantom] +An example of "water phantom dosimetry" + +This demo program shows that a Geant4 application well coworks with ROOT +on Python front end. VisManager, PrimaryGeneratorAction, UserAction-s, +histogramming with ROOT are implemented in Python; + + dose calculation in a water phantom + + Python overloading of user actions + + on-line histogramming with ROOT + + visualization + + +[education] +Educational examples with Graphical User Interface using TKinter + +* lesson1 +The first version of the courseware of the mass attenuation coefficient. + +* lesson2 +GUI interface of ExN03, which can control geometry configuration, +intial particle condition, physics processes, cut value, +magnetic field and visualization outputs. + +[emplot] +Examples of plotting photon cross sections and stopping powers with ROOT + +[gdml] +Examples of writing/reading user's geometry to/from a GDML file + diff --git a/environments/g4py/examples/education/lesson1/README b/environments/g4py/examples/education/lesson1/README new file mode 100644 index 0000000000..3d8a1fb187 --- /dev/null +++ b/environments/g4py/examples/education/lesson1/README @@ -0,0 +1,54 @@ +Hajime Yoshida + +******* README of lesson1 ****** + +26 September 2006 + - Lesson1.py as before + - Lesson1withN03.py + - physics is list is taken from examples/novice/N03 + - process on/off + - Leson1Wx.py + - same as Lesson1withN03 but + - New GUI toolkit is used and the default Python isn't enough + - wxPython is necessary + + +26 May 2006 Geant4.8.1 + + + +The first version of the courseware of the mass attenuation coefficient + + - Lesson1.py + select absorber material + set its thickness upto 500 mm + select beam particle + set its energy upto 100 MeV + set nu of events up to 100 + run + + and then + zoom in (x1.1) or zoom out (x0.9) + pan in up/down and/or right/left in the unit of mm (type in two + numbers separated by a space) + + execute any G4 command but /gun/particle or /gun/energy which are + defined by the above + + -oglx.mac + OGLSX => important to make zooming effective after showing trajectories. + + if you want to use VRML, you have to specify the directory where *.wrl + file is stored and the VRML viewer to which the path is set: + G4VRMLFILE_DEST_DIR=/home/yoshidah/tmp/ + G4VRMLFILE_VIEWER=vrmlview + + And you have VRML drivers built. + G4VIS_BUILD_VRML_DRIVER=1 + G4VIS_USE_VRMLFILE=1 + G4VIS_BUILD_VRMLFILE_DRIVER=1 + G4VIS_USE_VRML=1 + + + -gun.mac + This is used only at the initialization time. \ No newline at end of file diff --git a/environments/g4py/examples/education/lesson2/README b/environments/g4py/examples/education/lesson2/README new file mode 100644 index 0000000000..7bc5adc31a --- /dev/null +++ b/environments/g4py/examples/education/lesson2/README @@ -0,0 +1,82 @@ +26 Sep 2006 + - added Lesson2Wx.py + New version using wxPython + functionas are identical with ExN03.py + +26 May 2006 +revised 02 July 2006 +Geant4.8.1 release +=============================================== +Prerequisites for G4 environment variables. +============================================== + +This scripts offers the choice of visualization systems; +one among OGLSX (OpenGL stored mode), or VRML2FILE or Wired3. + +OGLSX is the default viewer and you need no environment variables. + +To use VRML2FILE you have to specify its viewer which is found in your +search path and the destination directory where *.wrl file is stored. +If you don't specify the name of the viewer, you can't choose it on the panel. +For example, + setenv G4VRMLFILE_VIEWER $HOME/bin/vrmlview + setenv G4VRMLFILE_DEST_DIR $HOME/tmp/ <= terminate with / + +To use Wired, download it and install under your directory. Java Runtime +Environment is necessary. +Then set, for example; + setenv G4HEPREPFILE_VIEWER $HOME/Wired/bin/wired <= any path you use + setenv G4HEPREPFILE_DIR $HOME/tmp/ + setenv G4HEPREPFILE_NAME lesson2_00 <= any name you choose. + setenv G4HEPREPFILE_OVERWRITE 1 <= to reuse the file for "next event" +G4HEPREPFILE_VIEWER isn't an official Geant4 environment variable but is employed +here to control the vissssualization viewers. +The name of the HepRepFile is ${G4HEPREPFILE_NAME}.heprep which will be +stored in ${G4HEPREPFILE_DIR}. + +ExN03.py script don't use VRML or Wired if their *_VIEWER isn't set. +But other env variables are also used in the script to look for the +file and to activate the viewer, you have to set all of the above variables +in the shell where you activate ExN03.py script. + + +NOTICE) VRML viewer blocks the window (modal), so that you have to exit it to +display another run. + +********* ExN03.py script *********** + +This example id derived from examples/novice/N03. +You can + - choose the materials of absorber and gap + - set the thickness of the absorber and gap + - set the lateral (in YZ plane) size of the sandwitch cal. + - choose an incedent particle + - set its energy + - set the number of events to run + - toggle on/off of the electromagnetic processes + - set cut length + - set magnetic field + - typein any Geant4 command (except related with the above functions) and execute it + +How to run it? + %python ExN03.py + +You can visualize with OpenGL stored mode or VRML or Wired3 +You can choose either of the active viewers by pushing the +radio buttons. +========================= +NOTICE) + +VRML viewer runs in the modal action, and you have to exit it +to have a new diaplay for the new run, or you want to switch to +another viewer. + +Wired has the "next"/"previous" event button. So to see the next +event, first run and then "next" event. Wired doesn't block G4 +and you can have Wired and OGLSX both open. + + + +ExN03-Wired.py is OBSOLETE. Please use ExN03.py + + diff --git a/environments/g4py/tests/CMakeLists.txt b/environments/g4py/tests/CMakeLists.txt new file mode 100644 index 0000000000..172298ade7 --- /dev/null +++ b/environments/g4py/tests/CMakeLists.txt @@ -0,0 +1,10 @@ +# - add tests components +add_subdirectory(g4pytest) +add_subdirectory(gtest01) +add_subdirectory(gtest02) +add_subdirectory(gtest03) +add_subdirectory(gtest04) +add_subdirectory(gtest05) +add_subdirectory(gtest06) +add_subdirectory(gtest07) +add_subdirectory(gtest08) diff --git a/environments/g4py/tests/History b/environments/g4py/tests/History new file mode 100644 index 0000000000..9eaf9b3d09 --- /dev/null +++ b/environments/g4py/tests/History @@ -0,0 +1,57 @@ +------------------------------------------------------------------- + + ========================================================= + Geant4 - an Object-Oriented Toolkit for Simulation in HEP + ========================================================= + + Category History file + --------------------- + +A set of tests for python wrapping of C++ elements. + + ---------------------------------------------------------- + * Reverse chronological order (last date on top), please * + ---------------------------------------------------------- + +Nov.30, 2008 K.Murakami +- gtest01-07: modified with g4py namespace + +Aug.07, 2007 K.Murakami +- gtest06 is added. +- gtest07 is added. + +Jul.10, 2007 K.Murakami +- gtest05 is added. + +Aug.07, 2006 K.Murakami +- gtest04 is added. + +Oct.05, 2005 K.Murakami +- test13 is added. + +Aug.31, 2005 K.Murakami +- gtest03 is added. + +Aug.28, 2005 K.Murakami +- gtest02 is added. + +Aug.24, 2005 K.Murakami +- test12 is added. + +Aug.09, 2005 K.Murakami +- test11 is added. + +Jun.22, 2005 K.Murakami +- gtest00 is removed + +Jun.15, 2005 K.Murakami +- test10 is added. + +Jun.14, 2005 K.Murakami +- test00- test09 are finished. +- gtest00 is closed. +- gtest01 is launched for Geant4Py basic tests + +May 18, 2005 K.Murakami +- just created. + diff --git a/environments/g4py/tests/README.md b/environments/g4py/tests/README.md new file mode 100644 index 0000000000..56ce126653 --- /dev/null +++ b/environments/g4py/tests/README.md @@ -0,0 +1,45 @@ +Test Modules +============ + +This module collects a set of tests for python wrapping of C++ elements. + +>**Notes:**
+"*testXX*" directories contain tests without Geant4 package.
+"*gtestXX*" directories contain tests with Geant4 package. + + +Basic tests +----------- + +| Test | Description | +|:------:|------------- +|test00 | hallo world +|test01 | simple class wrapping +|test02 | simple inheritance +|test03 | singleton w/o public constructor
can NOT be compiled. +|test04 | call policies +|test05 | function overloading & default arguments +|test06 | python inheritance from base class +|test07 | enums +|test08 | static member function +|test09 | operators +|test10 | call by-reference +|test11 | no_init +|test12 | indexing a STL vector +|test13 | test for a list argument/return + + +Function tests +-------------- + +| Test | Description | +|:------:|------------- +|gtest01 | user application +|gtest02 | test for using site-module packages +|gtest03 | test for EZsim package +|gtest04 | test for getting command tree and command information +|gtest05 | test for constructing CSG geometries in Python +|gtest06 | test for constructing/visualizing boolean geoemtries +|gtest07 | test for checking overlapped geometries + + diff --git a/environments/g4py/tests/g4pytest/CMakeLists.txt b/environments/g4py/tests/g4pytest/CMakeLists.txt new file mode 100644 index 0000000000..75306d0972 --- /dev/null +++ b/environments/g4py/tests/g4pytest/CMakeLists.txt @@ -0,0 +1,35 @@ +# - Function to build the C++ modules +function(g4pytest_add_module _TARGET) + g4py_add_module(${_TARGET} ${ARGN}) + + # Filthy temp hack for submodule paths.... + string(REGEX REPLACE "^_" "" _SUBMODULE "${_TARGET}") + set_property(TARGET ${_TARGET} APPEND_STRING PROPERTY LIBRARY_OUTPUT_DIRECTORY "/g4pytest/${_SUBMODULE}") + foreach(_conftype ${CMAKE_CONFIGURATION_TYPES}) + string(TOUPPER ${_conftype} _conftype_uppercase) + set_property(TARGET ${_TARGET} APPEND_STRING PROPERTY LIBRARY_OUTPUT_DIRECTORY_${_conftype_uppercase} "/g4pytest/${_SUBMODULE}") + endforeach() +endfunction() + + +# - add libs components +add_subdirectory(ExN01geom) +add_subdirectory(ExN03geom) +add_subdirectory(Qgeom) +add_subdirectory(ezgeom) +add_subdirectory(NISTmaterials) +add_subdirectory(Qmaterials) +add_subdirectory(EMSTDpl) +add_subdirectory(ExN01pl) +add_subdirectory(MedicalBeam) +add_subdirectory(ParticleGun) +# Remainder are pure python + +# Copy/configure pure python components +file(GLOB_RECURSE PY_FILES RELATIVE ${CMAKE_CURRENT_SOURCE_DIR} *.py) +foreach(_pyfile ${PY_FILES}) + file(GENERATE + OUTPUT ${GEANT4_PYTHON_OUTPUT_DIR}/g4pytest/${_pyfile} + INPUT ${CMAKE_CURRENT_SOURCE_DIR}/${_pyfile} + ) +endforeach() diff --git a/environments/g4py/tests/g4pytest/EMSTDpl/CMakeLists.txt b/environments/g4py/tests/g4pytest/EMSTDpl/CMakeLists.txt new file mode 100644 index 0000000000..82112c5a98 --- /dev/null +++ b/environments/g4py/tests/g4pytest/EMSTDpl/CMakeLists.txt @@ -0,0 +1,4 @@ +# - build library +set(_TARGET _EMSTDpl) +g4pytest_add_module(${_TARGET} PhysicsListEMstd.cc pyEMSTDpl.cc) +target_link_libraries(${_TARGET} PRIVATE G4particles G4processes G4run) diff --git a/environments/g4py/tests/g4pytest/EMSTDpl/PhysicsListEMstd.cc b/environments/g4py/tests/g4pytest/EMSTDpl/PhysicsListEMstd.cc new file mode 100644 index 0000000000..89d33286a9 --- /dev/null +++ b/environments/g4py/tests/g4pytest/EMSTDpl/PhysicsListEMstd.cc @@ -0,0 +1,133 @@ +// +// ******************************************************************** +// * 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. * +// ******************************************************************** +// +// ==================================================================== +// PhysicsListEMstd.cc +// +// 2006 Q +// ==================================================================== +#include "PhysicsListEMstd.hh" +#include "G4SystemOfUnits.hh" + +#include "G4ProcessManager.hh" +#include "G4ParticleDefinition.hh" + +#include "G4Gamma.hh" +#include "G4Electron.hh" +#include "G4Positron.hh" + +#include "G4ComptonScattering.hh" +#include "G4GammaConversion.hh" +#include "G4PhotoElectricEffect.hh" +#include "G4eMultipleScattering.hh" +#include "G4eIonisation.hh" +#include "G4eBremsstrahlung.hh" +#include "G4eplusAnnihilation.hh" + + +// ==================================================================== +// +// class description +// +// ==================================================================== + +//////////////////////////////////// +PhysicsListEMstd::PhysicsListEMstd() +//////////////////////////////////// +{ + SetVerboseLevel(1); + defaultCutValue = 1.*mm; // default cut value (1.0mm) +} + + +///////////////////////////////////// +PhysicsListEMstd::~PhysicsListEMstd() +///////////////////////////////////// +{ +} + + +////////////////////////////////////////// +void PhysicsListEMstd::ConstructParticle() +////////////////////////////////////////// +{ + G4Gamma::GammaDefinition(); + G4Electron::ElectronDefinition(); + G4Positron::PositronDefinition(); +} + + +///////////////////////////////////////// +void PhysicsListEMstd::ConstructProcess() +///////////////////////////////////////// +{ + AddTransportation(); + + G4ProcessManager* pm; + + // ---------------------------------------------------------- + // gamma physics + // ---------------------------------------------------------- + pm= G4Gamma::Gamma()-> GetProcessManager(); + pm-> AddDiscreteProcess(new G4PhotoElectricEffect); + pm-> AddDiscreteProcess(new G4ComptonScattering); + pm-> AddDiscreteProcess(new G4GammaConversion); + + // ---------------------------------------------------------- + // electron physics + // ---------------------------------------------------------- + G4eMultipleScattering* msc= new G4eMultipleScattering; + G4eIonisation* eion= new G4eIonisation; + G4eBremsstrahlung* ebrems= new G4eBremsstrahlung; + + pm= G4Electron::Electron()->GetProcessManager(); + pm-> AddProcess(msc, ordInActive, 1, 1); + pm-> AddProcess(eion, ordInActive, 2, 2); + pm-> AddProcess(ebrems, ordInActive, ordInActive, 3); + + // ---------------------------------------------------------- + // positron physics + // ---------------------------------------------------------- + msc= new G4eMultipleScattering; + eion= new G4eIonisation; + ebrems= new G4eBremsstrahlung; + G4eplusAnnihilation* annihilation= new G4eplusAnnihilation; + + pm= G4Positron::Positron()-> GetProcessManager(); + pm-> AddProcess(msc, ordInActive, 1, 1); + pm-> AddProcess(eion, ordInActive, 2, 2); + pm-> AddProcess(ebrems, ordInActive, ordInActive, 3); + pm-> AddProcess(annihilation, 0, ordInActive, 4); + +} + + +//////////////////////////////// +void PhysicsListEMstd::SetCuts() +//////////////////////////////// +{ + SetCutsWithDefault(); +} + diff --git a/environments/g4py/tests/g4pytest/EMSTDpl/PhysicsListEMstd.hh b/environments/g4py/tests/g4pytest/EMSTDpl/PhysicsListEMstd.hh new file mode 100644 index 0000000000..a53d62ce96 --- /dev/null +++ b/environments/g4py/tests/g4pytest/EMSTDpl/PhysicsListEMstd.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. * +// ******************************************************************** +// +// ==================================================================== +// PhysicsListEMstd.hh +// +// Physics list for electron/positron/gamma +// EM-standard package +// +// 2006 Q +// ==================================================================== +#ifndef PHYSICS_LIST_EMSTD_H +#define PHYSICS_LIST_EMSTD_H + +#include "G4VUserPhysicsList.hh" + +// ==================================================================== +// +// class definition +// +// ==================================================================== + +class PhysicsListEMstd: public G4VUserPhysicsList { +public: + PhysicsListEMstd(); + ~PhysicsListEMstd(); + + virtual void ConstructParticle(); + virtual void ConstructProcess(); + virtual void SetCuts(); + +}; + +#endif diff --git a/environments/g4py/tests/g4pytest/EMSTDpl/__init__.py b/environments/g4py/tests/g4pytest/EMSTDpl/__init__.py new file mode 100644 index 0000000000..30c93286ec --- /dev/null +++ b/environments/g4py/tests/g4pytest/EMSTDpl/__init__.py @@ -0,0 +1 @@ +from ._EMSTDpl import * \ No newline at end of file diff --git a/environments/g4py/tests/g4pytest/EMSTDpl/pyEMSTDpl.cc b/environments/g4py/tests/g4pytest/EMSTDpl/pyEMSTDpl.cc new file mode 100644 index 0000000000..c21c4ef42d --- /dev/null +++ b/environments/g4py/tests/g4pytest/EMSTDpl/pyEMSTDpl.cc @@ -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. * +// ******************************************************************** +// +// ==================================================================== +// pyEMSTDpl.cc +// +// [Qgeom] +// a site-module of Geant4Py +// +// Electron/Gamma EM-standard physics list +// +// 2005 Q +// ==================================================================== +#include +#include "G4RunManager.hh" +#include "PhysicsListEMstd.hh" + +using namespace boost::python; + +// ==================================================================== +// thin wrappers +// ==================================================================== +namespace pyEMSTDpl { + +PhysicsListEMstd* Construct() +{ + PhysicsListEMstd* pl= new PhysicsListEMstd; + + G4RunManager* runMgr= G4RunManager::GetRunManager(); + runMgr-> SetUserInitialization(pl); + + return pl; +} + +} + +using namespace pyEMSTDpl; + +// ==================================================================== +// Expose to Python +// ==================================================================== + +BOOST_PYTHON_MODULE(_EMSTDpl) { + + class_ > + ("PhysicsListEMstd", "Electron/Gamma EM-standard physics list") + ; + + // --- + def("Construct", Construct, + return_value_policy()); + +} diff --git a/environments/g4py/tests/g4pytest/ExN01geom/CMakeLists.txt b/environments/g4py/tests/g4pytest/ExN01geom/CMakeLists.txt new file mode 100644 index 0000000000..c92f18b2ee --- /dev/null +++ b/environments/g4py/tests/g4pytest/ExN01geom/CMakeLists.txt @@ -0,0 +1,4 @@ +# - build library +set(_TARGET _ExN01geom) +g4pytest_add_module(${_TARGET} ExN01DetectorConstruction.cc pyExN01geom.cc) +target_link_libraries(${_TARGET} PRIVATE G4materials G4geometry G4run) diff --git a/environments/g4py/tests/g4pytest/ExN01geom/ExN01DetectorConstruction.cc b/environments/g4py/tests/g4pytest/ExN01geom/ExN01DetectorConstruction.cc new file mode 100644 index 0000000000..f5fbce61a2 --- /dev/null +++ b/environments/g4py/tests/g4pytest/ExN01geom/ExN01DetectorConstruction.cc @@ -0,0 +1,155 @@ +// +// ******************************************************************** +// * 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. * +// ******************************************************************** +// +// ==================================================================== +// ExN01DetectorConstruction.cc +// +// 2005 Q +// ==================================================================== +#include "ExN01DetectorConstruction.hh" + +#include "G4Material.hh" +#include "G4Box.hh" +#include "G4Tubs.hh" +#include "G4LogicalVolume.hh" +#include "G4ThreeVector.hh" +#include "G4PVPlacement.hh" +#include "G4SystemOfUnits.hh" + +// ==================================================================== +// +// class description +// +// ==================================================================== + +////////////////////////////////////////////////////// +ExN01DetectorConstruction::ExN01DetectorConstruction() + : experimentalHall_log(0), tracker_log(0), + calorimeterBlock_log(0), calorimeterLayer_log(0), + experimentalHall_phys(0), calorimeterLayer_phys(0), + calorimeterBlock_phys(0), tracker_phys(0) +////////////////////////////////////////////////////// +{ +} + +/////////////////////////////////////////////////////// +ExN01DetectorConstruction::~ExN01DetectorConstruction() +/////////////////////////////////////////////////////// +{ +} + +///////////////////////////////////////////////////////// +G4VPhysicalVolume* ExN01DetectorConstruction::Construct() +///////////////////////////////////////////////////////// +{ + //------------------------------------------------------ materials + G4double a; // atomic mass + G4double z; // atomic number + G4double density; + + G4Material* Ar = + new G4Material("ArgonGas", z= 18., a= 39.95*g/mole, density= 1.782*mg/cm3); + + G4Material* Al = + new G4Material("Aluminum", z= 13., a= 26.98*g/mole, density= 2.7*g/cm3); + + G4Material* Pb = + new G4Material("Lead", z= 82., a= 207.19*g/mole, density= 11.35*g/cm3); + + //------------------------------------------------------ volumes + + //------------------------------ experimental hall (world volume) + //------------------------------ beam line along x axis + + G4double expHall_x = 3.0*m; + G4double expHall_y = 1.0*m; + G4double expHall_z = 1.0*m; + G4Box* experimentalHall_box + = new G4Box("expHall_box",expHall_x,expHall_y,expHall_z); + experimentalHall_log = new G4LogicalVolume(experimentalHall_box, + Ar,"expHall_log",0,0,0); + experimentalHall_phys = new G4PVPlacement(0,G4ThreeVector(), + experimentalHall_log, + "expHall",0,false,0); + + //------------------------------ a tracker tube + + G4double innerRadiusOfTheTube = 0.*cm; + G4double outerRadiusOfTheTube = 60.*cm; + G4double hightOfTheTube = 50.*cm; + G4double startAngleOfTheTube = 0.*deg; + G4double spanningAngleOfTheTube = 360.*deg; + G4Tubs* tracker_tube = new G4Tubs("tracker_tube",innerRadiusOfTheTube, + outerRadiusOfTheTube,hightOfTheTube, + startAngleOfTheTube, + spanningAngleOfTheTube); + tracker_log = new G4LogicalVolume(tracker_tube,Al,"tracker_log",0,0,0); + G4double trackerPos_x = -1.0*m; + G4double trackerPos_y = 0.*m; + G4double trackerPos_z = 0.*m; + tracker_phys = new G4PVPlacement(0, + G4ThreeVector(trackerPos_x,trackerPos_y,trackerPos_z), + tracker_log,"tracker",experimentalHall_log,false,0); + + //------------------------------ a calorimeter block + + G4double block_x = 1.0*m; + G4double block_y = 50.0*cm; + G4double block_z = 50.0*cm; + G4Box* calorimeterBlock_box = new G4Box("calBlock_box",block_x, + block_y,block_z); + calorimeterBlock_log = new G4LogicalVolume(calorimeterBlock_box, + Pb,"caloBlock_log",0,0,0); + G4double blockPos_x = 1.0*m; + G4double blockPos_y = 0.0*m; + G4double blockPos_z = 0.0*m; + calorimeterBlock_phys = new G4PVPlacement(0, + G4ThreeVector(blockPos_x,blockPos_y,blockPos_z), + calorimeterBlock_log,"caloBlock",experimentalHall_log,false,0); + + //------------------------------ calorimeter layers + + G4double calo_x = 1.*cm; + G4double calo_y = 40.*cm; + G4double calo_z = 40.*cm; + G4Box* calorimeterLayer_box = new G4Box("caloLayer_box", + calo_x,calo_y,calo_z); + calorimeterLayer_log = new G4LogicalVolume(calorimeterLayer_box, + Al,"caloLayer_log",0,0,0); + for(G4int i=0;i<19;i++) // loop for 19 layers + { + G4double caloPos_x = (i-9)*10.*cm; + G4double caloPos_y = 0.0*m; + G4double caloPos_z = 0.0*m; + calorimeterLayer_phys = new G4PVPlacement(0, + G4ThreeVector(caloPos_x,caloPos_y,caloPos_z), + calorimeterLayer_log,"caloLayer",calorimeterBlock_log,false,i); + } + + //------------------------------------------------------------------ + + return experimentalHall_phys; +} + diff --git a/environments/g4py/tests/g4pytest/ExN01geom/ExN01DetectorConstruction.hh b/environments/g4py/tests/g4pytest/ExN01geom/ExN01DetectorConstruction.hh new file mode 100644 index 0000000000..2437df674a --- /dev/null +++ b/environments/g4py/tests/g4pytest/ExN01geom/ExN01DetectorConstruction.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. * +// ******************************************************************** +// +// ==================================================================== +// ExN01DetectorConstruction.hh +// +// 2005 Q +// ==================================================================== +#ifndef EXN01_DETECTOR_CONSTRUCTION_H +#define EXN01_DETECTOR_CONSTRUCTION_H + +#include "G4VUserDetectorConstruction.hh" +#include "globals.hh" + +// ==================================================================== +// +// class definition +// +// ==================================================================== +class G4LogicalVolume; +class G4VPhysicalVolume; + +#include "G4VUserDetectorConstruction.hh" + +class ExN01DetectorConstruction : public G4VUserDetectorConstruction { +public: + + ExN01DetectorConstruction(); + ~ExN01DetectorConstruction(); + + G4VPhysicalVolume* Construct(); + +private: + // Logical volumes + // + G4LogicalVolume* experimentalHall_log; + G4LogicalVolume* tracker_log; + G4LogicalVolume* calorimeterBlock_log; + G4LogicalVolume* calorimeterLayer_log; + + // Physical volumes + // + G4VPhysicalVolume* experimentalHall_phys; + G4VPhysicalVolume* calorimeterLayer_phys; + G4VPhysicalVolume* calorimeterBlock_phys; + G4VPhysicalVolume* tracker_phys; + +}; + +#endif + diff --git a/environments/g4py/tests/g4pytest/ExN01geom/__init__.py b/environments/g4py/tests/g4pytest/ExN01geom/__init__.py new file mode 100644 index 0000000000..b6ad7e2ac7 --- /dev/null +++ b/environments/g4py/tests/g4pytest/ExN01geom/__init__.py @@ -0,0 +1 @@ +from ._ExN01geom import * \ No newline at end of file diff --git a/environments/g4py/tests/g4pytest/ExN01geom/pyExN01geom.cc b/environments/g4py/tests/g4pytest/ExN01geom/pyExN01geom.cc new file mode 100644 index 0000000000..ddf290ec23 --- /dev/null +++ b/environments/g4py/tests/g4pytest/ExN01geom/pyExN01geom.cc @@ -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. * +// ******************************************************************** +// +// ==================================================================== +// pyExN01geom.cc +// +// [Qgeom] +// a site-module of Geant4Py +// +// geometry presented in ExN01 of Geant4 example +// +// 2005 Q +// ==================================================================== +#include +#include "G4RunManager.hh" +#include "ExN01DetectorConstruction.hh" + +using namespace boost::python; + +// ==================================================================== +// thin wrappers +// ==================================================================== +namespace pyExN03geom { + +void Construct() +{ + G4RunManager* runMgr= G4RunManager::GetRunManager(); + runMgr-> SetUserInitialization(new ExN01DetectorConstruction); +} + +} + +using namespace pyExN03geom; + +// ==================================================================== +// Expose to Python +// ==================================================================== + +BOOST_PYTHON_MODULE(_ExN01geom) { + + class_ > + ("ExN01DetectorConstruction", "ExN01 detector") + ; + + // --- + def("Construct", Construct); +} + diff --git a/environments/g4py/tests/g4pytest/ExN01pl/CMakeLists.txt b/environments/g4py/tests/g4pytest/ExN01pl/CMakeLists.txt new file mode 100644 index 0000000000..7f519ce7b8 --- /dev/null +++ b/environments/g4py/tests/g4pytest/ExN01pl/CMakeLists.txt @@ -0,0 +1,4 @@ +# - build library +set(_TARGET _ExN01pl) +g4pytest_add_module(${_TARGET} ExN01PhysicsList.cc pyExN01pl.cc) +target_link_libraries(${_TARGET} PRIVATE G4particles G4processes G4run) diff --git a/environments/g4py/tests/g4pytest/ExN01pl/ExN01PhysicsList.cc b/environments/g4py/tests/g4pytest/ExN01pl/ExN01PhysicsList.cc new file mode 100644 index 0000000000..f270c88385 --- /dev/null +++ b/environments/g4py/tests/g4pytest/ExN01pl/ExN01PhysicsList.cc @@ -0,0 +1,77 @@ +// +// ******************************************************************** +// * 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. * +// ******************************************************************** +// +// ==================================================================== +// ExN01PhysicsList.cc +// +// 2005 Q +// ==================================================================== +#include "ExN01PhysicsList.hh" +#include "G4ParticleTypes.hh" + +// ==================================================================== +// +// class description +// +// ==================================================================== + +//////////////////////////////////// +ExN01PhysicsList::ExN01PhysicsList() +//////////////////////////////////// +{ +} + +///////////////////////////////////// +ExN01PhysicsList::~ExN01PhysicsList() +///////////////////////////////////// +{ +} + +////////////////////////////////////////// +void ExN01PhysicsList::ConstructParticle() +////////////////////////////////////////// +{ + G4Geantino::GeantinoDefinition(); +} + +///////////////////////////////////////// +void ExN01PhysicsList::ConstructProcess() +///////////////////////////////////////// +{ + AddTransportation(); +} + +//////////////////////////////// +void ExN01PhysicsList::SetCuts() +//////////////////////////////// +{ + G4int temp = GetVerboseLevel(); + SetVerboseLevel(0); + + SetCutsWithDefault(); + + SetVerboseLevel(temp); +} + diff --git a/environments/g4py/tests/g4pytest/ExN01pl/ExN01PhysicsList.hh b/environments/g4py/tests/g4pytest/ExN01pl/ExN01PhysicsList.hh new file mode 100644 index 0000000000..69e9ca06d1 --- /dev/null +++ b/environments/g4py/tests/g4pytest/ExN01pl/ExN01PhysicsList.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. * +// ******************************************************************** +// +// ==================================================================== +// ExN01PhysicsList.hh +// +// 2005 Q +// ==================================================================== +#ifndef EXN01_PHYSICS_LIST_H +#define EXN01_PHYSICS_LIST_H + +#include "G4VUserPhysicsList.hh" +#include "globals.hh" + +// ==================================================================== +// +// class definition +// +// ==================================================================== + +class ExN01PhysicsList: public G4VUserPhysicsList { +public: + ExN01PhysicsList(); + ~ExN01PhysicsList(); + +protected: + // Construct particle and physics process + void ConstructParticle(); + void ConstructProcess(); + void SetCuts(); + +}; + +#endif diff --git a/environments/g4py/tests/g4pytest/ExN01pl/__init__.py b/environments/g4py/tests/g4pytest/ExN01pl/__init__.py new file mode 100644 index 0000000000..a0371b4b0d --- /dev/null +++ b/environments/g4py/tests/g4pytest/ExN01pl/__init__.py @@ -0,0 +1 @@ +from ._ExN01pl import * diff --git a/environments/g4py/tests/g4pytest/ExN01pl/pyExN01pl.cc b/environments/g4py/tests/g4pytest/ExN01pl/pyExN01pl.cc new file mode 100644 index 0000000000..6ce4846307 --- /dev/null +++ b/environments/g4py/tests/g4pytest/ExN01pl/pyExN01pl.cc @@ -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. * +// ******************************************************************** +// +// ==================================================================== +// pyExN01pl.cc +// +// [ExN01pl] +// a site-module of Geant4Py +// +// minimal physics list, which is presnted in ExN01 of Geant4 example +// +// 2005 Q +// ==================================================================== +#include +#include "G4RunManager.hh" +#include "ExN01PhysicsList.hh" + +using namespace boost::python; + +// ==================================================================== +// thin wrappers +// ==================================================================== +namespace pyExN01pl { + +ExN01PhysicsList* Construct() +{ + ExN01PhysicsList* pl= new ExN01PhysicsList; + + G4RunManager* runMgr= G4RunManager::GetRunManager(); + runMgr-> SetUserInitialization(pl); + + return pl; +} + +} + +using namespace pyExN01pl; + +// ==================================================================== +// Expose to Python +// ==================================================================== + +BOOST_PYTHON_MODULE(_ExN01pl) { + + class_ > + ("ExN01PhysicsList", "ExN01 physics list") + ; + + // --- + def("Construct", Construct, + return_value_policy()); + +} diff --git a/environments/g4py/tests/g4pytest/ExN03geom/CMakeLists.txt b/environments/g4py/tests/g4pytest/ExN03geom/CMakeLists.txt new file mode 100644 index 0000000000..836ecd73d5 --- /dev/null +++ b/environments/g4py/tests/g4pytest/ExN03geom/CMakeLists.txt @@ -0,0 +1,4 @@ +# - build library +set(_TARGET _ExN03geom) +g4pytest_add_module(${_TARGET} ExN03DetectorConstruction.cc ExN03DetectorMessenger.cc pyExN03geom.cc) +target_link_libraries(${_TARGET} PRIVATE G4materials G4geometry G4run) diff --git a/environments/g4py/tests/g4pytest/ExN03geom/ExN03DetectorConstruction.cc b/environments/g4py/tests/g4pytest/ExN03geom/ExN03DetectorConstruction.cc new file mode 100644 index 0000000000..b32ae99172 --- /dev/null +++ b/environments/g4py/tests/g4pytest/ExN03geom/ExN03DetectorConstruction.cc @@ -0,0 +1,473 @@ +// +// ******************************************************************** +// * 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. * +// ******************************************************************** +// +// +// +// + +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... + +#include "ExN03DetectorConstruction.hh" +#include "ExN03DetectorMessenger.hh" + +#include "G4Material.hh" +#include "G4Box.hh" +#include "G4LogicalVolume.hh" +#include "G4PVPlacement.hh" +#include "G4PVReplica.hh" +#include "G4UniformMagField.hh" + +#include "G4GeometryManager.hh" +#include "G4PhysicalVolumeStore.hh" +#include "G4LogicalVolumeStore.hh" +#include "G4SolidStore.hh" + +#include "G4VisAttributes.hh" +#include "G4Colour.hh" +#include "G4SystemOfUnits.hh" +#include "G4PhysicalConstants.hh" + +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... + +ExN03DetectorConstruction::ExN03DetectorConstruction() +:AbsorberMaterial(0),GapMaterial(0),defaultMaterial(0), + solidWorld(0),logicWorld(0),physiWorld(0), + solidCalor(0),logicCalor(0),physiCalor(0), + solidLayer(0),logicLayer(0),physiLayer(0), + solidAbsorber(0),logicAbsorber(0),physiAbsorber(0), + solidGap (0),logicGap (0),physiGap (0), + magField(0) +{ + // default parameter values of the calorimeter + AbsorberThickness = 10.*mm; + GapThickness = 5.*mm; + NbOfLayers = 10; + CalorSizeYZ = 10.*cm; + ComputeCalorParameters(); + + // materials + DefineMaterials(); + SetAbsorberMaterial("Lead"); + SetGapMaterial("liquidArgon"); + + // create commands for interactive definition of the calorimeter + detectorMessenger = new ExN03DetectorMessenger(this); +} + +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... + +ExN03DetectorConstruction::~ExN03DetectorConstruction() +{ delete detectorMessenger;} + +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... + +G4VPhysicalVolume* ExN03DetectorConstruction::Construct() +{ + return ConstructCalorimeter(); +} + +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... + +void ExN03DetectorConstruction::DefineMaterials() +{ + //This function illustrates the possible ways to define materials + +G4String symbol; //a=mass of a mole; +G4double a, z, density; //z=mean number of protons; +G4int iz, n; //iz=number of protons in an isotope; + // n=number of nucleons in an isotope; + +G4int ncomponents, natoms; +G4double abundance, fractionmass; + +// +// define Elements +// + +G4Element* H = new G4Element("Hydrogen",symbol="H" , z= 1., a= 1.01*g/mole); +G4Element* C = new G4Element("Carbon" ,symbol="C" , z= 6., a= 12.01*g/mole); +G4Element* N = new G4Element("Nitrogen",symbol="N" , z= 7., a= 14.01*g/mole); +G4Element* O = new G4Element("Oxygen" ,symbol="O" , z= 8., a= 16.00*g/mole); +G4Element* Si = new G4Element("Silicon",symbol="Si" , z= 14., a= 28.09*g/mole); + +// +// define an Element from isotopes, by relative abundance +// + +G4Isotope* U5 = new G4Isotope("U235", iz=92, n=235, a=235.01*g/mole); +G4Isotope* U8 = new G4Isotope("U238", iz=92, n=238, a=238.03*g/mole); + +G4Element* U = new G4Element("enriched Uranium",symbol="U",ncomponents=2); +U->AddIsotope(U5, abundance= 90.*perCent); +U->AddIsotope(U8, abundance= 10.*perCent); + +// +// define simple materials +// + +new G4Material("Aluminium", z=13., a=26.98*g/mole, density=2.700*g/cm3); +new G4Material("liquidArgon", z=18., a= 39.95*g/mole, density= 1.390*g/cm3); +new G4Material("Lead" , z=82., a= 207.19*g/mole, density= 11.35*g/cm3); + +// +// define a material from elements. case 1: chemical molecule +// + +G4Material* H2O = +new G4Material("Water", density= 1.000*g/cm3, ncomponents=2); +H2O->AddElement(H, natoms=2); +H2O->AddElement(O, natoms=1); +// overwrite computed meanExcitationEnergy with ICRU recommended value +H2O->GetIonisation()->SetMeanExcitationEnergy(75.0*eV); + +G4Material* Sci = +new G4Material("Scintillator", density= 1.032*g/cm3, ncomponents=2); +Sci->AddElement(C, natoms=9); +Sci->AddElement(H, natoms=10); + +G4Material* Myl = +new G4Material("Mylar", density= 1.397*g/cm3, ncomponents=3); +Myl->AddElement(C, natoms=10); +Myl->AddElement(H, natoms= 8); +Myl->AddElement(O, natoms= 4); + +G4Material* SiO2 = +new G4Material("quartz",density= 2.200*g/cm3, ncomponents=2); +SiO2->AddElement(Si, natoms=1); +SiO2->AddElement(O , natoms=2); + +// +// define a material from elements. case 2: mixture by fractional mass +// + +G4Material* Air = +new G4Material("Air" , density= 1.290*mg/cm3, ncomponents=2); +Air->AddElement(N, fractionmass=0.7); +Air->AddElement(O, fractionmass=0.3); + +// +// define a material from elements and/or others materials (mixture of mixtures) +// + +G4Material* Aerog = +new G4Material("Aerogel", density= 0.200*g/cm3, ncomponents=3); +Aerog->AddMaterial(SiO2, fractionmass=62.5*perCent); +Aerog->AddMaterial(H2O , fractionmass=37.4*perCent); +Aerog->AddElement (C , fractionmass= 0.1*perCent); + +// +// examples of gas in non STP conditions +// + +G4Material* CO2 = +new G4Material("CarbonicGas", density= 27.*mg/cm3, ncomponents=2, + kStateGas, 325.*kelvin, 50.*atmosphere); +CO2->AddElement(C, natoms=1); +CO2->AddElement(O, natoms=2); + +G4Material* steam = +new G4Material("WaterSteam", density= 0.3*mg/cm3, ncomponents=1, + kStateGas, 500.*kelvin, 2.*atmosphere); +steam->AddMaterial(H2O, fractionmass=1.); + +// +// examples of vacuum +// + +G4Material* Vacuum = +new G4Material("Galactic", z=1., a=1.01*g/mole,density= universe_mean_density, + kStateGas, 2.73*kelvin, 3.e-18*pascal); + +G4Material* beam = +new G4Material("Beam", density= 1.e-5*g/cm3, ncomponents=1, + kStateGas, STP_Temperature, 2.e-2*bar); +beam->AddMaterial(Air, fractionmass=1.); + +G4cout << *(G4Material::GetMaterialTable()) << G4endl; + +//default materials of the World +defaultMaterial = Vacuum; +} + +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... + +G4VPhysicalVolume* ExN03DetectorConstruction::ConstructCalorimeter() +{ + + // Clean old geometry, if any + // + G4GeometryManager::GetInstance()->OpenGeometry(); + G4PhysicalVolumeStore::GetInstance()->Clean(); + G4LogicalVolumeStore::GetInstance()->Clean(); + G4SolidStore::GetInstance()->Clean(); + + // complete the Calor parameters definition + ComputeCalorParameters(); + + // + // World + // + solidWorld = new G4Box("World", //its name + WorldSizeX/2,WorldSizeYZ/2,WorldSizeYZ/2); //its size + + logicWorld = new G4LogicalVolume(solidWorld, //its solid + defaultMaterial, //its material + "World"); //its name + + 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 + + // + // Calorimeter + // + solidCalor=0; logicCalor=0; physiCalor=0; + solidLayer=0; logicLayer=0; physiLayer=0; + + if (CalorThickness > 0.) + { solidCalor = new G4Box("Calorimeter", //its name + CalorThickness/2,CalorSizeYZ/2,CalorSizeYZ/2);//size + + logicCalor = new G4LogicalVolume(solidCalor, //its solid + defaultMaterial, //its material + "Calorimeter"); //its name + + physiCalor = new G4PVPlacement(0, //no rotation + G4ThreeVector(), //at (0,0,0) + logicCalor, //its logical volume + "Calorimeter", //its name + logicWorld, //its mother volume + false, //no boolean operation + 0); //copy number + + // + // Layer + // + solidLayer = new G4Box("Layer", //its name + LayerThickness/2,CalorSizeYZ/2,CalorSizeYZ/2); //size + + logicLayer = new G4LogicalVolume(solidLayer, //its solid + defaultMaterial, //its material + "Layer"); //its name + if (NbOfLayers > 1) + physiLayer = new G4PVReplica("Layer", //its name + logicLayer, //its logical volume + logicCalor, //its mother + kXAxis, //axis of replication + NbOfLayers, //number of replica + LayerThickness); //witdth of replica + else + physiLayer = new G4PVPlacement(0, //no rotation + G4ThreeVector(), //at (0,0,0) + logicLayer, //its logical volume + "Layer", //its name + logicCalor, //its mother volume + false, //no boolean operation + 0); //copy number + } + + // + // Absorber + // + solidAbsorber=0; logicAbsorber=0; physiAbsorber=0; + + if (AbsorberThickness > 0.) + { solidAbsorber = new G4Box("Absorber", //its name + AbsorberThickness/2,CalorSizeYZ/2,CalorSizeYZ/2); + + logicAbsorber = new G4LogicalVolume(solidAbsorber, //its solid + AbsorberMaterial, //its material + AbsorberMaterial->GetName()); //name + + physiAbsorber = new G4PVPlacement(0, //no rotation + G4ThreeVector(-GapThickness/2,0.,0.), //its position + logicAbsorber, //its logical volume + AbsorberMaterial->GetName(), //its name + logicLayer, //its mother + false, //no boulean operat + 0); //copy number + + } + + // + // Gap + // + solidGap=0; logicGap=0; physiGap=0; + + if (GapThickness > 0.) + { solidGap = new G4Box("Gap", + GapThickness/2,CalorSizeYZ/2,CalorSizeYZ/2); + + logicGap = new G4LogicalVolume(solidGap, + GapMaterial, + GapMaterial->GetName()); + + physiGap = new G4PVPlacement(0, //no rotation + G4ThreeVector(AbsorberThickness/2,0.,0.), //its position + logicGap, //its logical volume + GapMaterial->GetName(), //its name + logicLayer, //its mother + false, //no boulean operat + 0); //copy number + } + + PrintCalorParameters(); + + // + // Visualization attributes + // + logicWorld->SetVisAttributes (G4VisAttributes::GetInvisible()); + + G4VisAttributes* simpleBoxVisAtt= new G4VisAttributes(G4Colour(1.0,1.0,1.0)); + simpleBoxVisAtt->SetVisibility(true); + logicCalor->SetVisAttributes(simpleBoxVisAtt); + + /* + // Below are vis attributes that permits someone to test / play + // with the interactive expansion / contraction geometry system of the + // vis/OpenInventor driver : + {G4VisAttributes* simpleBoxVisAtt= new G4VisAttributes(G4Colour(1.0,1.0,0.0)); + simpleBoxVisAtt->SetVisibility(true); + delete logicCalor->GetVisAttributes(); + logicCalor->SetVisAttributes(simpleBoxVisAtt);} + + {G4VisAttributes* atb= new G4VisAttributes(G4Colour(1.0,0.0,0.0)); + logicLayer->SetVisAttributes(atb);} + + {G4VisAttributes* atb= new G4VisAttributes(G4Colour(0.0,1.0,0.0)); + atb->SetForceSolid(true); + logicAbsorber->SetVisAttributes(atb);} + + {//Set opacity = 0.2 then transparency = 1 - 0.2 = 0.8 + G4VisAttributes* atb= new G4VisAttributes(G4Colour(0.0,0.0,1.0,0.2)); + atb->SetForceSolid(true); + logicGap->SetVisAttributes(atb);} + */ + + // + //always return the physical World + // + return physiWorld; +} + +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... + +void ExN03DetectorConstruction::PrintCalorParameters() +{ + G4cout << "\n------------------------------------------------------------" + << "\n---> The calorimeter is " << NbOfLayers << " layers of: [ " + << AbsorberThickness/mm << "mm of " << AbsorberMaterial->GetName() + << " + " + << GapThickness/mm << "mm of " << GapMaterial->GetName() << " ] " + << "\n------------------------------------------------------------\n"; +} + +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... + +void ExN03DetectorConstruction::SetAbsorberMaterial(G4String materialChoice) +{ + // search the material by its name + G4Material* pttoMaterial = G4Material::GetMaterial(materialChoice); + if (pttoMaterial) AbsorberMaterial = pttoMaterial; +} + +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... + +void ExN03DetectorConstruction::SetGapMaterial(G4String materialChoice) +{ + // search the material by its name + G4Material* pttoMaterial = G4Material::GetMaterial(materialChoice); + if (pttoMaterial) GapMaterial = pttoMaterial; +} + +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... + +void ExN03DetectorConstruction::SetAbsorberThickness(G4double val) +{ + // change Absorber thickness and recompute the calorimeter parameters + AbsorberThickness = val; +} + +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... + +void ExN03DetectorConstruction::SetGapThickness(G4double val) +{ + // change Gap thickness and recompute the calorimeter parameters + GapThickness = val; +} + +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... + +void ExN03DetectorConstruction::SetCalorSizeYZ(G4double val) +{ + // change the transverse size and recompute the calorimeter parameters + CalorSizeYZ = val; +} + +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... + +void ExN03DetectorConstruction::SetNbOfLayers(G4int val) +{ + NbOfLayers = val; +} + +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... + +#include "G4FieldManager.hh" +#include "G4TransportationManager.hh" + +void ExN03DetectorConstruction::SetMagField(G4double fieldValue) +{ + //apply a global uniform magnetic field along Z axis + G4FieldManager* fieldMgr + = G4TransportationManager::GetTransportationManager()->GetFieldManager(); + + if(magField) delete magField; //delete the existing magn field + + if(fieldValue!=0.) // create a new one if non nul + { magField = new G4UniformMagField(G4ThreeVector(0.,0.,fieldValue)); + fieldMgr->SetDetectorField(magField); + fieldMgr->CreateChordFinder(magField); + } else { + magField = 0; + fieldMgr->SetDetectorField(magField); + } +} + +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... + +#include "G4RunManager.hh" + +void ExN03DetectorConstruction::UpdateGeometry() +{ + G4RunManager::GetRunManager()->DefineWorldVolume(ConstructCalorimeter()); +} + +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... diff --git a/environments/g4py/tests/g4pytest/ExN03geom/ExN03DetectorConstruction.hh b/environments/g4py/tests/g4pytest/ExN03geom/ExN03DetectorConstruction.hh new file mode 100644 index 0000000000..f72027d868 --- /dev/null +++ b/environments/g4py/tests/g4pytest/ExN03geom/ExN03DetectorConstruction.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. * +// ******************************************************************** +// +// +// +// + +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... + +#ifndef ExN03DetectorConstruction_h +#define ExN03DetectorConstruction_h 1 + +#include "G4VUserDetectorConstruction.hh" +#include "globals.hh" + +class G4Box; +class G4LogicalVolume; +class G4VPhysicalVolume; +class G4Material; +class G4UniformMagField; +class ExN03DetectorMessenger; + +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... + +class ExN03DetectorConstruction : public G4VUserDetectorConstruction +{ + public: + + ExN03DetectorConstruction(); + ~ExN03DetectorConstruction(); + + public: + + void SetAbsorberMaterial (G4String); + void SetAbsorberThickness(G4double); + + void SetGapMaterial (G4String); + void SetGapThickness(G4double); + + void SetCalorSizeYZ(G4double); + void SetNbOfLayers (G4int); + + void SetMagField(G4double); + + G4VPhysicalVolume* Construct(); + + void UpdateGeometry(); + + public: + + void PrintCalorParameters(); + + G4double GetWorldSizeX() {return WorldSizeX;}; + G4double GetWorldSizeYZ() {return WorldSizeYZ;}; + + G4double GetCalorThickness() {return CalorThickness;}; + G4double GetCalorSizeYZ() {return CalorSizeYZ;}; + + G4int GetNbOfLayers() {return NbOfLayers;}; + + G4Material* GetAbsorberMaterial() {return AbsorberMaterial;}; + G4double GetAbsorberThickness() {return AbsorberThickness;}; + + G4Material* GetGapMaterial() {return GapMaterial;}; + G4double GetGapThickness() {return GapThickness;}; + + const G4VPhysicalVolume* GetphysiWorld() {return physiWorld;}; + const G4VPhysicalVolume* GetAbsorber() {return physiAbsorber;}; + const G4VPhysicalVolume* GetGap() {return physiGap;}; + + private: + + G4Material* AbsorberMaterial; + G4double AbsorberThickness; + + G4Material* GapMaterial; + G4double GapThickness; + + G4int NbOfLayers; + G4double LayerThickness; + + G4double CalorSizeYZ; + G4double CalorThickness; + + G4Material* defaultMaterial; + G4double WorldSizeYZ; + G4double WorldSizeX; + + G4Box* solidWorld; //pointer to the solid World + G4LogicalVolume* logicWorld; //pointer to the logical World + G4VPhysicalVolume* physiWorld; //pointer to the physical World + + G4Box* solidCalor; //pointer to the solid Calor + G4LogicalVolume* logicCalor; //pointer to the logical Calor + G4VPhysicalVolume* physiCalor; //pointer to the physical Calor + + G4Box* solidLayer; //pointer to the solid Layer + G4LogicalVolume* logicLayer; //pointer to the logical Layer + G4VPhysicalVolume* physiLayer; //pointer to the physical Layer + + G4Box* solidAbsorber; //pointer to the solid Absorber + G4LogicalVolume* logicAbsorber; //pointer to the logical Absorber + G4VPhysicalVolume* physiAbsorber; //pointer to the physical Absorber + + G4Box* solidGap; //pointer to the solid Gap + G4LogicalVolume* logicGap; //pointer to the logical Gap + G4VPhysicalVolume* physiGap; //pointer to the physical Gap + + G4UniformMagField* magField; //pointer to the magnetic field + + ExN03DetectorMessenger* detectorMessenger; //pointer to the Messenger + + private: + + void DefineMaterials(); + void ComputeCalorParameters(); + G4VPhysicalVolume* ConstructCalorimeter(); +}; + +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... + +inline void ExN03DetectorConstruction::ComputeCalorParameters() +{ + // Compute derived parameters of the calorimeter + LayerThickness = AbsorberThickness + GapThickness; + CalorThickness = NbOfLayers*LayerThickness; + + WorldSizeX = 1.2*CalorThickness; WorldSizeYZ = 1.2*CalorSizeYZ; +} + +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... + +#endif + diff --git a/environments/g4py/tests/g4pytest/ExN03geom/ExN03DetectorMessenger.cc b/environments/g4py/tests/g4pytest/ExN03geom/ExN03DetectorMessenger.cc new file mode 100644 index 0000000000..6759778215 --- /dev/null +++ b/environments/g4py/tests/g4pytest/ExN03geom/ExN03DetectorMessenger.cc @@ -0,0 +1,148 @@ +// +// ******************************************************************** +// * 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. * +// ******************************************************************** +// +// +// +// + +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... + +#include "ExN03DetectorMessenger.hh" + +#include "ExN03DetectorConstruction.hh" +#include "G4UIdirectory.hh" +#include "G4UIcmdWithAString.hh" +#include "G4UIcmdWithAnInteger.hh" +#include "G4UIcmdWithADoubleAndUnit.hh" +#include "G4UIcmdWithoutParameter.hh" + +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... + +ExN03DetectorMessenger::ExN03DetectorMessenger( + ExN03DetectorConstruction* ExN03Det) +:ExN03Detector(ExN03Det) +{ + N03Dir = new G4UIdirectory("/N03/"); + N03Dir->SetGuidance("UI commands of this example"); + + detDir = new G4UIdirectory("/N03/det/"); + detDir->SetGuidance("detector control"); + + AbsMaterCmd = new G4UIcmdWithAString("/N03/det/setAbsMat",this); + AbsMaterCmd->SetGuidance("Select Material of the Absorber."); + AbsMaterCmd->SetParameterName("choice",false); + AbsMaterCmd->AvailableForStates(G4State_PreInit,G4State_Idle); + + GapMaterCmd = new G4UIcmdWithAString("/N03/det/setGapMat",this); + GapMaterCmd->SetGuidance("Select Material of the Gap."); + GapMaterCmd->SetParameterName("choice",false); + GapMaterCmd->AvailableForStates(G4State_PreInit,G4State_Idle); + + AbsThickCmd = new G4UIcmdWithADoubleAndUnit("/N03/det/setAbsThick",this); + AbsThickCmd->SetGuidance("Set Thickness of the Absorber"); + AbsThickCmd->SetParameterName("Size",false); + AbsThickCmd->SetRange("Size>=0."); + AbsThickCmd->SetUnitCategory("Length"); + AbsThickCmd->AvailableForStates(G4State_PreInit,G4State_Idle); + + GapThickCmd = new G4UIcmdWithADoubleAndUnit("/N03/det/setGapThick",this); + GapThickCmd->SetGuidance("Set Thickness of the Gap"); + GapThickCmd->SetParameterName("Size",false); + GapThickCmd->SetRange("Size>=0."); + GapThickCmd->SetUnitCategory("Length"); + GapThickCmd->AvailableForStates(G4State_PreInit,G4State_Idle); + + SizeYZCmd = new G4UIcmdWithADoubleAndUnit("/N03/det/setSizeYZ",this); + SizeYZCmd->SetGuidance("Set tranverse size of the calorimeter"); + SizeYZCmd->SetParameterName("Size",false); + SizeYZCmd->SetRange("Size>0."); + SizeYZCmd->SetUnitCategory("Length"); + SizeYZCmd->AvailableForStates(G4State_PreInit,G4State_Idle); + + NbLayersCmd = new G4UIcmdWithAnInteger("/N03/det/setNbOfLayers",this); + NbLayersCmd->SetGuidance("Set number of layers."); + NbLayersCmd->SetParameterName("NbLayers",false); + NbLayersCmd->SetRange("NbLayers>0 && NbLayers<500"); + NbLayersCmd->AvailableForStates(G4State_PreInit,G4State_Idle); + + UpdateCmd = new G4UIcmdWithoutParameter("/N03/det/update",this); + UpdateCmd->SetGuidance("Update calorimeter geometry."); + UpdateCmd->SetGuidance("This command MUST be applied before \"beamOn\" "); + UpdateCmd->SetGuidance("if you changed geometrical value(s)."); + UpdateCmd->AvailableForStates(G4State_Idle); + + MagFieldCmd = new G4UIcmdWithADoubleAndUnit("/N03/det/setField",this); + MagFieldCmd->SetGuidance("Define magnetic field."); + MagFieldCmd->SetGuidance("Magnetic field will be in Z direction."); + MagFieldCmd->SetParameterName("Bz",false); + MagFieldCmd->SetUnitCategory("Magnetic flux density"); + MagFieldCmd->AvailableForStates(G4State_PreInit,G4State_Idle); +} + +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... + +ExN03DetectorMessenger::~ExN03DetectorMessenger() +{ + delete NbLayersCmd; + delete AbsMaterCmd; delete GapMaterCmd; + delete AbsThickCmd; delete GapThickCmd; + delete SizeYZCmd; delete UpdateCmd; + delete MagFieldCmd; + delete detDir; + delete N03Dir; +} + +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... + +void ExN03DetectorMessenger::SetNewValue(G4UIcommand* command,G4String newValue) +{ + if( command == AbsMaterCmd ) + { ExN03Detector->SetAbsorberMaterial(newValue);} + + if( command == GapMaterCmd ) + { ExN03Detector->SetGapMaterial(newValue);} + + if( command == AbsThickCmd ) + { ExN03Detector->SetAbsorberThickness(AbsThickCmd + ->GetNewDoubleValue(newValue));} + + if( command == GapThickCmd ) + { ExN03Detector->SetGapThickness(GapThickCmd->GetNewDoubleValue(newValue));} + + if( command == SizeYZCmd ) + { ExN03Detector->SetCalorSizeYZ(SizeYZCmd->GetNewDoubleValue(newValue));} + + if( command == NbLayersCmd ) + { ExN03Detector->SetNbOfLayers(NbLayersCmd->GetNewIntValue(newValue));} + + if( command == UpdateCmd ) + { ExN03Detector->UpdateGeometry(); } + + if( command == MagFieldCmd ) + { ExN03Detector->SetMagField(MagFieldCmd->GetNewDoubleValue(newValue));} +} + +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... diff --git a/environments/g4py/tests/g4pytest/ExN03geom/ExN03DetectorMessenger.hh b/environments/g4py/tests/g4pytest/ExN03geom/ExN03DetectorMessenger.hh new file mode 100644 index 0000000000..40ec817aaf --- /dev/null +++ b/environments/g4py/tests/g4pytest/ExN03geom/ExN03DetectorMessenger.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. * +// ******************************************************************** +// +// +// +// + +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... + +#ifndef ExN03DetectorMessenger_h +#define ExN03DetectorMessenger_h 1 + +#include "globals.hh" +#include "G4UImessenger.hh" + +class ExN03DetectorConstruction; +class G4UIdirectory; +class G4UIcmdWithAString; +class G4UIcmdWithAnInteger; +class G4UIcmdWithADoubleAndUnit; +class G4UIcmdWithoutParameter; + +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... + +class ExN03DetectorMessenger: public G4UImessenger +{ + public: + ExN03DetectorMessenger(ExN03DetectorConstruction* ); + ~ExN03DetectorMessenger(); + + void SetNewValue(G4UIcommand*, G4String); + + private: + ExN03DetectorConstruction* ExN03Detector; + + G4UIdirectory* N03Dir; + G4UIdirectory* detDir; + G4UIcmdWithAString* AbsMaterCmd; + G4UIcmdWithAString* GapMaterCmd; + G4UIcmdWithADoubleAndUnit* AbsThickCmd; + G4UIcmdWithADoubleAndUnit* GapThickCmd; + G4UIcmdWithADoubleAndUnit* SizeYZCmd; + G4UIcmdWithAnInteger* NbLayersCmd; + G4UIcmdWithADoubleAndUnit* MagFieldCmd; + G4UIcmdWithoutParameter* UpdateCmd; +}; + +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... + +#endif + diff --git a/environments/g4py/tests/g4pytest/ExN03geom/__init__.py b/environments/g4py/tests/g4pytest/ExN03geom/__init__.py new file mode 100644 index 0000000000..ae5f5fd590 --- /dev/null +++ b/environments/g4py/tests/g4pytest/ExN03geom/__init__.py @@ -0,0 +1 @@ +from ._ExN03geom import * \ No newline at end of file diff --git a/environments/g4py/tests/g4pytest/ExN03geom/pyExN03geom.cc b/environments/g4py/tests/g4pytest/ExN03geom/pyExN03geom.cc new file mode 100644 index 0000000000..c2d10ffb5e --- /dev/null +++ b/environments/g4py/tests/g4pytest/ExN03geom/pyExN03geom.cc @@ -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. * +// ******************************************************************** +// +// ==================================================================== +// pyExN03geom.cc +// +// [ExN03geom] +// a site-module of Geant4Py +// +// geometry presented in ExN03 of Geant4 example +// +// 2005 Q +// ==================================================================== +#include +#include "G4RunManager.hh" +#include "ExN03DetectorConstruction.hh" + +using namespace boost::python; + +typedef ExN03DetectorConstruction XXX; + +// ==================================================================== +// thin wrappers +// ==================================================================== +namespace pyExN03geom { + +void Construct() +{ + G4RunManager* runMgr= G4RunManager::GetRunManager(); + runMgr-> SetUserInitialization(new ExN03DetectorConstruction); +} + +} + +using namespace pyExN03geom; + +// ==================================================================== +// Expose to Python +// ==================================================================== + +BOOST_PYTHON_MODULE(_ExN03geom) { + class_ > + ("ExN03DetectorConstruction", "ExN03 detector") + // --- + .def("SetAbsorberMaterial", &XXX::SetAbsorberMaterial) + .def("SetAbsorberThickness", &XXX::SetAbsorberThickness) + .def("SetGapMaterial", &XXX::SetGapMaterial) + .def("SetGapThickness", &XXX::SetGapThickness) + .def("SetCalorSizeYZ", &XXX::SetCalorSizeYZ) + .def("SetNbOfLayers", &XXX::SetNbOfLayers) + .def("SetMagField", &XXX::SetMagField) + // --- + .def("GetWorldSizeX", &XXX::GetWorldSizeX) + .def("GetWorldSizeYZ", &XXX::GetWorldSizeYZ) + .def("GetCalorThickness", &XXX::GetCalorThickness) + .def("GetCalorSizeYZ", &XXX::GetCalorSizeYZ) + .def("GetNbOfLayers", &XXX::GetNbOfLayers) + .def("GetAbsorberMaterial", &XXX::GetAbsorberMaterial, + return_value_policy()) + .def("GetAbsorberThickness", &XXX::GetAbsorberThickness) + .def("GetGapMaterial", &XXX::GetGapMaterial, + return_value_policy()) + .def("GetGapThickness", &XXX::GetGapThickness) + .def("GetphysiWorld", &XXX::GetphysiWorld, + return_value_policy()) + .def("GetAbsorber", &XXX::GetAbsorber, + return_value_policy()) + .def("GetGap", &XXX::GetGap, + return_value_policy()) + // --- + .def("UpdateGeometry", &XXX::UpdateGeometry) + .def("PrintCalorParameters", &XXX::PrintCalorParameters) + ; + + // --- + def("Construct", Construct); +} + diff --git a/environments/g4py/tests/g4pytest/MCScore/mcscore.py b/environments/g4py/tests/g4pytest/MCScore/mcscore.py new file mode 100644 index 0000000000..eb9321cb64 --- /dev/null +++ b/environments/g4py/tests/g4pytest/MCScore/mcscore.py @@ -0,0 +1,136 @@ +""" +Python module (Python3) + +This module provides classes and functions for scoring reactions + + [C] MCVertex: + [C] MCParticle: + [f] read_next_vertex(stream): + + Q, 2006 +""" +import string +from Geant4.hepunit import * + +# ================================================================== +# public symbols +# ================================================================== +__all__ = [ 'MCParticle', 'MCVertex', 'read_next_vertex' ] + + +# ================================================================== +# class definition +# ================================================================== + +# ------------------------------------------------------------------ +# MCParticle +# ------------------------------------------------------------------ +class MCParticle: + "MC particle" + def __init__(self, aname, aZ, aA, akE, apx, apy, apz): + self.name = aname + self.Z = aZ + self.A = aA + self.kineticE = akE + self.px = apx + self.py = apy + self.pz = apz + + def printout(self): + print("--- particle: %s, Z=%2d, A=%2d, kE=%g" % \ + (self.name, self.Z, self.A, self.kineticE/MeV)) + +# ------------------------------------------------------------------ +# MCVertex +# ------------------------------------------------------------------ +class MCVertex : + "MC vertex" + def __init__(self, ax, ay, az): + self.x = ax + self.y = ay + self.z = az + self.nparticle = 0 + self.particle_list = [] + + def append_particle(self, aparticle): + self.particle_list.append(aparticle) + self.nparticle= self.nparticle+1 + + def printout(self): + print("@@@ vertex: x=(%g,%g,%g) Nsec=%3d" % \ + (self.x/cm, self.y/cm, self.z/cm, self.nparticle)) + for p in self.particle_list: + p.printout() + + def dump_vertex(self, stream): + aline = "%g %g %g %d\n" % \ + (self.x/m, self.y/m, self.z/m, self.nparticle) + stream.write(aline) + for p in self.particle_list: + aline = " %s %d %d %g %g %g %g\n" % \ + (p.name, p.Z, p.A, p.kineticE/MeV, p.px/MeV, p.py/MeV, p.pz/MeV) + stream.write(aline) + + def __del__(self): + np = len(self.particle_list) + del self.particle_list[0:np] + + +# ================================================================== +# I/O interface +# ================================================================== +def read_next_vertex(stream): + "read next vertex from a file stream" + line= stream.readline() + if line == "": # EOF + return 0 + + # reading vertex + data = line.split() + x = string.atof(data[0]) * m + y = string.atof(data[1]) * m + z = string.atof(data[2]) * m + nsec = string.atoi(data[3]) + + vertex = MCVertex(x,y,z) + + # reading particles + for p in range(0, nsec): + data = stream.readline().split() + pname = data[0] + Z = string.atoi(data[1]) + A = string.atoi(data[2]) + kE = string.atof(data[3]) * MeV + px = string.atof(data[4]) * MeV + py = string.atof(data[5]) * MeV + pz = string.atof(data[6]) * MeV + + particle = MCParticle(pname, Z, A, kE, px, py, pz) + vertex.append_particle(particle) + + return vertex + + +# ================================================================== +# test +# ================================================================== +def test(): + f = open("reaction.dat") + f.seek(0) + + while(1): + vertex = read_next_vertex(f) + if vertex == 0: + break + vertex.printout() + del vertex + f.close() + print(">>> EOF") + + +# ================================================================== +# main +# ================================================================== +if __name__ == "__main__": + test() + diff --git a/environments/g4py/tests/g4pytest/MCScore/mcscorerootio.py b/environments/g4py/tests/g4pytest/MCScore/mcscorerootio.py new file mode 100644 index 0000000000..d3f1130356 --- /dev/null +++ b/environments/g4py/tests/g4pytest/MCScore/mcscorerootio.py @@ -0,0 +1,189 @@ +""" +Python module + +This module provides ROOT IO interface for MCScore data + + [C] MCScoreROOTIO + [f] loop_tree(tfile, analyze_vertex): + + Q, 2006 +""" +from array import array +import string +from Geant4.hepunit import * +import mcscore +import ROOT + +# ================================================================== +# public symbols +# ================================================================== +__all__ = [ 'MCScoreROOTIO', 'loop_tree' ] + + +# ================================================================== +# class definition +# ================================================================== +# ------------------------------------------------------------------ +# MCScoreROOTIO +# ------------------------------------------------------------------ +class MCScoreROOTIO: + "ROOT IO interface for MCScore" + def __init__(self, bsize=250): + self.maxparticle = bsize # buffer size for #particles/vertex + + # ------------------------------------------------------------------ + def define_tree(self): + "define ROOT tree" + # defining tree header... + self.vtree = ROOT.TTree('vertex', 'mc vertex') + self.ptree = ROOT.TTree('particle', 'mc particle') + + # vertex... + self.a_x = array('d', [0.]); self.vtree.Branch('x', self.a_x, 'x/d') + self.a_y = array('d', [0.]); self.vtree.Branch('y', self.a_y, 'y/d') + self.a_z = array('d', [0.]); self.vtree.Branch('z', self.a_z, 'z/d') + + #global a_np, a_namelist, a_Z, a_A, a_ke, a_px, a_py, a_pz + self.a_np = array('i', [0]); self.ptree.Branch('np', self.a_np, 'np/i') + + self.a_namelist = array('c', self.maxparticle*10*['\0']) + # 10 characters/particle + self.ptree.Branch('namelist', self.a_namelist, 'namelist/C') + + self.a_Z = array('i', self.maxparticle*[0]) + self.ptree.Branch('Z', self.a_Z, 'Z[np]/I') + + self.a_A = array('i', self.maxparticle*[0]) + self.ptree.Branch('A', self.a_A, 'A[np]/i') + + self.a_ke = array('d', self.maxparticle*[0.]) + self.ptree.Branch('kE', self.a_ke, 'kE[np]/d') + + self.a_px = array('d', self.maxparticle*[0.]) + self.ptree.Branch('px', self.a_px, 'px[np]/d') + + self.a_py = array('d', self.maxparticle*[0.]) + self.ptree.Branch('py', self.a_py, 'py[np]/d') + + self.a_pz = array('d', self.maxparticle*[0.]) + self.ptree.Branch('pz', self.a_pz, 'pz[np]/d') + + # ------------------------------------------------------------------ + def fill_tree(self, vertex): + "fill vertex information to ROOT tree" + # ------------------------------------------------------------------ + def push_pname(i0, pname): # local function + n = len(pname) + for i in xrange(n): + self.a_namelist[i0+i] = pname[i] + self.a_namelist[i0+n] = ' ' + + self.a_x[0] = vertex.x + self.a_y[0] = vertex.y + self.a_z[0] = vertex.z + self.vtree.Fill() + + if vertex.nparticle > self.maxparticle: + raise """ + *** buffer overflow in #particles/vertex. + *** please increment buffersize in MCScoreROOTIO(bsize). + """, self.maxparticle + + idx_namelist = 0 + self.a_np[0] = vertex.nparticle + for ip in range(vertex.nparticle): + particle = vertex.particle_list[ip] + push_pname(idx_namelist, particle.name) + idx_namelist += (len(particle.name)+1) + self.a_Z[ip] = particle.Z + self.a_A[ip] = particle.A + self.a_ke[ip] = particle.kineticE + self.a_px[ip] = particle.px + self.a_py[ip] = particle.py + self.a_pz[ip] = particle.pz + + self.a_namelist[idx_namelist] = '\0' + self.ptree.Fill() + + +# ================================================================== +# functions +# ================================================================== +def loop_tree(tfile, analyze_vertex): + """ + loop ROOT tree in a ROOT file. + * analyze_vertex: user function : analyze_vertex(MCVertex) + """ + avtree = tfile.Get("vertex") + aptree = tfile.Get("particle") + + # reading vertex... + n_vertex = avtree.GetEntries() + for ivtx in xrange(n_vertex): + avtree.GetEntry(ivtx) + aptree.GetEntry(ivtx) + + # vertex + vertex = MCScore.MCVertex(avtree.x, avtree.y, avtree.z) + + # reading secondary particles... + nsec = aptree.np + namelist = aptree.namelist + pname = namelist.split() + for ip in xrange(nsec): + particle = MCScore.MCParticle(pname[ip], aptree.Z[ip], aptree.A[ip], + aptree.kE[ip], aptree.px[ip], + aptree.py[ip], aptree.pz[ip]) + vertex.append_particle(particle) + + analyze_vertex(vertex) + + return n_vertex + + +# ================================================================== +# test +# ================================================================== +def test_t2root(): + g = ROOT.TFile("reaction.root", 'recreate') + + rootio = MCScoreROOTIO() + rootio.define_tree() + + f = open("reaction.dat") + f.seek(0) + + while(1): + vertex = MCScore.read_next_vertex(f) + if vertex == 0: + break + + # filling ... + rootio.fill_tree(vertex) + + del vertex + + print ">>> EOF" + f.close() + + # closing ROOT file + g.Write() + g.Close() + +# ------------------------------------------------------------------ +def test_loop(): + def my_analysis(vertex): + vertex.printout() + + f = ROOT.TFile("reaction.root", 'read') + nv = loop_tree(f, my_analysis) + print "*** # of vertex= ", nv + + +# ================================================================== +# main +# ================================================================== +if __name__ == "__main__": + test_t2root() + test_loop() + diff --git a/environments/g4py/tests/g4pytest/MCScore/reaction.dat b/environments/g4py/tests/g4pytest/MCScore/reaction.dat new file mode 100644 index 0000000000..edc6e64f25 --- /dev/null +++ b/environments/g4py/tests/g4pytest/MCScore/reaction.dat @@ -0,0 +1,1842 @@ +0 0 -0.0305023 38 + proton 1 1 1000 0 0 1696.04 + proton 1 1 129.268 63.2281 -276.735 -422.739 + proton 1 1 111.814 34.3858 -242.184 403.102 + proton 1 1 82.1695 -236.712 94.2294 309.895 + neutron 0 1 74.3269 110.42 -247.06 268.26 + proton 1 1 44.7926 -124.531 251.567 85.2512 + neutron 0 1 44.511 -167.561 97.6229 -219.126 + proton 1 1 21.6735 -109.453 -139.936 -97.8724 + neutron 0 1 20.6685 124.985 -151.837 -24.2931 + neutron 0 1 19.8292 180.072 41.4736 -59.2368 + neutron 0 1 17.1647 144.898 77.0015 74.9989 + proton 1 1 14.2603 86.8485 138.55 14.9869 + neutron 0 1 8.81332 -66.3887 39.6594 103.241 + neutron 0 1 8.72505 -120.6 -36.3695 24.586 + neutron 0 1 5.00497 5.93651 16.3492 -95.538 + pi0 0 0 4.70288 -5.35245 -35.4667 2.26739 + neutron 0 1 4.62225 49.0102 -63.7755 47.3061 + neutron 0 1 4.48452 -4.04534 56.6136 -72.2886 + neutron 0 1 4.4182 -8.41472 51.6727 74.7063 + neutron 0 1 4.33618 -29.8664 -13.4453 -84.2275 + neutron 0 1 4.26413 70.3882 -46.7754 29.8092 + neutron 0 1 3.93701 27.6721 76.9943 -26.8286 + neutron 0 1 2.90508 -32.7165 4.86698 66.1318 + neutron 0 1 2.7312 -27.372 -57.9427 32.1429 + neutron 0 1 1.93394 21.5104 56.0088 -6.17988 + neutron 0 1 1.14687 -7.1144 -43.8711 13.4591 + gamma 0 0 0.917356 0.279188 -0.173667 0.856409 + neutron 0 1 0.833069 -32.0686 -18.5144 -13.9629 + gamma 0 0 0.643895 -0.382244 0.169259 0.489736 + neutron 0 1 0.562189 11.9617 -20.913 21.8244 + neutron 0 1 0.48924 7.09163 1.57869 -29.4415 + neutron 0 1 0.300866 15.105 6.83708 -17.0455 + neutron 0 1 0.182086 11.2883 -13.1121 -6.54553 + neutron 0 1 0.176325 5.08395 15.104 8.79729 + gamma 0 0 0.157846 0.150406 0.0125644 -0.0462096 + alpha 2 4 3.8739 -114.48 112.613 55.7415 + alpha 2 4 2.39579 40.929 73.5402 103.84 + Yb160[0.0] 70 160 4.43207 75.8139 195.65 1129.72 +0 0 -0.0414305 27 + proton 1 1 1000 0 0 1696.04 + proton 1 1 430.313 460.692 127.735 874.137 + proton 1 1 222.668 -51.8758 -28.1707 681.134 + proton 1 1 96.9347 370.567 -210.029 -99.3302 + neutron 0 1 28.701 -189.926 7.78062 136.472 + proton 1 1 27.176 -181.127 -106.335 87.3004 + proton 1 1 11.5799 -64.529 132.284 -14.1802 + neutron 0 1 11.2564 50.4159 -33.6421 132.685 + neutron 0 1 10.3315 3.34717 139.549 5.99554 + neutron 0 1 6.91773 -5.99949 2.85351 -114.031 + neutron 0 1 3.31254 73.404 -26.0186 13.0595 + gamma 0 0 2.45819 0.13254 -2.02832 1.3824 + gamma 0 0 1.72781 -0.317077 1.03555 1.34626 + neutron 0 1 1.67011 -39.988 21.2127 -33.0475 + neutron 0 1 1.66598 40.8877 13.3526 35.8228 + gamma 0 0 1.49572 -0.70336 -0.474581 1.23176 + gamma 0 0 1.2594 -1.17736 0.313256 0.319032 + neutron 0 1 1.12877 -41.43 19.7894 3.78324 + neutron 0 1 0.825729 14.8311 -9.15606 -35.3347 + neutron 0 1 0.800743 -22.8961 18.2172 -25.4803 + neutron 0 1 0.795167 -30.7879 -20.4541 -11.3397 + gamma 0 0 0.62935 -0.107782 0.619122 -0.033952 + neutron 0 1 0.539156 20.9258 -3.69161 23.7048 + neutron 0 1 0.487198 -26.3143 7.93839 -12.6605 + neutron 0 1 0.344635 -13.1302 -8.77096 -19.96 + neutron 0 1 0.0888052 12.6351 2.12594 -1.64934 + Re178[0.0] 75 178 0.449053 -377.531 -46.0358 64.7126 +0 0 0.0137304 29 + proton 1 1 1000 0 0 1696.04 + pi0 0 0 375.32 16.1036 94.8819 482.619 + proton 1 1 237.972 299.56 272.31 582.5 + proton 1 1 27.2745 -206.634 -43.5755 85.6114 + proton 1 1 15.4573 21.7815 -111.35 -127.953 + neutron 0 1 10.7386 49.8314 1.65693 133.449 + proton 1 1 7.99409 -41.4639 -107.006 43.5384 + neutron 0 1 7.33562 -46.6519 -106.987 -14.6882 + neutron 0 1 5.37089 20.6709 0.372525 -98.4583 + neutron 0 1 5.24916 91.9101 28.0406 25.6452 + neutron 0 1 4.29006 -89.1402 -11.5712 0.347478 + neutron 0 1 4.20598 49.9591 17.5451 71.537 + neutron 0 1 4.10522 74.2517 39.7345 25.2775 + neutron 0 1 2.97932 -47.9919 40.1956 41.0915 + neutron 0 1 2.58721 -12.0844 66.3424 -17.9179 + neutron 0 1 2.4495 13.944 -34.9591 56.5009 + gamma 0 0 2.21931 -1.3602 -0.114166 -1.7499 + neutron 0 1 2.00405 -28.3684 53.9038 7.71419 + neutron 0 1 1.83414 39.9355 -33.4969 27.0754 + neutron 0 1 1.68767 29.4276 -10.1823 -46.9525 + gamma 0 0 1.66925 0.865172 1.27067 0.650592 + gamma 0 0 1.21644 0.985299 -0.121476 -0.702957 + neutron 0 1 1.14211 -38.6415 7.7864 24.3656 + gamma 0 0 0.80498 -0.352971 -0.694617 0.202266 + neutron 0 1 0.648926 15.3145 -23.766 -20.5056 + gamma 0 0 0.185356 0.170901 0.0612552 -0.0373822 + gamma 0 0 0.111191 0.0991238 -0.00678745 -0.0499174 + neutron 0 1 0.080779 9.87314 -1.11166 7.28603 + Os178[0.0] 76 178 0.713393 -221.995 -139.16 409.641 +0.00135391 -0.00702061 0.0354987 40 + proton 1 1 999.963 31.6597 -164.169 1687.73 + neutron 0 1 128.463 -326.916 -105.999 373.888 + neutron 0 1 78.283 98.6729 -378.353 18.5776 + neutron 0 1 62.8393 -339.742 -15.262 -79.8399 + neutron 0 1 48.5852 297.396 -4.14148 72.088 + pi0 0 0 46.1365 -79.9301 -23.0658 -87.5352 + proton 1 1 36.6064 -26.147 79.5878 251.029 + proton 1 1 28.0541 -122.356 -13.514 195.648 + neutron 0 1 27.9402 -229.321 -1.54266 -26.3318 + neutron 0 1 18.1933 26.3762 58.2524 -174.441 + neutron 0 1 17.5209 -178.907 25.7852 -23.6327 + neutron 0 1 15.8987 172.951 -14.5004 -2.47505 + proton 1 1 13.8158 107.516 79.6217 90.651 + proton 1 1 11.0929 134.547 -51.8965 -11.9696 + neutron 0 1 8.87635 -29.8733 76.7107 99.9083 + neutron 0 1 6.8636 -33.7157 -61.1989 89.7923 + neutron 0 1 6.52619 -70.7113 53.0923 66.9871 + neutron 0 1 6.30204 -15.2451 -45.3499 -97.9442 + neutron 0 1 5.47428 -65.487 -75.3991 -18.5277 + neutron 0 1 5.06741 8.46403 59.0701 77.3764 + neutron 0 1 4.38308 -48.7097 -55.8302 52.5922 + neutron 0 1 3.30057 39.8806 64.5173 -21.4509 + neutron 0 1 2.89532 0.187221 70.9393 -20.4117 + neutron 0 1 2.87371 -68.9515 16.6387 19.4209 + neutron 0 1 2.33978 -38.8737 -0.641931 -53.7648 + neutron 0 1 2.25958 -45.5363 44.1507 15.1103 + proton 1 1 2.15462 41.007 -33.7247 35.0564 + neutron 0 1 1.71017 8.57055 -26.6898 49.3027 + gamma 0 0 1.47882 -0.935624 -0.8663 0.749033 + neutron 0 1 1.35078 27.2873 -9.59266 41.2735 + gamma 0 0 1.30673 1.30569 0.041371 -0.0314311 + neutron 0 1 1.1184 42.8773 7.62906 -14.3601 + gamma 0 0 0.835305 0.308833 0.417564 0.654215 + neutron 0 1 0.65755 -30.6393 14.6345 9.11689 + neutron 0 1 0.467727 -6.32551 -7.57318 -27.9602 + gamma 0 0 0.379497 -0.315466 0.167079 -0.12878 + neutron 0 1 0.191734 8.99574 14.0381 -9.07407 + deuteron 1 2 0.507704 -23.2628 -28.2547 -23.7756 + alpha 2 4 16.7499 -11.4916 46.4755 -350.508 + Hf161[0.0] 72 161 6.78888 808.714 77.4594 1172.68 +-0.00163755 -0.000756256 0.0334764 33 + proton 1 1 999.997 -34.1538 -19.0016 1695.58 + pi+ 1 0 486.487 -259.173 273.918 479.861 + neutron 0 1 72.0535 249.897 -82.284 267.152 + proton 1 1 16.0872 -56.2283 98.1551 132.857 + neutron 0 1 15.2527 135.61 -102.345 -5.46558 + neutron 0 1 10.5771 137.254 30.3542 -15.0849 + neutron 0 1 9.13129 1.06112 -84.1648 100.784 + neutron 0 1 7.37985 -85.1761 69.5671 -42.7507 + neutron 0 1 6.90285 9.7081 0.305195 -113.687 + neutron 0 1 6.30553 -27.6887 95.097 45.5913 + neutron 0 1 6.15617 -20.3296 -18.8435 104.105 + neutron 0 1 5.94086 -18.5245 -25.1564 101.109 + neutron 0 1 5.67959 8.89711 -100.769 21.7112 + neutron 0 1 5.66523 -25.9014 18.5439 98.3008 + neutron 0 1 5.60256 46.2258 -9.90915 -91.2377 + neutron 0 1 5.04722 -10.4482 -64.8291 -72.0964 + neutron 0 1 4.46668 65.1524 45.4704 45.8369 + neutron 0 1 4.14363 -56.5061 -67.1912 9.79842 + neutron 0 1 3.77434 51.2354 -49.6569 -44.8982 + neutron 0 1 3.38761 -21.2226 68.0027 -36.0897 + neutron 0 1 2.47239 40.9204 -52.2691 15.6696 + gamma 0 0 2.11587 -0.74022 0.349491 1.95111 + neutron 0 1 1.97753 31.8607 36.0281 -37.5076 + gamma 0 0 1.25071 0.608326 0.497684 0.972896 + gamma 0 0 0.831477 0.436272 -0.094289 0.70152 + gamma 0 0 0.756609 -0.50435 0.50359 0.253941 + gamma 0 0 0.420739 -0.412424 0.0741764 -0.0377647 + gamma 0 0 0.37844 -0.192928 -0.307849 0.105944 + neutron 0 1 0.327118 11.2105 -8.49943 20.4179 + gamma 0 0 0.239672 0.14148 0.107635 0.16075 + neutron 0 1 0.10021 3.41853 2.85435 12.9802 + alpha 2 4 2.1136 -29.6467 38.1687 -115.867 + Os172[0.0] 76 172 2.2462 -215.099 -130.679 809.988 +0 0 -0.0203515 32 + proton 1 1 1000 0 0 1696.04 + proton 1 1 268.845 449.941 -465.101 397.505 + proton 1 1 95.5122 -414.665 -121.41 40.8388 + neutron 0 1 81.122 -107.543 -217.131 316.715 + proton 1 1 71.6025 166.49 -38.048 332.153 + proton 1 1 64.3589 -107.31 216.925 257.57 + proton 1 1 60.4916 223.35 61.2405 252.069 + neutron 0 1 45.3978 -140.421 109.132 -236.097 + neutron 0 1 25.3327 45.7169 -214.611 -9.8537 + proton 1 1 22.4741 2.24056 -194.684 69.0802 + neutron 0 1 10.3341 33.5682 -124.812 53.1137 + neutron 0 1 8.65003 85.2646 -95.0151 5.60621 + neutron 0 1 8.31007 -12.7549 -36.5648 119.101 + neutron 0 1 8.07827 -106.441 0.620053 62.5723 + neutron 0 1 6.56177 -96.8161 -54.239 -7.63306 + neutron 0 1 6.10938 4.35927 91.5879 55.7702 + neutron 0 1 4.94328 66.868 9.27546 68.9647 + neutron 0 1 4.21448 -31.1466 -76.4044 33.6093 + neutron 0 1 3.54667 -35.621 64.1783 -35.91 + gamma 0 0 3.14129 -2.2987 0.576096 -2.062 + neutron 0 1 2.22437 6.49008 -63.0128 13.1183 + neutron 0 1 1.86527 -3.03393 58.0744 -11.2572 + neutron 0 1 0.799211 -11.0824 36.8501 4.65939 + neutron 0 1 0.767088 19.8639 -28.3916 -15.5366 + gamma 0 0 0.756483 -0.322803 -0.669528 -0.140698 + neutron 0 1 0.674893 -32.5124 -0.661824 14.5317 + neutron 0 1 0.51384 -15.3158 3.25853 26.8448 + neutron 0 1 0.458241 -19.6158 -16.5522 14.232 + neutron 0 1 0.222935 12.3447 13.733 -8.83102 + neutron 0 1 0.16529 -13.8712 -8.62285 -6.62313 + gamma 0 0 0.111394 0.0579524 0.0882334 -0.0355656 + W171[0.0] 74 171 3.77446 34.2175 1090.4 -108.037 +0 0 0.0121258 40 + proton 1 1 1000 0 0 1696.04 + proton 1 1 247.878 -345.406 356.486 529.349 + neutron 0 1 82.0244 72.8112 -222.938 325.361 + proton 1 1 78.9377 133.896 -39.2953 -367.272 + neutron 0 1 70.3247 -302.676 111.57 181.754 + proton 1 1 54.332 -311.883 -72.5492 48.7229 + neutron 0 1 40.2193 -194.501 -192.378 -48.531 + neutron 0 1 23.4728 206.703 34.142 -27.7056 + neutron 0 1 22.6246 -45.4347 150.357 135.48 + neutron 0 1 18.3625 34.2388 166.628 -76.847 + neutron 0 1 18.305 108.134 -121.708 -90.7018 + proton 1 1 16.1053 112.977 102.117 85.3824 + proton 1 1 13.7549 -21.376 -34.7101 156.01 + neutron 0 1 12.7379 -63.0411 92.4069 107.635 + neutron 0 1 10.8797 59.7578 -104.964 77.293 + neutron 0 1 9.05671 -89.85 -1.21229 95.0067 + neutron 0 1 6.22837 82.7297 26.0846 64.9469 + neutron 0 1 5.59348 64.2011 62.4248 50.2348 + neutron 0 1 5.45178 65.8184 33.5883 69.3837 + neutron 0 1 4.79177 -54.6573 60.2782 -49.0556 + neutron 0 1 4.51501 -49.1752 65.407 42.5253 + neutron 0 1 4.38322 37.8995 5.29383 82.4104 + neutron 0 1 3.62314 12.7078 80.7525 -11.7907 + proton 1 1 3.32888 -31.2236 -8.79364 -72.1501 + neutron 0 1 2.66629 33.5545 -50.5271 36.5859 + neutron 0 1 2.43237 -53.0857 -19.5891 37.0788 + gamma 0 0 2.10076 1.75116 -0.490854 -1.05152 + gamma 0 0 1.6264 -0.710273 -0.227909 -1.44525 + gamma 0 0 1.56994 0.512778 -0.810091 -1.24319 + gamma 0 0 1.33113 -0.316479 -1.28587 -0.135248 + neutron 0 1 0.968281 18.2085 -36.2716 -13.164 + neutron 0 1 0.79996 26.9992 -14.117 23.9922 + neutron 0 1 0.594598 -3.67941 29.3798 15.5232 + gamma 0 0 0.444307 0.351399 -0.0834007 -0.258789 + gamma 0 0 0.39268 0.25319 -0.299968 0.0105509 + neutron 0 1 0.0488556 2.95668 -7.93859 4.47721 + alpha 2 4 0.589452 -7.65497 -53.6039 -38.2444 + deuteron 1 2 1.97403 6.21242 77.0241 -37.9161 + deuteron 1 2 0.0734221 -15.1024 -6.49413 -2.27441 + Yb161[0.0] 70 161 2.02352 507.099 -463.654 366.66 +0 0 0.0326312 6 + proton 1 1 1000 0 0 1696.04 + neutron 0 1 614.196 -667.103 88.8057 1038.5 + proton 1 1 369.711 676.64 -187.141 581.035 + gamma 0 0 0.99598 0.226343 0.564437 0.788769 + neutron 0 1 0.208848 -7.62567 -6.55389 17.0702 + Au195[0.0] 79 195 0.0394541 -2.13538 104.324 58.6443 +0 0 -0.0496447 23 + proton 1 1 1000 0 0 1696.04 + neutron 0 1 501.696 -633.095 52.7984 889.3 + neutron 0 1 131.814 137.561 409.46 280.161 + neutron 0 1 98.3359 -17.7252 -415.387 -146.954 + proton 1 1 48.8339 242.233 -117.686 146.618 + neutron 0 1 37.3357 214.734 11.0134 159.124 + neutron 0 1 6.67105 70.8053 -85.4504 -16.2821 + neutron 0 1 5.23053 18.9688 8.76373 -97.0546 + neutron 0 1 4.11501 -49.6551 -72.6474 -2.51009 + neutron 0 1 3.11687 17.5502 -19.4726 -71.969 + neutron 0 1 2.59323 -61.1317 33.8013 0.352055 + proton 1 1 2.31383 34.2741 -25.6483 50.1478 + neutron 0 1 1.76351 52.4441 15.6818 -17.9071 + neutron 0 1 1.35406 43.6426 18.0308 -17.7906 + neutron 0 1 1.15083 -1.34473 24.3595 39.6066 + neutron 0 1 0.782915 -23.7162 -13.0148 27.2024 + neutron 0 1 0.767871 31.6893 11.422 17.5739 + neutron 0 1 0.72959 -36.9167 -2.02643 -2.14002 + gamma 0 0 0.681846 -0.339163 -0.481692 -0.343302 + gamma 0 0 0.572155 0.248476 0.231396 0.460518 + neutron 0 1 0.457795 -8.40569 -3.32 -27.9068 + deuteron 1 2 6.47685 -62.4645 -101.112 101.058 + Ir178[0.0] 77 178 0.671751 30.6426 270.686 385.292 +0 0 -0.0443798 20 + proton 1 1 1000 0 0 1696.04 + neutron 0 1 380.748 -384.838 -442.484 718.716 + neutron 0 1 175.673 475.417 -97.1996 354.266 + proton 1 1 139.475 -164.127 76.7665 498.351 + neutron 0 1 28.9198 -59.75 211.721 82.3689 + neutron 0 1 14.7796 133.273 -91.2448 43.6339 + pi0 0 0 12.7887 4.24767 -39.2528 -45.355 + gamma 0 0 2.86286 -0.916605 1.80947 -2.0203 + neutron 0 1 2.66593 45.6257 -8.17381 -53.5558 + gamma 0 0 2.26418 -2.26198 0.00871487 0.0993462 + neutron 0 1 2.10388 53.636 2.63942 32.7736 + gamma 0 0 1.95145 -0.339457 -1.76596 -0.757828 + neutron 0 1 1.17094 40.7089 -20.0195 11.9884 + neutron 0 1 1.15343 -43.2954 3.70576 16.7496 + gamma 0 0 0.946093 0.0748376 0.139229 -0.932795 + neutron 0 1 0.768556 28.192 25.4834 -0.783382 + neutron 0 1 0.660616 20.149 -25.8237 12.9991 + neutron 0 1 0.492457 -9.94975 17.5447 22.7776 + neutron 0 1 0.297173 6.47431 4.88728 22.1971 + Au185[0.0] 79 185 0.481616 -142.321 381.262 -17.4798 +0 0 -0.0368631 36 + proton 1 1 1000 0 0 1696.04 + neutron 0 1 167.212 -324.339 -17.6075 486.484 + proton 1 1 155.718 -74.1016 -173.07 530.108 + neutron 0 1 83.5892 192.247 -86.1371 345.953 + neutron 0 1 52.1651 -226.414 165.249 148.914 + proton 1 1 51.745 192.436 -107.869 226.079 + proton 1 1 43.0557 -77.5507 260.712 -93.0848 + neutron 0 1 26.3037 125.977 76.8098 168.375 + proton 1 1 25.4415 216.731 34.6916 -14.6077 + proton 1 1 23.2238 -150.59 -144.491 23.7683 + neutron 0 1 21.2637 152.591 13.8609 -130.128 + neutron 0 1 18.5346 -140.355 -120.712 30.022 + neutron 0 1 16.5786 -76.3541 -136.804 82.9634 + neutron 0 1 16.2944 112.433 126.841 46.4214 + neutron 0 1 14.9044 -6.28885 105.397 -130.695 + proton 1 1 13.5456 -142.402 -72.2578 10.1437 + neutron 0 1 11.0073 121.958 -74.0681 -21.1079 + neutron 0 1 10.6465 131.778 -17.13 49.6056 + neutron 0 1 5.55535 -33.9925 -29.7092 91.8258 + neutron 0 1 4.99786 -73.6637 13.3286 61.7465 + neutron 0 1 4.5916 64.7392 17.7728 -64.3605 + proton 1 1 4.36809 -3.02326 -18.6826 88.6443 + neutron 0 1 4.09599 65.1471 -38.6807 -44.4222 + neutron 0 1 3.54628 72.8602 9.08733 35.8513 + neutron 0 1 2.97438 24.7329 -8.51819 70.0987 + neutron 0 1 2.87897 11.3788 54.2681 -48.4122 + neutron 0 1 2.02636 44.4185 -23.3538 35.9653 + neutron 0 1 0.861151 1.89424 26.1997 -30.4786 + gamma 0 0 0.750641 0.0245751 -0.0376836 -0.749291 + gamma 0 0 0.284971 -0.0713801 -0.0311435 0.274123 + neutron 0 1 0.183149 -9.26623 11.8143 10.8975 + gamma 0 0 0.179586 0.00361654 -0.151333 0.0966238 + neutron 0 1 0.121478 -12.787 -1.78605 -7.84805 + gamma 0 0 0.0956871 0.0751168 -0.0310095 0.0505163 + neutron 0 1 0.0807492 -6.28183 0.903879 -10.5578 + Ta168[0.0] 73 168 0.37542 -173.945 154.192 -251.801 +0 0 -0.0437085 31 + proton 1 1 1000 0 0 1696.04 + proton 1 1 198.425 -338.856 165.488 519.15 + neutron 0 1 162.289 -70.8761 45.8032 569.367 + proton 1 1 154.519 351.789 335.903 277.941 + neutron 0 1 97.3337 56.4374 298.943 315.951 + proton 1 1 60.8447 10.8578 -312.932 140.838 + neutron 0 1 48.7806 -213.841 127.506 -179.05 + proton 1 1 42.6702 -134.595 -149.482 203.551 + neutron 0 1 7.94864 -78.1525 80.4564 49.1799 + neutron 0 1 5.68805 54.8408 -60.5116 63.6536 + neutron 0 1 5.43137 -88.6395 18.4129 -45.1636 + neutron 0 1 5.37632 -36.3907 69.1716 -63.4249 + neutron 0 1 5.20933 -50.2579 -83.7889 -16.4227 + proton 1 1 3.69581 -69.3681 -44.7267 11.6879 + neutron 0 1 3.69326 39.4531 30.4228 -66.8705 + neutron 0 1 2.91473 -71.411 19.406 -3.08962 + neutron 0 1 2.69104 67.1819 -9.43717 -21.4846 + neutron 0 1 2.58243 -44.8661 52.851 7.29349 + gamma 0 0 2.0054 -1.02152 0.942247 1.44579 + neutron 0 1 1.89477 19.477 -48.1094 29.5 + neutron 0 1 1.40956 -24.9502 -41.8471 -16.6442 + neutron 0 1 1.31738 -34.125 -0.933494 36.22 + neutron 0 1 1.30512 -35.6927 -12.875 -31.8506 + neutron 0 1 1.02288 1.48376 -5.59093 -43.4709 + gamma 0 0 0.774287 -0.621982 -0.404922 0.220675 + gamma 0 0 0.701166 -0.353058 -0.257974 -0.548118 + gamma 0 0 0.344291 -0.268497 -0.0034541 0.215485 + neutron 0 1 0.166452 10.9655 -9.4963 -10.1188 + neutron 0 1 0.0927631 8.83138 -6.26341 7.55639 + neutron 0 1 0.041252 8.63055 -0.229227 1.72651 + Re173[0.0] 75 173 2.02773 664.341 -458.42 -41.3202 +-2.77519e-05 0.000305943 -0.0311234 24 + proton 1 1 999.994 -5.83293 64.3035 1694.8 + pi0 0 0 376.177 268.195 -76.9212 406.465 + proton 1 1 186.956 -430.961 125.221 429.389 + neutron 0 1 105.862 -368.386 -150.956 227.242 + proton 1 1 29.9689 66.0746 67.3479 -219.624 + proton 1 1 13.5651 -0.11873 77.2821 -140.239 + neutron 0 1 4.98436 -48.8882 -55.9655 -62.2005 + neutron 0 1 4.41978 -37.0878 -31.7721 -77.0707 + gamma 0 0 3.76735 -3.24109 -1.67531 0.938936 + neutron 0 1 3.35204 -56.2718 -56.0673 0.300571 + neutron 0 1 2.45489 38.1581 47.4682 30.1629 + gamma 0 0 2.39148 -0.225075 2.23395 0.823379 + neutron 0 1 2.13739 -47.3442 -41.7233 6.22113 + neutron 0 1 1.94074 -58.7208 12.3363 -7.09651 + neutron 0 1 1.74815 45.4693 23.6586 25.7074 + neutron 0 1 0.753432 23.8939 23.6438 16.9239 + gamma 0 0 0.704592 -0.494891 0.0599755 0.497932 + neutron 0 1 0.496559 -8.57311 -2.4747 29.2185 + neutron 0 1 0.42369 15.6739 4.85999 22.9578 + neutron 0 1 0.371686 -0.302659 -24.871 8.9401 + gamma 0 0 0.308685 -0.240306 0.0864206 -0.17341 + neutron 0 1 0.148709 15.8089 0.425494 5.41869 + neutron 0 1 0.129239 8.42193 -12.4759 4.03693 + Ir181[0.0] 77 181 3.91321 573.328 134.583 985.962 +-0.00110813 -0.000140969 0.0169009 37 + proton 1 1 999.996 -52.7477 -6.71022 1695.2 + neutron 0 1 201.376 158.87 -134.116 612.974 + neutron 0 1 88.0073 -93.8074 386.855 -121.102 + pi0 0 0 86.7384 73.9872 -108.732 116.799 + neutron 0 1 41.2707 -126.17 -244.225 60.7598 + proton 1 1 40.947 -53.4807 83.9894 261.918 + proton 1 1 22.7592 103.771 91.1056 155.428 + neutron 0 1 18.1833 -1.80291 -178.089 52.7317 + neutron 0 1 15.6817 8.18895 50.4707 164.619 + neutron 0 1 13.4706 48.7156 96.6262 117.408 + neutron 0 1 12.515 -92.0716 -100.221 71.7808 + neutron 0 1 11.069 103.889 74.1752 68.0282 + proton 1 1 10.3926 57.1226 -127.421 10.5379 + neutron 0 1 9.4002 72.5204 108.45 -27.0548 + neutron 0 1 7.79437 92.6717 77.0608 -13.4534 + neutron 0 1 5.66001 -53.0261 86.0196 21.3728 + proton 1 1 5.26062 7.61965 -38.9595 91.2336 + neutron 0 1 5.18717 67.1992 63.9453 34.1984 + neutron 0 1 3.75774 1.08246 -74.2755 -39.4636 + neutron 0 1 3.47035 23.8339 41.203 65.3264 + neutron 0 1 3.01985 65.1156 -30.8164 -22.2289 + neutron 0 1 2.68308 20.0122 -17.2049 65.974 + neutron 0 1 2.43132 -41.2 0.202518 -53.6396 + proton 1 1 2.26682 -59.0215 -21.3955 17.8219 + neutron 0 1 1.57312 52.3954 -12.0678 8.22569 + neutron 0 1 1.37143 18.1549 -14.9155 -45.0211 + neutron 0 1 1.05826 21.7819 22.6523 -31.6568 + neutron 0 1 1.04507 35.2098 3.85233 -26.6521 + neutron 0 1 1.00273 -29.1913 -13.2861 -29.2682 + neutron 0 1 0.681787 -0.837777 -28.3836 21.8014 + gamma 0 0 0.245054 -0.0486103 -0.197172 -0.137157 + neutron 0 1 0.229053 -16.7395 -6.80746 10.1942 + neutron 0 1 0.160768 10.1905 -13.461 -4.13361 + alpha 2 4 3.0034 20.87 119.892 87.1165 + alpha 2 4 5.93333 -29.5652 -133.069 160.268 + deuteron 1 2 10.874 -77.2701 164.382 -88.979 + Yb158[0.0] 70 158 0.794316 -441.719 -179.949 -78.5301 +0 0 -0.0412204 37 + proton 1 1 1000 0 0 1696.04 + neutron 0 1 201.802 -50.9944 132.156 632.354 + proton 1 1 141.977 353.518 114.079 385.479 + proton 1 1 96.5286 -319.291 -97.1344 -281.205 + neutron 0 1 91.9858 -45.8618 -346.489 243.221 + proton 1 1 44.3286 169.764 29.697 235.474 + proton 1 1 29.6873 111.643 -168.941 -124.842 + neutron 0 1 24.4702 -72.6475 195.361 -56.0162 + neutron 0 1 19.6147 -81.4422 163.668 61.8324 + neutron 0 1 12.6568 120.297 -63.6385 -73.6386 + proton 1 1 11.6994 40.7513 129.782 59.8953 + neutron 0 1 11.409 105.383 -94.3401 -39.5413 + neutron 0 1 9.92673 126.33 -50.0223 17.0477 + neutron 0 1 9.80127 -24.5911 28.1831 -130.824 + neutron 0 1 6.96757 88.4137 -56.0768 46.6897 + neutron 0 1 5.3538 -39.9604 -86.4103 32.0248 + neutron 0 1 2.4535 -25.388 61.4098 -14.1686 + neutron 0 1 2.16569 55.2227 29.4424 12.5664 + neutron 0 1 1.93892 -35.0022 43.2835 -23.4227 + neutron 0 1 1.91645 6.3227 -57.9031 -14.5666 + neutron 0 1 1.87941 47.3163 -9.44006 -34.7454 + neutron 0 1 1.76413 -53.1241 20.482 8.74468 + gamma 0 0 1.54232 1.19168 0.413206 -0.887644 + neutron 0 1 1.53609 35.6211 32.93 23.1436 + neutron 0 1 1.17776 -1.49529 -46.9615 -2.63281 + proton 1 1 1.16222 22.8004 40.5238 -4.50207 + neutron 0 1 1.15222 30.9007 5.23745 34.4125 + neutron 0 1 0.895703 -5.55801 -38.8901 11.8581 + neutron 0 1 0.570148 7.7613 30.222 -9.90473 + neutron 0 1 0.423501 -27.3851 4.48066 5.09635 + neutron 0 1 0.395704 25.871 -1.1757 8.54669 + neutron 0 1 0.26885 1.17686 19.0363 -11.8959 + gamma 0 0 0.16558 -0.164198 0.0211886 -0.00260392 + neutron 0 1 0.0925129 1.60908 13.0783 -0.46998 + deuteron 1 2 7.30129 17.8425 80.4085 143.73 + deuteron 1 2 5.28051 22.3732 -131.259 45.8991 + Hf163[0.0] 72 163 2.10262 -609.206 74.7887 511.288 +0 0 0.0346371 31 + proton 1 1 1000 0 0 1696.04 + proton 1 1 169.941 356.047 -216.935 417.075 + neutron 0 1 165.626 -289.941 450.58 227.105 + neutron 0 1 95.8639 41.0174 152.748 405.36 + proton 1 1 62.223 -157.669 87.0597 296.98 + neutron 0 1 45.8574 -89.83 47.1957 -279.246 + pi+ 1 0 43.1584 57.1888 -101.172 20.0904 + neutron 0 1 30.424 -188.113 68.3499 134.306 + proton 1 1 14.8187 -56.3786 -148.954 -51.5909 + neutron 0 1 5.73917 -33.2674 11.7251 97.8437 + neutron 0 1 5.36648 6.91662 100.173 5.53984 + neutron 0 1 4.54705 17.8838 -71.0103 56.594 + neutron 0 1 4.12983 -47.066 31.774 -67.4741 + neutron 0 1 3.40259 -61.7575 50.899 -0.887969 + neutron 0 1 3.37329 -26.7338 27.7521 -69.7521 + neutron 0 1 2.87309 51.8533 -51.0948 -10.3789 + neutron 0 1 2.79856 -39.8925 -17.3253 58.0957 + gamma 0 0 2.74698 1.63515 1.78386 1.3 + neutron 0 1 2.38065 -11.5451 64.0188 -15.7329 + neutron 0 1 2.31504 -49.1682 39.1113 -20.2093 + neutron 0 1 1.01988 -28.1844 -14.2559 30.3305 + neutron 0 1 0.995722 -12.7493 35.6096 -21.0119 + neutron 0 1 0.845014 -24.2326 9.9018 30.0556 + neutron 0 1 0.751326 17.1785 8.00043 32.4546 + gamma 0 0 0.619064 -0.387055 0.0272165 -0.482377 + neutron 0 1 0.533251 1.53984 -5.5114 -31.1382 + neutron 0 1 0.479384 25.6014 -12.3233 -9.68299 + neutron 0 1 0.294771 -9.18503 -17.8262 -12.3232 + gamma 0 0 0.120834 -0.0864513 0.0560964 -0.0630886 + neutron 0 1 0.0488459 2.29152 -2.15492 9.04961 + Os173[0.0] 76 173 2.46283 547.039 -528.207 463.834 +0.000252546 0.000401177 -0.00447463 48 + proton 1 1 999.997 24.9339 39.6083 1695.39 + proton 1 1 135.827 -505.988 -23.8645 -129.389 + neutron 0 1 102.136 280.055 210.652 282.053 + neutron 0 1 55.2627 180.988 -47.9951 268.029 + neutron 0 1 53.2529 169.537 -261.875 -74.7225 + neutron 0 1 51.2843 263.138 -91.7253 146.1 + proton 1 1 37.9851 -202.168 -23.1408 176.964 + proton 1 1 30.172 -86.3329 -217.518 52.5533 + neutron 0 1 19.7998 -180.546 3.29283 70.6467 + neutron 0 1 16.5053 54.8546 138.388 95.5395 + neutron 0 1 16.1691 100.68 117.565 -81.7749 + neutron 0 1 14.8976 -37.0504 -131.631 -97.556 + proton 1 1 13.2451 -43.6368 151.153 16.7096 + neutron 0 1 12.5253 51.9541 69.8133 126.966 + neutron 0 1 11.3844 24.0987 130.076 -63.4187 + neutron 0 1 8.16412 110.586 -49.1864 -27.5595 + proton 1 1 7.7937 -31.2677 -22.1617 -114.966 + proton 1 1 7.27366 -7.69796 32.4398 -112.208 + neutron 0 1 6.56131 71.929 75.7952 -38.1303 + neutron 0 1 6.34574 71.8212 16.3915 -80.8566 + neutron 0 1 5.94172 -25.2184 88.1224 52.9061 + neutron 0 1 5.80637 4.70485 104.51 -0.389702 + neutron 0 1 5.73374 -36.4166 -28.4565 93.1203 + neutron 0 1 5.53046 -9.37639 -88.4225 -50.1657 + neutron 0 1 5.22839 21.6799 3.85769 96.7846 + neutron 0 1 4.30841 -63.8047 -25.6493 58.1869 + neutron 0 1 3.95636 -11.4137 -61.8011 -59.1652 + proton 1 1 3.4614 5.62365 47.9215 64.6479 + gamma 0 0 3.45505 -2.44251 -2.44224 0.0832732 + neutron 0 1 3.27045 -64.5869 8.58041 43.7175 + neutron 0 1 2.8303 16.3092 -52.0021 48.5418 + neutron 0 1 2.14588 -36.3436 43.2877 29.0227 + gamma 0 0 1.83862 1.59217 0.426592 0.814588 + neutron 0 1 1.60956 47.1863 -12.0738 25.59 + gamma 0 0 1.45483 -1.16383 -0.858746 -0.156765 + neutron 0 1 1.21875 44.4695 4.59652 17.1176 + neutron 0 1 1.02136 -17.4697 -29.7755 -26.9914 + neutron 0 1 0.945017 28.6711 -20.7135 -22.9264 + gamma 0 0 0.371024 -0.280903 -0.122064 0.209411 + neutron 0 1 0.239261 -9.32373 9.853 16.2987 + gamma 0 0 0.118366 -0.0736628 0.0423379 -0.0824121 + neutron 0 1 0.0638138 6.99408 -7.95153 2.78829 + neutron 0 1 0.0331735 0.498623 -4.11124 6.72217 + alpha 2 4 2.65311 10.9303 74.5957 -118.75 + triton 1 3 15.4248 -270.501 55.98 102.944 + He3 2 3 3.20395 52.9019 -73.3538 -99.1571 + alpha 2 4 20.9291 -187.701 316.326 145.49 + Dy147[0.0] 66 147 3.40887 234.523 -387.232 853.198 +0 0 -0.0476242 15 + proton 1 1 1000 0 0 1696.04 + proton 1 1 713.946 357.566 -150.345 1303.46 + neutron 0 1 169 -26.4757 440.351 389.261 + neutron 0 1 41.0582 -254 84.2138 -85.0383 + neutron 0 1 5.38567 -74.7964 67.4483 -2.36788 + neutron 0 1 3.94753 -37.9407 -9.55971 76.8285 + gamma 0 0 1.87704 1.81415 0.240256 -0.417613 + gamma 0 0 1.22448 -0.747418 -0.40017 -0.883512 + neutron 0 1 0.487567 -15.3857 -3.86069 -25.784 + neutron 0 1 0.335593 14.4446 19.9854 -4.76172 + neutron 0 1 0.26718 -7.68413 -4.99212 20.4492 + gamma 0 0 0.209232 -0.100997 0.168607 -0.0717573 + gamma 0 0 0.0873146 -0.003785 0.0169188 -0.0855761 + neutron 0 1 0.0293857 5.42541 -5.00873 0.835437 + Au189[0.0] 79 189 0.551522 37.8862 -438.26 24.6123 +0 0 -0.0317025 20 + proton 1 1 1000 0 0 1696.04 + neutron 0 1 260.558 43.2663 -527.592 526.58 + pi0 0 0 253.506 -184.212 235.233 208.402 + proton 1 1 196.96 -63.1527 -34.3957 635.001 + proton 1 1 28.8785 -60.1655 -153.185 167.153 + neutron 0 1 5.8167 -5.53544 101.843 23.6973 + neutron 0 1 4.71979 -62.3723 0.361671 70.7174 + neutron 0 1 4.0151 -19.1691 29.3354 -79.5802 + neutron 0 1 2.79158 26.8323 6.86109 -66.9813 + gamma 0 0 2.50272 -0.973648 2.21766 -0.630556 + gamma 0 0 2.17967 0.653551 1.33137 1.59728 + neutron 0 1 2.0815 -3.39914 -43.5973 44.76 + neutron 0 1 1.35194 -12.9766 -17.7383 45.379 + neutron 0 1 0.73657 -11.4798 -5.07904 -35.0296 + neutron 0 1 0.509472 6.53565 -10.4887 -28.3707 + neutron 0 1 0.267383 -5.37885 -4.98335 21.1838 + gamma 0 0 0.184739 -0.0944509 0.106261 0.117967 + neutron 0 1 0.0742412 0.999984 7.89365 -8.72953 + neutron 0 1 0.044622 7.64152 -3.00157 4.0559 + Pt184[0.0] 78 184 0.926794 342.982 414.878 166.713 +0 0 0.00269011 16 + proton 1 1 1000 0 0 1696.04 + neutron 0 1 339.902 -69.3022 -19.4106 865.491 + proton 1 1 308.532 -84.3337 -208.541 789.661 + neutron 0 1 106.936 164.997 411.465 125.912 + proton 1 1 65.9581 47.2276 5.41116 354.773 + proton 1 1 44.6071 -45.1182 122.576 -261.986 + neutron 0 1 17.3158 -85.6533 86.6516 -134.14 + proton 1 1 14.4829 -154.512 -57.6487 13.7906 + neutron 0 1 11.8917 85.9194 -122.757 6.01301 + proton 1 1 10.9894 135.499 40.0468 -27.9113 + neutron 0 1 1.8661 31.7599 47.7081 15.0129 + neutron 0 1 0.844506 -2.26688 -6.6745 39.2169 + gamma 0 0 0.65654 -0.478346 -0.353859 -0.277513 + neutron 0 1 0.354081 17.8887 10.634 15.2447 + gamma 0 0 0.192957 -0.182744 0.055204 -0.0281006 + Re186[0.0] 75 186 0.312594 -41.4448 -309.163 -104.735 +0 0 0.00247784 8 + proton 1 1 1000 0 0 1696.04 + proton 1 1 820.319 496.627 466.11 1322.27 + neutron 0 1 169.302 -404.829 -305.077 299.741 + gamma 0 0 0.718764 0.196566 0.106531 -0.683106 + gamma 0 0 0.651187 0.399552 0.0263312 -0.513526 + gamma 0 0 0.521136 0.506481 -0.0994891 -0.0718451 + gamma 0 0 0.181355 0.025827 0.0183782 0.178564 + Au196[0.0] 79 196 0.110207 -92.9253 -161.083 75.1203 +0 0 -0.0348524 35 + proton 1 1 1000 0 0 1696.04 + proton 1 1 274.999 199.932 285.558 685.68 + proton 1 1 157.982 -378.089 -292.351 -304.956 + neutron 0 1 42.3118 -116.184 259.015 26.6915 + proton 1 1 39.8791 -50.5824 -271.191 -17.9416 + proton 1 1 26.539 -4.33551 -60.3032 216.45 + pi- -1 0 17.0072 -7.80245 32.2012 -62.7602 + neutron 0 1 14.7612 158.147 -51.1572 18.1301 + neutron 0 1 13.6796 65.5665 77.1457 -125.069 + neutron 0 1 13.5004 -76.7313 108.862 -88.3893 + neutron 0 1 12.7911 13.386 -121.479 96.2465 + proton 1 1 12.3118 32.2918 -135.53 62.0016 + neutron 0 1 10.9819 -35.7318 -60.7307 125.667 + neutron 0 1 6.45457 -47.0395 -48.1877 -87.3834 + neutron 0 1 5.81287 -75.5367 -72.2979 -4.91435 + neutron 0 1 2.56832 1.24211 -46.8024 51.3888 + gamma 0 0 2.55674 -0.473685 -2.3848 0.79074 + neutron 0 1 2.36112 45.8553 47.1471 -10.8108 + gamma 0 0 1.87357 -0.226288 -0.911662 -1.62109 + neutron 0 1 1.73283 -0.193021 51.335 -24.9782 + gamma 0 0 1.6915 0.322679 -1.27561 1.06295 + neutron 0 1 1.59531 22.9717 -22.1777 -44.5062 + gamma 0 0 1.31435 1.05374 -0.78317 -0.0616173 + neutron 0 1 1.20353 31.0943 11.8393 34.0001 + neutron 0 1 0.85938 -34.2251 0.387282 -21.0741 + neutron 0 1 0.749642 -17.8662 -24.2894 -22.362 + neutron 0 1 0.382571 7.43482 -23.4592 -10.6507 + neutron 0 1 0.309556 -15.5561 -7.86498 16.6716 + neutron 0 1 0.246908 -16.4571 9.19348 10.4248 + neutron 0 1 0.155372 8.99377 13.2434 -5.9761 + neutron 0 1 0.107391 0.626226 11.1849 -8.73612 + gamma 0 0 0.0963916 0.0144924 0.0240692 -0.0922063 + neutron 0 1 0.0144331 2.05263 -1.63366 4.49887 + alpha 2 4 0.42224 -53.1114 12.5426 13.0297 + W168[0.0] 74 168 5.12352 339.158 325.132 1175.59 +0 0 -0.0396177 30 + proton 1 1 1000 0 0 1696.04 + proton 1 1 374.274 576.797 -128.643 702.266 + proton 1 1 146.145 -35.7216 523.054 144.031 + neutron 0 1 100.512 -405.23 -171.058 74.208 + proton 1 1 50.2151 57.5754 -164.931 257.362 + proton 1 1 35.5228 -80.4978 22.1024 246.888 + neutron 0 1 22.9198 7.37518 -205.804 34.4213 + neutron 0 1 19.9793 125.153 94.243 -115.75 + proton 1 1 11.1096 123.718 -19.7427 72.6308 + neutron 0 1 10.4945 27.586 -101.667 93.4534 + neutron 0 1 9.4769 84.1952 -75.6791 71.2881 + proton 1 1 7.82555 -59.0713 100.865 -32.9106 + neutron 0 1 7.37483 99.8275 7.87543 62.3308 + neutron 0 1 7.25246 -88.0083 26.2466 -72.4333 + neutron 0 1 6.0962 4.22579 -53.9697 -92.5319 + neutron 0 1 2.63656 -60.4246 33.0538 -14.7549 + neutron 0 1 2.51449 -12.9268 -8.72943 -66.9931 + neutron 0 1 2.39517 48.4474 13.0033 44.6133 + neutron 0 1 2.14056 61.4752 -13.1893 -8.59199 + neutron 0 1 1.93202 32.5024 50.362 -6.44318 + neutron 0 1 1.45958 -10.3497 -43.8878 -26.676 + neutron 0 1 1.40814 -31.7593 -10.3766 -39.1375 + neutron 0 1 0.956485 -6.69461 41.7933 -2.60341 + neutron 0 1 0.92684 4.36924 37.3063 -18.2116 + gamma 0 0 0.828924 0.293898 0.154085 0.759603 + neutron 0 1 0.637538 -10.9649 11.9302 30.5919 + neutron 0 1 0.489794 -3.96997 -4.34686 29.7653 + gamma 0 0 0.478071 -0.16137 -0.439979 -0.0944981 + gamma 0 0 0.104689 0.0301614 0.0859369 -0.0516222 + W173[0.0] 74 173 0.96278 -447.792 40.391 328.615 +0 0 -0.0407712 10 + proton 1 1 1000 0 0 1696.04 + neutron 0 1 582.456 13.7092 66.1013 1195.5 + pi0 0 0 144.154 -140.423 -190.11 61.9256 + proton 1 1 115.771 248.202 140.129 386.539 + gamma 0 0 2.88543 -0.807229 2.75847 0.254776 + gamma 0 0 2.27332 -1.03734 1.34207 1.51353 + gamma 0 0 1.94936 0.211747 -1.18969 1.52964 + gamma 0 0 0.484548 -0.0683908 0.19039 0.440297 + neutron 0 1 0.157305 -13.6437 -9.35714 -4.68123 + Au195[0.0] 79 195 0.0390323 -106.141 -9.86309 53.0178 +0.000606011 -0.000421807 0.00181001 12 + proton 1 1 999.996 45.455 -31.6385 1695.13 + pi+ 1 0 268.821 42.024 -254.762 283.962 + proton 1 1 266.398 -48.0187 307.707 688.395 + proton 1 1 142.089 422.549 18.8784 328.513 + neutron 0 1 121.547 -193.079 -346.195 293.335 + neutron 0 1 5.62642 -26.6352 -26.1717 -95.969 + neutron 0 1 1.90746 44.165 0.388457 40.4637 + neutron 0 1 1.39603 -33.5676 35.3637 15.7445 + gamma 0 0 1.02809 0.696127 -0.51146 -0.557488 + neutron 0 1 0.588855 -0.41263 -4.22819 -32.9975 + neutron 0 1 0.0844421 0.701113 12.0474 3.61299 + Ir190[0.0] 77 190 0.301506 -162.966 225.846 170.627 +0 0 -0.0414863 45 + proton 1 1 1000 0 0 1696.04 + pi+ 1 0 126.778 209.789 -14.6046 -85.0671 + proton 1 1 105.246 -240.16 -18.2035 388.031 + proton 1 1 80.5551 296.782 59.2146 257.038 + neutron 0 1 70.6397 -100.891 57.7224 352.449 + proton 1 1 29.1649 -180.779 1.39505 -151.317 + proton 1 1 14.4291 129.452 38.0205 -95.2976 + neutron 0 1 12.9941 -88.9446 -13.2054 128.456 + neutron 0 1 12.1036 -98.7125 105.203 45.5961 + proton 1 1 9.26012 -11.9501 122.765 47.4197 + neutron 0 1 8.80582 4.12042 -127.571 -18.263 + neutron 0 1 8.24049 -109.423 54.5034 -24.673 + neutron 0 1 7.77623 -92.7499 73.3979 -26.1391 + neutron 0 1 7.75632 33.9153 15.7964 115.046 + proton 1 1 6.69397 17.9749 -108.051 24.6612 + neutron 0 1 6.2801 15.2413 87.6528 -62.652 + neutron 0 1 6.25545 18.682 81.4145 -69.4017 + neutron 0 1 4.14589 -26.8945 -36.1603 76.0064 + proton 1 1 4.00596 50.3321 -35.2792 -61.2819 + neutron 0 1 3.95547 42.4683 62.7329 41.3463 + neutron 0 1 3.40328 31.5521 -73.031 -8.81596 + gamma 0 0 3.40078 -0.861605 2.40546 2.24426 + neutron 0 1 2.90227 -54.1007 -43.9121 24.6377 + proton 1 1 2.90202 -35.246 22.3573 60.9267 + neutron 0 1 2.7158 -28.3285 49.6217 42.9639 + neutron 0 1 2.63678 34.9742 44.8618 41.5456 + neutron 0 1 2.45087 41.9512 0.0460011 53.4004 + neutron 0 1 2.43755 12.2602 43.3311 -50.5818 + neutron 0 1 1.75246 24.2516 50.7835 -11.3606 + neutron 0 1 1.73394 -7.17525 -55.8582 9.47074 + neutron 0 1 1.48458 12.0942 14.0802 49.4713 + neutron 0 1 1.38379 30.9852 -32.0309 24.8229 + gamma 0 0 1.34905 -0.169627 1.33231 0.126941 + neutron 0 1 1.3076 -22.3321 20.2758 -39.3577 + neutron 0 1 1.2728 35.0907 -22.7741 25.3645 + proton 1 1 0.936433 -36.4634 -13.7056 -15.5149 + neutron 0 1 0.863906 -29.9646 -18.8493 19.2605 + gamma 0 0 0.509071 0.318728 -0.00548473 -0.396907 + neutron 0 1 0.492376 12.8012 -1.82515 -27.5369 + neutron 0 1 0.416007 -4.29697 -26.3122 -8.43244 + neutron 0 1 0.382983 24.7707 -1.09149 10.249 + neutron 0 1 0.269373 -19.5813 -2.41554 10.8166 + deuteron 1 2 13.8304 -188.153 60.6285 113.995 + deuteron 1 2 5.07415 -45.8058 -77.191 104.897 + Er157[0.0] 68 157 1.3149 343.178 -347.467 381.883 +0 0 -0.0422503 18 + proton 1 1 1000 0 0 1696.04 + neutron 0 1 596.413 301.758 -982.139 648.685 + proton 1 1 124.66 12.5802 219.268 448.591 + proton 1 1 61.2432 -162.637 303.615 6.58371 + proton 1 1 57.6063 287.623 169.38 -1.70786 + proton 1 1 29.5065 -187.441 39.7518 -139.737 + neutron 0 1 13.7478 -78.2277 -23.044 -139.185 + neutron 0 1 8.00788 -90.6956 -69.5225 45.309 + proton 1 1 7.73996 -92.1095 42.62 65.4497 + neutron 0 1 3.36952 -45.7035 52.4348 38.793 + neutron 0 1 2.58859 -7.90935 -67.5402 -15.7087 + gamma 0 0 1.6874 -1.67505 -0.129125 -0.157688 + neutron 0 1 1.30829 -37.7749 -32.0929 1.80608 + neutron 0 1 0.656028 -34.7083 2.4905 4.72504 + gamma 0 0 0.327895 0.0158196 0.210962 -0.25052 + neutron 0 1 0.157203 -0.651781 2.30964 17.0197 + neutron 0 1 0.120321 -6.08025 5.88631 12.4296 + Re184[0.0] 75 184 1.83472 143.637 336.503 703.391 +0 0 -0.0476869 7 + proton 1 1 1000 0 0 1696.04 + proton 1 1 979.222 33.7645 -316.452 1641.69 + proton 1 1 4.54186 -18.0119 77.1781 47.5683 + gamma 0 0 1.76484 -1.0796 0.493266 1.30606 + neutron 0 1 0.376162 8.37797 22.3221 11.7699 + gamma 0 0 0.236234 0.062544 0.149938 0.171503 + Pt195[0.0] 78 195 0.130434 -23.1136 216.309 -6.46712 +0 0 -0.0341388 10 + proton 1 1 1000 0 0 1696.04 + pi0 0 0 330.958 119.404 31.3346 428.529 + neutron 0 1 289.849 298.405 389.677 622.723 + proton 1 1 223.147 -460.634 -90.364 498.187 + gamma 0 0 3.14904 0.474497 1.21991 -2.86411 + gamma 0 0 1.64039 1.49713 -0.518536 0.424971 + gamma 0 0 0.760468 0.751174 -0.116342 -0.0226801 + neutron 0 1 0.165874 -2.75207 10.676 13.7904 + gamma 0 0 0.118891 0.025969 0.0912787 -0.0716167 + Au195[0.0] 79 195 0.377584 42.8262 -342.001 135.338 +0 0 0.0193621 33 + proton 1 1 1000 0 0 1696.04 + neutron 0 1 216.956 252.285 400.274 480.513 + neutron 0 1 114.163 -244.782 177.688 368.876 + neutron 0 1 102.304 -375.457 147.236 200.153 + neutron 0 1 91.5373 233.985 255.097 246.103 + proton 1 1 81.1121 -228.871 -293.931 -141.466 + neutron 0 1 49.3574 -18.329 -299.109 73.3701 + proton 1 1 27.8861 -29.4482 -43.6103 224.362 + neutron 0 1 11.9275 -12.2047 78.8922 127.211 + neutron 0 1 9.507 -84.9456 -101.787 19.4652 + neutron 0 1 8.63062 -58.0773 -81.9105 78.8051 + neutron 0 1 8.5278 115.756 51.5078 -6.71821 + neutron 0 1 8.51064 35.0656 48.4097 111.767 + neutron 0 1 6.36581 15.481 -88.2272 -63.0794 + neutron 0 1 5.86293 21.0658 84.2148 59.2934 + neutron 0 1 4.62007 5.797 32.6783 87.1871 + neutron 0 1 4.52257 -6.58508 -77.7795 49.2539 + proton 1 1 4.32316 39.1326 -73.6456 -34.2966 + neutron 0 1 4.10721 82.0971 27.1532 16.0504 + neutron 0 1 2.89203 -44.8468 -9.11985 57.8658 + neutron 0 1 2.65645 -56.5549 31.8235 -28.0659 + neutron 0 1 2.55456 -31.4667 41.1 -46.1249 + proton 1 1 1.91562 26.1119 -28.2354 -46.0364 + neutron 0 1 1.88463 21.6781 -48.7673 26.3974 + neutron 0 1 1.37473 7.43484 -20.6819 -45.8494 + gamma 0 0 1.31988 -0.610696 1.16684 0.0872912 + neutron 0 1 1.2053 37.7293 -11.5622 26.6304 + neutron 0 1 0.5955 11.3989 14.2337 28.0508 + neutron 0 1 0.0724742 -4.25628 -10.3128 3.42408 + triton 1 3 1.67064 22.8994 -31.5961 -88.6937 + alpha 2 4 0.832298 -54.2052 35.8823 -44.4927 + deuteron 1 2 0.908966 53.7674 3.21248 -22.568 + Hf162[0.0] 72 162 0.387966 268.958 -210.298 -21.4472 +-0.000621136 0.000169369 -0.00421895 30 + proton 1 1 999.992 -74.395 20.2857 1694.28 + proton 1 1 220.055 27.7659 -361.275 574.522 + neutron 0 1 167.433 -419.539 293.163 284.087 + pi- -1 0 87.9421 -173.672 44.4745 -11.9206 + neutron 0 1 54.8 -189.278 -172.285 201.174 + neutron 0 1 39.4695 197.217 -76.8721 175.847 + proton 1 1 24.3027 -53.0366 167.847 123.329 + proton 1 1 11.9388 -89.8335 -90.336 79.4703 + neutron 0 1 11.4304 -45.7433 -131.188 -48.0333 + neutron 0 1 6.256 48.3707 32.8759 91.512 + neutron 0 1 5.52432 73.3768 44.8134 -54.9459 + neutron 0 1 4.43845 1.97197 67.1698 -62.0037 + proton 1 1 4.42958 -77.8602 -6.88522 47.1414 + proton 1 1 3.98083 22.6705 -80.6858 21.492 + neutron 0 1 3.85632 71.1587 -34.6412 31.5885 + neutron 0 1 3.41773 31.3966 32.306 66.3673 + neutron 0 1 3.24265 62.8697 -40.8343 -21.9967 + neutron 0 1 3.23903 -41.6954 -59.4768 -28.6539 + neutron 0 1 3.01241 -17.1979 57.1745 -45.8814 + neutron 0 1 2.97775 58.6692 -24.3848 -39.5949 + neutron 0 1 1.74955 -46.9686 -31.1853 -10.589 + neutron 0 1 1.47757 -38.1982 -9.22401 35.136 + neutron 0 1 1.46973 0.224827 -52.1956 -6.28824 + neutron 0 1 1.37487 39.3205 4.53232 -31.9188 + neutron 0 1 0.799144 11.5566 24.6559 27.5838 + neutron 0 1 0.779305 12.346 -23.1601 27.8605 + neutron 0 1 0.664935 -9.92457 -17.9488 28.7973 + neutron 0 1 0.636537 -12.6793 3.62067 31.9792 + alpha 2 4 1.79601 13.0185 -56.3875 -100.215 + W168[0.0] 74 168 1.86134 469.299 516.619 308.429 +0 0 -0.0302484 44 + proton 1 1 1000 0 0 1696.04 + proton 1 1 103.586 269.968 87.5356 352.942 + proton 1 1 99.407 -26.5336 -114.544 427.316 + proton 1 1 69.9025 -82.8923 -65.3129 -353.447 + proton 1 1 65.0253 -233.487 -65.863 259.609 + neutron 0 1 60.1423 132.081 247.289 195.026 + neutron 0 1 46.3473 286.195 -69.0485 50.6501 + neutron 0 1 45.2173 -209.911 195.03 70.1034 + proton 1 1 26.876 -205.227 18.0596 -93.3386 + neutron 0 1 19.5151 100.537 154.226 56.2055 + neutron 0 1 15.9121 -7.1424 -154.544 78.8615 + neutron 0 1 14.6476 -18.7103 147.876 74.3101 + neutron 0 1 14.508 160.971 -16.6513 35.8343 + proton 1 1 13.3227 -54.7663 -46.9561 -141.329 + neutron 0 1 11.4609 120.777 30.3215 -78.4951 + proton 1 1 10.5856 -53.1486 79.9331 103.742 + neutron 0 1 10.3179 90.2765 55.8503 -90.6972 + proton 1 1 9.76942 -105.704 -85.1708 -0.882739 + neutron 0 1 9.29702 -35.0206 -60.4658 112.58 + proton 1 1 9.06729 24.2198 -41.231 121.7 + proton 1 1 8.15115 73.2641 -32.0142 -94.7096 + neutron 0 1 7.62735 -81.6626 0.943429 87.8708 + neutron 0 1 6.33592 -78.9886 -33.306 -67.8063 + neutron 0 1 5.7406 -62.0171 -74.0488 -38.6128 + neutron 0 1 5.4728 91.156 44.0889 -7.79865 + neutron 0 1 5.44835 -1.69876 62.6907 -79.5918 + neutron 0 1 4.36389 12.5013 -79.1647 42.3796 + neutron 0 1 3.65669 36.2517 9.83606 73.9854 + neutron 0 1 2.10827 -3.17401 4.97246 -62.7006 + neutron 0 1 1.91129 -44.9211 33.1978 -21.7997 + proton 1 1 1.764 -32.3204 44.3396 17.3991 + gamma 0 0 1.73391 0.999042 0.392896 -1.36161 + neutron 0 1 1.35586 -7.31465 -9.99411 -48.952 + neutron 0 1 1.1161 24.4151 4.57235 38.4908 + proton 1 1 1.03003 30.6906 -10.8518 -29.5683 + neutron 0 1 0.867879 -6.24563 -7.00473 -39.2879 + gamma 0 0 0.796323 -0.622478 0.294615 -0.399816 + neutron 0 1 0.790231 -18.0621 31.2153 13.5991 + neutron 0 1 0.477298 -6.77452 21.9792 -19.1874 + neutron 0 1 0.442115 8.6015 -23.6307 14.0923 + neutron 0 1 0.438893 -6.82757 24.2781 13.7437 + neutron 0 1 0.257563 14.2322 16.5403 2.81481 + deuteron 1 2 6.87051 -7.50258 -78.7272 139.878 + Ho157[0.0] 67 157 1.39654 -86.4618 -246.935 582.872 +-0.000219484 0.00185551 0.0153427 28 + proton 1 1 999.995 -7.01752 59.3258 1694.98 + neutron 0 1 291.143 504.535 549.403 274.699 + neutron 0 1 223.772 -349.824 -304.061 505.708 + neutron 0 1 184.332 46.9306 174.068 589.797 + proton 1 1 66.6069 -302.397 -193.516 -23.1308 + proton 1 1 18.971 156.337 -106.382 -14.1921 + neutron 0 1 13.6836 111.114 115.999 9.92011 + neutron 0 1 11.6899 138.819 24.3788 -47.3148 + neutron 0 1 9.32855 -74.1859 -73.8906 81.5672 + neutron 0 1 5.52122 -37.0035 -24.6205 91.8158 + neutron 0 1 4.83819 -47.6868 73.996 -36.9535 + proton 1 1 4.12553 65.9168 -39.5342 43.0207 + neutron 0 1 2.68732 -67.7369 20.2161 -7.75067 + proton 1 1 2.48166 5.42693 -11.7527 67.0487 + neutron 0 1 2.45295 10.5088 -34.1872 -57.7601 + neutron 0 1 2.43995 24.2358 -35.412 -52.4362 + gamma 0 0 1.98153 -1.20182 -0.458392 1.5073 + neutron 0 1 1.82833 38.6696 -40.2766 17.9294 + gamma 0 0 1.3294 0.849902 1.01327 0.13517 + neutron 0 1 0.855873 -17.351 -35.3328 -7.71774 + neutron 0 1 0.76029 7.59924 24.4692 -27.7988 + neutron 0 1 0.587878 6.87661 -11.5924 30.3871 + neutron 0 1 0.50187 9.59213 -17.9929 22.969 + gamma 0 0 0.400591 -0.155365 -0.357197 0.093513 + neutron 0 1 0.387287 23.7594 -12.4475 2.90964 + gamma 0 0 0.0587857 -0.0415206 -0.00924991 -0.0405739 + gamma 0 0 0.041512 0.0380733 -0.00356763 0.0161535 + Os177[0.0] 76 177 0.368334 -260.645 17.6083 230.55 +-0.00113077 0.000300594 0.0210945 16 + proton 1 1 999.995 -58.6493 15.5908 1694.95 + neutron 0 1 353.608 697.36 -462.01 299.584 + proton 1 1 296.636 -555.849 301.619 494.673 + proton 1 1 120.01 -257.934 -163.059 382.736 + proton 1 1 95.2565 246.081 191.005 301.311 + neutron 0 1 37.1155 139.924 -53.5532 220.626 + neutron 0 1 11.4645 -90.3067 85.0667 79.2658 + neutron 0 1 1.88186 -49.7597 -15.4946 28.7001 + gamma 0 0 1.42543 0.204566 -0.63755 -1.25838 + neutron 0 1 1.29334 25.3798 -6.39938 -41.7965 + neutron 0 1 0.952939 23.8091 -31.1292 -15.9908 + neutron 0 1 0.897723 -20.9829 -15.3454 -31.8117 + gamma 0 0 0.28801 0.157295 -0.221653 0.0952789 + neutron 0 1 0.224495 2.24016 12.6773 16.0054 + neutron 0 1 0.0120356 0.00268767 1.05741 4.63665 + Ir186[0.0] 77 186 0.228926 -218.977 172.017 -41.8299 +0 0 -0.041257 23 + proton 1 1 1000 0 0 1696.04 + neutron 0 1 236.479 383.336 295.749 515.639 + pi0 0 0 178.339 144.088 82.2491 228.958 + proton 1 1 157.601 -267.592 73.3777 493.553 + neutron 0 1 96.5987 -245.934 -344.881 106.893 + proton 1 1 20.4458 196.818 4.79959 5.02697 + neutron 0 1 10.6937 -137.965 0.943875 -34.2622 + neutron 0 1 10.2438 105.487 -3.10901 -90.6496 + neutron 0 1 5.40551 42.5508 79.4485 -45.434 + neutron 0 1 3.70856 14.6647 -52.5813 63.2675 + neutron 0 1 2.66775 -11.4107 -49.2554 49.6374 + neutron 0 1 2.60666 48.2081 50.7919 1.10213 + neutron 0 1 2.40891 14.3843 -43.7945 -49.0672 + neutron 0 1 1.59174 -0.835615 21.5855 50.2691 + neutron 0 1 1.40131 12.7088 -49.1891 7.35768 + neutron 0 1 1.00894 -3.4648 -0.941776 43.4058 + gamma 0 0 0.520491 -0.169496 0.157646 0.466187 + gamma 0 0 0.463193 0.095267 -0.147963 -0.428461 + neutron 0 1 0.381701 4.80314 25.8533 5.09424 + neutron 0 1 0.188205 -18.0537 5.20213 -0.836303 + neutron 0 1 0.0500438 -2.2579 -7.77647 5.33571 + neutron 0 1 0.0296208 0.475408 -0.696268 7.41293 + Pt180[0.0] 78 180 0.588194 -279.937 -87.7857 333.296 +0 0 0.0339516 40 + proton 1 1 1000 0 0 1696.04 + proton 1 1 261.682 428.366 -26.4035 612.65 + proton 1 1 132.478 -163.793 443.138 207.247 + neutron 0 1 44.5716 -106.949 49.8172 267.997 + proton 1 1 44.1902 128.792 261.193 -8.27047 + proton 1 1 38.26 -263.756 -9.21724 60.0708 + proton 1 1 32.9993 -120.677 143.716 -166.722 + proton 1 1 27.4951 -191.181 120.901 34.4147 + neutron 0 1 25.834 -148.946 -155.44 53.5384 + neutron 0 1 19.9443 79.8794 168.348 56.1596 + proton 1 1 18.5738 -7.19846 -108.259 153.061 + neutron 0 1 16.7257 71.9121 149.51 64.692 + proton 1 1 15.2904 -8.2077 156.288 -66.586 + neutron 0 1 12.8184 149.115 -7.86549 -44.2096 + neutron 0 1 9.38015 -111.959 -67.0375 -26.1835 + neutron 0 1 7.7989 79.8418 -58.6526 -70.0083 + neutron 0 1 5.40217 44.6477 -80.5054 -41.3041 + neutron 0 1 5.07924 74.4152 -8.35629 -62.9516 + neutron 0 1 5.0577 -1.61403 -45.487 -86.3596 + neutron 0 1 4.68954 -15.8441 -73.936 -55.8273 + neutron 0 1 4.68922 14.053 60.2542 70.7502 + neutron 0 1 3.06255 72.1573 17.2272 16.1508 + neutron 0 1 2.74239 -35.3496 -59.7573 18.4469 + neutron 0 1 2.51903 -27.2787 53.6929 33.36 + neutron 0 1 2.18976 -59.5622 22.8075 7.19796 + neutron 0 1 2.15392 61.5723 -11.222 11.622 + neutron 0 1 1.96235 31.7033 -9.48832 50.9532 + neutron 0 1 1.80421 -4.30039 -33.9191 47.1657 + neutron 0 1 1.7571 20.435 -53.712 -1.52862 + neutron 0 1 1.65709 -4.06993 47.7748 28.5946 + neutron 0 1 1.53122 -44.3197 -23.3357 -19.2594 + gamma 0 0 1.5075 -0.853091 -0.809732 -0.94293 + gamma 0 0 1.33123 -0.728021 -0.205964 -1.09532 + neutron 0 1 0.960462 17.3845 38.0291 7.57118 + neutron 0 1 0.865187 -35.7397 -18.6682 0.849968 + proton 1 1 0.674929 14.4978 0.881423 -32.4966 + gamma 0 0 0.507936 -0.0176976 0.26508 -0.432918 + gamma 0 0 0.274053 0.251467 0.0837132 -0.0697248 + neutron 0 1 0.210451 18.3174 1.62916 -7.57148 + Lu164[0.0] 71 164 3.68381 45.003 -883.279 585.366 +0 0 0.00710382 22 + proton 1 1 1000 0 0 1696.04 + neutron 0 1 407.493 545.526 -89.89 791.268 + neutron 0 1 142.015 -318.049 -186.874 388.532 + pi+ 1 0 88.368 149.283 -27.579 97.1078 + neutron 0 1 48.824 -211.182 35.7032 219.677 + neutron 0 1 11.1522 61.5288 111.287 70.0734 + proton 1 1 10.9515 -106.305 55.2932 -79.4536 + proton 1 1 7.03977 6.15625 114.898 4.52068 + neutron 0 1 5.60765 -34.9472 83.6371 48.5023 + neutron 0 1 5.45731 -71.058 -38.7741 -61.0909 + neutron 0 1 2.34117 11.2007 -4.09005 65.2891 + neutron 0 1 1.90875 -58.182 -13.3134 5.29595 + neutron 0 1 1.73956 23.181 31.4211 -41.7999 + neutron 0 1 1.73767 -45.0147 34.8254 -5.40373 + gamma 0 0 1.68529 -1.42082 -0.330134 0.844099 + neutron 0 1 0.881373 -3.93618 6.85662 39.931 + proton 1 1 0.602925 22.6277 17.7563 -17.4494 + neutron 0 1 0.219783 0.295113 13.2938 -15.37 + neutron 0 1 0.137378 -8.15622 -13.3331 3.72483 + neutron 0 1 0.0946799 -12.7795 1.64985 -3.44777 + neutron 0 1 0.0390478 -6.03063 -1.3592 5.92971 + Os180[0.0] 76 180 0.157022 57.2644 -131.079 179.356 +-0.00668242 0.00439657 0.0439361 20 + proton 1 1 999.961 -143.625 94.4955 1687.26 + proton 1 1 332.802 -635.824 -363.379 446.048 + proton 1 1 225.594 580.004 240.398 282.902 + pi0 0 0 114.164 56.3029 127.049 156.654 + proton 1 1 45.0085 -125.433 141.426 225.281 + proton 1 1 22.2064 -198.216 -43.0043 32.0215 + neutron 0 1 9.49273 104.796 -51.587 65.4588 + neutron 0 1 8.63635 82.5884 -97.3168 3.46555 + neutron 0 1 5.77261 27.7028 -73.2907 -68.861 + neutron 0 1 5.11775 3.5027 65.3881 -73.1796 + neutron 0 1 2.83381 36.1551 34.4508 53.283 + neutron 0 1 2.80691 24.4905 -14.5213 66.8714 + neutron 0 1 1.61472 29.2967 12.5109 44.9674 + gamma 0 0 1.24717 -1.14774 0.271676 0.405355 + neutron 0 1 1.17794 21.367 -41.7681 -3.70888 + gamma 0 0 1.15364 0.208842 -0.804499 0.800029 + neutron 0 1 0.797122 9.12023 -32.9929 18.0782 + gamma 0 0 0.737785 0.220237 0.550712 0.438792 + gamma 0 0 0.271 0.212352 0.162713 0.0432726 + Os185[0.0] 76 185 0.731751 -158.973 190.952 436.287 +0.000619809 0.000175288 0.0236265 10 + proton 1 1 1000 14.7618 4.17475 1695.97 + proton 1 1 938.157 -364.046 -61.9284 1582.49 + neutron 0 1 10.2467 -52.0122 58.2416 115.163 + neutron 0 1 7.15611 110.902 -25.6148 23.3056 + neutron 0 1 2.13954 58.3637 9.45069 -23.0088 + gamma 0 0 1.39156 -1.30282 -0.34376 0.347743 + gamma 0 0 0.738247 0.265107 0.675236 0.137054 + neutron 0 1 0.644526 -22.631 21.1596 15.8642 + neutron 0 1 0.59959 -5.635 -21.7582 24.9379 + Au192[0.0] 79 192 0.243492 290.858 24.2926 -43.2649 +0 0 -0.0443479 18 + proton 1 1 1000 0 0 1696.04 + proton 1 1 628.85 -645.799 -182.617 1060.71 + neutron 0 1 92.2842 318.96 -149.119 240.746 + neutron 0 1 70.0904 309.879 190.251 66.3419 + neutron 0 1 47.3664 -235.284 98.3312 161.937 + neutron 0 1 42.0981 234.818 157.643 29.8215 + proton 1 1 9.36833 -33.6416 27.3894 125.642 + neutron 0 1 4.57069 -40.1749 -16.2372 82.0496 + neutron 0 1 3.11738 45.7903 -53.1387 30.7767 + gamma 0 0 2.77163 2.46488 -1.26483 -0.0806126 + neutron 0 1 0.833636 -19.3506 27.001 21.5338 + gamma 0 0 0.682985 -0.4162 -0.524613 -0.134267 + neutron 0 1 0.423423 22.7798 -3.75905 -16.211 + neutron 0 1 0.293205 -10.7549 0.983358 20.8428 + neutron 0 1 0.0915328 8.09562 9.8123 3.1922 + neutron 0 1 0.0720192 10.6102 -2.56595 4.02223 + neutron 0 1 0.0446427 -3.40797 -8.29471 1.86415 + Pt184[0.0] 78 184 0.0841858 35.4291 -93.8904 -137.02 +0 0 -0.0268678 36 + proton 1 1 1000 0 0 1696.04 + pi0 0 0 291.83 -180.099 271.343 240.586 + proton 1 1 88.3379 -14.3499 123.081 397.767 + neutron 0 1 48.4048 142.929 -159.399 217.865 + proton 1 1 37.484 -138.215 228.192 23.8845 + neutron 0 1 22.4563 199.115 -55.1859 -3.2057 + neutron 0 1 22.2426 -145.124 -45.0073 -138.582 + neutron 0 1 19.1461 37.1285 -138.44 125.699 + neutron 0 1 17.5506 -118.699 118.727 -71.4304 + neutron 0 1 14.9951 57.822 -12.369 -157.817 + neutron 0 1 13.2132 -39.3317 -151.958 -19.1212 + neutron 0 1 12.4475 89.2704 121.676 27.7718 + neutron 0 1 10.4537 73.445 -45.0661 -111.032 + neutron 0 1 9.96907 -19.4791 131.82 -32.8129 + neutron 0 1 7.07992 -31.8242 -103.865 -39.4156 + neutron 0 1 6.03653 -77.2933 37.4217 63.2868 + proton 1 1 4.71914 -55.0176 -19.1516 -74.0556 + neutron 0 1 4.41397 -65.8505 60.8079 -16.7337 + neutron 0 1 4.26065 -34.2025 -76.8143 30.8903 + neutron 0 1 3.57999 47.1631 56.1508 36.9163 + gamma 0 0 2.99504 2.42733 -1.6405 0.622147 + gamma 0 0 2.46139 1.57499 -1.69408 -0.841389 + neutron 0 1 2.39725 21.9809 27.6405 -57.1255 + neutron 0 1 2.35556 64.7935 15.2868 -0.275461 + neutron 0 1 2.06963 -39.4539 42.2501 -23.4887 + gamma 0 0 1.73765 -1.48564 0.081812 0.897568 + gamma 0 0 1.41363 0.48991 0.260033 -1.30028 + neutron 0 1 1.35791 -39.9563 -14.341 -27.4111 + gamma 0 0 1.10255 -0.123264 -0.0266675 -1.09531 + gamma 0 0 1.05137 -0.239197 -0.494419 -0.896503 + neutron 0 1 0.891276 37.512 14.6473 -7.34361 + neutron 0 1 0.643685 -23.741 14.1309 -21.1345 + neutron 0 1 0.357958 -12.4039 14.1176 17.8777 + alpha 2 4 0.890463 20.3267 66.7378 42.0944 + triton 1 3 0.65084 27.0511 -38.2965 38.1941 + W166[0.0] 74 166 5.84409 213.863 -480.625 1236.81 +0 0 0.0151999 43 + proton 1 1 1000 0 0 1696.04 + neutron 0 1 374.768 -331.993 -335.788 788.49 + proton 1 1 60.8703 131.621 -315.96 27.8609 + proton 1 1 59.2736 -264.664 -210.895 -14.8057 + neutron 0 1 43.4794 101.274 254.001 93.9207 + proton 1 1 25.1318 -15.9696 87.5615 199.676 + proton 1 1 24.3254 -134.422 3.05209 167.812 + neutron 0 1 15.376 72.3746 43.8491 -148.22 + proton 1 1 13.0865 -123.155 82.2481 52.8856 + proton 1 1 10.9138 47.2205 2.60223 135.509 + neutron 0 1 10.6386 73.1739 113.744 42.5723 + neutron 0 1 10.6307 58.2399 26.9471 -126.378 + neutron 0 1 9.64264 2.21444 -134.861 4.51882 + proton 1 1 7.72284 54.73 -76.9865 75.0307 + neutron 0 1 7.61703 -40.7585 112.554 -6.46612 + neutron 0 1 6.8017 -36.3657 100.249 -38.1472 + neutron 0 1 6.26743 2.84481 83.6536 69.3584 + gamma 0 0 6.02718 -0.503253 1.24567 5.87554 + proton 1 1 5.98736 27.7387 -99.7958 -23.2973 + neutron 0 1 4.26315 -88.7736 10.2819 6.5355 + neutron 0 1 4.23877 16.0593 -36.3681 80.0164 + neutron 0 1 3.24989 -8.59319 -8.48297 77.277 + proton 1 1 3.1385 -6.67725 -63.3802 42.869 + gamma 0 0 2.01872 -1.95985 -0.413334 0.251788 + neutron 0 1 2.00773 -7.66486 -50.3294 34.4242 + neutron 0 1 1.96219 -42.6126 -7.99918 42.5587 + neutron 0 1 1.87457 15.9947 -55.62 -13.2915 + gamma 0 0 1.84874 -1.77443 0.490157 -0.170279 + neutron 0 1 1.36963 39.8832 6.90526 -30.6142 + neutron 0 1 1.26137 -27.0499 -14.0885 -37.9695 + neutron 0 1 1.02547 -16.374 36.9664 -17.1297 + neutron 0 1 0.86971 21.913 30.5993 -14.7837 + neutron 0 1 0.786368 26.9579 -25.5246 10.0037 + neutron 0 1 0.736704 -24.4304 13.9947 -24.3354 + neutron 0 1 0.414518 23.1725 15.5454 0.694505 + neutron 0 1 0.4057 -27.3109 3.69587 -1.72727 + neutron 0 1 0.374944 -18.672 18.7021 2.50911 + neutron 0 1 0.328818 -20.5108 6.24137 -12.5838 + gamma 0 0 0.103308 -0.0954208 0.0307985 0.0248772 + neutron 0 1 0.0812819 5.92991 -10.5875 -2.34248 + neutron 0 1 0.0496072 1.42741 -2.99958 9.06565 + deuteron 1 2 5.83204 27.5205 143.283 -24.9771 + Yb160[0.0] 70 160 1.25184 490.041 251.635 263.537 +-0.00150879 0.00167725 0.0212584 33 + proton 1 1 999.994 -46.0604 51.2031 1694.63 + neutron 0 1 276.75 333.888 58.1783 694.1 + proton 1 1 123.037 -140.007 290.333 -376.997 + neutron 0 1 109.052 148.982 440.334 -26.9492 + neutron 0 1 94.2297 161.733 -130.406 377.87 + neutron 0 1 31.4362 34.9313 -180.387 -162.177 + neutron 0 1 24.6114 -104.583 -189.514 -0.749061 + neutron 0 1 19.149 181.615 -57.986 1.941 + neutron 0 1 10.4232 106.045 -91.6208 -7.4447 + neutron 0 1 9.42656 -30.8533 8.47043 129.534 + neutron 0 1 7.61566 -104.242 50.4056 -31.0124 + proton 1 1 6.13253 24.4822 38.662 -97.2185 + neutron 0 1 5.79676 -89.7393 52.5117 10.7631 + neutron 0 1 5.34175 15.2318 -6.6714 98.9438 + proton 1 1 5.18752 -77.935 55.8886 -23.7513 + neutron 0 1 3.93509 37.1859 68.4672 36.5991 + proton 1 1 3.4278 -4.98531 78.7576 -14.7159 + proton 1 1 3.13629 39.0392 -61.8593 -23.3361 + neutron 0 1 2.61865 -42.5403 -54.6764 -11.3342 + neutron 0 1 2.14793 -17.8963 -58.8872 -15.9024 + neutron 0 1 1.94088 44.24 -36.1758 19.6233 + neutron 0 1 1.78136 25.5064 -34.0718 39.2315 + neutron 0 1 1.30005 14.0297 21.3893 42.3122 + neutron 0 1 1.11585 9.42208 -35.5765 -27.2693 + neutron 0 1 1.08683 36.3932 3.32177 -26.6078 + neutron 0 1 0.506452 -30.2087 -5.97077 -1.93086 + neutron 0 1 0.246848 18.1953 -10.587 4.55691 + neutron 0 1 0.237655 2.4924 -9.16351 18.8801 + gamma 0 0 0.144984 0.0776904 -0.122063 -0.00922407 + neutron 0 1 0.0528968 -5.58854 -3.26552 7.58337 + alpha 2 4 7.4742 -65.9598 217.961 -62.5872 + deuteron 1 2 24.8918 273.991 110.857 81.4496 + Hf164[0.0] 72 164 6.60204 -839.006 -477.392 1041.23 +0 0 -0.0245185 27 + proton 1 1 1000 0 0 1696.04 + proton 1 1 370.78 477.4 -152.549 762.942 + proton 1 1 123.232 432.31 191.202 -151.609 + neutron 0 1 92.6613 -357.331 -193.927 -131.969 + proton 1 1 81.0195 96.8039 176.725 343.508 + neutron 0 1 56.596 183.642 -119.036 -248.315 + proton 1 1 35.3849 154.649 16.3923 208.49 + neutron 0 1 31.7302 34.6025 -228.42 85.2012 + neutron 0 1 17.931 -98.5961 145.746 -55.2559 + proton 1 1 10.4642 10.6562 -137.83 25.2033 + gamma 0 0 2.74946 0.0137597 0.75164 2.64469 + neutron 0 1 2.26951 7.62153 -39.0464 -51.8377 + neutron 0 1 2.17652 -63.08 -2.57269 10.44 + neutron 0 1 2.00714 52.8813 31.2847 0.738825 + neutron 0 1 1.2541 -32.0399 36.4782 0.992409 + neutron 0 1 0.91332 -30.1576 -10.5374 -26.3925 + neutron 0 1 0.791504 24.5458 18.1186 23.6048 + neutron 0 1 0.768878 -32.1876 -20.2329 0.0276634 + neutron 0 1 0.68903 7.71267 29.6908 -18.8208 + neutron 0 1 0.614803 4.15274 32.3932 9.43986 + gamma 0 0 0.582766 -0.149402 0.061499 0.559922 + neutron 0 1 0.533829 -1.52082 28.5944 13.5449 + neutron 0 1 0.381075 15.3656 21.5539 -3.94492 + neutron 0 1 0.231676 9.27014 1.0707 -18.6634 + neutron 0 1 0.0793129 -11.4858 2.41042 3.36348 + neutron 0 1 0.0147245 1.3552 -4.89647 -1.3629 + Re175[0.0] 75 175 5.06797 -886.437 176.576 913.513 +0 0 -0.0260088 32 + proton 1 1 1000 0 0 1696.04 + neutron 0 1 203.496 -410.129 451.02 228.43 + proton 1 1 147.484 534.672 -54.7889 98.1668 + proton 1 1 105.655 -196.457 -408.913 60.1923 + neutron 0 1 65.3759 177.677 -295.889 -89.4677 + neutron 0 1 59.7242 105.834 -216.144 240.578 + neutron 0 1 54.8313 307.742 52.8908 -92.4071 + neutron 0 1 53.8396 223.784 41.9549 228.54 + neutron 0 1 21.0691 3.08139 73.8992 185.916 + neutron 0 1 11.8725 -86.783 82.8828 -89.7224 + neutron 0 1 10.3648 -79.5789 79.383 83.3651 + neutron 0 1 9.27135 -1.99885 129.323 27.9229 + neutron 0 1 7.40821 46.8126 41.2823 -100.4 + neutron 0 1 7.12203 85.1038 -70.5162 34.9106 + neutron 0 1 5.49397 -50.4888 88.3289 -1.72008 + neutron 0 1 5.04433 13.9654 2.39006 96.4555 + gamma 0 0 4.61501 0.348159 -4.28498 -1.67811 + neutron 0 1 4.37781 65.1989 37.263 51.051 + proton 1 1 2.27427 -41.6878 41.5199 -28.481 + neutron 0 1 2.1462 -38.6433 -35.0292 -36.2937 + proton 1 1 2.09106 35.6354 -51.5143 2.17576 + neutron 0 1 2.06512 41.7858 33.8298 31.534 + neutron 0 1 0.912959 -23.0285 24.5975 24.105 + neutron 0 1 0.662101 -10.3759 -30.1618 -15.0738 + neutron 0 1 0.518271 8.2136 -5.52139 29.601 + neutron 0 1 0.380056 -8.59498 14.3491 20.8459 + gamma 0 0 0.252124 0.127577 0.0908151 -0.197594 + gamma 0 0 0.158927 -0.140246 -0.0661582 0.0348127 + alpha 2 4 4.00071 166.675 35.2578 28.5845 + triton 1 3 12.414 -215.42 -17.5155 152.281 + deuteron 1 2 0.420041 22.4184 -6.75547 32.0566 + Hf165[0.0] 72 165 2.28672 -675.762 -33.1652 494.741 +0 0 -0.034343 30 + proton 1 1 1000 0 0 1696.04 + neutron 0 1 318.999 481.545 -157.996 666.598 + neutron 0 1 148.514 93.9058 -220.971 -493.445 + neutron 0 1 91.0897 -11.523 -368.271 -209.071 + neutron 0 1 82.2267 225.198 293.458 -156.346 + proton 1 1 79.4967 -136.596 311.318 199.803 + neutron 0 1 19.8994 -79.6692 155.978 -84.3394 + neutron 0 1 12.8888 23.1755 81.6053 131.108 + neutron 0 1 9.10173 -58.0041 90.862 -74.6043 + neutron 0 1 8.12453 -80.8828 48.57 80.1998 + proton 1 1 6.29907 23.2943 51.4448 93.1181 + neutron 0 1 5.014 21.2529 93.4035 -16.4683 + neutron 0 1 3.98959 -38.8604 -64.8391 42.4105 + neutron 0 1 3.64662 -44.1087 -22.8624 -66.3138 + neutron 0 1 3.12728 34.2921 50.6324 46.3331 + neutron 0 1 2.82029 -17.7991 17.6319 68.4103 + neutron 0 1 2.47971 26.4061 59.0222 22.0214 + neutron 0 1 2.11609 10.2315 -42.8706 -45.1478 + neutron 0 1 2.07831 -50.246 2.3779 -37.1406 + gamma 0 0 1.94905 -0.131047 1.70386 -0.937271 + proton 1 1 1.79916 5.0356 55.3514 17.0382 + neutron 0 1 1.21685 -43.3415 -16.4284 -11.8208 + neutron 0 1 0.864418 17.4008 -34.0685 12.7142 + gamma 0 0 0.761128 0.238575 -0.249003 0.678524 + gamma 0 0 0.672759 0.133738 -0.514013 0.412927 + neutron 0 1 0.366038 -1.63358 -23.8244 10.8489 + neutron 0 1 0.25925 6.11883 6.12009 20.3061 + neutron 0 1 0.232115 8.20221 -1.21121 19.1699 + gamma 0 0 0.119324 0.105953 -0.0375088 -0.0400632 + Ir174[0.0] 77 174 7.52363 -413.745 -365.34 1460.55 +0 0 -0.0424028 28 + proton 1 1 1000 0 0 1696.04 + proton 1 1 361.467 65.3551 416.86 794.306 + proton 1 1 127.991 -470.538 -161.421 95.3928 + neutron 0 1 75.208 196.8 -266.889 -192.411 + proton 1 1 68.3426 -340.489 130.316 -1.89457 + neutron 0 1 39.9054 270.168 -19.4268 -56.6722 + neutron 0 1 26.1061 11.5585 -179.765 131.488 + neutron 0 1 25.4144 -43.8798 -63.9171 205.893 + neutron 0 1 22.9047 -55.8715 -154.069 129.254 + neutron 0 1 15.2426 109.285 -126.652 -29.854 + neutron 0 1 9.10091 -101.402 -82.8605 -6.03749 + neutron 0 1 7.93276 -92.9704 -76.6678 -21.1704 + neutron 0 1 7.78053 -57.8825 53.5037 92.0224 + neutron 0 1 7.66901 42.1609 -111.364 -17.043 + neutron 0 1 4.79021 66.2718 13.9582 -66.6152 + neutron 0 1 2.86558 55.2376 47.4053 9.7241 + neutron 0 1 2.7727 71.7448 7.21277 4.31447 + gamma 0 0 2.28801 -1.05725 -1.85726 0.817181 + neutron 0 1 1.94192 34.1094 49.6452 4.97873 + neutron 0 1 1.79707 53.4832 -21.4309 7.77276 + neutron 0 1 1.66568 -43.6305 32.5049 13.1382 + gamma 0 0 1.60811 -1.09041 -0.875842 -0.793677 + gamma 0 0 1.15084 -0.903048 0.318022 0.638596 + neutron 0 1 0.801943 28.7637 -7.88676 -24.8606 + neutron 0 1 0.300005 4.82153 1.15875 23.2217 + neutron 0 1 0.229505 -5.39711 -11.2955 16.5712 + triton 1 3 5.70875 -67.8121 142.162 -85.4327 + Os173[0.0] 76 173 2.09754 273.159 391.347 669.289 +0 0 0.0375754 12 + proton 1 1 1000 0 0 1696.04 + proton 1 1 568.495 431.754 -417.45 1014.55 + proton 1 1 402.414 -318.326 464.336 774.691 + gamma 0 0 2.02903 -0.0800697 -1.18501 -1.64509 + neutron 0 1 1.61851 35.8294 -41.7759 -3.87955 + gamma 0 0 1.14165 -0.853488 -0.562287 -0.508685 + neutron 0 1 1.10831 -24.1095 26.8544 27.9547 + gamma 0 0 1.03671 -0.619002 -0.540284 0.63222 + gamma 0 0 0.975895 -0.435356 0.389106 -0.781942 + gamma 0 0 0.96257 0.330035 0.64596 0.632734 + gamma 0 0 0.189612 -0.0124063 -0.033389 -0.186237 + Pt194[0.0] 78 194 0.0816841 -123.478 -30.6785 -115.422 +0 0 -0.0241656 42 + proton 1 1 1000 0 0 1696.04 + proton 1 1 205.682 -323.602 245.684 513.028 + neutron 0 1 205.528 -460.093 -121.7 -449.399 + proton 1 1 112.35 68.6716 244.192 398.883 + proton 1 1 86.3141 105.563 -19.6822 397.356 + proton 1 1 25.6845 -60.6915 -186.877 101.248 + proton 1 1 24.7708 56.9021 15.312 208.866 + neutron 0 1 22.8759 36.0793 156.939 132.584 + neutron 0 1 21.6207 -89.2319 -170.056 64.9152 + proton 1 1 10.1707 117.938 27.0282 67.4493 + neutron 0 1 8.08188 -69.0974 -46.4995 -91.1897 + neutron 0 1 6.68616 4.66719 72.2409 85.8391 + neutron 0 1 6.40228 -92.0495 56.5719 -19.9561 + neutron 0 1 4.94512 25.6564 -90.6617 -20.9568 + neutron 0 1 3.82492 10.7636 7.92996 83.8058 + gamma 0 0 3.67128 3.04776 2.04109 0.152976 + neutron 0 1 3.59303 76.1658 -3.78344 30.8081 + neutron 0 1 3.48654 0.000436851 -80.889 4.56098 + neutron 0 1 2.71109 -64.7001 -25.9055 -15.6411 + neutron 0 1 2.62064 -38.16 -44.9268 -38.1679 + neutron 0 1 2.51975 16.7399 19.894 -63.7596 + neutron 0 1 2.28967 -44.6132 -24.8941 -41.204 + gamma 0 0 1.46692 0.132048 -0.674066 -1.29617 + neutron 0 1 1.22351 14.8516 36.3999 -27.4793 + neutron 0 1 1.20969 15.5616 41.8482 16.769 + neutron 0 1 0.979603 -26.0991 9.56932 -32.696 + gamma 0 0 0.815514 0.031978 -0.170253 -0.796903 + gamma 0 0 0.805653 -0.225648 -0.244291 0.733813 + gamma 0 0 0.788566 -0.0488781 0.167046 -0.769118 + neutron 0 1 0.67718 -9.54208 -11.3761 32.4423 + proton 1 1 0.663891 30.7228 -17.1065 3.12117 + neutron 0 1 0.614697 18.9376 -28.2281 -0.128743 + neutron 0 1 0.519572 -18.1179 -20.0228 15.7304 + neutron 0 1 0.432435 20.2671 19.4533 -4.85836 + gamma 0 0 0.415529 -0.243576 0.286203 0.177267 + neutron 0 1 0.111741 -14.275 0.717289 -2.38722 + neutron 0 1 0.0985224 7.04205 -7.89879 8.55364 + neutron 0 1 0.00781862 1.92129 -3.31541 -0.0946903 + alpha 2 4 5.43159 161.132 26.9797 117.6 + alpha 2 4 5.61963 156.609 104.807 80.089 + alpha 2 4 2.26586 -25.1415 60.7842 -112.116 + Ho155[0.0] 67 155 0.947936 386.532 -243.931 254.226 +0 0 0.0172698 26 + proton 1 1 1000 0 0 1696.04 + proton 1 1 365.705 -671.642 -19.5973 607.053 + neutron 0 1 145.098 104.79 57.5602 528.599 + neutron 0 1 112.903 200.376 -358.646 -236.918 + neutron 0 1 104.797 -89.2479 177.372 410.466 + proton 1 1 38.5143 9.88655 83.4425 258.257 + neutron 0 1 26.2758 137.605 -71.3456 -161.372 + neutron 0 1 11.9843 -32.1061 -1.06014 147.078 + neutron 0 1 9.02972 -58.0892 94.6063 68.7376 + neutron 0 1 7.82982 -59.4816 61.6194 -86.2529 + neutron 0 1 7.0216 94.7119 43.2546 -49.0155 + gamma 0 0 3.34972 0.217454 2.29814 -2.42733 + neutron 0 1 2.43013 49.6038 6.19177 45.5365 + neutron 0 1 2.40774 11.0613 -25.261 -61.3985 + gamma 0 0 2.11089 1.01574 -1.3272 -1.28944 + gamma 0 0 1.94887 -1.61243 0.984057 0.479374 + neutron 0 1 1.93607 48.4491 -19.5032 -30.2357 + neutron 0 1 1.79545 -38.0019 34.3127 27.4883 + neutron 0 1 1.54162 -28.7355 40.9721 19.8707 + neutron 0 1 0.963324 -15.9767 25.0775 30.4467 + neutron 0 1 0.884703 -20.0975 -34.6879 -7.48957 + neutron 0 1 0.71139 10.2531 12.5242 32.792 + gamma 0 0 0.124852 -8.77343e-05 -0.00753198 -0.124625 + neutron 0 1 0.0731471 0.841546 -7.86283 -8.65599 + neutron 0 1 0.011888 -2.5944 2.12732 3.32908 + Pt178[0.0] 78 178 0.477299 348.775 -103.046 161.084 +0 0 0.031297 27 + proton 1 1 1000 0 0 1696.04 + proton 1 1 140.971 178.453 -277.119 419.25 + proton 1 1 133.961 -147.879 362.677 -340.481 + neutron 0 1 133.815 473.724 -82.8891 -195.134 + neutron 0 1 132.645 -285.734 -2.53862 430.352 + proton 1 1 105.367 336.02 170.614 258.477 + neutron 0 1 69.3741 29.8241 -66.9198 360.289 + proton 1 1 47.3076 -88.1721 -120.299 262.234 + proton 1 1 26.4819 91.7179 -93.39 182.378 + neutron 0 1 11.5316 135.678 -45.324 36.6001 + neutron 0 1 10.142 -64.8243 107.781 -57.8115 + neutron 0 1 9.65135 -111.801 -67.4188 34.4182 + neutron 0 1 7.01511 -59.8289 -94.5471 26.6997 + neutron 0 1 5.79911 56.2579 -29.6029 83.0039 + neutron 0 1 5.65012 3.24421 14.0342 102.185 + neutron 0 1 3.94102 -82.5898 -18.6087 -15.9335 + gamma 0 0 3.44662 -0.822866 0.865727 3.23305 + neutron 0 1 2.28498 -18.9718 46.4731 42.1821 + gamma 0 0 1.90783 0.651463 -1.08472 -1.42786 + gamma 0 0 1.82515 -0.0910014 1.17551 -1.39322 + neutron 0 1 1.52095 48.7824 21.9238 -0.0146152 + neutron 0 1 1.34697 35.6809 35.1826 -4.69047 + neutron 0 1 0.671927 -7.9795 24.259 -24.7168 + gamma 0 0 0.179345 0.052531 0.0621588 0.159817 + neutron 0 1 0.155487 8.49028 14.4267 -3.46261 + neutron 0 1 0.029671 -0.429553 -3.5615 6.54888 + Re177[0.0] 75 177 0.909543 -529.454 103.83 93.0928 +0.000142025 -0.0011493 0.0268 29 + proton 1 1 999.992 25.4807 -17.7094 1695.75 + neutron 0 1 263.199 393.653 257.056 585.507 + proton 1 1 135.251 28.1535 293.306 430.438 + neutron 0 1 105.597 -375.574 -189.088 181.027 + proton 1 1 85.0642 -251.747 -96.2459 306.958 + proton 1 1 63.6042 -142.621 -296.678 -122.651 + proton 1 1 61.3587 298.121 112.018 132.223 + neutron 0 1 24.4968 -142.509 -76.7945 142.922 + proton 1 1 13.4961 85.4757 -80.3652 108.368 + proton 1 1 12.0957 12.8511 -125.429 83.3477 + neutron 0 1 11.8677 -102.567 -101.995 -38.9735 + proton 1 1 11.559 -78.9034 -87.6922 88.9326 + neutron 0 1 10.157 125.518 -41.6673 41.2133 + neutron 0 1 9.0762 32.4442 49.0368 116.964 + neutron 0 1 4.02274 59.1988 0.82755 63.7986 + neutron 0 1 3.76527 -79.8256 -20.8197 16.8534 + neutron 0 1 3.39591 -51.6593 49.3624 35.8828 + neutron 0 1 2.92498 47.2842 50.5371 -26.743 + neutron 0 1 2.51735 -53.6834 -21.1048 -37.5426 + neutron 0 1 1.83681 -14.9872 -53.5135 19.1485 + gamma 0 0 1.8079 -0.979861 1.3378 0.720195 + neutron 0 1 1.50706 -7.11647 35.1099 39.3813 + neutron 0 1 1.26703 0.635486 -30.6098 -38.0152 + neutron 0 1 0.829978 -28.3481 22.6055 15.6748 + neutron 0 1 0.481703 -5.95145 28.7007 -6.8018 + gamma 0 0 0.47674 0.429392 -0.191408 -0.0791657 + neutron 0 1 0.44937 15.9308 11.8133 -21.2434 + neutron 0 1 0.0873812 6.6832 -7.0915 -8.32188 + Ta173[0.0] 73 173 1.01208 255.575 299.865 -413.245 +0 0 -0.0489119 8 + proton 1 1 1000 0 0 1696.04 + pi0 0 0 467.139 260.574 -63.566 521.905 + proton 1 1 270.823 37.1376 30.5996 761.079 + neutron 0 1 110.511 -224.912 25.8399 410.639 + gamma 0 0 1.01642 -0.330701 0.931723 -0.235863 + gamma 0 0 0.409352 -0.0616194 -0.331692 0.231847 + neutron 0 1 0.256063 9.37775 8.42898 -17.9514 + Au195[0.0] 79 195 0.019572 -81.7855 -1.90233 20.3677 +-0.00154522 0.000579003 0.0180445 15 + proton 1 1 999.988 -87.493 32.7841 1693.45 + pi0 0 0 484.393 -208.382 129.042 552.562 + neutron 0 1 141.507 -85.566 -88.9422 520.29 + pi- -1 0 16.7475 12.1902 66.7308 18.8085 + neutron 0 1 6.87185 -4.27784 -75.145 -85.4123 + neutron 0 1 2.60028 -62.9752 25.8807 -16.0417 + neutron 0 1 2.20957 -26.2472 20.9331 55.044 + gamma 0 0 1.79055 1.52795 -0.451272 -0.8172 + neutron 0 1 1.75574 30.2565 9.90907 -47.8405 + neutron 0 1 1.38158 13.629 -32.4953 -36.829 + neutron 0 1 0.816302 -25.8553 22.2149 19.303 + neutron 0 1 0.58177 -13.2976 25.2155 -16.7605 + gamma 0 0 0.412918 -0.266554 0.302786 0.0881526 + gamma 0 0 0.168416 -0.0766106 0.0886412 -0.120985 + Tl190[0.0] 81 190 1.74946 281.85 -70.5004 731.174 +-0.000470108 -0.000395645 0.0290492 24 + proton 1 1 999.996 -29.5816 -27.6474 1695.55 + proton 1 1 213.847 -202.175 260.969 581.416 + proton 1 1 153.177 432.988 -302.049 -179.428 + proton 1 1 149.001 42.2728 150.907 -526.543 + proton 1 1 96.0254 -293.885 -308.592 88.4268 + proton 1 1 78.5851 266.874 155.544 241.306 + proton 1 1 54.9273 -98.1712 -290.532 -109.747 + neutron 0 1 48.67 193.998 -179.647 154.654 + proton 1 1 13.6749 126.949 -3.50406 -98.591 + neutron 0 1 13.3463 -34.9908 47.9996 -147.408 + neutron 0 1 12.8204 -34.4771 25.7844 149.673 + neutron 0 1 5.64054 26.7068 -21.9917 -97.13 + neutron 0 1 5.12456 -73.78 -30.1199 -57.4916 + neutron 0 1 5.04705 -68.8806 57.5201 38.1634 + neutron 0 1 4.42306 -46.9498 -77.9449 -7.16791 + neutron 0 1 2.45151 38.2635 -55.5625 7.83725 + neutron 0 1 1.6931 26.9592 33.8569 -36.2123 + gamma 0 0 1.16717 0.414747 -1.08421 -0.121527 + neutron 0 1 0.870743 30.4268 12.1541 -23.7379 + gamma 0 0 0.307657 -0.110496 0.287106 0.00375806 + neutron 0 1 0.267538 16.0047 13.0253 8.77509 + neutron 0 1 0.258569 9.02 19.8184 3.43824 + neutron 0 1 0.0848137 3.77072 -0.692918 12.0285 + Ta178[0.0] 73 178 9.76843 -390.809 466.207 1693.41 +0 0 -0.0119843 36 + proton 1 1 1000 0 0 1696.04 + proton 1 1 228.216 -233.884 347.547 552.132 + neutron 0 1 181.334 335.295 -498.412 113.116 + proton 1 1 99.026 -13.6667 401.786 -184.428 + neutron 0 1 82.4216 216.427 -337.403 -31.5137 + proton 1 1 67.9246 59.7768 -298.171 198.993 + neutron 0 1 18.1502 -7.81074 79.3618 167.561 + proton 1 1 15.917 -93.1855 -45.6677 139.116 + neutron 0 1 12.8441 139.873 9.5358 68.156 + neutron 0 1 9.45156 8.6071 58.0623 120.02 + neutron 0 1 9.14737 -112.722 -62.2903 -26.2006 + neutron 0 1 9.11023 55.8232 -90.1092 77.2426 + neutron 0 1 7.62114 93.1068 37.7156 65.4818 + proton 1 1 4.57831 -22.6117 -32.7462 83.8378 + proton 1 1 4.2015 -40.5655 78.715 -7.76768 + neutron 0 1 4.0743 -4.77773 79.998 35.3587 + gamma 0 0 3.35223 2.95899 0.32206 -1.54212 + neutron 0 1 2.7974 14.1688 37.0505 60.7536 + neutron 0 1 2.48792 -40.6455 -3.73727 54.9116 + neutron 0 1 2.26812 -41.3401 46.2814 20.4024 + neutron 0 1 1.89871 55.2967 22.1276 -4.91699 + neutron 0 1 1.70687 20.1711 -51.2414 -13.3337 + neutron 0 1 1.4346 -33.015 -2.96369 39.9886 + neutron 0 1 1.36778 31.8323 19.8025 -34.1567 + neutron 0 1 1.11727 24.7718 30.6935 23.3456 + neutron 0 1 0.86923 1.03452 -18.174 36.0941 + neutron 0 1 0.828217 -8.84424 28.3314 -26.0024 + gamma 0 0 0.791958 -0.158103 -0.529615 0.567194 + neutron 0 1 0.451291 -15.3612 -24.4034 -4.09196 + gamma 0 0 0.430298 0.0534224 0.0942639 0.416433 + neutron 0 1 0.136202 15.2407 0.545778 -4.83559 + neutron 0 1 0.0861392 -10.2373 7.2638 2.07609 + neutron 0 1 0.046095 -0.929142 0.671017 9.23618 + deuteron 1 2 8.15658 -86.3567 36.1062 -147.995 + alpha 2 4 1.94699 24.1972 34.3416 112.931 + Lu163[0.0] 71 163 0.537087 -332.526 109.497 201.085 +2.65355e-05 -3.76888e-06 0.0322844 37 + proton 1 1 999.998 37.6067 -5.34134 1695.61 + pi+ 1 0 237.515 181.085 -199.633 223.76 + neutron 0 1 185.841 207.003 14.3693 583.695 + neutron 0 1 31.9628 -139.883 199.565 41.1137 + neutron 0 1 19.5252 179.85 26.2662 63.5274 + neutron 0 1 19.1356 -159.334 -16.3211 -103.299 + neutron 0 1 16.8256 -1.27361 -156.539 85.9921 + proton 1 1 14.3118 -19.7911 -21.4026 161.901 + neutron 0 1 12.7294 -33.5098 -28.6934 -148.782 + neutron 0 1 12.0282 -81.4142 126.744 -7.40599 + neutron 0 1 10.5185 -91.3888 74.5638 -77.2306 + proton 1 1 10.5161 58.3416 128.11 5.33907 + neutron 0 1 8.98334 -105.821 -63.312 -41.8938 + neutron 0 1 7.97358 12.4805 70.3499 -99.7102 + neutron 0 1 7.88735 78.0221 -10.8349 93.1597 + neutron 0 1 4.85613 62.2204 -70.1569 -18.8555 + neutron 0 1 4.66851 -71.7439 38.7587 46.3155 + proton 1 1 4.37827 -39.7329 73.7864 -34.8147 + neutron 0 1 3.72032 75.8858 35.0293 -4.37013 + neutron 0 1 3.46243 -9.03056 24.9625 76.2475 + neutron 0 1 2.917 -2.83063 -27.0961 -68.9038 + neutron 0 1 2.77287 34.6373 57.2149 27.2945 + neutron 0 1 2.42 -2.29212 41.3137 -53.3037 + proton 1 1 1.97755 21.1922 -16.1528 54.8166 + neutron 0 1 1.95359 -0.695163 48.6388 -36.1754 + proton 1 1 1.34597 6.88321 -49.5475 -5.02549 + neutron 0 1 1.18361 -17.7943 -25.3477 -35.5868 + neutron 0 1 1.13717 -14.1454 -14.3091 41.6335 + neutron 0 1 0.540587 -11.4588 -27.5884 11.1222 + neutron 0 1 0.474873 21.9075 18.0253 9.36608 + neutron 0 1 0.112139 -4.45042 12.2041 6.48012 + neutron 0 1 0.0994244 9.24451 -9.93207 -1.65361 + neutron 0 1 0.0936509 6.68644 6.25972 9.5968 + gamma 0 0 0.0778019 0.0457064 0.0480301 0.0407085 + alpha 2 4 0.931055 -67.6165 20.3745 44.211 + alpha 2 4 4.2917 -145.557 -79.8076 66.7543 + Yb159[0.0] 70 159 2.23389 101.885 -205.254 780.257 +0 0 -0.0317042 20 + proton 1 1 1000 0 0 1696.04 + proton 1 1 516.93 615.417 145.543 915.061 + proton 1 1 91.6815 175.673 -366.411 -123.821 + neutron 0 1 73.3962 230.316 -187.154 -235.023 + pi0 0 0 40.7772 -99.8853 -48.0221 -19.6856 + neutron 0 1 15.6083 -154.366 8.11358 -75.3589 + neutron 0 1 10.882 -44.7109 72.489 -115.384 + neutron 0 1 3.81142 58.8578 52.2437 31.3535 + gamma 0 0 3.17307 -2.44521 -1.10491 -1.69367 + neutron 0 1 2.22552 -54.9565 23.254 25.0205 + neutron 0 1 2.17566 -16.9263 -9.41302 60.9752 + gamma 0 0 2.01846 0.26359 1.26091 -1.55396 + neutron 0 1 1.79177 12.8124 -36.2829 43.4692 + neutron 0 1 1.27899 15.5317 -17.6186 -43.0509 + neutron 0 1 1.11401 -13.3771 1.69394 43.7355 + neutron 0 1 0.809199 -16.4431 2.33183 -35.2907 + neutron 0 1 0.617901 -2.52277 -21.0727 -26.666 + gamma 0 0 0.501526 -0.0686055 -0.341818 0.360531 + gamma 0 0 0.292774 -0.0522798 -0.192647 -0.214174 + Pt185[0.0] 78 185 6.41884 -703.119 380.686 1253.81 +0 0 -0.0118597 34 + proton 1 1 1000 0 0 1696.04 + neutron 0 1 163.521 531.777 -200.472 105.072 + proton 1 1 127.844 25.1402 -57.2132 -502.338 + neutron 0 1 110.422 -201.726 330.782 263.78 + proton 1 1 89.2349 -24.4888 72.1824 411.833 + neutron 0 1 86.5181 208.999 -351.822 -51.0352 + proton 1 1 67.1559 169.899 15.5013 318.473 + proton 1 1 47.7434 215.034 50.9056 207.464 + neutron 0 1 18.3792 -163.621 0.60485 -90.0145 + neutron 0 1 10.9969 -4.0089 81.1939 119.067 + neutron 0 1 8.14286 -62.4714 -99.5561 39.4172 + neutron 0 1 7.60821 45.7991 81.1176 -75.3464 + proton 1 1 7.43393 112.058 31.1251 21.9014 + neutron 0 1 5.7377 22.8278 -76.7065 -66.4065 + neutron 0 1 4.83151 48.8095 -8.79455 81.5026 + neutron 0 1 3.68866 -81.2889 -11.065 14.6545 + neutron 0 1 3.08614 -38.8572 -24.1741 60.9469 + neutron 0 1 2.95166 2.72972 73.8815 -9.45166 + gamma 0 0 2.27003 -2.14852 -0.0554348 0.730631 + neutron 0 1 2.16399 -57.8841 25.9843 6.73419 + neutron 0 1 2.07063 11.1682 -18.8523 58.4392 + gamma 0 0 0.905248 0.703879 0.464288 0.32934 + neutron 0 1 0.657767 -11.1605 32.7682 6.1766 + neutron 0 1 0.538617 -4.52409 0.201536 31.4947 + gamma 0 0 0.47496 0.166478 0.0518592 0.441795 + gamma 0 0 0.234072 -0.189247 -0.101997 -0.092583 + neutron 0 1 0.150952 -3.51866 3.96686 -15.9864 + neutron 0 1 0.0944737 1.89085 -0.255027 -13.187 + neutron 0 1 0.0790516 11.4125 -3.66184 -2.21365 + alpha 2 4 11.2632 91.9608 -110.529 251.831 + alpha 2 4 9.20651 103.089 230.752 -69.5992 + deuteron 1 2 17.8623 74.8655 68.7717 238.726 + deuteron 1 2 0.0805064 11.7665 0.630918 12.7732 + Tm162[0.0] 69 162 3.9921 -1034.21 -137.626 339.921 +1.78988e-05 -9.4892e-05 -0.0121485 33 + proton 1 1 999.999 4.5966 -24.3693 1695.86 + neutron 0 1 365.273 -248.93 415.762 764.851 + neutron 0 1 120.889 -174.419 67.0935 454.815 + neutron 0 1 47.6945 -74.6097 -275.046 103.356 + pi- -1 0 26.373 -71.2192 -54.6117 1.63605 + proton 1 1 19.0359 51.6039 69.2949 169.172 + neutron 0 1 16.7543 174.697 31.4761 -15.9498 + proton 1 1 10.3834 91.7367 -105.502 6.81437 + neutron 0 1 8.92901 39.5804 31.1057 -119.684 + neutron 0 1 8.12406 -81.7901 -31.8006 87.3572 + proton 1 1 8.12385 -44.5069 -41.2628 107.83 + neutron 0 1 6.76456 -66.8579 66.6792 -61.9773 + neutron 0 1 6.02069 71.2133 -29.6492 -73.4813 + neutron 0 1 4.51727 39.5911 34.896 -75.6556 + neutron 0 1 4.18527 34.5608 64.4852 50.2932 + proton 1 1 3.74449 30.6424 70.327 -33.9984 + neutron 0 1 3.52451 12.9741 78.8562 -15.7737 + neutron 0 1 3.16352 71.5788 26.2453 -11.9303 + neutron 0 1 2.81456 -36.9322 37.0591 50.5913 + gamma 0 0 2.58851 2.39063 0.826269 0.550051 + neutron 0 1 2.50494 55.98 36.4062 15.9443 + gamma 0 0 1.25049 -1.24398 -0.125916 -0.0196296 + neutron 0 1 0.918028 1.65758 -41.0994 5.83321 + gamma 0 0 0.810011 -0.164765 -0.724711 0.322124 + neutron 0 1 0.802585 -2.37438 30.765 -23.5941 + gamma 0 0 0.75222 -0.509368 -0.433318 -0.344405 + neutron 0 1 0.69738 29.7944 13.2437 -15.7434 + neutron 0 1 0.634209 -23.9758 -5.96859 -24.1185 + gamma 0 0 0.350274 -0.0100621 0.349502 -0.0209456 + neutron 0 1 0.318955 -15.1959 -4.3758 18.6922 + neutron 0 1 0.13225 8.28777 12.0005 5.98623 + gamma 0 0 0.0624654 -0.0279216 -0.00913505 -0.0551259 + Ir174[0.0] 77 174 1.21388 131.077 -520.637 324.159 +0 0 -0.031459 40 + proton 1 1 1000 0 0 1696.04 + neutron 0 1 129.716 464.699 -47.2408 205.921 + proton 1 1 106.693 1.12815 -195.718 -416.282 + proton 1 1 95.6383 270.043 -71.9327 332.443 + proton 1 1 89.0055 -281.616 296.046 89.4092 + neutron 0 1 48.2201 273.817 44.0767 -126.565 + proton 1 1 27.8683 -112.885 195.003 -47.9964 + proton 1 1 26.6507 220.545 -45.5759 2.0791 + proton 1 1 21.8832 -44.1094 -187.149 67.6266 + neutron 0 1 15.5105 135.753 30.5583 100.122 + neutron 0 1 14.2444 157.28 39.6595 -25.6933 + neutron 0 1 13.7882 -138.377 -9.21456 82.8671 + neutron 0 1 13.3956 23.996 -155.885 -21.8053 + neutron 0 1 11.7937 -41.0722 -5.07578 -143.486 + proton 1 1 11.5507 -9.79291 -146.186 18.5129 + neutron 0 1 9.43153 121.355 33.281 44.4666 + neutron 0 1 9.32746 35.9666 -38.4197 121.839 + neutron 0 1 8.87966 -33.9687 120.963 -31.2893 + neutron 0 1 7.14418 -46.4063 -57.0532 -89.818 + neutron 0 1 6.71152 -105.559 37.0971 11.7496 + neutron 0 1 6.44417 47.5671 64.433 75.7412 + neutron 0 1 5.76391 65.938 -78.6867 18.0266 + neutron 0 1 5.72945 56.4622 -87.2314 1.38045 + neutron 0 1 3.60119 4.66457 -40.9293 71.2959 + proton 1 1 3.54876 34.6311 65.8312 33.7482 + neutron 0 1 3.03856 -38.2148 -62.1205 19.9941 + neutron 0 1 2.64606 59.4671 37.7262 4.43724 + neutron 0 1 1.87277 -36.9929 -36.2667 -28.9645 + neutron 0 1 1.80762 -28.1324 18.5916 -47.5705 + neutron 0 1 1.14329 22.1366 33.8912 22.6068 + neutron 0 1 1.10271 9.37945 -23.7452 -37.7033 + neutron 0 1 0.675933 7.66698 5.84368 -34.3175 + neutron 0 1 0.391543 -19.4319 -12.8737 13.8774 + neutron 0 1 0.252492 -19.2381 4.19738 9.31696 + neutron 0 1 0.159154 17.075 2.68295 0.586118 + gamma 0 0 0.13845 0.00052307 -0.0143693 -0.137701 + neutron 0 1 0.0982305 -4.65744 -8.34814 9.65476 + deuteron 1 2 8.38135 -135.453 -102.587 51.3718 + triton 1 3 3.20876 71.2046 -104.172 -46.0097 + Yb158[0.0] 70 158 10.754 -1004.87 486.538 1384.6 +-5.99576e-05 0.000269894 -0.0242535 34 + proton 1 1 1000 -4.22127 19.0017 1695.93 + neutron 0 1 184.998 -395.332 73.6779 469.195 + proton 1 1 147.35 235.264 4.21866 492.802 + proton 1 1 140.017 80.3826 -450.916 269.379 + proton 1 1 103.063 -196.912 -368.776 171.038 + proton 1 1 89.1053 -82.1308 328.233 246.308 + neutron 0 1 51.6317 -246.774 170.157 -99.1863 + neutron 0 1 15.097 122.192 13.8707 -116.077 + neutron 0 1 10.2763 -113.862 55.9392 -57.6398 + neutron 0 1 9.40034 3.80316 48.3621 -124.095 + proton 1 1 3.33847 16.1935 -37.2926 -67.9924 + neutron 0 1 3.19537 25.2823 72.8437 8.32656 + neutron 0 1 2.73224 0.926659 67.5156 -24.1349 + neutron 0 1 2.51884 -21.5555 -44.1017 -48.2699 + proton 1 1 2.17733 -38.2342 47.3511 19.6629 + neutron 0 1 2.08427 45.1456 41.8 11.6449 + neutron 0 1 1.7004 -32.8737 9.71357 -44.9793 + neutron 0 1 1.51248 -36.5736 16.1728 -35.2882 + neutron 0 1 1.48113 49.0311 -13.5911 -14.0239 + neutron 0 1 1.47778 0.807009 40.2695 34.0125 + neutron 0 1 1.13842 40.9915 14.7274 -15.5993 + neutron 0 1 1.00194 -15.443 -25.139 31.8327 + gamma 0 0 0.901714 0.29811 -0.102801 -0.844779 + neutron 0 1 0.841211 16.0585 -33.7857 13.4947 + neutron 0 1 0.820586 -20.1927 25.3569 -22.1798 + neutron 0 1 0.704775 -3.20733 36.2274 1.46577 + neutron 0 1 0.660701 -18.399 -28.6763 -9.00706 + neutron 0 1 0.542271 -6.85843 16.8479 26.2374 + neutron 0 1 0.431081 21.1164 11.0666 -15.5522 + gamma 0 0 0.0889546 -0.0706365 -0.00551115 -0.0537869 + deuteron 1 2 5.50301 -55.667 -60.7463 117.832 + alpha 2 4 3.39718 154.476 -36.3224 -12.4395 + triton 1 3 2.01323 51.8891 85.876 -35.3301 + Yb162[0.0] 70 162 1.50162 416.012 -61.7661 525.387 +-3.32223e-05 -1.92545e-07 0.0336057 47 + proton 1 1 999.999 -23.1851 -0.134372 1695.88 + proton 1 1 105.213 272.781 298.66 211.897 + proton 1 1 54.4049 47.6401 45.8238 317.307 + proton 1 1 41.9823 32.7747 -265.614 94.4404 + proton 1 1 40.5914 227.615 152.58 52.2475 + pi0 0 0 39.6415 -36.7791 -52.7743 -90.1941 + proton 1 1 30.8289 -232.871 -16.923 65.4746 + neutron 0 1 30.7884 -183.065 51.8613 150.336 + proton 1 1 26.955 -146.216 156.461 -73.8231 + proton 1 1 21.3528 -38.221 -69.7185 184.943 + neutron 0 1 15.0844 90.9779 -34.5749 -138.205 + neutron 0 1 13.6569 131.722 -92.0304 -5.42294 + neutron 0 1 12.2577 -113.423 77.1678 66.0633 + neutron 0 1 11.9641 15.6076 49.8286 141.063 + neutron 0 1 10.7812 -52.2332 -96.4919 -91.3046 + neutron 0 1 10.1541 -50.2471 -94.3764 88.0474 + neutron 0 1 9.29535 -37.6871 -101.136 -76.8425 + neutron 0 1 9.21702 24.8418 -116.784 56.1185 + neutron 0 1 8.8905 -96.6583 71.8128 47.8075 + proton 1 1 8.5111 71.093 42.9262 95.6401 + neutron 0 1 8.32198 -15.4303 -10.8659 123.9 + neutron 0 1 7.16955 -78.4318 -85.067 11.6614 + proton 1 1 6.52567 88.4879 -39.5915 53.7651 + neutron 0 1 5.21378 42.6898 58.0376 68.0718 + neutron 0 1 4.83621 24.0475 -89.2951 -23.6508 + neutron 0 1 4.46688 67.5534 2.8869 61.984 + neutron 0 1 4.35818 -60.8412 1.66046 67.1132 + neutron 0 1 4.05408 42.0873 -31.9155 69.6035 + neutron 0 1 3.82318 -41.6779 -11.1722 73.0549 + neutron 0 1 3.78594 54.3441 64.0573 8.48452 + neutron 0 1 3.29303 24.4827 -27.4691 -69.6056 + gamma 0 0 2.5727 1.15332 -2.2111 0.632217 + gamma 0 0 2.53147 -0.370082 -1.61793 -1.91146 + neutron 0 1 2.04874 24.047 0.522712 -57.2321 + gamma 0 0 1.87016 1.32871 0.0958413 1.31257 + neutron 0 1 1.78282 -1.15789 17.3143 55.2468 + proton 1 1 1.56368 39.699 4.76317 36.5796 + neutron 0 1 0.918865 -40.5417 8.69169 -2.88692 + neutron 0 1 0.837855 -17.4537 24.1203 26.2434 + neutron 0 1 0.626183 1.48557 25.5668 -22.8299 + neutron 0 1 0.44598 8.61721 -22.0008 -16.7321 + neutron 0 1 0.432131 -14.9878 -23.7848 -4.67613 + proton 1 1 0.414701 26.7498 -4.96923 -6.17488 + neutron 0 1 0.161618 -13.1569 -7.32411 8.77385 + neutron 0 1 0.149446 -11.5816 -4.59585 -11.2069 + deuteron 1 2 4.38429 18.9666 73.2411 103.642 + Er156[0.0] 68 156 0.0769138 -120.945 74.0923 47.1243 +0.000665826 -0.00088273 0.0234175 43 + proton 1 1 999.998 23.1386 -30.6764 1695.6 + proton 1 1 159.588 329.18 -362.547 -291.793 + proton 1 1 145.078 -52.7705 306.51 443.351 + neutron 0 1 97.6551 319.372 -269.855 -134.993 + neutron 0 1 45.4769 -97.5552 -271.874 -63.9766 + proton 1 1 39.1304 10.8346 151.735 227.641 + neutron 0 1 27.9844 -42.8713 -53.578 -220.592 + neutron 0 1 20.2663 -138.665 -67.3661 121.357 + proton 1 1 20.1589 -97.5755 -148.565 -81.5036 + proton 1 1 19.2354 -72.4011 154.056 86.5509 + neutron 0 1 18.9081 -118.192 145.15 29.1624 + neutron 0 1 18.1531 128.428 93.1983 -96.2382 + neutron 0 1 17.9521 -140.747 11.5472 118.801 + proton 1 1 17.1995 -55.2587 -85.1829 149.204 + neutron 0 1 15.0488 158.51 -14.5704 56.28 + proton 1 1 14.5097 -162.962 -24.9304 16.1394 + proton 1 1 10.9093 -0.050094 1.59619 143.486 + neutron 0 1 8.38531 119.094 -25.5963 -31.4447 + neutron 0 1 6.87777 -109.071 -31.0847 10.4313 + neutron 0 1 6.33105 -35.307 -83.3994 -61.1139 + neutron 0 1 5.97593 60.3089 -68.4084 54.2991 + neutron 0 1 5.032 7.93021 73.9599 -62.8343 + neutron 0 1 4.349 40.0258 -43.7503 -68.3746 + neutron 0 1 4.22924 44.3233 13.8085 -76.223 + neutron 0 1 4.10485 81.6794 -13.2613 29.7156 + neutron 0 1 2.65331 36.7572 37.7266 47.1018 + neutron 0 1 2.09295 53.8578 20.0353 -25.2038 + neutron 0 1 1.97739 -58.086 -12.2808 -13.9604 + gamma 0 0 1.90957 -1.37118 0.888317 -0.988546 + gamma 0 0 1.8484 1.76421 -0.515165 0.196832 + gamma 0 0 1.70917 0.368536 0.626659 1.54685 + gamma 0 0 1.47817 -0.871968 -1.19356 0.00757468 + neutron 0 1 1.37517 -25.8769 20.8093 38.5145 + neutron 0 1 1.34458 6.55217 19.7002 -45.7977 + proton 1 1 1.32815 19.3911 -39.4593 -23.6864 + proton 1 1 1.16174 -3.79997 40.7574 -22.4901 + neutron 0 1 0.824673 30.3847 -24.9973 -1.5003 + gamma 0 0 0.709095 -0.231434 0.113063 -0.660659 + neutron 0 1 0.49927 26.2311 14.4818 6.37576 + neutron 0 1 0.423526 25.7905 -0.830103 11.4106 + gamma 0 0 0.12532 0.118398 0.0036029 0.0409154 + alpha 2 4 9.0928 68.1002 -203.188 -148.138 + Er160[0.0] 68 160 10.3909 -332.202 709.054 1575.5 diff --git a/environments/g4py/tests/g4pytest/MedicalBeam/CMakeLists.txt b/environments/g4py/tests/g4pytest/MedicalBeam/CMakeLists.txt new file mode 100644 index 0000000000..beea193829 --- /dev/null +++ b/environments/g4py/tests/g4pytest/MedicalBeam/CMakeLists.txt @@ -0,0 +1,4 @@ +# - build library +set(_TARGET _MedicalBeam) +g4pytest_add_module(${_TARGET} MedicalBeam.cc pyMedicalBeam.cc) +target_link_libraries(${_TARGET} PRIVATE G4run G4particles) \ No newline at end of file diff --git a/environments/g4py/tests/g4pytest/MedicalBeam/MedicalBeam.cc b/environments/g4py/tests/g4pytest/MedicalBeam/MedicalBeam.cc new file mode 100644 index 0000000000..d8627a1a06 --- /dev/null +++ b/environments/g4py/tests/g4pytest/MedicalBeam/MedicalBeam.cc @@ -0,0 +1,136 @@ +// +// ******************************************************************** +// * 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. * +// ******************************************************************** +// +// ==================================================================== +// MedicalBeam.cc +// +// 2005 Q +// ==================================================================== +#include "MedicalBeam.hh" +#include "Randomize.hh" +#include "G4Event.hh" +#include "G4ParticleTable.hh" +#include "G4PrimaryVertex.hh" + +using namespace CLHEP; + +#include + +// ==================================================================== +// +// class description +// +// ==================================================================== + +/////////////////////////////////// +MedicalBeam::MedicalBeam() + : particle(0), + kineticE(1.*MeV), + sourcePosition(G4ThreeVector()), + SSD(1.*m), + fieldShape(MedicalBeam::SQUARE), + fieldR(10.*cm) +/////////////////////////////////// +{ + fieldXY[0]= fieldXY[1]= 10.*cm; +} + + +/////////////////////////// +MedicalBeam::~MedicalBeam() +/////////////////////////// +{ +} + + +//////////////////////////////////////////////////////// +G4ThreeVector MedicalBeam::GenerateBeamDirection() const +//////////////////////////////////////////////////////// +{ + // uniform distribution in a limitted solid angle + G4double dr; + if(fieldShape == MedicalBeam::SQUARE) { + dr= std::sqrt(sqr(fieldXY[0]/2.)+sqr(fieldXY[1]/2.)); + } else { + dr= fieldR; + } + + G4double sin0= dr/SSD; + G4double cos0= std::sqrt(1.-sqr(sin0)); + + G4double x= DBL_MAX; + G4double y= DBL_MAX; + + G4double xmax, ymax; + if(fieldShape == MedicalBeam::SQUARE) { + xmax= fieldXY[0]/2./SSD; + ymax= fieldXY[1]/2./SSD; + } else { + xmax= ymax= DBL_MAX-1.; + } + + G4double dcos{0.0}; + G4double dsin{0.0}; + G4double dphi{0.0}; + + while(! (std::abs(x)< xmax && std::abs(y)< ymax) ) { + dcos= RandFlat::shoot(cos0, 1.); + dsin= std::sqrt(1.-sqr(dcos)); + dphi= RandFlat::shoot(0., twopi); + + x= std::cos(dphi)*dsin*dcos; + y= std::sin(dphi)*dsin*dcos; + } + + G4double z= dcos; + + return G4ThreeVector(x,y,z); +} + + +///////////////////////////////////////////////////// +void MedicalBeam::GeneratePrimaries(G4Event* anEvent) +///////////////////////////////////////////////////// +{ + if(particle==0) return; + + // create a new vertex + G4PrimaryVertex* vertex= new G4PrimaryVertex(sourcePosition, 0.*ns); + + // momentum + G4double mass= particle-> GetPDGMass(); + G4double p= std::sqrt(sqr(mass+kineticE)-sqr(mass)); + G4ThreeVector pmon= p*GenerateBeamDirection(); + G4PrimaryParticle* primary= new G4PrimaryParticle(particle, + pmon.x(), + pmon.y(), + pmon.z()); + // set primary to vertex + vertex-> SetPrimary(primary); + + // set vertex to event + anEvent-> AddPrimaryVertex(vertex); +} + diff --git a/environments/g4py/tests/g4pytest/MedicalBeam/MedicalBeam.hh b/environments/g4py/tests/g4pytest/MedicalBeam/MedicalBeam.hh new file mode 100644 index 0000000000..04778fa41a --- /dev/null +++ b/environments/g4py/tests/g4pytest/MedicalBeam/MedicalBeam.hh @@ -0,0 +1,143 @@ +// +// ******************************************************************** +// * 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. * +// ******************************************************************** +// +// ==================================================================== +// MedicalBeam.hh +// +// 2005 Q +// ==================================================================== +#ifndef MEDICAL_BEAM_H +#define MEDICAL_BEAM_H + +#include "globals.hh" +#include "G4ThreeVector.hh" +#include "G4VUserPrimaryGeneratorAction.hh" + +class G4ParticleDefinition; + +// ==================================================================== +// +// class definition +// +// ==================================================================== +class MedicalBeam : public G4VUserPrimaryGeneratorAction { +public: + enum FieldShape{ SQUARE=0, CIRCLE }; + +protected: + G4ParticleDefinition* particle; + G4double kineticE; + G4ThreeVector sourcePosition; + + G4double SSD; // (SSD= Source Skin Depth) + FieldShape fieldShape; + G4double fieldXY[2]; + G4double fieldR; + + // local methods... + G4ThreeVector GenerateBeamDirection() const; + +public: + MedicalBeam(); + ~MedicalBeam(); + + // set/get functions... + void SetParticleDefinition(G4ParticleDefinition* pd); + const G4ParticleDefinition* GetParticleDefinition() const; + + void SetKineticE(G4double e); + G4double GetKineticE() const; + + void SetSourcePosition(const G4ThreeVector& pos); + G4ThreeVector GetSourcePosition() const; + + void SetFieldShape(FieldShape shape); + FieldShape GetFieldShape() const; + + void SetSSD(G4double ssd); + G4double GetSSD() const; + + void SetFieldXY(G4double fx, G4double fy); + G4double GetFieldX() const; + G4double GetFieldY() const; + + void SetFieldR(G4double r); + G4double GetFieldR() const; + + // methods... + virtual void GeneratePrimaries(G4Event* anEvent); + +}; + +// ==================================================================== +// inline functions +// ==================================================================== +inline void MedicalBeam::SetParticleDefinition(G4ParticleDefinition* pd) +{ particle= pd; } + +inline const G4ParticleDefinition* MedicalBeam::GetParticleDefinition() const +{ return particle; } + +inline void MedicalBeam::SetKineticE(G4double e) +{ kineticE= e; } + +inline G4double MedicalBeam::GetKineticE() const +{ return kineticE; } + +inline void MedicalBeam::SetSourcePosition(const G4ThreeVector& pos) +{ sourcePosition= pos; } + +inline G4ThreeVector MedicalBeam::GetSourcePosition() const +{ return sourcePosition; } + +inline void MedicalBeam::SetFieldShape(MedicalBeam::FieldShape shape) +{ fieldShape= shape; } + +inline MedicalBeam::FieldShape MedicalBeam::GetFieldShape() const +{ return fieldShape; } + +inline void MedicalBeam::SetSSD(G4double ssd) +{ SSD= ssd; } + +inline G4double MedicalBeam::GetSSD() const +{ return SSD; } + +inline void MedicalBeam::SetFieldXY(G4double fx, G4double fy) +{ fieldXY[0]= fx; fieldXY[1]= fy; } + +inline G4double MedicalBeam::GetFieldX() const +{ return fieldXY[0]; } + +inline G4double MedicalBeam::GetFieldY() const +{ return fieldXY[1]; } + +inline void MedicalBeam::SetFieldR(G4double r) +{ fieldR= r; } + +inline G4double MedicalBeam::GetFieldR() const +{ return fieldR; } + +#endif + diff --git a/environments/g4py/tests/g4pytest/MedicalBeam/__init__.py b/environments/g4py/tests/g4pytest/MedicalBeam/__init__.py new file mode 100644 index 0000000000..5a0139ea8f --- /dev/null +++ b/environments/g4py/tests/g4pytest/MedicalBeam/__init__.py @@ -0,0 +1 @@ +from ._MedicalBeam import * \ No newline at end of file diff --git a/environments/g4py/tests/g4pytest/MedicalBeam/pyMedicalBeam.cc b/environments/g4py/tests/g4pytest/MedicalBeam/pyMedicalBeam.cc new file mode 100644 index 0000000000..4a9eec21e5 --- /dev/null +++ b/environments/g4py/tests/g4pytest/MedicalBeam/pyMedicalBeam.cc @@ -0,0 +1,162 @@ +// +// ******************************************************************** +// * 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. * +// ******************************************************************** +// +// ==================================================================== +// pyMedicalBeam.cc +// +// [MedicalBeam] +// a site-module of Geant4Py +// +// primary generator action for medical beam +// +// 2005 Q +// ==================================================================== +#include +#include "MedicalBeam.hh" +#include "G4ParticleTable.hh" +#include "G4RunManager.hh" + +using namespace boost::python; + +// ==================================================================== +// thin wrappers +// ==================================================================== +namespace pyMedicalBeam { + +MedicalBeam* Construct() +{ + G4RunManager* runMgr= G4RunManager::GetRunManager(); + + MedicalBeam* medicalbeam= new MedicalBeam(); + runMgr-> SetUserAction(medicalbeam); + + return medicalbeam; +} + + +/////////////////////////////////////////////////////////////////// +void SetParticleByName(MedicalBeam* beam, const std::string& pname) +/////////////////////////////////////////////////////////////////// +{ + G4ParticleTable* particleTable= G4ParticleTable::GetParticleTable(); + G4ParticleDefinition* pd= particleTable-> FindParticle(pname); + if (pd != 0) { + beam-> SetParticleDefinition(pd); + } else { + G4cout << "*** \"" << pname << "\" is not registered " + << "in available particle list" << G4endl; + } +} + +//////////////////////////////////////////////// +std::string GetParticleByName(MedicalBeam* beam) +//////////////////////////////////////////////// +{ + const G4ParticleDefinition* pd= beam-> GetParticleDefinition(); + + if(pd==0) return std::string("None"); + else return (pd-> GetParticleName()).c_str(); +} + +//////////////////////////////////////////////////////// +void f_SetFieldXY(MedicalBeam* beam, const list& listXY) +//////////////////////////////////////////////////////// +{ + G4double fx= extract(listXY[0]); + G4double fy= extract(listXY[1]); + beam-> SetFieldXY(fx, fy); +} + + +//////////////////////////////////// +list f_GetFieldXY(MedicalBeam* beam) +//////////////////////////////////// +{ + list listFieldXY; + + listFieldXY.append(beam-> GetFieldX()); + listFieldXY.append(beam-> GetFieldY()); + + return listFieldXY; +} + +} + +using namespace pyMedicalBeam; + +// ==================================================================== +// Expose to Python +// ==================================================================== + +BOOST_PYTHON_MODULE(_MedicalBeam) { + class_ > + ("MedicalBeam", "primary generator action with medical beam") + // --- + .add_property("particle", GetParticleByName, SetParticleByName) + .def("SetParticleByName", SetParticleByName) + .def("GetParticleByName", GetParticleByName) + // --- + .add_property("kineticE", &MedicalBeam::GetKineticE, + &MedicalBeam::SetKineticE) + .def("SetKineticE", &MedicalBeam::SetKineticE) + .def("GetKineticE", &MedicalBeam::GetKineticE) + // --- + .add_property("sourcePosition", &MedicalBeam::GetSourcePosition, + &MedicalBeam::SetSourcePosition) + .def("SetSourcePosition", &MedicalBeam::SetSourcePosition) + .def("GetSourcePosition", &MedicalBeam::GetSourcePosition) + // --- + .add_property("fieldShape", &MedicalBeam::GetFieldShape, + &MedicalBeam::SetFieldShape) + .def("SetFieldShape", &MedicalBeam::SetFieldShape) + .def("GetFieldShape", &MedicalBeam::GetFieldShape) + // --- + .add_property("SSD", &MedicalBeam::GetSSD, &MedicalBeam::SetSSD) + .def("SetSSD", &MedicalBeam::SetSSD) + .def("GetSSD", &MedicalBeam::GetSSD) + // ---- + .add_property("fieldXY", f_GetFieldXY, f_SetFieldXY) + .def("SetFieldXY", f_SetFieldXY) + .def("GetFieldXY", f_GetFieldXY) + .def("GetFieldX", &MedicalBeam::GetFieldX) + .def("GetFieldY", &MedicalBeam::GetFieldY) + // --- + .add_property("fieldR", &MedicalBeam::GetFieldR, &MedicalBeam::SetFieldR) + .def("SetFieldR", &MedicalBeam::SetFieldR) + .def("GetFieldR", &MedicalBeam::GetFieldR) + ; + + // enums... + enum_("FieldShape") + .value("SQUARE", MedicalBeam::SQUARE) + .value("CIRCLE", MedicalBeam::CIRCLE) + ; + + // --- + def("Construct", Construct, + return_value_policy()); +} + diff --git a/environments/g4py/tests/g4pytest/NISTmaterials/CMakeLists.txt b/environments/g4py/tests/g4pytest/NISTmaterials/CMakeLists.txt new file mode 100644 index 0000000000..e524a64c4c --- /dev/null +++ b/environments/g4py/tests/g4pytest/NISTmaterials/CMakeLists.txt @@ -0,0 +1,4 @@ +# - build library +set(_TARGET _NISTmaterials) +g4pytest_add_module(${_TARGET} NISTmaterials.cc pyNISTmaterials.cc) +target_link_libraries(${_TARGET} PRIVATE G4materials) diff --git a/environments/g4py/tests/g4pytest/NISTmaterials/NISTmaterials.cc b/environments/g4py/tests/g4pytest/NISTmaterials/NISTmaterials.cc new file mode 100644 index 0000000000..56bf0c3a4c --- /dev/null +++ b/environments/g4py/tests/g4pytest/NISTmaterials/NISTmaterials.cc @@ -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. * +// ******************************************************************** +// +// ==================================================================== +// NISTmaterials.cc +// +// 2005 Q +// ==================================================================== +#include "G4NistManager.hh" + +//////////////// +void Construct() +//////////////// +{ + G4NistManager* NistMgr = G4NistManager::Instance(); + + // define typically used materials + NistMgr-> FindOrBuildMaterial("G4_Al"); + NistMgr-> FindOrBuildMaterial("G4_Si"); + NistMgr-> FindOrBuildMaterial("G4_Ar"); + NistMgr-> FindOrBuildMaterial("G4_Cu"); + NistMgr-> FindOrBuildMaterial("G4_Fe"); + NistMgr-> FindOrBuildMaterial("G4_Ge"); + NistMgr-> FindOrBuildMaterial("G4_Ag"); + NistMgr-> FindOrBuildMaterial("G4_W"); + NistMgr-> FindOrBuildMaterial("G4_Au"); + NistMgr-> FindOrBuildMaterial("G4_Pb"); + + NistMgr-> FindOrBuildMaterial("G4_AIR"); + NistMgr-> FindOrBuildMaterial("G4_Galactic"); + NistMgr-> FindOrBuildMaterial("G4_WATER"); + NistMgr-> FindOrBuildMaterial("G4_CESIUM_IODIDE"); + NistMgr-> FindOrBuildMaterial("G4_SODIUM_IODIDE"); + NistMgr-> FindOrBuildMaterial("G4_PLASTIC_SC_VINYLTOLUENE"); + NistMgr-> FindOrBuildMaterial("G4_MYLAR"); + //NistMgr-> FindOrBuildMaterial("G4_GRAPHITE"); + // bug in G4 (element isnot defined. should be fixed.) + +} diff --git a/environments/g4py/tests/g4pytest/NISTmaterials/__init__.py b/environments/g4py/tests/g4pytest/NISTmaterials/__init__.py new file mode 100644 index 0000000000..5849439450 --- /dev/null +++ b/environments/g4py/tests/g4pytest/NISTmaterials/__init__.py @@ -0,0 +1 @@ +from ._NISTmaterials import * \ No newline at end of file diff --git a/environments/g4py/tests/g4pytest/NISTmaterials/pyNISTmaterials.cc b/environments/g4py/tests/g4pytest/NISTmaterials/pyNISTmaterials.cc new file mode 100644 index 0000000000..e77b5a2afe --- /dev/null +++ b/environments/g4py/tests/g4pytest/NISTmaterials/pyNISTmaterials.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. * +// ******************************************************************** +// +// ==================================================================== +// pyNISTmaterials.cc +// +// [NISTmaterials] +// a site-module of Geant4Py +// +// NIST materials +// +// 2005 Q +// ==================================================================== +#include + +using namespace boost::python; + +void Construct(); + +// ==================================================================== +// Expose to Python +// ==================================================================== + +BOOST_PYTHON_MODULE(_NISTmaterials) { + def("Construct", Construct); +} + diff --git a/environments/g4py/tests/g4pytest/ParticleGun/CMakeLists.txt b/environments/g4py/tests/g4pytest/ParticleGun/CMakeLists.txt new file mode 100644 index 0000000000..45ac505cd3 --- /dev/null +++ b/environments/g4py/tests/g4pytest/ParticleGun/CMakeLists.txt @@ -0,0 +1,4 @@ +# - build library +set(_TARGET _ParticleGun) +g4pytest_add_module(${_TARGET} ParticleGunAction.cc pyParticleGun.cc) +target_link_libraries(${_TARGET} PRIVATE G4run G4particles) diff --git a/environments/g4py/tests/g4pytest/ParticleGun/ParticleGunAction.cc b/environments/g4py/tests/g4pytest/ParticleGun/ParticleGunAction.cc new file mode 100644 index 0000000000..5b9d1044bb --- /dev/null +++ b/environments/g4py/tests/g4pytest/ParticleGun/ParticleGunAction.cc @@ -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. * +// ******************************************************************** +// +// ==================================================================== +// ParticleGunAction.cc +// +// 2005 Q +// ==================================================================== +#include "ParticleGunAction.hh" +#include "G4ParticleGun.hh" + +// ==================================================================== +// +// class description +// +// ==================================================================== + +////////////////////////////////////// +ParticleGunAction::ParticleGunAction() +////////////////////////////////////// +{ + particleGun= new G4ParticleGun; +} + +/////////////////////////////////////// +ParticleGunAction::~ParticleGunAction() +/////////////////////////////////////// +{ + delete particleGun; +} + +/////////////////////////////////////////////////////////// +void ParticleGunAction::GeneratePrimaries(G4Event* anEvent) +/////////////////////////////////////////////////////////// +{ + particleGun-> GeneratePrimaryVertex(anEvent); +} + diff --git a/environments/g4py/tests/g4pytest/ParticleGun/ParticleGunAction.hh b/environments/g4py/tests/g4pytest/ParticleGun/ParticleGunAction.hh new file mode 100644 index 0000000000..2b78f2d401 --- /dev/null +++ b/environments/g4py/tests/g4pytest/ParticleGun/ParticleGunAction.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. * +// ******************************************************************** +// +// ==================================================================== +// ParticleGunAction.hh +// +// 2005 Q +// ==================================================================== +#ifndef PARTICLE_GUN_ACTION_H +#define PARTICLE_GUN_ACTION_H + +#include "G4VUserPrimaryGeneratorAction.hh" + +class G4ParticleGun; + +// ==================================================================== +// +// class definition +// +// ==================================================================== +class ParticleGunAction : public G4VUserPrimaryGeneratorAction { +private: + // use G4 particle gun + G4ParticleGun* particleGun; + +public: + ParticleGunAction(); + ~ParticleGunAction(); + + G4ParticleGun* GetParticleGun() const; + + virtual void GeneratePrimaries(G4Event* anEvent); +}; + +// ==================================================================== +// inline functions +// ==================================================================== +inline G4ParticleGun* ParticleGunAction::GetParticleGun() const +{ return particleGun; } + +#endif diff --git a/environments/g4py/tests/g4pytest/ParticleGun/__init__.py b/environments/g4py/tests/g4pytest/ParticleGun/__init__.py new file mode 100644 index 0000000000..e80e543000 --- /dev/null +++ b/environments/g4py/tests/g4pytest/ParticleGun/__init__.py @@ -0,0 +1 @@ +from ._ParticleGun import * \ No newline at end of file diff --git a/environments/g4py/tests/g4pytest/ParticleGun/pyParticleGun.cc b/environments/g4py/tests/g4pytest/ParticleGun/pyParticleGun.cc new file mode 100644 index 0000000000..4e04ce8497 --- /dev/null +++ b/environments/g4py/tests/g4pytest/ParticleGun/pyParticleGun.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. * +// ******************************************************************** +// +// ==================================================================== +// pyParticleGun.cc +// +// [ParticleGun] +// a site-module of Geant4Py +// +// primary generator action with particle gun +// +// 2005 Q +// ==================================================================== +#include +#include "ParticleGunAction.hh" +#include "G4ParticleGun.hh" +#include "G4RunManager.hh" + +using namespace boost::python; + +// ==================================================================== +// thin wrappers +// ==================================================================== +namespace pyParticleGun { + +G4ParticleGun* Construct() +{ + G4RunManager* runMgr= G4RunManager::GetRunManager(); + + ParticleGunAction* pga= new ParticleGunAction; + runMgr-> SetUserAction(pga); + + return pga-> GetParticleGun(); +} + +} + +using namespace pyParticleGun; + +// ==================================================================== +// Expose to Python +// ==================================================================== + +BOOST_PYTHON_MODULE(_ParticleGun) { + class_ > + ("ParticleGunAction", "primary generator action with particle gun") + .def("GetParticleGun", &ParticleGunAction::GetParticleGun, + return_internal_reference<>()) + ; + + // --- + def("Construct", Construct, + return_value_policy()); + +} + diff --git a/environments/g4py/tests/g4pytest/Qgeom/CMakeLists.txt b/environments/g4py/tests/g4pytest/Qgeom/CMakeLists.txt new file mode 100644 index 0000000000..11bbe5c67f --- /dev/null +++ b/environments/g4py/tests/g4pytest/Qgeom/CMakeLists.txt @@ -0,0 +1,4 @@ +# - build library +set(_TARGET _Qgeom) +g4pytest_add_module(${_TARGET} QDetectorConstruction.cc pyQgeom.cc) +target_link_libraries(${_TARGET} PRIVATE G4materials G4geometry G4run) diff --git a/environments/g4py/tests/g4pytest/Qgeom/QDetectorConstruction.cc b/environments/g4py/tests/g4pytest/Qgeom/QDetectorConstruction.cc new file mode 100644 index 0000000000..3863c82ecf --- /dev/null +++ b/environments/g4py/tests/g4pytest/Qgeom/QDetectorConstruction.cc @@ -0,0 +1,144 @@ +// +// ******************************************************************** +// * 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. * +// ******************************************************************** +// +// ==================================================================== +// QDetectorConstruction.cc +// +// 2005 Q +// ==================================================================== +#include "QDetectorConstruction.hh" + +#include "G4Material.hh" +#include "G4Tubs.hh" +#include "G4Box.hh" +#include "G4LogicalVolume.hh" +#include "G4PVPlacement.hh" +#include "G4VisAttributes.hh" +#include "G4SystemOfUnits.hh" + +// ==================================================================== +// +// class description +// +// ==================================================================== + +// constants (detector parameters) +static const G4double DXYZ_AREA= 30.*cm; + +////////////////////////////////////////////// +QDetectorConstruction::QDetectorConstruction() +////////////////////////////////////////////// +{ +} + +/////////////////////////////////////////////// +QDetectorConstruction::~QDetectorConstruction() +/////////////////////////////////////////////// +{ +} + +///////////////////////////////////////////////////// +G4VPhysicalVolume* QDetectorConstruction::Construct() +///////////////////////////////////////////////////// +{ + G4Material* mate; + G4VisAttributes* va; + + // ============================================================== + // world volume + // ============================================================== + G4Box* areaSolid= new G4Box("AREA", + DXYZ_AREA/2., DXYZ_AREA/2., DXYZ_AREA/2.); + + G4Material* vacuum= G4Material::GetMaterial("Vacuum"); + G4LogicalVolume* areaLV= new G4LogicalVolume(areaSolid, vacuum, "AREA_LV"); + G4PVPlacement* area= new G4PVPlacement(0, G4ThreeVector(), "AREA_PV", + areaLV, 0, false, 0); + // vis. attributes + va= new G4VisAttributes(G4Color(1.,1.,1.)); + va-> SetForceWireframe(true); + areaLV-> SetVisAttributes(va); + + // ============================================================== + // detectors + // ============================================================== + // voxel + const G4double dvoxel= 10.*mm; + const G4double dl= 10.*cm; + + G4Box* svoxel= new G4Box("voxel", dvoxel, dl, dvoxel); + mate= G4Material::GetMaterial("Vacuum"); + G4LogicalVolume* lvoxel= new G4LogicalVolume(svoxel, mate, "voxel"); + va= new G4VisAttributes(G4Color(0.,0.8,0.8)); + va-> SetVisibility(false); + lvoxel-> SetVisAttributes(va); + + G4int ix, iz; + G4int index=0; + for (iz=0; iz<5; iz++) { + for (ix=-7; ix<=7; ix++) { + G4double x0= (2.*ix)*cm; + G4double z0= (-13.+2.*iz)*cm; + /*G4PVPlacement* pvoxel=*/ new G4PVPlacement(0, G4ThreeVector(x0, 0., z0), + lvoxel, "voxel", areaLV, false, index); + index++; + } + } + + // tube + //G4Tubs* stube= new G4Tubs("tube", 15./2.*mm, 19./2.*mm, dl, + G4Tubs* stube= new G4Tubs("tube", 0.*mm, 19./2.*mm, dl, + 0., 360.*deg); + mate= G4Material::GetMaterial("Al"); + G4LogicalVolume* ltube= new G4LogicalVolume(stube, mate, "tube"); + va= new G4VisAttributes(G4Color(0.,0.8,0.8)); + ltube-> SetVisAttributes(va); + + G4RotationMatrix* rmtube= new G4RotationMatrix; + rmtube-> rotateX(-90.*deg); + /*G4PVPlacement* ptube=*/ new G4PVPlacement(rmtube, G4ThreeVector(), + ltube, "tube", lvoxel, false, 0); + + // cal + const G4double dxycal= 25.*mm; + const G4double dzcal= 3.*cm; + + G4Box* scal= new G4Box("cal", dxycal, dxycal, dzcal); + mate= G4Material::GetMaterial("CsI"); + G4LogicalVolume* lcal= new G4LogicalVolume(scal, mate, "cal"); + va= new G4VisAttributes(G4Color(0.5,0.5,0.)); + lcal-> SetVisAttributes(va); + + index= 0; + for (ix=-2; ix<=2; ix++) { + G4double x0= (5.*ix)*cm; + /*G4PVPlacement* pcal=*/ new G4PVPlacement(0, G4ThreeVector(x0, 0., 2.*cm), + lcal, "cal", areaLV, false, index); + index++; + } + + return area; +} + diff --git a/environments/g4py/tests/g4pytest/Qgeom/QDetectorConstruction.hh b/environments/g4py/tests/g4pytest/Qgeom/QDetectorConstruction.hh new file mode 100644 index 0000000000..5b392c7da9 --- /dev/null +++ b/environments/g4py/tests/g4pytest/Qgeom/QDetectorConstruction.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. * +// ******************************************************************** +// +// ==================================================================== +// QDetectorConstruction.hh +// +// 2005 Q +// ==================================================================== +#ifndef Q_DETECTOR_CONSTRUCTION_H +#define Q_DETECTOR_CONSTRUCTION_H + +#include "G4VUserDetectorConstruction.hh" + +// ==================================================================== +// +// class definition +// +// ==================================================================== + +class QDetectorConstruction : public G4VUserDetectorConstruction { + +public: + QDetectorConstruction(); + ~QDetectorConstruction(); + + virtual G4VPhysicalVolume* Construct(); + +}; + +#endif diff --git a/environments/g4py/tests/g4pytest/Qgeom/__init__.py b/environments/g4py/tests/g4pytest/Qgeom/__init__.py new file mode 100644 index 0000000000..85ffff076a --- /dev/null +++ b/environments/g4py/tests/g4pytest/Qgeom/__init__.py @@ -0,0 +1 @@ +from ._Qgeom import * \ No newline at end of file diff --git a/environments/g4py/tests/g4pytest/Qgeom/pyQgeom.cc b/environments/g4py/tests/g4pytest/Qgeom/pyQgeom.cc new file mode 100644 index 0000000000..6f83400311 --- /dev/null +++ b/environments/g4py/tests/g4pytest/Qgeom/pyQgeom.cc @@ -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. * +// ******************************************************************** +// +// ==================================================================== +// pyQgeom.cc +// +// [Qgeom] +// a site-module of Geant4Py +// +// A sample geometry +// +// 2005 Q +// ==================================================================== +#include +#include "G4RunManager.hh" +#include "QDetectorConstruction.hh" + +using namespace boost::python; + +// ==================================================================== +// thin wrappers +// ==================================================================== +namespace pyQgeom { + +void Construct() +{ + G4RunManager* runMgr= G4RunManager::GetRunManager(); + runMgr-> SetUserInitialization(new QDetectorConstruction); +} + +} + +using namespace pyQgeom; + +// ==================================================================== +// Expose to Python +// ==================================================================== + +BOOST_PYTHON_MODULE(_Qgeom) { + + class_ > + ("QDetectorConstruction", "my detector") + ; + + // --- + def("Construct", Construct); +} + diff --git a/environments/g4py/tests/g4pytest/Qmaterials/CMakeLists.txt b/environments/g4py/tests/g4pytest/Qmaterials/CMakeLists.txt new file mode 100644 index 0000000000..723d52444c --- /dev/null +++ b/environments/g4py/tests/g4pytest/Qmaterials/CMakeLists.txt @@ -0,0 +1,4 @@ +# - build library +set(_TARGET _Qmaterials) +g4pytest_add_module(${_TARGET} Qmaterials.cc pyQmaterials.cc) +target_link_libraries(${_TARGET} PRIVATE G4materials) \ No newline at end of file diff --git a/environments/g4py/tests/g4pytest/Qmaterials/Qmaterials.cc b/environments/g4py/tests/g4pytest/Qmaterials/Qmaterials.cc new file mode 100644 index 0000000000..b9ace7959f --- /dev/null +++ b/environments/g4py/tests/g4pytest/Qmaterials/Qmaterials.cc @@ -0,0 +1,142 @@ +// +// ******************************************************************** +// * 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. * +// ******************************************************************** +// +// ==================================================================== +// Qmaterials.cc +// +// 2005 Q +// ==================================================================== +#include "G4Material.hh" +#include "G4SystemOfUnits.hh" +#include "G4PhysicalConstants.hh" + +//////////////// +void Construct() +//////////////// +{ + G4double A, Z; + + // ------------------------------------------------------------------------ + // Elements + // ------------------------------------------------------------------------ + G4Element* elH = new G4Element("Hydrogen","H", Z=1., A=1.00794*g/mole); + G4Element* elC = new G4Element("Carbon", "C", Z=6., A= 12.011 *g/mole); + G4Element* elN = new G4Element("Nitrogen","N", Z=7., A= 14.00674*g/mole); + G4Element* elO = new G4Element("Oxygen", "O", Z=8., A= 15.9994*g/mole); + G4Element* elNa = new G4Element("Sodium", "Na", Z=11., A= 22.989768*g/mole); + G4Element* elSi = new G4Element("Silicon", "Si", Z=14., A= 28.0855*g/mole); + G4Element* elAr = new G4Element("Argon", "Ar", Z=18., A= 39.948*g/mole); + G4Element* elI = new G4Element("Iodine", "I", Z=53., A= 126.90447*g/mole); + G4Element* elCs = new G4Element("Cesium", "Cs", Z=55., A= 132.90543*g/mole); + + // ------------------------------------------------------------------------ + // Materials + // ------------------------------------------------------------------------ + G4double density, massfraction; + G4int natoms, nel; + + // temperature of experimental hall is controlled at 20 degree. + const G4double expTemp= STP_Temperature+20.*kelvin; + + // vacuum + density= universe_mean_density; + G4Material* Vacuum= new G4Material("Vacuum", density, nel=2); + Vacuum-> AddElement(elN, .7); + Vacuum-> AddElement(elO, .3); + + // air + density= 1.2929e-03 *g/cm3; // at 20 degree + G4Material* Air= new G4Material("Air", density, nel=3, + kStateGas, expTemp); + G4double ttt= 75.47+23.20+1.28; + Air-> AddElement(elN, massfraction= 75.47/ttt); + Air-> AddElement(elO, massfraction= 23.20/ttt); + Air-> AddElement(elAr, massfraction= 1.28/ttt); + + // Ar gas + A= 39.948 *g/mole; + const G4double denAr= 1.782e-03 *g/cm3 * STP_Temperature/expTemp; + G4Material* Ar= new G4Material("ArgonGas", Z=18., A, denAr, + kStateGas, expTemp); + + // ethane (C2H6) + const G4double denEthane= 1.356e-3 *g/cm3 * STP_Temperature/expTemp; + G4Material* Ethane= new G4Material("Ethane", denEthane, nel=2, + kStateGas, expTemp); + Ethane-> AddElement(elC, natoms=2); + Ethane-> AddElement(elH, natoms=6); + + // Ar(50%) + ethane(50%) mixture + density= (denAr+denEthane)/2.; + G4Material* ArEthane= new G4Material("ArEthane", density, nel=2, + kStateGas, expTemp); + ArEthane-> AddMaterial(Ar, massfraction= denAr/density/2.); + ArEthane-> AddMaterial(Ethane, massfraction= denEthane/density/2.); + + // silicon + A= 28.0855 *g/mole; + density= 2.33 *g/cm3; + /*G4Material* Si=*/ new G4Material("SiliconWafer", Z=14., A, density); + + // alminium + A= 26.98 *g/mole; + density= 2.70 *g/cm3; + /*G4Material* Al=*/ new G4Material("Al", Z=13., A, density); + + // iron + A= 55.847 *g/mole; + density= 7.87 *g/cm3; + /*G4Material* Fe=*/ new G4Material("Iron", Z=26., A, density); + + // lead + A= 207.2 *g/mole; + density= 11.35 *g/cm3; + /*G4Material* Pb=*/ new G4Material("Lead", Z=82., A, density); + + // scintillator (Polystyene(C6H5CH=CH2)) + density= 1.032 *g/cm3; + G4Material* Scinti= new G4Material("Scinti", density, nel=2); + Scinti-> AddElement(elC, natoms=8); + Scinti-> AddElement(elH, natoms=8); + + // quartz (SiO2, crystalline) + density= 2.64 *g/cm3; + G4Material* Quartz= new G4Material("Quartz", density, nel= 2); + Quartz-> AddElement(elSi, natoms=1); + Quartz-> AddElement(elO, natoms=2); + + // NaI crystal + density= 3.67 *g/cm3; + G4Material* NaI= new G4Material("NaI", density, nel= 2); + NaI-> AddElement(elNa, natoms=1); + NaI-> AddElement(elI, natoms=1); + + // CsI crystal + density= 4.51 *g/cm3; + G4Material* CsI= new G4Material("CsI", density, nel= 2); + CsI-> AddElement(elCs, natoms=1); + CsI-> AddElement(elI, natoms=1); + +} diff --git a/environments/g4py/tests/g4pytest/Qmaterials/__init__.py b/environments/g4py/tests/g4pytest/Qmaterials/__init__.py new file mode 100644 index 0000000000..02c5a31c43 --- /dev/null +++ b/environments/g4py/tests/g4pytest/Qmaterials/__init__.py @@ -0,0 +1 @@ +from ._Qmaterials import * \ No newline at end of file diff --git a/environments/g4py/tests/g4pytest/Qmaterials/pyQmaterials.cc b/environments/g4py/tests/g4pytest/Qmaterials/pyQmaterials.cc new file mode 100644 index 0000000000..5355fd8660 --- /dev/null +++ b/environments/g4py/tests/g4pytest/Qmaterials/pyQmaterials.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. * +// ******************************************************************** +// +// ==================================================================== +// pyQmaterials.cc +// +// [Qmaterials] +// a site-module of Geant4Py +// +// A sample set of materials +// +// 2005 Q +// ==================================================================== +#include + +using namespace boost::python; + +void Construct(); + +// ==================================================================== +// Expose to Python +// ==================================================================== + +BOOST_PYTHON_MODULE(_Qmaterials) { + def("Construct", Construct); +} + diff --git a/environments/g4py/tests/g4pytest/__init__.py b/environments/g4py/tests/g4pytest/__init__.py new file mode 100644 index 0000000000..b58d11dea5 --- /dev/null +++ b/environments/g4py/tests/g4pytest/__init__.py @@ -0,0 +1,3 @@ + +# Geant4Py site-modules + diff --git a/environments/g4py/tests/g4pytest/emcalculator/emcalculator.py b/environments/g4py/tests/g4pytest/emcalculator/emcalculator.py new file mode 100644 index 0000000000..e63d1a2952 --- /dev/null +++ b/environments/g4py/tests/g4pytest/emcalculator/emcalculator.py @@ -0,0 +1,149 @@ +""" +# ================================================================== +# Python module (Python3) +# +# Calculation of photon cross section and stopping power for +# chared particles +# +# Q, 2005 +# ================================================================== +""" +from Geant4 import * + +# ================================================================== +# public symbols +# ================================================================== +__all__ = [ 'CalculatePhotonCrossSection', 'CalculateDEDX' ] + +# ================================================================== +# Photon Cross Section +# ================================================================== +def CalculatePhotonCrossSection(mat, elist, verbose=0, + plist=["compt", "", "phot", "conv"]): + """ + Calculate photon cross section for a given material and + a list of energy, returing a list of cross sections for + the components of "Copmton scattering", "rayleigh scattering", + "photoelectric effect", "pair creation" and total one. + + Arguments: + mat: material name + elist: list of energy + verbose: verbose level [0] + plist: list of process name + (compton/rayleigh/photoelectic/conversion) [StandardEM set] + + Keys of index: + "compt": Compton Scattering + "rayleigh": Rayleigh Scattering + "phot" : photoelectric effect + "conv" : pair Creation + "tot" : total + + Example: + xsec_list= CalculatePhotonCrossSection(...) + value= xsec_list[energy_index]["compt"] + """ + if(verbose>0): + print("-------------------------------------------------------------------") + print(" Photon Cross Section (", mat, ")") + print("Energy Compton Raleigh Photo- Pair Total") + print(" Scattering Scattering electric Creation") + print("(MeV) (cm2/g) (cm2/g) (cm2/g) (cm2/g) (cm2/g)") + print("-------------------------------------------------------------------") + + xsection_list= [] + for ekin in elist: + xsec= {} + xsec["compt"] \ + = gEmCalculator.ComputeCrossSectionPerVolume(ekin, "gamma", plist[0], + mat) * cm2/g + xsec["rayleigh"] \ + = gEmCalculator.ComputeCrossSectionPerVolume(ekin, "gamma", plist[1], + mat) * cm2/g + + xsec["phot"] \ + = gEmCalculator.ComputeCrossSectionPerVolume(ekin, "gamma", plist[2], + mat) * cm2/g + xsec["conv"] \ + = gEmCalculator.ComputeCrossSectionPerVolume(ekin, "gamma", plist[3], + mat) * cm2/g + + xsec["tot"]= xsec["compt"] + xsec["rayleigh"] + xsec["phot"] + xsec["conv"] + + xsection_list.append((ekin, xsec)) + + if(verbose>0): + print(" %8.3e %8.3e %8.3e %8.3e %8.3e %8.3e" \ + % (ekin/MeV, xsec["compt"]/(cm2/g), xsec["rayleigh"]/(cm2/g), + xsec["phot"]/(cm2/g), xsec["conv"]/(cm2/g), xsec["tot"]/(cm2/g))) + + return xsection_list + + +# ================================================================== +# Stopping Power +# ================================================================== +def CalculateDEDX(part, mat, elist, verbose=0, + plist=["eIoni", "eBrem", "muIoni", "muBrems", "hIoni"]): + """ + Calculate stopping powers for a give particle, material and + a list of energy, returing stopping power for the components of + "Ionization", "Radiation" and total one. + + Arguments: + part: particle name + mat: material name + elist: list of energy + verbose: verbose level [0] + plist: list of process name + (electron ionization/electron brems/ + muon ionization/muon brems/hadron ionization) [StandardEM set] + + Keys of index: + "ioni": ionization + "brems": Bremsstrahlung + "tot": total + + Example: + dedx_list= CalculateDEDX(...) + value= dedx_list[energy_index]["ioni"] + """ + if(verbose>0): + print("------------------------------------------------------") + print(" Stopping Power (", part, ",", mat, ")") + print(" Energy Ionization Radiation Total") + print(" (MeV) (MeVcm2/g) (MeVcm2/g) (MeVcm2/g)") + print("------------------------------------------------------") + + procname_brems= "" + procname_ioni= "" + if ( part=="e+" or part=="e-" ): + procname_ioni= plist[0] + procname_brems= plist[1] + elif ( part=="mu+" or part=="mu-"): + procname_ioni= plist[2] + procname_brems= plist[3] + else: + procname_ioni= plist[4] + procname_brems= "" + + dedx_list= [] + for ekin in elist: + dedx= {} + dedx["ioni"] \ + = gEmCalculator.ComputeDEDX(ekin, part, procname_ioni, mat) * MeV*cm2/g + dedx["brems"] \ + = gEmCalculator.ComputeDEDX(ekin, part, procname_brems, mat) * MeV*cm2/g + dedx["tot"]= dedx["ioni"]+ dedx["brems"] + + if(verbose>0): + print(" %8.3e %8.3e %8.3e %8.3e" \ + % (ekin/MeV, dedx["ioni"]/(MeV*cm2/g), + dedx["brems"]/(MeV*cm2/g), dedx["tot"]/(MeV*cm2/g) )) + + + dedx_list.append((ekin, dedx)) + + return dedx_list + diff --git a/environments/g4py/tests/g4pytest/ezgeom/CMakeLists.txt b/environments/g4py/tests/g4pytest/ezgeom/CMakeLists.txt new file mode 100644 index 0000000000..1ba9a56b08 --- /dev/null +++ b/environments/g4py/tests/g4pytest/ezgeom/CMakeLists.txt @@ -0,0 +1,10 @@ +# - build library +set(_TARGET _ezgeom) +g4pytest_add_module(${_TARGET} + EzDetectorConstruction.cc + G4EzVolume.cc + G4EzVoxelParameterization.cc + G4EzWorld.cc + pyEzgeom.cc +) +target_link_libraries(${_TARGET} PRIVATE G4materials G4geometry G4run) diff --git a/environments/g4py/tests/g4pytest/ezgeom/EzDetectorConstruction.cc b/environments/g4py/tests/g4pytest/ezgeom/EzDetectorConstruction.cc new file mode 100644 index 0000000000..90ae9a1f44 --- /dev/null +++ b/environments/g4py/tests/g4pytest/ezgeom/EzDetectorConstruction.cc @@ -0,0 +1,58 @@ +// +// ******************************************************************** +// * 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. * +// ******************************************************************** +// +// ==================================================================== +// EzDetectorConstruction.cc +// +// 2005 Q +// ==================================================================== +#include "EzDetectorConstruction.hh" +#include "G4EzWorld.hh" + +// ==================================================================== +// +// class description +// +// ==================================================================== + +//////////////////////////////////////////////// +EzDetectorConstruction::EzDetectorConstruction() +//////////////////////////////////////////////// +{ +} + +///////////////////////////////////////////////// +EzDetectorConstruction::~EzDetectorConstruction() +///////////////////////////////////////////////// +{ +} + +////////////////////////////////////////////////////// +G4VPhysicalVolume* EzDetectorConstruction::Construct() +////////////////////////////////////////////////////// +{ + return G4EzWorld::GetWorldVolume(); +} + diff --git a/environments/g4py/tests/g4pytest/ezgeom/EzDetectorConstruction.hh b/environments/g4py/tests/g4pytest/ezgeom/EzDetectorConstruction.hh new file mode 100644 index 0000000000..19a717dc2c --- /dev/null +++ b/environments/g4py/tests/g4pytest/ezgeom/EzDetectorConstruction.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. * +// ******************************************************************** +// +// ==================================================================== +// EzDetectorConstruction.hh +// +// 2005 Q +// ==================================================================== +#ifndef EZ_DETECTOR_CONSTRUCTION_H +#define EZ_DETECTOR_CONSTRUCTION_H + +#include "G4VUserDetectorConstruction.hh" + +// ==================================================================== +// +// class definition +// +// ==================================================================== + +class EzDetectorConstruction : public G4VUserDetectorConstruction { + +public: + EzDetectorConstruction(); + ~EzDetectorConstruction(); + + virtual G4VPhysicalVolume* Construct(); + +}; + +#endif diff --git a/environments/g4py/tests/g4pytest/ezgeom/G4EzVolume.cc b/environments/g4py/tests/g4pytest/ezgeom/G4EzVolume.cc new file mode 100644 index 0000000000..26733fff46 --- /dev/null +++ b/environments/g4py/tests/g4pytest/ezgeom/G4EzVolume.cc @@ -0,0 +1,311 @@ +// +// ******************************************************************** +// * 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. * +// ******************************************************************** +// +// ==================================================================== +// G4EzVolume.cc +// +// 2005 Q +// ==================================================================== +#include "G4Material.hh" +#include "G4Box.hh" +#include "G4Tubs.hh" +#include "G4Cons.hh" +#include "G4Sphere.hh" +#include "G4Orb.hh" +#include "G4PVPlacement.hh" +#include "G4PVReplica.hh" +#include "G4PVParameterised.hh" +#include "G4VisAttributes.hh" + +#include "G4EzWorld.hh" +#include "G4EzVolume.hh" +#include "G4EzVoxelParameterization.hh" + +// ==================================================================== +// +// class description +// +// ==================================================================== + +//////////////////////// +G4EzVolume::G4EzVolume() + : name("MyVolume"), + solid(0), + lv(0), lvsub(0), + nplacement(0) +//////////////////////// +{ +} + + +///////////////////////////////////////////// +G4EzVolume::G4EzVolume(const G4String& aname) + : name(aname), solid(0), lv(0), lvsub(0), + nplacement(0) +///////////////////////////////////////////// +{ +} + + +///////////////////////// +G4EzVolume::~G4EzVolume() +///////////////////////// +{ +} + + +/////////////////////////////////////////////////////////////////////// +void G4EzVolume::CreateBoxVolume(G4Material* amaterial, + G4double dx, G4double dy, G4double dz) +/////////////////////////////////////////////////////////////////////// +{ + if(lv !=0 ) { + G4cout << "%%% Warning (G4EzVolume): volume is already created." + << G4endl; + return; + } + + solid= new G4Box(name, dx/2., dy/2., dz/2.); + lv= new G4LogicalVolume(solid, amaterial, name); + + // vis. attributes + va= new G4VisAttributes(); + lv-> SetVisAttributes(va); +} + + +//////////////////////////////////////////////////////////////////////////// +void G4EzVolume::CreateTubeVolume(G4Material* amaterial, + G4double rmin, G4double rmax, G4double dz, + G4double phi0, G4double dphi) +//////////////////////////////////////////////////////////////////////////// +{ + if(lv !=0 ) { + G4cout << "%%% Warning (G4EzVolume): volume is already created." + << G4endl; + return; + } + + solid= new G4Tubs(name, rmin, rmax, dz, phi0, dphi); + lv= new G4LogicalVolume(solid, amaterial, name); + + // vis. attributes + va= new G4VisAttributes(); + lv-> SetVisAttributes(va); +} + + +///////////////////////////////////////////////////////////////// +void G4EzVolume::CreateConeVolume(G4Material* amaterial, + G4double rmin1, G4double rmax1, + G4double rmin2, G4double rmax2, + G4double dz, + G4double phi0, G4double dphi) +///////////////////////////////////////////////////////////////// +{ + if(lv !=0 ) { + G4cout << "%%% Warning (G4EzVolume): volume is already created." + << G4endl; + return; + } + + solid= new G4Cons(name, rmin1, rmax1, rmin2, rmax2, + dz, phi0, dphi); + lv= new G4LogicalVolume(solid, amaterial, name); + + // vis. attributes + va= new G4VisAttributes(); + lv-> SetVisAttributes(va); +} + + +///////////////////////////////////////////////////////////////////// +void G4EzVolume::CreateSphereVolume(G4Material* amaterial, + G4double rmin, G4double rmax, + G4double phi0, G4double dphi, + G4double theta0, G4double dtheta) +///////////////////////////////////////////////////////////////////// +{ + if(lv !=0 ) { + G4cout << "%%% Warning (G4EzVolume): volume is already created." + << G4endl; + return; + } + + solid= new G4Sphere(name, rmin, rmax, phi0, dphi, theta0, dtheta); + lv= new G4LogicalVolume(solid, amaterial, name); + + // vis. attributes + va= new G4VisAttributes(); + lv-> SetVisAttributes(va); +} + + +////////////////////////////////////////////////////////////////////// +void G4EzVolume::CreateOrbVolume(G4Material* amaterial, G4double rmax) +////////////////////////////////////////////////////////////////////// +{ + if(lv !=0 ) { + G4cout << "%%% Warning (G4EzVolume): volume is already created." + << G4endl; + return; + } + + solid= new G4Orb(name, rmax); + lv= new G4LogicalVolume(solid, amaterial, name); + + // vis. attributes + va= new G4VisAttributes(); + lv-> SetVisAttributes(va); +} + + +//////////////////////////////////////////////////////////////// +G4VPhysicalVolume* G4EzVolume::PlaceIt(const G4ThreeVector& pos, + G4int ncopy, + G4EzVolume* parent) +//////////////////////////////////////////////////////////////// +{ + if(lv==0) { + G4cout << "%%% Warning (G4EzVolume): volume is not yet created." + << G4endl; + return 0; + } + + G4PVPlacement* pv; + if(parent==0) { // place it in the world + G4VPhysicalVolume* world= G4EzWorld::GetWorldVolume(); + pv= new G4PVPlacement(0, pos, name, lv, world, false, ncopy); + } else { + pv= new G4PVPlacement(0, pos, lv, name, parent->lv, false, ncopy); + } + + nplacement++; + return pv; +} + + +////////////////////////////////////////////////////////////////////// +G4VPhysicalVolume* G4EzVolume::PlaceIt(const G4Transform3D& transform, + G4int ncopy, + G4EzVolume* parent) +////////////////////////////////////////////////////////////////////// +{ + if(lv==0) { + G4cout << "%%% Warning (G4EzVolume): volume is not yet created." + << G4endl; + return 0; + } + + G4PVPlacement* pv; + if(parent==0) { // place it in the world + G4VPhysicalVolume* world= G4EzWorld::GetWorldVolume(); + pv= new G4PVPlacement(transform, name, lv, world, false, ncopy); + } else { + pv= new G4PVPlacement(transform, lv, name, parent->lv, false, ncopy); + } + + nplacement++; + return pv; +} + + +/////////////////////////////////////////////////////////////////////////// +G4VPhysicalVolume* G4EzVolume::ReplicateIt(G4EzVolume* parent, + EAxis pAxis, G4int nReplicas, + G4double width, G4double offset) +/////////////////////////////////////////////////////////////////////////// +{ + if(lv==0) { + G4cout << "%%% Warning (G4EzVolume): volume is not yet created." + << G4endl; + return 0; + } + + G4PVReplica* pv= + new G4PVReplica(name, lv, parent->lv, pAxis, nReplicas, width, offset); + + nplacement += nReplicas; + return pv; +} + + +////////////////////////////////////////////////////////////////// +G4ThreeVector G4EzVolume::VoxelizeIt(G4int nx, G4int ny, G4int nz) +////////////////////////////////////////////////////////////////// +{ + // creating voxel volume... + G4Box* avolume= dynamic_cast(solid); + if(avolume ==0 ) { + G4cout << "%%% Error (G4EzVolume): voxelization is valid " + << "only for Box geometry." << G4endl; + return G4ThreeVector(); + } + + if(lvsub !=0) { + G4cout << "%%% Error (G4EzVolume): already voxelized." << G4endl; + return G4ThreeVector(); + } + + G4double dx= (avolume-> GetXHalfLength())*2.; + G4double dy= (avolume-> GetYHalfLength())*2.; + G4double dz= (avolume-> GetZHalfLength())*2.; + + // voxel size + G4double ddx= dx/nx; + G4double ddy= dy/ny; + G4double ddz= dz/nz; + + G4Box* voxel= new G4Box("voxel", ddx/2., ddy/2., ddz/2.); + G4Material* voxelMaterial= lv-> GetMaterial(); + lvsub= new G4LogicalVolume(voxel, voxelMaterial, "voxel"); + + G4VisAttributes* vavoxel= new G4VisAttributes(G4Color(1.,0.,0.)); + lvsub-> SetVisAttributes(vavoxel); + + G4EzVoxelParameterization* voxelParam= + new G4EzVoxelParameterization(ddx, ddy, ddz, nx, ny, nz); + G4int nvoxel= nx*ny*nz; + new G4PVParameterised(name+"_voxel", lvsub, lv, kXAxis, + nvoxel, voxelParam); + + return G4ThreeVector(ddx, ddy, ddz); +} + + + +//////////////////////////////////////////////////////////////// +void G4EzVolume::SetSensitiveDetector(G4VSensitiveDetector* asd) +//////////////////////////////////////////////////////////////// +{ + if(lvsub!=0) { + lvsub-> SetSensitiveDetector(asd); + return; + } + + if(lv!=0) lv-> SetSensitiveDetector(asd); + +} + diff --git a/environments/g4py/tests/g4pytest/ezgeom/G4EzVolume.hh b/environments/g4py/tests/g4pytest/ezgeom/G4EzVolume.hh new file mode 100644 index 0000000000..d67fd956b0 --- /dev/null +++ b/environments/g4py/tests/g4pytest/ezgeom/G4EzVolume.hh @@ -0,0 +1,165 @@ +// +// ******************************************************************** +// * 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. * +// ******************************************************************** +// +// ==================================================================== +// G4EzVolume.hh +// +// Utility class for supporting creating user geometry +// +// * wrapper of logical volume +// +// 2005 Q +// ==================================================================== +#ifndef G4_EZ_VOLUME_H +#define G4_EZ_VOLUME_H + +#include "G4LogicalVolume.hh" +#include "G4VisAttributes.hh" +#include "G4Transform3D.hh" + +// ==================================================================== +// +// class definition +// +// ==================================================================== +class G4Material; +class G4VSolid; +class G4VPhysicalVolume; + +class G4EzVolume { +protected: + // volume information + G4String name; + G4VSolid* solid; + G4LogicalVolume* lv; + G4LogicalVolume* lvsub; // logical volume for voxels + G4VisAttributes* va; + G4int nplacement; // # of placements + +public: + G4EzVolume(); + G4EzVolume(const G4String& aname); + ~G4EzVolume(); + + // createing volume + void CreateBoxVolume(G4Material* amaterial, + G4double dx, G4double dy, G4double dz); + + void CreateTubeVolume(G4Material* amaterial, + G4double rmin, G4double rmax, + G4double dz, + G4double phi0=0., G4double dphi=360*deg); + + void CreateConeVolume(G4Material* amaterial, + G4double rmin1, G4double rmax1, + G4double rmin2, G4double rmax2, + G4double dz, + G4double phi0=0., G4double dphi=360.*deg); + + void CreateSphereVolume(G4Material* amaterial, + G4double rmin, G4double rmax, + G4double phi0=0., G4double dphi=360.*deg, + G4double theta0=0., G4double dtheta=180.*deg); + + void CreateOrbVolume(G4Material* amaterial, G4double rmax); + + + // placement + G4VPhysicalVolume* PlaceIt(const G4ThreeVector& pos, G4int ncopy=0, + G4EzVolume* parent=0); + + G4VPhysicalVolume* PlaceIt(const G4Transform3D& transform, G4int ncopy=0, + G4EzVolume* parent=0); + // replica + // parent volume should be exactly filled with replicated volumes. + G4VPhysicalVolume* ReplicateIt(G4EzVolume* parent, + EAxis pAxis, G4int nReplicas, + G4double width, G4double offset=0); + // voxelize + // volume should be "BOX". otherwise, error. + // returning voxel size in each dimension + G4ThreeVector VoxelizeIt(G4int nx, G4int ny, G4int nz); + + // sensitivity + // in the case of voxelized, SD will be set to a voxel. + void SetSensitiveDetector(G4VSensitiveDetector* asd); + + // direct access to properties + const G4String& GetName() const; + + void SetSolid(G4VSolid* asolid); + const G4VSolid* GetSolid() const; + + void SetMaterial(G4Material* amaterial); + G4Material* GetMaterial() const; + + G4int GetNofPlacements() const; + + void SetVisibility(G4bool qvisible); + void SetColor(const G4Color& color); + void SetColor(G4double red, G4double green, G4double blue); + +}; + +// ==================================================================== +// inline functions +// ==================================================================== + +inline const G4String& G4EzVolume::GetName() const { return name; } + +inline void G4EzVolume::SetSolid(G4VSolid* asolid) { solid= asolid; } + +inline const G4VSolid* G4EzVolume::GetSolid() const { return solid; } + +inline void G4EzVolume::SetMaterial(G4Material* amaterial) +{ + if(lv!= 0) lv-> SetMaterial(amaterial); + if(lvsub!= 0) lvsub-> SetMaterial(amaterial); +} + +inline G4Material* G4EzVolume::GetMaterial() const +{ + if(lv!=0) return lv-> GetMaterial(); + else return 0; +} + +inline G4int G4EzVolume::GetNofPlacements() const { return nplacement; } + +inline void G4EzVolume::SetVisibility(G4bool qvisible) +{ + if(va!=0) va-> SetVisibility(qvisible); +} + +inline void G4EzVolume::SetColor(const G4Color& color) +{ + if(va!=0) va-> SetColor(color); +} + +inline void G4EzVolume::SetColor(G4double red, G4double green, G4double blue) +{ + if(va!=0) va-> SetColor(red, green, blue); +} + +#endif diff --git a/environments/g4py/tests/g4pytest/ezgeom/G4EzVoxelParameterization.cc b/environments/g4py/tests/g4pytest/ezgeom/G4EzVoxelParameterization.cc new file mode 100644 index 0000000000..14d1bcc40e --- /dev/null +++ b/environments/g4py/tests/g4pytest/ezgeom/G4EzVoxelParameterization.cc @@ -0,0 +1,89 @@ +// +// ******************************************************************** +// * 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. * +// ******************************************************************** +// +// ==================================================================== +// G4EzVoxelParameterization.cc +// +// 2005 Q +// ==================================================================== +#include "G4EzVoxelParameterization.hh" +#include "G4Box.hh" +#include "G4VPhysicalVolume.hh" + +// ==================================================================== +// +// class description +// +// ==================================================================== + +////////////////////////////////////////////////////////////////////////// +G4EzVoxelParameterization::G4EzVoxelParameterization + (G4double ddx, G4double ddy, G4double ddz, G4int nx, G4int ny, G4int nz) + : voxelSize(ddx, ddy, ddz), motherSize(ddx*nx, ddy*ny, ddz*nz) +////////////////////////////////////////////////////////////////////////// +{ + nvoxels[0]= nx; + nvoxels[1]= ny; + nvoxels[2]= nz; +} + + +/////////////////////////////////////////////////////// +G4EzVoxelParameterization::~G4EzVoxelParameterization() +/////////////////////////////////////////////////////// +{ +} + + +/////////////////////////////////////////////////////////// +void G4EzVoxelParameterization::ComputeTransformation + (const G4int copyNo, G4VPhysicalVolume* physVol) const +/////////////////////////////////////////////////////////// +{ + // copyNo-> index + G4int nxy= nvoxels[0]*nvoxels[1]; + G4int iz= copyNo/nxy; + G4int ixy= copyNo - iz*nxy; + G4int iy= ixy/nvoxels[0]; + G4int ix= ixy-iy*nvoxels[0]; + + // voxel position + G4double px= voxelSize[0]*(ix+0.5) - motherSize[0]/2.; + G4double py= voxelSize[1]*(iy+0.5) - motherSize[1]/2.; + G4double pz= voxelSize[2]*(iz+0.5) - motherSize[2]/2.; + + physVol-> SetTranslation(G4ThreeVector(px, py, pz)); + +} + + +////////////////////////////////////////////////////////////////////////////// +void G4EzVoxelParameterization::ComputeDimensions + (G4Box& /*aBox*/, const G4int /*copyNo*/, const G4VPhysicalVolume* /*physVol*/) const +////////////////////////////////////////////////////////////////////////////// +{ + return; +} + diff --git a/environments/g4py/tests/g4pytest/ezgeom/G4EzVoxelParameterization.hh b/environments/g4py/tests/g4pytest/ezgeom/G4EzVoxelParameterization.hh new file mode 100644 index 0000000000..dd8d97632e --- /dev/null +++ b/environments/g4py/tests/g4pytest/ezgeom/G4EzVoxelParameterization.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. * +// ******************************************************************** +// +// ==================================================================== +// G4EzVoxelParameterization.hh +// +// 2005 Q +// ==================================================================== +#ifndef G4EZ_VOXEL_PARAMETERIZATION_H +#define G4EZ_VOXEL_PARAMETERIZATION_H + +#include "G4VPVParameterisation.hh" +#include "G4ThreeVector.hh" + +// ==================================================================== +// +// class definition +// +// ==================================================================== + +class G4EzVoxelParameterization : public G4VPVParameterisation { +protected: + G4ThreeVector voxelSize; + G4ThreeVector motherSize; + G4int nvoxels[3]; + +public: + G4EzVoxelParameterization(G4double ddx, G4double ddy, G4double ddz, + G4int nx, G4int ny, G4int nz); + + ~G4EzVoxelParameterization(); + + virtual void ComputeTransformation(const G4int copyNo, + G4VPhysicalVolume* physVol) const; + + using G4VPVParameterisation::ComputeDimensions; + virtual void ComputeDimensions(G4Box& aBox, const G4int copyNo, + const G4VPhysicalVolume* physVol) const; +}; + +#endif diff --git a/environments/g4py/tests/g4pytest/ezgeom/G4EzWorld.cc b/environments/g4py/tests/g4pytest/ezgeom/G4EzWorld.cc new file mode 100644 index 0000000000..0c317efa4c --- /dev/null +++ b/environments/g4py/tests/g4pytest/ezgeom/G4EzWorld.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. * +// ******************************************************************** +// +// ==================================================================== +// G4EzWorld.cc +// +// 2005 Q +// ==================================================================== +#include "G4EzWorld.hh" +#include "G4Element.hh" +#include "G4Material.hh" +#include "G4Box.hh" +#include "G4LogicalVolume.hh" +#include "G4PVPlacement.hh" +#include "G4VisAttributes.hh" +#include "G4RunManager.hh" +#include "G4PhysicalConstants.hh" + +G4VPhysicalVolume* G4EzWorld::world= G4EzWorld::CreateWorld(); + +// ==================================================================== +// +// class description +// +// ==================================================================== + +////////////////////// +G4EzWorld::G4EzWorld() +////////////////////// +{ +} + +/////////////////////// +G4EzWorld::~G4EzWorld() +/////////////////////// +{ + world= 0; +} + + +////////////////////////////////////////////////////////// +G4VPhysicalVolume* G4EzWorld::CreateWorld + (G4double dx, G4double dy, G4double dz) +////////////////////////////////////////////////////////// +{ + // default matetial is "vacuum" + G4Material* vacuum= G4Material::GetMaterial("_Vacuum", false); + + if(vacuum==0) { + G4Element* elN= new G4Element("_N", "", 7., 14.00674*g/mole); + G4Element* elO= new G4Element("_O", "", 8., 15.9994*g/mole); + + vacuum= new G4Material("_Vacuum", universe_mean_density, 2); + vacuum-> AddElement(elN, 0.7); + vacuum-> AddElement(elO, 0.3); + } + + G4Box* sdworld= new G4Box("world", dx/2., dy/2., dz/2.); + G4LogicalVolume* lvworld= new G4LogicalVolume(sdworld, vacuum, "word"); + G4PVPlacement* aworld= new G4PVPlacement(0, G4ThreeVector(), "world", + lvworld, 0, false, 0); + + // vis. attributes + G4VisAttributes* vaworld= new G4VisAttributes(G4Color(1.,1.,1.)); + vaworld-> SetForceWireframe(true); + lvworld-> SetVisAttributes(vaworld); + + return aworld; + +} + + +//////////////////////////////////////////////////////////// +void G4EzWorld::Reset(G4double dx, G4double dy, G4double dz) +//////////////////////////////////////////////////////////// +{ + delete world; + world= CreateWorld(dx, dy, dz); + + G4RunManager* runManager= G4RunManager::GetRunManager(); + runManager-> DefineWorldVolume(world); +} + + +///////////////////////////////////////////////////////////// +void G4EzWorld::Resize(G4double dx, G4double dy, G4double dz) +///////////////////////////////////////////////////////////// +{ + G4Box* box= dynamic_cast(world-> GetLogicalVolume()-> GetSolid()); + box-> SetXHalfLength(dx/2.); + box-> SetYHalfLength(dy/2.); + box-> SetZHalfLength(dz/2.); + + G4RunManager* runManager= G4RunManager::GetRunManager(); + runManager-> GeometryHasBeenModified(); +} + + +////////////////////////////////////////////////// +void G4EzWorld::SetMaterial(G4Material* amaterial) +////////////////////////////////////////////////// +{ + world-> GetLogicalVolume()-> SetMaterial(amaterial); +} + + +////////////////////////////////////////// +void G4EzWorld::SetVisibility(G4bool qvis) +////////////////////////////////////////// +{ + G4VisAttributes* vaworld= const_cast( + world-> GetLogicalVolume()-> GetVisAttributes()); + vaworld-> SetVisibility(qvis); +} + diff --git a/environments/g4py/tests/g4pytest/ezgeom/G4EzWorld.hh b/environments/g4py/tests/g4pytest/ezgeom/G4EzWorld.hh new file mode 100644 index 0000000000..79991b2365 --- /dev/null +++ b/environments/g4py/tests/g4pytest/ezgeom/G4EzWorld.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. * +// ******************************************************************** +// +// ==================================================================== +// G4EzWorld.hh +// +// Utility class for supporting creating user geometry +// +// management of a world volume +// +// 2005 Q +// ==================================================================== +#ifndef G4_EZ_WORLD_H +#define G4_EZ_WORLD_H + +#include "globals.hh" +#include "G4SystemOfUnits.hh" + +// ==================================================================== +// +// class definition +// +// ==================================================================== +class G4Material; +class G4VPhysicalVolume; + +class G4EzWorld { +protected: + // world volume is automatically presented. + static G4VPhysicalVolume* world; + static G4VPhysicalVolume* CreateWorld(G4double dx=1.*m, + G4double dy=1.*m, + G4double dz=1.*m); +public: + G4EzWorld(); + ~G4EzWorld(); + + static G4VPhysicalVolume* GetWorldVolume(); + + static void Reset(G4double dx, G4double dy, G4double dz); + static void Resize(G4double dx, G4double dy, G4double dz); + static void SetMaterial(G4Material* amaterial); + static void SetVisibility(G4bool qvis); + +}; + +// ==================================================================== +// inline functions +// ==================================================================== + +inline G4VPhysicalVolume* G4EzWorld::GetWorldVolume() { return world; } + +#endif diff --git a/environments/g4py/tests/g4pytest/ezgeom/__init__.py b/environments/g4py/tests/g4pytest/ezgeom/__init__.py new file mode 100644 index 0000000000..e74f584ed2 --- /dev/null +++ b/environments/g4py/tests/g4pytest/ezgeom/__init__.py @@ -0,0 +1 @@ +from ._ezgeom import * \ No newline at end of file diff --git a/environments/g4py/tests/g4pytest/ezgeom/pyEzgeom.cc b/environments/g4py/tests/g4pytest/ezgeom/pyEzgeom.cc new file mode 100644 index 0000000000..e7f72716e3 --- /dev/null +++ b/environments/g4py/tests/g4pytest/ezgeom/pyEzgeom.cc @@ -0,0 +1,158 @@ +// +// ******************************************************************** +// * 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. * +// ******************************************************************** +// +// ==================================================================== +// pyEZgeom.cc +// +// [ezgeom] +// a site-module of Geant4Py +// +// An easy way to build geometry +// +// 2005 Q +// ==================================================================== +#include +#include "EzDetectorConstruction.hh" +#include "G4EzWorld.hh" +#include "G4EzVolume.hh" +#include "G4RunManager.hh" +#include "G4VSensitiveDetector.hh" + +using namespace boost::python; + +// ==================================================================== +// thin wrappers +// ==================================================================== +namespace pyEZgeom { + +// methods in global namespace +void Construct() +{ + G4RunManager* runMgr= G4RunManager::GetRunManager(); + runMgr-> SetUserInitialization(new EzDetectorConstruction); +} + +void ResetWorld(G4double dx, G4double dy, G4double dz) +{ + G4EzWorld::Reset(dx, dy, dz); +} + +void ResizeWorld(G4double dx, G4double dy, G4double dz) +{ + G4EzWorld::Resize(dx, dy, dz); +} + + +void SetWorldMaterial(G4Material* amaterial) +{ + G4EzWorld::SetMaterial(amaterial); +} + + +void SetWorldVisibility(G4bool qvis) +{ + G4EzWorld::SetVisibility(qvis); +} + + +// CreateTubeVolume +BOOST_PYTHON_MEMBER_FUNCTION_OVERLOADS(f_CreateTubeVolume, + CreateTubeVolume, 4, 6) + +BOOST_PYTHON_MEMBER_FUNCTION_OVERLOADS(f_CreateConeVolume, + CreateConeVolume, 6, 8) + +BOOST_PYTHON_MEMBER_FUNCTION_OVERLOADS(f_CreateSphereVolume, + CreateSphereVolume, 3, 7) + +// PlaceIt +G4VPhysicalVolume*(G4EzVolume::*f1_PlaceIt) + (const G4ThreeVector&, G4int, G4EzVolume*) = &G4EzVolume::PlaceIt; + +G4VPhysicalVolume*(G4EzVolume::*f2_PlaceIt) + (const G4Transform3D&, G4int, G4EzVolume*) = &G4EzVolume::PlaceIt; + +BOOST_PYTHON_MEMBER_FUNCTION_OVERLOADS(f_PlaceIt, PlaceIt, 1, 3) + +// ReplicateIt +BOOST_PYTHON_MEMBER_FUNCTION_OVERLOADS(f_ReplicateIt, ReplicateIt, 4, 5) + +// SetColor +void (G4EzVolume::*f1_SetColor)(const G4Color&) = &G4EzVolume::SetColor; +void (G4EzVolume::*f2_SetColor)(G4double, G4double, G4double) + = &G4EzVolume::SetColor; + +} + +using namespace pyEZgeom; + +// ==================================================================== +// Expose to Python +// ==================================================================== + +BOOST_PYTHON_MODULE(_ezgeom) { + + class_("G4EzVolume", "an easy way of geometry configuration") + .def(init()) + // --- + .def("CreateBoxVolume", &G4EzVolume::CreateBoxVolume) + .def("CreateTubeVolume", &G4EzVolume::CreateTubeVolume, + f_CreateTubeVolume()) + .def("CreateConeVolume", &G4EzVolume::CreateConeVolume, + f_CreateConeVolume()) + .def("CreateShpereVolume", &G4EzVolume::CreateSphereVolume, + f_CreateSphereVolume()) + .def("CreateOrbVolume", &G4EzVolume::CreateOrbVolume) + // --- + .def("SetSold", &G4EzVolume::SetSolid) + .def("GetSold", &G4EzVolume::GetSolid, + return_value_policy()) + .def("SetMaterial", &G4EzVolume::SetMaterial) + .def("GetMaterial", &G4EzVolume::GetMaterial, + return_value_policy()) + // --- + .def("PlaceIt", f1_PlaceIt, + f_PlaceIt()[return_value_policy()]) + .def("PlaceIt", f2_PlaceIt, + f_PlaceIt()[return_value_policy()]) + .def("ReplicateIt", &G4EzVolume::ReplicateIt, + f_ReplicateIt()[return_value_policy()]) + .def("VoxelizeIt", &G4EzVolume::VoxelizeIt) + // --- + .def("SetSensitiveDetector", &G4EzVolume::SetSensitiveDetector) + // --- + .def("SetColor", f1_SetColor) + .def("SetColor", f2_SetColor) + .def("SetVisibility", &G4EzVolume::SetVisibility) + ; + + // ------------------------------------------------------------------- + def("Construct", Construct); + def("ResetWorld", ResetWorld); + def("ResizeWorld", ResizeWorld); + def("SetWorldMaterial", SetWorldMaterial); + def("SetWorldVisibility", SetWorldVisibility); + +} diff --git a/environments/g4py/tests/gtest01/CMakeLists.txt b/environments/g4py/tests/gtest01/CMakeLists.txt new file mode 100644 index 0000000000..d8d4d387d1 --- /dev/null +++ b/environments/g4py/tests/gtest01/CMakeLists.txt @@ -0,0 +1,4 @@ +add_subdirectory(module) +configure_file(test.py test.py) +add_test(NAME geant4py-test01 COMMAND ${PYTHON_EXECUTABLE} test.py) +set_tests_properties(geant4py-test01 PROPERTIES ENVIRONMENT "PYTHONPATH=${GEANT4_PYTHON_OUTPUT_DIR};${GEANT4_TEST_ENVIRONMENT}") diff --git a/environments/g4py/tests/gtest01/gun.mac b/environments/g4py/tests/gtest01/gun.mac new file mode 100644 index 0000000000..035f4c4c59 --- /dev/null +++ b/environments/g4py/tests/gtest01/gun.mac @@ -0,0 +1,8 @@ +# gun.mac + +/gun/number 1 +/gun/particle e- +/gun/energy 200 MeV +/gun/direction 0.2 0. 1. +/gun/position 0. 0. -14.9 cm + diff --git a/environments/g4py/tests/gtest01/module/CMakeLists.txt b/environments/g4py/tests/gtest01/module/CMakeLists.txt new file mode 100644 index 0000000000..9e6c0d446c --- /dev/null +++ b/environments/g4py/tests/gtest01/module/CMakeLists.txt @@ -0,0 +1,16 @@ +# - build test library + +# library +set(_TARGET gtest01) +g4py_add_module(${_TARGET} + Particles.cc + PhysicsListEMstd.cc + QDetectorConstruction.cc + QEventAction.cc + QMaterials.cc + QPhysicsList.cc + QPrimaryGeneratorAction.cc + gtest01.cc +) +target_link_libraries(${_TARGET} PRIVATE G4particles G4processes G4run) + diff --git a/environments/g4py/tests/gtest01/module/Particles.cc b/environments/g4py/tests/gtest01/module/Particles.cc new file mode 100644 index 0000000000..be72d0f596 --- /dev/null +++ b/environments/g4py/tests/gtest01/module/Particles.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. * +// ******************************************************************** +// +// ==================================================================== +// Particles.cc +// +// Physics list for defining particles +// +// ==================================================================== +#include "Particles.hh" + +#include "G4LeptonConstructor.hh" +#include "G4BosonConstructor.hh" +#include "G4MesonConstructor.hh" +#include "G4BaryonConstructor.hh" +#include "G4ShortLivedConstructor.hh" +#include "G4IonConstructor.hh" + +// ==================================================================== +// +// class description +// +// ==================================================================== + +////////////////////////////////////// +Particles::Particles() + : G4VPhysicsConstructor("Particles") +////////////////////////////////////// +{ +} + + +/////////////////////// +Particles::~Particles() +/////////////////////// +{ +} + + +/////////////////////////////////// +void Particles::ConstructParticle() +/////////////////////////////////// +{ + G4LeptonConstructor::ConstructParticle(); + G4BosonConstructor::ConstructParticle(); + G4MesonConstructor::ConstructParticle(); + G4BaryonConstructor::ConstructParticle(); + G4ShortLivedConstructor::ConstructParticle(); + G4IonConstructor::ConstructParticle(); +} + + +////////////////////////////////// +void Particles::ConstructProcess() +////////////////////////////////// +{ +} + diff --git a/environments/g4py/tests/gtest01/module/Particles.hh b/environments/g4py/tests/gtest01/module/Particles.hh new file mode 100644 index 0000000000..23546113c8 --- /dev/null +++ b/environments/g4py/tests/gtest01/module/Particles.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. * +// ******************************************************************** +// +// ==================================================================== +// Particles.hh +// +// 2004 Q +// ==================================================================== +#ifndef PARTICLES_H +#define PARTICLES_H + +#include "G4VPhysicsConstructor.hh" + +// ==================================================================== +// +// class definition +// +// ==================================================================== + +class Particles : public G4VPhysicsConstructor { + +public: + Particles(); + ~Particles(); + + virtual void ConstructParticle(); + virtual void ConstructProcess(); +}; + +#endif + diff --git a/environments/g4py/tests/gtest01/module/PhysicsListEMstd.cc b/environments/g4py/tests/gtest01/module/PhysicsListEMstd.cc new file mode 100644 index 0000000000..d1a2ac434b --- /dev/null +++ b/environments/g4py/tests/gtest01/module/PhysicsListEMstd.cc @@ -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. * +// ******************************************************************** +// +// ==================================================================== +// PhysicsListEMstd.cc +// +// Physics list for electron/positron/gamma +// EM-standard package w/ default parameters +// +// ==================================================================== +#include "PhysicsListEMstd.hh" + +#include "G4ProcessManager.hh" +#include "G4ParticleDefinition.hh" + +#include "G4Gamma.hh" +#include "G4Electron.hh" +#include "G4Positron.hh" +#include "G4NeutrinoE.hh" +#include "G4AntiNeutrinoE.hh" + +#include "G4ComptonScattering.hh" +#include "G4GammaConversion.hh" +#include "G4PhotoElectricEffect.hh" +#include "G4eMultipleScattering.hh" +#include "G4eIonisation.hh" +#include "G4eBremsstrahlung.hh" +#include "G4eplusAnnihilation.hh" + +// ==================================================================== +// +// class description +// +// ==================================================================== + +//////////////////////////////////// +PhysicsListEMstd::PhysicsListEMstd() + : G4VPhysicsConstructor("EM-std") +//////////////////////////////////// +{ +} + + +///////////////////////////////////// +PhysicsListEMstd::~PhysicsListEMstd() +///////////////////////////////////// +{ +} + + +////////////////////////////////////////// +void PhysicsListEMstd::ConstructParticle() +////////////////////////////////////////// +{ +} + + +///////////////////////////////////////// +void PhysicsListEMstd::ConstructProcess() +///////////////////////////////////////// +{ + G4ProcessManager* pm; + + // ---------------------------------------------------------- + // gamma physics + // ---------------------------------------------------------- + pm= G4Gamma::Gamma()-> GetProcessManager(); + pm-> AddDiscreteProcess(new G4PhotoElectricEffect); + pm-> AddDiscreteProcess(new G4ComptonScattering); + pm-> AddDiscreteProcess(new G4GammaConversion); + + // ---------------------------------------------------------- + // electron physics + // ---------------------------------------------------------- + G4eMultipleScattering* msc= new G4eMultipleScattering; + G4eIonisation* eion= new G4eIonisation; + G4eBremsstrahlung* ebrems= new G4eBremsstrahlung; + + pm= G4Electron::Electron()->GetProcessManager(); + pm-> AddProcess(msc, ordInActive, 1, 1); + pm-> AddProcess(eion, ordInActive, 2, 2); + pm-> AddProcess(ebrems, ordInActive, ordInActive, 3); + + // ---------------------------------------------------------- + // positron physics + // ---------------------------------------------------------- + msc= new G4eMultipleScattering; + eion= new G4eIonisation; + ebrems= new G4eBremsstrahlung; + G4eplusAnnihilation* annihilation= new G4eplusAnnihilation; + + pm= G4Positron::Positron()-> GetProcessManager(); + pm-> AddProcess(msc, ordInActive, 1, 1); + pm-> AddProcess(eion, ordInActive, 2, 2); + pm-> AddProcess(ebrems, ordInActive, ordInActive, 3); + pm-> AddProcess(annihilation, 0, ordInActive, 4); + +} + diff --git a/environments/g4py/tests/gtest01/module/PhysicsListEMstd.hh b/environments/g4py/tests/gtest01/module/PhysicsListEMstd.hh new file mode 100644 index 0000000000..deacfb9997 --- /dev/null +++ b/environments/g4py/tests/gtest01/module/PhysicsListEMstd.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. * +// ******************************************************************** +// +// ==================================================================== +// PhysicsListEMstd.hh +// +// 2004 Q +// ==================================================================== +#ifndef PHYSICS_LIST_EM_STD_H +#define PHYSICS_LIST_EM_STD_H + +#include "G4VPhysicsConstructor.hh" + +// ==================================================================== +// +// class definition +// +// ==================================================================== + +class PhysicsListEMstd : public G4VPhysicsConstructor { + +public: + PhysicsListEMstd(); + ~PhysicsListEMstd(); + + virtual void ConstructParticle(); + virtual void ConstructProcess(); +}; + +#endif + diff --git a/environments/g4py/tests/gtest01/module/QDetectorConstruction.cc b/environments/g4py/tests/gtest01/module/QDetectorConstruction.cc new file mode 100644 index 0000000000..3863c82ecf --- /dev/null +++ b/environments/g4py/tests/gtest01/module/QDetectorConstruction.cc @@ -0,0 +1,144 @@ +// +// ******************************************************************** +// * 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. * +// ******************************************************************** +// +// ==================================================================== +// QDetectorConstruction.cc +// +// 2005 Q +// ==================================================================== +#include "QDetectorConstruction.hh" + +#include "G4Material.hh" +#include "G4Tubs.hh" +#include "G4Box.hh" +#include "G4LogicalVolume.hh" +#include "G4PVPlacement.hh" +#include "G4VisAttributes.hh" +#include "G4SystemOfUnits.hh" + +// ==================================================================== +// +// class description +// +// ==================================================================== + +// constants (detector parameters) +static const G4double DXYZ_AREA= 30.*cm; + +////////////////////////////////////////////// +QDetectorConstruction::QDetectorConstruction() +////////////////////////////////////////////// +{ +} + +/////////////////////////////////////////////// +QDetectorConstruction::~QDetectorConstruction() +/////////////////////////////////////////////// +{ +} + +///////////////////////////////////////////////////// +G4VPhysicalVolume* QDetectorConstruction::Construct() +///////////////////////////////////////////////////// +{ + G4Material* mate; + G4VisAttributes* va; + + // ============================================================== + // world volume + // ============================================================== + G4Box* areaSolid= new G4Box("AREA", + DXYZ_AREA/2., DXYZ_AREA/2., DXYZ_AREA/2.); + + G4Material* vacuum= G4Material::GetMaterial("Vacuum"); + G4LogicalVolume* areaLV= new G4LogicalVolume(areaSolid, vacuum, "AREA_LV"); + G4PVPlacement* area= new G4PVPlacement(0, G4ThreeVector(), "AREA_PV", + areaLV, 0, false, 0); + // vis. attributes + va= new G4VisAttributes(G4Color(1.,1.,1.)); + va-> SetForceWireframe(true); + areaLV-> SetVisAttributes(va); + + // ============================================================== + // detectors + // ============================================================== + // voxel + const G4double dvoxel= 10.*mm; + const G4double dl= 10.*cm; + + G4Box* svoxel= new G4Box("voxel", dvoxel, dl, dvoxel); + mate= G4Material::GetMaterial("Vacuum"); + G4LogicalVolume* lvoxel= new G4LogicalVolume(svoxel, mate, "voxel"); + va= new G4VisAttributes(G4Color(0.,0.8,0.8)); + va-> SetVisibility(false); + lvoxel-> SetVisAttributes(va); + + G4int ix, iz; + G4int index=0; + for (iz=0; iz<5; iz++) { + for (ix=-7; ix<=7; ix++) { + G4double x0= (2.*ix)*cm; + G4double z0= (-13.+2.*iz)*cm; + /*G4PVPlacement* pvoxel=*/ new G4PVPlacement(0, G4ThreeVector(x0, 0., z0), + lvoxel, "voxel", areaLV, false, index); + index++; + } + } + + // tube + //G4Tubs* stube= new G4Tubs("tube", 15./2.*mm, 19./2.*mm, dl, + G4Tubs* stube= new G4Tubs("tube", 0.*mm, 19./2.*mm, dl, + 0., 360.*deg); + mate= G4Material::GetMaterial("Al"); + G4LogicalVolume* ltube= new G4LogicalVolume(stube, mate, "tube"); + va= new G4VisAttributes(G4Color(0.,0.8,0.8)); + ltube-> SetVisAttributes(va); + + G4RotationMatrix* rmtube= new G4RotationMatrix; + rmtube-> rotateX(-90.*deg); + /*G4PVPlacement* ptube=*/ new G4PVPlacement(rmtube, G4ThreeVector(), + ltube, "tube", lvoxel, false, 0); + + // cal + const G4double dxycal= 25.*mm; + const G4double dzcal= 3.*cm; + + G4Box* scal= new G4Box("cal", dxycal, dxycal, dzcal); + mate= G4Material::GetMaterial("CsI"); + G4LogicalVolume* lcal= new G4LogicalVolume(scal, mate, "cal"); + va= new G4VisAttributes(G4Color(0.5,0.5,0.)); + lcal-> SetVisAttributes(va); + + index= 0; + for (ix=-2; ix<=2; ix++) { + G4double x0= (5.*ix)*cm; + /*G4PVPlacement* pcal=*/ new G4PVPlacement(0, G4ThreeVector(x0, 0., 2.*cm), + lcal, "cal", areaLV, false, index); + index++; + } + + return area; +} + diff --git a/environments/g4py/tests/gtest01/module/QDetectorConstruction.hh b/environments/g4py/tests/gtest01/module/QDetectorConstruction.hh new file mode 100644 index 0000000000..5b392c7da9 --- /dev/null +++ b/environments/g4py/tests/gtest01/module/QDetectorConstruction.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. * +// ******************************************************************** +// +// ==================================================================== +// QDetectorConstruction.hh +// +// 2005 Q +// ==================================================================== +#ifndef Q_DETECTOR_CONSTRUCTION_H +#define Q_DETECTOR_CONSTRUCTION_H + +#include "G4VUserDetectorConstruction.hh" + +// ==================================================================== +// +// class definition +// +// ==================================================================== + +class QDetectorConstruction : public G4VUserDetectorConstruction { + +public: + QDetectorConstruction(); + ~QDetectorConstruction(); + + virtual G4VPhysicalVolume* Construct(); + +}; + +#endif diff --git a/environments/g4py/tests/gtest01/module/QEventAction.cc b/environments/g4py/tests/gtest01/module/QEventAction.cc new file mode 100644 index 0000000000..b26aa86379 --- /dev/null +++ b/environments/g4py/tests/gtest01/module/QEventAction.cc @@ -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. * +// ******************************************************************** +// +// ==================================================================== +// QEventAction.cc +// +// 2005 Q +// ==================================================================== +#include "QEventAction.hh" +#include "globals.hh" + +// ==================================================================== +// +// class description +// +// ==================================================================== + +//////////////////////////// +QEventAction::QEventAction() +//////////////////////////// +{ +} + + +///////////////////////////// +QEventAction::~QEventAction() +///////////////////////////// +{ +} + + +//////////////////////////////////////////////////////////// +void QEventAction::BeginOfEventAction(const G4Event* /*aevent*/) +//////////////////////////////////////////////////////////// +{ + G4cout << "QEventAction::BofEA is called." << G4endl; +} + + +////////////////////////////////////////////////////////// +void QEventAction::EndOfEventAction(const G4Event* /*aevent*/) +////////////////////////////////////////////////////////// +{ + G4cout << "QEventAction::EofEA is called." << G4endl; +} + diff --git a/environments/g4py/tests/gtest01/module/QEventAction.hh b/environments/g4py/tests/gtest01/module/QEventAction.hh new file mode 100644 index 0000000000..51359111c9 --- /dev/null +++ b/environments/g4py/tests/gtest01/module/QEventAction.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. * +// ******************************************************************** +// +// ==================================================================== +// QEventAction.hh +// +// 2005 Q +// ==================================================================== +#ifndef Q_EVENT_ACTION_H +#define Q_EVENT_ACTION_H + +#include "G4UserEventAction.hh" + +// ==================================================================== +// +// class definition +// +// ==================================================================== + +class QEventAction : public G4UserEventAction { +public: + QEventAction(); + ~QEventAction(); + + virtual void BeginOfEventAction(const G4Event* aevent); + virtual void EndOfEventAction(const G4Event* aevent); + +}; + +#endif diff --git a/environments/g4py/tests/gtest01/module/QMaterials.cc b/environments/g4py/tests/gtest01/module/QMaterials.cc new file mode 100644 index 0000000000..a62e45314c --- /dev/null +++ b/environments/g4py/tests/gtest01/module/QMaterials.cc @@ -0,0 +1,163 @@ +// +// ******************************************************************** +// * 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. * +// ******************************************************************** +// +// ==================================================================== +// QMaterials.cc +// +// 2005 Q +// ==================================================================== +#include "QMaterials.hh" +#include "G4Material.hh" +#include "G4SystemOfUnits.hh" +#include "G4PhysicalConstants.hh" + +// ==================================================================== +// +// class description +// +// ==================================================================== + +//////////////////////// +QMaterials::QMaterials() +//////////////////////// +{ +} + + +///////////////////////// +QMaterials::~QMaterials() +///////////////////////// +{ +} + + +//////////////////////////// +void QMaterials::Construct() +//////////////////////////// +{ + G4double A, Z; + + // ------------------------------------------------------------------------ + // Elements + // ------------------------------------------------------------------------ + G4Element* elH = new G4Element("Hydrogen","H", Z=1., A=1.00794*g/mole); + G4Element* elC = new G4Element("Carbon", "C", Z=6., A= 12.011 *g/mole); + G4Element* elN = new G4Element("Nitrogen","N", Z=7., A= 14.00674*g/mole); + G4Element* elO = new G4Element("Oxygen", "O", Z=8., A= 15.9994*g/mole); + G4Element* elNa = new G4Element("Sodium", "Na", Z=11., A= 22.989768*g/mole); + G4Element* elSi = new G4Element("Silicon", "Si", Z=14., A= 28.0855*g/mole); + G4Element* elAr = new G4Element("Argon", "Ar", Z=18., A= 39.948*g/mole); + G4Element* elI = new G4Element("Iodine", "I", Z=53., A= 126.90447*g/mole); + G4Element* elCs = new G4Element("Cesium", "Cs", Z=55., A= 132.90543*g/mole); + + // ------------------------------------------------------------------------ + // Materials + // ------------------------------------------------------------------------ + G4double density, massfraction; + G4int natoms, nel; + + // temperature of experimental hall is controlled at 20 degree. + const G4double expTemp= STP_Temperature+20.*kelvin; + + // vacuum + density= universe_mean_density; + G4Material* Vacuum= new G4Material("Vacuum", density, nel=2); + Vacuum-> AddElement(elN, .7); + Vacuum-> AddElement(elO, .3); + + // air + density= 1.2929e-03 *g/cm3; // at 20 degree + G4Material* Air= new G4Material("Air", density, nel=3, + kStateGas, expTemp); + G4double ttt= 75.47+23.20+1.28; + Air-> AddElement(elN, massfraction= 75.47/ttt); + Air-> AddElement(elO, massfraction= 23.20/ttt); + Air-> AddElement(elAr, massfraction= 1.28/ttt); + + // Ar gas + A= 39.948 *g/mole; + const G4double denAr= 1.782e-03 *g/cm3 * STP_Temperature/expTemp; + G4Material* Ar= new G4Material("ArgonGas", Z=18., A, denAr, + kStateGas, expTemp); + + // ethane (C2H6) + const G4double denEthane= 1.356e-3 *g/cm3 * STP_Temperature/expTemp; + G4Material* Ethane= new G4Material("Ethane", denEthane, nel=2, + kStateGas, expTemp); + Ethane-> AddElement(elC, natoms=2); + Ethane-> AddElement(elH, natoms=6); + + // Ar(50%) + ethane(50%) mixture + density= (denAr+denEthane)/2.; + G4Material* ArEthane= new G4Material("ArEthane", density, nel=2, + kStateGas, expTemp); + ArEthane-> AddMaterial(Ar, massfraction= denAr/density/2.); + ArEthane-> AddMaterial(Ethane, massfraction= denEthane/density/2.); + + // silicon + A= 28.0855 *g/mole; + density= 2.33 *g/cm3; + /*G4Material* Si=*/ new G4Material("SiliconWafer", Z=14., A, density); + + // alminium + A= 26.98 *g/mole; + density= 2.70 *g/cm3; + /*G4Material* Al=*/ new G4Material("Al", Z=13., A, density); + + // iron + A= 55.847 *g/mole; + density= 7.87 *g/cm3; + /*G4Material* Fe=*/ new G4Material("Iron", Z=26., A, density); + + // lead + A= 207.2 *g/mole; + density= 11.35 *g/cm3; + /*G4Material* Pb=*/ new G4Material("Lead", Z=82., A, density); + + // scintillator (Polystyene(C6H5CH=CH2)) + density= 1.032 *g/cm3; + G4Material* Scinti= new G4Material("Scinti", density, nel=2); + Scinti-> AddElement(elC, natoms=8); + Scinti-> AddElement(elH, natoms=8); + + // quartz (SiO2, crystalline) + density= 2.64 *g/cm3; + G4Material* Quartz= new G4Material("Quartz", density, nel= 2); + Quartz-> AddElement(elSi, natoms=1); + Quartz-> AddElement(elO, natoms=2); + + // NaI crystal + density= 3.67 *g/cm3; + G4Material* NaI= new G4Material("NaI", density, nel= 2); + NaI-> AddElement(elNa, natoms=1); + NaI-> AddElement(elI, natoms=1); + + // CsI crystal + density= 4.51 *g/cm3; + G4Material* CsI= new G4Material("CsI", density, nel= 2); + CsI-> AddElement(elCs, natoms=1); + CsI-> AddElement(elI, natoms=1); + +} diff --git a/environments/g4py/tests/gtest01/module/QMaterials.hh b/environments/g4py/tests/gtest01/module/QMaterials.hh new file mode 100644 index 0000000000..8d9dab8996 --- /dev/null +++ b/environments/g4py/tests/gtest01/module/QMaterials.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. * +// ******************************************************************** +// +// ==================================================================== +// QMaterials.hh +// +// 2005 Q +// ==================================================================== +#ifndef Q_MATERIALS_H +#define Q_MATERIALS_H + +#include "globals.hh" + +// ==================================================================== +// +// class definition +// +// ==================================================================== +class QMaterials { +public: + QMaterials(); + ~QMaterials(); + + void Construct(); +}; + +#endif + diff --git a/environments/g4py/tests/gtest01/module/QPhysicsList.cc b/environments/g4py/tests/gtest01/module/QPhysicsList.cc new file mode 100644 index 0000000000..4988eb5dfd --- /dev/null +++ b/environments/g4py/tests/gtest01/module/QPhysicsList.cc @@ -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. * +// ******************************************************************** +// +// ==================================================================== +// QPhysicsList.cc +// +// 2005 Q +// ==================================================================== +#include "QPhysicsList.hh" +#include "Particles.hh" +#include "PhysicsListEMstd.hh" +#include "G4SystemOfUnits.hh" + +// ==================================================================== +// +// class description +// +// ==================================================================== + +//////////////////////////// +QPhysicsList::QPhysicsList() + : G4VModularPhysicsList() +//////////////////////////// +{ + // default cut value (1.0mm) + defaultCutValue = 1.*mm; + SetVerboseLevel(1); + + // particles + RegisterPhysics(new Particles); + + // EM Physics + RegisterPhysics(new PhysicsListEMstd); +} + +///////////////////////////// +QPhysicsList::~QPhysicsList() +///////////////////////////// +{ +} + +//////////////////////////// +void QPhysicsList::SetCuts() +//////////////////////////// +{ + // " G4VUserPhysicsList::SetCutsWithDefault" method sets + // the default cut value for all particle types + SetCutsWithDefault(); +} + diff --git a/environments/g4py/tests/gtest01/module/QPhysicsList.hh b/environments/g4py/tests/gtest01/module/QPhysicsList.hh new file mode 100644 index 0000000000..cb2e344687 --- /dev/null +++ b/environments/g4py/tests/gtest01/module/QPhysicsList.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. * +// ******************************************************************** +// +// ==================================================================== +// QPhysicsList.hh +// +// 2005 Q +// ==================================================================== +#ifndef Q_PHYSICS_LIST_H +#define Q_PHYSICS_LIST_H + +#include "G4VModularPhysicsList.hh" +#include "globals.hh" + +// ==================================================================== +// +// class definition +// +// ==================================================================== + +class QPhysicsList: public G4VModularPhysicsList { +public: + QPhysicsList(); + ~QPhysicsList(); + + virtual void SetCuts(); +}; + +#endif diff --git a/environments/g4py/tests/gtest01/module/QPrimaryGeneratorAction.cc b/environments/g4py/tests/gtest01/module/QPrimaryGeneratorAction.cc new file mode 100644 index 0000000000..fb7702db82 --- /dev/null +++ b/environments/g4py/tests/gtest01/module/QPrimaryGeneratorAction.cc @@ -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. * +// ******************************************************************** +// +// ==================================================================== +// QPrimaryGeneratorAction.cc +// +// 2005 Q +// ==================================================================== +#include "QPrimaryGeneratorAction.hh" +#include "G4ParticleGun.hh" + +// ==================================================================== +// +// class description +// +// ==================================================================== + +////////////////////////////////////////////////// +QPrimaryGeneratorAction::QPrimaryGeneratorAction() +////////////////////////////////////////////////// +{ + particleGun= new G4ParticleGun; +} + +/////////////////////////////////////////////////// +QPrimaryGeneratorAction::~QPrimaryGeneratorAction() +/////////////////////////////////////////////////// +{ + delete particleGun; +} + +///////////////////////////////////////////////////////////////// +void QPrimaryGeneratorAction::GeneratePrimaries(G4Event* anEvent) +///////////////////////////////////////////////////////////////// +{ + particleGun-> GeneratePrimaryVertex(anEvent); +} + diff --git a/environments/g4py/tests/gtest01/module/QPrimaryGeneratorAction.hh b/environments/g4py/tests/gtest01/module/QPrimaryGeneratorAction.hh new file mode 100644 index 0000000000..cefc3d33aa --- /dev/null +++ b/environments/g4py/tests/gtest01/module/QPrimaryGeneratorAction.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. * +// ******************************************************************** +// +// ==================================================================== +// QPrimaryGeneratorAction.hh +// +// 2005 Q +// ==================================================================== +#ifndef Q_PRIMARY_GENERATOR_ACTION_H +#define Q_PRIMARY_GENERATOR_ACTION_H + +#include "G4VUserPrimaryGeneratorAction.hh" + +class G4ParticleGun; + +// ==================================================================== +// +// class definition +// +// ==================================================================== +class QPrimaryGeneratorAction : public G4VUserPrimaryGeneratorAction { +private: + // use G4 particle gun + G4ParticleGun* particleGun; + +public: + QPrimaryGeneratorAction(); + ~QPrimaryGeneratorAction(); + + G4ParticleGun* GetParticleGun() const; + + virtual void GeneratePrimaries(G4Event* anEvent); +}; + +// ==================================================================== +// inline functions +// ==================================================================== +inline G4ParticleGun* QPrimaryGeneratorAction::GetParticleGun() const +{ return particleGun; } + +#endif diff --git a/environments/g4py/tests/gtest01/module/gtest01.cc b/environments/g4py/tests/gtest01/module/gtest01.cc new file mode 100644 index 0000000000..44dc1347e4 --- /dev/null +++ b/environments/g4py/tests/gtest01/module/gtest01.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. * +// ******************************************************************** +// +// ==================================================================== +// gtest01.cc +// +// python wrapper for user application +// 2005 Q +// ==================================================================== +#include +#include "QMaterials.hh" +#include "QDetectorConstruction.hh" +#include "QPhysicsList.hh" +#include "QPrimaryGeneratorAction.hh" +#include "G4ParticleGun.hh" +#include "QEventAction.hh" + +using namespace boost::python; + +// ==================================================================== +// Expose to Python +// ==================================================================== + +BOOST_PYTHON_MODULE(gtest01) { + class_("QMaterials", "my material") + .def("Construct", &QMaterials::Construct) + ; + + class_ > + ("QDetectorConstruction", "my detector") + ; + + class_ > + ("QPhysicsList", "my physics list") + ; + + class_ > + ("QPrimaryGeneratorAction", "my primary generator action") + .def("GetParticleGun", &QPrimaryGeneratorAction::GetParticleGun, + return_internal_reference<>()) + ; + + class_ > + ("QEventAction", "my event action") + ; +} + diff --git a/environments/g4py/tests/gtest01/root_test.py b/environments/g4py/tests/gtest01/root_test.py new file mode 100755 index 0000000000..091ca04fa6 --- /dev/null +++ b/environments/g4py/tests/gtest01/root_test.py @@ -0,0 +1,143 @@ +#!/usr/bin/python +# ================================================================== +# python script for Geant4Py test +# +# gtest01 +# - check basic control flow +# ================================================================== +from Geant4 import * +import gtest01 +import ROOT + +# ================================================================== +# ROOT PART # +# ================================================================== + +# ------------------------------------------------------------------ +def init_root(): +# ------------------------------------------------------------------ + ROOT.gROOT.Reset() + + # plot style + ROOT.gStyle.SetTextFont(82) + ROOT.gStyle.SetTitleFont(82, "X") + ROOT.gStyle.SetLabelFont(82, "X") + ROOT.gStyle.SetTitleFont(82, "Y") + ROOT.gStyle.SetLabelFont(82, "Y") + + #ROOT.gStyle.SetOptTitle(0) + ROOT.gStyle.SetErrorX(0) + + canvas= ROOT.TCanvas("g4py_plots", + "Geant4Py Sample Plots", + 620, 30, 600, 400) + + #canvas.Divide(2,2); + #canvas.SetFillColor(29) + + canvas.SetGrid() + + return canvas + +# ------------------------------------------------------------------ +def hini(): +# ------------------------------------------------------------------ + global hist1 + hist1= ROOT.TH1D("dE/dx/step", "dE/dx", 100, 0., 2000.) + hist1.SetXTitle("(keV)") + + +# ------------------------------------------------------------------ +def hshow(): +# ------------------------------------------------------------------ + hist1.Draw() + +# ================================================================== +# Geant4 PART # +# ================================================================== + +# ================================================================== +# user actions in python +# ================================================================== +class MyPrimaryGeneratorAction(G4VUserPrimaryGeneratorAction): + "My Primary Generator Action" + + def __init__(self): + G4VUserPrimaryGeneratorAction.__init__(self) + self.particleGun= G4ParticleGun(1) + + def GeneratePrimaries(self, event): + self.particleGun.GeneratePrimaryVertex(event) + +# ------------------------------------------------------------------ +class MyRunAction(G4UserRunAction): + "My Run Action" + + def BeginOfRunAction(self, run): + print "*** #event to be processed (BRA)=", + run.numberOfEventToBeProcessed + + def EndOfRunAction(self, run): + print "*** run end run(ERA)=", run.runID + +# ------------------------------------------------------------------ +class MyEventAction(G4UserEventAction): + "My Event Action" + + def BeginOfEventAction(self, event): + print "*** current event (BEA)=", event.eventID + + def EndOfEventAction(self, event): + print "*** current event (EEA)=", event.eventID + +# ------------------------------------------------------------------ +class MySteppingAction(G4UserSteppingAction): + "My Stepping Action" + + def UserSteppingAction(self, step): + #print "*** dE/dx in current step=", step.GetTotalEnergyDeposit() + dedx= step.GetTotalEnergyDeposit() + if(dedx>0): + hist1.Fill(dedx/HEPUnit.keV) + +# ================================================================== +# main +# ================================================================== +g4pyCanvas= init_root() +hini() + +app= gtest01.MyApplication() +app.Configure() + +# set user actions... +myPGA= MyPrimaryGeneratorAction() +gRunManager.SetUserAction(myPGA) + +myRA= MyRunAction() +gRunManager.SetUserAction(myRA) + +#myEA= MyEventAction() +#gRunManager.SetUserAction(myEA) + +mySA= MySteppingAction() +gRunManager.SetUserAction(mySA) + + +# set particle gun +#ApplyUICommand("/control/execute gun.mac") +pg= myPGA.particleGun +pg.SetParticleByName("e-") +pg.SetParticleEnergy(200.*HEPUnit.MeV) +pg.SetParticleMomentumDirection(G4ThreeVector(0.2, 0., 1.)) +pg.SetParticlePosition(G4ThreeVector(0.,0.,-14.9)*HEPUnit.cm) + +# visualization +ApplyUICommand("/control/execute vis.mac") + +# beamOn +gRunManager.BeamOn(1000) + +# +hshow() + + diff --git a/environments/g4py/tests/gtest01/run.py b/environments/g4py/tests/gtest01/run.py new file mode 100755 index 0000000000..c254071d6f --- /dev/null +++ b/environments/g4py/tests/gtest01/run.py @@ -0,0 +1,123 @@ +#!/usr/bin/python +# ================================================================== +# python script for Geant4Py test +# +# gtest01 +# - check basic control flow +# ================================================================== +from Geant4 import * +import gtest01 +import random +#import thread + +# ================================================================== +# user actions in python +# ================================================================== +class MyPrimaryGeneratorAction(G4VUserPrimaryGeneratorAction): + "My Primary Generator Action" + + def __init__(self): + G4VUserPrimaryGeneratorAction.__init__(self) + self.particleGun= G4ParticleGun(1) + + def GeneratePrimaries(self, event): + #dx= random.gauss(0., 0.1) + dx=0. + self.particleGun.SetParticleMomentumDirection(G4ThreeVector(dx, 0., 1.)) + self.particleGun.GeneratePrimaryVertex(event) + +# ------------------------------------------------------------------ +class MyRunAction(G4UserRunAction): + "My Run Action" + + def BeginOfRunAction(self, run): + print "*** #event to be processed (BRA)=", + run.GetNumberOfEventToBeProcessed() + + def EndOfRunAction(self, run): + print "*** run end run(ERA)=", run.GetRunID() + +# ------------------------------------------------------------------ +class MyEventAction(G4UserEventAction): + "My Event Action" + + #def BeginOfEventAction(self, event): + #print "*** current event (BEA)=", event.GetEventID() + # pass + + #def EndOfEventAction(self, event): + # print "*** current event (EEA)=", event.GetEventID() + +# ------------------------------------------------------------------ +class MySteppingAction(G4UserSteppingAction): + "My Stepping Action" + + def UserSteppingAction(self, step): + #print "*** dE/dx in current step=", step.GetTotalEnergyDeposit() + track= step.GetTrack() + touchable= track.GetTouchable() + pv= touchable.GetVolume() + #print pv.GetCopyNo() + #print touchable.GetReplicaNumber(0) + +# ------------------------------------------------------------------ +class MyField(G4MagneticField): + "My Magnetic Field" + + def GetFieldValue(self, pos, time): + bfield= G4ThreeVector() + bfield.x= 0. + bfield.y= 5.*tesla + bfield.z= 0. + return bfield + +# ================================================================== +# main +# ================================================================== +qMaterials= gtest01.QMaterials() +qMaterials.Construct() + +qDC= gtest01.QDetectorConstruction() +gRunManager.SetUserInitialization(qDC) + +qPL= gtest01.QPhysicsList() +gRunManager.SetUserInitialization(qPL) + +# set user actions... +#qPGA= gtest01.QPrimaryGeneratorAction() +myPGA= MyPrimaryGeneratorAction() +gRunManager.SetUserAction(myPGA) + +#myRA= MyRunAction() +#gRunManager.SetUserAction(myRA) + +myEA= MyEventAction() +gRunManager.SetUserAction(myEA) + +mySA= MySteppingAction() +gRunManager.SetUserAction(mySA) + +# set particle gun +#ApplyUICommand("/control/execute gun.mac") +#pg= qPGA.GetParticleGun() +pg= myPGA.particleGun +pg.SetParticleByName("e-") +pg.SetParticleEnergy(200.*MeV) +pg.SetParticlePosition(G4ThreeVector(0.,0.,-14.9)*cm) + +# magnetic field +fieldMgr= gTransportationManager.GetFieldManager() +myField= G4UniformMagField(G4ThreeVector(0.,10.*tesla,0.)) +#myField= MyField() +fieldMgr.SetDetectorField(myField) +fieldMgr.CreateChordFinder(myField) + +gRunManager.Initialize() + +# visualization +gControlExecute("vis.mac") + +# beamOn +gRunManager.BeamOn(10) +#thread.start_new_thread(gRunManager.BeamOn, (100000)) + diff --git a/environments/g4py/tests/gtest01/test.py b/environments/g4py/tests/gtest01/test.py new file mode 100755 index 0000000000..5ce0964dd8 --- /dev/null +++ b/environments/g4py/tests/gtest01/test.py @@ -0,0 +1,118 @@ +#!/usr/bin/python3 +# ================================================================== +# python script for Geant4Py test +# +# gtest01 +# - check basic control flow +# ================================================================== +from Geant4 import * +import gtest01 +import random + +# ================================================================== +# user actions in python +# ================================================================== +class MyPrimaryGeneratorAction(G4VUserPrimaryGeneratorAction): + "My Primary Generator Action" + + def __init__(self): + G4VUserPrimaryGeneratorAction.__init__(self) + self.particleGun= G4ParticleGun(1) + + def GeneratePrimaries(self, event): + #dx= random.gauss(0., 0.1) + dx=0. + self.particleGun.SetParticleMomentumDirection(G4ThreeVector(dx, 0., 1.)) + self.particleGun.GeneratePrimaryVertex(event) + +# ------------------------------------------------------------------ +class MyRunAction(G4UserRunAction): + "My Run Action" + + def BeginOfRunAction(self, run): + print("*** #event to be processed (BRA)=", + run.GetNumberOfEventToBeProcessed()) + + def EndOfRunAction(self, run): + print("*** run end run(ERA)=", run.GetRunID()) + +# ------------------------------------------------------------------ +class MyEventAction(G4UserEventAction): + "My Event Action" + + #def BeginOfEventAction(self, event): + #print("*** current event (BEA)=", event.GetEventID()) + # pass + + #def EndOfEventAction(self, event): + #print("*** current event (EEA)=", event.GetEventID()) + +# ------------------------------------------------------------------ +class MySteppingAction(G4UserSteppingAction): + "My Stepping Action" + + def UserSteppingAction(self, step): + #print("*** dE/dx in current step=", step.GetTotalEnergyDeposit()) + track= step.GetTrack() + touchable= track.GetTouchable() + pv= touchable.GetVolume() + #print(pv.GetCopyNo()) + #print(touchable.GetReplicaNumber(0)) + +# ------------------------------------------------------------------ +class MyField(G4MagneticField): + "My Magnetic Field" + + def GetFieldValue(self, pos, time): + bfield= G4ThreeVector() + bfield.x= 0. + bfield.y= 5.*tesla + bfield.z= 0. + return bfield + +# ================================================================== +# main +# ================================================================== +qMaterials= gtest01.QMaterials() +qMaterials.Construct() + +qDC= gtest01.QDetectorConstruction() +gRunManager.SetUserInitialization(qDC) + +qPL= gtest01.QPhysicsList() +gRunManager.SetUserInitialization(qPL) + +# set user actions... +#qPGA= gtest01.QPrimaryGeneratorAction() +myPGA= MyPrimaryGeneratorAction() +gRunManager.SetUserAction(myPGA) + +#myRA= MyRunAction() +#gRunManager.SetUserAction(myRA) + +myEA= MyEventAction() +gRunManager.SetUserAction(myEA) + +mySA= MySteppingAction() +gRunManager.SetUserAction(mySA) + +# set particle gun +#ApplyUICommand("/control/execute gun.mac") +#pg= qPGA.GetParticleGun() +pg= myPGA.particleGun +pg.SetParticleByName("e-") +pg.SetParticleEnergy(200.*MeV) +pg.SetParticlePosition(G4ThreeVector(0.,0.,-14.9)*cm) + +# magnetic field +fieldMgr= gTransportationManager.GetFieldManager() +myField= G4UniformMagField(G4ThreeVector(0.,10.*tesla,0.)) +#myField= MyField() +fieldMgr.SetDetectorField(myField) +fieldMgr.CreateChordFinder(myField) + +gRunManager.Initialize() + +# beamOn +gRunManager.BeamOn(10) +gTerminate() diff --git a/environments/g4py/tests/gtest01/vis.mac b/environments/g4py/tests/gtest01/vis.mac new file mode 100644 index 0000000000..4563dbe1f4 --- /dev/null +++ b/environments/g4py/tests/gtest01/vis.mac @@ -0,0 +1,16 @@ +# vis.mac + +/vis/open OGLSX + +/vis/scene/create +/vis/scene/add/volume +#/vis/scene/add/volume cal 3 + +/vis/sceneHandler/attach + +/vis/viewer/set/viewpointThetaPhi 90. -90. + +/tracking/storeTrajectory 1 +/vis/scene/add/trajectories +/vis/scene/endOfEventAction accumulate + diff --git a/environments/g4py/tests/gtest01/vrml.mac b/environments/g4py/tests/gtest01/vrml.mac new file mode 100644 index 0000000000..8494e3fe6d --- /dev/null +++ b/environments/g4py/tests/gtest01/vrml.mac @@ -0,0 +1,11 @@ +/vis/scene/create +/vis/scene/add/volume + +/vis/sceneHandler/create VRML2FILE + +/vis/viewer/create + +/tracking/storeTrajectory 1 +/vis/scene/add/trajectories +/vis/scene/endOfEventAction accumulate + diff --git a/environments/g4py/tests/gtest02/CMakeLists.txt b/environments/g4py/tests/gtest02/CMakeLists.txt new file mode 100644 index 0000000000..364712d62c --- /dev/null +++ b/environments/g4py/tests/gtest02/CMakeLists.txt @@ -0,0 +1,3 @@ +configure_file(test.py test.py) +add_test(NAME geant4py-test02 COMMAND ${PYTHON_EXECUTABLE} test.py) +set_tests_properties(geant4py-test02 PROPERTIES ENVIRONMENT "PYTHONPATH=${GEANT4_PYTHON_OUTPUT_DIR};${GEANT4_TEST_ENVIRONMENT}") diff --git a/environments/g4py/tests/gtest02/gun.mac b/environments/g4py/tests/gtest02/gun.mac new file mode 100644 index 0000000000..035f4c4c59 --- /dev/null +++ b/environments/g4py/tests/gtest02/gun.mac @@ -0,0 +1,8 @@ +# gun.mac + +/gun/number 1 +/gun/particle e- +/gun/energy 200 MeV +/gun/direction 0.2 0. 1. +/gun/position 0. 0. -14.9 cm + diff --git a/environments/g4py/tests/gtest02/run.py b/environments/g4py/tests/gtest02/run.py new file mode 100755 index 0000000000..0e9b0eef36 --- /dev/null +++ b/environments/g4py/tests/gtest02/run.py @@ -0,0 +1,133 @@ +#!/usr/bin/python +# ================================================================== +# python script for Geant4Py test +# +# gtest02 +# - test for using site-module packages +# ================================================================== +from Geant4 import * +import g4py.Qmaterials, g4py.NISTmaterials +import g4py.Qgeom, g4py.ExN01geom, g4py.ExN03geom +import g4py.ExN01pl, g4py.EMSTDpl +import g4py.ParticleGun, g4py.MedicalBeam + +# ================================================================== +# user setup +# ================================================================== + +# ------------------------------------------------------------------ +# Setup-0 (Q) +# ------------------------------------------------------------------ +def Setup0(): + # simple materials for Qgeom + g4py.Qmaterials.Construct() + + # NIST materials + #g4py.NISTmaterials.Construct() + + # normal way for constructing user geometry + #qDC= g4py.Qgeom.QDetectorConstruction() + #gRunManager.SetUserInitialization(qDC) + + # 2nd way, short-cut way + g4py.Qgeom.Construct() + + # primary + global primary_position, primary_direction + primary_position= G4ThreeVector(0.,0., -14.9*cm) + primary_direction= G4ThreeVector(0.2, 0., 1.) + + +# ------------------------------------------------------------------ +# Setup-1 (ExampleN01) +# ------------------------------------------------------------------ +def Setup1(): + g4py.ExN01geom.Construct() + + global primary_position, primary_direction + primary_position= G4ThreeVector(-2.5*m, 0., 0.) + primary_direction= G4ThreeVector(1., 0., 0.) + + +# ------------------------------------------------------------------ +# Setup-3 (ExampleN03) +# ------------------------------------------------------------------ +def Setup3(): + #exN03geom= g4py.ExN03geom.ExN03DetectorConstruction() + #gRunManager.SetUserInitialization(exN03geom) + + g4py.ExN03geom.Construct() + + global primary_position, primary_direction + primary_position= G4ThreeVector(-1.*m, 0., 0.) + primary_direction= G4ThreeVector(1., 0., 0.) + + +# ================================================================== +# main +# ================================================================== +# ------------------------------------------------------------------ +# randum number +# ------------------------------------------------------------------ +rand_engine= Ranlux64Engine() +HepRandom.setTheEngine(rand_engine) +HepRandom.setTheSeed(20050830L) + +# ------------------------------------------------------------------ +# user setup +# ------------------------------------------------------------------ +Setup0() +#Setup1() +#Setup3() + + +# ------------------------------------------------------------------ +# setup for physics list +# ------------------------------------------------------------------ +# normal way for constructing user physics list +#exN01PL= ExN01PhysicsList.ExN01PhysicsList() +#gRunManager.SetUserInitialization(exN01PL) + +# 2nd way, short-cut way +# geantino + transportation +#g4py.ExN01pl.Construct() + +# electron/gamma standard EM +g4py.EMSTDpl.Construct() + +# ------------------------------------------------------------------ +# setup for primary generator action +# ------------------------------------------------------------------ +# ------------ +# Particle Gun +# ------------ +# normal way for constructing user physics list +#pgPGA= g4py.ParticleGun.ParticleGunAction() +#gRunManager.SetUserAction(pgPGA) +#pg= pgPGA.GetParticleGun() + +# 2nd way, short-cut way +pg= g4py.ParticleGun.Construct() + +# set parameters of particle gun +pg.SetParticleByName("e-") +pg.SetParticleEnergy(300.*MeV) +pg.SetParticlePosition(primary_position) +pg.SetParticleMomentumDirection(primary_direction) + +# ------------ +# Medical Beam +# ------------ +#beam= g4py.MedicalBeam.Construct() + +# ------------------------------------------------------------------ +# go... +# ------------------------------------------------------------------ +gRunManager.Initialize() + +# visualization +gApplyUICommand("/control/execute vis.mac") + +# beamOn +#gRunManager.BeamOn(3) + diff --git a/environments/g4py/tests/gtest02/test.py b/environments/g4py/tests/gtest02/test.py new file mode 100755 index 0000000000..3010c10bdc --- /dev/null +++ b/environments/g4py/tests/gtest02/test.py @@ -0,0 +1,133 @@ +#!/usr/bin/python3 +# ================================================================== +# python script for Geant4Py test +# +# gtest02 +# - test for using site-module packages +# ================================================================== +from Geant4 import * +import g4pytest.Qmaterials, g4pytest.NISTmaterials +import g4pytest.Qgeom, g4pytest.ExN01geom, g4pytest.ExN03geom +import g4pytest.ExN01pl, g4pytest.EMSTDpl +import g4pytest.ParticleGun, g4pytest.MedicalBeam + +# ================================================================== +# user setup +# ================================================================== + +# ------------------------------------------------------------------ +# Setup-0 (Q) +# ------------------------------------------------------------------ +def Setup0(): + # simple materials for Qgeom + g4pytest.Qmaterials.Construct() + + # NIST materials + #g4pytest.NISTmaterials.Construct() + + # normal way for constructing user geometry + #qDC= g4pytest.Qgeom.QDetectorConstruction() + #gRunManager.SetUserInitialization(qDC) + + # 2nd way, short-cut way + g4pytest.Qgeom.Construct() + + # primary + global primary_position, primary_direction + primary_position= G4ThreeVector(0.,0., -14.9*cm) + primary_direction= G4ThreeVector(0.2, 0., 1.) + + +# ------------------------------------------------------------------ +# Setup-1 (ExampleN01) +# ------------------------------------------------------------------ +def Setup1(): + g4pytest.ExN01geom.Construct() + + global primary_position, primary_direction + primary_position= G4ThreeVector(-2.5*m, 0., 0.) + primary_direction= G4ThreeVector(1., 0., 0.) + + +# ------------------------------------------------------------------ +# Setup-3 (ExampleN03) +# ------------------------------------------------------------------ +def Setup3(): + #exN03geom= g4pytest.ExN03geom.ExN03DetectorConstruction() + #gRunManager.SetUserInitialization(exN03geom) + + g4pytest.ExN03geom.Construct() + + global primary_position, primary_direction + primary_position= G4ThreeVector(-1.*m, 0., 0.) + primary_direction= G4ThreeVector(1., 0., 0.) + + +# ================================================================== +# main +# ================================================================== +# ------------------------------------------------------------------ +# randum number +# ------------------------------------------------------------------ +rand_engine= Ranlux64Engine() +HepRandom.setTheEngine(rand_engine) +HepRandom.setTheSeed(20050830) + +# ------------------------------------------------------------------ +# user setup +# ------------------------------------------------------------------ +Setup0() +#Setup1() +#Setup3() + + +# ------------------------------------------------------------------ +# setup for physics list +# ------------------------------------------------------------------ +# normal way for constructing user physics list +#exN01PL= ExN01PhysicsList.ExN01PhysicsList() +#gRunManager.SetUserInitialization(exN01PL) + +# 2nd way, short-cut way +# geantino + transportation +#g4pytest.ExN01pl.Construct() + +# electron/gamma standard EM +g4pytest.EMSTDpl.Construct() + +# ------------------------------------------------------------------ +# setup for primary generator action +# ------------------------------------------------------------------ +# ------------ +# Particle Gun +# ------------ +# normal way for constructing user physics list +#pgPGA= g4pytest.ParticleGun.ParticleGunAction() +#gRunManager.SetUserAction(pgPGA) +#pg= pgPGA.GetParticleGun() + +# 2nd way, short-cut way +pg= g4pytest.ParticleGun.Construct() + +# set parameters of particle gun +pg.SetParticleByName("e-") +pg.SetParticleEnergy(300.*MeV) +pg.SetParticlePosition(primary_position) +pg.SetParticleMomentumDirection(primary_direction) + +# ------------ +# Medical Beam +# ------------ +#beam= g4pytest.MedicalBeam.Construct() + +# ------------------------------------------------------------------ +# go... +# ------------------------------------------------------------------ +gRunManager.Initialize() + +# visualization +gApplyUICommand("/control/execute vis.mac") + +# beamOn +#gRunManager.BeamOn(3) + diff --git a/environments/g4py/tests/gtest02/vis.mac b/environments/g4py/tests/gtest02/vis.mac new file mode 100644 index 0000000000..ab6ad39430 --- /dev/null +++ b/environments/g4py/tests/gtest02/vis.mac @@ -0,0 +1,16 @@ +# vis.mac + +/vis/open OGLSX + +/vis/scene/create +/vis/scene/add/volume + +/vis/sceneHandler/attach + +#/vis/viewer/set/viewpointThetaPhi 180. 0. +/vis/viewer/set/viewpointThetaPhi 90. -90. + +/tracking/storeTrajectory 1 +/vis/scene/add/trajectories +/vis/scene/endOfEventAction accumulate + diff --git a/environments/g4py/tests/gtest03/CMakeLists.txt b/environments/g4py/tests/gtest03/CMakeLists.txt new file mode 100644 index 0000000000..12591040b2 --- /dev/null +++ b/environments/g4py/tests/gtest03/CMakeLists.txt @@ -0,0 +1,3 @@ +configure_file(test.py test.py) +add_test(NAME geant4py-test03 COMMAND ${PYTHON_EXECUTABLE} test.py) +set_tests_properties(geant4py-test03 PROPERTIES ENVIRONMENT "PYTHONPATH=${GEANT4_PYTHON_OUTPUT_DIR};${GEANT4_TEST_ENVIRONMENT}") diff --git a/environments/g4py/tests/gtest03/gun.mac b/environments/g4py/tests/gtest03/gun.mac new file mode 100644 index 0000000000..fd853d6fff --- /dev/null +++ b/environments/g4py/tests/gtest03/gun.mac @@ -0,0 +1,8 @@ +# gun.mac + +/gun/number 1 +/gun/particle gamma +/gun/energy 1 MeV +/gun/direction 0. 0. 1. +/gun/position 0. 0. -20. cm + diff --git a/environments/g4py/tests/gtest03/run.py b/environments/g4py/tests/gtest03/run.py new file mode 100755 index 0000000000..ee2f7a4203 --- /dev/null +++ b/environments/g4py/tests/gtest03/run.py @@ -0,0 +1,100 @@ +#!/usr/bin/python +# ================================================================== +# python script for Geant4Py test +# +# gtest02 +# - test for using site-module packages +# ================================================================== +from Geant4 import * +import g4py.NISTmaterials +import g4py.ezgeom +from g4py.ezgeom import G4EzVolume +import g4py.EMSTDpl +import g4py.ParticleGun + +# ================================================================== +# intialize +# ================================================================== +def Configure(): + # ------------------------------------------------------------------ + # setup for materials + # ------------------------------------------------------------------ + # simple materials for Qgeom + g4py.NISTmaterials.Construct() + + # ------------------------------------------------------------------ + # setup for geometry + # ------------------------------------------------------------------ + #g4py.Qgeom.Construct() + g4py.ezgeom.Construct() # initialize + + # ------------------------------------------------------------------ + # setup for physics list + # ------------------------------------------------------------------ + g4py.EMSTDpl.Construct() + + # ------------------------------------------------------------------ + # setup for primary generator action + # ------------------------------------------------------------------ + g4py.ParticleGun.Construct() + gControlExecute("gun.mac") + +# ================================================================== +# constructing geometry +# ================================================================== +def ConstructGeom(): + print "* Constructing geometry..." + # reset world material + air= G4Material.GetMaterial("G4_AIR") + g4py.ezgeom.SetWorldMaterial(air) + + # target + global target + target= G4EzVolume("Target") + au= G4Material.GetMaterial("G4_Au") + target.CreateTubeVolume(au, 0., 1.*cm, 1.*mm) + target.PlaceIt(G4ThreeVector(0.,0.,-10.*cm)) + + # dummy box + global detector_box, detector_box_pv + detector_box= G4EzVolume("DetectorBox") + detector_box.CreateBoxVolume(air, 20.*cm, 20.*cm, 40.*cm) + detector_box_pv= detector_box.PlaceIt(G4ThreeVector(0.,0.,20.*cm)) + + # calorimeter + global cal + cal= G4EzVolume("Calorimeter") + nai= G4Material.GetMaterial("G4_SODIUM_IODIDE") + cal.CreateBoxVolume(nai, 5.*cm, 5.*cm, 30.*cm) + dd= 5.*cm + for ical in range(-1, 2): + calPos= G4ThreeVector(dd*ical, 0., 0.) + print calPos + cal.PlaceIt(calPos, ical+1, detector_box) + + +# ================================================================== +# main +# ================================================================== +# ------------------------------------------------------------------ +# randum number +# ------------------------------------------------------------------ +rand_engine= Ranlux64Engine() +HepRandom.setTheEngine(rand_engine) +HepRandom.setTheSeed(20050830L) + +# setup... +Configure() +ConstructGeom() + +# ------------------------------------------------------------------ +# go... +# ------------------------------------------------------------------ +gRunManager.Initialize() + +# visualization +gControlExecute("vis.mac") + +# beamOn +#gRunManager.BeamOn(3) + diff --git a/environments/g4py/tests/gtest03/test.py b/environments/g4py/tests/gtest03/test.py new file mode 100755 index 0000000000..e5afa1cf1d --- /dev/null +++ b/environments/g4py/tests/gtest03/test.py @@ -0,0 +1,100 @@ +#!/usr/bin/python3 +# ================================================================== +# python script for Geant4Py test +# +# gtest02 +# - test for using site-module packages +# ================================================================== +from Geant4 import * +import g4pytest.NISTmaterials +import g4pytest.ezgeom +from g4pytest.ezgeom import G4EzVolume +import g4pytest.EMSTDpl +import g4pytest.ParticleGun + +# ================================================================== +# intialize +# ================================================================== +def Configure(): + # ------------------------------------------------------------------ + # setup for materials + # ------------------------------------------------------------------ + # simple materials for Qgeom + g4pytest.NISTmaterials.Construct() + + # ------------------------------------------------------------------ + # setup for geometry + # ------------------------------------------------------------------ + #g4pytest.Qgeom.Construct() + g4pytest.ezgeom.Construct() # initialize + + # ------------------------------------------------------------------ + # setup for physics list + # ------------------------------------------------------------------ + g4pytest.EMSTDpl.Construct() + + # ------------------------------------------------------------------ + # setup for primary generator action + # ------------------------------------------------------------------ + g4pytest.ParticleGun.Construct() + gControlExecute("gun.mac") + +# ================================================================== +# constructing geometry +# ================================================================== +def ConstructGeom(): + print("* Constructing geometry...") + # reset world material + air= G4Material.GetMaterial("G4_AIR") + g4pytest.ezgeom.SetWorldMaterial(air) + + # target + global target + target= G4EzVolume("Target") + au= G4Material.GetMaterial("G4_Au") + target.CreateTubeVolume(au, 0., 1.*cm, 1.*mm) + target.PlaceIt(G4ThreeVector(0.,0.,-10.*cm)) + + # dummy box + global detector_box, detector_box_pv + detector_box= G4EzVolume("DetectorBox") + detector_box.CreateBoxVolume(air, 20.*cm, 20.*cm, 40.*cm) + detector_box_pv= detector_box.PlaceIt(G4ThreeVector(0.,0.,20.*cm)) + + # calorimeter + global cal + cal= G4EzVolume("Calorimeter") + nai= G4Material.GetMaterial("G4_SODIUM_IODIDE") + cal.CreateBoxVolume(nai, 5.*cm, 5.*cm, 30.*cm) + dd= 5.*cm + for ical in range(-1, 2): + calPos= G4ThreeVector(dd*ical, 0., 0.) + print(calPos) + cal.PlaceIt(calPos, ical+1, detector_box) + + +# ================================================================== +# main +# ================================================================== +# ------------------------------------------------------------------ +# randum number +# ------------------------------------------------------------------ +rand_engine= Ranlux64Engine() +HepRandom.setTheEngine(rand_engine) +HepRandom.setTheSeed(20050830) + +# setup... +Configure() +ConstructGeom() + +# ------------------------------------------------------------------ +# go... +# ------------------------------------------------------------------ +gRunManager.Initialize() + +# visualization +gControlExecute("vis.mac") + +# beamOn +#gRunManager.BeamOn(3) + diff --git a/environments/g4py/tests/gtest03/test_voxel.py b/environments/g4py/tests/gtest03/test_voxel.py new file mode 100755 index 0000000000..82e5df3413 --- /dev/null +++ b/environments/g4py/tests/gtest03/test_voxel.py @@ -0,0 +1,85 @@ +#!/usr/bin/python +# ================================================================== +# python script for Geant4Py test +# +# gtest02 +# - test for using site-module packages +# ================================================================== +from Geant4 import * +import g4py.NISTmaterials +import g4py.ezgeom +from g4py.ezgeom import G4EzVolume +import g4py.EMSTDpl +import g4py.ParticleGun + +# ================================================================== +# intialize +# ================================================================== +def Configure(): + # ------------------------------------------------------------------ + # setup for materials + # ------------------------------------------------------------------ + # simple materials for Qgeom + g4py.NISTmaterials.Construct() + + # ------------------------------------------------------------------ + # setup for geometry + # ------------------------------------------------------------------ + #g4py.Qgeom.Construct() + g4py.ezgeom.Construct() # initialize + + # ------------------------------------------------------------------ + # setup for physics list + # ------------------------------------------------------------------ + g4py.EMSTDpl.Construct() + + # ------------------------------------------------------------------ + # setup for primary generator action + # ------------------------------------------------------------------ + g4py.ParticleGun.Construct() + gControlExecute("gun.mac") + + +# ================================================================== +# constructing geometry +# ================================================================== +def ConstructGeom(): + print "* Constructing geometry..." + # reset world material + air= G4Material.GetMaterial("G4_AIR") + g4py.ezgeom.SetWorldMaterial(air) + + # phantom + global phantom + phantom= G4EzVolume("DetectorBox") + water= G4Material.GetMaterial("G4_WATER") + phantom.CreateBoxVolume(water, 40.*cm, 40.*cm, 50.*cm) + phantom.PlaceIt(G4ThreeVector(0.,0.,20.*cm)) + vsize=phantom.VoxelizeIt(100, 100, 100) + print "voxel size=", vsize + +# ================================================================== +# main +# ================================================================== +# ------------------------------------------------------------------ +# randum number +# ------------------------------------------------------------------ +rand_engine= Ranlux64Engine() +HepRandom.setTheEngine(rand_engine) +HepRandom.setTheSeed(20050830L) + +# setup... +Configure() +ConstructGeom() + +# ------------------------------------------------------------------ +# go... +# ------------------------------------------------------------------ +gRunManager.Initialize() + +# visualization +gControlExecute("vis.mac") + +# beamOn +#gRunManager.BeamOn(3) + diff --git a/environments/g4py/tests/gtest03/vis.mac b/environments/g4py/tests/gtest03/vis.mac new file mode 100644 index 0000000000..85e83c6c27 --- /dev/null +++ b/environments/g4py/tests/gtest03/vis.mac @@ -0,0 +1,15 @@ +# vis.mac + +/vis/open OGLSX + +/vis/scene/create +/vis/scene/add/volume + +/vis/sceneHandler/attach + +/vis/viewer/set/viewpointThetaPhi 270. 90. + +/tracking/storeTrajectory 1 +/vis/scene/add/trajectories +/vis/scene/endOfEventAction accumulate + diff --git a/environments/g4py/tests/gtest04/CMakeLists.txt b/environments/g4py/tests/gtest04/CMakeLists.txt new file mode 100644 index 0000000000..03db192990 --- /dev/null +++ b/environments/g4py/tests/gtest04/CMakeLists.txt @@ -0,0 +1,3 @@ +configure_file(test.py test.py) +add_test(NAME geant4py-test04 COMMAND ${PYTHON_EXECUTABLE} test.py) +set_tests_properties(geant4py-test04 PROPERTIES ENVIRONMENT "PYTHONPATH=${GEANT4_PYTHON_OUTPUT_DIR};${GEANT4_TEST_ENVIRONMENT}") diff --git a/environments/g4py/tests/gtest04/test.py b/environments/g4py/tests/gtest04/test.py new file mode 100755 index 0000000000..62913aa409 --- /dev/null +++ b/environments/g4py/tests/gtest04/test.py @@ -0,0 +1,36 @@ +#!/usr/bin/env python +# ================================================================== +# python script for Geant4Py test +# +# gtest04 +# - test for command tree and command information +# ================================================================== +from Geant4 import * + +def DumpTree(atree): + print("@@", atree.GetPathName(), "::", atree.GetTitle()) + ntree= atree.GetTreeEntry() + ncommand= atree.GetCommandEntry() + + for i in range(1, ncommand+1): + icommand= atree.GetCommand(i) + print(" **", icommand.GetCommandPath()) + print(" ", icommand.GetTitle()) + x= icommand.GetStateList() + + nparameter= icommand.GetParameterEntries() + for j in range(0, nparameter): + iparam= icommand.GetParameter(j) + print(" +", iparam.GetParameterName(), iparam.GetParameterType()) + + for i in range(1, ntree+1): + itree= atree.GetTree(i) + DumpTree(itree) + +# ================================================================== +# main +# ================================================================== +root_tree= gUImanager.GetTree() + +DumpTree(root_tree) + diff --git a/environments/g4py/tests/gtest05/CMakeLists.txt b/environments/g4py/tests/gtest05/CMakeLists.txt new file mode 100644 index 0000000000..23b597fdb4 --- /dev/null +++ b/environments/g4py/tests/gtest05/CMakeLists.txt @@ -0,0 +1,3 @@ +configure_file(test.py test.py) +add_test(NAME geant4py-test05 COMMAND ${PYTHON_EXECUTABLE} test.py) +set_tests_properties(geant4py-test05 PROPERTIES ENVIRONMENT "PYTHONPATH=${GEANT4_PYTHON_OUTPUT_DIR};${GEANT4_TEST_ENVIRONMENT}") diff --git a/environments/g4py/tests/gtest05/test.py b/environments/g4py/tests/gtest05/test.py new file mode 100755 index 0000000000..e17d01269a --- /dev/null +++ b/environments/g4py/tests/gtest05/test.py @@ -0,0 +1,311 @@ +#!/usr/bin/python3 +# ================================================================== +# python script for Geant4Py test +# +# gtest05 +# - test for CSG geometry construction in Python +# ================================================================== +from Geant4 import * +import g4pytest.ExN01pl, g4pytest.ParticleGun +import os, math + +# ================================================================== +# user actions in python +# ================================================================== +class MyDetectorConstruction(G4VUserDetectorConstruction): + "My Detector Construction" + + def __init__(self): + G4VUserDetectorConstruction.__init__(self) + self.air= gNistManager.FindOrBuildMaterial("G4_AIR") + self.lv_object= None + self.world= self.ConstructWorld() + + self.va_red= G4VisAttributes(G4Color(1.,0.,0.)) + self.va_cyan= G4VisAttributes(G4Color(0.,1.,1.)) + self.va_green= G4VisAttributes(G4Color(0.,1.,0.)) + self.va_blue= G4VisAttributes(G4Color(0.,0.,1.)) + self.va_magenta= G4VisAttributes(G4Color(1.,0.,1.)) + + # ----------------------------------------------------------------- + def ConstructWorld(self): + # Python has automatic garbage collection system. + # Geometry objects must be defined as GLOBAL not to be deleted. + global sld_world, lv_world, pv_world, va_world + + sld_world= G4Box("world", 1.*m, 1.*m, 1.*m) + lv_world= G4LogicalVolume(sld_world, self.air, "world") + pv_world= G4PVPlacement(G4Transform3D(), lv_world, "world", + None, False, 0) + + va_world= G4VisAttributes() + va_world.SetVisibility(False) + lv_world.SetVisAttributes(va_world) + + # solid object (dummy) + global sld_sld, lv_sld, pv_sld + sld_sld= G4Box("dummy", 10.*cm, 10.*cm, 10.*cm) + self.lv_object= lv_sld= G4LogicalVolume(sld_sld, self.air, "dummy") + pv_sld= G4PVPlacement(None, G4ThreeVector(), "dummy", lv_sld, + pv_world, False, 0) + + return pv_world + + # ----------------------------------------------------------------- + def ConstructBox(self): + global sld_box + sld_box= G4Box("box", 30.*cm, 40.*cm, 60.*cm) + self.lv_object.SetSolid(sld_box) + self.lv_object.SetVisAttributes(self.va_red) + gRunManager.GeometryHasBeenModified() + + # ----------------------------------------------------------------- + def ConstructTubs(self): + global sld_tubs + sld_tubs= G4Tubs("tubs", 10.*cm, 15.*cm, 20.*cm, 0., pi) + self.lv_object.SetSolid(sld_tubs) + self.lv_object.SetVisAttributes(self.va_cyan) + gRunManager.GeometryHasBeenModified() + + # ----------------------------------------------------------------- + def ConstructCons(self): + global sld_cons + sld_cons= G4Cons("cons", 5.*cm, 10.*cm, 20.*cm, 25.*cm, + 40.*cm, 0., 4./3.*pi) + self.lv_object.SetSolid(sld_cons) + self.lv_object.SetVisAttributes(self.va_green) + gRunManager.GeometryHasBeenModified() + + # ----------------------------------------------------------------- + def ConstructPara(self): + global sld_para + sld_para= G4Para("para", 30.*cm, 40.*cm, 60.*cm, pi/4., pi/8., 0.) + self.lv_object.SetSolid(sld_para) + self.lv_object.SetVisAttributes(self.va_blue) + gRunManager.GeometryHasBeenModified() + + # ----------------------------------------------------------------- + def ConstructTrd(self): + global sld_trd + sld_trd= G4Trd("trd", 30.*cm, 10.*cm, 40.*cm, 15.*cm, 60.*cm) + self.lv_object.SetSolid(sld_trd) + self.lv_object.SetVisAttributes(self.va_blue) + gRunManager.GeometryHasBeenModified() + + # ----------------------------------------------------------------- + def ConstructTrap(self): + global sld_trap + sld_trap= G4Trap("trap", 60.*cm, 20.*degree, 5.*degree, + 40.*cm, 30.*cm, 40.*cm, 10.*degree, + 16.*cm, 10*cm, 14.*cm, 10.*deg) + self.lv_object.SetSolid(sld_trap) + self.lv_object.SetVisAttributes(self.va_green) + gRunManager.GeometryHasBeenModified() + + # ----------------------------------------------------------------- + def ConstructSphere(self): + global sld_sphere + sld_sphere= G4Sphere("sphere", 100.*cm, 120.*cm, 0., 180.*deg, + 0., 180.*deg) + self.lv_object.SetSolid(sld_sphere) + self.lv_object.SetVisAttributes(self.va_cyan) + gRunManager.GeometryHasBeenModified() + + # ----------------------------------------------------------------- + def ConstructOrb(self): + global sld_orb + sld_orb= G4Orb("orb", 100.*cm) + self.lv_object.SetSolid(sld_orb) + self.lv_object.SetVisAttributes(self.va_red) + gRunManager.GeometryHasBeenModified() + + # ----------------------------------------------------------------- + def ConstructTorus(self): + global sld_torus + sld_torus= G4Torus("torus", 40.*cm, 60.*cm, 200.*cm, 0., 90.*deg) + self.lv_object.SetSolid(sld_torus) + self.lv_object.SetVisAttributes(self.va_magenta) + gRunManager.GeometryHasBeenModified() + + # ----------------------------------------------------------------- + def ConstructPolycone(self): + zvec= G4doubleVector() + rinvec= G4doubleVector() + routvec= G4doubleVector() + + zvec[:]= [ 5.*cm, 7.*cm, 9.*cm, 11.*cm, 25.*cm, 27.*cm, 29.*cm, + 31.*cm, 35.*cm ] + rinvec[:]= [0.,0.,0.,0.,0.,0.,0.,0.,0.] + routvec[:]= [ 0., 10.*cm, 10.*cm, 5.*cm, 5.*cm, 10.*cm, + 10.*cm, 2.*cm, 2.*cm ] + + global sld_pcon + sld_pcon= CreatePolycone("pcon", 0., twopi, 9, zvec, rinvec,routvec) + self.lv_object.SetSolid(sld_pcon) + self.lv_object.SetVisAttributes(self.va_cyan) + gRunManager.GeometryHasBeenModified() + + # ----------------------------------------------------------------- + def ConstructPolyhedra(self): + zvec= G4doubleVector() + rinvec= G4doubleVector() + routvec= G4doubleVector() + + zvec[:]= [ 0., 5.*cm, 8.*cm, 13.*cm, 30.*cm, 32.*cm, 35.*cm ] + rinvec[:]= [0.,0.,0.,0.,0.,0.,0. ] + routvec[:]= [ 0., 15.*cm, 15.*cm, 4.*cm, 4.*cm, 10.*cm, 10.*cm ] + + global sld_pgon + sld_pgon= CreatePolyhedra("pgon", 0., twopi, 5, 7, zvec, rinvec,routvec) + self.lv_object.SetSolid(sld_pgon) + self.lv_object.SetVisAttributes(self.va_green) + gRunManager.GeometryHasBeenModified() + + # ----------------------------------------------------------------- + def ConstructEllipticalTube(self): + global sld_et + sld_et= G4EllipticalTube("ellipticaltube", 5.*cm, 10.*cm, 20.*cm) + self.lv_object.SetSolid(sld_et) + self.lv_object.SetVisAttributes(self.va_cyan) + gRunManager.GeometryHasBeenModified() + + # ----------------------------------------------------------------- + def ConstructEllipsoid(self): + global sld_es + sld_es= G4Ellipsoid("ellipsoid", 10.*cm, 20.*cm, 50.*cm, + -10.*cm, 40.*cm) + self.lv_object.SetSolid(sld_es) + self.lv_object.SetVisAttributes(self.va_red) + gRunManager.GeometryHasBeenModified() + + # ----------------------------------------------------------------- + def ConstructEllipticalCone(self): + global sld_ec + sld_ec= G4EllipticalCone("ellipticalcone", 30.*cm, 60.*cm, + 50.*cm, 25.*cm) + self.lv_object.SetSolid(sld_ec) + self.lv_object.SetVisAttributes(self.va_magenta) + gRunManager.GeometryHasBeenModified() + + # ----------------------------------------------------------------- + def ConstructHype(self): + global sld_hype + sld_hype= G4Hype("hype", 20.*cm, 30.*cm, 0.7, 0.7, 50.*cm) + self.lv_object.SetSolid(sld_hype) + self.lv_object.SetVisAttributes(self.va_blue) + gRunManager.GeometryHasBeenModified() + + # ----------------------------------------------------------------- + def ConstructTet(self): + global sld_tet + p1= G4ThreeVector(0., 0., math.sqrt(3.)*cm) + p2= G4ThreeVector(0., 2*math.sqrt(2./3.)*cm, -1./math.sqrt(3)*cm) + p3= G4ThreeVector(-math.sqrt(2.)*cm, -math.sqrt(2./3.)*cm, + -1./math.sqrt(3)*cm) + p4= G4ThreeVector(math.sqrt(2)*cm, -math.sqrt(2./3.)*cm, + -1./math.sqrt(3)*cm) + + sld_tet= G4Tet("tet", 20.*p1, 20.*p2, 20.*p3, 20.*p4) + self.lv_object.SetSolid(sld_tet) + self.lv_object.SetVisAttributes(self.va_green) + gRunManager.GeometryHasBeenModified() + + # ----------------------------------------------------------------- + def ConstructTwistedBox(self): + global sld_twb + sld_twb= G4TwistedBox("twistedbox", 30.*deg, 30.*cm, 40.*cm, 60.*cm) + self.lv_object.SetSolid(sld_twb) + self.lv_object.SetVisAttributes(self.va_cyan) + gRunManager.GeometryHasBeenModified() + + # ----------------------------------------------------------------- + def ConstructTwistedTrap(self): + global sld_twtrp + sld_twtrp= G4TwistedTrap("twistedtrap", 30.*deg, + 60.*cm, 20.*deg, 5.*deg, + 40.*cm, 30.*cm, 40.*cm, + 16.*cm, 10.*cm, 14.*cm, 10.*deg) + self.lv_object.SetSolid(sld_twtrp) + self.lv_object.SetVisAttributes(self.va_blue) + gRunManager.GeometryHasBeenModified() + + # ----------------------------------------------------------------- + def ConstructTwistedTrd(self): + global sld_twtrd + sld_twtrd= G4TwistedTrd("twistedtrd", 30.*cm, 10.*cm, + 40.*cm, 15.*cm, 60.*cm, 30.*deg) + self.lv_object.SetSolid(sld_twtrd) + self.lv_object.SetVisAttributes(self.va_green) + gRunManager.GeometryHasBeenModified() + + # ----------------------------------------------------------------- + def ConstructTwistedTubs(self): + global sld_twt + sld_twt= G4TwistedTubs("twistedtube", 60.*deg, + 10.*cm, 15.*cm, 20.*cm, 90.*deg) + self.lv_object.SetSolid(sld_twt) + self.lv_object.SetVisAttributes(self.va_magenta) + gRunManager.GeometryHasBeenModified() + + # ----------------------------------------------------------------- + def Construct(self): # return the world volume + return self.world + +# ================================================================== +# main +# ================================================================== +os.environ["G4VRML_DEST_DIR"]= "." +os.environ["G4VRMLFILE_MAX_FILE_NUM"]= "1" +os.environ["G4VRMLFILE_VIEWER"]= "echo" + +# set geometry +myDC= MyDetectorConstruction() +gRunManager.SetUserInitialization(myDC) + +# minimal physics list +g4pytest.ExN01pl.Construct() + +# set primary generator action +g4pytest.ParticleGun.Construct() + +# initialize +gRunManager.Initialize() + +# visualization +gApplyUICommand("/vis/open VRML2FILE") +gApplyUICommand("/vis/scene/create") +gApplyUICommand("/vis/scene/add/volume") +gApplyUICommand("/vis/sceneHandler/attach") +gApplyUICommand("/vis/scene/add/axes 0. 0. 0. 10. cm") + +# create a vrml file for each solid type +f_list= ( + ("g4box", myDC.ConstructBox), + ("g4tubs", myDC.ConstructTubs), + ("g4cons", myDC.ConstructCons), + ("g4para", myDC.ConstructPara), + ("g4trd", myDC.ConstructTrd), + ("g4trap", myDC.ConstructTrap), + ("g4sphere", myDC.ConstructSphere), + ("g4orb", myDC.ConstructOrb), + ("g4torus", myDC.ConstructTorus), + ("g4polycone", myDC.ConstructPolycone), + ("g4polyhedra", myDC.ConstructPolyhedra), + ("g4ellipticaltube", myDC.ConstructEllipticalTube), + ("g4ellipsoid", myDC.ConstructEllipsoid), + ("g4ellipticalcone", myDC.ConstructEllipticalCone), + ("g4hype", myDC.ConstructHype), + ("g4tet", myDC.ConstructTet), + ("g4twistedbox", myDC.ConstructTwistedBox), + ("g4twistedtrap", myDC.ConstructTwistedTrap), + ("g4twistedtrd", myDC.ConstructTwistedTrd), + ("g4twistedtubs", myDC.ConstructTwistedTubs) + ) + +for s,f in f_list: + f.__call__() + gRunManager.BeamOn(1) + fname= "%s.wrl" % (s) + os.rename("g4_00.wrl", fname) + +gTerminate() diff --git a/environments/g4py/tests/gtest05/vrml/g4box.wrl b/environments/g4py/tests/gtest05/vrml/g4box.wrl new file mode 100644 index 0000000000..83932f5902 --- /dev/null +++ b/environments/g4py/tests/gtest05/vrml/g4box.wrl @@ -0,0 +1,102 @@ +#VRML V2.0 utf8 +# Generated by VRML 2.0 driver of GEANT4 + + +#---------- CAMERA +Viewpoint { + position 0 0 452.607 +} + +#---------- SOLID: dummy.0 + Shape { + appearance Appearance { + material Material { + diffuseColor 1 0 0 + transparency 0.7 + } + } + geometry IndexedFaceSet { + coord Coordinate { + point [ + -300 -400 -600, + 300 -400 -600, + 300 400 -600, + -300 400 -600, + -300 -400 600, + 300 -400 600, + 300 400 600, + -300 400 600, + ] + } + coordIndex [ + 0, 3, 2, 1, -1, + 4, 7, 3, 0, -1, + 7, 6, 2, 3, -1, + 6, 5, 1, 2, -1, + 5, 4, 0, 1, -1, + 4, 5, 6, 7, -1, + ] + solid FALSE + } + } +#---------- POLYLINE +Shape { + appearance Appearance { + material Material { + diffuseColor 1 0 0 + emissiveColor 1 0 0 + } + } + geometry IndexedLineSet { + coord Coordinate { + point [ + 0 0 0, + 100 0 0, + ] + } + coordIndex [ + 0, 1, -1 + ] + } +} +#---------- POLYLINE +Shape { + appearance Appearance { + material Material { + diffuseColor 0 1 0 + emissiveColor 0 1 0 + } + } + geometry IndexedLineSet { + coord Coordinate { + point [ + 0 0 0, + 0 100 0, + ] + } + coordIndex [ + 0, 1, -1 + ] + } +} +#---------- POLYLINE +Shape { + appearance Appearance { + material Material { + diffuseColor 0 0 1 + emissiveColor 0 0 1 + } + } + geometry IndexedLineSet { + coord Coordinate { + point [ + 0 0 0, + 0 0 100, + ] + } + coordIndex [ + 0, 1, -1 + ] + } +} +#End of file. diff --git a/environments/g4py/tests/gtest05/vrml/g4cons.wrl b/environments/g4py/tests/gtest05/vrml/g4cons.wrl new file mode 100644 index 0000000000..3ea90815a5 --- /dev/null +++ b/environments/g4py/tests/gtest05/vrml/g4cons.wrl @@ -0,0 +1,222 @@ +#VRML V2.0 utf8 +# Generated by VRML 2.0 driver of GEANT4 + + +#---------- CAMERA +Viewpoint { + position 0 0 452.607 +} + +#---------- SOLID: dummy.0 + Shape { + appearance Appearance { + material Material { + diffuseColor 0 1 0 + transparency 0.7 + } + } + geometry IndexedFaceSet { + coord Coordinate { + point [ + 250 0 400, + 241.481 64.7048 400, + 216.506 125 400, + 176.777 176.777 400, + 125 216.506 400, + 64.7048 241.481 400, + 1.53081e-14 250 400, + -64.7048 241.481 400, + -125 216.506 400, + -176.777 176.777 400, + -216.506 125 400, + -241.481 64.7048 400, + -250 3.06162e-14 400, + -241.481 -64.7048 400, + -216.506 -125 400, + -176.777 -176.777 400, + -125 -216.506 400, + 100 0 -400, + 96.5926 25.8819 -400, + 86.6025 50 -400, + 70.7107 70.7107 -400, + 50 86.6025 -400, + 25.8819 96.5926 -400, + 6.12323e-15 100 -400, + -25.8819 96.5926 -400, + -50 86.6025 -400, + -70.7107 70.7107 -400, + -86.6025 50 -400, + -96.5926 25.8819 -400, + -100 1.22465e-14 -400, + -96.5926 -25.8819 -400, + -86.6025 -50 -400, + -70.7107 -70.7107 -400, + -50 -86.6025 -400, + 200 0 400, + 193.185 51.7638 400, + 173.205 100 400, + 141.421 141.421 400, + 100 173.205 400, + 51.7638 193.185 400, + 1.22465e-14 200 400, + -51.7638 193.185 400, + -100 173.205 400, + -141.421 141.421 400, + -173.205 100 400, + -193.185 51.7638 400, + -200 2.44929e-14 400, + -193.185 -51.7638 400, + -173.205 -100 400, + -141.421 -141.421 400, + -100 -173.205 400, + 50 0 -400, + 48.2963 12.941 -400, + 43.3013 25 -400, + 35.3553 35.3553 -400, + 25 43.3013 -400, + 12.941 48.2963 -400, + 3.06162e-15 50 -400, + -12.941 48.2963 -400, + -25 43.3013 -400, + -35.3553 35.3553 -400, + -43.3013 25 -400, + -48.2963 12.941 -400, + -50 6.12323e-15 -400, + -48.2963 -12.941 -400, + -43.3013 -25 -400, + -35.3553 -35.3553 -400, + -25 -43.3013 -400, + ] + } + coordIndex [ + 0, 17, 18, 1, -1, + 1, 18, 19, 2, -1, + 2, 19, 20, 3, -1, + 3, 20, 21, 4, -1, + 4, 21, 22, 5, -1, + 5, 22, 23, 6, -1, + 6, 23, 24, 7, -1, + 7, 24, 25, 8, -1, + 8, 25, 26, 9, -1, + 9, 26, 27, 10, -1, + 10, 27, 28, 11, -1, + 11, 28, 29, 12, -1, + 12, 29, 30, 13, -1, + 13, 30, 31, 14, -1, + 14, 31, 32, 15, -1, + 15, 32, 33, 16, -1, + 51, 34, 35, 52, -1, + 52, 35, 36, 53, -1, + 53, 36, 37, 54, -1, + 54, 37, 38, 55, -1, + 55, 38, 39, 56, -1, + 56, 39, 40, 57, -1, + 57, 40, 41, 58, -1, + 58, 41, 42, 59, -1, + 59, 42, 43, 60, -1, + 60, 43, 44, 61, -1, + 61, 44, 45, 62, -1, + 62, 45, 46, 63, -1, + 63, 46, 47, 64, -1, + 64, 47, 48, 65, -1, + 65, 48, 49, 66, -1, + 66, 49, 50, 67, -1, + 34, 0, 1, 35, -1, + 35, 1, 2, 36, -1, + 36, 2, 3, 37, -1, + 37, 3, 4, 38, -1, + 38, 4, 5, 39, -1, + 39, 5, 6, 40, -1, + 40, 6, 7, 41, -1, + 41, 7, 8, 42, -1, + 42, 8, 9, 43, -1, + 43, 9, 10, 44, -1, + 44, 10, 11, 45, -1, + 45, 11, 12, 46, -1, + 46, 12, 13, 47, -1, + 47, 13, 14, 48, -1, + 48, 14, 15, 49, -1, + 49, 15, 16, 50, -1, + 17, 51, 52, 18, -1, + 18, 52, 53, 19, -1, + 19, 53, 54, 20, -1, + 20, 54, 55, 21, -1, + 21, 55, 56, 22, -1, + 22, 56, 57, 23, -1, + 23, 57, 58, 24, -1, + 24, 58, 59, 25, -1, + 25, 59, 60, 26, -1, + 26, 60, 61, 27, -1, + 27, 61, 62, 28, -1, + 28, 62, 63, 29, -1, + 29, 63, 64, 30, -1, + 30, 64, 65, 31, -1, + 31, 65, 66, 32, -1, + 32, 66, 67, 33, -1, + 0, 34, 51, 17, -1, + 33, 67, 50, 16, -1, + ] + solid FALSE + } + } +#---------- POLYLINE +Shape { + appearance Appearance { + material Material { + diffuseColor 1 0 0 + emissiveColor 1 0 0 + } + } + geometry IndexedLineSet { + coord Coordinate { + point [ + 0 0 0, + 100 0 0, + ] + } + coordIndex [ + 0, 1, -1 + ] + } +} +#---------- POLYLINE +Shape { + appearance Appearance { + material Material { + diffuseColor 0 1 0 + emissiveColor 0 1 0 + } + } + geometry IndexedLineSet { + coord Coordinate { + point [ + 0 0 0, + 0 100 0, + ] + } + coordIndex [ + 0, 1, -1 + ] + } +} +#---------- POLYLINE +Shape { + appearance Appearance { + material Material { + diffuseColor 0 0 1 + emissiveColor 0 0 1 + } + } + geometry IndexedLineSet { + coord Coordinate { + point [ + 0 0 0, + 0 0 100, + ] + } + coordIndex [ + 0, 1, -1 + ] + } +} +#End of file. diff --git a/environments/g4py/tests/gtest05/vrml/g4ellipsoid.wrl b/environments/g4py/tests/gtest05/vrml/g4ellipsoid.wrl new file mode 100644 index 0000000000..6deeebdf85 --- /dev/null +++ b/environments/g4py/tests/gtest05/vrml/g4ellipsoid.wrl @@ -0,0 +1,403 @@ +#VRML V2.0 utf8 +# Generated by VRML 2.0 driver of GEANT4 + + +#---------- CAMERA +Viewpoint { + position 0 0 452.607 +} + +#---------- SOLID: dummy.0 + Shape { + appearance Appearance { + material Material { + diffuseColor 1 0 0 + transparency 0.7 + } + } + geometry IndexedFaceSet { + coord Coordinate { + point [ + 0 0 400, + 60 0 400, + 57.9555 31.0583 400, + 51.9615 60 400, + 42.4264 84.8528 400, + 30 103.923 400, + 15.5291 115.911 400, + 3.67394e-15 120 400, + -15.5291 115.911 400, + -30 103.923 400, + -42.4264 84.8528 400, + -51.9615 60 400, + -57.9555 31.0583 400, + -60 1.46958e-14 400, + -57.9555 -31.0583 400, + -51.9615 -60 400, + -42.4264 -84.8528 400, + -30 -103.923 400, + -15.5291 -115.911 400, + -1.10218e-14 -120 400, + 15.5291 -115.911 400, + 30 -103.923 400, + 42.4264 -84.8528 400, + 51.9615 -60 400, + 57.9555 -31.0583 400, + 76.3833 0 322.707, + 73.7806 39.5389 322.707, + 66.1499 76.3833 322.707, + 54.0112 108.022 322.707, + 38.1917 132.3 322.707, + 19.7695 147.561 322.707, + 4.67713e-15 152.767 322.707, + -19.7695 147.561 322.707, + -38.1917 132.3 322.707, + -54.0112 108.022 322.707, + -66.1499 76.3833 322.707, + -73.7806 39.5389 322.707, + -76.3833 1.87085e-14 322.707, + -73.7806 -39.5389 322.707, + -66.1499 -76.3833 322.707, + -54.0112 -108.022 322.707, + -38.1917 -132.3 322.707, + -19.7695 -147.561 322.707, + -1.40314e-14 -152.767 322.707, + 19.7695 -147.561 322.707, + 38.1917 -132.3 322.707, + 54.0112 -108.022 322.707, + 66.1499 -76.3833 322.707, + 73.7806 -39.5389 322.707, + 88.8911 0 229.04, + 85.8622 46.0134 229.04, + 76.982 88.8911 229.04, + 62.8555 125.711 229.04, + 44.4456 153.964 229.04, + 23.0067 171.724 229.04, + 5.44301e-15 177.782 229.04, + -23.0067 171.724 229.04, + -44.4456 153.964 229.04, + -62.8555 125.711 229.04, + -76.982 88.8911 229.04, + -85.8622 46.0134 229.04, + -88.8911 2.1772e-14 229.04, + -85.8622 -46.0134 229.04, + -76.982 -88.8911 229.04, + -62.8555 -125.711 229.04, + -44.4456 -153.964 229.04, + -23.0067 -171.724 229.04, + -1.6329e-14 -177.782 229.04, + 23.0067 -171.724 229.04, + 44.4456 -153.964 229.04, + 62.8555 -125.711 229.04, + 76.982 -88.8911 229.04, + 85.8622 -46.0134 229.04, + 96.8887 0 123.752, + 93.5873 50.1533 123.752, + 83.9081 96.8887 123.752, + 68.5106 137.021 123.752, + 48.4443 167.816 123.752, + 25.0766 187.175 123.752, + 5.93272e-15 193.777 123.752, + -25.0766 187.175 123.752, + -48.4443 167.816 123.752, + -68.5106 137.021 123.752, + -83.9081 96.8887 123.752, + -93.5873 50.1533 123.752, + -96.8887 2.37309e-14 123.752, + -93.5873 -50.1533 123.752, + -83.9081 -96.8887 123.752, + -68.5106 -137.021 123.752, + -48.4443 -167.816 123.752, + -25.0766 -187.175 123.752, + -1.77982e-14 -193.777 123.752, + 25.0766 -187.175 123.752, + 48.4443 -167.816 123.752, + 68.5106 -137.021 123.752, + 83.9081 -96.8887 123.752, + 93.5873 -50.1533 123.752, + 99.9703 0 12.1851, + 96.5639 51.7484 12.1851, + 86.5768 99.9703 12.1851, + 70.6897 141.379 12.1851, + 49.9852 173.154 12.1851, + 25.8742 193.128 12.1851, + 6.12142e-15 199.941 12.1851, + -25.8742 193.128 12.1851, + -49.9852 173.154 12.1851, + -70.6897 141.379 12.1851, + -86.5768 99.9703 12.1851, + -96.5639 51.7484 12.1851, + -99.9703 2.44857e-14 12.1851, + -96.5639 -51.7484 12.1851, + -86.5768 -99.9703 12.1851, + -70.6897 -141.379 12.1851, + -49.9852 -173.154 12.1851, + -25.8742 -193.128 12.1851, + -1.83642e-14 -199.941 12.1851, + 25.8742 -193.128 12.1851, + 49.9852 -173.154 12.1851, + 70.6897 -141.379 12.1851, + 86.5768 -99.9703 12.1851, + 96.5639 -51.7484 12.1851, + 97.9796 0 -100, + 94.641 50.718 -100, + 84.8528 97.9796 -100, + 69.282 138.564 -100, + 48.9898 169.706 -100, + 25.359 189.282 -100, + 5.99952e-15 195.959 -100, + -25.359 189.282 -100, + -48.9898 169.706 -100, + -69.282 138.564 -100, + -84.8528 97.9796 -100, + -94.641 50.718 -100, + -97.9796 2.39981e-14 -100, + -94.641 -50.718 -100, + -84.8528 -97.9796 -100, + -69.282 -138.564 -100, + -48.9898 -169.706 -100, + -25.359 -189.282 -100, + -1.79986e-14 -195.959 -100, + 25.359 -189.282 -100, + 48.9898 -169.706 -100, + 69.282 -138.564 -100, + 84.8528 -97.9796 -100, + 94.641 -50.718 -100, + 0 0 -100, + 0 0 0, + ] + } + coordIndex [ + 0, 1, 2, -1, + 0, 2, 3, -1, + 0, 3, 4, -1, + 0, 4, 5, -1, + 0, 5, 6, -1, + 0, 6, 7, -1, + 0, 7, 8, -1, + 0, 8, 9, -1, + 0, 9, 10, -1, + 0, 10, 11, -1, + 0, 11, 12, -1, + 0, 12, 13, -1, + 0, 13, 14, -1, + 0, 14, 15, -1, + 0, 15, 16, -1, + 0, 16, 17, -1, + 0, 17, 18, -1, + 0, 18, 19, -1, + 0, 19, 20, -1, + 0, 20, 21, -1, + 0, 21, 22, -1, + 0, 22, 23, -1, + 0, 23, 24, -1, + 0, 24, 1, -1, + 1, 25, 26, 2, -1, + 2, 26, 27, 3, -1, + 3, 27, 28, 4, -1, + 4, 28, 29, 5, -1, + 5, 29, 30, 6, -1, + 6, 30, 31, 7, -1, + 7, 31, 32, 8, -1, + 8, 32, 33, 9, -1, + 9, 33, 34, 10, -1, + 10, 34, 35, 11, -1, + 11, 35, 36, 12, -1, + 12, 36, 37, 13, -1, + 13, 37, 38, 14, -1, + 14, 38, 39, 15, -1, + 15, 39, 40, 16, -1, + 16, 40, 41, 17, -1, + 17, 41, 42, 18, -1, + 18, 42, 43, 19, -1, + 19, 43, 44, 20, -1, + 20, 44, 45, 21, -1, + 21, 45, 46, 22, -1, + 22, 46, 47, 23, -1, + 23, 47, 48, 24, -1, + 24, 48, 25, 1, -1, + 25, 49, 50, 26, -1, + 26, 50, 51, 27, -1, + 27, 51, 52, 28, -1, + 28, 52, 53, 29, -1, + 29, 53, 54, 30, -1, + 30, 54, 55, 31, -1, + 31, 55, 56, 32, -1, + 32, 56, 57, 33, -1, + 33, 57, 58, 34, -1, + 34, 58, 59, 35, -1, + 35, 59, 60, 36, -1, + 36, 60, 61, 37, -1, + 37, 61, 62, 38, -1, + 38, 62, 63, 39, -1, + 39, 63, 64, 40, -1, + 40, 64, 65, 41, -1, + 41, 65, 66, 42, -1, + 42, 66, 67, 43, -1, + 43, 67, 68, 44, -1, + 44, 68, 69, 45, -1, + 45, 69, 70, 46, -1, + 46, 70, 71, 47, -1, + 47, 71, 72, 48, -1, + 48, 72, 49, 25, -1, + 49, 73, 74, 50, -1, + 50, 74, 75, 51, -1, + 51, 75, 76, 52, -1, + 52, 76, 77, 53, -1, + 53, 77, 78, 54, -1, + 54, 78, 79, 55, -1, + 55, 79, 80, 56, -1, + 56, 80, 81, 57, -1, + 57, 81, 82, 58, -1, + 58, 82, 83, 59, -1, + 59, 83, 84, 60, -1, + 60, 84, 85, 61, -1, + 61, 85, 86, 62, -1, + 62, 86, 87, 63, -1, + 63, 87, 88, 64, -1, + 64, 88, 89, 65, -1, + 65, 89, 90, 66, -1, + 66, 90, 91, 67, -1, + 67, 91, 92, 68, -1, + 68, 92, 93, 69, -1, + 69, 93, 94, 70, -1, + 70, 94, 95, 71, -1, + 71, 95, 96, 72, -1, + 72, 96, 73, 49, -1, + 73, 97, 98, 74, -1, + 74, 98, 99, 75, -1, + 75, 99, 100, 76, -1, + 76, 100, 101, 77, -1, + 77, 101, 102, 78, -1, + 78, 102, 103, 79, -1, + 79, 103, 104, 80, -1, + 80, 104, 105, 81, -1, + 81, 105, 106, 82, -1, + 82, 106, 107, 83, -1, + 83, 107, 108, 84, -1, + 84, 108, 109, 85, -1, + 85, 109, 110, 86, -1, + 86, 110, 111, 87, -1, + 87, 111, 112, 88, -1, + 88, 112, 113, 89, -1, + 89, 113, 114, 90, -1, + 90, 114, 115, 91, -1, + 91, 115, 116, 92, -1, + 92, 116, 117, 93, -1, + 93, 117, 118, 94, -1, + 94, 118, 119, 95, -1, + 95, 119, 120, 96, -1, + 96, 120, 97, 73, -1, + 97, 121, 122, 98, -1, + 98, 122, 123, 99, -1, + 99, 123, 124, 100, -1, + 100, 124, 125, 101, -1, + 101, 125, 126, 102, -1, + 102, 126, 127, 103, -1, + 103, 127, 128, 104, -1, + 104, 128, 129, 105, -1, + 105, 129, 130, 106, -1, + 106, 130, 131, 107, -1, + 107, 131, 132, 108, -1, + 108, 132, 133, 109, -1, + 109, 133, 134, 110, -1, + 110, 134, 135, 111, -1, + 111, 135, 136, 112, -1, + 112, 136, 137, 113, -1, + 113, 137, 138, 114, -1, + 114, 138, 139, 115, -1, + 115, 139, 140, 116, -1, + 116, 140, 141, 117, -1, + 117, 141, 142, 118, -1, + 118, 142, 143, 119, -1, + 119, 143, 144, 120, -1, + 120, 144, 121, 97, -1, + 121, 145, 122, -1, + 122, 145, 123, -1, + 123, 145, 124, -1, + 124, 145, 125, -1, + 125, 145, 126, -1, + 126, 145, 127, -1, + 127, 145, 128, -1, + 128, 145, 129, -1, + 129, 145, 130, -1, + 130, 145, 131, -1, + 131, 145, 132, -1, + 132, 145, 133, -1, + 133, 145, 134, -1, + 134, 145, 135, -1, + 135, 145, 136, -1, + 136, 145, 137, -1, + 137, 145, 138, -1, + 138, 145, 139, -1, + 139, 145, 140, -1, + 140, 145, 141, -1, + 141, 145, 142, -1, + 142, 145, 143, -1, + 143, 145, 144, -1, + 144, 145, 121, -1, + ] + solid FALSE + } + } +#---------- POLYLINE +Shape { + appearance Appearance { + material Material { + diffuseColor 1 0 0 + emissiveColor 1 0 0 + } + } + geometry IndexedLineSet { + coord Coordinate { + point [ + 0 0 0, + 100 0 0, + ] + } + coordIndex [ + 0, 1, -1 + ] + } +} +#---------- POLYLINE +Shape { + appearance Appearance { + material Material { + diffuseColor 0 1 0 + emissiveColor 0 1 0 + } + } + geometry IndexedLineSet { + coord Coordinate { + point [ + 0 0 0, + 0 100 0, + ] + } + coordIndex [ + 0, 1, -1 + ] + } +} +#---------- POLYLINE +Shape { + appearance Appearance { + material Material { + diffuseColor 0 0 1 + emissiveColor 0 0 1 + } + } + geometry IndexedLineSet { + coord Coordinate { + point [ + 0 0 0, + 0 0 100, + ] + } + coordIndex [ + 0, 1, -1 + ] + } +} +#End of file. diff --git a/environments/g4py/tests/gtest05/vrml/g4ellipticalcone.wrl b/environments/g4py/tests/gtest05/vrml/g4ellipticalcone.wrl new file mode 100644 index 0000000000..eaadbd0c71 --- /dev/null +++ b/environments/g4py/tests/gtest05/vrml/g4ellipticalcone.wrl @@ -0,0 +1,210 @@ +#VRML V2.0 utf8 +# Generated by VRML 2.0 driver of GEANT4 + + +#---------- CAMERA +Viewpoint { + position 0 0 452.607 +} + +#---------- SOLID: dummy.0 + Shape { + appearance Appearance { + material Material { + diffuseColor 1 0 1 + transparency 0.7 + } + } + geometry IndexedFaceSet { + coord Coordinate { + point [ + 75000 0 250, + 72444.4 38822.9 250, + 64951.9 75000 250, + 53033 106066 250, + 37500 129904 250, + 19411.4 144889 250, + 4.59243e-12 150000 250, + -19411.4 144889 250, + -37500 129904 250, + -53033 106066 250, + -64951.9 75000 250, + -72444.4 38822.9 250, + -75000 1.83697e-11 250, + -72444.4 -38822.9 250, + -64951.9 -75000 250, + -53033 -106066 250, + -37500 -129904 250, + -19411.4 -144889 250, + -1.37773e-11 -150000 250, + 19411.4 -144889 250, + 37500 -129904 250, + 53033 -106066 250, + 64951.9 -75000 250, + 72444.4 -38822.9 250, + 225000 0 -250, + 217333 116469 -250, + 194856 225000 -250, + 159099 318198 -250, + 112500 389711 -250, + 58234.3 434667 -250, + 1.37773e-11 450000 -250, + -58234.3 434667 -250, + -112500 389711 -250, + -159099 318198 -250, + -194856 225000 -250, + -217333 116469 -250, + -225000 5.51091e-11 -250, + -217333 -116469 -250, + -194856 -225000 -250, + -159099 -318198 -250, + -112500 -389711 -250, + -58234.3 -434667 -250, + -4.13318e-11 -450000 -250, + 58234.3 -434667 -250, + 112500 -389711 -250, + 159099 -318198 -250, + 194856 -225000 -250, + 217333 -116469 -250, + 0 0 250, + 0 0 -250, + ] + } + coordIndex [ + 0, 24, 25, 1, -1, + 1, 25, 26, 2, -1, + 2, 26, 27, 3, -1, + 3, 27, 28, 4, -1, + 4, 28, 29, 5, -1, + 5, 29, 30, 6, -1, + 6, 30, 31, 7, -1, + 7, 31, 32, 8, -1, + 8, 32, 33, 9, -1, + 9, 33, 34, 10, -1, + 10, 34, 35, 11, -1, + 11, 35, 36, 12, -1, + 12, 36, 37, 13, -1, + 13, 37, 38, 14, -1, + 14, 38, 39, 15, -1, + 15, 39, 40, 16, -1, + 16, 40, 41, 17, -1, + 17, 41, 42, 18, -1, + 18, 42, 43, 19, -1, + 19, 43, 44, 20, -1, + 20, 44, 45, 21, -1, + 21, 45, 46, 22, -1, + 22, 46, 47, 23, -1, + 23, 47, 24, 0, -1, + 48, 0, 1, -1, + 48, 1, 2, -1, + 48, 2, 3, -1, + 48, 3, 4, -1, + 48, 4, 5, -1, + 48, 5, 6, -1, + 48, 6, 7, -1, + 48, 7, 8, -1, + 48, 8, 9, -1, + 48, 9, 10, -1, + 48, 10, 11, -1, + 48, 11, 12, -1, + 48, 12, 13, -1, + 48, 13, 14, -1, + 48, 14, 15, -1, + 48, 15, 16, -1, + 48, 16, 17, -1, + 48, 17, 18, -1, + 48, 18, 19, -1, + 48, 19, 20, -1, + 48, 20, 21, -1, + 48, 21, 22, -1, + 48, 22, 23, -1, + 48, 23, 0, -1, + 24, 49, 25, -1, + 25, 49, 26, -1, + 26, 49, 27, -1, + 27, 49, 28, -1, + 28, 49, 29, -1, + 29, 49, 30, -1, + 30, 49, 31, -1, + 31, 49, 32, -1, + 32, 49, 33, -1, + 33, 49, 34, -1, + 34, 49, 35, -1, + 35, 49, 36, -1, + 36, 49, 37, -1, + 37, 49, 38, -1, + 38, 49, 39, -1, + 39, 49, 40, -1, + 40, 49, 41, -1, + 41, 49, 42, -1, + 42, 49, 43, -1, + 43, 49, 44, -1, + 44, 49, 45, -1, + 45, 49, 46, -1, + 46, 49, 47, -1, + 47, 49, 24, -1, + ] + solid FALSE + } + } +#---------- POLYLINE +Shape { + appearance Appearance { + material Material { + diffuseColor 1 0 0 + emissiveColor 1 0 0 + } + } + geometry IndexedLineSet { + coord Coordinate { + point [ + 0 0 0, + 100 0 0, + ] + } + coordIndex [ + 0, 1, -1 + ] + } +} +#---------- POLYLINE +Shape { + appearance Appearance { + material Material { + diffuseColor 0 1 0 + emissiveColor 0 1 0 + } + } + geometry IndexedLineSet { + coord Coordinate { + point [ + 0 0 0, + 0 100 0, + ] + } + coordIndex [ + 0, 1, -1 + ] + } +} +#---------- POLYLINE +Shape { + appearance Appearance { + material Material { + diffuseColor 0 0 1 + emissiveColor 0 0 1 + } + } + geometry IndexedLineSet { + coord Coordinate { + point [ + 0 0 0, + 0 0 100, + ] + } + coordIndex [ + 0, 1, -1 + ] + } +} +#End of file. diff --git a/environments/g4py/tests/gtest05/vrml/g4ellipticaltube.wrl b/environments/g4py/tests/gtest05/vrml/g4ellipticaltube.wrl new file mode 100644 index 0000000000..3efae86d7b --- /dev/null +++ b/environments/g4py/tests/gtest05/vrml/g4ellipticaltube.wrl @@ -0,0 +1,210 @@ +#VRML V2.0 utf8 +# Generated by VRML 2.0 driver of GEANT4 + + +#---------- CAMERA +Viewpoint { + position 0 0 452.607 +} + +#---------- SOLID: dummy.0 + Shape { + appearance Appearance { + material Material { + diffuseColor 0 1 1 + transparency 0.7 + } + } + geometry IndexedFaceSet { + coord Coordinate { + point [ + 50 0 200, + 48.2963 25.8819 200, + 43.3013 50 200, + 35.3553 70.7107 200, + 25 86.6025 200, + 12.941 96.5926 200, + 3.06162e-15 100 200, + -12.941 96.5926 200, + -25 86.6025 200, + -35.3553 70.7107 200, + -43.3013 50 200, + -48.2963 25.8819 200, + -50 1.22465e-14 200, + -48.2963 -25.8819 200, + -43.3013 -50 200, + -35.3553 -70.7107 200, + -25 -86.6025 200, + -12.941 -96.5926 200, + -9.18485e-15 -100 200, + 12.941 -96.5926 200, + 25 -86.6025 200, + 35.3553 -70.7107 200, + 43.3013 -50 200, + 48.2963 -25.8819 200, + 50 0 -200, + 48.2963 25.8819 -200, + 43.3013 50 -200, + 35.3553 70.7107 -200, + 25 86.6025 -200, + 12.941 96.5926 -200, + 3.06162e-15 100 -200, + -12.941 96.5926 -200, + -25 86.6025 -200, + -35.3553 70.7107 -200, + -43.3013 50 -200, + -48.2963 25.8819 -200, + -50 1.22465e-14 -200, + -48.2963 -25.8819 -200, + -43.3013 -50 -200, + -35.3553 -70.7107 -200, + -25 -86.6025 -200, + -12.941 -96.5926 -200, + -9.18485e-15 -100 -200, + 12.941 -96.5926 -200, + 25 -86.6025 -200, + 35.3553 -70.7107 -200, + 43.3013 -50 -200, + 48.2963 -25.8819 -200, + 0 0 200, + 0 0 -200, + ] + } + coordIndex [ + 0, 24, 25, 1, -1, + 1, 25, 26, 2, -1, + 2, 26, 27, 3, -1, + 3, 27, 28, 4, -1, + 4, 28, 29, 5, -1, + 5, 29, 30, 6, -1, + 6, 30, 31, 7, -1, + 7, 31, 32, 8, -1, + 8, 32, 33, 9, -1, + 9, 33, 34, 10, -1, + 10, 34, 35, 11, -1, + 11, 35, 36, 12, -1, + 12, 36, 37, 13, -1, + 13, 37, 38, 14, -1, + 14, 38, 39, 15, -1, + 15, 39, 40, 16, -1, + 16, 40, 41, 17, -1, + 17, 41, 42, 18, -1, + 18, 42, 43, 19, -1, + 19, 43, 44, 20, -1, + 20, 44, 45, 21, -1, + 21, 45, 46, 22, -1, + 22, 46, 47, 23, -1, + 23, 47, 24, 0, -1, + 48, 0, 1, -1, + 48, 1, 2, -1, + 48, 2, 3, -1, + 48, 3, 4, -1, + 48, 4, 5, -1, + 48, 5, 6, -1, + 48, 6, 7, -1, + 48, 7, 8, -1, + 48, 8, 9, -1, + 48, 9, 10, -1, + 48, 10, 11, -1, + 48, 11, 12, -1, + 48, 12, 13, -1, + 48, 13, 14, -1, + 48, 14, 15, -1, + 48, 15, 16, -1, + 48, 16, 17, -1, + 48, 17, 18, -1, + 48, 18, 19, -1, + 48, 19, 20, -1, + 48, 20, 21, -1, + 48, 21, 22, -1, + 48, 22, 23, -1, + 48, 23, 0, -1, + 24, 49, 25, -1, + 25, 49, 26, -1, + 26, 49, 27, -1, + 27, 49, 28, -1, + 28, 49, 29, -1, + 29, 49, 30, -1, + 30, 49, 31, -1, + 31, 49, 32, -1, + 32, 49, 33, -1, + 33, 49, 34, -1, + 34, 49, 35, -1, + 35, 49, 36, -1, + 36, 49, 37, -1, + 37, 49, 38, -1, + 38, 49, 39, -1, + 39, 49, 40, -1, + 40, 49, 41, -1, + 41, 49, 42, -1, + 42, 49, 43, -1, + 43, 49, 44, -1, + 44, 49, 45, -1, + 45, 49, 46, -1, + 46, 49, 47, -1, + 47, 49, 24, -1, + ] + solid FALSE + } + } +#---------- POLYLINE +Shape { + appearance Appearance { + material Material { + diffuseColor 1 0 0 + emissiveColor 1 0 0 + } + } + geometry IndexedLineSet { + coord Coordinate { + point [ + 0 0 0, + 100 0 0, + ] + } + coordIndex [ + 0, 1, -1 + ] + } +} +#---------- POLYLINE +Shape { + appearance Appearance { + material Material { + diffuseColor 0 1 0 + emissiveColor 0 1 0 + } + } + geometry IndexedLineSet { + coord Coordinate { + point [ + 0 0 0, + 0 100 0, + ] + } + coordIndex [ + 0, 1, -1 + ] + } +} +#---------- POLYLINE +Shape { + appearance Appearance { + material Material { + diffuseColor 0 0 1 + emissiveColor 0 0 1 + } + } + geometry IndexedLineSet { + coord Coordinate { + point [ + 0 0 0, + 0 0 100, + ] + } + coordIndex [ + 0, 1, -1 + ] + } +} +#End of file. diff --git a/environments/g4py/tests/gtest05/vrml/g4hype.wrl b/environments/g4py/tests/gtest05/vrml/g4hype.wrl new file mode 100644 index 0000000000..540feb7e63 --- /dev/null +++ b/environments/g4py/tests/gtest05/vrml/g4hype.wrl @@ -0,0 +1,2392 @@ +#VRML V2.0 utf8 +# Generated by VRML 2.0 driver of GEANT4 + + +#---------- CAMERA +Viewpoint { + position 0 0 452.607 +} + +#---------- SOLID: dummy.0 + Shape { + appearance Appearance { + material Material { + diffuseColor 0 0 1 + transparency 0.7 + } + } + geometry IndexedFaceSet { + coord Coordinate { + point [ + 517.071 0 500, + 499.452 133.828 500, + 447.797 258.536 500, + 365.624 365.624 500, + 258.536 447.797 500, + 133.828 499.452 500, + 3.16615e-14 517.071 500, + -133.828 499.452 500, + -258.536 447.797 500, + -365.624 365.624 500, + -447.797 258.536 500, + -499.452 133.828 500, + -517.071 6.33229e-14 500, + -499.452 -133.828 500, + -447.797 -258.536 500, + -365.624 -365.624 500, + -258.536 -447.797 500, + -133.828 -499.452 500, + -9.49844e-14 -517.071 500, + 133.828 -499.452 500, + 258.536 -447.797 500, + 365.624 -365.624 500, + 447.797 -258.536 500, + 499.452 -133.828 500, + 488.911 0 458.333, + 472.252 126.539 458.333, + 423.409 244.455 458.333, + 345.712 345.712 458.333, + 244.455 423.409 458.333, + 126.539 472.252 458.333, + 2.99371e-14 488.911 458.333, + -126.539 472.252 458.333, + -244.455 423.409 458.333, + -345.712 345.712 458.333, + -423.409 244.455 458.333, + -472.252 126.539 458.333, + -488.911 5.98743e-14 458.333, + -472.252 -126.539 458.333, + -423.409 -244.455 458.333, + -345.712 -345.712 458.333, + -244.455 -423.409 458.333, + -126.539 -472.252 458.333, + -8.98114e-14 -488.911 458.333, + 126.539 -472.252 458.333, + 244.455 -423.409 458.333, + 345.712 -345.712 458.333, + 423.409 -244.455 458.333, + 472.252 -126.539 458.333, + 461.702 0 416.667, + 445.969 119.497 416.667, + 399.845 230.851 416.667, + 326.472 326.472 416.667, + 230.851 399.845 416.667, + 119.497 445.969 416.667, + 2.82711e-14 461.702 416.667, + -119.497 445.969 416.667, + -230.851 399.845 416.667, + -326.472 326.472 416.667, + -399.845 230.851 416.667, + -445.969 119.497 416.667, + -461.702 5.65421e-14 416.667, + -445.969 -119.497 416.667, + -399.845 -230.851 416.667, + -326.472 -326.472 416.667, + -230.851 -399.845 416.667, + -119.497 -445.969 416.667, + -8.48132e-14 -461.702 416.667, + 119.497 -445.969 416.667, + 230.851 -399.845 416.667, + 326.472 -326.472 416.667, + 399.845 -230.851 416.667, + 445.969 -119.497 416.667, + 435.622 0 375, + 420.778 112.747 375, + 377.26 217.811 375, + 308.031 308.031 375, + 217.811 377.26 375, + 112.747 420.778 375, + 2.66741e-14 435.622 375, + -112.747 420.778 375, + -217.811 377.26 375, + -308.031 308.031 375, + -377.26 217.811 375, + -420.778 112.747 375, + -435.622 5.33483e-14 375, + -420.778 -112.747 375, + -377.26 -217.811 375, + -308.031 -308.031 375, + -217.811 -377.26 375, + -112.747 -420.778 375, + -8.00224e-14 -435.622 375, + 112.747 -420.778 375, + 217.811 -377.26 375, + 308.031 -308.031 375, + 377.26 -217.811 375, + 420.778 -112.747 375, + 410.887 0 333.333, + 396.886 106.345 333.333, + 355.838 205.443 333.333, + 290.541 290.541 333.333, + 205.443 355.838 333.333, + 106.345 396.886 333.333, + 2.51595e-14 410.887 333.333, + -106.345 396.886 333.333, + -205.443 355.838 333.333, + -290.541 290.541 333.333, + -355.838 205.443 333.333, + -396.886 106.345 333.333, + -410.887 5.03191e-14 333.333, + -396.886 -106.345 333.333, + -355.838 -205.443 333.333, + -290.541 -290.541 333.333, + -205.443 -355.838 333.333, + -106.345 -396.886 333.333, + -7.54786e-14 -410.887 333.333, + 106.345 -396.886 333.333, + 205.443 -355.838 333.333, + 290.541 -290.541 333.333, + 355.838 -205.443 333.333, + 396.886 -106.345 333.333, + 387.753 0 291.667, + 374.541 100.358 291.667, + 335.804 193.877 291.667, + 274.183 274.183 291.667, + 193.877 335.804 291.667, + 100.358 374.541 291.667, + 2.3743e-14 387.753 291.667, + -100.358 374.541 291.667, + -193.877 335.804 291.667, + -274.183 274.183 291.667, + -335.804 193.877 291.667, + -374.541 100.358 291.667, + -387.753 4.74861e-14 291.667, + -374.541 -100.358 291.667, + -335.804 -193.877 291.667, + -274.183 -274.183 291.667, + -193.877 -335.804 291.667, + -100.358 -374.541 291.667, + -7.12291e-14 -387.753 291.667, + 100.358 -374.541 291.667, + 193.877 -335.804 291.667, + 274.183 -274.183 291.667, + 335.804 -193.877 291.667, + 374.541 -100.358 291.667, + 366.525 0 250, + 354.036 94.8637 250, + 317.42 183.263 250, + 259.172 259.172 250, + 183.263 317.42 250, + 94.8637 354.036 250, + 2.24432e-14 366.525 250, + -94.8637 354.036 250, + -183.263 317.42 250, + -259.172 259.172 250, + -317.42 183.263 250, + -354.036 94.8637 250, + -366.525 4.48864e-14 250, + -354.036 -94.8637 250, + -317.42 -183.263 250, + -259.172 -259.172 250, + -183.263 -317.42 250, + -94.8637 -354.036 250, + -6.73296e-14 -366.525 250, + 94.8637 -354.036 250, + 183.263 -317.42 250, + 259.172 -259.172 250, + 317.42 -183.263 250, + 354.036 -94.8637 250, + 347.552 0 208.333, + 335.709 89.953 208.333, + 300.988 173.776 208.333, + 245.756 245.756 208.333, + 173.776 300.988 208.333, + 89.953 335.709 208.333, + 2.12814e-14 347.552 208.333, + -89.953 335.709 208.333, + -173.776 300.988 208.333, + -245.756 245.756 208.333, + -300.988 173.776 208.333, + -335.709 89.953 208.333, + -347.552 4.25628e-14 208.333, + -335.709 -89.953 208.333, + -300.988 -173.776 208.333, + -245.756 -245.756 208.333, + -173.776 -300.988 208.333, + -89.953 -335.709 208.333, + -6.38442e-14 -347.552 208.333, + 89.953 -335.709 208.333, + 173.776 -300.988 208.333, + 245.756 -245.756 208.333, + 300.988 -173.776 208.333, + 335.709 -89.953 208.333, + 331.22 0 166.667, + 319.934 85.7261 166.667, + 286.845 165.61 166.667, + 234.208 234.208 166.667, + 165.61 286.845 166.667, + 85.7261 319.934 166.667, + 2.02814e-14 331.22 166.667, + -85.7261 319.934 166.667, + -165.61 286.845 166.667, + -234.208 234.208 166.667, + -286.845 165.61 166.667, + -319.934 85.7261 166.667, + -331.22 4.05628e-14 166.667, + -319.934 -85.7261 166.667, + -286.845 -165.61 166.667, + -234.208 -234.208 166.667, + -165.61 -286.845 166.667, + -85.7261 -319.934 166.667, + -6.08442e-14 -331.22 166.667, + 85.7261 -319.934 166.667, + 165.61 -286.845 166.667, + 234.208 -234.208 166.667, + 286.845 -165.61 166.667, + 319.934 -85.7261 166.667, + 317.939 0 125, + 307.105 82.2886 125, + 275.343 158.969 125, + 224.817 224.817 125, + 158.969 275.343 125, + 82.2886 307.105 125, + 1.94681e-14 317.939 125, + -82.2886 307.105 125, + -158.969 275.343 125, + -224.817 224.817 125, + -275.343 158.969 125, + -307.105 82.2886 125, + -317.939 3.89363e-14 125, + -307.105 -82.2886 125, + -275.343 -158.969 125, + -224.817 -224.817 125, + -158.969 -275.343 125, + -82.2886 -307.105 125, + -5.84044e-14 -317.939 125, + 82.2886 -307.105 125, + 158.969 -275.343 125, + 224.817 -224.817 125, + 275.343 -158.969 125, + 307.105 -82.2886 125, + 308.102 0 83.3333, + 297.604 79.7426 83.3333, + 266.824 154.051 83.3333, + 217.861 217.861 83.3333, + 154.051 266.824 83.3333, + 79.7426 297.604 83.3333, + 1.88658e-14 308.102 83.3333, + -79.7426 297.604 83.3333, + -154.051 266.824 83.3333, + -217.861 217.861 83.3333, + -266.824 154.051 83.3333, + -297.604 79.7426 83.3333, + -308.102 3.77316e-14 83.3333, + -297.604 -79.7426 83.3333, + -266.824 -154.051 83.3333, + -217.861 -217.861 83.3333, + -154.051 -266.824 83.3333, + -79.7426 -297.604 83.3333, + -5.65974e-14 -308.102 83.3333, + 79.7426 -297.604 83.3333, + 154.051 -266.824 83.3333, + 217.861 -217.861 83.3333, + 266.824 -154.051 83.3333, + 297.604 -79.7426 83.3333, + 302.046 0 41.6667, + 291.754 78.1752 41.6667, + 261.579 151.023 41.6667, + 213.579 213.579 41.6667, + 151.023 261.579 41.6667, + 78.1752 291.754 41.6667, + 1.8495e-14 302.046 41.6667, + -78.1752 291.754 41.6667, + -151.023 261.579 41.6667, + -213.579 213.579 41.6667, + -261.579 151.023 41.6667, + -291.754 78.1752 41.6667, + -302.046 3.69899e-14 41.6667, + -291.754 -78.1752 41.6667, + -261.579 -151.023 41.6667, + -213.579 -213.579 41.6667, + -151.023 -261.579 41.6667, + -78.1752 -291.754 41.6667, + -5.54849e-14 -302.046 41.6667, + 78.1752 -291.754 41.6667, + 151.023 -261.579 41.6667, + 213.579 -213.579 41.6667, + 261.579 -151.023 41.6667, + 291.754 -78.1752 41.6667, + 300 0 -4.26326e-14, + 289.778 77.6457 -4.26326e-14, + 259.808 150 -4.26326e-14, + 212.132 212.132 -4.26326e-14, + 150 259.808 -4.26326e-14, + 77.6457 289.778 -4.26326e-14, + 1.83697e-14 300 -4.26326e-14, + -77.6457 289.778 -4.26326e-14, + -150 259.808 -4.26326e-14, + -212.132 212.132 -4.26326e-14, + -259.808 150 -4.26326e-14, + -289.778 77.6457 -4.26326e-14, + -300 3.67394e-14 -4.26326e-14, + -289.778 -77.6457 -4.26326e-14, + -259.808 -150 -4.26326e-14, + -212.132 -212.132 -4.26326e-14, + -150 -259.808 -4.26326e-14, + -77.6457 -289.778 -4.26326e-14, + -5.51091e-14 -300 -4.26326e-14, + 77.6457 -289.778 -4.26326e-14, + 150 -259.808 -4.26326e-14, + 212.132 -212.132 -4.26326e-14, + 259.808 -150 -4.26326e-14, + 289.778 -77.6457 -4.26326e-14, + 302.046 0 -41.6667, + 291.754 78.1752 -41.6667, + 261.579 151.023 -41.6667, + 213.579 213.579 -41.6667, + 151.023 261.579 -41.6667, + 78.1752 291.754 -41.6667, + 1.8495e-14 302.046 -41.6667, + -78.1752 291.754 -41.6667, + -151.023 261.579 -41.6667, + -213.579 213.579 -41.6667, + -261.579 151.023 -41.6667, + -291.754 78.1752 -41.6667, + -302.046 3.69899e-14 -41.6667, + -291.754 -78.1752 -41.6667, + -261.579 -151.023 -41.6667, + -213.579 -213.579 -41.6667, + -151.023 -261.579 -41.6667, + -78.1752 -291.754 -41.6667, + -5.54849e-14 -302.046 -41.6667, + 78.1752 -291.754 -41.6667, + 151.023 -261.579 -41.6667, + 213.579 -213.579 -41.6667, + 261.579 -151.023 -41.6667, + 291.754 -78.1752 -41.6667, + 308.102 0 -83.3333, + 297.604 79.7426 -83.3333, + 266.824 154.051 -83.3333, + 217.861 217.861 -83.3333, + 154.051 266.824 -83.3333, + 79.7426 297.604 -83.3333, + 1.88658e-14 308.102 -83.3333, + -79.7426 297.604 -83.3333, + -154.051 266.824 -83.3333, + -217.861 217.861 -83.3333, + -266.824 154.051 -83.3333, + -297.604 79.7426 -83.3333, + -308.102 3.77316e-14 -83.3333, + -297.604 -79.7426 -83.3333, + -266.824 -154.051 -83.3333, + -217.861 -217.861 -83.3333, + -154.051 -266.824 -83.3333, + -79.7426 -297.604 -83.3333, + -5.65974e-14 -308.102 -83.3333, + 79.7426 -297.604 -83.3333, + 154.051 -266.824 -83.3333, + 217.861 -217.861 -83.3333, + 266.824 -154.051 -83.3333, + 297.604 -79.7426 -83.3333, + 317.939 0 -125, + 307.105 82.2886 -125, + 275.343 158.969 -125, + 224.817 224.817 -125, + 158.969 275.343 -125, + 82.2886 307.105 -125, + 1.94681e-14 317.939 -125, + -82.2886 307.105 -125, + -158.969 275.343 -125, + -224.817 224.817 -125, + -275.343 158.969 -125, + -307.105 82.2886 -125, + -317.939 3.89363e-14 -125, + -307.105 -82.2886 -125, + -275.343 -158.969 -125, + -224.817 -224.817 -125, + -158.969 -275.343 -125, + -82.2886 -307.105 -125, + -5.84044e-14 -317.939 -125, + 82.2886 -307.105 -125, + 158.969 -275.343 -125, + 224.817 -224.817 -125, + 275.343 -158.969 -125, + 307.105 -82.2886 -125, + 331.22 0 -166.667, + 319.934 85.7261 -166.667, + 286.845 165.61 -166.667, + 234.208 234.208 -166.667, + 165.61 286.845 -166.667, + 85.7261 319.934 -166.667, + 2.02814e-14 331.22 -166.667, + -85.7261 319.934 -166.667, + -165.61 286.845 -166.667, + -234.208 234.208 -166.667, + -286.845 165.61 -166.667, + -319.934 85.7261 -166.667, + -331.22 4.05628e-14 -166.667, + -319.934 -85.7261 -166.667, + -286.845 -165.61 -166.667, + -234.208 -234.208 -166.667, + -165.61 -286.845 -166.667, + -85.7261 -319.934 -166.667, + -6.08442e-14 -331.22 -166.667, + 85.7261 -319.934 -166.667, + 165.61 -286.845 -166.667, + 234.208 -234.208 -166.667, + 286.845 -165.61 -166.667, + 319.934 -85.7261 -166.667, + 347.552 0 -208.333, + 335.709 89.953 -208.333, + 300.988 173.776 -208.333, + 245.756 245.756 -208.333, + 173.776 300.988 -208.333, + 89.953 335.709 -208.333, + 2.12814e-14 347.552 -208.333, + -89.953 335.709 -208.333, + -173.776 300.988 -208.333, + -245.756 245.756 -208.333, + -300.988 173.776 -208.333, + -335.709 89.953 -208.333, + -347.552 4.25628e-14 -208.333, + -335.709 -89.953 -208.333, + -300.988 -173.776 -208.333, + -245.756 -245.756 -208.333, + -173.776 -300.988 -208.333, + -89.953 -335.709 -208.333, + -6.38442e-14 -347.552 -208.333, + 89.953 -335.709 -208.333, + 173.776 -300.988 -208.333, + 245.756 -245.756 -208.333, + 300.988 -173.776 -208.333, + 335.709 -89.953 -208.333, + 366.525 0 -250, + 354.036 94.8637 -250, + 317.42 183.263 -250, + 259.172 259.172 -250, + 183.263 317.42 -250, + 94.8637 354.036 -250, + 2.24432e-14 366.525 -250, + -94.8637 354.036 -250, + -183.263 317.42 -250, + -259.172 259.172 -250, + -317.42 183.263 -250, + -354.036 94.8637 -250, + -366.525 4.48864e-14 -250, + -354.036 -94.8637 -250, + -317.42 -183.263 -250, + -259.172 -259.172 -250, + -183.263 -317.42 -250, + -94.8637 -354.036 -250, + -6.73296e-14 -366.525 -250, + 94.8637 -354.036 -250, + 183.263 -317.42 -250, + 259.172 -259.172 -250, + 317.42 -183.263 -250, + 354.036 -94.8637 -250, + 387.753 0 -291.667, + 374.541 100.358 -291.667, + 335.804 193.877 -291.667, + 274.183 274.183 -291.667, + 193.877 335.804 -291.667, + 100.358 374.541 -291.667, + 2.3743e-14 387.753 -291.667, + -100.358 374.541 -291.667, + -193.877 335.804 -291.667, + -274.183 274.183 -291.667, + -335.804 193.877 -291.667, + -374.541 100.358 -291.667, + -387.753 4.74861e-14 -291.667, + -374.541 -100.358 -291.667, + -335.804 -193.877 -291.667, + -274.183 -274.183 -291.667, + -193.877 -335.804 -291.667, + -100.358 -374.541 -291.667, + -7.12291e-14 -387.753 -291.667, + 100.358 -374.541 -291.667, + 193.877 -335.804 -291.667, + 274.183 -274.183 -291.667, + 335.804 -193.877 -291.667, + 374.541 -100.358 -291.667, + 410.887 0 -333.333, + 396.886 106.345 -333.333, + 355.838 205.443 -333.333, + 290.541 290.541 -333.333, + 205.443 355.838 -333.333, + 106.345 396.886 -333.333, + 2.51595e-14 410.887 -333.333, + -106.345 396.886 -333.333, + -205.443 355.838 -333.333, + -290.541 290.541 -333.333, + -355.838 205.443 -333.333, + -396.886 106.345 -333.333, + -410.887 5.03191e-14 -333.333, + -396.886 -106.345 -333.333, + -355.838 -205.443 -333.333, + -290.541 -290.541 -333.333, + -205.443 -355.838 -333.333, + -106.345 -396.886 -333.333, + -7.54786e-14 -410.887 -333.333, + 106.345 -396.886 -333.333, + 205.443 -355.838 -333.333, + 290.541 -290.541 -333.333, + 355.838 -205.443 -333.333, + 396.886 -106.345 -333.333, + 435.622 0 -375, + 420.778 112.747 -375, + 377.26 217.811 -375, + 308.031 308.031 -375, + 217.811 377.26 -375, + 112.747 420.778 -375, + 2.66741e-14 435.622 -375, + -112.747 420.778 -375, + -217.811 377.26 -375, + -308.031 308.031 -375, + -377.26 217.811 -375, + -420.778 112.747 -375, + -435.622 5.33483e-14 -375, + -420.778 -112.747 -375, + -377.26 -217.811 -375, + -308.031 -308.031 -375, + -217.811 -377.26 -375, + -112.747 -420.778 -375, + -8.00224e-14 -435.622 -375, + 112.747 -420.778 -375, + 217.811 -377.26 -375, + 308.031 -308.031 -375, + 377.26 -217.811 -375, + 420.778 -112.747 -375, + 461.702 0 -416.667, + 445.969 119.497 -416.667, + 399.845 230.851 -416.667, + 326.472 326.472 -416.667, + 230.851 399.845 -416.667, + 119.497 445.969 -416.667, + 2.82711e-14 461.702 -416.667, + -119.497 445.969 -416.667, + -230.851 399.845 -416.667, + -326.472 326.472 -416.667, + -399.845 230.851 -416.667, + -445.969 119.497 -416.667, + -461.702 5.65421e-14 -416.667, + -445.969 -119.497 -416.667, + -399.845 -230.851 -416.667, + -326.472 -326.472 -416.667, + -230.851 -399.845 -416.667, + -119.497 -445.969 -416.667, + -8.48132e-14 -461.702 -416.667, + 119.497 -445.969 -416.667, + 230.851 -399.845 -416.667, + 326.472 -326.472 -416.667, + 399.845 -230.851 -416.667, + 445.969 -119.497 -416.667, + 517.071 0 -500, + 499.452 133.828 -500, + 447.797 258.536 -500, + 365.624 365.624 -500, + 258.536 447.797 -500, + 133.828 499.452 -500, + 3.16615e-14 517.071 -500, + -133.828 499.452 -500, + -258.536 447.797 -500, + -365.624 365.624 -500, + -447.797 258.536 -500, + -499.452 133.828 -500, + -517.071 6.33229e-14 -500, + -499.452 -133.828 -500, + -447.797 -258.536 -500, + -365.624 -365.624 -500, + -258.536 -447.797 -500, + -133.828 -499.452 -500, + -9.49844e-14 -517.071 -500, + 133.828 -499.452 -500, + 258.536 -447.797 -500, + 365.624 -365.624 -500, + 447.797 -258.536 -500, + 499.452 -133.828 -500, + 466.221 0 500, + 450.335 120.667 500, + 403.76 233.111 500, + 329.668 329.668 500, + 233.111 403.76 500, + 120.667 450.335 500, + 2.85478e-14 466.221 500, + -120.667 450.335 500, + -233.111 403.76 500, + -329.668 329.668 500, + -403.76 233.111 500, + -450.335 120.667 500, + -466.221 5.70957e-14 500, + -450.335 -120.667 500, + -403.76 -233.111 500, + -329.668 -329.668 500, + -233.111 -403.76 500, + -120.667 -450.335 500, + -8.56435e-14 -466.221 500, + 120.667 -450.335 500, + 233.111 -403.76 500, + 329.668 -329.668 500, + 403.76 -233.111 500, + 450.335 -120.667 500, + 434.78 0 458.333, + 419.965 112.529 458.333, + 376.531 217.39 458.333, + 307.436 307.436 458.333, + 217.39 376.531 458.333, + 112.529 419.965 458.333, + 2.66226e-14 434.78 458.333, + -112.529 419.965 458.333, + -217.39 376.531 458.333, + -307.436 307.436 458.333, + -376.531 217.39 458.333, + -419.965 112.529 458.333, + -434.78 5.32452e-14 458.333, + -419.965 -112.529 458.333, + -376.531 -217.39 458.333, + -307.436 -307.436 458.333, + -217.39 -376.531 458.333, + -112.529 -419.965 458.333, + -7.98678e-14 -434.78 458.333, + 112.529 -419.965 458.333, + 217.39 -376.531 458.333, + 307.436 -307.436 458.333, + 376.531 -217.39 458.333, + 419.965 -112.529 458.333, + 403.941 0 416.667, + 390.177 104.548 416.667, + 349.823 201.971 416.667, + 285.629 285.629 416.667, + 201.971 349.823 416.667, + 104.548 390.177 416.667, + 2.47343e-14 403.941 416.667, + -104.548 390.177 416.667, + -201.971 349.823 416.667, + -285.629 285.629 416.667, + -349.823 201.971 416.667, + -390.177 104.548 416.667, + -403.941 4.94685e-14 416.667, + -390.177 -104.548 416.667, + -349.823 -201.971 416.667, + -285.629 -285.629 416.667, + -201.971 -349.823 416.667, + -104.548 -390.177 416.667, + -7.42028e-14 -403.941 416.667, + 104.548 -390.177 416.667, + 201.971 -349.823 416.667, + 285.629 -285.629 416.667, + 349.823 -201.971 416.667, + 390.177 -104.548 416.667, + 373.853 0 375, + 361.115 96.7604 375, + 323.767 186.927 375, + 264.354 264.354 375, + 186.927 323.767 375, + 96.7604 361.115 375, + 2.28919e-14 373.853 375, + -96.7604 361.115 375, + -186.927 323.767 375, + -264.354 264.354 375, + -323.767 186.927 375, + -361.115 96.7604 375, + -373.853 4.57838e-14 375, + -361.115 -96.7604 375, + -323.767 -186.927 375, + -264.354 -264.354 375, + -186.927 -323.767 375, + -96.7604 -361.115 375, + -6.86758e-14 -373.853 375, + 96.7604 -361.115 375, + 186.927 -323.767 375, + 264.354 -264.354 375, + 323.767 -186.927 375, + 361.115 -96.7604 375, + 344.714 0 333.333, + 332.968 89.2185 333.333, + 298.531 172.357 333.333, + 243.75 243.75 333.333, + 172.357 298.531 333.333, + 89.2185 332.968 333.333, + 2.11076e-14 344.714 333.333, + -89.2185 332.968 333.333, + -172.357 298.531 333.333, + -243.75 243.75 333.333, + -298.531 172.357 333.333, + -332.968 89.2185 333.333, + -344.714 4.22153e-14 333.333, + -332.968 -89.2185 333.333, + -298.531 -172.357 333.333, + -243.75 -243.75 333.333, + -172.357 -298.531 333.333, + -89.2185 -332.968 333.333, + -6.33229e-14 -344.714 333.333, + 89.2185 -332.968 333.333, + 172.357 -298.531 333.333, + 243.75 -243.75 333.333, + 298.531 -172.357 333.333, + 332.968 -89.2185 333.333, + 316.785 0 291.667, + 305.99 81.9899 291.667, + 274.344 158.392 291.667, + 224.001 224.001 291.667, + 158.392 274.344 291.667, + 81.9899 305.99 291.667, + 1.93975e-14 316.785 291.667, + -81.9899 305.99 291.667, + -158.392 274.344 291.667, + -224.001 224.001 291.667, + -274.344 158.392 291.667, + -305.99 81.9899 291.667, + -316.785 3.87949e-14 291.667, + -305.99 -81.9899 291.667, + -274.344 -158.392 291.667, + -224.001 -224.001 291.667, + -158.392 -274.344 291.667, + -81.9899 -305.99 291.667, + -5.81924e-14 -316.785 291.667, + 81.9899 -305.99 291.667, + 158.392 -274.344 291.667, + 224.001 -224.001 291.667, + 274.344 -158.392 291.667, + 305.99 -81.9899 291.667, + 290.415 0 250, + 280.519 75.1648 250, + 251.506 145.207 250, + 205.354 205.354 250, + 145.207 251.506 250, + 75.1648 280.519 250, + 1.77828e-14 290.415 250, + -75.1648 280.519 250, + -145.207 251.506 250, + -205.354 205.354 250, + -251.506 145.207 250, + -280.519 75.1648 250, + -290.415 3.55655e-14 250, + -280.519 -75.1648 250, + -251.506 -145.207 250, + -205.354 -205.354 250, + -145.207 -251.506 250, + -75.1648 -280.519 250, + -5.33483e-14 -290.415 250, + 75.1648 -280.519 250, + 145.207 -251.506 250, + 205.354 -205.354 250, + 251.506 -145.207 250, + 280.519 -75.1648 250, + 266.068 0 208.333, + 257.002 68.8634 208.333, + 230.421 133.034 208.333, + 188.138 188.138 208.333, + 133.034 230.421 208.333, + 68.8634 257.002 208.333, + 1.6292e-14 266.068 208.333, + -68.8634 257.002 208.333, + -133.034 230.421 208.333, + -188.138 188.138 208.333, + -230.421 133.034 208.333, + -257.002 68.8634 208.333, + -266.068 3.25839e-14 208.333, + -257.002 -68.8634 208.333, + -230.421 -133.034 208.333, + -188.138 -188.138 208.333, + -133.034 -230.421 208.333, + -68.8634 -257.002 208.333, + -4.88759e-14 -266.068 208.333, + 68.8634 -257.002 208.333, + 133.034 -230.421 208.333, + 188.138 -188.138 208.333, + 230.421 -133.034 208.333, + 257.002 -68.8634 208.333, + 244.35 0 166.667, + 236.024 63.2424 166.667, + 211.613 122.175 166.667, + 172.782 172.782 166.667, + 122.175 211.613 166.667, + 63.2424 236.024 166.667, + 1.49621e-14 244.35 166.667, + -63.2424 236.024 166.667, + -122.175 211.613 166.667, + -172.782 172.782 166.667, + -211.613 122.175 166.667, + -236.024 63.2424 166.667, + -244.35 2.99242e-14 166.667, + -236.024 -63.2424 166.667, + -211.613 -122.175 166.667, + -172.782 -172.782 166.667, + -122.175 -211.613 166.667, + -63.2424 -236.024 166.667, + -4.48864e-14 -244.35 166.667, + 63.2424 -236.024 166.667, + 122.175 -211.613 166.667, + 172.782 -172.782 166.667, + 211.613 -122.175 166.667, + 236.024 -63.2424 166.667, + 226.02 0 125, + 218.319 58.4983 125, + 195.739 113.01 125, + 159.82 159.82 125, + 113.01 195.739 125, + 58.4983 218.319 125, + 1.38397e-14 226.02 125, + -58.4983 218.319 125, + -113.01 195.739 125, + -159.82 159.82 125, + -195.739 113.01 125, + -218.319 58.4983 125, + -226.02 2.76795e-14 125, + -218.319 -58.4983 125, + -195.739 -113.01 125, + -159.82 -159.82 125, + -113.01 -195.739 125, + -58.4983 -218.319 125, + -4.15192e-14 -226.02 125, + 58.4983 -218.319 125, + 113.01 -195.739 125, + 159.82 -159.82 125, + 195.739 -113.01 125, + 218.319 -58.4983 125, + 211.959 0 83.3333, + 204.737 54.8591 83.3333, + 183.562 105.98 83.3333, + 149.878 149.878 83.3333, + 105.98 183.562 83.3333, + 54.8591 204.737 83.3333, + 1.29788e-14 211.959 83.3333, + -54.8591 204.737 83.3333, + -105.98 183.562 83.3333, + -149.878 149.878 83.3333, + -183.562 105.98 83.3333, + -204.737 54.8591 83.3333, + -211.959 2.59575e-14 83.3333, + -204.737 -54.8591 83.3333, + -183.562 -105.98 83.3333, + -149.878 -149.878 83.3333, + -105.98 -183.562 83.3333, + -54.8591 -204.737 83.3333, + -3.89363e-14 -211.959 83.3333, + 54.8591 -204.737 83.3333, + 105.98 -183.562 83.3333, + 149.878 -149.878 83.3333, + 183.562 -105.98 83.3333, + 204.737 -54.8591 83.3333, + 203.056 0 41.6667, + 196.137 52.5547 41.6667, + 175.852 101.528 41.6667, + 143.582 143.582 41.6667, + 101.528 175.852 41.6667, + 52.5547 196.137 41.6667, + 1.24336e-14 203.056 41.6667, + -52.5547 196.137 41.6667, + -101.528 175.852 41.6667, + -143.582 143.582 41.6667, + -175.852 101.528 41.6667, + -196.137 52.5547 41.6667, + -203.056 2.48672e-14 41.6667, + -196.137 -52.5547 41.6667, + -175.852 -101.528 41.6667, + -143.582 -143.582 41.6667, + -101.528 -175.852 41.6667, + -52.5547 -196.137 41.6667, + -3.73008e-14 -203.056 41.6667, + 52.5547 -196.137 41.6667, + 101.528 -175.852 41.6667, + 143.582 -143.582 41.6667, + 175.852 -101.528 41.6667, + 196.137 -52.5547 41.6667, + 200 0 -4.26326e-14, + 193.185 51.7638 -4.26326e-14, + 173.205 100 -4.26326e-14, + 141.421 141.421 -4.26326e-14, + 100 173.205 -4.26326e-14, + 51.7638 193.185 -4.26326e-14, + 1.22465e-14 200 -4.26326e-14, + -51.7638 193.185 -4.26326e-14, + -100 173.205 -4.26326e-14, + -141.421 141.421 -4.26326e-14, + -173.205 100 -4.26326e-14, + -193.185 51.7638 -4.26326e-14, + -200 2.44929e-14 -4.26326e-14, + -193.185 -51.7638 -4.26326e-14, + -173.205 -100 -4.26326e-14, + -141.421 -141.421 -4.26326e-14, + -100 -173.205 -4.26326e-14, + -51.7638 -193.185 -4.26326e-14, + -3.67394e-14 -200 -4.26326e-14, + 51.7638 -193.185 -4.26326e-14, + 100 -173.205 -4.26326e-14, + 141.421 -141.421 -4.26326e-14, + 173.205 -100 -4.26326e-14, + 193.185 -51.7638 -4.26326e-14, + 203.056 0 -41.6667, + 196.137 52.5547 -41.6667, + 175.852 101.528 -41.6667, + 143.582 143.582 -41.6667, + 101.528 175.852 -41.6667, + 52.5547 196.137 -41.6667, + 1.24336e-14 203.056 -41.6667, + -52.5547 196.137 -41.6667, + -101.528 175.852 -41.6667, + -143.582 143.582 -41.6667, + -175.852 101.528 -41.6667, + -196.137 52.5547 -41.6667, + -203.056 2.48672e-14 -41.6667, + -196.137 -52.5547 -41.6667, + -175.852 -101.528 -41.6667, + -143.582 -143.582 -41.6667, + -101.528 -175.852 -41.6667, + -52.5547 -196.137 -41.6667, + -3.73008e-14 -203.056 -41.6667, + 52.5547 -196.137 -41.6667, + 101.528 -175.852 -41.6667, + 143.582 -143.582 -41.6667, + 175.852 -101.528 -41.6667, + 196.137 -52.5547 -41.6667, + 211.959 0 -83.3333, + 204.737 54.8591 -83.3333, + 183.562 105.98 -83.3333, + 149.878 149.878 -83.3333, + 105.98 183.562 -83.3333, + 54.8591 204.737 -83.3333, + 1.29788e-14 211.959 -83.3333, + -54.8591 204.737 -83.3333, + -105.98 183.562 -83.3333, + -149.878 149.878 -83.3333, + -183.562 105.98 -83.3333, + -204.737 54.8591 -83.3333, + -211.959 2.59575e-14 -83.3333, + -204.737 -54.8591 -83.3333, + -183.562 -105.98 -83.3333, + -149.878 -149.878 -83.3333, + -105.98 -183.562 -83.3333, + -54.8591 -204.737 -83.3333, + -3.89363e-14 -211.959 -83.3333, + 54.8591 -204.737 -83.3333, + 105.98 -183.562 -83.3333, + 149.878 -149.878 -83.3333, + 183.562 -105.98 -83.3333, + 204.737 -54.8591 -83.3333, + 226.02 0 -125, + 218.319 58.4983 -125, + 195.739 113.01 -125, + 159.82 159.82 -125, + 113.01 195.739 -125, + 58.4983 218.319 -125, + 1.38397e-14 226.02 -125, + -58.4983 218.319 -125, + -113.01 195.739 -125, + -159.82 159.82 -125, + -195.739 113.01 -125, + -218.319 58.4983 -125, + -226.02 2.76795e-14 -125, + -218.319 -58.4983 -125, + -195.739 -113.01 -125, + -159.82 -159.82 -125, + -113.01 -195.739 -125, + -58.4983 -218.319 -125, + -4.15192e-14 -226.02 -125, + 58.4983 -218.319 -125, + 113.01 -195.739 -125, + 159.82 -159.82 -125, + 195.739 -113.01 -125, + 218.319 -58.4983 -125, + 244.35 0 -166.667, + 236.024 63.2424 -166.667, + 211.613 122.175 -166.667, + 172.782 172.782 -166.667, + 122.175 211.613 -166.667, + 63.2424 236.024 -166.667, + 1.49621e-14 244.35 -166.667, + -63.2424 236.024 -166.667, + -122.175 211.613 -166.667, + -172.782 172.782 -166.667, + -211.613 122.175 -166.667, + -236.024 63.2424 -166.667, + -244.35 2.99242e-14 -166.667, + -236.024 -63.2424 -166.667, + -211.613 -122.175 -166.667, + -172.782 -172.782 -166.667, + -122.175 -211.613 -166.667, + -63.2424 -236.024 -166.667, + -4.48864e-14 -244.35 -166.667, + 63.2424 -236.024 -166.667, + 122.175 -211.613 -166.667, + 172.782 -172.782 -166.667, + 211.613 -122.175 -166.667, + 236.024 -63.2424 -166.667, + 266.068 0 -208.333, + 257.002 68.8634 -208.333, + 230.421 133.034 -208.333, + 188.138 188.138 -208.333, + 133.034 230.421 -208.333, + 68.8634 257.002 -208.333, + 1.6292e-14 266.068 -208.333, + -68.8634 257.002 -208.333, + -133.034 230.421 -208.333, + -188.138 188.138 -208.333, + -230.421 133.034 -208.333, + -257.002 68.8634 -208.333, + -266.068 3.25839e-14 -208.333, + -257.002 -68.8634 -208.333, + -230.421 -133.034 -208.333, + -188.138 -188.138 -208.333, + -133.034 -230.421 -208.333, + -68.8634 -257.002 -208.333, + -4.88759e-14 -266.068 -208.333, + 68.8634 -257.002 -208.333, + 133.034 -230.421 -208.333, + 188.138 -188.138 -208.333, + 230.421 -133.034 -208.333, + 257.002 -68.8634 -208.333, + 290.415 0 -250, + 280.519 75.1648 -250, + 251.506 145.207 -250, + 205.354 205.354 -250, + 145.207 251.506 -250, + 75.1648 280.519 -250, + 1.77828e-14 290.415 -250, + -75.1648 280.519 -250, + -145.207 251.506 -250, + -205.354 205.354 -250, + -251.506 145.207 -250, + -280.519 75.1648 -250, + -290.415 3.55655e-14 -250, + -280.519 -75.1648 -250, + -251.506 -145.207 -250, + -205.354 -205.354 -250, + -145.207 -251.506 -250, + -75.1648 -280.519 -250, + -5.33483e-14 -290.415 -250, + 75.1648 -280.519 -250, + 145.207 -251.506 -250, + 205.354 -205.354 -250, + 251.506 -145.207 -250, + 280.519 -75.1648 -250, + 316.785 0 -291.667, + 305.99 81.9899 -291.667, + 274.344 158.392 -291.667, + 224.001 224.001 -291.667, + 158.392 274.344 -291.667, + 81.9899 305.99 -291.667, + 1.93975e-14 316.785 -291.667, + -81.9899 305.99 -291.667, + -158.392 274.344 -291.667, + -224.001 224.001 -291.667, + -274.344 158.392 -291.667, + -305.99 81.9899 -291.667, + -316.785 3.87949e-14 -291.667, + -305.99 -81.9899 -291.667, + -274.344 -158.392 -291.667, + -224.001 -224.001 -291.667, + -158.392 -274.344 -291.667, + -81.9899 -305.99 -291.667, + -5.81924e-14 -316.785 -291.667, + 81.9899 -305.99 -291.667, + 158.392 -274.344 -291.667, + 224.001 -224.001 -291.667, + 274.344 -158.392 -291.667, + 305.99 -81.9899 -291.667, + 344.714 0 -333.333, + 332.968 89.2185 -333.333, + 298.531 172.357 -333.333, + 243.75 243.75 -333.333, + 172.357 298.531 -333.333, + 89.2185 332.968 -333.333, + 2.11076e-14 344.714 -333.333, + -89.2185 332.968 -333.333, + -172.357 298.531 -333.333, + -243.75 243.75 -333.333, + -298.531 172.357 -333.333, + -332.968 89.2185 -333.333, + -344.714 4.22153e-14 -333.333, + -332.968 -89.2185 -333.333, + -298.531 -172.357 -333.333, + -243.75 -243.75 -333.333, + -172.357 -298.531 -333.333, + -89.2185 -332.968 -333.333, + -6.33229e-14 -344.714 -333.333, + 89.2185 -332.968 -333.333, + 172.357 -298.531 -333.333, + 243.75 -243.75 -333.333, + 298.531 -172.357 -333.333, + 332.968 -89.2185 -333.333, + 373.853 0 -375, + 361.115 96.7604 -375, + 323.767 186.927 -375, + 264.354 264.354 -375, + 186.927 323.767 -375, + 96.7604 361.115 -375, + 2.28919e-14 373.853 -375, + -96.7604 361.115 -375, + -186.927 323.767 -375, + -264.354 264.354 -375, + -323.767 186.927 -375, + -361.115 96.7604 -375, + -373.853 4.57838e-14 -375, + -361.115 -96.7604 -375, + -323.767 -186.927 -375, + -264.354 -264.354 -375, + -186.927 -323.767 -375, + -96.7604 -361.115 -375, + -6.86758e-14 -373.853 -375, + 96.7604 -361.115 -375, + 186.927 -323.767 -375, + 264.354 -264.354 -375, + 323.767 -186.927 -375, + 361.115 -96.7604 -375, + 403.941 0 -416.667, + 390.177 104.548 -416.667, + 349.823 201.971 -416.667, + 285.629 285.629 -416.667, + 201.971 349.823 -416.667, + 104.548 390.177 -416.667, + 2.47343e-14 403.941 -416.667, + -104.548 390.177 -416.667, + -201.971 349.823 -416.667, + -285.629 285.629 -416.667, + -349.823 201.971 -416.667, + -390.177 104.548 -416.667, + -403.941 4.94685e-14 -416.667, + -390.177 -104.548 -416.667, + -349.823 -201.971 -416.667, + -285.629 -285.629 -416.667, + -201.971 -349.823 -416.667, + -104.548 -390.177 -416.667, + -7.42028e-14 -403.941 -416.667, + 104.548 -390.177 -416.667, + 201.971 -349.823 -416.667, + 285.629 -285.629 -416.667, + 349.823 -201.971 -416.667, + 390.177 -104.548 -416.667, + 434.78 0 -458.333, + 419.965 112.529 -458.333, + 376.531 217.39 -458.333, + 307.436 307.436 -458.333, + 217.39 376.531 -458.333, + 112.529 419.965 -458.333, + 2.66226e-14 434.78 -458.333, + -112.529 419.965 -458.333, + -217.39 376.531 -458.333, + -307.436 307.436 -458.333, + -376.531 217.39 -458.333, + -419.965 112.529 -458.333, + -434.78 5.32452e-14 -458.333, + -419.965 -112.529 -458.333, + -376.531 -217.39 -458.333, + -307.436 -307.436 -458.333, + -217.39 -376.531 -458.333, + -112.529 -419.965 -458.333, + -7.98678e-14 -434.78 -458.333, + 112.529 -419.965 -458.333, + 217.39 -376.531 -458.333, + 307.436 -307.436 -458.333, + 376.531 -217.39 -458.333, + 419.965 -112.529 -458.333, + ] + } + coordIndex [ + 0, 24, 25, 1, -1, + 1, 25, 26, 2, -1, + 2, 26, 27, 3, -1, + 3, 27, 28, 4, -1, + 4, 28, 29, 5, -1, + 5, 29, 30, 6, -1, + 6, 30, 31, 7, -1, + 7, 31, 32, 8, -1, + 8, 32, 33, 9, -1, + 9, 33, 34, 10, -1, + 10, 34, 35, 11, -1, + 11, 35, 36, 12, -1, + 12, 36, 37, 13, -1, + 13, 37, 38, 14, -1, + 14, 38, 39, 15, -1, + 15, 39, 40, 16, -1, + 16, 40, 41, 17, -1, + 17, 41, 42, 18, -1, + 18, 42, 43, 19, -1, + 19, 43, 44, 20, -1, + 20, 44, 45, 21, -1, + 21, 45, 46, 22, -1, + 22, 46, 47, 23, -1, + 23, 47, 24, 0, -1, + 24, 48, 49, 25, -1, + 25, 49, 50, 26, -1, + 26, 50, 51, 27, -1, + 27, 51, 52, 28, -1, + 28, 52, 53, 29, -1, + 29, 53, 54, 30, -1, + 30, 54, 55, 31, -1, + 31, 55, 56, 32, -1, + 32, 56, 57, 33, -1, + 33, 57, 58, 34, -1, + 34, 58, 59, 35, -1, + 35, 59, 60, 36, -1, + 36, 60, 61, 37, -1, + 37, 61, 62, 38, -1, + 38, 62, 63, 39, -1, + 39, 63, 64, 40, -1, + 40, 64, 65, 41, -1, + 41, 65, 66, 42, -1, + 42, 66, 67, 43, -1, + 43, 67, 68, 44, -1, + 44, 68, 69, 45, -1, + 45, 69, 70, 46, -1, + 46, 70, 71, 47, -1, + 47, 71, 48, 24, -1, + 48, 72, 73, 49, -1, + 49, 73, 74, 50, -1, + 50, 74, 75, 51, -1, + 51, 75, 76, 52, -1, + 52, 76, 77, 53, -1, + 53, 77, 78, 54, -1, + 54, 78, 79, 55, -1, + 55, 79, 80, 56, -1, + 56, 80, 81, 57, -1, + 57, 81, 82, 58, -1, + 58, 82, 83, 59, -1, + 59, 83, 84, 60, -1, + 60, 84, 85, 61, -1, + 61, 85, 86, 62, -1, + 62, 86, 87, 63, -1, + 63, 87, 88, 64, -1, + 64, 88, 89, 65, -1, + 65, 89, 90, 66, -1, + 66, 90, 91, 67, -1, + 67, 91, 92, 68, -1, + 68, 92, 93, 69, -1, + 69, 93, 94, 70, -1, + 70, 94, 95, 71, -1, + 71, 95, 72, 48, -1, + 72, 96, 97, 73, -1, + 73, 97, 98, 74, -1, + 74, 98, 99, 75, -1, + 75, 99, 100, 76, -1, + 76, 100, 101, 77, -1, + 77, 101, 102, 78, -1, + 78, 102, 103, 79, -1, + 79, 103, 104, 80, -1, + 80, 104, 105, 81, -1, + 81, 105, 106, 82, -1, + 82, 106, 107, 83, -1, + 83, 107, 108, 84, -1, + 84, 108, 109, 85, -1, + 85, 109, 110, 86, -1, + 86, 110, 111, 87, -1, + 87, 111, 112, 88, -1, + 88, 112, 113, 89, -1, + 89, 113, 114, 90, -1, + 90, 114, 115, 91, -1, + 91, 115, 116, 92, -1, + 92, 116, 117, 93, -1, + 93, 117, 118, 94, -1, + 94, 118, 119, 95, -1, + 95, 119, 96, 72, -1, + 96, 120, 121, 97, -1, + 97, 121, 122, 98, -1, + 98, 122, 123, 99, -1, + 99, 123, 124, 100, -1, + 100, 124, 125, 101, -1, + 101, 125, 126, 102, -1, + 102, 126, 127, 103, -1, + 103, 127, 128, 104, -1, + 104, 128, 129, 105, -1, + 105, 129, 130, 106, -1, + 106, 130, 131, 107, -1, + 107, 131, 132, 108, -1, + 108, 132, 133, 109, -1, + 109, 133, 134, 110, -1, + 110, 134, 135, 111, -1, + 111, 135, 136, 112, -1, + 112, 136, 137, 113, -1, + 113, 137, 138, 114, -1, + 114, 138, 139, 115, -1, + 115, 139, 140, 116, -1, + 116, 140, 141, 117, -1, + 117, 141, 142, 118, -1, + 118, 142, 143, 119, -1, + 119, 143, 120, 96, -1, + 120, 144, 145, 121, -1, + 121, 145, 146, 122, -1, + 122, 146, 147, 123, -1, + 123, 147, 148, 124, -1, + 124, 148, 149, 125, -1, + 125, 149, 150, 126, -1, + 126, 150, 151, 127, -1, + 127, 151, 152, 128, -1, + 128, 152, 153, 129, -1, + 129, 153, 154, 130, -1, + 130, 154, 155, 131, -1, + 131, 155, 156, 132, -1, + 132, 156, 157, 133, -1, + 133, 157, 158, 134, -1, + 134, 158, 159, 135, -1, + 135, 159, 160, 136, -1, + 136, 160, 161, 137, -1, + 137, 161, 162, 138, -1, + 138, 162, 163, 139, -1, + 139, 163, 164, 140, -1, + 140, 164, 165, 141, -1, + 141, 165, 166, 142, -1, + 142, 166, 167, 143, -1, + 143, 167, 144, 120, -1, + 144, 168, 169, 145, -1, + 145, 169, 170, 146, -1, + 146, 170, 171, 147, -1, + 147, 171, 172, 148, -1, + 148, 172, 173, 149, -1, + 149, 173, 174, 150, -1, + 150, 174, 175, 151, -1, + 151, 175, 176, 152, -1, + 152, 176, 177, 153, -1, + 153, 177, 178, 154, -1, + 154, 178, 179, 155, -1, + 155, 179, 180, 156, -1, + 156, 180, 181, 157, -1, + 157, 181, 182, 158, -1, + 158, 182, 183, 159, -1, + 159, 183, 184, 160, -1, + 160, 184, 185, 161, -1, + 161, 185, 186, 162, -1, + 162, 186, 187, 163, -1, + 163, 187, 188, 164, -1, + 164, 188, 189, 165, -1, + 165, 189, 190, 166, -1, + 166, 190, 191, 167, -1, + 167, 191, 168, 144, -1, + 168, 192, 193, 169, -1, + 169, 193, 194, 170, -1, + 170, 194, 195, 171, -1, + 171, 195, 196, 172, -1, + 172, 196, 197, 173, -1, + 173, 197, 198, 174, -1, + 174, 198, 199, 175, -1, + 175, 199, 200, 176, -1, + 176, 200, 201, 177, -1, + 177, 201, 202, 178, -1, + 178, 202, 203, 179, -1, + 179, 203, 204, 180, -1, + 180, 204, 205, 181, -1, + 181, 205, 206, 182, -1, + 182, 206, 207, 183, -1, + 183, 207, 208, 184, -1, + 184, 208, 209, 185, -1, + 185, 209, 210, 186, -1, + 186, 210, 211, 187, -1, + 187, 211, 212, 188, -1, + 188, 212, 213, 189, -1, + 189, 213, 214, 190, -1, + 190, 214, 215, 191, -1, + 191, 215, 192, 168, -1, + 192, 216, 217, 193, -1, + 193, 217, 218, 194, -1, + 194, 218, 219, 195, -1, + 195, 219, 220, 196, -1, + 196, 220, 221, 197, -1, + 197, 221, 222, 198, -1, + 198, 222, 223, 199, -1, + 199, 223, 224, 200, -1, + 200, 224, 225, 201, -1, + 201, 225, 226, 202, -1, + 202, 226, 227, 203, -1, + 203, 227, 228, 204, -1, + 204, 228, 229, 205, -1, + 205, 229, 230, 206, -1, + 206, 230, 231, 207, -1, + 207, 231, 232, 208, -1, + 208, 232, 233, 209, -1, + 209, 233, 234, 210, -1, + 210, 234, 235, 211, -1, + 211, 235, 236, 212, -1, + 212, 236, 237, 213, -1, + 213, 237, 238, 214, -1, + 214, 238, 239, 215, -1, + 215, 239, 216, 192, -1, + 216, 240, 241, 217, -1, + 217, 241, 242, 218, -1, + 218, 242, 243, 219, -1, + 219, 243, 244, 220, -1, + 220, 244, 245, 221, -1, + 221, 245, 246, 222, -1, + 222, 246, 247, 223, -1, + 223, 247, 248, 224, -1, + 224, 248, 249, 225, -1, + 225, 249, 250, 226, -1, + 226, 250, 251, 227, -1, + 227, 251, 252, 228, -1, + 228, 252, 253, 229, -1, + 229, 253, 254, 230, -1, + 230, 254, 255, 231, -1, + 231, 255, 256, 232, -1, + 232, 256, 257, 233, -1, + 233, 257, 258, 234, -1, + 234, 258, 259, 235, -1, + 235, 259, 260, 236, -1, + 236, 260, 261, 237, -1, + 237, 261, 262, 238, -1, + 238, 262, 263, 239, -1, + 239, 263, 240, 216, -1, + 240, 264, 265, 241, -1, + 241, 265, 266, 242, -1, + 242, 266, 267, 243, -1, + 243, 267, 268, 244, -1, + 244, 268, 269, 245, -1, + 245, 269, 270, 246, -1, + 246, 270, 271, 247, -1, + 247, 271, 272, 248, -1, + 248, 272, 273, 249, -1, + 249, 273, 274, 250, -1, + 250, 274, 275, 251, -1, + 251, 275, 276, 252, -1, + 252, 276, 277, 253, -1, + 253, 277, 278, 254, -1, + 254, 278, 279, 255, -1, + 255, 279, 280, 256, -1, + 256, 280, 281, 257, -1, + 257, 281, 282, 258, -1, + 258, 282, 283, 259, -1, + 259, 283, 284, 260, -1, + 260, 284, 285, 261, -1, + 261, 285, 286, 262, -1, + 262, 286, 287, 263, -1, + 263, 287, 264, 240, -1, + 264, 288, 289, 265, -1, + 265, 289, 290, 266, -1, + 266, 290, 291, 267, -1, + 267, 291, 292, 268, -1, + 268, 292, 293, 269, -1, + 269, 293, 294, 270, -1, + 270, 294, 295, 271, -1, + 271, 295, 296, 272, -1, + 272, 296, 297, 273, -1, + 273, 297, 298, 274, -1, + 274, 298, 299, 275, -1, + 275, 299, 300, 276, -1, + 276, 300, 301, 277, -1, + 277, 301, 302, 278, -1, + 278, 302, 303, 279, -1, + 279, 303, 304, 280, -1, + 280, 304, 305, 281, -1, + 281, 305, 306, 282, -1, + 282, 306, 307, 283, -1, + 283, 307, 308, 284, -1, + 284, 308, 309, 285, -1, + 285, 309, 310, 286, -1, + 286, 310, 311, 287, -1, + 287, 311, 288, 264, -1, + 288, 312, 313, 289, -1, + 289, 313, 314, 290, -1, + 290, 314, 315, 291, -1, + 291, 315, 316, 292, -1, + 292, 316, 317, 293, -1, + 293, 317, 318, 294, -1, + 294, 318, 319, 295, -1, + 295, 319, 320, 296, -1, + 296, 320, 321, 297, -1, + 297, 321, 322, 298, -1, + 298, 322, 323, 299, -1, + 299, 323, 324, 300, -1, + 300, 324, 325, 301, -1, + 301, 325, 326, 302, -1, + 302, 326, 327, 303, -1, + 303, 327, 328, 304, -1, + 304, 328, 329, 305, -1, + 305, 329, 330, 306, -1, + 306, 330, 331, 307, -1, + 307, 331, 332, 308, -1, + 308, 332, 333, 309, -1, + 309, 333, 334, 310, -1, + 310, 334, 335, 311, -1, + 311, 335, 312, 288, -1, + 312, 336, 337, 313, -1, + 313, 337, 338, 314, -1, + 314, 338, 339, 315, -1, + 315, 339, 340, 316, -1, + 316, 340, 341, 317, -1, + 317, 341, 342, 318, -1, + 318, 342, 343, 319, -1, + 319, 343, 344, 320, -1, + 320, 344, 345, 321, -1, + 321, 345, 346, 322, -1, + 322, 346, 347, 323, -1, + 323, 347, 348, 324, -1, + 324, 348, 349, 325, -1, + 325, 349, 350, 326, -1, + 326, 350, 351, 327, -1, + 327, 351, 352, 328, -1, + 328, 352, 353, 329, -1, + 329, 353, 354, 330, -1, + 330, 354, 355, 331, -1, + 331, 355, 356, 332, -1, + 332, 356, 357, 333, -1, + 333, 357, 358, 334, -1, + 334, 358, 359, 335, -1, + 335, 359, 336, 312, -1, + 336, 360, 361, 337, -1, + 337, 361, 362, 338, -1, + 338, 362, 363, 339, -1, + 339, 363, 364, 340, -1, + 340, 364, 365, 341, -1, + 341, 365, 366, 342, -1, + 342, 366, 367, 343, -1, + 343, 367, 368, 344, -1, + 344, 368, 369, 345, -1, + 345, 369, 370, 346, -1, + 346, 370, 371, 347, -1, + 347, 371, 372, 348, -1, + 348, 372, 373, 349, -1, + 349, 373, 374, 350, -1, + 350, 374, 375, 351, -1, + 351, 375, 376, 352, -1, + 352, 376, 377, 353, -1, + 353, 377, 378, 354, -1, + 354, 378, 379, 355, -1, + 355, 379, 380, 356, -1, + 356, 380, 381, 357, -1, + 357, 381, 382, 358, -1, + 358, 382, 383, 359, -1, + 359, 383, 360, 336, -1, + 360, 384, 385, 361, -1, + 361, 385, 386, 362, -1, + 362, 386, 387, 363, -1, + 363, 387, 388, 364, -1, + 364, 388, 389, 365, -1, + 365, 389, 390, 366, -1, + 366, 390, 391, 367, -1, + 367, 391, 392, 368, -1, + 368, 392, 393, 369, -1, + 369, 393, 394, 370, -1, + 370, 394, 395, 371, -1, + 371, 395, 396, 372, -1, + 372, 396, 397, 373, -1, + 373, 397, 398, 374, -1, + 374, 398, 399, 375, -1, + 375, 399, 400, 376, -1, + 376, 400, 401, 377, -1, + 377, 401, 402, 378, -1, + 378, 402, 403, 379, -1, + 379, 403, 404, 380, -1, + 380, 404, 405, 381, -1, + 381, 405, 406, 382, -1, + 382, 406, 407, 383, -1, + 383, 407, 384, 360, -1, + 384, 408, 409, 385, -1, + 385, 409, 410, 386, -1, + 386, 410, 411, 387, -1, + 387, 411, 412, 388, -1, + 388, 412, 413, 389, -1, + 389, 413, 414, 390, -1, + 390, 414, 415, 391, -1, + 391, 415, 416, 392, -1, + 392, 416, 417, 393, -1, + 393, 417, 418, 394, -1, + 394, 418, 419, 395, -1, + 395, 419, 420, 396, -1, + 396, 420, 421, 397, -1, + 397, 421, 422, 398, -1, + 398, 422, 423, 399, -1, + 399, 423, 424, 400, -1, + 400, 424, 425, 401, -1, + 401, 425, 426, 402, -1, + 402, 426, 427, 403, -1, + 403, 427, 428, 404, -1, + 404, 428, 429, 405, -1, + 405, 429, 430, 406, -1, + 406, 430, 431, 407, -1, + 407, 431, 408, 384, -1, + 408, 432, 433, 409, -1, + 409, 433, 434, 410, -1, + 410, 434, 435, 411, -1, + 411, 435, 436, 412, -1, + 412, 436, 437, 413, -1, + 413, 437, 438, 414, -1, + 414, 438, 439, 415, -1, + 415, 439, 440, 416, -1, + 416, 440, 441, 417, -1, + 417, 441, 442, 418, -1, + 418, 442, 443, 419, -1, + 419, 443, 444, 420, -1, + 420, 444, 445, 421, -1, + 421, 445, 446, 422, -1, + 422, 446, 447, 423, -1, + 423, 447, 448, 424, -1, + 424, 448, 449, 425, -1, + 425, 449, 450, 426, -1, + 426, 450, 451, 427, -1, + 427, 451, 452, 428, -1, + 428, 452, 453, 429, -1, + 429, 453, 454, 430, -1, + 430, 454, 455, 431, -1, + 431, 455, 432, 408, -1, + 432, 456, 457, 433, -1, + 433, 457, 458, 434, -1, + 434, 458, 459, 435, -1, + 435, 459, 460, 436, -1, + 436, 460, 461, 437, -1, + 437, 461, 462, 438, -1, + 438, 462, 463, 439, -1, + 439, 463, 464, 440, -1, + 440, 464, 465, 441, -1, + 441, 465, 466, 442, -1, + 442, 466, 467, 443, -1, + 443, 467, 468, 444, -1, + 444, 468, 469, 445, -1, + 445, 469, 470, 446, -1, + 446, 470, 471, 447, -1, + 447, 471, 472, 448, -1, + 448, 472, 473, 449, -1, + 449, 473, 474, 450, -1, + 450, 474, 475, 451, -1, + 451, 475, 476, 452, -1, + 452, 476, 477, 453, -1, + 453, 477, 478, 454, -1, + 454, 478, 479, 455, -1, + 455, 479, 456, 432, -1, + 456, 480, 481, 457, -1, + 457, 481, 482, 458, -1, + 458, 482, 483, 459, -1, + 459, 483, 484, 460, -1, + 460, 484, 485, 461, -1, + 461, 485, 486, 462, -1, + 462, 486, 487, 463, -1, + 463, 487, 488, 464, -1, + 464, 488, 489, 465, -1, + 465, 489, 490, 466, -1, + 466, 490, 491, 467, -1, + 467, 491, 492, 468, -1, + 468, 492, 493, 469, -1, + 469, 493, 494, 470, -1, + 470, 494, 495, 471, -1, + 471, 495, 496, 472, -1, + 472, 496, 497, 473, -1, + 473, 497, 498, 474, -1, + 474, 498, 499, 475, -1, + 475, 499, 500, 476, -1, + 476, 500, 501, 477, -1, + 477, 501, 502, 478, -1, + 478, 502, 503, 479, -1, + 479, 503, 480, 456, -1, + 480, 504, 505, 481, -1, + 481, 505, 506, 482, -1, + 482, 506, 507, 483, -1, + 483, 507, 508, 484, -1, + 484, 508, 509, 485, -1, + 485, 509, 510, 486, -1, + 486, 510, 511, 487, -1, + 487, 511, 512, 488, -1, + 488, 512, 513, 489, -1, + 489, 513, 514, 490, -1, + 490, 514, 515, 491, -1, + 491, 515, 516, 492, -1, + 492, 516, 517, 493, -1, + 493, 517, 518, 494, -1, + 494, 518, 519, 495, -1, + 495, 519, 520, 496, -1, + 496, 520, 521, 497, -1, + 497, 521, 522, 498, -1, + 498, 522, 523, 499, -1, + 499, 523, 524, 500, -1, + 500, 524, 525, 501, -1, + 501, 525, 526, 502, -1, + 502, 526, 527, 503, -1, + 503, 527, 504, 480, -1, + 504, 528, 529, 505, -1, + 505, 529, 530, 506, -1, + 506, 530, 531, 507, -1, + 507, 531, 532, 508, -1, + 508, 532, 533, 509, -1, + 509, 533, 534, 510, -1, + 510, 534, 535, 511, -1, + 511, 535, 536, 512, -1, + 512, 536, 537, 513, -1, + 513, 537, 538, 514, -1, + 514, 538, 539, 515, -1, + 515, 539, 540, 516, -1, + 516, 540, 541, 517, -1, + 517, 541, 542, 518, -1, + 518, 542, 543, 519, -1, + 519, 543, 544, 520, -1, + 520, 544, 545, 521, -1, + 521, 545, 546, 522, -1, + 522, 546, 547, 523, -1, + 523, 547, 548, 524, -1, + 524, 548, 549, 525, -1, + 525, 549, 550, 526, -1, + 526, 550, 551, 527, -1, + 527, 551, 528, 504, -1, + 528, 552, 553, 529, -1, + 529, 553, 554, 530, -1, + 530, 554, 555, 531, -1, + 531, 555, 556, 532, -1, + 532, 556, 557, 533, -1, + 533, 557, 558, 534, -1, + 534, 558, 559, 535, -1, + 535, 559, 560, 536, -1, + 536, 560, 561, 537, -1, + 537, 561, 562, 538, -1, + 538, 562, 563, 539, -1, + 539, 563, 564, 540, -1, + 540, 564, 565, 541, -1, + 541, 565, 566, 542, -1, + 542, 566, 567, 543, -1, + 543, 567, 568, 544, -1, + 544, 568, 569, 545, -1, + 545, 569, 570, 546, -1, + 546, 570, 571, 547, -1, + 547, 571, 572, 548, -1, + 548, 572, 573, 549, -1, + 549, 573, 574, 550, -1, + 550, 574, 575, 551, -1, + 551, 575, 552, 528, -1, + 600, 576, 577, 601, -1, + 601, 577, 578, 602, -1, + 602, 578, 579, 603, -1, + 603, 579, 580, 604, -1, + 604, 580, 581, 605, -1, + 605, 581, 582, 606, -1, + 606, 582, 583, 607, -1, + 607, 583, 584, 608, -1, + 608, 584, 585, 609, -1, + 609, 585, 586, 610, -1, + 610, 586, 587, 611, -1, + 611, 587, 588, 612, -1, + 612, 588, 589, 613, -1, + 613, 589, 590, 614, -1, + 614, 590, 591, 615, -1, + 615, 591, 592, 616, -1, + 616, 592, 593, 617, -1, + 617, 593, 594, 618, -1, + 618, 594, 595, 619, -1, + 619, 595, 596, 620, -1, + 620, 596, 597, 621, -1, + 621, 597, 598, 622, -1, + 622, 598, 599, 623, -1, + 623, 599, 576, 600, -1, + 624, 600, 601, 625, -1, + 625, 601, 602, 626, -1, + 626, 602, 603, 627, -1, + 627, 603, 604, 628, -1, + 628, 604, 605, 629, -1, + 629, 605, 606, 630, -1, + 630, 606, 607, 631, -1, + 631, 607, 608, 632, -1, + 632, 608, 609, 633, -1, + 633, 609, 610, 634, -1, + 634, 610, 611, 635, -1, + 635, 611, 612, 636, -1, + 636, 612, 613, 637, -1, + 637, 613, 614, 638, -1, + 638, 614, 615, 639, -1, + 639, 615, 616, 640, -1, + 640, 616, 617, 641, -1, + 641, 617, 618, 642, -1, + 642, 618, 619, 643, -1, + 643, 619, 620, 644, -1, + 644, 620, 621, 645, -1, + 645, 621, 622, 646, -1, + 646, 622, 623, 647, -1, + 647, 623, 600, 624, -1, + 648, 624, 625, 649, -1, + 649, 625, 626, 650, -1, + 650, 626, 627, 651, -1, + 651, 627, 628, 652, -1, + 652, 628, 629, 653, -1, + 653, 629, 630, 654, -1, + 654, 630, 631, 655, -1, + 655, 631, 632, 656, -1, + 656, 632, 633, 657, -1, + 657, 633, 634, 658, -1, + 658, 634, 635, 659, -1, + 659, 635, 636, 660, -1, + 660, 636, 637, 661, -1, + 661, 637, 638, 662, -1, + 662, 638, 639, 663, -1, + 663, 639, 640, 664, -1, + 664, 640, 641, 665, -1, + 665, 641, 642, 666, -1, + 666, 642, 643, 667, -1, + 667, 643, 644, 668, -1, + 668, 644, 645, 669, -1, + 669, 645, 646, 670, -1, + 670, 646, 647, 671, -1, + 671, 647, 624, 648, -1, + 672, 648, 649, 673, -1, + 673, 649, 650, 674, -1, + 674, 650, 651, 675, -1, + 675, 651, 652, 676, -1, + 676, 652, 653, 677, -1, + 677, 653, 654, 678, -1, + 678, 654, 655, 679, -1, + 679, 655, 656, 680, -1, + 680, 656, 657, 681, -1, + 681, 657, 658, 682, -1, + 682, 658, 659, 683, -1, + 683, 659, 660, 684, -1, + 684, 660, 661, 685, -1, + 685, 661, 662, 686, -1, + 686, 662, 663, 687, -1, + 687, 663, 664, 688, -1, + 688, 664, 665, 689, -1, + 689, 665, 666, 690, -1, + 690, 666, 667, 691, -1, + 691, 667, 668, 692, -1, + 692, 668, 669, 693, -1, + 693, 669, 670, 694, -1, + 694, 670, 671, 695, -1, + 695, 671, 648, 672, -1, + 696, 672, 673, 697, -1, + 697, 673, 674, 698, -1, + 698, 674, 675, 699, -1, + 699, 675, 676, 700, -1, + 700, 676, 677, 701, -1, + 701, 677, 678, 702, -1, + 702, 678, 679, 703, -1, + 703, 679, 680, 704, -1, + 704, 680, 681, 705, -1, + 705, 681, 682, 706, -1, + 706, 682, 683, 707, -1, + 707, 683, 684, 708, -1, + 708, 684, 685, 709, -1, + 709, 685, 686, 710, -1, + 710, 686, 687, 711, -1, + 711, 687, 688, 712, -1, + 712, 688, 689, 713, -1, + 713, 689, 690, 714, -1, + 714, 690, 691, 715, -1, + 715, 691, 692, 716, -1, + 716, 692, 693, 717, -1, + 717, 693, 694, 718, -1, + 718, 694, 695, 719, -1, + 719, 695, 672, 696, -1, + 720, 696, 697, 721, -1, + 721, 697, 698, 722, -1, + 722, 698, 699, 723, -1, + 723, 699, 700, 724, -1, + 724, 700, 701, 725, -1, + 725, 701, 702, 726, -1, + 726, 702, 703, 727, -1, + 727, 703, 704, 728, -1, + 728, 704, 705, 729, -1, + 729, 705, 706, 730, -1, + 730, 706, 707, 731, -1, + 731, 707, 708, 732, -1, + 732, 708, 709, 733, -1, + 733, 709, 710, 734, -1, + 734, 710, 711, 735, -1, + 735, 711, 712, 736, -1, + 736, 712, 713, 737, -1, + 737, 713, 714, 738, -1, + 738, 714, 715, 739, -1, + 739, 715, 716, 740, -1, + 740, 716, 717, 741, -1, + 741, 717, 718, 742, -1, + 742, 718, 719, 743, -1, + 743, 719, 696, 720, -1, + 744, 720, 721, 745, -1, + 745, 721, 722, 746, -1, + 746, 722, 723, 747, -1, + 747, 723, 724, 748, -1, + 748, 724, 725, 749, -1, + 749, 725, 726, 750, -1, + 750, 726, 727, 751, -1, + 751, 727, 728, 752, -1, + 752, 728, 729, 753, -1, + 753, 729, 730, 754, -1, + 754, 730, 731, 755, -1, + 755, 731, 732, 756, -1, + 756, 732, 733, 757, -1, + 757, 733, 734, 758, -1, + 758, 734, 735, 759, -1, + 759, 735, 736, 760, -1, + 760, 736, 737, 761, -1, + 761, 737, 738, 762, -1, + 762, 738, 739, 763, -1, + 763, 739, 740, 764, -1, + 764, 740, 741, 765, -1, + 765, 741, 742, 766, -1, + 766, 742, 743, 767, -1, + 767, 743, 720, 744, -1, + 768, 744, 745, 769, -1, + 769, 745, 746, 770, -1, + 770, 746, 747, 771, -1, + 771, 747, 748, 772, -1, + 772, 748, 749, 773, -1, + 773, 749, 750, 774, -1, + 774, 750, 751, 775, -1, + 775, 751, 752, 776, -1, + 776, 752, 753, 777, -1, + 777, 753, 754, 778, -1, + 778, 754, 755, 779, -1, + 779, 755, 756, 780, -1, + 780, 756, 757, 781, -1, + 781, 757, 758, 782, -1, + 782, 758, 759, 783, -1, + 783, 759, 760, 784, -1, + 784, 760, 761, 785, -1, + 785, 761, 762, 786, -1, + 786, 762, 763, 787, -1, + 787, 763, 764, 788, -1, + 788, 764, 765, 789, -1, + 789, 765, 766, 790, -1, + 790, 766, 767, 791, -1, + 791, 767, 744, 768, -1, + 792, 768, 769, 793, -1, + 793, 769, 770, 794, -1, + 794, 770, 771, 795, -1, + 795, 771, 772, 796, -1, + 796, 772, 773, 797, -1, + 797, 773, 774, 798, -1, + 798, 774, 775, 799, -1, + 799, 775, 776, 800, -1, + 800, 776, 777, 801, -1, + 801, 777, 778, 802, -1, + 802, 778, 779, 803, -1, + 803, 779, 780, 804, -1, + 804, 780, 781, 805, -1, + 805, 781, 782, 806, -1, + 806, 782, 783, 807, -1, + 807, 783, 784, 808, -1, + 808, 784, 785, 809, -1, + 809, 785, 786, 810, -1, + 810, 786, 787, 811, -1, + 811, 787, 788, 812, -1, + 812, 788, 789, 813, -1, + 813, 789, 790, 814, -1, + 814, 790, 791, 815, -1, + 815, 791, 768, 792, -1, + 816, 792, 793, 817, -1, + 817, 793, 794, 818, -1, + 818, 794, 795, 819, -1, + 819, 795, 796, 820, -1, + 820, 796, 797, 821, -1, + 821, 797, 798, 822, -1, + 822, 798, 799, 823, -1, + 823, 799, 800, 824, -1, + 824, 800, 801, 825, -1, + 825, 801, 802, 826, -1, + 826, 802, 803, 827, -1, + 827, 803, 804, 828, -1, + 828, 804, 805, 829, -1, + 829, 805, 806, 830, -1, + 830, 806, 807, 831, -1, + 831, 807, 808, 832, -1, + 832, 808, 809, 833, -1, + 833, 809, 810, 834, -1, + 834, 810, 811, 835, -1, + 835, 811, 812, 836, -1, + 836, 812, 813, 837, -1, + 837, 813, 814, 838, -1, + 838, 814, 815, 839, -1, + 839, 815, 792, 816, -1, + 840, 816, 817, 841, -1, + 841, 817, 818, 842, -1, + 842, 818, 819, 843, -1, + 843, 819, 820, 844, -1, + 844, 820, 821, 845, -1, + 845, 821, 822, 846, -1, + 846, 822, 823, 847, -1, + 847, 823, 824, 848, -1, + 848, 824, 825, 849, -1, + 849, 825, 826, 850, -1, + 850, 826, 827, 851, -1, + 851, 827, 828, 852, -1, + 852, 828, 829, 853, -1, + 853, 829, 830, 854, -1, + 854, 830, 831, 855, -1, + 855, 831, 832, 856, -1, + 856, 832, 833, 857, -1, + 857, 833, 834, 858, -1, + 858, 834, 835, 859, -1, + 859, 835, 836, 860, -1, + 860, 836, 837, 861, -1, + 861, 837, 838, 862, -1, + 862, 838, 839, 863, -1, + 863, 839, 816, 840, -1, + 864, 840, 841, 865, -1, + 865, 841, 842, 866, -1, + 866, 842, 843, 867, -1, + 867, 843, 844, 868, -1, + 868, 844, 845, 869, -1, + 869, 845, 846, 870, -1, + 870, 846, 847, 871, -1, + 871, 847, 848, 872, -1, + 872, 848, 849, 873, -1, + 873, 849, 850, 874, -1, + 874, 850, 851, 875, -1, + 875, 851, 852, 876, -1, + 876, 852, 853, 877, -1, + 877, 853, 854, 878, -1, + 878, 854, 855, 879, -1, + 879, 855, 856, 880, -1, + 880, 856, 857, 881, -1, + 881, 857, 858, 882, -1, + 882, 858, 859, 883, -1, + 883, 859, 860, 884, -1, + 884, 860, 861, 885, -1, + 885, 861, 862, 886, -1, + 886, 862, 863, 887, -1, + 887, 863, 840, 864, -1, + 888, 864, 865, 889, -1, + 889, 865, 866, 890, -1, + 890, 866, 867, 891, -1, + 891, 867, 868, 892, -1, + 892, 868, 869, 893, -1, + 893, 869, 870, 894, -1, + 894, 870, 871, 895, -1, + 895, 871, 872, 896, -1, + 896, 872, 873, 897, -1, + 897, 873, 874, 898, -1, + 898, 874, 875, 899, -1, + 899, 875, 876, 900, -1, + 900, 876, 877, 901, -1, + 901, 877, 878, 902, -1, + 902, 878, 879, 903, -1, + 903, 879, 880, 904, -1, + 904, 880, 881, 905, -1, + 905, 881, 882, 906, -1, + 906, 882, 883, 907, -1, + 907, 883, 884, 908, -1, + 908, 884, 885, 909, -1, + 909, 885, 886, 910, -1, + 910, 886, 887, 911, -1, + 911, 887, 864, 888, -1, + 912, 888, 889, 913, -1, + 913, 889, 890, 914, -1, + 914, 890, 891, 915, -1, + 915, 891, 892, 916, -1, + 916, 892, 893, 917, -1, + 917, 893, 894, 918, -1, + 918, 894, 895, 919, -1, + 919, 895, 896, 920, -1, + 920, 896, 897, 921, -1, + 921, 897, 898, 922, -1, + 922, 898, 899, 923, -1, + 923, 899, 900, 924, -1, + 924, 900, 901, 925, -1, + 925, 901, 902, 926, -1, + 926, 902, 903, 927, -1, + 927, 903, 904, 928, -1, + 928, 904, 905, 929, -1, + 929, 905, 906, 930, -1, + 930, 906, 907, 931, -1, + 931, 907, 908, 932, -1, + 932, 908, 909, 933, -1, + 933, 909, 910, 934, -1, + 934, 910, 911, 935, -1, + 935, 911, 888, 912, -1, + 936, 912, 913, 937, -1, + 937, 913, 914, 938, -1, + 938, 914, 915, 939, -1, + 939, 915, 916, 940, -1, + 940, 916, 917, 941, -1, + 941, 917, 918, 942, -1, + 942, 918, 919, 943, -1, + 943, 919, 920, 944, -1, + 944, 920, 921, 945, -1, + 945, 921, 922, 946, -1, + 946, 922, 923, 947, -1, + 947, 923, 924, 948, -1, + 948, 924, 925, 949, -1, + 949, 925, 926, 950, -1, + 950, 926, 927, 951, -1, + 951, 927, 928, 952, -1, + 952, 928, 929, 953, -1, + 953, 929, 930, 954, -1, + 954, 930, 931, 955, -1, + 955, 931, 932, 956, -1, + 956, 932, 933, 957, -1, + 957, 933, 934, 958, -1, + 958, 934, 935, 959, -1, + 959, 935, 912, 936, -1, + 960, 936, 937, 961, -1, + 961, 937, 938, 962, -1, + 962, 938, 939, 963, -1, + 963, 939, 940, 964, -1, + 964, 940, 941, 965, -1, + 965, 941, 942, 966, -1, + 966, 942, 943, 967, -1, + 967, 943, 944, 968, -1, + 968, 944, 945, 969, -1, + 969, 945, 946, 970, -1, + 970, 946, 947, 971, -1, + 971, 947, 948, 972, -1, + 972, 948, 949, 973, -1, + 973, 949, 950, 974, -1, + 974, 950, 951, 975, -1, + 975, 951, 952, 976, -1, + 976, 952, 953, 977, -1, + 977, 953, 954, 978, -1, + 978, 954, 955, 979, -1, + 979, 955, 956, 980, -1, + 980, 956, 957, 981, -1, + 981, 957, 958, 982, -1, + 982, 958, 959, 983, -1, + 983, 959, 936, 960, -1, + 984, 960, 961, 985, -1, + 985, 961, 962, 986, -1, + 986, 962, 963, 987, -1, + 987, 963, 964, 988, -1, + 988, 964, 965, 989, -1, + 989, 965, 966, 990, -1, + 990, 966, 967, 991, -1, + 991, 967, 968, 992, -1, + 992, 968, 969, 993, -1, + 993, 969, 970, 994, -1, + 994, 970, 971, 995, -1, + 995, 971, 972, 996, -1, + 996, 972, 973, 997, -1, + 997, 973, 974, 998, -1, + 998, 974, 975, 999, -1, + 999, 975, 976, 1000, -1, + 1000, 976, 977, 1001, -1, + 1001, 977, 978, 1002, -1, + 1002, 978, 979, 1003, -1, + 1003, 979, 980, 1004, -1, + 1004, 980, 981, 1005, -1, + 1005, 981, 982, 1006, -1, + 1006, 982, 983, 1007, -1, + 1007, 983, 960, 984, -1, + 1008, 984, 985, 1009, -1, + 1009, 985, 986, 1010, -1, + 1010, 986, 987, 1011, -1, + 1011, 987, 988, 1012, -1, + 1012, 988, 989, 1013, -1, + 1013, 989, 990, 1014, -1, + 1014, 990, 991, 1015, -1, + 1015, 991, 992, 1016, -1, + 1016, 992, 993, 1017, -1, + 1017, 993, 994, 1018, -1, + 1018, 994, 995, 1019, -1, + 1019, 995, 996, 1020, -1, + 1020, 996, 997, 1021, -1, + 1021, 997, 998, 1022, -1, + 1022, 998, 999, 1023, -1, + 1023, 999, 1000, 1024, -1, + 1024, 1000, 1001, 1025, -1, + 1025, 1001, 1002, 1026, -1, + 1026, 1002, 1003, 1027, -1, + 1027, 1003, 1004, 1028, -1, + 1028, 1004, 1005, 1029, -1, + 1029, 1005, 1006, 1030, -1, + 1030, 1006, 1007, 1031, -1, + 1031, 1007, 984, 1008, -1, + 1032, 1008, 1009, 1033, -1, + 1033, 1009, 1010, 1034, -1, + 1034, 1010, 1011, 1035, -1, + 1035, 1011, 1012, 1036, -1, + 1036, 1012, 1013, 1037, -1, + 1037, 1013, 1014, 1038, -1, + 1038, 1014, 1015, 1039, -1, + 1039, 1015, 1016, 1040, -1, + 1040, 1016, 1017, 1041, -1, + 1041, 1017, 1018, 1042, -1, + 1042, 1018, 1019, 1043, -1, + 1043, 1019, 1020, 1044, -1, + 1044, 1020, 1021, 1045, -1, + 1045, 1021, 1022, 1046, -1, + 1046, 1022, 1023, 1047, -1, + 1047, 1023, 1024, 1048, -1, + 1048, 1024, 1025, 1049, -1, + 1049, 1025, 1026, 1050, -1, + 1050, 1026, 1027, 1051, -1, + 1051, 1027, 1028, 1052, -1, + 1052, 1028, 1029, 1053, -1, + 1053, 1029, 1030, 1054, -1, + 1054, 1030, 1031, 1055, -1, + 1055, 1031, 1008, 1032, -1, + 1056, 1032, 1033, 1057, -1, + 1057, 1033, 1034, 1058, -1, + 1058, 1034, 1035, 1059, -1, + 1059, 1035, 1036, 1060, -1, + 1060, 1036, 1037, 1061, -1, + 1061, 1037, 1038, 1062, -1, + 1062, 1038, 1039, 1063, -1, + 1063, 1039, 1040, 1064, -1, + 1064, 1040, 1041, 1065, -1, + 1065, 1041, 1042, 1066, -1, + 1066, 1042, 1043, 1067, -1, + 1067, 1043, 1044, 1068, -1, + 1068, 1044, 1045, 1069, -1, + 1069, 1045, 1046, 1070, -1, + 1070, 1046, 1047, 1071, -1, + 1071, 1047, 1048, 1072, -1, + 1072, 1048, 1049, 1073, -1, + 1073, 1049, 1050, 1074, -1, + 1074, 1050, 1051, 1075, -1, + 1075, 1051, 1052, 1076, -1, + 1076, 1052, 1053, 1077, -1, + 1077, 1053, 1054, 1078, -1, + 1078, 1054, 1055, 1079, -1, + 1079, 1055, 1032, 1056, -1, + 1080, 1056, 1057, 1081, -1, + 1081, 1057, 1058, 1082, -1, + 1082, 1058, 1059, 1083, -1, + 1083, 1059, 1060, 1084, -1, + 1084, 1060, 1061, 1085, -1, + 1085, 1061, 1062, 1086, -1, + 1086, 1062, 1063, 1087, -1, + 1087, 1063, 1064, 1088, -1, + 1088, 1064, 1065, 1089, -1, + 1089, 1065, 1066, 1090, -1, + 1090, 1066, 1067, 1091, -1, + 1091, 1067, 1068, 1092, -1, + 1092, 1068, 1069, 1093, -1, + 1093, 1069, 1070, 1094, -1, + 1094, 1070, 1071, 1095, -1, + 1095, 1071, 1072, 1096, -1, + 1096, 1072, 1073, 1097, -1, + 1097, 1073, 1074, 1098, -1, + 1098, 1074, 1075, 1099, -1, + 1099, 1075, 1076, 1100, -1, + 1100, 1076, 1077, 1101, -1, + 1101, 1077, 1078, 1102, -1, + 1102, 1078, 1079, 1103, -1, + 1103, 1079, 1056, 1080, -1, + 1104, 1080, 1081, 1105, -1, + 1105, 1081, 1082, 1106, -1, + 1106, 1082, 1083, 1107, -1, + 1107, 1083, 1084, 1108, -1, + 1108, 1084, 1085, 1109, -1, + 1109, 1085, 1086, 1110, -1, + 1110, 1086, 1087, 1111, -1, + 1111, 1087, 1088, 1112, -1, + 1112, 1088, 1089, 1113, -1, + 1113, 1089, 1090, 1114, -1, + 1114, 1090, 1091, 1115, -1, + 1115, 1091, 1092, 1116, -1, + 1116, 1092, 1093, 1117, -1, + 1117, 1093, 1094, 1118, -1, + 1118, 1094, 1095, 1119, -1, + 1119, 1095, 1096, 1120, -1, + 1120, 1096, 1097, 1121, -1, + 1121, 1097, 1098, 1122, -1, + 1122, 1098, 1099, 1123, -1, + 1123, 1099, 1100, 1124, -1, + 1124, 1100, 1101, 1125, -1, + 1125, 1101, 1102, 1126, -1, + 1126, 1102, 1103, 1127, -1, + 1127, 1103, 1080, 1104, -1, + 1128, 1104, 1105, 1129, -1, + 1129, 1105, 1106, 1130, -1, + 1130, 1106, 1107, 1131, -1, + 1131, 1107, 1108, 1132, -1, + 1132, 1108, 1109, 1133, -1, + 1133, 1109, 1110, 1134, -1, + 1134, 1110, 1111, 1135, -1, + 1135, 1111, 1112, 1136, -1, + 1136, 1112, 1113, 1137, -1, + 1137, 1113, 1114, 1138, -1, + 1138, 1114, 1115, 1139, -1, + 1139, 1115, 1116, 1140, -1, + 1140, 1116, 1117, 1141, -1, + 1141, 1117, 1118, 1142, -1, + 1142, 1118, 1119, 1143, -1, + 1143, 1119, 1120, 1144, -1, + 1144, 1120, 1121, 1145, -1, + 1145, 1121, 1122, 1146, -1, + 1146, 1122, 1123, 1147, -1, + 1147, 1123, 1124, 1148, -1, + 1148, 1124, 1125, 1149, -1, + 1149, 1125, 1126, 1150, -1, + 1150, 1126, 1127, 1151, -1, + 1151, 1127, 1104, 1128, -1, + 576, 0, 1, 577, -1, + 577, 1, 2, 578, -1, + 578, 2, 3, 579, -1, + 579, 3, 4, 580, -1, + 580, 4, 5, 581, -1, + 581, 5, 6, 582, -1, + 582, 6, 7, 583, -1, + 583, 7, 8, 584, -1, + 584, 8, 9, 585, -1, + 585, 9, 10, 586, -1, + 586, 10, 11, 587, -1, + 587, 11, 12, 588, -1, + 588, 12, 13, 589, -1, + 589, 13, 14, 590, -1, + 590, 14, 15, 591, -1, + 591, 15, 16, 592, -1, + 592, 16, 17, 593, -1, + 593, 17, 18, 594, -1, + 594, 18, 19, 595, -1, + 595, 19, 20, 596, -1, + 596, 20, 21, 597, -1, + 597, 21, 22, 598, -1, + 598, 22, 23, 599, -1, + 599, 23, 0, 576, -1, + 552, 1128, 1129, 553, -1, + 553, 1129, 1130, 554, -1, + 554, 1130, 1131, 555, -1, + 555, 1131, 1132, 556, -1, + 556, 1132, 1133, 557, -1, + 557, 1133, 1134, 558, -1, + 558, 1134, 1135, 559, -1, + 559, 1135, 1136, 560, -1, + 560, 1136, 1137, 561, -1, + 561, 1137, 1138, 562, -1, + 562, 1138, 1139, 563, -1, + 563, 1139, 1140, 564, -1, + 564, 1140, 1141, 565, -1, + 565, 1141, 1142, 566, -1, + 566, 1142, 1143, 567, -1, + 567, 1143, 1144, 568, -1, + 568, 1144, 1145, 569, -1, + 569, 1145, 1146, 570, -1, + 570, 1146, 1147, 571, -1, + 571, 1147, 1148, 572, -1, + 572, 1148, 1149, 573, -1, + 573, 1149, 1150, 574, -1, + 574, 1150, 1151, 575, -1, + 575, 1151, 1128, 552, -1, + ] + solid FALSE + } + } +#---------- POLYLINE +Shape { + appearance Appearance { + material Material { + diffuseColor 1 0 0 + emissiveColor 1 0 0 + } + } + geometry IndexedLineSet { + coord Coordinate { + point [ + 0 0 0, + 100 0 0, + ] + } + coordIndex [ + 0, 1, -1 + ] + } +} +#---------- POLYLINE +Shape { + appearance Appearance { + material Material { + diffuseColor 0 1 0 + emissiveColor 0 1 0 + } + } + geometry IndexedLineSet { + coord Coordinate { + point [ + 0 0 0, + 0 100 0, + ] + } + coordIndex [ + 0, 1, -1 + ] + } +} +#---------- POLYLINE +Shape { + appearance Appearance { + material Material { + diffuseColor 0 0 1 + emissiveColor 0 0 1 + } + } + geometry IndexedLineSet { + coord Coordinate { + point [ + 0 0 0, + 0 0 100, + ] + } + coordIndex [ + 0, 1, -1 + ] + } +} +#End of file. diff --git a/environments/g4py/tests/gtest05/vrml/g4orb.wrl b/environments/g4py/tests/gtest05/vrml/g4orb.wrl new file mode 100644 index 0000000000..b4961d1be8 --- /dev/null +++ b/environments/g4py/tests/gtest05/vrml/g4orb.wrl @@ -0,0 +1,643 @@ +#VRML V2.0 utf8 +# Generated by VRML 2.0 driver of GEANT4 + + +#---------- CAMERA +Viewpoint { + position 0 0 452.607 +} + +#---------- SOLID: dummy.0 + Shape { + appearance Appearance { + material Material { + diffuseColor 1 0 0 + transparency 0.7 + } + } + geometry IndexedFaceSet { + coord Coordinate { + point [ + 0 0 1000, + 258.819 0 965.926, + 250 66.9873 965.926, + 224.144 129.41 965.926, + 183.013 183.013 965.926, + 129.41 224.144 965.926, + 66.9873 250 965.926, + 1.58481e-14 258.819 965.926, + -66.9873 250 965.926, + -129.41 224.144 965.926, + -183.013 183.013 965.926, + -224.144 129.41 965.926, + -250 66.9873 965.926, + -258.819 3.16962e-14 965.926, + -250 -66.9873 965.926, + -224.144 -129.41 965.926, + -183.013 -183.013 965.926, + -129.41 -224.144 965.926, + -66.9873 -250 965.926, + -4.75443e-14 -258.819 965.926, + 66.9873 -250 965.926, + 129.41 -224.144 965.926, + 183.013 -183.013 965.926, + 224.144 -129.41 965.926, + 250 -66.9873 965.926, + 500 0 866.025, + 482.963 129.41 866.025, + 433.013 250 866.025, + 353.553 353.553 866.025, + 250 433.013 866.025, + 129.41 482.963 866.025, + 3.06162e-14 500 866.025, + -129.41 482.963 866.025, + -250 433.013 866.025, + -353.553 353.553 866.025, + -433.013 250 866.025, + -482.963 129.41 866.025, + -500 6.12323e-14 866.025, + -482.963 -129.41 866.025, + -433.013 -250 866.025, + -353.553 -353.553 866.025, + -250 -433.013 866.025, + -129.41 -482.963 866.025, + -9.18485e-14 -500 866.025, + 129.41 -482.963 866.025, + 250 -433.013 866.025, + 353.553 -353.553 866.025, + 433.013 -250 866.025, + 482.963 -129.41 866.025, + 707.107 0 707.107, + 683.013 183.013 707.107, + 612.372 353.553 707.107, + 500 500 707.107, + 353.553 612.372 707.107, + 183.013 683.013 707.107, + 4.32978e-14 707.107 707.107, + -183.013 683.013 707.107, + -353.553 612.372 707.107, + -500 500 707.107, + -612.372 353.553 707.107, + -683.013 183.013 707.107, + -707.107 8.65956e-14 707.107, + -683.013 -183.013 707.107, + -612.372 -353.553 707.107, + -500 -500 707.107, + -353.553 -612.372 707.107, + -183.013 -683.013 707.107, + -1.29893e-13 -707.107 707.107, + 183.013 -683.013 707.107, + 353.553 -612.372 707.107, + 500 -500 707.107, + 612.372 -353.553 707.107, + 683.013 -183.013 707.107, + 866.025 0 500, + 836.516 224.144 500, + 750 433.013 500, + 612.372 612.372 500, + 433.013 750 500, + 224.144 836.516 500, + 5.30288e-14 866.025 500, + -224.144 836.516 500, + -433.013 750 500, + -612.372 612.372 500, + -750 433.013 500, + -836.516 224.144 500, + -866.025 1.06058e-13 500, + -836.516 -224.144 500, + -750 -433.013 500, + -612.372 -612.372 500, + -433.013 -750 500, + -224.144 -836.516 500, + -1.59086e-13 -866.025 500, + 224.144 -836.516 500, + 433.013 -750 500, + 612.372 -612.372 500, + 750 -433.013 500, + 836.516 -224.144 500, + 965.926 0 258.819, + 933.013 250 258.819, + 836.516 482.963 258.819, + 683.013 683.013 258.819, + 482.963 836.516 258.819, + 250 933.013 258.819, + 5.91459e-14 965.926 258.819, + -250 933.013 258.819, + -482.963 836.516 258.819, + -683.013 683.013 258.819, + -836.516 482.963 258.819, + -933.013 250 258.819, + -965.926 1.18292e-13 258.819, + -933.013 -250 258.819, + -836.516 -482.963 258.819, + -683.013 -683.013 258.819, + -482.963 -836.516 258.819, + -250 -933.013 258.819, + -1.77438e-13 -965.926 258.819, + 250 -933.013 258.819, + 482.963 -836.516 258.819, + 683.013 -683.013 258.819, + 836.516 -482.963 258.819, + 933.013 -250 258.819, + 1000 0 6.12323e-14, + 965.926 258.819 6.12323e-14, + 866.025 500 6.12323e-14, + 707.107 707.107 6.12323e-14, + 500 866.025 6.12323e-14, + 258.819 965.926 6.12323e-14, + 6.12323e-14 1000 6.12323e-14, + -258.819 965.926 6.12323e-14, + -500 866.025 6.12323e-14, + -707.107 707.107 6.12323e-14, + -866.025 500 6.12323e-14, + -965.926 258.819 6.12323e-14, + -1000 1.22465e-13 6.12323e-14, + -965.926 -258.819 6.12323e-14, + -866.025 -500 6.12323e-14, + -707.107 -707.107 6.12323e-14, + -500 -866.025 6.12323e-14, + -258.819 -965.926 6.12323e-14, + -1.83697e-13 -1000 6.12323e-14, + 258.819 -965.926 6.12323e-14, + 500 -866.025 6.12323e-14, + 707.107 -707.107 6.12323e-14, + 866.025 -500 6.12323e-14, + 965.926 -258.819 6.12323e-14, + 965.926 0 -258.819, + 933.013 250 -258.819, + 836.516 482.963 -258.819, + 683.013 683.013 -258.819, + 482.963 836.516 -258.819, + 250 933.013 -258.819, + 5.91459e-14 965.926 -258.819, + -250 933.013 -258.819, + -482.963 836.516 -258.819, + -683.013 683.013 -258.819, + -836.516 482.963 -258.819, + -933.013 250 -258.819, + -965.926 1.18292e-13 -258.819, + -933.013 -250 -258.819, + -836.516 -482.963 -258.819, + -683.013 -683.013 -258.819, + -482.963 -836.516 -258.819, + -250 -933.013 -258.819, + -1.77438e-13 -965.926 -258.819, + 250 -933.013 -258.819, + 482.963 -836.516 -258.819, + 683.013 -683.013 -258.819, + 836.516 -482.963 -258.819, + 933.013 -250 -258.819, + 866.025 0 -500, + 836.516 224.144 -500, + 750 433.013 -500, + 612.372 612.372 -500, + 433.013 750 -500, + 224.144 836.516 -500, + 5.30288e-14 866.025 -500, + -224.144 836.516 -500, + -433.013 750 -500, + -612.372 612.372 -500, + -750 433.013 -500, + -836.516 224.144 -500, + -866.025 1.06058e-13 -500, + -836.516 -224.144 -500, + -750 -433.013 -500, + -612.372 -612.372 -500, + -433.013 -750 -500, + -224.144 -836.516 -500, + -1.59086e-13 -866.025 -500, + 224.144 -836.516 -500, + 433.013 -750 -500, + 612.372 -612.372 -500, + 750 -433.013 -500, + 836.516 -224.144 -500, + 707.107 0 -707.107, + 683.013 183.013 -707.107, + 612.372 353.553 -707.107, + 500 500 -707.107, + 353.553 612.372 -707.107, + 183.013 683.013 -707.107, + 4.32978e-14 707.107 -707.107, + -183.013 683.013 -707.107, + -353.553 612.372 -707.107, + -500 500 -707.107, + -612.372 353.553 -707.107, + -683.013 183.013 -707.107, + -707.107 8.65956e-14 -707.107, + -683.013 -183.013 -707.107, + -612.372 -353.553 -707.107, + -500 -500 -707.107, + -353.553 -612.372 -707.107, + -183.013 -683.013 -707.107, + -1.29893e-13 -707.107 -707.107, + 183.013 -683.013 -707.107, + 353.553 -612.372 -707.107, + 500 -500 -707.107, + 612.372 -353.553 -707.107, + 683.013 -183.013 -707.107, + 500 0 -866.025, + 482.963 129.41 -866.025, + 433.013 250 -866.025, + 353.553 353.553 -866.025, + 250 433.013 -866.025, + 129.41 482.963 -866.025, + 3.06162e-14 500 -866.025, + -129.41 482.963 -866.025, + -250 433.013 -866.025, + -353.553 353.553 -866.025, + -433.013 250 -866.025, + -482.963 129.41 -866.025, + -500 6.12323e-14 -866.025, + -482.963 -129.41 -866.025, + -433.013 -250 -866.025, + -353.553 -353.553 -866.025, + -250 -433.013 -866.025, + -129.41 -482.963 -866.025, + -9.18485e-14 -500 -866.025, + 129.41 -482.963 -866.025, + 250 -433.013 -866.025, + 353.553 -353.553 -866.025, + 433.013 -250 -866.025, + 482.963 -129.41 -866.025, + 258.819 0 -965.926, + 250 66.9873 -965.926, + 224.144 129.41 -965.926, + 183.013 183.013 -965.926, + 129.41 224.144 -965.926, + 66.9873 250 -965.926, + 1.58481e-14 258.819 -965.926, + -66.9873 250 -965.926, + -129.41 224.144 -965.926, + -183.013 183.013 -965.926, + -224.144 129.41 -965.926, + -250 66.9873 -965.926, + -258.819 3.16962e-14 -965.926, + -250 -66.9873 -965.926, + -224.144 -129.41 -965.926, + -183.013 -183.013 -965.926, + -129.41 -224.144 -965.926, + -66.9873 -250 -965.926, + -4.75443e-14 -258.819 -965.926, + 66.9873 -250 -965.926, + 129.41 -224.144 -965.926, + 183.013 -183.013 -965.926, + 224.144 -129.41 -965.926, + 250 -66.9873 -965.926, + 0 0 -1000, + 0 0 0, + ] + } + coordIndex [ + 0, 1, 2, -1, + 0, 2, 3, -1, + 0, 3, 4, -1, + 0, 4, 5, -1, + 0, 5, 6, -1, + 0, 6, 7, -1, + 0, 7, 8, -1, + 0, 8, 9, -1, + 0, 9, 10, -1, + 0, 10, 11, -1, + 0, 11, 12, -1, + 0, 12, 13, -1, + 0, 13, 14, -1, + 0, 14, 15, -1, + 0, 15, 16, -1, + 0, 16, 17, -1, + 0, 17, 18, -1, + 0, 18, 19, -1, + 0, 19, 20, -1, + 0, 20, 21, -1, + 0, 21, 22, -1, + 0, 22, 23, -1, + 0, 23, 24, -1, + 0, 24, 1, -1, + 1, 25, 26, 2, -1, + 2, 26, 27, 3, -1, + 3, 27, 28, 4, -1, + 4, 28, 29, 5, -1, + 5, 29, 30, 6, -1, + 6, 30, 31, 7, -1, + 7, 31, 32, 8, -1, + 8, 32, 33, 9, -1, + 9, 33, 34, 10, -1, + 10, 34, 35, 11, -1, + 11, 35, 36, 12, -1, + 12, 36, 37, 13, -1, + 13, 37, 38, 14, -1, + 14, 38, 39, 15, -1, + 15, 39, 40, 16, -1, + 16, 40, 41, 17, -1, + 17, 41, 42, 18, -1, + 18, 42, 43, 19, -1, + 19, 43, 44, 20, -1, + 20, 44, 45, 21, -1, + 21, 45, 46, 22, -1, + 22, 46, 47, 23, -1, + 23, 47, 48, 24, -1, + 24, 48, 25, 1, -1, + 25, 49, 50, 26, -1, + 26, 50, 51, 27, -1, + 27, 51, 52, 28, -1, + 28, 52, 53, 29, -1, + 29, 53, 54, 30, -1, + 30, 54, 55, 31, -1, + 31, 55, 56, 32, -1, + 32, 56, 57, 33, -1, + 33, 57, 58, 34, -1, + 34, 58, 59, 35, -1, + 35, 59, 60, 36, -1, + 36, 60, 61, 37, -1, + 37, 61, 62, 38, -1, + 38, 62, 63, 39, -1, + 39, 63, 64, 40, -1, + 40, 64, 65, 41, -1, + 41, 65, 66, 42, -1, + 42, 66, 67, 43, -1, + 43, 67, 68, 44, -1, + 44, 68, 69, 45, -1, + 45, 69, 70, 46, -1, + 46, 70, 71, 47, -1, + 47, 71, 72, 48, -1, + 48, 72, 49, 25, -1, + 49, 73, 74, 50, -1, + 50, 74, 75, 51, -1, + 51, 75, 76, 52, -1, + 52, 76, 77, 53, -1, + 53, 77, 78, 54, -1, + 54, 78, 79, 55, -1, + 55, 79, 80, 56, -1, + 56, 80, 81, 57, -1, + 57, 81, 82, 58, -1, + 58, 82, 83, 59, -1, + 59, 83, 84, 60, -1, + 60, 84, 85, 61, -1, + 61, 85, 86, 62, -1, + 62, 86, 87, 63, -1, + 63, 87, 88, 64, -1, + 64, 88, 89, 65, -1, + 65, 89, 90, 66, -1, + 66, 90, 91, 67, -1, + 67, 91, 92, 68, -1, + 68, 92, 93, 69, -1, + 69, 93, 94, 70, -1, + 70, 94, 95, 71, -1, + 71, 95, 96, 72, -1, + 72, 96, 73, 49, -1, + 73, 97, 98, 74, -1, + 74, 98, 99, 75, -1, + 75, 99, 100, 76, -1, + 76, 100, 101, 77, -1, + 77, 101, 102, 78, -1, + 78, 102, 103, 79, -1, + 79, 103, 104, 80, -1, + 80, 104, 105, 81, -1, + 81, 105, 106, 82, -1, + 82, 106, 107, 83, -1, + 83, 107, 108, 84, -1, + 84, 108, 109, 85, -1, + 85, 109, 110, 86, -1, + 86, 110, 111, 87, -1, + 87, 111, 112, 88, -1, + 88, 112, 113, 89, -1, + 89, 113, 114, 90, -1, + 90, 114, 115, 91, -1, + 91, 115, 116, 92, -1, + 92, 116, 117, 93, -1, + 93, 117, 118, 94, -1, + 94, 118, 119, 95, -1, + 95, 119, 120, 96, -1, + 96, 120, 97, 73, -1, + 97, 121, 122, 98, -1, + 98, 122, 123, 99, -1, + 99, 123, 124, 100, -1, + 100, 124, 125, 101, -1, + 101, 125, 126, 102, -1, + 102, 126, 127, 103, -1, + 103, 127, 128, 104, -1, + 104, 128, 129, 105, -1, + 105, 129, 130, 106, -1, + 106, 130, 131, 107, -1, + 107, 131, 132, 108, -1, + 108, 132, 133, 109, -1, + 109, 133, 134, 110, -1, + 110, 134, 135, 111, -1, + 111, 135, 136, 112, -1, + 112, 136, 137, 113, -1, + 113, 137, 138, 114, -1, + 114, 138, 139, 115, -1, + 115, 139, 140, 116, -1, + 116, 140, 141, 117, -1, + 117, 141, 142, 118, -1, + 118, 142, 143, 119, -1, + 119, 143, 144, 120, -1, + 120, 144, 121, 97, -1, + 121, 145, 146, 122, -1, + 122, 146, 147, 123, -1, + 123, 147, 148, 124, -1, + 124, 148, 149, 125, -1, + 125, 149, 150, 126, -1, + 126, 150, 151, 127, -1, + 127, 151, 152, 128, -1, + 128, 152, 153, 129, -1, + 129, 153, 154, 130, -1, + 130, 154, 155, 131, -1, + 131, 155, 156, 132, -1, + 132, 156, 157, 133, -1, + 133, 157, 158, 134, -1, + 134, 158, 159, 135, -1, + 135, 159, 160, 136, -1, + 136, 160, 161, 137, -1, + 137, 161, 162, 138, -1, + 138, 162, 163, 139, -1, + 139, 163, 164, 140, -1, + 140, 164, 165, 141, -1, + 141, 165, 166, 142, -1, + 142, 166, 167, 143, -1, + 143, 167, 168, 144, -1, + 144, 168, 145, 121, -1, + 145, 169, 170, 146, -1, + 146, 170, 171, 147, -1, + 147, 171, 172, 148, -1, + 148, 172, 173, 149, -1, + 149, 173, 174, 150, -1, + 150, 174, 175, 151, -1, + 151, 175, 176, 152, -1, + 152, 176, 177, 153, -1, + 153, 177, 178, 154, -1, + 154, 178, 179, 155, -1, + 155, 179, 180, 156, -1, + 156, 180, 181, 157, -1, + 157, 181, 182, 158, -1, + 158, 182, 183, 159, -1, + 159, 183, 184, 160, -1, + 160, 184, 185, 161, -1, + 161, 185, 186, 162, -1, + 162, 186, 187, 163, -1, + 163, 187, 188, 164, -1, + 164, 188, 189, 165, -1, + 165, 189, 190, 166, -1, + 166, 190, 191, 167, -1, + 167, 191, 192, 168, -1, + 168, 192, 169, 145, -1, + 169, 193, 194, 170, -1, + 170, 194, 195, 171, -1, + 171, 195, 196, 172, -1, + 172, 196, 197, 173, -1, + 173, 197, 198, 174, -1, + 174, 198, 199, 175, -1, + 175, 199, 200, 176, -1, + 176, 200, 201, 177, -1, + 177, 201, 202, 178, -1, + 178, 202, 203, 179, -1, + 179, 203, 204, 180, -1, + 180, 204, 205, 181, -1, + 181, 205, 206, 182, -1, + 182, 206, 207, 183, -1, + 183, 207, 208, 184, -1, + 184, 208, 209, 185, -1, + 185, 209, 210, 186, -1, + 186, 210, 211, 187, -1, + 187, 211, 212, 188, -1, + 188, 212, 213, 189, -1, + 189, 213, 214, 190, -1, + 190, 214, 215, 191, -1, + 191, 215, 216, 192, -1, + 192, 216, 193, 169, -1, + 193, 217, 218, 194, -1, + 194, 218, 219, 195, -1, + 195, 219, 220, 196, -1, + 196, 220, 221, 197, -1, + 197, 221, 222, 198, -1, + 198, 222, 223, 199, -1, + 199, 223, 224, 200, -1, + 200, 224, 225, 201, -1, + 201, 225, 226, 202, -1, + 202, 226, 227, 203, -1, + 203, 227, 228, 204, -1, + 204, 228, 229, 205, -1, + 205, 229, 230, 206, -1, + 206, 230, 231, 207, -1, + 207, 231, 232, 208, -1, + 208, 232, 233, 209, -1, + 209, 233, 234, 210, -1, + 210, 234, 235, 211, -1, + 211, 235, 236, 212, -1, + 212, 236, 237, 213, -1, + 213, 237, 238, 214, -1, + 214, 238, 239, 215, -1, + 215, 239, 240, 216, -1, + 216, 240, 217, 193, -1, + 217, 241, 242, 218, -1, + 218, 242, 243, 219, -1, + 219, 243, 244, 220, -1, + 220, 244, 245, 221, -1, + 221, 245, 246, 222, -1, + 222, 246, 247, 223, -1, + 223, 247, 248, 224, -1, + 224, 248, 249, 225, -1, + 225, 249, 250, 226, -1, + 226, 250, 251, 227, -1, + 227, 251, 252, 228, -1, + 228, 252, 253, 229, -1, + 229, 253, 254, 230, -1, + 230, 254, 255, 231, -1, + 231, 255, 256, 232, -1, + 232, 256, 257, 233, -1, + 233, 257, 258, 234, -1, + 234, 258, 259, 235, -1, + 235, 259, 260, 236, -1, + 236, 260, 261, 237, -1, + 237, 261, 262, 238, -1, + 238, 262, 263, 239, -1, + 239, 263, 264, 240, -1, + 240, 264, 241, 217, -1, + 241, 265, 242, -1, + 242, 265, 243, -1, + 243, 265, 244, -1, + 244, 265, 245, -1, + 245, 265, 246, -1, + 246, 265, 247, -1, + 247, 265, 248, -1, + 248, 265, 249, -1, + 249, 265, 250, -1, + 250, 265, 251, -1, + 251, 265, 252, -1, + 252, 265, 253, -1, + 253, 265, 254, -1, + 254, 265, 255, -1, + 255, 265, 256, -1, + 256, 265, 257, -1, + 257, 265, 258, -1, + 258, 265, 259, -1, + 259, 265, 260, -1, + 260, 265, 261, -1, + 261, 265, 262, -1, + 262, 265, 263, -1, + 263, 265, 264, -1, + 264, 265, 241, -1, + ] + solid FALSE + } + } +#---------- POLYLINE +Shape { + appearance Appearance { + material Material { + diffuseColor 1 0 0 + emissiveColor 1 0 0 + } + } + geometry IndexedLineSet { + coord Coordinate { + point [ + 0 0 0, + 100 0 0, + ] + } + coordIndex [ + 0, 1, -1 + ] + } +} +#---------- POLYLINE +Shape { + appearance Appearance { + material Material { + diffuseColor 0 1 0 + emissiveColor 0 1 0 + } + } + geometry IndexedLineSet { + coord Coordinate { + point [ + 0 0 0, + 0 100 0, + ] + } + coordIndex [ + 0, 1, -1 + ] + } +} +#---------- POLYLINE +Shape { + appearance Appearance { + material Material { + diffuseColor 0 0 1 + emissiveColor 0 0 1 + } + } + geometry IndexedLineSet { + coord Coordinate { + point [ + 0 0 0, + 0 0 100, + ] + } + coordIndex [ + 0, 1, -1 + ] + } +} +#End of file. diff --git a/environments/g4py/tests/gtest05/vrml/g4para.wrl b/environments/g4py/tests/gtest05/vrml/g4para.wrl new file mode 100644 index 0000000000..1fcf6d556e --- /dev/null +++ b/environments/g4py/tests/gtest05/vrml/g4para.wrl @@ -0,0 +1,102 @@ +#VRML V2.0 utf8 +# Generated by VRML 2.0 driver of GEANT4 + + +#---------- CAMERA +Viewpoint { + position 0 0 452.607 +} + +#---------- SOLID: dummy.0 + Shape { + appearance Appearance { + material Material { + diffuseColor 0 0 1 + transparency 0.7 + } + } + geometry IndexedFaceSet { + coord Coordinate { + point [ + -948.528 -400 -600, + -348.528 -400 -600, + 451.472 400 -600, + -148.528 400 -600, + -451.472 -400 600, + 148.528 -400 600, + 948.528 400 600, + 348.528 400 600, + ] + } + coordIndex [ + 0, 3, 2, 1, -1, + 4, 7, 3, 0, -1, + 7, 6, 2, 3, -1, + 6, 5, 1, 2, -1, + 5, 4, 0, 1, -1, + 4, 5, 6, 7, -1, + ] + solid FALSE + } + } +#---------- POLYLINE +Shape { + appearance Appearance { + material Material { + diffuseColor 1 0 0 + emissiveColor 1 0 0 + } + } + geometry IndexedLineSet { + coord Coordinate { + point [ + 0 0 0, + 100 0 0, + ] + } + coordIndex [ + 0, 1, -1 + ] + } +} +#---------- POLYLINE +Shape { + appearance Appearance { + material Material { + diffuseColor 0 1 0 + emissiveColor 0 1 0 + } + } + geometry IndexedLineSet { + coord Coordinate { + point [ + 0 0 0, + 0 100 0, + ] + } + coordIndex [ + 0, 1, -1 + ] + } +} +#---------- POLYLINE +Shape { + appearance Appearance { + material Material { + diffuseColor 0 0 1 + emissiveColor 0 0 1 + } + } + geometry IndexedLineSet { + coord Coordinate { + point [ + 0 0 0, + 0 0 100, + ] + } + coordIndex [ + 0, 1, -1 + ] + } +} +#End of file. diff --git a/environments/g4py/tests/gtest05/vrml/g4polycone.wrl b/environments/g4py/tests/gtest05/vrml/g4polycone.wrl new file mode 100644 index 0000000000..494fe6e448 --- /dev/null +++ b/environments/g4py/tests/gtest05/vrml/g4polycone.wrl @@ -0,0 +1,505 @@ +#VRML V2.0 utf8 +# Generated by VRML 2.0 driver of GEANT4 + + +#---------- CAMERA +Viewpoint { + position 0 0 452.607 +} + +#---------- SOLID: dummy.0 + Shape { + appearance Appearance { + material Material { + diffuseColor 0 1 1 + transparency 0.7 + } + } + geometry IndexedFaceSet { + coord Coordinate { + point [ + 20 0 350, + 19.3185 5.17638 350, + 17.3205 10 350, + 14.1421 14.1421 350, + 10 17.3205 350, + 5.17638 19.3185 350, + 1.22465e-15 20 350, + -5.17638 19.3185 350, + -10 17.3205 350, + -14.1421 14.1421 350, + -17.3205 10 350, + -19.3185 5.17638 350, + -20 2.44929e-15 350, + -19.3185 -5.17638 350, + -17.3205 -10 350, + -14.1421 -14.1421 350, + -10 -17.3205 350, + -5.17638 -19.3185 350, + -3.67394e-15 -20 350, + 5.17638 -19.3185 350, + 10 -17.3205 350, + 14.1421 -14.1421 350, + 17.3205 -10 350, + 19.3185 -5.17638 350, + 20 0 310, + 19.3185 5.17638 310, + 17.3205 10 310, + 14.1421 14.1421 310, + 10 17.3205 310, + 5.17638 19.3185 310, + 1.22465e-15 20 310, + -5.17638 19.3185 310, + -10 17.3205 310, + -14.1421 14.1421 310, + -17.3205 10 310, + -19.3185 5.17638 310, + -20 2.44929e-15 310, + -19.3185 -5.17638 310, + -17.3205 -10 310, + -14.1421 -14.1421 310, + -10 -17.3205 310, + -5.17638 -19.3185 310, + -3.67394e-15 -20 310, + 5.17638 -19.3185 310, + 10 -17.3205 310, + 14.1421 -14.1421 310, + 17.3205 -10 310, + 19.3185 -5.17638 310, + 100 0 290, + 96.5926 25.8819 290, + 86.6025 50 290, + 70.7107 70.7107 290, + 50 86.6025 290, + 25.8819 96.5926 290, + 6.12323e-15 100 290, + -25.8819 96.5926 290, + -50 86.6025 290, + -70.7107 70.7107 290, + -86.6025 50 290, + -96.5926 25.8819 290, + -100 1.22465e-14 290, + -96.5926 -25.8819 290, + -86.6025 -50 290, + -70.7107 -70.7107 290, + -50 -86.6025 290, + -25.8819 -96.5926 290, + -1.83697e-14 -100 290, + 25.8819 -96.5926 290, + 50 -86.6025 290, + 70.7107 -70.7107 290, + 86.6025 -50 290, + 96.5926 -25.8819 290, + 100 0 270, + 96.5926 25.8819 270, + 86.6025 50 270, + 70.7107 70.7107 270, + 50 86.6025 270, + 25.8819 96.5926 270, + 6.12323e-15 100 270, + -25.8819 96.5926 270, + -50 86.6025 270, + -70.7107 70.7107 270, + -86.6025 50 270, + -96.5926 25.8819 270, + -100 1.22465e-14 270, + -96.5926 -25.8819 270, + -86.6025 -50 270, + -70.7107 -70.7107 270, + -50 -86.6025 270, + -25.8819 -96.5926 270, + -1.83697e-14 -100 270, + 25.8819 -96.5926 270, + 50 -86.6025 270, + 70.7107 -70.7107 270, + 86.6025 -50 270, + 96.5926 -25.8819 270, + 50 0 250, + 48.2963 12.941 250, + 43.3013 25 250, + 35.3553 35.3553 250, + 25 43.3013 250, + 12.941 48.2963 250, + 3.06162e-15 50 250, + -12.941 48.2963 250, + -25 43.3013 250, + -35.3553 35.3553 250, + -43.3013 25 250, + -48.2963 12.941 250, + -50 6.12323e-15 250, + -48.2963 -12.941 250, + -43.3013 -25 250, + -35.3553 -35.3553 250, + -25 -43.3013 250, + -12.941 -48.2963 250, + -9.18485e-15 -50 250, + 12.941 -48.2963 250, + 25 -43.3013 250, + 35.3553 -35.3553 250, + 43.3013 -25 250, + 48.2963 -12.941 250, + 50 0 110, + 48.2963 12.941 110, + 43.3013 25 110, + 35.3553 35.3553 110, + 25 43.3013 110, + 12.941 48.2963 110, + 3.06162e-15 50 110, + -12.941 48.2963 110, + -25 43.3013 110, + -35.3553 35.3553 110, + -43.3013 25 110, + -48.2963 12.941 110, + -50 6.12323e-15 110, + -48.2963 -12.941 110, + -43.3013 -25 110, + -35.3553 -35.3553 110, + -25 -43.3013 110, + -12.941 -48.2963 110, + -9.18485e-15 -50 110, + 12.941 -48.2963 110, + 25 -43.3013 110, + 35.3553 -35.3553 110, + 43.3013 -25 110, + 48.2963 -12.941 110, + 100 0 90, + 96.5926 25.8819 90, + 86.6025 50 90, + 70.7107 70.7107 90, + 50 86.6025 90, + 25.8819 96.5926 90, + 6.12323e-15 100 90, + -25.8819 96.5926 90, + -50 86.6025 90, + -70.7107 70.7107 90, + -86.6025 50 90, + -96.5926 25.8819 90, + -100 1.22465e-14 90, + -96.5926 -25.8819 90, + -86.6025 -50 90, + -70.7107 -70.7107 90, + -50 -86.6025 90, + -25.8819 -96.5926 90, + -1.83697e-14 -100 90, + 25.8819 -96.5926 90, + 50 -86.6025 90, + 70.7107 -70.7107 90, + 86.6025 -50 90, + 96.5926 -25.8819 90, + 100 0 70, + 96.5926 25.8819 70, + 86.6025 50 70, + 70.7107 70.7107 70, + 50 86.6025 70, + 25.8819 96.5926 70, + 6.12323e-15 100 70, + -25.8819 96.5926 70, + -50 86.6025 70, + -70.7107 70.7107 70, + -86.6025 50 70, + -96.5926 25.8819 70, + -100 1.22465e-14 70, + -96.5926 -25.8819 70, + -86.6025 -50 70, + -70.7107 -70.7107 70, + -50 -86.6025 70, + -25.8819 -96.5926 70, + -1.83697e-14 -100 70, + 25.8819 -96.5926 70, + 50 -86.6025 70, + 70.7107 -70.7107 70, + 86.6025 -50 70, + 96.5926 -25.8819 70, + 0 0 50, + 0 0 350, + 0 0 310, + 0 0 290, + 0 0 270, + 0 0 250, + 0 0 110, + 0 0 90, + 0 0 70, + ] + } + coordIndex [ + 0, 24, 25, 1, -1, + 1, 25, 26, 2, -1, + 2, 26, 27, 3, -1, + 3, 27, 28, 4, -1, + 4, 28, 29, 5, -1, + 5, 29, 30, 6, -1, + 6, 30, 31, 7, -1, + 7, 31, 32, 8, -1, + 8, 32, 33, 9, -1, + 9, 33, 34, 10, -1, + 10, 34, 35, 11, -1, + 11, 35, 36, 12, -1, + 12, 36, 37, 13, -1, + 13, 37, 38, 14, -1, + 14, 38, 39, 15, -1, + 15, 39, 40, 16, -1, + 16, 40, 41, 17, -1, + 17, 41, 42, 18, -1, + 18, 42, 43, 19, -1, + 19, 43, 44, 20, -1, + 20, 44, 45, 21, -1, + 21, 45, 46, 22, -1, + 22, 46, 47, 23, -1, + 23, 47, 24, 0, -1, + 24, 48, 49, 25, -1, + 25, 49, 50, 26, -1, + 26, 50, 51, 27, -1, + 27, 51, 52, 28, -1, + 28, 52, 53, 29, -1, + 29, 53, 54, 30, -1, + 30, 54, 55, 31, -1, + 31, 55, 56, 32, -1, + 32, 56, 57, 33, -1, + 33, 57, 58, 34, -1, + 34, 58, 59, 35, -1, + 35, 59, 60, 36, -1, + 36, 60, 61, 37, -1, + 37, 61, 62, 38, -1, + 38, 62, 63, 39, -1, + 39, 63, 64, 40, -1, + 40, 64, 65, 41, -1, + 41, 65, 66, 42, -1, + 42, 66, 67, 43, -1, + 43, 67, 68, 44, -1, + 44, 68, 69, 45, -1, + 45, 69, 70, 46, -1, + 46, 70, 71, 47, -1, + 47, 71, 48, 24, -1, + 48, 72, 73, 49, -1, + 49, 73, 74, 50, -1, + 50, 74, 75, 51, -1, + 51, 75, 76, 52, -1, + 52, 76, 77, 53, -1, + 53, 77, 78, 54, -1, + 54, 78, 79, 55, -1, + 55, 79, 80, 56, -1, + 56, 80, 81, 57, -1, + 57, 81, 82, 58, -1, + 58, 82, 83, 59, -1, + 59, 83, 84, 60, -1, + 60, 84, 85, 61, -1, + 61, 85, 86, 62, -1, + 62, 86, 87, 63, -1, + 63, 87, 88, 64, -1, + 64, 88, 89, 65, -1, + 65, 89, 90, 66, -1, + 66, 90, 91, 67, -1, + 67, 91, 92, 68, -1, + 68, 92, 93, 69, -1, + 69, 93, 94, 70, -1, + 70, 94, 95, 71, -1, + 71, 95, 72, 48, -1, + 72, 96, 97, 73, -1, + 73, 97, 98, 74, -1, + 74, 98, 99, 75, -1, + 75, 99, 100, 76, -1, + 76, 100, 101, 77, -1, + 77, 101, 102, 78, -1, + 78, 102, 103, 79, -1, + 79, 103, 104, 80, -1, + 80, 104, 105, 81, -1, + 81, 105, 106, 82, -1, + 82, 106, 107, 83, -1, + 83, 107, 108, 84, -1, + 84, 108, 109, 85, -1, + 85, 109, 110, 86, -1, + 86, 110, 111, 87, -1, + 87, 111, 112, 88, -1, + 88, 112, 113, 89, -1, + 89, 113, 114, 90, -1, + 90, 114, 115, 91, -1, + 91, 115, 116, 92, -1, + 92, 116, 117, 93, -1, + 93, 117, 118, 94, -1, + 94, 118, 119, 95, -1, + 95, 119, 96, 72, -1, + 96, 120, 121, 97, -1, + 97, 121, 122, 98, -1, + 98, 122, 123, 99, -1, + 99, 123, 124, 100, -1, + 100, 124, 125, 101, -1, + 101, 125, 126, 102, -1, + 102, 126, 127, 103, -1, + 103, 127, 128, 104, -1, + 104, 128, 129, 105, -1, + 105, 129, 130, 106, -1, + 106, 130, 131, 107, -1, + 107, 131, 132, 108, -1, + 108, 132, 133, 109, -1, + 109, 133, 134, 110, -1, + 110, 134, 135, 111, -1, + 111, 135, 136, 112, -1, + 112, 136, 137, 113, -1, + 113, 137, 138, 114, -1, + 114, 138, 139, 115, -1, + 115, 139, 140, 116, -1, + 116, 140, 141, 117, -1, + 117, 141, 142, 118, -1, + 118, 142, 143, 119, -1, + 119, 143, 120, 96, -1, + 120, 144, 145, 121, -1, + 121, 145, 146, 122, -1, + 122, 146, 147, 123, -1, + 123, 147, 148, 124, -1, + 124, 148, 149, 125, -1, + 125, 149, 150, 126, -1, + 126, 150, 151, 127, -1, + 127, 151, 152, 128, -1, + 128, 152, 153, 129, -1, + 129, 153, 154, 130, -1, + 130, 154, 155, 131, -1, + 131, 155, 156, 132, -1, + 132, 156, 157, 133, -1, + 133, 157, 158, 134, -1, + 134, 158, 159, 135, -1, + 135, 159, 160, 136, -1, + 136, 160, 161, 137, -1, + 137, 161, 162, 138, -1, + 138, 162, 163, 139, -1, + 139, 163, 164, 140, -1, + 140, 164, 165, 141, -1, + 141, 165, 166, 142, -1, + 142, 166, 167, 143, -1, + 143, 167, 144, 120, -1, + 144, 168, 169, 145, -1, + 145, 169, 170, 146, -1, + 146, 170, 171, 147, -1, + 147, 171, 172, 148, -1, + 148, 172, 173, 149, -1, + 149, 173, 174, 150, -1, + 150, 174, 175, 151, -1, + 151, 175, 176, 152, -1, + 152, 176, 177, 153, -1, + 153, 177, 178, 154, -1, + 154, 178, 179, 155, -1, + 155, 179, 180, 156, -1, + 156, 180, 181, 157, -1, + 157, 181, 182, 158, -1, + 158, 182, 183, 159, -1, + 159, 183, 184, 160, -1, + 160, 184, 185, 161, -1, + 161, 185, 186, 162, -1, + 162, 186, 187, 163, -1, + 163, 187, 188, 164, -1, + 164, 188, 189, 165, -1, + 165, 189, 190, 166, -1, + 166, 190, 191, 167, -1, + 167, 191, 168, 144, -1, + 168, 192, 169, -1, + 169, 192, 170, -1, + 170, 192, 171, -1, + 171, 192, 172, -1, + 172, 192, 173, -1, + 173, 192, 174, -1, + 174, 192, 175, -1, + 175, 192, 176, -1, + 176, 192, 177, -1, + 177, 192, 178, -1, + 178, 192, 179, -1, + 179, 192, 180, -1, + 180, 192, 181, -1, + 181, 192, 182, -1, + 182, 192, 183, -1, + 183, 192, 184, -1, + 184, 192, 185, -1, + 185, 192, 186, -1, + 186, 192, 187, -1, + 187, 192, 188, -1, + 188, 192, 189, -1, + 189, 192, 190, -1, + 190, 192, 191, -1, + 191, 192, 168, -1, + 193, 0, 1, -1, + 193, 1, 2, -1, + 193, 2, 3, -1, + 193, 3, 4, -1, + 193, 4, 5, -1, + 193, 5, 6, -1, + 193, 6, 7, -1, + 193, 7, 8, -1, + 193, 8, 9, -1, + 193, 9, 10, -1, + 193, 10, 11, -1, + 193, 11, 12, -1, + 193, 12, 13, -1, + 193, 13, 14, -1, + 193, 14, 15, -1, + 193, 15, 16, -1, + 193, 16, 17, -1, + 193, 17, 18, -1, + 193, 18, 19, -1, + 193, 19, 20, -1, + 193, 20, 21, -1, + 193, 21, 22, -1, + 193, 22, 23, -1, + 193, 23, 0, -1, + ] + solid FALSE + } + } +#---------- POLYLINE +Shape { + appearance Appearance { + material Material { + diffuseColor 1 0 0 + emissiveColor 1 0 0 + } + } + geometry IndexedLineSet { + coord Coordinate { + point [ + 0 0 0, + 100 0 0, + ] + } + coordIndex [ + 0, 1, -1 + ] + } +} +#---------- POLYLINE +Shape { + appearance Appearance { + material Material { + diffuseColor 0 1 0 + emissiveColor 0 1 0 + } + } + geometry IndexedLineSet { + coord Coordinate { + point [ + 0 0 0, + 0 100 0, + ] + } + coordIndex [ + 0, 1, -1 + ] + } +} +#---------- POLYLINE +Shape { + appearance Appearance { + material Material { + diffuseColor 0 0 1 + emissiveColor 0 0 1 + } + } + geometry IndexedLineSet { + coord Coordinate { + point [ + 0 0 0, + 0 0 100, + ] + } + coordIndex [ + 0, 1, -1 + ] + } +} +#End of file. diff --git a/environments/g4py/tests/gtest05/vrml/g4polyhedra.wrl b/environments/g4py/tests/gtest05/vrml/g4polyhedra.wrl new file mode 100644 index 0000000000..4fb6508105 --- /dev/null +++ b/environments/g4py/tests/gtest05/vrml/g4polyhedra.wrl @@ -0,0 +1,160 @@ +#VRML V2.0 utf8 +# Generated by VRML 2.0 driver of GEANT4 + + +#---------- CAMERA +Viewpoint { + position 0 0 452.607 +} + +#---------- SOLID: dummy.0 + Shape { + appearance Appearance { + material Material { + diffuseColor 0 1 0 + transparency 0.7 + } + } + geometry IndexedFaceSet { + coord Coordinate { + point [ + 123.607 0 350, + 38.1966 117.557 350, + -100 72.6543 350, + -100 -72.6543 350, + 38.1966 -117.557 350, + 123.607 0 320, + 38.1966 117.557 320, + -100 72.6543 320, + -100 -72.6543 320, + 38.1966 -117.557 320, + 49.4427 0 300, + 15.2786 47.0228 300, + -40 29.0617 300, + -40 -29.0617 300, + 15.2786 -47.0228 300, + 49.4427 0 130, + 15.2786 47.0228 130, + -40 29.0617 130, + -40 -29.0617 130, + 15.2786 -47.0228 130, + 185.41 0 80, + 57.2949 176.336 80, + -150 108.981 80, + -150 -108.981 80, + 57.2949 -176.336 80, + 185.41 0 50, + 57.2949 176.336 50, + -150 108.981 50, + -150 -108.981 50, + 57.2949 -176.336 50, + 0 0 0, + 0 0 350, + 0 0 320, + 0 0 300, + 0 0 130, + 0 0 80, + 0 0 50, + ] + } + coordIndex [ + 0, 5, 6, 1, -1, + 1, 6, 7, 2, -1, + 2, 7, 8, 3, -1, + 3, 8, 9, 4, -1, + 4, 9, 5, 0, -1, + 5, 10, 11, 6, -1, + 6, 11, 12, 7, -1, + 7, 12, 13, 8, -1, + 8, 13, 14, 9, -1, + 9, 14, 10, 5, -1, + 10, 15, 16, 11, -1, + 11, 16, 17, 12, -1, + 12, 17, 18, 13, -1, + 13, 18, 19, 14, -1, + 14, 19, 15, 10, -1, + 15, 20, 21, 16, -1, + 16, 21, 22, 17, -1, + 17, 22, 23, 18, -1, + 18, 23, 24, 19, -1, + 19, 24, 20, 15, -1, + 20, 25, 26, 21, -1, + 21, 26, 27, 22, -1, + 22, 27, 28, 23, -1, + 23, 28, 29, 24, -1, + 24, 29, 25, 20, -1, + 25, 30, 26, -1, + 26, 30, 27, -1, + 27, 30, 28, -1, + 28, 30, 29, -1, + 29, 30, 25, -1, + 31, 0, 1, -1, + 31, 1, 2, -1, + 31, 2, 3, -1, + 31, 3, 4, -1, + 31, 4, 0, -1, + ] + solid FALSE + } + } +#---------- POLYLINE +Shape { + appearance Appearance { + material Material { + diffuseColor 1 0 0 + emissiveColor 1 0 0 + } + } + geometry IndexedLineSet { + coord Coordinate { + point [ + 0 0 0, + 100 0 0, + ] + } + coordIndex [ + 0, 1, -1 + ] + } +} +#---------- POLYLINE +Shape { + appearance Appearance { + material Material { + diffuseColor 0 1 0 + emissiveColor 0 1 0 + } + } + geometry IndexedLineSet { + coord Coordinate { + point [ + 0 0 0, + 0 100 0, + ] + } + coordIndex [ + 0, 1, -1 + ] + } +} +#---------- POLYLINE +Shape { + appearance Appearance { + material Material { + diffuseColor 0 0 1 + emissiveColor 0 0 1 + } + } + geometry IndexedLineSet { + coord Coordinate { + point [ + 0 0 0, + 0 0 100, + ] + } + coordIndex [ + 0, 1, -1 + ] + } +} +#End of file. diff --git a/environments/g4py/tests/gtest05/vrml/g4sphere.wrl b/environments/g4py/tests/gtest05/vrml/g4sphere.wrl new file mode 100644 index 0000000000..e3bfafdc9b --- /dev/null +++ b/environments/g4py/tests/gtest05/vrml/g4sphere.wrl @@ -0,0 +1,690 @@ +#VRML V2.0 utf8 +# Generated by VRML 2.0 driver of GEANT4 + + +#---------- CAMERA +Viewpoint { + position 0 0 452.607 +} + +#---------- SOLID: dummy.0 + Shape { + appearance Appearance { + material Material { + diffuseColor 0 1 1 + transparency 0.7 + } + } + geometry IndexedFaceSet { + coord Coordinate { + point [ + 0 0 1200, + 310.583 2.1464e-307 1159.11, + 300 80.3848 1159.11, + 268.973 155.291 1159.11, + 219.615 219.615 1159.11, + 155.291 268.973 1159.11, + 80.3848 300 1159.11, + 1.90177e-14 310.583 1159.11, + -80.3848 300 1159.11, + -155.291 268.973 1159.11, + -219.615 219.615 1159.11, + -268.973 155.291 1159.11, + -300 80.3848 1159.11, + -310.583 3.80354e-14 1159.11, + 600 4.14653e-307 1039.23, + 579.555 155.291 1039.23, + 519.615 300 1039.23, + 424.264 424.264 1039.23, + 300 519.615 1039.23, + 155.291 579.555 1039.23, + 3.67394e-14 600 1039.23, + -155.291 579.555 1039.23, + -300 519.615 1039.23, + -424.264 424.264 1039.23, + -519.615 300 1039.23, + -579.555 155.291 1039.23, + -600 7.34788e-14 1039.23, + 848.528 5.86408e-307 848.528, + 819.615 219.615 848.528, + 734.847 424.264 848.528, + 600 600 848.528, + 424.264 734.847 848.528, + 219.615 819.615 848.528, + 5.19574e-14 848.528 848.528, + -219.615 819.615 848.528, + -424.264 734.847 848.528, + -600 600 848.528, + -734.847 424.264 848.528, + -819.615 219.615 848.528, + -848.528 1.03915e-13 848.528, + 1039.23 7.182e-307 600, + 1003.82 268.973 600, + 900 519.615 600, + 734.847 734.847 600, + 519.615 900 600, + 268.973 1003.82 600, + 6.36345e-14 1039.23 600, + -268.973 1003.82 600, + -519.615 900 600, + -734.847 734.847 600, + -900 519.615 600, + -1003.82 268.973 600, + -1039.23 1.27269e-13 600, + 1159.11 8.01048e-307 310.583, + 1119.62 300 310.583, + 1003.82 579.555 310.583, + 819.615 819.615 310.583, + 579.555 1003.82 310.583, + 300 1119.62 310.583, + 7.09751e-14 1159.11 310.583, + -300 1119.62 310.583, + -579.555 1003.82 310.583, + -819.615 819.615 310.583, + -1003.82 579.555 310.583, + -1119.62 300 310.583, + -1159.11 1.4195e-13 310.583, + 1200 8.29306e-307 7.34788e-14, + 1159.11 310.583 7.34788e-14, + 1039.23 600 7.34788e-14, + 848.528 848.528 7.34788e-14, + 600 1039.23 7.34788e-14, + 310.583 1159.11 7.34788e-14, + 7.34788e-14 1200 7.34788e-14, + -310.583 1159.11 7.34788e-14, + -600 1039.23 7.34788e-14, + -848.528 848.528 7.34788e-14, + -1039.23 600 7.34788e-14, + -1159.11 310.583 7.34788e-14, + -1200 1.46958e-13 7.34788e-14, + 1159.11 8.01048e-307 -310.583, + 1119.62 300 -310.583, + 1003.82 579.555 -310.583, + 819.615 819.615 -310.583, + 579.555 1003.82 -310.583, + 300 1119.62 -310.583, + 7.09751e-14 1159.11 -310.583, + -300 1119.62 -310.583, + -579.555 1003.82 -310.583, + -819.615 819.615 -310.583, + -1003.82 579.555 -310.583, + -1119.62 300 -310.583, + -1159.11 1.4195e-13 -310.583, + 1039.23 7.182e-307 -600, + 1003.82 268.973 -600, + 900 519.615 -600, + 734.847 734.847 -600, + 519.615 900 -600, + 268.973 1003.82 -600, + 6.36345e-14 1039.23 -600, + -268.973 1003.82 -600, + -519.615 900 -600, + -734.847 734.847 -600, + -900 519.615 -600, + -1003.82 268.973 -600, + -1039.23 1.27269e-13 -600, + 848.528 5.86408e-307 -848.528, + 819.615 219.615 -848.528, + 734.847 424.264 -848.528, + 600 600 -848.528, + 424.264 734.847 -848.528, + 219.615 819.615 -848.528, + 5.19574e-14 848.528 -848.528, + -219.615 819.615 -848.528, + -424.264 734.847 -848.528, + -600 600 -848.528, + -734.847 424.264 -848.528, + -819.615 219.615 -848.528, + -848.528 1.03915e-13 -848.528, + 600 4.14653e-307 -1039.23, + 579.555 155.291 -1039.23, + 519.615 300 -1039.23, + 424.264 424.264 -1039.23, + 300 519.615 -1039.23, + 155.291 579.555 -1039.23, + 3.67394e-14 600 -1039.23, + -155.291 579.555 -1039.23, + -300 519.615 -1039.23, + -424.264 424.264 -1039.23, + -519.615 300 -1039.23, + -579.555 155.291 -1039.23, + -600 7.34788e-14 -1039.23, + 310.583 2.1464e-307 -1159.11, + 300 80.3848 -1159.11, + 268.973 155.291 -1159.11, + 219.615 219.615 -1159.11, + 155.291 268.973 -1159.11, + 80.3848 300 -1159.11, + 1.90177e-14 310.583 -1159.11, + -80.3848 300 -1159.11, + -155.291 268.973 -1159.11, + -219.615 219.615 -1159.11, + -268.973 155.291 -1159.11, + -300 80.3848 -1159.11, + -310.583 3.80354e-14 -1159.11, + 0 0 -1200, + 0 0 1000, + 258.819 1.78867e-307 965.926, + 250 66.9873 965.926, + 224.144 129.41 965.926, + 183.013 183.013 965.926, + 129.41 224.144 965.926, + 66.9873 250 965.926, + 1.58481e-14 258.819 965.926, + -66.9873 250 965.926, + -129.41 224.144 965.926, + -183.013 183.013 965.926, + -224.144 129.41 965.926, + -250 66.9873 965.926, + -258.819 3.16962e-14 965.926, + 500 3.45544e-307 866.025, + 482.963 129.41 866.025, + 433.013 250 866.025, + 353.553 353.553 866.025, + 250 433.013 866.025, + 129.41 482.963 866.025, + 3.06162e-14 500 866.025, + -129.41 482.963 866.025, + -250 433.013 866.025, + -353.553 353.553 866.025, + -433.013 250 866.025, + -482.963 129.41 866.025, + -500 6.12323e-14 866.025, + 707.107 4.88673e-307 707.107, + 683.013 183.013 707.107, + 612.372 353.553 707.107, + 500 500 707.107, + 353.553 612.372 707.107, + 183.013 683.013 707.107, + 4.32978e-14 707.107 707.107, + -183.013 683.013 707.107, + -353.553 612.372 707.107, + -500 500 707.107, + -612.372 353.553 707.107, + -683.013 183.013 707.107, + -707.107 8.65956e-14 707.107, + 866.025 5.985e-307 500, + 836.516 224.144 500, + 750 433.013 500, + 612.372 612.372 500, + 433.013 750 500, + 224.144 836.516 500, + 5.30288e-14 866.025 500, + -224.144 836.516 500, + -433.013 750 500, + -612.372 612.372 500, + -750 433.013 500, + -836.516 224.144 500, + -866.025 1.06058e-13 500, + 965.926 6.6754e-307 258.819, + 933.013 250 258.819, + 836.516 482.963 258.819, + 683.013 683.013 258.819, + 482.963 836.516 258.819, + 250 933.013 258.819, + 5.91459e-14 965.926 258.819, + -250 933.013 258.819, + -482.963 836.516 258.819, + -683.013 683.013 258.819, + -836.516 482.963 258.819, + -933.013 250 258.819, + -965.926 1.18292e-13 258.819, + 1000 6.91088e-307 6.12323e-14, + 965.926 258.819 6.12323e-14, + 866.025 500 6.12323e-14, + 707.107 707.107 6.12323e-14, + 500 866.025 6.12323e-14, + 258.819 965.926 6.12323e-14, + 6.12323e-14 1000 6.12323e-14, + -258.819 965.926 6.12323e-14, + -500 866.025 6.12323e-14, + -707.107 707.107 6.12323e-14, + -866.025 500 6.12323e-14, + -965.926 258.819 6.12323e-14, + -1000 1.22465e-13 6.12323e-14, + 965.926 6.6754e-307 -258.819, + 933.013 250 -258.819, + 836.516 482.963 -258.819, + 683.013 683.013 -258.819, + 482.963 836.516 -258.819, + 250 933.013 -258.819, + 5.91459e-14 965.926 -258.819, + -250 933.013 -258.819, + -482.963 836.516 -258.819, + -683.013 683.013 -258.819, + -836.516 482.963 -258.819, + -933.013 250 -258.819, + -965.926 1.18292e-13 -258.819, + 866.025 5.985e-307 -500, + 836.516 224.144 -500, + 750 433.013 -500, + 612.372 612.372 -500, + 433.013 750 -500, + 224.144 836.516 -500, + 5.30288e-14 866.025 -500, + -224.144 836.516 -500, + -433.013 750 -500, + -612.372 612.372 -500, + -750 433.013 -500, + -836.516 224.144 -500, + -866.025 1.06058e-13 -500, + 707.107 4.88673e-307 -707.107, + 683.013 183.013 -707.107, + 612.372 353.553 -707.107, + 500 500 -707.107, + 353.553 612.372 -707.107, + 183.013 683.013 -707.107, + 4.32978e-14 707.107 -707.107, + -183.013 683.013 -707.107, + -353.553 612.372 -707.107, + -500 500 -707.107, + -612.372 353.553 -707.107, + -683.013 183.013 -707.107, + -707.107 8.65956e-14 -707.107, + 500 3.45544e-307 -866.025, + 482.963 129.41 -866.025, + 433.013 250 -866.025, + 353.553 353.553 -866.025, + 250 433.013 -866.025, + 129.41 482.963 -866.025, + 3.06162e-14 500 -866.025, + -129.41 482.963 -866.025, + -250 433.013 -866.025, + -353.553 353.553 -866.025, + -433.013 250 -866.025, + -482.963 129.41 -866.025, + -500 6.12323e-14 -866.025, + 258.819 1.78867e-307 -965.926, + 250 66.9873 -965.926, + 224.144 129.41 -965.926, + 183.013 183.013 -965.926, + 129.41 224.144 -965.926, + 66.9873 250 -965.926, + 1.58481e-14 258.819 -965.926, + -66.9873 250 -965.926, + -129.41 224.144 -965.926, + -183.013 183.013 -965.926, + -224.144 129.41 -965.926, + -250 66.9873 -965.926, + -258.819 3.16962e-14 -965.926, + 0 0 -1000, + ] + } + coordIndex [ + 0, 1, 2, -1, + 0, 2, 3, -1, + 0, 3, 4, -1, + 0, 4, 5, -1, + 0, 5, 6, -1, + 0, 6, 7, -1, + 0, 7, 8, -1, + 0, 8, 9, -1, + 0, 9, 10, -1, + 0, 10, 11, -1, + 0, 11, 12, -1, + 0, 12, 13, -1, + 1, 14, 15, 2, -1, + 2, 15, 16, 3, -1, + 3, 16, 17, 4, -1, + 4, 17, 18, 5, -1, + 5, 18, 19, 6, -1, + 6, 19, 20, 7, -1, + 7, 20, 21, 8, -1, + 8, 21, 22, 9, -1, + 9, 22, 23, 10, -1, + 10, 23, 24, 11, -1, + 11, 24, 25, 12, -1, + 12, 25, 26, 13, -1, + 14, 27, 28, 15, -1, + 15, 28, 29, 16, -1, + 16, 29, 30, 17, -1, + 17, 30, 31, 18, -1, + 18, 31, 32, 19, -1, + 19, 32, 33, 20, -1, + 20, 33, 34, 21, -1, + 21, 34, 35, 22, -1, + 22, 35, 36, 23, -1, + 23, 36, 37, 24, -1, + 24, 37, 38, 25, -1, + 25, 38, 39, 26, -1, + 27, 40, 41, 28, -1, + 28, 41, 42, 29, -1, + 29, 42, 43, 30, -1, + 30, 43, 44, 31, -1, + 31, 44, 45, 32, -1, + 32, 45, 46, 33, -1, + 33, 46, 47, 34, -1, + 34, 47, 48, 35, -1, + 35, 48, 49, 36, -1, + 36, 49, 50, 37, -1, + 37, 50, 51, 38, -1, + 38, 51, 52, 39, -1, + 40, 53, 54, 41, -1, + 41, 54, 55, 42, -1, + 42, 55, 56, 43, -1, + 43, 56, 57, 44, -1, + 44, 57, 58, 45, -1, + 45, 58, 59, 46, -1, + 46, 59, 60, 47, -1, + 47, 60, 61, 48, -1, + 48, 61, 62, 49, -1, + 49, 62, 63, 50, -1, + 50, 63, 64, 51, -1, + 51, 64, 65, 52, -1, + 53, 66, 67, 54, -1, + 54, 67, 68, 55, -1, + 55, 68, 69, 56, -1, + 56, 69, 70, 57, -1, + 57, 70, 71, 58, -1, + 58, 71, 72, 59, -1, + 59, 72, 73, 60, -1, + 60, 73, 74, 61, -1, + 61, 74, 75, 62, -1, + 62, 75, 76, 63, -1, + 63, 76, 77, 64, -1, + 64, 77, 78, 65, -1, + 66, 79, 80, 67, -1, + 67, 80, 81, 68, -1, + 68, 81, 82, 69, -1, + 69, 82, 83, 70, -1, + 70, 83, 84, 71, -1, + 71, 84, 85, 72, -1, + 72, 85, 86, 73, -1, + 73, 86, 87, 74, -1, + 74, 87, 88, 75, -1, + 75, 88, 89, 76, -1, + 76, 89, 90, 77, -1, + 77, 90, 91, 78, -1, + 79, 92, 93, 80, -1, + 80, 93, 94, 81, -1, + 81, 94, 95, 82, -1, + 82, 95, 96, 83, -1, + 83, 96, 97, 84, -1, + 84, 97, 98, 85, -1, + 85, 98, 99, 86, -1, + 86, 99, 100, 87, -1, + 87, 100, 101, 88, -1, + 88, 101, 102, 89, -1, + 89, 102, 103, 90, -1, + 90, 103, 104, 91, -1, + 92, 105, 106, 93, -1, + 93, 106, 107, 94, -1, + 94, 107, 108, 95, -1, + 95, 108, 109, 96, -1, + 96, 109, 110, 97, -1, + 97, 110, 111, 98, -1, + 98, 111, 112, 99, -1, + 99, 112, 113, 100, -1, + 100, 113, 114, 101, -1, + 101, 114, 115, 102, -1, + 102, 115, 116, 103, -1, + 103, 116, 117, 104, -1, + 105, 118, 119, 106, -1, + 106, 119, 120, 107, -1, + 107, 120, 121, 108, -1, + 108, 121, 122, 109, -1, + 109, 122, 123, 110, -1, + 110, 123, 124, 111, -1, + 111, 124, 125, 112, -1, + 112, 125, 126, 113, -1, + 113, 126, 127, 114, -1, + 114, 127, 128, 115, -1, + 115, 128, 129, 116, -1, + 116, 129, 130, 117, -1, + 118, 131, 132, 119, -1, + 119, 132, 133, 120, -1, + 120, 133, 134, 121, -1, + 121, 134, 135, 122, -1, + 122, 135, 136, 123, -1, + 123, 136, 137, 124, -1, + 124, 137, 138, 125, -1, + 125, 138, 139, 126, -1, + 126, 139, 140, 127, -1, + 127, 140, 141, 128, -1, + 128, 141, 142, 129, -1, + 129, 142, 143, 130, -1, + 131, 144, 132, -1, + 132, 144, 133, -1, + 133, 144, 134, -1, + 134, 144, 135, -1, + 135, 144, 136, -1, + 136, 144, 137, -1, + 137, 144, 138, -1, + 138, 144, 139, -1, + 139, 144, 140, -1, + 140, 144, 141, -1, + 141, 144, 142, -1, + 142, 144, 143, -1, + 146, 145, 147, -1, + 147, 145, 148, -1, + 148, 145, 149, -1, + 149, 145, 150, -1, + 150, 145, 151, -1, + 151, 145, 152, -1, + 152, 145, 153, -1, + 153, 145, 154, -1, + 154, 145, 155, -1, + 155, 145, 156, -1, + 156, 145, 157, -1, + 157, 145, 158, -1, + 159, 146, 147, 160, -1, + 160, 147, 148, 161, -1, + 161, 148, 149, 162, -1, + 162, 149, 150, 163, -1, + 163, 150, 151, 164, -1, + 164, 151, 152, 165, -1, + 165, 152, 153, 166, -1, + 166, 153, 154, 167, -1, + 167, 154, 155, 168, -1, + 168, 155, 156, 169, -1, + 169, 156, 157, 170, -1, + 170, 157, 158, 171, -1, + 172, 159, 160, 173, -1, + 173, 160, 161, 174, -1, + 174, 161, 162, 175, -1, + 175, 162, 163, 176, -1, + 176, 163, 164, 177, -1, + 177, 164, 165, 178, -1, + 178, 165, 166, 179, -1, + 179, 166, 167, 180, -1, + 180, 167, 168, 181, -1, + 181, 168, 169, 182, -1, + 182, 169, 170, 183, -1, + 183, 170, 171, 184, -1, + 185, 172, 173, 186, -1, + 186, 173, 174, 187, -1, + 187, 174, 175, 188, -1, + 188, 175, 176, 189, -1, + 189, 176, 177, 190, -1, + 190, 177, 178, 191, -1, + 191, 178, 179, 192, -1, + 192, 179, 180, 193, -1, + 193, 180, 181, 194, -1, + 194, 181, 182, 195, -1, + 195, 182, 183, 196, -1, + 196, 183, 184, 197, -1, + 198, 185, 186, 199, -1, + 199, 186, 187, 200, -1, + 200, 187, 188, 201, -1, + 201, 188, 189, 202, -1, + 202, 189, 190, 203, -1, + 203, 190, 191, 204, -1, + 204, 191, 192, 205, -1, + 205, 192, 193, 206, -1, + 206, 193, 194, 207, -1, + 207, 194, 195, 208, -1, + 208, 195, 196, 209, -1, + 209, 196, 197, 210, -1, + 211, 198, 199, 212, -1, + 212, 199, 200, 213, -1, + 213, 200, 201, 214, -1, + 214, 201, 202, 215, -1, + 215, 202, 203, 216, -1, + 216, 203, 204, 217, -1, + 217, 204, 205, 218, -1, + 218, 205, 206, 219, -1, + 219, 206, 207, 220, -1, + 220, 207, 208, 221, -1, + 221, 208, 209, 222, -1, + 222, 209, 210, 223, -1, + 224, 211, 212, 225, -1, + 225, 212, 213, 226, -1, + 226, 213, 214, 227, -1, + 227, 214, 215, 228, -1, + 228, 215, 216, 229, -1, + 229, 216, 217, 230, -1, + 230, 217, 218, 231, -1, + 231, 218, 219, 232, -1, + 232, 219, 220, 233, -1, + 233, 220, 221, 234, -1, + 234, 221, 222, 235, -1, + 235, 222, 223, 236, -1, + 237, 224, 225, 238, -1, + 238, 225, 226, 239, -1, + 239, 226, 227, 240, -1, + 240, 227, 228, 241, -1, + 241, 228, 229, 242, -1, + 242, 229, 230, 243, -1, + 243, 230, 231, 244, -1, + 244, 231, 232, 245, -1, + 245, 232, 233, 246, -1, + 246, 233, 234, 247, -1, + 247, 234, 235, 248, -1, + 248, 235, 236, 249, -1, + 250, 237, 238, 251, -1, + 251, 238, 239, 252, -1, + 252, 239, 240, 253, -1, + 253, 240, 241, 254, -1, + 254, 241, 242, 255, -1, + 255, 242, 243, 256, -1, + 256, 243, 244, 257, -1, + 257, 244, 245, 258, -1, + 258, 245, 246, 259, -1, + 259, 246, 247, 260, -1, + 260, 247, 248, 261, -1, + 261, 248, 249, 262, -1, + 263, 250, 251, 264, -1, + 264, 251, 252, 265, -1, + 265, 252, 253, 266, -1, + 266, 253, 254, 267, -1, + 267, 254, 255, 268, -1, + 268, 255, 256, 269, -1, + 269, 256, 257, 270, -1, + 270, 257, 258, 271, -1, + 271, 258, 259, 272, -1, + 272, 259, 260, 273, -1, + 273, 260, 261, 274, -1, + 274, 261, 262, 275, -1, + 276, 263, 264, 277, -1, + 277, 264, 265, 278, -1, + 278, 265, 266, 279, -1, + 279, 266, 267, 280, -1, + 280, 267, 268, 281, -1, + 281, 268, 269, 282, -1, + 282, 269, 270, 283, -1, + 283, 270, 271, 284, -1, + 284, 271, 272, 285, -1, + 285, 272, 273, 286, -1, + 286, 273, 274, 287, -1, + 287, 274, 275, 288, -1, + 289, 276, 277, -1, + 289, 277, 278, -1, + 289, 278, 279, -1, + 289, 279, 280, -1, + 289, 280, 281, -1, + 289, 281, 282, -1, + 289, 282, 283, -1, + 289, 283, 284, -1, + 289, 284, 285, -1, + 289, 285, 286, -1, + 289, 286, 287, -1, + 289, 287, 288, -1, + 0, 145, 146, 1, -1, + 13, 158, 145, 0, -1, + 1, 146, 159, 14, -1, + 26, 171, 158, 13, -1, + 14, 159, 172, 27, -1, + 39, 184, 171, 26, -1, + 27, 172, 185, 40, -1, + 52, 197, 184, 39, -1, + 40, 185, 198, 53, -1, + 65, 210, 197, 52, -1, + 53, 198, 211, 66, -1, + 78, 223, 210, 65, -1, + 66, 211, 224, 79, -1, + 91, 236, 223, 78, -1, + 79, 224, 237, 92, -1, + 104, 249, 236, 91, -1, + 92, 237, 250, 105, -1, + 117, 262, 249, 104, -1, + 105, 250, 263, 118, -1, + 130, 275, 262, 117, -1, + 118, 263, 276, 131, -1, + 143, 288, 275, 130, -1, + 131, 276, 289, 144, -1, + 144, 289, 288, 143, -1, + ] + solid FALSE + } + } +#---------- POLYLINE +Shape { + appearance Appearance { + material Material { + diffuseColor 1 0 0 + emissiveColor 1 0 0 + } + } + geometry IndexedLineSet { + coord Coordinate { + point [ + 0 0 0, + 100 0 0, + ] + } + coordIndex [ + 0, 1, -1 + ] + } +} +#---------- POLYLINE +Shape { + appearance Appearance { + material Material { + diffuseColor 0 1 0 + emissiveColor 0 1 0 + } + } + geometry IndexedLineSet { + coord Coordinate { + point [ + 0 0 0, + 0 100 0, + ] + } + coordIndex [ + 0, 1, -1 + ] + } +} +#---------- POLYLINE +Shape { + appearance Appearance { + material Material { + diffuseColor 0 0 1 + emissiveColor 0 0 1 + } + } + geometry IndexedLineSet { + coord Coordinate { + point [ + 0 0 0, + 0 0 100, + ] + } + coordIndex [ + 0, 1, -1 + ] + } +} +#End of file. diff --git a/environments/g4py/tests/gtest05/vrml/g4tet.wrl b/environments/g4py/tests/gtest05/vrml/g4tet.wrl new file mode 100644 index 0000000000..1259f8f3b9 --- /dev/null +++ b/environments/g4py/tests/gtest05/vrml/g4tet.wrl @@ -0,0 +1,96 @@ +#VRML V2.0 utf8 +# Generated by VRML 2.0 driver of GEANT4 + + +#---------- CAMERA +Viewpoint { + position 0 0 452.607 +} + +#---------- SOLID: dummy.0 + Shape { + appearance Appearance { + material Material { + diffuseColor 0 1 0 + transparency 0.7 + } + } + geometry IndexedFaceSet { + coord Coordinate { + point [ + 0 0 346.41, + 0 326.599 -115.47, + 282.843 -163.299 -115.47, + -282.843 -163.299 -115.47, + ] + } + coordIndex [ + 0, 2, 1, -1, + 0, 3, 2, -1, + 0, 1, 3, -1, + 1, 2, 3, -1, + ] + solid FALSE + } + } +#---------- POLYLINE +Shape { + appearance Appearance { + material Material { + diffuseColor 1 0 0 + emissiveColor 1 0 0 + } + } + geometry IndexedLineSet { + coord Coordinate { + point [ + 0 0 0, + 100 0 0, + ] + } + coordIndex [ + 0, 1, -1 + ] + } +} +#---------- POLYLINE +Shape { + appearance Appearance { + material Material { + diffuseColor 0 1 0 + emissiveColor 0 1 0 + } + } + geometry IndexedLineSet { + coord Coordinate { + point [ + 0 0 0, + 0 100 0, + ] + } + coordIndex [ + 0, 1, -1 + ] + } +} +#---------- POLYLINE +Shape { + appearance Appearance { + material Material { + diffuseColor 0 0 1 + emissiveColor 0 0 1 + } + } + geometry IndexedLineSet { + coord Coordinate { + point [ + 0 0 0, + 0 0 100, + ] + } + coordIndex [ + 0, 1, -1 + ] + } +} +#End of file. diff --git a/environments/g4py/tests/gtest05/vrml/g4torus.wrl b/environments/g4py/tests/gtest05/vrml/g4torus.wrl new file mode 100644 index 0000000000..3d3edcce0f --- /dev/null +++ b/environments/g4py/tests/gtest05/vrml/g4torus.wrl @@ -0,0 +1,760 @@ +#VRML V2.0 utf8 +# Generated by VRML 2.0 driver of GEANT4 + + +#---------- CAMERA +Viewpoint { + position 0 0 452.607 +} + +#---------- SOLID: dummy.0 + Shape { + appearance Appearance { + material Material { + diffuseColor 1 0 1 + transparency 0.7 + } + } + geometry IndexedFaceSet { + coord Coordinate { + point [ + 2000 0 600, + 1931.85 517.638 600, + 1732.05 1000 600, + 1414.21 1414.21 600, + 1000 1732.05 600, + 517.638 1931.85 600, + 1.22465e-13 2000 600, + 2155.29 0 579.555, + 2081.85 557.83 579.555, + 1866.54 1077.65 579.555, + 1524.02 1524.02 579.555, + 1077.65 1866.54 579.555, + 557.83 2081.85 579.555, + 1.31974e-13 2155.29 579.555, + 2300 0 519.615, + 2221.63 595.284 519.615, + 1991.86 1150 519.615, + 1626.35 1626.35 519.615, + 1150 1991.86 519.615, + 595.284 2221.63 519.615, + 1.40834e-13 2300 519.615, + 2424.26 0 424.264, + 2341.66 627.446 424.264, + 2099.47 1212.13 424.264, + 1714.21 1714.21 424.264, + 1212.13 2099.47 424.264, + 627.446 2341.66 424.264, + 1.48443e-13 2424.26 424.264, + 2519.62 0 300, + 2433.76 652.124 300, + 2182.05 1259.81 300, + 1781.64 1781.64 300, + 1259.81 2182.05 300, + 652.124 2433.76 300, + 1.54282e-13 2519.62 300, + 2579.56 0 155.291, + 2491.66 667.638 155.291, + 2233.96 1289.78 155.291, + 1824.02 1824.02 155.291, + 1289.78 2233.96 155.291, + 667.638 2491.66 155.291, + 1.57952e-13 2579.56 155.291, + 2600 0 3.67394e-14, + 2511.41 672.93 3.67394e-14, + 2251.67 1300 3.67394e-14, + 1838.48 1838.48 3.67394e-14, + 1300 2251.67 3.67394e-14, + 672.93 2511.41 3.67394e-14, + 1.59204e-13 2600 3.67394e-14, + 2579.56 0 -155.291, + 2491.66 667.638 -155.291, + 2233.96 1289.78 -155.291, + 1824.02 1824.02 -155.291, + 1289.78 2233.96 -155.291, + 667.638 2491.66 -155.291, + 1.57952e-13 2579.56 -155.291, + 2519.62 0 -300, + 2433.76 652.124 -300, + 2182.05 1259.81 -300, + 1781.64 1781.64 -300, + 1259.81 2182.05 -300, + 652.124 2433.76 -300, + 1.54282e-13 2519.62 -300, + 2424.26 0 -424.264, + 2341.66 627.446 -424.264, + 2099.47 1212.13 -424.264, + 1714.21 1714.21 -424.264, + 1212.13 2099.47 -424.264, + 627.446 2341.66 -424.264, + 1.48443e-13 2424.26 -424.264, + 2300 0 -519.615, + 2221.63 595.284 -519.615, + 1991.86 1150 -519.615, + 1626.35 1626.35 -519.615, + 1150 1991.86 -519.615, + 595.284 2221.63 -519.615, + 1.40834e-13 2300 -519.615, + 2155.29 0 -579.555, + 2081.85 557.83 -579.555, + 1866.54 1077.65 -579.555, + 1524.02 1524.02 -579.555, + 1077.65 1866.54 -579.555, + 557.83 2081.85 -579.555, + 1.31974e-13 2155.29 -579.555, + 2000 0 -600, + 1931.85 517.638 -600, + 1732.05 1000 -600, + 1414.21 1414.21 -600, + 1000 1732.05 -600, + 517.638 1931.85 -600, + 1.22465e-13 2000 -600, + 1844.71 0 -579.555, + 1781.85 477.446 -579.555, + 1597.56 922.354 -579.555, + 1304.41 1304.41 -579.555, + 922.354 1597.56 -579.555, + 477.446 1781.85 -579.555, + 1.12956e-13 1844.71 -579.555, + 1700 0 -519.615, + 1642.07 439.992 -519.615, + 1472.24 850 -519.615, + 1202.08 1202.08 -519.615, + 850 1472.24 -519.615, + 439.992 1642.07 -519.615, + 1.04095e-13 1700 -519.615, + 1575.74 0 -424.264, + 1522.04 407.83 -424.264, + 1364.63 787.868 -424.264, + 1114.21 1114.21 -424.264, + 787.868 1364.63 -424.264, + 407.83 1522.04 -424.264, + 9.6486e-14 1575.74 -424.264, + 1480.38 0 -300, + 1429.94 383.152 -300, + 1282.05 740.192 -300, + 1046.79 1046.79 -300, + 740.192 1282.05 -300, + 383.152 1429.94 -300, + 9.06474e-14 1480.38 -300, + 1420.44 0 -155.291, + 1372.04 367.638 -155.291, + 1230.14 710.222 -155.291, + 1004.41 1004.41 -155.291, + 710.222 1230.14 -155.291, + 367.638 1372.04 -155.291, + 8.69771e-14 1420.44 -155.291, + 1400 0 -1.10218e-13, + 1352.3 362.347 -1.10218e-13, + 1212.44 700 -1.10218e-13, + 989.949 989.949 -1.10218e-13, + 700 1212.44 -1.10218e-13, + 362.347 1352.3 -1.10218e-13, + 8.57253e-14 1400 -1.10218e-13, + 1420.44 0 155.291, + 1372.04 367.638 155.291, + 1230.14 710.222 155.291, + 1004.41 1004.41 155.291, + 710.222 1230.14 155.291, + 367.638 1372.04 155.291, + 8.69771e-14 1420.44 155.291, + 1480.38 0 300, + 1429.94 383.152 300, + 1282.05 740.192 300, + 1046.79 1046.79 300, + 740.192 1282.05 300, + 383.152 1429.94 300, + 9.06474e-14 1480.38 300, + 1575.74 0 424.264, + 1522.04 407.83 424.264, + 1364.63 787.868 424.264, + 1114.21 1114.21 424.264, + 787.868 1364.63 424.264, + 407.83 1522.04 424.264, + 9.6486e-14 1575.74 424.264, + 1700 0 519.615, + 1642.07 439.992 519.615, + 1472.24 850 519.615, + 1202.08 1202.08 519.615, + 850 1472.24 519.615, + 439.992 1642.07 519.615, + 1.04095e-13 1700 519.615, + 1844.71 0 579.555, + 1781.85 477.446 579.555, + 1597.56 922.354 579.555, + 1304.41 1304.41 579.555, + 922.354 1597.56 579.555, + 477.446 1781.85 579.555, + 1.12956e-13 1844.71 579.555, + 2000 0 400, + 1931.85 517.638 400, + 1732.05 1000 400, + 1414.21 1414.21 400, + 1000 1732.05 400, + 517.638 1931.85 400, + 1.22465e-13 2000 400, + 2103.53 0 386.37, + 2031.85 544.433 386.37, + 1821.71 1051.76 386.37, + 1487.42 1487.42 386.37, + 1051.76 1821.71 386.37, + 544.433 2031.85 386.37, + 1.28804e-13 2103.53 386.37, + 2200 0 346.41, + 2125.04 569.402 346.41, + 1905.26 1100 346.41, + 1555.63 1555.63 346.41, + 1100 1905.26 346.41, + 569.402 2125.04 346.41, + 1.34711e-13 2200 346.41, + 2282.84 0 282.843, + 2205.06 590.843 282.843, + 1977 1141.42 282.843, + 1614.21 1614.21 282.843, + 1141.42 1977 282.843, + 590.843 2205.06 282.843, + 1.39784e-13 2282.84 282.843, + 2346.41 0 200, + 2266.46 607.296 200, + 2032.05 1173.21 200, + 1659.16 1659.16 200, + 1173.21 2032.05 200, + 607.296 2266.46 200, + 1.43676e-13 2346.41 200, + 2386.37 0 103.528, + 2305.06 617.638 103.528, + 2066.66 1193.19 103.528, + 1687.42 1687.42 103.528, + 1193.19 2066.66 103.528, + 617.638 2305.06 103.528, + 1.46123e-13 2386.37 103.528, + 2400 0 2.44929e-14, + 2318.22 621.166 2.44929e-14, + 2078.46 1200 2.44929e-14, + 1697.06 1697.06 2.44929e-14, + 1200 2078.46 2.44929e-14, + 621.166 2318.22 2.44929e-14, + 1.46958e-13 2400 2.44929e-14, + 2386.37 0 -103.528, + 2305.06 617.638 -103.528, + 2066.66 1193.19 -103.528, + 1687.42 1687.42 -103.528, + 1193.19 2066.66 -103.528, + 617.638 2305.06 -103.528, + 1.46123e-13 2386.37 -103.528, + 2346.41 0 -200, + 2266.46 607.296 -200, + 2032.05 1173.21 -200, + 1659.16 1659.16 -200, + 1173.21 2032.05 -200, + 607.296 2266.46 -200, + 1.43676e-13 2346.41 -200, + 2282.84 0 -282.843, + 2205.06 590.843 -282.843, + 1977 1141.42 -282.843, + 1614.21 1614.21 -282.843, + 1141.42 1977 -282.843, + 590.843 2205.06 -282.843, + 1.39784e-13 2282.84 -282.843, + 2200 0 -346.41, + 2125.04 569.402 -346.41, + 1905.26 1100 -346.41, + 1555.63 1555.63 -346.41, + 1100 1905.26 -346.41, + 569.402 2125.04 -346.41, + 1.34711e-13 2200 -346.41, + 2103.53 0 -386.37, + 2031.85 544.433 -386.37, + 1821.71 1051.76 -386.37, + 1487.42 1487.42 -386.37, + 1051.76 1821.71 -386.37, + 544.433 2031.85 -386.37, + 1.28804e-13 2103.53 -386.37, + 2000 0 -400, + 1931.85 517.638 -400, + 1732.05 1000 -400, + 1414.21 1414.21 -400, + 1000 1732.05 -400, + 517.638 1931.85 -400, + 1.22465e-13 2000 -400, + 1896.47 0 -386.37, + 1831.85 490.843 -386.37, + 1642.39 948.236 -386.37, + 1341.01 1341.01 -386.37, + 948.236 1642.39 -386.37, + 490.843 1831.85 -386.37, + 1.16125e-13 1896.47 -386.37, + 1800 0 -346.41, + 1738.67 465.874 -346.41, + 1558.85 900 -346.41, + 1272.79 1272.79 -346.41, + 900 1558.85 -346.41, + 465.874 1738.67 -346.41, + 1.10218e-13 1800 -346.41, + 1717.16 0 -282.843, + 1658.65 444.433 -282.843, + 1487.1 858.579 -282.843, + 1214.21 1214.21 -282.843, + 858.579 1487.1 -282.843, + 444.433 1658.65 -282.843, + 1.05146e-13 1717.16 -282.843, + 1653.59 0 -200, + 1597.25 427.981 -200, + 1432.05 826.795 -200, + 1169.26 1169.26 -200, + 826.795 1432.05 -200, + 427.981 1597.25 -200, + 1.01253e-13 1653.59 -200, + 1613.63 0 -103.528, + 1558.65 417.638 -103.528, + 1397.44 806.815 -103.528, + 1141.01 1141.01 -103.528, + 806.815 1397.44 -103.528, + 417.638 1558.65 -103.528, + 9.88063e-14 1613.63 -103.528, + 1600 0 -7.34788e-14, + 1545.48 414.11 -7.34788e-14, + 1385.64 800 -7.34788e-14, + 1131.37 1131.37 -7.34788e-14, + 800 1385.64 -7.34788e-14, + 414.11 1545.48 -7.34788e-14, + 9.79717e-14 1600 -7.34788e-14, + 1613.63 0 103.528, + 1558.65 417.638 103.528, + 1397.44 806.815 103.528, + 1141.01 1141.01 103.528, + 806.815 1397.44 103.528, + 417.638 1558.65 103.528, + 9.88063e-14 1613.63 103.528, + 1653.59 0 200, + 1597.25 427.981 200, + 1432.05 826.795 200, + 1169.26 1169.26 200, + 826.795 1432.05 200, + 427.981 1597.25 200, + 1.01253e-13 1653.59 200, + 1717.16 0 282.843, + 1658.65 444.433 282.843, + 1487.1 858.579 282.843, + 1214.21 1214.21 282.843, + 858.579 1487.1 282.843, + 444.433 1658.65 282.843, + 1.05146e-13 1717.16 282.843, + 1800 0 346.41, + 1738.67 465.874 346.41, + 1558.85 900 346.41, + 1272.79 1272.79 346.41, + 900 1558.85 346.41, + 465.874 1738.67 346.41, + 1.10218e-13 1800 346.41, + 1896.47 0 386.37, + 1831.85 490.843 386.37, + 1642.39 948.236 386.37, + 1341.01 1341.01 386.37, + 948.236 1642.39 386.37, + 490.843 1831.85 386.37, + 1.16125e-13 1896.47 386.37, + ] + } + coordIndex [ + 0, 7, 8, 1, -1, + 1, 8, 9, 2, -1, + 2, 9, 10, 3, -1, + 3, 10, 11, 4, -1, + 4, 11, 12, 5, -1, + 5, 12, 13, 6, -1, + 7, 14, 15, 8, -1, + 8, 15, 16, 9, -1, + 9, 16, 17, 10, -1, + 10, 17, 18, 11, -1, + 11, 18, 19, 12, -1, + 12, 19, 20, 13, -1, + 14, 21, 22, 15, -1, + 15, 22, 23, 16, -1, + 16, 23, 24, 17, -1, + 17, 24, 25, 18, -1, + 18, 25, 26, 19, -1, + 19, 26, 27, 20, -1, + 21, 28, 29, 22, -1, + 22, 29, 30, 23, -1, + 23, 30, 31, 24, -1, + 24, 31, 32, 25, -1, + 25, 32, 33, 26, -1, + 26, 33, 34, 27, -1, + 28, 35, 36, 29, -1, + 29, 36, 37, 30, -1, + 30, 37, 38, 31, -1, + 31, 38, 39, 32, -1, + 32, 39, 40, 33, -1, + 33, 40, 41, 34, -1, + 35, 42, 43, 36, -1, + 36, 43, 44, 37, -1, + 37, 44, 45, 38, -1, + 38, 45, 46, 39, -1, + 39, 46, 47, 40, -1, + 40, 47, 48, 41, -1, + 42, 49, 50, 43, -1, + 43, 50, 51, 44, -1, + 44, 51, 52, 45, -1, + 45, 52, 53, 46, -1, + 46, 53, 54, 47, -1, + 47, 54, 55, 48, -1, + 49, 56, 57, 50, -1, + 50, 57, 58, 51, -1, + 51, 58, 59, 52, -1, + 52, 59, 60, 53, -1, + 53, 60, 61, 54, -1, + 54, 61, 62, 55, -1, + 56, 63, 64, 57, -1, + 57, 64, 65, 58, -1, + 58, 65, 66, 59, -1, + 59, 66, 67, 60, -1, + 60, 67, 68, 61, -1, + 61, 68, 69, 62, -1, + 63, 70, 71, 64, -1, + 64, 71, 72, 65, -1, + 65, 72, 73, 66, -1, + 66, 73, 74, 67, -1, + 67, 74, 75, 68, -1, + 68, 75, 76, 69, -1, + 70, 77, 78, 71, -1, + 71, 78, 79, 72, -1, + 72, 79, 80, 73, -1, + 73, 80, 81, 74, -1, + 74, 81, 82, 75, -1, + 75, 82, 83, 76, -1, + 77, 84, 85, 78, -1, + 78, 85, 86, 79, -1, + 79, 86, 87, 80, -1, + 80, 87, 88, 81, -1, + 81, 88, 89, 82, -1, + 82, 89, 90, 83, -1, + 84, 91, 92, 85, -1, + 85, 92, 93, 86, -1, + 86, 93, 94, 87, -1, + 87, 94, 95, 88, -1, + 88, 95, 96, 89, -1, + 89, 96, 97, 90, -1, + 91, 98, 99, 92, -1, + 92, 99, 100, 93, -1, + 93, 100, 101, 94, -1, + 94, 101, 102, 95, -1, + 95, 102, 103, 96, -1, + 96, 103, 104, 97, -1, + 98, 105, 106, 99, -1, + 99, 106, 107, 100, -1, + 100, 107, 108, 101, -1, + 101, 108, 109, 102, -1, + 102, 109, 110, 103, -1, + 103, 110, 111, 104, -1, + 105, 112, 113, 106, -1, + 106, 113, 114, 107, -1, + 107, 114, 115, 108, -1, + 108, 115, 116, 109, -1, + 109, 116, 117, 110, -1, + 110, 117, 118, 111, -1, + 112, 119, 120, 113, -1, + 113, 120, 121, 114, -1, + 114, 121, 122, 115, -1, + 115, 122, 123, 116, -1, + 116, 123, 124, 117, -1, + 117, 124, 125, 118, -1, + 119, 126, 127, 120, -1, + 120, 127, 128, 121, -1, + 121, 128, 129, 122, -1, + 122, 129, 130, 123, -1, + 123, 130, 131, 124, -1, + 124, 131, 132, 125, -1, + 126, 133, 134, 127, -1, + 127, 134, 135, 128, -1, + 128, 135, 136, 129, -1, + 129, 136, 137, 130, -1, + 130, 137, 138, 131, -1, + 131, 138, 139, 132, -1, + 133, 140, 141, 134, -1, + 134, 141, 142, 135, -1, + 135, 142, 143, 136, -1, + 136, 143, 144, 137, -1, + 137, 144, 145, 138, -1, + 138, 145, 146, 139, -1, + 140, 147, 148, 141, -1, + 141, 148, 149, 142, -1, + 142, 149, 150, 143, -1, + 143, 150, 151, 144, -1, + 144, 151, 152, 145, -1, + 145, 152, 153, 146, -1, + 147, 154, 155, 148, -1, + 148, 155, 156, 149, -1, + 149, 156, 157, 150, -1, + 150, 157, 158, 151, -1, + 151, 158, 159, 152, -1, + 152, 159, 160, 153, -1, + 154, 161, 162, 155, -1, + 155, 162, 163, 156, -1, + 156, 163, 164, 157, -1, + 157, 164, 165, 158, -1, + 158, 165, 166, 159, -1, + 159, 166, 167, 160, -1, + 161, 0, 1, 162, -1, + 162, 1, 2, 163, -1, + 163, 2, 3, 164, -1, + 164, 3, 4, 165, -1, + 165, 4, 5, 166, -1, + 166, 5, 6, 167, -1, + 175, 168, 169, 176, -1, + 176, 169, 170, 177, -1, + 177, 170, 171, 178, -1, + 178, 171, 172, 179, -1, + 179, 172, 173, 180, -1, + 180, 173, 174, 181, -1, + 182, 175, 176, 183, -1, + 183, 176, 177, 184, -1, + 184, 177, 178, 185, -1, + 185, 178, 179, 186, -1, + 186, 179, 180, 187, -1, + 187, 180, 181, 188, -1, + 189, 182, 183, 190, -1, + 190, 183, 184, 191, -1, + 191, 184, 185, 192, -1, + 192, 185, 186, 193, -1, + 193, 186, 187, 194, -1, + 194, 187, 188, 195, -1, + 196, 189, 190, 197, -1, + 197, 190, 191, 198, -1, + 198, 191, 192, 199, -1, + 199, 192, 193, 200, -1, + 200, 193, 194, 201, -1, + 201, 194, 195, 202, -1, + 203, 196, 197, 204, -1, + 204, 197, 198, 205, -1, + 205, 198, 199, 206, -1, + 206, 199, 200, 207, -1, + 207, 200, 201, 208, -1, + 208, 201, 202, 209, -1, + 210, 203, 204, 211, -1, + 211, 204, 205, 212, -1, + 212, 205, 206, 213, -1, + 213, 206, 207, 214, -1, + 214, 207, 208, 215, -1, + 215, 208, 209, 216, -1, + 217, 210, 211, 218, -1, + 218, 211, 212, 219, -1, + 219, 212, 213, 220, -1, + 220, 213, 214, 221, -1, + 221, 214, 215, 222, -1, + 222, 215, 216, 223, -1, + 224, 217, 218, 225, -1, + 225, 218, 219, 226, -1, + 226, 219, 220, 227, -1, + 227, 220, 221, 228, -1, + 228, 221, 222, 229, -1, + 229, 222, 223, 230, -1, + 231, 224, 225, 232, -1, + 232, 225, 226, 233, -1, + 233, 226, 227, 234, -1, + 234, 227, 228, 235, -1, + 235, 228, 229, 236, -1, + 236, 229, 230, 237, -1, + 238, 231, 232, 239, -1, + 239, 232, 233, 240, -1, + 240, 233, 234, 241, -1, + 241, 234, 235, 242, -1, + 242, 235, 236, 243, -1, + 243, 236, 237, 244, -1, + 245, 238, 239, 246, -1, + 246, 239, 240, 247, -1, + 247, 240, 241, 248, -1, + 248, 241, 242, 249, -1, + 249, 242, 243, 250, -1, + 250, 243, 244, 251, -1, + 252, 245, 246, 253, -1, + 253, 246, 247, 254, -1, + 254, 247, 248, 255, -1, + 255, 248, 249, 256, -1, + 256, 249, 250, 257, -1, + 257, 250, 251, 258, -1, + 259, 252, 253, 260, -1, + 260, 253, 254, 261, -1, + 261, 254, 255, 262, -1, + 262, 255, 256, 263, -1, + 263, 256, 257, 264, -1, + 264, 257, 258, 265, -1, + 266, 259, 260, 267, -1, + 267, 260, 261, 268, -1, + 268, 261, 262, 269, -1, + 269, 262, 263, 270, -1, + 270, 263, 264, 271, -1, + 271, 264, 265, 272, -1, + 273, 266, 267, 274, -1, + 274, 267, 268, 275, -1, + 275, 268, 269, 276, -1, + 276, 269, 270, 277, -1, + 277, 270, 271, 278, -1, + 278, 271, 272, 279, -1, + 280, 273, 274, 281, -1, + 281, 274, 275, 282, -1, + 282, 275, 276, 283, -1, + 283, 276, 277, 284, -1, + 284, 277, 278, 285, -1, + 285, 278, 279, 286, -1, + 287, 280, 281, 288, -1, + 288, 281, 282, 289, -1, + 289, 282, 283, 290, -1, + 290, 283, 284, 291, -1, + 291, 284, 285, 292, -1, + 292, 285, 286, 293, -1, + 294, 287, 288, 295, -1, + 295, 288, 289, 296, -1, + 296, 289, 290, 297, -1, + 297, 290, 291, 298, -1, + 298, 291, 292, 299, -1, + 299, 292, 293, 300, -1, + 301, 294, 295, 302, -1, + 302, 295, 296, 303, -1, + 303, 296, 297, 304, -1, + 304, 297, 298, 305, -1, + 305, 298, 299, 306, -1, + 306, 299, 300, 307, -1, + 308, 301, 302, 309, -1, + 309, 302, 303, 310, -1, + 310, 303, 304, 311, -1, + 311, 304, 305, 312, -1, + 312, 305, 306, 313, -1, + 313, 306, 307, 314, -1, + 315, 308, 309, 316, -1, + 316, 309, 310, 317, -1, + 317, 310, 311, 318, -1, + 318, 311, 312, 319, -1, + 319, 312, 313, 320, -1, + 320, 313, 314, 321, -1, + 322, 315, 316, 323, -1, + 323, 316, 317, 324, -1, + 324, 317, 318, 325, -1, + 325, 318, 319, 326, -1, + 326, 319, 320, 327, -1, + 327, 320, 321, 328, -1, + 329, 322, 323, 330, -1, + 330, 323, 324, 331, -1, + 331, 324, 325, 332, -1, + 332, 325, 326, 333, -1, + 333, 326, 327, 334, -1, + 334, 327, 328, 335, -1, + 168, 329, 330, 169, -1, + 169, 330, 331, 170, -1, + 170, 331, 332, 171, -1, + 171, 332, 333, 172, -1, + 172, 333, 334, 173, -1, + 173, 334, 335, 174, -1, + 0, 168, 175, 7, -1, + 13, 181, 174, 6, -1, + 7, 175, 182, 14, -1, + 20, 188, 181, 13, -1, + 14, 182, 189, 21, -1, + 27, 195, 188, 20, -1, + 21, 189, 196, 28, -1, + 34, 202, 195, 27, -1, + 28, 196, 203, 35, -1, + 41, 209, 202, 34, -1, + 35, 203, 210, 42, -1, + 48, 216, 209, 41, -1, + 42, 210, 217, 49, -1, + 55, 223, 216, 48, -1, + 49, 217, 224, 56, -1, + 62, 230, 223, 55, -1, + 56, 224, 231, 63, -1, + 69, 237, 230, 62, -1, + 63, 231, 238, 70, -1, + 76, 244, 237, 69, -1, + 70, 238, 245, 77, -1, + 83, 251, 244, 76, -1, + 77, 245, 252, 84, -1, + 90, 258, 251, 83, -1, + 84, 252, 259, 91, -1, + 97, 265, 258, 90, -1, + 91, 259, 266, 98, -1, + 104, 272, 265, 97, -1, + 98, 266, 273, 105, -1, + 111, 279, 272, 104, -1, + 105, 273, 280, 112, -1, + 118, 286, 279, 111, -1, + 112, 280, 287, 119, -1, + 125, 293, 286, 118, -1, + 119, 287, 294, 126, -1, + 132, 300, 293, 125, -1, + 126, 294, 301, 133, -1, + 139, 307, 300, 132, -1, + 133, 301, 308, 140, -1, + 146, 314, 307, 139, -1, + 140, 308, 315, 147, -1, + 153, 321, 314, 146, -1, + 147, 315, 322, 154, -1, + 160, 328, 321, 153, -1, + 154, 322, 329, 161, -1, + 167, 335, 328, 160, -1, + 161, 329, 168, 0, -1, + 6, 174, 335, 167, -1, + ] + solid FALSE + } + } +#---------- POLYLINE +Shape { + appearance Appearance { + material Material { + diffuseColor 1 0 0 + emissiveColor 1 0 0 + } + } + geometry IndexedLineSet { + coord Coordinate { + point [ + 0 0 0, + 100 0 0, + ] + } + coordIndex [ + 0, 1, -1 + ] + } +} +#---------- POLYLINE +Shape { + appearance Appearance { + material Material { + diffuseColor 0 1 0 + emissiveColor 0 1 0 + } + } + geometry IndexedLineSet { + coord Coordinate { + point [ + 0 0 0, + 0 100 0, + ] + } + coordIndex [ + 0, 1, -1 + ] + } +} +#---------- POLYLINE +Shape { + appearance Appearance { + material Material { + diffuseColor 0 0 1 + emissiveColor 0 0 1 + } + } + geometry IndexedLineSet { + coord Coordinate { + point [ + 0 0 0, + 0 0 100, + ] + } + coordIndex [ + 0, 1, -1 + ] + } +} +#End of file. diff --git a/environments/g4py/tests/gtest05/vrml/g4trap.wrl b/environments/g4py/tests/gtest05/vrml/g4trap.wrl new file mode 100644 index 0000000000..f382e3a649 --- /dev/null +++ b/environments/g4py/tests/gtest05/vrml/g4trap.wrl @@ -0,0 +1,102 @@ +#VRML V2.0 utf8 +# Generated by VRML 2.0 driver of GEANT4 + + +#---------- CAMERA +Viewpoint { + position 0 0 452.607 +} + +#---------- SOLID: dummy.0 + Shape { + appearance Appearance { + material Material { + diffuseColor 0 1 0 + transparency 0.7 + } + } + geometry IndexedFaceSet { + coord Coordinate { + point [ + -588.082 -419.033 -600, + 11.9181 -419.033 -600, + 252.98 380.967 -600, + -547.02 380.967 -600, + 89.3388 -140.967 600, + 289.339 -140.967 600, + 385.763 179.033 600, + 105.763 179.033 600, + ] + } + coordIndex [ + 0, 3, 2, 1, -1, + 4, 7, 3, 0, -1, + 7, 6, 2, 3, -1, + 6, 5, 1, 2, -1, + 5, 4, 0, 1, -1, + 4, 5, 6, 7, -1, + ] + solid FALSE + } + } +#---------- POLYLINE +Shape { + appearance Appearance { + material Material { + diffuseColor 1 0 0 + emissiveColor 1 0 0 + } + } + geometry IndexedLineSet { + coord Coordinate { + point [ + 0 0 0, + 100 0 0, + ] + } + coordIndex [ + 0, 1, -1 + ] + } +} +#---------- POLYLINE +Shape { + appearance Appearance { + material Material { + diffuseColor 0 1 0 + emissiveColor 0 1 0 + } + } + geometry IndexedLineSet { + coord Coordinate { + point [ + 0 0 0, + 0 100 0, + ] + } + coordIndex [ + 0, 1, -1 + ] + } +} +#---------- POLYLINE +Shape { + appearance Appearance { + material Material { + diffuseColor 0 0 1 + emissiveColor 0 0 1 + } + } + geometry IndexedLineSet { + coord Coordinate { + point [ + 0 0 0, + 0 0 100, + ] + } + coordIndex [ + 0, 1, -1 + ] + } +} +#End of file. diff --git a/environments/g4py/tests/gtest05/vrml/g4trd.wrl b/environments/g4py/tests/gtest05/vrml/g4trd.wrl new file mode 100644 index 0000000000..c21a8e1a6f --- /dev/null +++ b/environments/g4py/tests/gtest05/vrml/g4trd.wrl @@ -0,0 +1,102 @@ +#VRML V2.0 utf8 +# Generated by VRML 2.0 driver of GEANT4 + + +#---------- CAMERA +Viewpoint { + position 0 0 452.607 +} + +#---------- SOLID: dummy.0 + Shape { + appearance Appearance { + material Material { + diffuseColor 0 0 1 + transparency 0.7 + } + } + geometry IndexedFaceSet { + coord Coordinate { + point [ + -300 -400 -600, + 300 -400 -600, + 300 400 -600, + -300 400 -600, + -100 -150 600, + 100 -150 600, + 100 150 600, + -100 150 600, + ] + } + coordIndex [ + 0, 3, 2, 1, -1, + 4, 7, 3, 0, -1, + 7, 6, 2, 3, -1, + 6, 5, 1, 2, -1, + 5, 4, 0, 1, -1, + 4, 5, 6, 7, -1, + ] + solid FALSE + } + } +#---------- POLYLINE +Shape { + appearance Appearance { + material Material { + diffuseColor 1 0 0 + emissiveColor 1 0 0 + } + } + geometry IndexedLineSet { + coord Coordinate { + point [ + 0 0 0, + 100 0 0, + ] + } + coordIndex [ + 0, 1, -1 + ] + } +} +#---------- POLYLINE +Shape { + appearance Appearance { + material Material { + diffuseColor 0 1 0 + emissiveColor 0 1 0 + } + } + geometry IndexedLineSet { + coord Coordinate { + point [ + 0 0 0, + 0 100 0, + ] + } + coordIndex [ + 0, 1, -1 + ] + } +} +#---------- POLYLINE +Shape { + appearance Appearance { + material Material { + diffuseColor 0 0 1 + emissiveColor 0 0 1 + } + } + geometry IndexedLineSet { + coord Coordinate { + point [ + 0 0 0, + 0 0 100, + ] + } + coordIndex [ + 0, 1, -1 + ] + } +} +#End of file. diff --git a/environments/g4py/tests/gtest05/vrml/g4tubs.wrl b/environments/g4py/tests/gtest05/vrml/g4tubs.wrl new file mode 100644 index 0000000000..5e574c1088 --- /dev/null +++ b/environments/g4py/tests/gtest05/vrml/g4tubs.wrl @@ -0,0 +1,190 @@ +#VRML V2.0 utf8 +# Generated by VRML 2.0 driver of GEANT4 + + +#---------- CAMERA +Viewpoint { + position 0 0 452.607 +} + +#---------- SOLID: dummy.0 + Shape { + appearance Appearance { + material Material { + diffuseColor 0 1 1 + transparency 0.7 + } + } + geometry IndexedFaceSet { + coord Coordinate { + point [ + 150 0 200, + 144.889 38.8229 200, + 129.904 75 200, + 106.066 106.066 200, + 75 129.904 200, + 38.8229 144.889 200, + 9.18485e-15 150 200, + -38.8229 144.889 200, + -75 129.904 200, + -106.066 106.066 200, + -129.904 75 200, + -144.889 38.8229 200, + -150 1.83697e-14 200, + 150 0 -200, + 144.889 38.8229 -200, + 129.904 75 -200, + 106.066 106.066 -200, + 75 129.904 -200, + 38.8229 144.889 -200, + 9.18485e-15 150 -200, + -38.8229 144.889 -200, + -75 129.904 -200, + -106.066 106.066 -200, + -129.904 75 -200, + -144.889 38.8229 -200, + -150 1.83697e-14 -200, + 100 0 200, + 96.5926 25.8819 200, + 86.6025 50 200, + 70.7107 70.7107 200, + 50 86.6025 200, + 25.8819 96.5926 200, + 6.12323e-15 100 200, + -25.8819 96.5926 200, + -50 86.6025 200, + -70.7107 70.7107 200, + -86.6025 50 200, + -96.5926 25.8819 200, + -100 1.22465e-14 200, + 100 0 -200, + 96.5926 25.8819 -200, + 86.6025 50 -200, + 70.7107 70.7107 -200, + 50 86.6025 -200, + 25.8819 96.5926 -200, + 6.12323e-15 100 -200, + -25.8819 96.5926 -200, + -50 86.6025 -200, + -70.7107 70.7107 -200, + -86.6025 50 -200, + -96.5926 25.8819 -200, + -100 1.22465e-14 -200, + ] + } + coordIndex [ + 0, 13, 14, 1, -1, + 1, 14, 15, 2, -1, + 2, 15, 16, 3, -1, + 3, 16, 17, 4, -1, + 4, 17, 18, 5, -1, + 5, 18, 19, 6, -1, + 6, 19, 20, 7, -1, + 7, 20, 21, 8, -1, + 8, 21, 22, 9, -1, + 9, 22, 23, 10, -1, + 10, 23, 24, 11, -1, + 11, 24, 25, 12, -1, + 39, 26, 27, 40, -1, + 40, 27, 28, 41, -1, + 41, 28, 29, 42, -1, + 42, 29, 30, 43, -1, + 43, 30, 31, 44, -1, + 44, 31, 32, 45, -1, + 45, 32, 33, 46, -1, + 46, 33, 34, 47, -1, + 47, 34, 35, 48, -1, + 48, 35, 36, 49, -1, + 49, 36, 37, 50, -1, + 50, 37, 38, 51, -1, + 26, 0, 1, 27, -1, + 27, 1, 2, 28, -1, + 28, 2, 3, 29, -1, + 29, 3, 4, 30, -1, + 30, 4, 5, 31, -1, + 31, 5, 6, 32, -1, + 32, 6, 7, 33, -1, + 33, 7, 8, 34, -1, + 34, 8, 9, 35, -1, + 35, 9, 10, 36, -1, + 36, 10, 11, 37, -1, + 37, 11, 12, 38, -1, + 13, 39, 40, 14, -1, + 14, 40, 41, 15, -1, + 15, 41, 42, 16, -1, + 16, 42, 43, 17, -1, + 17, 43, 44, 18, -1, + 18, 44, 45, 19, -1, + 19, 45, 46, 20, -1, + 20, 46, 47, 21, -1, + 21, 47, 48, 22, -1, + 22, 48, 49, 23, -1, + 23, 49, 50, 24, -1, + 24, 50, 51, 25, -1, + 0, 26, 39, 13, -1, + 25, 51, 38, 12, -1, + ] + solid FALSE + } + } +#---------- POLYLINE +Shape { + appearance Appearance { + material Material { + diffuseColor 1 0 0 + emissiveColor 1 0 0 + } + } + geometry IndexedLineSet { + coord Coordinate { + point [ + 0 0 0, + 100 0 0, + ] + } + coordIndex [ + 0, 1, -1 + ] + } +} +#---------- POLYLINE +Shape { + appearance Appearance { + material Material { + diffuseColor 0 1 0 + emissiveColor 0 1 0 + } + } + geometry IndexedLineSet { + coord Coordinate { + point [ + 0 0 0, + 0 100 0, + ] + } + coordIndex [ + 0, 1, -1 + ] + } +} +#---------- POLYLINE +Shape { + appearance Appearance { + material Material { + diffuseColor 0 0 1 + emissiveColor 0 0 1 + } + } + geometry IndexedLineSet { + coord Coordinate { + point [ + 0 0 0, + 0 0 100, + ] + } + coordIndex [ + 0, 1, -1 + ] + } +} +#End of file. diff --git a/environments/g4py/tests/gtest05/vrml/g4twistedbox.wrl b/environments/g4py/tests/gtest05/vrml/g4twistedbox.wrl new file mode 100644 index 0000000000..085b2c147e --- /dev/null +++ b/environments/g4py/tests/gtest05/vrml/g4twistedbox.wrl @@ -0,0 +1,198 @@ +#VRML V2.0 utf8 +# Generated by VRML 2.0 driver of GEANT4 + + +#---------- CAMERA +Viewpoint { + position 0 0 452.607 +} + +#---------- SOLID: dummy.0 + Shape { + appearance Appearance { + material Material { + diffuseColor 0 1 1 + transparency 0.7 + } + } + geometry IndexedFaceSet { + coord Coordinate { + point [ + -393.305 -308.725 -600, + -200.12 -360.488 -600, + -6.93504 -412.252 -600, + 186.25 -464.016 -600, + -324.287 -51.1444 -600, + -131.102 -102.908 -600, + 62.0834 -154.672 -600, + 255.269 -206.436 -600, + -255.269 206.436 -600, + -62.0834 154.672 -600, + 131.102 102.908 -600, + 324.287 51.1444 -600, + -186.25 464.016 -600, + 6.93504 412.252 -600, + 200.12 360.488 -600, + 393.305 308.725 -600, + -186.25 -464.016 600, + 6.93504 -412.252 600, + 200.12 -360.488 600, + 393.305 -308.725 600, + -255.269 -206.436 600, + -62.0834 -154.672 600, + 131.102 -102.908 600, + 324.287 -51.1444 600, + -324.287 51.1444 600, + -131.102 102.908 600, + 62.0834 154.672 600, + 255.269 206.436 600, + -393.305 308.725 600, + -200.12 360.488 600, + -6.93504 412.252 600, + 186.25 464.016 600, + -333.721 -372.331 -200, + -134.482 -389.762 -200, + 64.7572 -407.193 -200, + 263.996 -424.625 -200, + 287.238 -158.973 -200, + 310.479 106.679 -200, + 333.721 372.331 -200, + 134.482 389.762 -200, + -64.7572 407.193 -200, + -263.996 424.625 -200, + -287.238 158.973 -200, + -310.479 -106.679 -200, + -263.996 -424.625 200, + -64.7572 -407.193 200, + 134.482 -389.762 200, + 333.721 -372.331 200, + 310.479 -106.679 200, + 287.238 158.973 200, + 263.996 424.625 200, + 64.7572 407.193 200, + -134.482 389.762 200, + -333.721 372.331 200, + -310.479 106.679 200, + -287.238 -158.973 200, + ] + } + coordIndex [ + 0, 4, 5, 1, -1, + 1, 5, 6, 2, -1, + 2, 6, 7, 3, -1, + 4, 8, 9, 5, -1, + 5, 9, 10, 6, -1, + 6, 10, 11, 7, -1, + 8, 12, 13, 9, -1, + 9, 13, 14, 10, -1, + 10, 14, 15, 11, -1, + 16, 17, 21, 20, -1, + 17, 18, 22, 21, -1, + 18, 19, 23, 22, -1, + 20, 21, 25, 24, -1, + 21, 22, 26, 25, -1, + 22, 23, 27, 26, -1, + 24, 25, 29, 28, -1, + 25, 26, 30, 29, -1, + 26, 27, 31, 30, -1, + 0, 1, 33, 32, -1, + 1, 2, 34, 33, -1, + 2, 3, 35, 34, -1, + 32, 33, 45, 44, -1, + 33, 34, 46, 45, -1, + 34, 35, 47, 46, -1, + 44, 45, 17, 16, -1, + 45, 46, 18, 17, -1, + 46, 47, 19, 18, -1, + 3, 7, 36, 35, -1, + 7, 11, 37, 36, -1, + 11, 15, 38, 37, -1, + 35, 36, 48, 47, -1, + 36, 37, 49, 48, -1, + 37, 38, 50, 49, -1, + 47, 48, 23, 19, -1, + 48, 49, 27, 23, -1, + 49, 50, 31, 27, -1, + 15, 14, 39, 38, -1, + 14, 13, 40, 39, -1, + 13, 12, 41, 40, -1, + 38, 39, 51, 50, -1, + 39, 40, 52, 51, -1, + 40, 41, 53, 52, -1, + 50, 51, 30, 31, -1, + 51, 52, 29, 30, -1, + 52, 53, 28, 29, -1, + 12, 8, 42, 41, -1, + 8, 4, 43, 42, -1, + 4, 0, 32, 43, -1, + 41, 42, 54, 53, -1, + 42, 43, 55, 54, -1, + 43, 32, 44, 55, -1, + 53, 54, 24, 28, -1, + 54, 55, 20, 24, -1, + 55, 44, 16, 20, -1, + ] + solid FALSE + } + } +#---------- POLYLINE +Shape { + appearance Appearance { + material Material { + diffuseColor 1 0 0 + emissiveColor 1 0 0 + } + } + geometry IndexedLineSet { + coord Coordinate { + point [ + 0 0 0, + 100 0 0, + ] + } + coordIndex [ + 0, 1, -1 + ] + } +} +#---------- POLYLINE +Shape { + appearance Appearance { + material Material { + diffuseColor 0 1 0 + emissiveColor 0 1 0 + } + } + geometry IndexedLineSet { + coord Coordinate { + point [ + 0 0 0, + 0 100 0, + ] + } + coordIndex [ + 0, 1, -1 + ] + } +} +#---------- POLYLINE +Shape { + appearance Appearance { + material Material { + diffuseColor 0 0 1 + emissiveColor 0 0 1 + } + } + geometry IndexedLineSet { + coord Coordinate { + point [ + 0 0 0, + 0 0 100, + ] + } + coordIndex [ + 0, 1, -1 + ] + } +} +#End of file. diff --git a/environments/g4py/tests/gtest05/vrml/g4twistedtrap.wrl b/environments/g4py/tests/gtest05/vrml/g4twistedtrap.wrl new file mode 100644 index 0000000000..65b84140fa --- /dev/null +++ b/environments/g4py/tests/gtest05/vrml/g4twistedtrap.wrl @@ -0,0 +1,198 @@ +#VRML V2.0 utf8 +# Generated by VRML 2.0 driver of GEANT4 + + +#---------- CAMERA +Viewpoint { + position 0 0 452.607 +} + +#---------- SOLID: dummy.0 + Shape { + appearance Appearance { + material Material { + diffuseColor 0 0 1 + transparency 0.7 + } + } + geometry IndexedFaceSet { + coord Coordinate { + point [ + -678.984 -309.503 -600, + -485.799 -361.267 -600, + -292.614 -413.031 -600, + -99.4285 -464.795 -600, + -596.745 -55.4654 -600, + -382.095 -112.981 -600, + -167.444 -170.496 -600, + 47.2058 -228.011 -600, + -514.506 198.572 -600, + -278.39 135.305 -600, + -42.2752 72.0385 -600, + 193.84 8.77163 -600, + -432.266 452.61 -600, + -174.686 383.592 -600, + 82.8941 314.573 -600, + 340.474 245.555 -600, + 135.119 -168.699 600, + 199.514 -151.444 600, + 263.909 -134.189 600, + 328.304 -116.935 600, + 112.8 -64.2496 600, + 185.781 -44.6944 600, + 258.762 -25.1391 600, + 331.743 -5.58392 600, + 90.4805 40.1995 600, + 172.048 62.0553 600, + 253.615 83.9112 600, + 335.182 105.767 600, + 68.1615 144.649 600, + 158.315 168.805 600, + 248.468 192.961 600, + 338.621 217.118 600, + -389.062 -299.873 -200, + -234.099 -313.43 -200, + -79.135 -326.988 -200, + 75.8286 -340.545 -200, + 158.46 -133.626 -200, + 241.092 73.2925 -200, + 323.724 280.211 -200, + 115.63 298.417 -200, + -92.4643 316.623 -200, + -300.558 334.829 -200, + -330.06 123.262 -200, + -359.561 -88.3055 -200, + -114.755 -250.957 200, + -4.06717 -241.273 200, + 106.621 -231.589 200, + 217.309 -221.905 200, + 251.393 -58.3115 200, + 285.477 105.282 200, + 319.561 268.875 200, + 169.025 255.705 200, + 18.4891 242.534 200, + -132.047 229.364 200, + -126.283 69.2572 200, + -120.519 -90.8497 200, + ] + } + coordIndex [ + 0, 4, 5, 1, -1, + 1, 5, 6, 2, -1, + 2, 6, 7, 3, -1, + 4, 8, 9, 5, -1, + 5, 9, 10, 6, -1, + 6, 10, 11, 7, -1, + 8, 12, 13, 9, -1, + 9, 13, 14, 10, -1, + 10, 14, 15, 11, -1, + 16, 17, 21, 20, -1, + 17, 18, 22, 21, -1, + 18, 19, 23, 22, -1, + 20, 21, 25, 24, -1, + 21, 22, 26, 25, -1, + 22, 23, 27, 26, -1, + 24, 25, 29, 28, -1, + 25, 26, 30, 29, -1, + 26, 27, 31, 30, -1, + 0, 1, 33, 32, -1, + 1, 2, 34, 33, -1, + 2, 3, 35, 34, -1, + 32, 33, 45, 44, -1, + 33, 34, 46, 45, -1, + 34, 35, 47, 46, -1, + 44, 45, 17, 16, -1, + 45, 46, 18, 17, -1, + 46, 47, 19, 18, -1, + 3, 7, 36, 35, -1, + 7, 11, 37, 36, -1, + 11, 15, 38, 37, -1, + 35, 36, 48, 47, -1, + 36, 37, 49, 48, -1, + 37, 38, 50, 49, -1, + 47, 48, 23, 19, -1, + 48, 49, 27, 23, -1, + 49, 50, 31, 27, -1, + 15, 14, 39, 38, -1, + 14, 13, 40, 39, -1, + 13, 12, 41, 40, -1, + 38, 39, 51, 50, -1, + 39, 40, 52, 51, -1, + 40, 41, 53, 52, -1, + 50, 51, 30, 31, -1, + 51, 52, 29, 30, -1, + 52, 53, 28, 29, -1, + 12, 8, 42, 41, -1, + 8, 4, 43, 42, -1, + 4, 0, 32, 43, -1, + 41, 42, 54, 53, -1, + 42, 43, 55, 54, -1, + 43, 32, 44, 55, -1, + 53, 54, 24, 28, -1, + 54, 55, 20, 24, -1, + 55, 44, 16, 20, -1, + ] + solid FALSE + } + } +#---------- POLYLINE +Shape { + appearance Appearance { + material Material { + diffuseColor 1 0 0 + emissiveColor 1 0 0 + } + } + geometry IndexedLineSet { + coord Coordinate { + point [ + 0 0 0, + 100 0 0, + ] + } + coordIndex [ + 0, 1, -1 + ] + } +} +#---------- POLYLINE +Shape { + appearance Appearance { + material Material { + diffuseColor 0 1 0 + emissiveColor 0 1 0 + } + } + geometry IndexedLineSet { + coord Coordinate { + point [ + 0 0 0, + 0 100 0, + ] + } + coordIndex [ + 0, 1, -1 + ] + } +} +#---------- POLYLINE +Shape { + appearance Appearance { + material Material { + diffuseColor 0 0 1 + emissiveColor 0 0 1 + } + } + geometry IndexedLineSet { + coord Coordinate { + point [ + 0 0 0, + 0 0 100, + ] + } + coordIndex [ + 0, 1, -1 + ] + } +} +#End of file. diff --git a/environments/g4py/tests/gtest05/vrml/g4twistedtrd.wrl b/environments/g4py/tests/gtest05/vrml/g4twistedtrd.wrl new file mode 100644 index 0000000000..2920326f90 --- /dev/null +++ b/environments/g4py/tests/gtest05/vrml/g4twistedtrd.wrl @@ -0,0 +1,198 @@ +#VRML V2.0 utf8 +# Generated by VRML 2.0 driver of GEANT4 + + +#---------- CAMERA +Viewpoint { + position 0 0 452.607 +} + +#---------- SOLID: dummy.0 + Shape { + appearance Appearance { + material Material { + diffuseColor 0 1 0 + transparency 0.7 + } + } + geometry IndexedFaceSet { + coord Coordinate { + point [ + -393.305 -308.725 -600, + -200.12 -360.488 -600, + -6.93504 -412.252 -600, + 186.25 -464.016 -600, + -324.287 -51.1444 -600, + -131.102 -102.908 -600, + 62.0834 -154.672 -600, + 255.269 -206.436 -600, + -255.269 206.436 -600, + -62.0834 154.672 -600, + 131.102 102.908 -600, + 324.287 51.1444 -600, + -186.25 464.016 -600, + 6.93504 412.252 -600, + 200.12 360.488 -600, + 393.305 308.725 -600, + -57.7697 -170.771 600, + 6.62533 -153.516 600, + 71.0204 -136.262 600, + 135.415 -119.007 600, + -83.6516 -74.1782 600, + -19.2566 -56.9236 600, + 45.1385 -39.669 600, + 109.534 -22.4144 600, + -109.534 22.4144 600, + -45.1385 39.669 600, + 19.2566 56.9236 600, + 83.6516 74.1782 600, + -135.415 119.007 600, + -71.0204 136.262 600, + -6.62533 153.516 600, + 57.7697 170.771 600, + -260.045 -295.125 -200, + -105.081 -308.683 -200, + 49.8825 -322.24 -200, + 204.846 -335.798 -200, + 223.246 -125.49 -200, + 241.645 84.8175 -200, + 260.045 295.125 -200, + 105.081 308.683 -200, + -49.8825 322.24 -200, + -204.846 335.798 -200, + -223.246 125.49 -200, + -241.645 -84.8175 -200, + -145.696 -246.971 200, + -35.0078 -237.287 200, + 75.6805 -227.603 200, + 186.369 -217.919 200, + 172.811 -62.9559 200, + 159.254 92.0078 200, + 145.696 246.971 200, + 35.0078 237.287 200, + -75.6805 227.603 200, + -186.369 217.919 200, + -172.811 62.9559 200, + -159.254 -92.0078 200, + ] + } + coordIndex [ + 0, 4, 5, 1, -1, + 1, 5, 6, 2, -1, + 2, 6, 7, 3, -1, + 4, 8, 9, 5, -1, + 5, 9, 10, 6, -1, + 6, 10, 11, 7, -1, + 8, 12, 13, 9, -1, + 9, 13, 14, 10, -1, + 10, 14, 15, 11, -1, + 16, 17, 21, 20, -1, + 17, 18, 22, 21, -1, + 18, 19, 23, 22, -1, + 20, 21, 25, 24, -1, + 21, 22, 26, 25, -1, + 22, 23, 27, 26, -1, + 24, 25, 29, 28, -1, + 25, 26, 30, 29, -1, + 26, 27, 31, 30, -1, + 0, 1, 33, 32, -1, + 1, 2, 34, 33, -1, + 2, 3, 35, 34, -1, + 32, 33, 45, 44, -1, + 33, 34, 46, 45, -1, + 34, 35, 47, 46, -1, + 44, 45, 17, 16, -1, + 45, 46, 18, 17, -1, + 46, 47, 19, 18, -1, + 3, 7, 36, 35, -1, + 7, 11, 37, 36, -1, + 11, 15, 38, 37, -1, + 35, 36, 48, 47, -1, + 36, 37, 49, 48, -1, + 37, 38, 50, 49, -1, + 47, 48, 23, 19, -1, + 48, 49, 27, 23, -1, + 49, 50, 31, 27, -1, + 15, 14, 39, 38, -1, + 14, 13, 40, 39, -1, + 13, 12, 41, 40, -1, + 38, 39, 51, 50, -1, + 39, 40, 52, 51, -1, + 40, 41, 53, 52, -1, + 50, 51, 30, 31, -1, + 51, 52, 29, 30, -1, + 52, 53, 28, 29, -1, + 12, 8, 42, 41, -1, + 8, 4, 43, 42, -1, + 4, 0, 32, 43, -1, + 41, 42, 54, 53, -1, + 42, 43, 55, 54, -1, + 43, 32, 44, 55, -1, + 53, 54, 24, 28, -1, + 54, 55, 20, 24, -1, + 55, 44, 16, 20, -1, + ] + solid FALSE + } + } +#---------- POLYLINE +Shape { + appearance Appearance { + material Material { + diffuseColor 1 0 0 + emissiveColor 1 0 0 + } + } + geometry IndexedLineSet { + coord Coordinate { + point [ + 0 0 0, + 100 0 0, + ] + } + coordIndex [ + 0, 1, -1 + ] + } +} +#---------- POLYLINE +Shape { + appearance Appearance { + material Material { + diffuseColor 0 1 0 + emissiveColor 0 1 0 + } + } + geometry IndexedLineSet { + coord Coordinate { + point [ + 0 0 0, + 0 100 0, + ] + } + coordIndex [ + 0, 1, -1 + ] + } +} +#---------- POLYLINE +Shape { + appearance Appearance { + material Material { + diffuseColor 0 0 1 + emissiveColor 0 0 1 + } + } + geometry IndexedLineSet { + coord Coordinate { + point [ + 0 0 0, + 0 0 100, + ] + } + coordIndex [ + 0, 1, -1 + ] + } +} +#End of file. diff --git a/environments/g4py/tests/gtest05/vrml/g4twistedtubs.wrl b/environments/g4py/tests/gtest05/vrml/g4twistedtubs.wrl new file mode 100644 index 0000000000..017efc4bef --- /dev/null +++ b/environments/g4py/tests/gtest05/vrml/g4twistedtubs.wrl @@ -0,0 +1,566 @@ +#VRML V2.0 utf8 +# Generated by VRML 2.0 driver of GEANT4 + + +#---------- CAMERA +Viewpoint { + position 0 0 452.607 +} + +#---------- SOLID: dummy.0 + Shape { + appearance Appearance { + material Material { + diffuseColor 1 0 1 + transparency 0.7 + } + } + geometry IndexedFaceSet { + coord Coordinate { + point [ + 25.8819 -96.5926 -200, + 46.7269 -88.4115 -200, + 65.2287 -75.7972 -200, + 80.4598 -59.382 -200, + 91.6562 -39.9892 -200, + 98.2566 -18.5912 -200, + 99.9301 3.73912 -200, + 96.5926 25.8819 -200, + 27.7306 -103.492 -200, + 50.0645 -94.7266 -200, + 69.8879 -81.2113 -200, + 86.2069 -63.6236 -200, + 98.2031 -42.8456 -200, + 105.275 -19.9191 -200, + 107.068 4.0062 -200, + 103.492 27.7306 -200, + 29.5793 -110.392 -200, + 53.4021 -101.042 -200, + 74.5471 -86.6253 -200, + 91.954 -67.8652 -200, + 104.75 -45.7019 -200, + 112.293 -21.247 -200, + 114.206 4.27328 -200, + 110.392 29.5793 -200, + 31.428 -117.291 -200, + 56.7398 -107.357 -200, + 79.2063 -92.0394 -200, + 97.7012 -72.1067 -200, + 111.297 -48.5583 -200, + 119.312 -22.575 -200, + 121.344 4.54036 -200, + 117.291 31.428 -200, + 33.2767 -124.19 -200, + 60.0774 -113.672 -200, + 83.8655 -97.4535 -200, + 103.448 -76.3483 -200, + 117.844 -51.4147 -200, + 126.33 -23.9029 -200, + 128.482 4.80744 -200, + 124.19 33.2767 -200, + 35.1254 -131.09 -200, + 63.415 -119.987 -200, + 88.5247 -102.868 -200, + 109.195 -80.5899 -200, + 124.391 -54.2711 -200, + 133.348 -25.2309 -200, + 135.619 5.07452 -200, + 131.09 35.1254 -200, + 36.9741 -137.989 -200, + 66.7527 -126.302 -200, + 93.1839 -108.282 -200, + 114.943 -84.8315 -200, + 130.937 -57.1274 -200, + 140.367 -26.5588 -200, + 142.757 5.3416 -200, + 137.989 36.9741 -200, + 38.8229 -144.889 -200, + 70.0903 -132.617 -200, + 97.8431 -113.696 -200, + 120.69 -89.073 -200, + 137.484 -59.9838 -200, + 147.385 -27.8867 -200, + 149.895 5.60868 -200, + 144.889 38.8229 -200, + 96.5926 -25.8819 200, + 99.9301 -3.73912 200, + 98.2566 18.5912 200, + 91.6562 39.9892 200, + 80.4598 59.382 200, + 65.2287 75.7972 200, + 46.7269 88.4115 200, + 25.8819 96.5926 200, + 103.492 -27.7306 200, + 107.068 -4.0062 200, + 105.275 19.9191 200, + 98.2031 42.8456 200, + 86.2069 63.6236 200, + 69.8879 81.2113 200, + 50.0645 94.7266 200, + 27.7306 103.492 200, + 110.392 -29.5793 200, + 114.206 -4.27328 200, + 112.293 21.247 200, + 104.75 45.7019 200, + 91.954 67.8652 200, + 74.5471 86.6253 200, + 53.4021 101.042 200, + 29.5793 110.392 200, + 117.291 -31.428 200, + 121.344 -4.54036 200, + 119.312 22.575 200, + 111.297 48.5583 200, + 97.7012 72.1067 200, + 79.2063 92.0394 200, + 56.7398 107.357 200, + 31.428 117.291 200, + 124.19 -33.2767 200, + 128.482 -4.80744 200, + 126.33 23.9029 200, + 117.844 51.4147 200, + 103.448 76.3483 200, + 83.8655 97.4535 200, + 60.0774 113.672 200, + 33.2767 124.19 200, + 131.09 -35.1254 200, + 135.619 -5.07452 200, + 133.348 25.2309 200, + 124.391 54.2711 200, + 109.195 80.5899 200, + 88.5247 102.868 200, + 63.415 119.987 200, + 35.1254 131.09 200, + 137.989 -36.9741 200, + 142.757 -5.3416 200, + 140.367 26.5588 200, + 130.937 57.1274 200, + 114.943 84.8315 200, + 93.1839 108.282 200, + 66.7527 126.302 200, + 36.9741 137.989 200, + 144.889 -38.8229 200, + 149.895 -5.60868 200, + 147.385 27.8867 200, + 137.484 59.9838 200, + 120.69 89.073 200, + 97.8431 113.696 200, + 70.0903 132.617 200, + 38.8229 144.889 200, + 40.024 -82.4504 -120, + 57.3675 -71.4771 -120, + 71.8343 -56.9195 -120, + 82.6991 -39.5078 -120, + 89.4169 -20.115 -120, + 91.6511 0.286506 -120, + 89.2894 20.6736 -120, + 82.4504 40.024 -120, + 88.3398 42.8829 -120, + 94.2291 45.7418 -120, + 100.118 48.6006 -120, + 106.008 51.4595 -120, + 111.897 54.3183 -120, + 117.786 57.1772 -120, + 123.676 60.0361 -120, + 133.934 31.0104 -120, + 137.477 0.429759 -120, + 134.125 -30.1724 -120, + 124.049 -59.2617 -120, + 107.751 -85.3793 -120, + 86.0513 -107.216 -120, + 60.0361 -123.676 -120, + 57.1772 -117.786 -120, + 54.3183 -111.897 -120, + 51.4595 -106.008 -120, + 48.6006 -100.118 -120, + 45.7418 -94.2291 -120, + 42.8829 -88.3398 -120, + 54.1662 -68.3083 -40, + 68.0081 -54.5426 -40, + 78.4399 -38.0418 -40, + 84.9384 -19.6335 -40, + 87.1776 -0.240714 -40, + 85.0455 19.1642 -40, + 78.6488 37.6081 -40, + 68.3083 54.1662 -40, + 73.1875 58.0352 -40, + 78.0666 61.9042 -40, + 82.9458 65.7732 -40, + 87.825 69.6422 -40, + 92.7041 73.5112 -40, + 97.5833 77.3803 -40, + 102.462 81.2493 -40, + 117.973 56.4121 -40, + 127.568 28.7463 -40, + 130.766 -0.361071 -40, + 127.408 -29.4503 -40, + 117.66 -57.0628 -40, + 102.012 -81.8139 -40, + 81.2493 -102.462 -40, + 77.3803 -97.5833 -40, + 73.5112 -92.7041 -40, + 69.6422 -87.825 -40, + 65.7732 -82.9458 -40, + 61.9042 -78.0666 -40, + 58.0352 -73.1875 -40, + 68.3083 -54.1662 40, + 78.6488 -37.6081 40, + 85.0455 -19.1642 40, + 87.1776 0.240714 40, + 84.9384 19.6335 40, + 78.4399 38.0418 40, + 68.0081 54.5426 40, + 54.1662 68.3083 40, + 58.0352 73.1875 40, + 61.9042 78.0666 40, + 65.7732 82.9458 40, + 69.6422 87.825 40, + 73.5112 92.7041 40, + 77.3803 97.5833 40, + 81.2493 102.462 40, + 102.012 81.8139 40, + 117.66 57.0628 40, + 127.408 29.4503 40, + 130.766 0.361071 40, + 127.568 -28.7463 40, + 117.973 -56.4121 40, + 102.462 -81.2493 40, + 97.5833 -77.3803 40, + 92.7041 -73.5112 40, + 87.825 -69.6422 40, + 82.9458 -65.7732 40, + 78.0666 -61.9042 40, + 73.1875 -58.0352 40, + 82.4504 -40.024 120, + 89.2894 -20.6736 120, + 91.6511 -0.286506 120, + 89.4169 20.115 120, + 82.6991 39.5078 120, + 71.8343 56.9195 120, + 57.3675 71.4771 120, + 40.024 82.4504 120, + 42.8829 88.3398 120, + 45.7418 94.2291 120, + 48.6006 100.118 120, + 51.4595 106.008 120, + 54.3183 111.897 120, + 57.1772 117.786 120, + 60.0361 123.676 120, + 86.0513 107.216 120, + 107.751 85.3793 120, + 124.049 59.2617 120, + 134.125 30.1724 120, + 137.477 -0.429759 120, + 133.934 -31.0104 120, + 123.676 -60.0361 120, + 117.786 -57.1772 120, + 111.897 -54.3183 120, + 106.008 -51.4595 120, + 100.118 -48.6006 120, + 94.2291 -45.7418 120, + 88.3398 -42.8829 120, + ] + } + coordIndex [ + 0, 1, 9, 8, -1, + 1, 2, 10, 9, -1, + 2, 3, 11, 10, -1, + 3, 4, 12, 11, -1, + 4, 5, 13, 12, -1, + 5, 6, 14, 13, -1, + 6, 7, 15, 14, -1, + 8, 9, 17, 16, -1, + 9, 10, 18, 17, -1, + 10, 11, 19, 18, -1, + 11, 12, 20, 19, -1, + 12, 13, 21, 20, -1, + 13, 14, 22, 21, -1, + 14, 15, 23, 22, -1, + 16, 17, 25, 24, -1, + 17, 18, 26, 25, -1, + 18, 19, 27, 26, -1, + 19, 20, 28, 27, -1, + 20, 21, 29, 28, -1, + 21, 22, 30, 29, -1, + 22, 23, 31, 30, -1, + 24, 25, 33, 32, -1, + 25, 26, 34, 33, -1, + 26, 27, 35, 34, -1, + 27, 28, 36, 35, -1, + 28, 29, 37, 36, -1, + 29, 30, 38, 37, -1, + 30, 31, 39, 38, -1, + 32, 33, 41, 40, -1, + 33, 34, 42, 41, -1, + 34, 35, 43, 42, -1, + 35, 36, 44, 43, -1, + 36, 37, 45, 44, -1, + 37, 38, 46, 45, -1, + 38, 39, 47, 46, -1, + 40, 41, 49, 48, -1, + 41, 42, 50, 49, -1, + 42, 43, 51, 50, -1, + 43, 44, 52, 51, -1, + 44, 45, 53, 52, -1, + 45, 46, 54, 53, -1, + 46, 47, 55, 54, -1, + 48, 49, 57, 56, -1, + 49, 50, 58, 57, -1, + 50, 51, 59, 58, -1, + 51, 52, 60, 59, -1, + 52, 53, 61, 60, -1, + 53, 54, 62, 61, -1, + 54, 55, 63, 62, -1, + 64, 72, 73, 65, -1, + 65, 73, 74, 66, -1, + 66, 74, 75, 67, -1, + 67, 75, 76, 68, -1, + 68, 76, 77, 69, -1, + 69, 77, 78, 70, -1, + 70, 78, 79, 71, -1, + 72, 80, 81, 73, -1, + 73, 81, 82, 74, -1, + 74, 82, 83, 75, -1, + 75, 83, 84, 76, -1, + 76, 84, 85, 77, -1, + 77, 85, 86, 78, -1, + 78, 86, 87, 79, -1, + 80, 88, 89, 81, -1, + 81, 89, 90, 82, -1, + 82, 90, 91, 83, -1, + 83, 91, 92, 84, -1, + 84, 92, 93, 85, -1, + 85, 93, 94, 86, -1, + 86, 94, 95, 87, -1, + 88, 96, 97, 89, -1, + 89, 97, 98, 90, -1, + 90, 98, 99, 91, -1, + 91, 99, 100, 92, -1, + 92, 100, 101, 93, -1, + 93, 101, 102, 94, -1, + 94, 102, 103, 95, -1, + 96, 104, 105, 97, -1, + 97, 105, 106, 98, -1, + 98, 106, 107, 99, -1, + 99, 107, 108, 100, -1, + 100, 108, 109, 101, -1, + 101, 109, 110, 102, -1, + 102, 110, 111, 103, -1, + 104, 112, 113, 105, -1, + 105, 113, 114, 106, -1, + 106, 114, 115, 107, -1, + 107, 115, 116, 108, -1, + 108, 116, 117, 109, -1, + 109, 117, 118, 110, -1, + 110, 118, 119, 111, -1, + 112, 120, 121, 113, -1, + 113, 121, 122, 114, -1, + 114, 122, 123, 115, -1, + 115, 123, 124, 116, -1, + 116, 124, 125, 117, -1, + 117, 125, 126, 118, -1, + 118, 126, 127, 119, -1, + 0, 128, 129, 1, -1, + 1, 129, 130, 2, -1, + 2, 130, 131, 3, -1, + 3, 131, 132, 4, -1, + 4, 132, 133, 5, -1, + 5, 133, 134, 6, -1, + 6, 134, 135, 7, -1, + 128, 156, 157, 129, -1, + 129, 157, 158, 130, -1, + 130, 158, 159, 131, -1, + 131, 159, 160, 132, -1, + 132, 160, 161, 133, -1, + 133, 161, 162, 134, -1, + 134, 162, 163, 135, -1, + 156, 184, 185, 157, -1, + 157, 185, 186, 158, -1, + 158, 186, 187, 159, -1, + 159, 187, 188, 160, -1, + 160, 188, 189, 161, -1, + 161, 189, 190, 162, -1, + 162, 190, 191, 163, -1, + 184, 212, 213, 185, -1, + 185, 213, 214, 186, -1, + 186, 214, 215, 187, -1, + 187, 215, 216, 188, -1, + 188, 216, 217, 189, -1, + 189, 217, 218, 190, -1, + 190, 218, 219, 191, -1, + 212, 64, 65, 213, -1, + 213, 65, 66, 214, -1, + 214, 66, 67, 215, -1, + 215, 67, 68, 216, -1, + 216, 68, 69, 217, -1, + 217, 69, 70, 218, -1, + 218, 70, 71, 219, -1, + 7, 135, 136, 15, -1, + 15, 136, 137, 23, -1, + 23, 137, 138, 31, -1, + 31, 138, 139, 39, -1, + 39, 139, 140, 47, -1, + 47, 140, 141, 55, -1, + 55, 141, 142, 63, -1, + 135, 163, 164, 136, -1, + 136, 164, 165, 137, -1, + 137, 165, 166, 138, -1, + 138, 166, 167, 139, -1, + 139, 167, 168, 140, -1, + 140, 168, 169, 141, -1, + 141, 169, 170, 142, -1, + 163, 191, 192, 164, -1, + 164, 192, 193, 165, -1, + 165, 193, 194, 166, -1, + 166, 194, 195, 167, -1, + 167, 195, 196, 168, -1, + 168, 196, 197, 169, -1, + 169, 197, 198, 170, -1, + 191, 219, 220, 192, -1, + 192, 220, 221, 193, -1, + 193, 221, 222, 194, -1, + 194, 222, 223, 195, -1, + 195, 223, 224, 196, -1, + 196, 224, 225, 197, -1, + 197, 225, 226, 198, -1, + 219, 71, 79, 220, -1, + 220, 79, 87, 221, -1, + 221, 87, 95, 222, -1, + 222, 95, 103, 223, -1, + 223, 103, 111, 224, -1, + 224, 111, 119, 225, -1, + 225, 119, 127, 226, -1, + 63, 142, 143, 62, -1, + 62, 143, 144, 61, -1, + 61, 144, 145, 60, -1, + 60, 145, 146, 59, -1, + 59, 146, 147, 58, -1, + 58, 147, 148, 57, -1, + 57, 148, 149, 56, -1, + 142, 170, 171, 143, -1, + 143, 171, 172, 144, -1, + 144, 172, 173, 145, -1, + 145, 173, 174, 146, -1, + 146, 174, 175, 147, -1, + 147, 175, 176, 148, -1, + 148, 176, 177, 149, -1, + 170, 198, 199, 171, -1, + 171, 199, 200, 172, -1, + 172, 200, 201, 173, -1, + 173, 201, 202, 174, -1, + 174, 202, 203, 175, -1, + 175, 203, 204, 176, -1, + 176, 204, 205, 177, -1, + 198, 226, 227, 199, -1, + 199, 227, 228, 200, -1, + 200, 228, 229, 201, -1, + 201, 229, 230, 202, -1, + 202, 230, 231, 203, -1, + 203, 231, 232, 204, -1, + 204, 232, 233, 205, -1, + 226, 127, 126, 227, -1, + 227, 126, 125, 228, -1, + 228, 125, 124, 229, -1, + 229, 124, 123, 230, -1, + 230, 123, 122, 231, -1, + 231, 122, 121, 232, -1, + 232, 121, 120, 233, -1, + 56, 149, 150, 48, -1, + 48, 150, 151, 40, -1, + 40, 151, 152, 32, -1, + 32, 152, 153, 24, -1, + 24, 153, 154, 16, -1, + 16, 154, 155, 8, -1, + 8, 155, 128, 0, -1, + 149, 177, 178, 150, -1, + 150, 178, 179, 151, -1, + 151, 179, 180, 152, -1, + 152, 180, 181, 153, -1, + 153, 181, 182, 154, -1, + 154, 182, 183, 155, -1, + 155, 183, 156, 128, -1, + 177, 205, 206, 178, -1, + 178, 206, 207, 179, -1, + 179, 207, 208, 180, -1, + 180, 208, 209, 181, -1, + 181, 209, 210, 182, -1, + 182, 210, 211, 183, -1, + 183, 211, 184, 156, -1, + 205, 233, 234, 206, -1, + 206, 234, 235, 207, -1, + 207, 235, 236, 208, -1, + 208, 236, 237, 209, -1, + 209, 237, 238, 210, -1, + 210, 238, 239, 211, -1, + 211, 239, 212, 184, -1, + 233, 120, 112, 234, -1, + 234, 112, 104, 235, -1, + 235, 104, 96, 236, -1, + 236, 96, 88, 237, -1, + 237, 88, 80, 238, -1, + 238, 80, 72, 239, -1, + 239, 72, 64, 212, -1, + ] + solid FALSE + } + } +#---------- POLYLINE +Shape { + appearance Appearance { + material Material { + diffuseColor 1 0 0 + emissiveColor 1 0 0 + } + } + geometry IndexedLineSet { + coord Coordinate { + point [ + 0 0 0, + 100 0 0, + ] + } + coordIndex [ + 0, 1, -1 + ] + } +} +#---------- POLYLINE +Shape { + appearance Appearance { + material Material { + diffuseColor 0 1 0 + emissiveColor 0 1 0 + } + } + geometry IndexedLineSet { + coord Coordinate { + point [ + 0 0 0, + 0 100 0, + ] + } + coordIndex [ + 0, 1, -1 + ] + } +} +#---------- POLYLINE +Shape { + appearance Appearance { + material Material { + diffuseColor 0 0 1 + emissiveColor 0 0 1 + } + } + geometry IndexedLineSet { + coord Coordinate { + point [ + 0 0 0, + 0 0 100, + ] + } + coordIndex [ + 0, 1, -1 + ] + } +} +#End of file. diff --git a/environments/g4py/tests/gtest06/CMakeLists.txt b/environments/g4py/tests/gtest06/CMakeLists.txt new file mode 100644 index 0000000000..79daaa6852 --- /dev/null +++ b/environments/g4py/tests/gtest06/CMakeLists.txt @@ -0,0 +1,3 @@ +configure_file(test.py test.py) +add_test(NAME geant4py-test06 COMMAND ${PYTHON_EXECUTABLE} test.py) +set_tests_properties(geant4py-test06 PROPERTIES ENVIRONMENT "PYTHONPATH=${GEANT4_PYTHON_OUTPUT_DIR};${GEANT4_TEST_ENVIRONMENT}") diff --git a/environments/g4py/tests/gtest06/jpg/intersection.jpg b/environments/g4py/tests/gtest06/jpg/intersection.jpg new file mode 100644 index 0000000000..4d63759d67 Binary files /dev/null and b/environments/g4py/tests/gtest06/jpg/intersection.jpg differ diff --git a/environments/g4py/tests/gtest06/jpg/subtraction.jpg b/environments/g4py/tests/gtest06/jpg/subtraction.jpg new file mode 100644 index 0000000000..6e06dbd282 Binary files /dev/null and b/environments/g4py/tests/gtest06/jpg/subtraction.jpg differ diff --git a/environments/g4py/tests/gtest06/jpg/union.jpg b/environments/g4py/tests/gtest06/jpg/union.jpg new file mode 100644 index 0000000000..4ff0a7272c Binary files /dev/null and b/environments/g4py/tests/gtest06/jpg/union.jpg differ diff --git a/environments/g4py/tests/gtest06/test.py b/environments/g4py/tests/gtest06/test.py new file mode 100755 index 0000000000..aece738511 --- /dev/null +++ b/environments/g4py/tests/gtest06/test.py @@ -0,0 +1,126 @@ +#!/usr/bin/python3 +# ================================================================== +# python script for Geant4Py test +# +# gtest06 +# - test for constructing/visualizing boolean geoemtries +# ================================================================== +from Geant4 import * +import g4pytest.ExN01pl, g4pytest.ParticleGun + +# ================================================================== +# user actions in python +# ================================================================== +class MyDetectorConstruction(G4VUserDetectorConstruction): + "My Detector Construction" + + def __init__(self): + G4VUserDetectorConstruction.__init__(self) + self.air= gNistManager.FindOrBuildMaterial("G4_AIR") + self.lv_object= None + self.world= self.ConstructWorld() + + self.va_red= G4VisAttributes(G4Color(1.,0.,0.)) + self.va_cyan= G4VisAttributes(G4Color(0.,1.,1.)) + self.va_green= G4VisAttributes(G4Color(0.,1.,0.)) + self.va_blue= G4VisAttributes(G4Color(0.,0.,1.)) + self.va_magenta= G4VisAttributes(G4Color(1.,0.,1.)) + + self.sld_box= G4Box("box",20.*cm, 20.*cm, 20.*cm); + self.sld_cyl= G4Tubs("cylinder",0., 10.*cm, 30.*cm, 0., twopi) + + # ----------------------------------------------------------------- + def ConstructWorld(self): + # Python has automatic garbage collection system. + # Geometry objects must be defined as GLOBAL not to be deleted. + global sld_world, lv_world, pv_world, va_world + + sld_world= G4Box("world", 1.*m, 1.*m, 1.*m) + lv_world= G4LogicalVolume(sld_world, self.air, "world") + pv_world= G4PVPlacement(G4Transform3D(), lv_world, "world", + None, False, 0) + + va_world= G4VisAttributes() + va_world.SetVisibility(False) + lv_world.SetVisAttributes(va_world) + + # solid object (dummy) + global sld_sld, lv_sld, pv_sld + sld_sld= G4Box("dummy", 10.*cm, 10.*cm, 10.*cm) + self.lv_object= lv_sld= G4LogicalVolume(sld_sld, self.air, "dummy") + pv_sld= G4PVPlacement(None, G4ThreeVector(), "dummy", lv_sld, + pv_world, False, 0) + + return pv_world + + # ----------------------------------------------------------------- + def ConstructUnion(self): + global sld_union + sld_union= G4UnionSolid("box+cylinder", self.sld_box, self.sld_cyl); + + self.lv_object.SetSolid(sld_union) + self.lv_object.SetVisAttributes(self.va_blue) + gRunManager.GeometryHasBeenModified() + + # ----------------------------------------------------------------- + def ConstructIntersection(self): + offset= G4ThreeVector(20.*cm, 20.*cm, 0.) + global sld_intersection + sld_intersection= G4IntersectionSolid("box*cylinder", + self.sld_box, self.sld_cyl, + None, offset) + + self.lv_object.SetSolid(sld_intersection) + self.lv_object.SetVisAttributes(self.va_magenta) + gRunManager.GeometryHasBeenModified() + + # ----------------------------------------------------------------- + def ConstructSubtraction(self): + global sld_subtraction + sld_subtraction= G4SubtractionSolid("box-cylinder", + self.sld_box, self.sld_cyl) + + self.lv_object.SetSolid(sld_subtraction) + self.lv_object.SetVisAttributes(self.va_red) + gRunManager.GeometryHasBeenModified() + + # ----------------------------------------------------------------- + def Construct(self): # return the world volume + return self.world + +# ================================================================== +# main +# ================================================================== +# set geometry +myDC= MyDetectorConstruction() +gRunManager.SetUserInitialization(myDC) + +# minimal physics list +g4pytest.ExN01pl.Construct() + +# set primary generator action +g4pytest.ParticleGun.Construct() + +# initialize +gRunManager.Initialize() + +# visualization +gApplyUICommand("/vis/open RayTracer") +gApplyUICommand("/vis/rayTracer/headAngle 40.") +gApplyUICommand("/vis/rayTracer/eyePosition 100 100 150 cm") + +# create a vrml file for each solid type +f_list= ( + ("union", myDC.ConstructUnion), + ("intersection", myDC.ConstructIntersection), + ("subtraction", myDC.ConstructSubtraction) + ) + +for s,f in f_list: + f.__call__() + fname= "%s.jpg" % (s) + cmdstr= "/vis/rayTracer/trace " + fname + # This causes a segfault in MT mode... + gApplyUICommand(cmdstr) + +gTerminate() diff --git a/environments/g4py/tests/gtest07/CMakeLists.txt b/environments/g4py/tests/gtest07/CMakeLists.txt new file mode 100644 index 0000000000..9c2ab0ab05 --- /dev/null +++ b/environments/g4py/tests/gtest07/CMakeLists.txt @@ -0,0 +1,3 @@ +configure_file(test.py test.py) +add_test(NAME geant4py-test07 COMMAND ${PYTHON_EXECUTABLE} test.py) +set_tests_properties(geant4py-test07 PROPERTIES ENVIRONMENT "PYTHONPATH=${GEANT4_PYTHON_OUTPUT_DIR};${GEANT4_TEST_ENVIRONMENT}") diff --git a/environments/g4py/tests/gtest07/test.py b/environments/g4py/tests/gtest07/test.py new file mode 100755 index 0000000000..de63a7dd87 --- /dev/null +++ b/environments/g4py/tests/gtest07/test.py @@ -0,0 +1,80 @@ +#!/usr/bin/python3 +# ================================================================== +# python script for Geant4Py test +# +# gtest07 +# - test for checking overlapped geometries +# ================================================================== +from Geant4 import * +import g4pytest.ExN01pl, g4pytest.ParticleGun + +# ================================================================== +# user actions in python +# ================================================================== +class MyDetectorConstruction(G4VUserDetectorConstruction): + "My Detector Construction" + + def __init__(self): + G4VUserDetectorConstruction.__init__(self) + + # ----------------------------------------------------------------- + def Construct(self): + # Python has automatic garbage collection system. + # Geometry objects must be defined as GLOBAL not to be deleted. + air= gNistManager.FindOrBuildMaterial("G4_AIR") + + # world volume + global sld_world, lv_world, pv_world + sld_world= G4Box("world", 1.*m, 1.*m, 1.*m) + lv_world= G4LogicalVolume(sld_world, air, "world") + pv_world= G4PVPlacement(G4Transform3D(), lv_world, "world", + None, False, 0) + + # box + global sld_box, lv_box, pv_box + sld_box= G4Box("box", 10.*cm, 10.*cm, 10.*cm); + lv_box= G4LogicalVolume(sld_box, air, "box") + pv_box= G4PVPlacement(None, G4ThreeVector(), "box", lv_box, + pv_world, False, 0, True) + + # cylinder + global sld_cyl, lv_cyl, pv_cyl1, pv_cyl2, pv_cyl3 + sld_cyl= G4Tubs("cylinder",0., 2.*cm, 2.*cm, 0., twopi) + lv_cyl= G4LogicalVolume(sld_cyl, air, "cylinder") + + # + # the following placements are !! overlapped !! + # + # doubly placed + pv_cyl1= G4PVPlacement(None, G4ThreeVector(), "cylinder", lv_cyl, + pv_world, False, 0, True) + + # overlaped + pv_cyl2= G4PVPlacement(None, G4ThreeVector(10.*cm,0.,0.), + "cylinder", lv_cyl, + pv_world, False, 1, True) + + # sticked out + pv_cyl3= G4PVPlacement(None, G4ThreeVector(10.*cm,0.,0.), + "cylinder", lv_cyl, + pv_box, False, 0, True) + + return pv_world + +# ================================================================== +# main +# ================================================================== +# set geometry +myDC= MyDetectorConstruction() +gRunManager.SetUserInitialization(myDC) + +# minimal physics list +g4pytest.ExN01pl.Construct() + +# set primary generator action +g4pytest.ParticleGun.Construct() + +# initialize +gRunManager.Initialize() # overlap should be detected !! + + diff --git a/environments/g4py/tests/gtest08/CMakeLists.txt b/environments/g4py/tests/gtest08/CMakeLists.txt new file mode 100644 index 0000000000..aa44ddeaa5 --- /dev/null +++ b/environments/g4py/tests/gtest08/CMakeLists.txt @@ -0,0 +1,3 @@ +configure_file(test.py test.py) +add_test(NAME geant4py-test08 COMMAND ${PYTHON_EXECUTABLE} test.py) +set_tests_properties(geant4py-test08 PROPERTIES ENVIRONMENT "PYTHONPATH=${GEANT4_PYTHON_OUTPUT_DIR};${GEANT4_TEST_ENVIRONMENT}") \ No newline at end of file diff --git a/environments/g4py/tests/gtest08/test.py b/environments/g4py/tests/gtest08/test.py new file mode 100755 index 0000000000..5b03e6a769 --- /dev/null +++ b/environments/g4py/tests/gtest08/test.py @@ -0,0 +1,74 @@ +#!/usr/bin/python3 +# ================================================================== +# python script for Geant4Py test +# +# gtest09 +# - test for checking use of G4PhysListFactory +# ================================================================== + +from Geant4 import * + +# ================================================================== +# user actions in python +# ================================================================== +class MyDetectorConstruction(G4VUserDetectorConstruction): + "My Detector Construction" + + def __init__(self): + G4VUserDetectorConstruction.__init__(self) + + # ----------------------------------------------------------------- + def Construct(self): + # Python has automatic garbage collection system. + # Geometry objects must be defined as GLOBAL not to be deleted. + air= gNistManager.FindOrBuildMaterial("G4_AIR") + + # world volume + global sld_world, lv_world, pv_world + sld_world= G4Box("world", 1.*m, 1.*m, 1.*m) + lv_world= G4LogicalVolume(sld_world, air, "world") + pv_world= G4PVPlacement(G4Transform3D(), lv_world, "world", + None, False, 0) + + return pv_world + +class MyPrimaryGeneratorAction(G4VUserPrimaryGeneratorAction): + "My Primary Generator Action" + + def __init__(self): + G4VUserPrimaryGeneratorAction.__init__(self) + self.particleGun= G4ParticleGun(1) + + def GeneratePrimaries(self, event): + dx=0. + self.particleGun.SetParticleMomentumDirection(G4ThreeVector(dx, 0., 1.)) + self.particleGun.GeneratePrimaryVertex(event) + +# ================================================================== +# main +# ================================================================== +# set geometry +myDC = MyDetectorConstruction() +gRunManager.SetUserInitialization(myDC) + +# Create physics list +factory = G4PhysListFactory() +myPhysList = factory.GetReferencePhysList("FTFP_BERT") + +if myPhysList is None: + raise RuntimeError("No physics list named FTFP_BERT found") + +gRunManager.SetUserInitialization(myPhysList) + +# Event generator +myGenAction = MyPrimaryGeneratorAction() +myGenAction.particleGun.SetParticleByName("e-") +myGenAction.particleGun.SetParticleEnergy(200.*MeV) +myGenAction.particleGun.SetParticlePosition(G4ThreeVector(0.,0.,-14.9)*cm) + +gRunManager.SetUserAction(myGenAction) + +# Init, run terminate +gRunManager.Initialize() +gRunManager.BeamOn(10) +gTerminate() diff --git a/environments/zmq/README.md b/environments/zmq/README.md new file mode 100644 index 0000000000..69bfa90e24 --- /dev/null +++ b/environments/zmq/README.md @@ -0,0 +1,14 @@ +# ZeroMQ Interface for Geant4 + +Copyright (c) 2017, Koichi Murakami + +zmq-geant4 is a [ZeroMQ](http://zeromq.org/) interface with Geant4, +that is an alternative implementation of Geant4 UI session. +The interface is designed for the purpose of Geant4 kernel +for [Jupyter](http://jupyter.org/). +A Jupyter kernel is provided in +[igeant4](https://github.com/koichi-murakami/igeant4) repository. + +* [Releases](https://github.com/koichi-murakami/zmq-geant4/releases) +* [Install Instructions](https://github.com/koichi-murakami/zmq-geant4/wiki/Installation) +* [Issues](https://github.com/koichi-murakami/zmq-geant4/issues) diff --git a/examples/.README.HowToRun.txt b/examples/.README.HowToRun.txt new file mode 100644 index 0000000000..041a8e0718 --- /dev/null +++ b/examples/.README.HowToRun.txt @@ -0,0 +1,90 @@ + +///\file ".README.HowToRun.txt" +///\brief Examples How To Run README page + +/*! \page README_HowToRun How to build and run an example + +All basic and most of extended examples have a similar structure. +The main () function is included in \em exampleXYZ.cc in the example top directory +and the example source code is structered in \em include and \em src subdirectories. +When the example is built, the executable takes the same name as the file with +main () function without \em .cc extension, \em exampleXYZ. + +Then several macros are provided to run the example with various start-up +conditions. These macros have usually \em .mac extension. Besides these macros, +there is often a macro \em exampleXYZ.in (note its different extension) +which is used in Geant4 testing and which output, \em exampleXYZ.out, can be also included +in the distribution. + +You can find all details about building the examples in the Geant4 Installation Guide , in the section How to Use the Geant4 Toolkit Libraries . +Here we recall only the basics. + +\section HowToRun_s1 Compile and link to generate an executable + +\verbatim +% cd path_to_exampleXYZ # go to directory which contains your example +% mkdir exampleXYZ_build +% cd exampleXYZ_build +% cmake -DGeant4_DIR=path_to_Geant4_installation/lib[64]/Geant4-11.0.0/ ../exampleXYZ +% make -j N exampleXYZ # "N" is the number of processes +% make install # this step is optional +\endverbatim + + +\section HowToRun_s2 Execute exampleXYZ in 'batch' mode from macro files + +\verbatim +... go to the directory where the example was built/installed +% ./exampleXYZ xyz.mac +\endverbatim + +\section HowToRun_s3 Execute exampleXYZ in 'interactive mode' with visualization +\verbatim +... go to the directory where the example was built/installed +% ./exampleXYZ +.... +Idle> type your commands +.... +Idle> exit +\endverbatim + +See also the explicit instructions for building TestEm1 example at +\ref README_HowToRunTestEm1 page. + +*/ + +/*! \page README_HowToRunTestEm1 How to build and run TestEm1 example + +Below we give the explicit instructions (described in general at \ref README_HowToRun page) for the example extended/electromagnetic/TestEm1. + +Let's suppose that the \em TestEm1 directory is available in $HOME and Geant4 installation in \em /usr/local and we work within the \em bash shell on a \em 64-bit machine. + +\section HowToRunTestEm1_s1 Compile and link TestEm1 to generate an executable + +\verbatim +% cd $HOME +% mkdir TestEm1_build +% cd TestEm1_build +% cmake -DGeant4_DIR=/usr/local/lib64/Geant4-11.0.0/ ../TestEm1 +% make -j 2 TestEm1 +\endverbatim + +\section HowToRunTestEm1_s2 Execute TestEm1 in 'batch' mode from macro files +\verbatim +% cd $HOME/TestEm1_build # or cd $HOME/TestEm1 if example was built with GNUmake +% ./TestEm1 annihil.mac +% ./TestEm1 brem.mac +% ./TestEm1 TestEm1.in >& myTestEm1.out # redirecting output in a file +\endverbatim + +\section HowToRunTestEm1_s3 Execute TestEm1 in 'interactive mode' with visualization +\verbatim +% cd $HOME/TestEm1_build # or cd $HOME/TestEm1 if example was built with GNUmake +% ./TestEm1 +PreInit> /run/initialize +Idle> /run/beamOn 1 +... +Idle> exit +\endverbatim + +*/ diff --git a/examples/.README.HowToRunMT.txt b/examples/.README.HowToRunMT.txt new file mode 100644 index 0000000000..7382804e9d --- /dev/null +++ b/examples/.README.HowToRunMT.txt @@ -0,0 +1,86 @@ + +///\file ".README.HowToRunMT.txt" +///\brief Examples Tips How To Run MT README page + +/*! \page README_HowToRunMT Tips how to run an example in multi-threading mode + +Only migrated examples or user applications can be run in multi-threading (MT) mode. +The instructions for migrating user applications can be found in Geant4 documentation guides +and a short howto is available here: + +https://twiki.cern.ch/twiki/bin/view/Geant4/QuickMigrationGuideForGeant4V10 + +In this file, we give just useful tips for running already migrated examples +(or user applications). + +\section HowToRunMT_s1 Run example in multi-threading mode + +No special steps are needed to build an example in multi-threading (MT) mode. +The examples which has been migrated to multi-threading will automatically +run in MT when they are built against the Geant4 libraries built with MT mode +activated, otherwise they will run in sequential mode. +Not migrated examples will run in sequential mode even when built against +Geant4 libraries built with MT mode activated. + +The examples which do NOT support MT can be easily recognized by the following line +of code in main (): +\verbatim +G4RunManager* runManager = new G4RunManager; +\endverbatim +or +\verbatim +auto* runManager = G4RunManagerFactory::CreateRunManager(G4RunManagerType::SerialOnly); +\endverbatim + +\section HowToRunMT_s2 Set number of threads + +When the number of threads is not selected in the application, the default number +(which is actually 2) will be used. Another number of threads can be set in several +ways: + +- in the code +\verbatim + auto* runManager = ...; + runManager->SetNumberOfThreads(4); +\endverbatim + +- in a macro file via UI command added just before /run/initialize +\verbatim +/run/numberOfThreads 4 +\endverbatim + +- by setting the environment variable +\verbatim +export G4FORCENUMBEROFTHREADS = 4 +or +setenv G4FORCENUMBEROFTHREADS 4 +\endverbatim + +The environment variable value is forced and it cannot be changed from a code +call or a macro. A warning is issued in such situation. + +\section HowToRunMT_s3 Output from threads + +In MT processing each worker produces its output and these messages are interlayed +on the screen. The messeges from threads are preceded with a predefined string +G4WTi> where i is the thread number. Users can change this default behaviour +and choose + +- to limit the output from threads to one selected thread only: +\verbatim +/control/cout/ignoreThreadsExcept 0 +\endverbatim + +- to redirect the output from threads in a file: +\verbatim +/control/cout/setCoutFile coutFileName +/control/cout/setCerrFile cerrFileName +\endverbatim + +- to buffer the output from each thread at a time, so that the output of each + thread is grouped and printed at the end of the job +\verbatim +/control/cout/useBuffer true|false +\endverbatim + +*/ diff --git a/examples/.doxygen/.README.HowToNavigate.txt b/examples/.doxygen/.README.HowToNavigate.txt new file mode 100644 index 0000000000..c4bcbc0ec4 --- /dev/null +++ b/examples/.doxygen/.README.HowToNavigate.txt @@ -0,0 +1,24 @@ + +///\file ".README.HowToNavigate.txt" +///\brief Examples How To Navigate README page + +/*! \page README_HowToNavigate How to navigate in the examples documentation + +The examples documentation is composed from a "global" documentation including all examples with classes which has unique names (eg. A01DetectorConstruction etc.) and from "standalone" documentations for examples with classes which names are not not unique (DetectorConstruction etc.). + +\section HowToNavigate_sec1 Global documentation + +The lists of "Related Pages" and "Modules" in the global documentation include the README pages for all examples categories and examples with both unique class names and generic ones. The lists "Namespaces" , "Classes" and "Files" include only the examples with unique class names. + +That's why the README pages for the examples with a standalone documentation generated in the global documentation do not contain links to their classes +(one cannot click on a class name here to get the class documentation). See eg. \ref ExampleTestEm1. + +\section HowToNavigate_sec2 Standalone documentations + +The links from "global" documentation to the examples "standalone" documentation are available in the list of "Modules". When selecting eg. "TestEm1" here, you will be directed to the main page of its standalone documentation. When selecting then "Example TestEm1" from the "Related Pages" list here (there is only one page in the list) you will get the example documentation with hyperlinks to the classes etc. + +All the lists in the examples "standalone" documentation include only the concerned example and eventually the classes shared with another examples or the classes from common if they are used in the example. + +This organization was necessary as Doxygen does not support the classes with the same names in one system. + +*/ diff --git a/examples/.doxygen/.README.novice.txt b/examples/.doxygen/.README.novice.txt new file mode 100644 index 0000000000..8f53f38a84 --- /dev/null +++ b/examples/.doxygen/.README.novice.txt @@ -0,0 +1,25 @@ + +///\file ".README.novice.txt" +///\brief Geant4 Old Novice Examples README page + +/*! \page README_novice Old Novice Examples + +The old "novice" set of examples is now replaced with a new "basic" set, +covering the most typical use-cases of a Geant4 application with keeping +simplicity and ease of use. + +The source code of the last version of the novice examples set +(in 9.6.p02 release) can be viewed in + +the Geant4 LXR code browser + +The new location of each example in 10.0 release: +- N01 - removed +- N02 - \link ExampleB2 basic/B2 \endlink +- N03 - \link ExampleB4 basic/B4 \endlink +- N04 - \link ExampleRE05 extended/runAndEvent/RE05 \endlink +- N05 - \link ExamplePar01 extended/parameterisations/Par01 \endlink +- N06 - \link ExampleOpNovice extended/optical/OpNovice \endlink +- N07 - \link ExampleRE06 extended/runAndEvent/RE06 \endlink + +*/ diff --git a/examples/.doxygen/README b/examples/.doxygen/README new file mode 100644 index 0000000000..99e4a37d89 --- /dev/null +++ b/examples/.doxygen/README @@ -0,0 +1,25 @@ + +To generate Doxygen documentation for all examples: + +1) Check in Doxyfile, Doxyfile_standalone the value of + STRIP_FROM_PATH variable and adjust it if needed + +2) Download geant4.tag file from: + http://www-geant4.kek.jp/Reference/10.01/geant4.tag + and update the version number in TAGFILES value + in Doxyfile, Doxyfile_standalone + +3) Generate documentation for all examples with unique class names + (alltogether): + doxygen >& doxygen.out + +4) Generate documentation for examples with non-unique class names + (a standalone documentation will be generated for each example) + ./generate_standalone.sh + +To extract coding guildelines violations from Doxygen output +(requires using patched Doxygen): + + cat doxygen*.out | grep "### Geant4 guidelines violation: data member" >> data_members_violations.txt + cat doxygen*.out | grep "### Geant4 guidelines violation: function member" >> function_members_violations.txt + diff --git a/examples/README b/examples/README new file mode 100644 index 0000000000..a3cb3f8a56 --- /dev/null +++ b/examples/README @@ -0,0 +1,50 @@ +------------------------------------------------------------------- + + ========================================================= + Geant4 - an Object-Oriented Toolkit for Simulation in HEP + ========================================================= + + Examples module + --------------- + +This module collects three sets of user examples aimed to demonstrate to +the user how to make correct use of the GEANT4 toolkit by implementing +in a correct way those user-classes which the user is supposed to +customize in order to define his/her own simulation setup. + +The "basic" set of examples is oriented to novice users and covering +the most typical use-cases of a Geant4 application with keeping simplicity +and ease of use. + +An "extended" set of examples may require some additional libraries besides +of Geant4. This set covers many specific use cases for actual detector +simulation. + +An "advanced" set of examples covers the use-cases typical of a +"toolkit"-oriented kind of development, where real complete applications +for different simulation studies are provided; may require additional third +party products to be built. + +Most of the examples can be run both in interactive and batch mode, and +input macro files (*.in) and reference output files (*.out) are provided. +See the detailed instructions how to build and how to run an example +in README.HowToRun and README.HowToRunTestEm1. Several tips how to run +an example in multi-threading mode can be found in README.HowToRunMT. + +Basic and most of the extended examples are considered part of the +system testing suite for validation of the official releases of the +GEANT4 toolkit. Basic and some of the extended and advanced +examples are also used as "acceptance"-tests for the release process. + +The previous set of examples oriented to novice users, "novice", +has been refactored in "basic" and "extended" examples sets in Geant4 10.0. +The source code of the last version of the original novice examples set +(in 9.6.p02 release) can be viewed in the Geant4 LXR code browser: + http://www-geant4.kek.jp/lxr/source/examples/novice/?v=9.6.p2 + +And more on what is common for all examples: +- README.HowToRun +- README.HowToRunMT + +Web: https://geant4-userdoc.web.cern.ch/Doxygen/examples_doc/html/index.html + diff --git a/examples/README.HowToRun b/examples/README.HowToRun new file mode 100644 index 0000000000..6df9caf7e1 --- /dev/null +++ b/examples/README.HowToRun @@ -0,0 +1,80 @@ +------------------------------------------------------------------- + + ========================================================= + Geant4 - an Object-Oriented Toolkit for Simulation in HEP + ========================================================= + + How to build and run an example + ------------------------------- + + All basic and most of extended examples have a similar structure. + The main () function is included in exampleXYZ.cc in the example top directory + and the example source code is structered in include and src subdirectories. + When the example is built, the executable takes the same name as the file with + main() function without .cc extension, exampleXYZ. + + Then several macros are provided to run the example with various start-up + conditions. These macros have usually .mac extension. Besides these macros, + there is often a macro exampleXYZ.in (note its different extension) + which is used in Geant4 testing and which output, exampleXYZ.out, can also included + in the distribution. + + You can find all details about building the examples in the Geant4 Installation Guide: + "https://geant4-userdoc.web.cern.ch/UsersGuides/InstallationGuide/html/index.html" + in the section How to Use the Geant4 Toolkit Libraries: + https://geant4-userdoc.web.cern.ch/UsersGuides/InstallationGuide/html/buildtools.html" + Here we recall only the basics. + + 1) COMPILE AND LINK TO GENERATE AN EXECUTABLE + + % cd path_to_exampleXYZ # go to directory which contains your example + % mkdir exampleXYZ_build + % cd exampleXYZ_build + % cmake -DGeant4_DIR=path_to_Geant4_installation/lib[64]/Geant4-11.0.0/ ../exampleXYZ + % make -j N exampleXYZ # "N" is the number of processes + % make install # this step is optional + + 2) EXECUTE EXAMPLEXYZ IN 'BATCH' MODE FROM MACRO FILES + + ... go to the directory where the example was built/installed + % ./exampleXYZ xyz.mac + + 3) EXECUTE EXAMPLEXYZ IN 'INTERACTIVE MODE' WITH VISUALIZATION + + ... go to the directory where the example was built/installed + % ./exampleXYZ + .... + Idle> type your commands + .... + Idle> exit + + + Below we give the explicit instructions for the example + extended/electromagnetic/TestEm1. + + Let's suppose that the TestEm1 directory is available in $HOME and Geant4 + installation in /usr/local and we work within bash shell on a 64-bit machine. + + 1) COMPILE AND LINK TESTEM1 TO GENERATE AN EXECUTABLE + + % cd $HOME + % mkdir TestEm1_build + % cd TestEm1_build + % cmake -DGeant4_DIR=/usr/local/lib64/Geant4-11.0.0/ ../TestEm1 + % make -j 2 TestEm1 + + 2) EXECUTE TESTEM1 IN 'BATCH' MODE FROM MACRO FILES + + % cd $HOME/TestEm1_build # or cd $HOME/TestEm1 if example was built with GNUmake + % ./TestEm1 annihil.mac + % ./TestEm1 brem.mac + % ./TestEm1 TestEm1.in >& myTestEm1.out # redirecting output in a file + + 3) EXECUTE TESTEM1 IN 'INTERACTIVE MODE' WITH VISUALIZATION + + % cd $HOME/TestEm1_build # or cd $HOME/TestEm1 if example was built with GNUmake + % ./TestEm1 + PreInit> /run/initialize + Idle> /run/beamOn 1 + ... + Idle> exit diff --git a/examples/README.HowToRunMT b/examples/README.HowToRunMT new file mode 100644 index 0000000000..b23ba6bd78 --- /dev/null +++ b/examples/README.HowToRunMT @@ -0,0 +1,80 @@ +------------------------------------------------------------------- + + ========================================================= + Geant4 - an Object-Oriented Toolkit for Simulation in HEP + ========================================================= + + Tips how to run an example in multi-threading mode + -------------------------------------------------- + + Only migrated examples or user applications can be run in multi-threading (MT) mode. + The instructions for migrating user applications can be found in Geant4 documentation guides + and a short howto is available here: + + https://twiki.cern.ch/twiki/bin/view/Geant4/QuickMigrationGuideForGeant4V10 + + In this file, we give just useful tips for running already migrated examples + (or user applications). + + 1) RUN EXAMPLE IN MULTI-THREADING MODE + + No special steps are needed to build an example in multi-threading (MT) mode. + The examples which has been migrated to multi-threading will automatically + run in MT when they are built against the Geant4 libraries built with MT mode + activated, otherwise they will run in sequential mode. + Not migrated examples will run in sequential mode even when built against + Geant4 libraries built with MT mode activated. + + The examples which do NOT support MT can be easily recognized by the following line + of code in main (): + + G4RunManager* runManager = new G4RunManager; + +or + + auto* runManager = G4RunManagerFactory::CreateRunManager(G4RunManagerType::SerialOnly); + + 2) SET NUMBER OF THREADS + + When the number of threads is not selected in the application, the default number + (which is actually 2) will be used. Another number of threads can be set in several + ways: + + - in the code + + auto* runManager = ...; + runManager->SetNumberOfThreads(4); + + - in a macro file via UI command added just before /run/initialize + + /run/numberOfThreads 4 + + - by setting the environment variable + + export G4FORCENUMBEROFTHREADS = 4 + or + setenv G4FORCENUMBEROFTHREADS 4 + + The environment variable value is forced and it cannot be changed from a code + call or a macro. A warning is issued in such situation. + + 3) OUTPUT FROM THREADS + + In MT processing each worker produces its output and these messages are interlayed + on the screen. The messeges from threads are preceded with a predefined string + G4WTi> where i is the thread number. Users can change this default behaviour + and choose + + - to limit the output from threads to one selected thread only: + + /control/cout/ignoreThreadsExcept 0 + + - to redirect the output from threads in a file: + + /control/cout/setCoutFile coutFileName + /control/cout/setCerrFile cerrFileName + + - to buffer the output from each thread at a time, so that the output of each + thread is grouped and printed at the end of the job + + /control/cout/useBuffer true|false diff --git a/examples/advanced/CaTS/README.md b/examples/advanced/CaTS/README.md new file mode 100644 index 0000000000..cbc38c29e0 --- /dev/null +++ b/examples/advanced/CaTS/README.md @@ -0,0 +1,118 @@ +![alt text](https://github.com/hanswenzel/CaTS/blob/master/images/CaTS.png) +# CaTS: Calorimeter and Tracker Simulation + +CaTS is a flexible and extend-able framework (based on geant4 and ROOT) +for the simulation of calorimeter and tracking detectors. +It also serves as an Example that demonstrates how to use opticks +from within Geant4 for the creation and propagation of optical photons. +https://bitbucket.org/simoncblyth/opticks.git. + +The components of CaTS are: + + +Detector Description: described in gdml input file (e.g. crystalcal.gdml) +(Geometry, Materials, + optical properties, + sensitive detector) + +Input modules: + + GPS + Particle Gun + HEPMC (Pythia) + + +Physics Lists: choice of all Reference Physics Lists + optical physics processes (Cerenkov, Rayleigh, + Scintillation etc.) are added (talk to) + +Sensitive Detectors: (+ corresponding Hit classes) + + TrackerSD(Hit) registers the step points of charged particles. + CalorimeterSD(Hit) registering energy deposit + DRCalorimeterSD(Hit) besides registering energy deposit counts produced Cerenkov photons + MsCSD(Hit) used to study multiple scattering on a thin layer + PhotonSD(Hit) sensitive detector that registers optical photons. + lArTPCSD(Hit) sensitive detector that registers ionization and collects Gensteps (Scintillation and Cerenkov) to be processed by Opticks. + + + + RadiatorSD no Hits just collection of Gensteps (Scintillation and Cerenkov) to be processed by Opticks. + + + +This requires the opticks environment to be set up properly (see https://github.com/hanswenzel/CaTS/blob/master/Instructions.md) + +To get started : + +```bash +git clone https://github.com/hanswenzel/CaTS.git +cd CaTS/ + +# to setup the opticks environment source the setup_opticks.sh file described in: +# https://github.com/hanswenzel/CaTS/blob/master/Instructions.md + + +source (path to opticks WORK_DIR)/setup_opticks.sh +cd ../ +mkdir CaTS-build +cd CaTS-build + +cmake -DCMAKE_BUILD_TYPE=Debug \ + -DWITH_G4OPTICKS=ON \ + -DCMAKE_PREFIX_PATH="${LOCAL_BASE}/opticks/externals;${LOCAL_BASE}/opticks" \ + -DOPTICKS_PREFIX=${LOCAL_BASE}/opticks \ + -DCMAKE_MODULE_PATH=${OPTICKS_HOME}/cmake/Modules \ + -DCMAKE_INSTALL_PREFIX=../CaTS-install \ + ../CaTS + +make install +cd ../CaTS-install/bin +time ./CaTS -g simpleLArTPC.gdml -pl 'FTFP_BERT+OPTICAL+STEPLIMIT' -m time.mac + +Only the -g command line variable is mandatory! If you don't specify the macro file interactive mode is assumed: + +./CaTS -g simpleLArTPC.gdml -pl 'FTFP_BERT+OPTICAL+STEPLIMIT' + +``` + +to compile CaTS without Opticks do: + +```bash +cmake -DCMAKE_BUILD_TYPE=Debug -DWITH_G4OPTICKS=OFF -DCMAKE_MODULE_PATH="../CaTS/cmake/Modules" -DCMAKE_INSTALL_PREFIX=../CaTS-install ../CaTS +``` +if you don't provide the -pl argument the default physics list configuration: +'FTFP_BERT+OPTICAL+STEPLIMIT' +is used + + +![alt text](https://github.com/hanswenzel/CaTS/blob/master/images/display.png) +to look at the hit collection and make a few histograms: + + ./readPhotonHits NewHits_point_Run0.root PhotonHistos.root Det + +The 3 arguments here are: name of input file (hits), name of output file for the histograms and the logical Volume that sensitive detector (PhotonSD)is attached to. +One can then use root to look at the plots: + +```bash +root histos.root + ------------------------------------------------------------------ + | Welcome to ROOT 6.22/06 https://root.cern | + | (c) 1995-2020, The ROOT Team; conception: R. Brun, F. Rademakers | + | Built for linuxx8664gcc on Dec 13 2020, 13:28:00 | + | From tags/v6-22-06@v6-22-06 | + | Try '.help', '.demo', '.license', '.credits', '.quit'/'.q' | + ------------------------------------------------------------------ + +root [0] +Attaching file histos.root as _file0... +(TFile *) 0x559578f76f60 +root [1] TBrowser b +(TBrowser &) Name: Browser Title: ROOT Object Browser +``` + +![alt text](https://github.com/hanswenzel/CaTS/blob/master/images/position.png) + +For comparison one might want to disable Opticks and use Geant4 to generate and propagate optical photons: + + time ./CaTS -g simpleLArTPC.gdml -pl 'FTFP_BERT+OPTICAL+STEPLIMIT' -m time_G4.mac diff --git a/examples/advanced/ChargeExchangeMC/README b/examples/advanced/ChargeExchangeMC/README new file mode 100644 index 0000000000..7013091bc2 --- /dev/null +++ b/examples/advanced/ChargeExchangeMC/README @@ -0,0 +1,104 @@ + + ===================================================================== + Geant4 - Cexmc advanced example + ===================================================================== + + README + ----------------------- + +Author: A. Radkov (alexey.radkov@gmail.com) + +------> Introduction + +Cexmc stands for Charge EXchange Monte Carlo. The program was used to simulate +real experiments in Petersburg Nuclear Physics Institute (PNPI, Russia). +Detailed User's Manual and explanatory images of the experimental setup can be +found in directory doc/ of this example. + +------> Compilation + +Basic modules of Cexmc must compile with Geant4 version 9.4. Cexmc won't compile +with older versions of Geant4. Cexmc contains several optional modules which can +be enabled or disabled in the makefile by setting dedicated macros: most of them +are listed in the beginning of the makefile and well commented. Modules may +involve additional dependencies. In the following table the dependencies and +related modules are shown. + +Dependency Requirement Makefile Macro / Module Comment +-------------------------------------------------------------------------------- +boost::serialize Optional CEXMC_USE_PERSISTENCY / used when + Persistency (de)serialization of + events and run data + +boost::split Optional CEXMC_USE_PERSISTENCY / used when parsing + Main command line + arguments related to + persistency module + +boost::spirit Optional CEXMC_USE_CUSTOM_FILTER / used in custom + Custom filter filter engine + +cernlib Optional CEXMC_USE_GENBOD / Main user can choose + native GENBOD() as + phase space + generator + +CERN ROOT Optional CEXMC_USE_ROOT / used in histograming + Histograming + +CERN ROOT / Qt Optional CEXMC_USE_ROOTQT / used for live +binding Histograming histograms in Qt + sessions +-------------------------------------------------------------------------------- + +The persistency module is compatible with a pretty old boost::serialize version +(compilation was tested under Scientific Linux 4.8 with gcc 3.4.6 and boost +version 1.32). Custom filter requires a newer boost as far as it uses modern +boost::spirit library which requires boost version 1.37 and higher. +Presence of CERN ROOT libraries is tested automatically in the makefile, but it +is possible to disable or enable the histograming framework manually using flag +CEXMC_USE_HISTOGRAMING in the makefile. +Compilation of visualization modules and interactive sessions depends on whether +standard Geant4 macros like G4VIS_USE, G4UI_USE, G4UI_USE_TCSH and G4UI_USE_QT +have been set. +If boost is installed in a special path in your system then you may need to +properly set environment variables BOOST_INCLUDE_PATH and BOOST_LIBRARY_PATH +which denote directories where boost include files and libraries are located. + +------> Run modes + +Run modes are set from command-line options. To see available command-line +options type in terminal 'cexmc -h' or just 'cexmc'. Some run modes can be +unavailable if certain modules were not compiled. + +Here is list of run modes categorized by type of interaction with user: + + 1. Batch mode. The simplest mode without any interaction with user. + No command line option is required. + 2. Interactive mode. The program provides an interactive shell. + To run in the interactive mode command line option -i must be specified. + 3. Graphical Qt mode. This mode is specified by command line option -g. + +List of run modes categorized by task: + + 1. Straight mode (or Monte Carlo mode). The program will read preinit and + init macros, then calculate acceptances and (optionally) save data in + project files. Project files are saved in a directory defined by + environment variable CEXMC_PROJECTS_DIR (or in the current directory if it + is not defined), name of the project is specified by option -w. Preinit + and init macros are set by options -p and -m respectively. In the straight + mode preinit macro must be specified explicitly, as far as desired + production model can be instantiated only in preinit phase. + 2. Replay mode (or Read project mode). In this mode the program will not use + common Geant4's event loop. Instead, it will sequentially read event data + from an existing project and pass them into + CexmcEventAction::EndOfEventAction(). The read project is specified by + option -r. This mode is useful when user wants to recalculate data from an + existing project with different conditions (for example with different + reconstruction parameters) or apply a custom filter. The results of run + can be written again into another project. + 3. Show results mode (or Output mode). The program will output various data + from an existing project (specified by option -r). Type(s) of data are + specified in option -o. For example, to show results of a run user can + specify -orun in command line. To show events, geometry and run results + user can specify -oevents,geom,run. diff --git a/examples/advanced/ChargeExchangeMC/doc/CexmcSetupImages.pdf b/examples/advanced/ChargeExchangeMC/doc/CexmcSetupImages.pdf new file mode 100644 index 0000000000..d5d73ca17e Binary files /dev/null and b/examples/advanced/ChargeExchangeMC/doc/CexmcSetupImages.pdf differ diff --git a/examples/advanced/ChargeExchangeMC/doc/CexmcUsersManual.pdf b/examples/advanced/ChargeExchangeMC/doc/CexmcUsersManual.pdf new file mode 100644 index 0000000000..07098bd8d4 Binary files /dev/null and b/examples/advanced/ChargeExchangeMC/doc/CexmcUsersManual.pdf differ diff --git a/examples/advanced/HGCal_testbeam/README b/examples/advanced/HGCal_testbeam/README new file mode 100644 index 0000000000..93092d98eb --- /dev/null +++ b/examples/advanced/HGCal_testbeam/README @@ -0,0 +1,227 @@ +------------------------------------------------------------------- + + ========================================================= + Geant4 - an Object-Oriented Toolkit for Simulation in HEP + ========================================================= + + Example HGCal_testbeam + ---------------------- + + This example is based on the Geant4 standalone application developed + by Thorben Quast for the CMS HGCal studies: + https://github.com/ThorbenQuast/HGCal_TB_Geant4. + + The goal of this example is to demonstrate a test beam setup used + in HEP experiments, and as a base for the validation studies and + comparison with experiment data. + + It presents a test beam setup used in the HGCal studies in October + 2018. It can be easily extended to other configurations. + + Details on the High Granularity Calorimeter (HGCal) can be found + i.a. in the Technical Design Report: + https://cds.cern.ch/record/2293646/files/CMS-TDR-019.pdf + + 1. Detector description + ----------------------- + + Detector construction in this example assumes that the setup is + constructed with different elements placed one behind another along + z axis (beam axis). + There are 3 configurations user can choose from, and could be set + with UI command: + + /HGCalTestbeam/setup/configuration + + where by default is equal to 0, which means the HGCal testbeam + setup used in October 2018. + 1 builds the same calorimeter setup, but places in front of it + several beamline elements. + 2 builds a very simplistic test configuration. + + Whenever a silicon wafer or SiPM is placed in the detector, a sensitive + volume is attached to it, and will be used to collect signal. + + Silicon wafer is divided into cells (pixels), and each individual pixel + can collect signal. + + In order to change the maximum step size allowed in silicon pixels: + + /HGCalTestbeam/setup/stepSilicon + + where is value of the max step size in micrometres. By default + is equal to 30 um. + + 2. Signal + --------- + + Energy deposited within silicon pixels and SiPMs is registered in the + sensitive detectors. Each deposit is added individually to the vector + of hits, in order to allow the digitisation. + + Digitisation is performed at the end of the event. It accumulates the + energy deposits within pixels, taking into account the time cut on the + arrival of signal (global time of energy deposit). By default no time + cut is applied which means all the deposits are counted. It can be set + using UI command: + + /HGCalTestbeam/hits/timeCut