diff options
author | Michael Raskin <7c6f434c@mail.ru> | 2014-10-02 22:42:15 +0400 |
---|---|---|
committer | Michael Raskin <7c6f434c@mail.ru> | 2014-10-02 22:42:15 +0400 |
commit | 907af9e9e61899fab0eca047c209852ba6f84e64 (patch) | |
tree | 238da4025dc68efb05916b96d9db837f1f1a5e84 /pkgs/development | |
parent | a650c0e28c9601f517d3f1253477a354495a43cf (diff) | |
parent | a5cf6850e32d9ca0d19f865af8cb19f6cdb8992f (diff) | |
download | nixpkgs-907af9e9e61899fab0eca047c209852ba6f84e64.tar nixpkgs-907af9e9e61899fab0eca047c209852ba6f84e64.tar.gz nixpkgs-907af9e9e61899fab0eca047c209852ba6f84e64.tar.bz2 nixpkgs-907af9e9e61899fab0eca047c209852ba6f84e64.tar.lz nixpkgs-907af9e9e61899fab0eca047c209852ba6f84e64.tar.xz nixpkgs-907af9e9e61899fab0eca047c209852ba6f84e64.tar.zst nixpkgs-907af9e9e61899fab0eca047c209852ba6f84e64.zip |
Merge pull request #3963 from christopherpoole/geant4
Add the Geant4 Monte Carlo radiation transport toolkit and its Python bindings.
Diffstat (limited to 'pkgs/development')
6 files changed, 253 insertions, 0 deletions
diff --git a/pkgs/development/libraries/physics/geant4/default.nix b/pkgs/development/libraries/physics/geant4/default.nix new file mode 100644 index 00000000000..1e1fc7ea3b8 --- /dev/null +++ b/pkgs/development/libraries/physics/geant4/default.nix @@ -0,0 +1,150 @@ +{ enableMultiThreading ? false +, enableG3toG4 ? false +, enableInventor ? false +, enableGDML ? false +, enableQT ? false +, enableXM ? false +, enableOpenGLX11 ? false +, enableRaytracerX11 ? false + +# Standard build environment with cmake. +, stdenv, fetchurl, cmake + +# Optional system packages, otherwise internal GEANT4 packages are used. +, clhep ? null +, expat ? null +, zlib ? null + +# For enableGDML. +, xercesc ? null + +# For enableQT. +, qt ? null # qt4SDK or qt5SDK + +# For enableXM. +, motif ? null # motif or lesstif + +# For enableQT, enableXM, enableOpenGLX11, enableRaytracerX11. +, mesa ? null +, x11 ? null +, libXmu ? null +}: + +# G4persistency library with support for GDML +assert enableGDML -> xercesc != null; + +# If enableQT, Qt4/5 User Interface and Visualization drivers. +assert enableQT -> qt != null; + +# Motif User Interface and Visualisation drivers. +assert enableXM -> motif != null; + +# OpenGL/X11 User Interface and Visualisation drivers. +assert enableQT || enableXM || enableOpenGLX11 || enableRaytracerX11 -> mesa != null; +assert enableQT || enableXM || enableOpenGLX11 || enableRaytracerX11 -> x11 != null; +assert enableQT || enableXM || enableOpenGLX11 || enableRaytracerX11 -> libXmu != null; + +let + buildGeant4 = + { version, src, multiThreadingCapable ? false }: + + stdenv.mkDerivation rec { + inherit version src; + name = "geant4-${version}"; + + # The data directory holds not just interaction cross section data, but other + # files which the installer needs to write, so we link to the previously installed + # data instead. This assumes the default data installation location of $out/share. + preConfigure = '' + mkdir -p $out/share/Geant4-${version} + ln -s ${g4data}/Geant4-${version}/data $out/share/Geant4-${version}/data + ''; + + multiThreadingFlag = if multiThreadingCapable then "-DGEANT4_BUILD_MULTITHREADED=${if enableMultiThreading then "ON" else "OFF"}" else ""; + + cmakeFlags = '' + ${multiThreadingFlag} + -DGEANT4_USE_GDML=${if enableGDML then "ON" else "OFF"} + -DGEANT4_USE_G3TOG4=${if enableG3toG4 then "ON" else "OFF"} + -DGEANT4_USE_QT=${if enableQT then "ON" else "OFF"} + -DGEANT4_USE_XM=${if enableXM then "ON" else "OFF"} + -DGEANT4_USE_OPENGL_X11=${if enableOpenGLX11 then "ON" else "OFF"} + -DGEANT4_USE_INVENTOR=${if enableInventor then "ON" else "OFF"} + -DGEANT4_USE_RAYTRACER_X11=${if enableRaytracerX11 then "ON" else "OFF"} + -DGEANT4_USE_SYSTEM_CLHEP=${if clhep != null then "ON" else "OFF"} + -DGEANT4_USE_SYSTEM_EXPAT=${if expat != null then "ON" else "OFF"} + -DGEANT4_USE_SYSTEM_ZLIB=${if zlib != null then "ON" else "OFF"} + ''; + + g4data = installData { + inherit version src; + }; + + enableParallelBuilding = true; + buildInputs = [ cmake clhep expat zlib xercesc qt motif mesa x11 libXmu ]; + propagatedBuildInputs = [ g4data clhep expat zlib xercesc qt motif mesa x11 libXmu ]; + + setupHook = ./setup-hook.sh; + + # Set the myriad of envars required by Geant4 if we use a nix-shell. + shellHook = '' + source $out/nix-support/setup-hook + ''; + + meta = { + description = "A toolkit for the simulation of the passage of particles through matter."; + longDescription = '' + Geant4 is a toolkit for the simulation of the passage of particles through matter. + Its areas of application include high energy, nuclear and accelerator physics, as well as studies in medical and space science. + The two main reference papers for Geant4 are published in Nuclear Instruments and Methods in Physics Research A 506 (2003) 250-303, and IEEE Transactions on Nuclear Science 53 No. 1 (2006) 270-278. + ''; + homepage = http://www.geant4.org; + license = stdenv.lib.licenses.g4sl; + maintainers = [ ]; + platforms = stdenv.lib.platforms.all; + }; + }; + + installData = + { version, src }: + + stdenv.mkDerivation rec { + inherit version src; + name = "g4data-${version}"; + + cmakeFlags = '' + -DGEANT4_INSTALL_DATA="ON" + ''; + + buildInputs = [ cmake expat ]; + + enableParallelBuilding = true; + buildPhase = '' + make G4EMLOW G4NDL G4NEUTRONXS G4PII G4SAIDDATA PhotonEvaporation RadioactiveDecay RealSurface + ''; + + installPhase = '' + mkdir -p $out/Geant4-${version} + cp -R data/ $out/Geant4-${version} + ''; + + meta = { + description = "Data files for the Geant4 toolkit."; + homepage = http://www.geant4.org; + license = stdenv.lib.licenses.g4sl; + maintainers = [ ]; + platforms = stdenv.lib.platforms.all; + }; + }; + + fetchGeant4 = import ./fetch.nix { + inherit stdenv fetchurl; + }; + +in { + v10_0_2 = buildGeant4 { + inherit (fetchGeant4.v10_0_2) version src; + multiThreadingCapable = true; + }; +} + diff --git a/pkgs/development/libraries/physics/geant4/fetch.nix b/pkgs/development/libraries/physics/geant4/fetch.nix new file mode 100644 index 00000000000..0e5dd54c6ae --- /dev/null +++ b/pkgs/development/libraries/physics/geant4/fetch.nix @@ -0,0 +1,19 @@ +{ stdenv, fetchurl }: + +let + fetch = { version, src ? builtins.getAttr stdenv.system sources, sources ? null }: + { + inherit version src; + }; + +in { + v10_0_2 = fetch { + version = "10.0.2"; + + src = fetchurl{ + url = "http://geant4.cern.ch/support/source/geant4.10.00.p02.tar.gz"; + sha256 = "9d615200901f1a5760970e8f5970625ea146253e4f7c5ad9df2a9cf84549e848"; + }; + }; +} + diff --git a/pkgs/development/libraries/physics/geant4/g4py/configure.patch b/pkgs/development/libraries/physics/geant4/g4py/configure.patch new file mode 100644 index 00000000000..886618abd34 --- /dev/null +++ b/pkgs/development/libraries/physics/geant4/g4py/configure.patch @@ -0,0 +1,12 @@ +--- environments/g4py/configure 2014-03-17 22:47:05.000000000 +1100 ++++ environments/g4py/configure 2014-09-01 15:33:46.523637686 +1000 +@@ -4,9 +4,6 @@ + # ====================================================================== + export LANG=C + +-PATH=/bin:/usr/bin +-export PATH +- + # ====================================================================== + # testing the echo features + # ====================================================================== diff --git a/pkgs/development/libraries/physics/geant4/g4py/default.nix b/pkgs/development/libraries/physics/geant4/g4py/default.nix new file mode 100644 index 00000000000..f90b2e6c4ae --- /dev/null +++ b/pkgs/development/libraries/physics/geant4/g4py/default.nix @@ -0,0 +1,70 @@ +{ stdenv, fetchurl + +# The target version of Geant4 +, geant4 + +# Python (obviously) and boost::python for wrapping. +, python +, boost +}: + +let + buildG4py = + { version, src, geant4}: + + stdenv.mkDerivation rec { + inherit version src geant4; + name = "g4py-${version}"; + + # ./configure overwrites $PATH, which clobbers everything. + patches = [ ./configure.patch ]; + patchFlags = "-p0"; + + configurePhase = '' + export PYTHONPATH=$PYTHONPATH:${geant4}/lib64:$prefix + + source ${geant4}/share/Geant4-*/geant4make/geant4make.sh + cd environments/g4py + + ./configure linux64 --prefix=$prefix \ + --with-g4install-dir=${geant4} \ + --with-python-incdir=${python}/include/python${python.majorVersion} \ + --with-python-libdir=${python}/lib \ + --with-boost-incdir=${boost}/include \ + --with-boost-libdir=${boost}/lib + ''; + + enableParallelBuilding = true; + buildInputs = [ geant4 boost python ]; + + setupHook = ./setup-hook.sh; + + # Make sure we set PYTHONPATH + shellHook = '' + source $out/nix-support/setup-hook + ''; + + meta = { + description = "Python bindings and utilities for Geant4."; + longDescription = '' + Geant4 is a toolkit for the simulation of the passage of particles through matter. + Its areas of application include high energy, nuclear and accelerator physics, as well as studies in medical and space science. + The two main reference papers for Geant4 are published in Nuclear Instruments and Methods in Physics Research A 506 (2003) 250-303, and IEEE Transactions on Nuclear Science 53 No. 1 (2006) 270-278. + ''; + homepage = http://www.geant4.org; + license = stdenv.lib.licenses.g4sl; + maintainers = [ ]; + platforms = stdenv.lib.platforms.all; + }; + }; + + fetchGeant4 = import ../fetch.nix { + inherit stdenv fetchurl; + }; + +in { + v10_0_2 = buildG4py { + inherit (fetchGeant4.v10_0_2) version src; + geant4 = geant4.v10_0_2; + }; +} diff --git a/pkgs/development/libraries/physics/geant4/g4py/setup-hook.sh b/pkgs/development/libraries/physics/geant4/g4py/setup-hook.sh new file mode 100644 index 00000000000..8abfb461fc0 --- /dev/null +++ b/pkgs/development/libraries/physics/geant4/g4py/setup-hook.sh @@ -0,0 +1 @@ +export PYTHONPATH=$PYTHONPATH:@out@/lib diff --git a/pkgs/development/libraries/physics/geant4/setup-hook.sh b/pkgs/development/libraries/physics/geant4/setup-hook.sh new file mode 100644 index 00000000000..0b775d43283 --- /dev/null +++ b/pkgs/development/libraries/physics/geant4/setup-hook.sh @@ -0,0 +1 @@ +source @out@/bin/geant4.sh |