From affb56ff48ac0d6aa7a17d8f4aa671daf40f58cd Mon Sep 17 00:00:00 2001 From: Guilhem Lavaux Date: Tue, 29 Dec 2020 08:56:33 +0000 Subject: [PATCH] Merged in python3 (pull request #5) Port to python3, large code cleanup * Fixed command line for cosmotool * Fix path * Dump command line is log file * Fix important typo * Modify paths for example * Fix path again * Use an explicit constructor * Change file to open (python 2->3) * python3 fix for xrange in periodic_kdtree.py * Fixed index for Np, numPart, numZones, numZonesTot, partID, zoneID in catalogUtil.py --- .gitignore | 3 +- CMakeLists.txt | 38 +- README => README.md | 142 +- build_tools/gather_sources.py | 19 +- c_tools/CMakeLists.txt | 6 +- c_tools/analysis/CMakeLists.txt | 2 + c_tools/analysis/voidOverlap.cpp | 16 +- c_tools/hod/CMakeLists.txt | 1 + c_tools/hod/header.c | 1 + c_tools/hod/header.h | 7 +- c_tools/libzobov/CMakeLists.txt | 5 +- c_tools/libzobov/particleInfo.cpp | 141 +- c_tools/mock/CMakeLists.txt | 7 +- c_tools/mock/generateFromCatalog.cpp | 45 +- c_tools/mock/generateMock.cpp | 123 +- c_tools/stacking/CMakeLists.txt | 2 + c_tools/stacking/pruneVoids.cpp | 16 +- c_tools/zobov2/jozov2/CMakeLists.txt | 2 + c_tools/zobov2/voz1b1/CMakeLists.txt | 1 + container/Dockerfile | 17 + container/build.sh | 20 + external/cfitsio-3.47.tar.gz | Bin 0 -> 4853990 bytes external/cfitsio/License.txt | 25 - external/cfitsio/Makefile.in | 166 - external/cfitsio/README | 144 - external/cfitsio/README.MacOS | 70 - external/cfitsio/README.win32 | 74 - external/cfitsio/adler32.c | 167 - external/cfitsio/buffers.c | 1371 -- external/cfitsio/cfileio.c | 6965 ---------- external/cfitsio/cfitsio.doc | 9535 ------------- external/cfitsio/cfitsio.pc.in | 11 - external/cfitsio/cfitsio.tex | 10644 --------------- external/cfitsio/cfitsio_mac.sit.hqx | 1 - external/cfitsio/cfortran.doc | 2088 --- external/cfitsio/cfortran.h | 2515 ---- external/cfitsio/changes.txt | 3844 ------ external/cfitsio/checksum.c | 508 - external/cfitsio/configure | 6682 --------- external/cfitsio/configure.in | 507 - external/cfitsio/cookbook.c | 571 - external/cfitsio/cookbook.f | 772 -- external/cfitsio/crc32.c | 440 - external/cfitsio/crc32.h | 441 - external/cfitsio/deflate.c | 1832 --- external/cfitsio/deflate.h | 340 - external/cfitsio/drvrfile.c | 966 -- external/cfitsio/drvrgsiftp.c | 522 - external/cfitsio/drvrgsiftp.h | 21 - external/cfitsio/drvrmem.c | 1184 -- external/cfitsio/drvrnet.c | 2741 ---- external/cfitsio/drvrsmem.c | 973 -- external/cfitsio/drvrsmem.h | 179 - external/cfitsio/editcol.c | 2474 ---- external/cfitsio/edithdu.c | 883 -- external/cfitsio/eval.l | 545 - external/cfitsio/eval.y | 5837 -------- external/cfitsio/eval_defs.h | 163 - external/cfitsio/eval_f.c | 2823 ---- external/cfitsio/eval_l.c | 2252 --- external/cfitsio/eval_tab.h | 42 - external/cfitsio/eval_y.c | 7333 ---------- external/cfitsio/f77.inc | 31 - external/cfitsio/f77_wrap.h | 288 - external/cfitsio/f77_wrap1.c | 345 - external/cfitsio/f77_wrap2.c | 711 - external/cfitsio/f77_wrap3.c | 853 -- external/cfitsio/f77_wrap4.c | 572 - external/cfitsio/fits_hcompress.c | 1858 --- external/cfitsio/fits_hdecompress.c | 2618 ---- external/cfitsio/fitscopy.c | 60 - external/cfitsio/fitscore.c | 9243 ------------- external/cfitsio/fitsfile.tpt | 8 - external/cfitsio/fitsio.doc | 6607 --------- external/cfitsio/fitsio.h | 1934 --- external/cfitsio/fitsio.pdf | Bin 688002 -> 0 bytes external/cfitsio/fitsio.ps | 11353 ---------------- external/cfitsio/fitsio.tex | 7688 ----------- external/cfitsio/fitsio.toc | 95 - external/cfitsio/fitsio2.h | 1205 -- external/cfitsio/fpack.c | 387 - external/cfitsio/fpack.h | 171 - external/cfitsio/fpackutil.c | 2391 ---- external/cfitsio/funpack.c | 168 - external/cfitsio/getcol.c | 1055 -- external/cfitsio/getcolb.c | 2002 --- external/cfitsio/getcold.c | 1677 --- external/cfitsio/getcole.c | 1680 --- external/cfitsio/getcoli.c | 1902 --- external/cfitsio/getcolj.c | 3728 ----- external/cfitsio/getcolk.c | 1895 --- external/cfitsio/getcoll.c | 614 - external/cfitsio/getcols.c | 835 -- external/cfitsio/getcolsb.c | 1991 --- external/cfitsio/getcolui.c | 1908 --- external/cfitsio/getcoluj.c | 1902 --- external/cfitsio/getcoluk.c | 1917 --- external/cfitsio/getkey.c | 3242 ----- external/cfitsio/group.c | 6463 --------- external/cfitsio/group.h | 65 - external/cfitsio/grparser.c | 1379 -- external/cfitsio/grparser.h | 185 - external/cfitsio/histo.c | 2221 --- external/cfitsio/imcompress.c | 9247 ------------- external/cfitsio/imcopy.c | 233 - external/cfitsio/infback.c | 632 - external/cfitsio/inffast.c | 340 - external/cfitsio/inffast.h | 11 - external/cfitsio/inffixed.h | 94 - external/cfitsio/inflate.c | 1480 -- external/cfitsio/inflate.h | 122 - external/cfitsio/inftrees.c | 330 - external/cfitsio/inftrees.h | 62 - external/cfitsio/iraffits.c | 2073 --- external/cfitsio/iter_a.c | 147 - external/cfitsio/iter_a.f | 224 - external/cfitsio/iter_a.fit | 1111 -- external/cfitsio/iter_b.c | 114 - external/cfitsio/iter_b.f | 193 - external/cfitsio/iter_b.fit | Bin 408960 -> 0 bytes external/cfitsio/iter_c.c | 171 - external/cfitsio/iter_c.f | 347 - external/cfitsio/iter_c.fit | 701 - external/cfitsio/iter_image.c | 93 - external/cfitsio/iter_var.c | 100 - external/cfitsio/longnam.h | 592 - external/cfitsio/make_dfloat.com | 90 - external/cfitsio/make_gfloat.com | 88 - external/cfitsio/make_ieee.com | 87 - external/cfitsio/makefile.bc | 588 - external/cfitsio/makefile.vcc | 793 -- external/cfitsio/makepc.bat | 87 - external/cfitsio/mkpkg | 74 - external/cfitsio/modkey.c | 1706 --- external/cfitsio/pliocomp.c | 331 - external/cfitsio/putcol.c | 1929 --- external/cfitsio/putcolb.c | 1013 -- external/cfitsio/putcold.c | 1060 -- external/cfitsio/putcole.c | 1074 -- external/cfitsio/putcoli.c | 986 -- external/cfitsio/putcolj.c | 1992 --- external/cfitsio/putcolk.c | 1013 -- external/cfitsio/putcoll.c | 369 - external/cfitsio/putcols.c | 303 - external/cfitsio/putcolsb.c | 974 -- external/cfitsio/putcolu.c | 629 - external/cfitsio/putcolui.c | 969 -- external/cfitsio/putcoluj.c | 977 -- external/cfitsio/putcoluk.c | 993 -- external/cfitsio/putkey.c | 3085 ----- external/cfitsio/quantize.c | 3888 ------ external/cfitsio/quick.pdf | Bin 279588 -> 0 bytes external/cfitsio/quick.ps | 3850 ------ external/cfitsio/quick.tex | 2159 --- external/cfitsio/quick.toc | 25 - external/cfitsio/region.c | 1747 --- external/cfitsio/region.h | 82 - external/cfitsio/ricecomp.c | 1382 -- external/cfitsio/sample.tpl | 121 - external/cfitsio/scalnull.c | 229 - external/cfitsio/smem.c | 77 - external/cfitsio/speed.c | 511 - external/cfitsio/swapproc.c | 247 - external/cfitsio/testf77.f | 2488 ---- external/cfitsio/testf77.out | 746 - external/cfitsio/testf77.std | Bin 66240 -> 0 bytes external/cfitsio/testprog.c | 2588 ---- external/cfitsio/testprog.out | 797 -- external/cfitsio/testprog.std | 48 - external/cfitsio/testprog.tpt | 12 - external/cfitsio/trees.c | 1242 -- external/cfitsio/trees.h | 128 - external/cfitsio/uncompr.c | 57 - external/cfitsio/vmsieee.c | 130 - external/cfitsio/vmsieeed.mar | 137 - external/cfitsio/vmsieeer.mar | 106 - external/cfitsio/wcssub.c | 1043 -- external/cfitsio/wcsutil.c | 502 - external/cfitsio/winDumpExts.mak | 191 - external/cfitsio/windumpexts.c | 502 - external/cfitsio/zcompress.c | 504 - external/cfitsio/zconf.h | 426 - external/cfitsio/zlib.h | 1613 --- external/cfitsio/zuncompress.c | 603 - external/cfitsio/zutil.c | 316 - external/cfitsio/zutil.h | 272 - external/configure_healpix.cmake | 12 + external/cosmotool/.gitignore | 8 - external/cosmotool/CMakeLists.txt | 85 - external/cosmotool/FindNumPy.cmake | 102 - external/cosmotool/FindPyLibs.cmake | 32 - .../cosmotool/GetGitRevisionDescription.cmake | 104 - .../GetGitRevisionDescription.cmake.in | 30 - external/cosmotool/LICENCE_CeCILL_V2 | 506 - .../cosmotool/build_tools/gather_sources.py | 164 - external/cosmotool/color_msg.cmake | 42 - external/cosmotool/doc/make.bat | 190 - external/cosmotool/doc/source/conf.py | 286 - external/cosmotool/doc/source/cpplibrary.rst | 2 - external/cosmotool/doc/source/index.rst | 26 - external/cosmotool/doc/source/intro.rst | 6 - .../cosmotool/doc/source/pythonmodule.rst | 53 - .../cosmotool/external/external_build.cmake | 373 - .../external/libsharp-6077806.tar.gz | Bin 65050 -> 0 bytes .../cosmotool/external/omptl-20120422.tar.bz2 | Bin 21465 -> 0 bytes external/cosmotool/external/patch-omptl | 94 - external/cosmotool/python/CMakeLists.txt | 111 - .../cosmotool/python/_cosmo_bispectrum.cpp | 278 - external/cosmotool/python/_cosmo_cic.pyx | 76 - external/cosmotool/python/_cosmo_power.pyx | 153 - external/cosmotool/python/_cosmotool.pyx | 560 - external/cosmotool/python/_fast_interp.pyx | 43 - external/cosmotool/python/_project.pyx | 890 -- external/cosmotool/python/copy.pxd | 22 - .../cosmotool/python/cosmotool/__init__.py | 23 - .../cosmotool/python/cosmotool/bispectrum.py | 127 - external/cosmotool/python/cosmotool/borg.py | 265 - external/cosmotool/python/cosmotool/cic.py | 42 - external/cosmotool/python/cosmotool/cl_cic.py | 239 - .../cosmotool/python/cosmotool/config.py.in | 1 - external/cosmotool/python/cosmotool/ctpv.py | 211 - external/cosmotool/python/cosmotool/fftw.py | 45 - external/cosmotool/python/cosmotool/grafic.py | 108 - external/cosmotool/python/cosmotool/simu.py | 154 - external/cosmotool/python/cosmotool/smooth.py | 109 - external/cosmotool/python/cosmotool/timing.py | 53 - external/cosmotool/python/cppHelper.hpp | 45 - external/cosmotool/python/project_tool.hpp | 120 - external/cosmotool/python/safe_gadget.hpp | 29 - .../cosmotool/python_sample/build_2lpt_ksz.py | 111 - .../python_sample/build_2lpt_skymap.py | 76 - .../build_dipole_ksz_from_galaxies.py | 287 - .../python_sample/build_nbody_ksz.py | 109 - .../build_nbody_ksz_from_galaxies.py | 167 - .../python_sample/build_nbody_skymap.py | 58 - .../python_sample/gen_2lpt_asmooth.py | 48 - .../python_sample/gen_2lpt_density.py | 55 - .../cosmotool/python_sample/icgen/__init__.py | 2 - .../python_sample/icgen/borgadaptor.py | 55 - .../python_sample/icgen/borgicgen.py | 228 - .../python_sample/icgen/cosmogrowth.py | 202 - .../python_sample/icgen/gen_ic_from_borg.py | 24 - .../python_sample/icgen/test_ic_from_borg.py | 63 - .../python_sample/icgen/test_whitify.py | 41 - .../cosmotool/python_sample/ksz/__init__.py | 3 - .../cosmotool/python_sample/ksz/constants.py | 36 - .../cosmotool/python_sample/ksz/gal_prof.py | 175 - .../cosmotool/python_sample/ramsesToArray.py | 15 - .../python_sample/test_bispectrum.py | 28 - .../python_sample/test_spheric_proj.py | 20 - external/cosmotool/sample/CMakeLists.txt | 115 - external/cosmotool/sample/Hartmann_Matrix.txt | 7 - external/cosmotool/sample/gadgetToArray.cpp | 104 - external/cosmotool/sample/gadgetToDensity.cpp | 96 - external/cosmotool/sample/graficToDensity.cpp | 72 - external/cosmotool/sample/simple3DFilter.cpp | 218 - .../cosmotool/sample/simpleDistanceFilter.cpp | 86 - external/cosmotool/sample/testAlgo.cpp | 56 - external/cosmotool/sample/testBQueue.cpp | 68 - external/cosmotool/sample/testBSP.cpp | 50 - external/cosmotool/sample/testDelaunay.cpp | 65 - external/cosmotool/sample/testEskow.cpp | 102 - external/cosmotool/sample/testHDF5.cpp | 183 - external/cosmotool/sample/testInterpolate.cpp | 66 - external/cosmotool/sample/testNewton.cpp | 62 - external/cosmotool/sample/testPool.cpp | 54 - external/cosmotool/sample/testReadFlash.cpp | 52 - external/cosmotool/sample/testSmooth.cpp | 105 - external/cosmotool/sample/test_cosmopower.cpp | 63 - external/cosmotool/sample/test_fft_calls.cpp | 94 - .../cosmotool/sample/test_healpix_calls.cpp | 60 - external/cosmotool/sample/testkd.cpp | 158 - external/cosmotool/sample/testkd2.cpp | 163 - external/cosmotool/sample/testkd3.cpp | 187 - external/cosmotool/src/CMakeLists.txt | 116 - external/cosmotool/src/algo.hpp | 98 - external/cosmotool/src/bqueue.hpp | 65 - external/cosmotool/src/bqueue.tcc | 67 - external/cosmotool/src/bsp_simple.hpp | 202 - external/cosmotool/src/bsp_simple.tcc | 117 - external/cosmotool/src/cic.cpp | 201 - external/cosmotool/src/cic.hpp | 72 - external/cosmotool/src/config.hpp | 170 - external/cosmotool/src/cosmopower.cpp | 417 - external/cosmotool/src/cosmopower.hpp | 125 - external/cosmotool/src/dinterpolate.hpp | 129 - external/cosmotool/src/dinterpolate.tcc | 339 - external/cosmotool/src/eskow.hpp | 306 - external/cosmotool/src/field.hpp | 118 - external/cosmotool/src/fixArray.hpp | 75 - external/cosmotool/src/fortran.cpp | 415 - external/cosmotool/src/fortran.hpp | 138 - external/cosmotool/src/fourier/base_types.hpp | 207 - .../src/fourier/details/euclidian_maps.hpp | 312 - .../fourier/details/euclidian_spectrum_1d.hpp | 222 - .../details/euclidian_spectrum_1d_bin.hpp | 100 - .../fourier/details/euclidian_transform.hpp | 246 - .../src/fourier/details/healpix_alms.hpp | 111 - .../src/fourier/details/healpix_map.hpp | 89 - .../src/fourier/details/healpix_spectrum.hpp | 179 - .../src/fourier/details/healpix_transform.hpp | 141 - .../src/fourier/details/healpix_utility.hpp | 98 - external/cosmotool/src/fourier/euclidian.hpp | 52 - .../cosmotool/src/fourier/fft/fftw_calls.hpp | 122 - .../src/fourier/fft/fftw_calls_mpi.hpp | 101 - .../src/fourier/fft/fftw_complex.hpp | 42 - external/cosmotool/src/fourier/healpix.hpp | 59 - external/cosmotool/src/growthFactor.cpp | 146 - external/cosmotool/src/growthFactor.hpp | 47 - external/cosmotool/src/h5_readFlash.cpp | 513 - external/cosmotool/src/h5_readFlash.hpp | 81 - external/cosmotool/src/hdf5_array.hpp | 487 - external/cosmotool/src/hdf5_flash.h | 226 - external/cosmotool/src/interpolate.cpp | 308 - external/cosmotool/src/interpolate.hpp | 95 - external/cosmotool/src/interpolate3d.hpp | 146 - external/cosmotool/src/kdtree_leaf.hpp | 142 - external/cosmotool/src/kdtree_leaf.tcc | 308 - external/cosmotool/src/kdtree_splitters.hpp | 169 - external/cosmotool/src/loadFlash.cpp | 139 - external/cosmotool/src/loadFlash.hpp | 48 - external/cosmotool/src/loadFlash_dummy.cpp | 44 - external/cosmotool/src/loadGadget.cpp | 515 - external/cosmotool/src/loadGadget.hpp | 54 - external/cosmotool/src/loadRamses.cpp | 1041 -- external/cosmotool/src/loadRamses.hpp | 53 - external/cosmotool/src/loadSimu.hpp | 139 - external/cosmotool/src/load_data.cpp | 670 - external/cosmotool/src/load_data.hpp | 136 - external/cosmotool/src/mach.hpp | 55 - external/cosmotool/src/miniargs.cpp | 90 - external/cosmotool/src/miniargs.hpp | 61 - external/cosmotool/src/mykdtree.hpp | 238 - external/cosmotool/src/mykdtree.tcc | 693 - external/cosmotool/src/newton.hpp | 65 - external/cosmotool/src/octTree.hpp | 191 - external/cosmotool/src/octTree.tcc | 217 - external/cosmotool/src/openmp.hpp | 44 - external/cosmotool/src/pool.hpp | 201 - external/cosmotool/src/powerSpectrum.cpp | 703 - external/cosmotool/src/powerSpectrum.hpp | 72 - external/cosmotool/src/replicateGenerator.hpp | 111 - external/cosmotool/src/sparseGrid.hpp | 122 - external/cosmotool/src/sparseGrid.tcc | 145 - external/cosmotool/src/sphSmooth.hpp | 154 - external/cosmotool/src/sphSmooth.tcc | 227 - external/cosmotool/src/symbol_visible.hpp | 32 - external/cosmotool/src/tf_fit.hpp | 313 - external/cosmotool/src/yorick.hpp | 231 - external/cosmotool/src/yorick_nc3.cpp | 309 - external/cosmotool/src/yorick_nc4.cpp | 272 - external/external_build.cmake | 217 +- external/external_cosmotool.cmake | 58 +- external/external_python_build.cmake | 250 +- external/patch_kdtree | 20 - external/python_build.cmake | 27 - external/python_install.cmake | 24 - python_tools/fit_hod/HOD_library.py | 853 +- python_tools/fit_hod/HOD_parameters.py | 571 +- .../fit_hod/correlation_function_library.py | 1565 +-- python_tools/fit_hod/readsnap.py | 881 +- python_tools/fit_hod/readsubf.py | 599 +- python_tools/misc_util/figureOutMask.py | 2 +- .../pipeline_source/prepareInputs.in.py | 71 +- python_tools/setup.py | 6 +- python_tools/vide/__init__.py | 22 + .../apTools/chi2 => vide/apTools}/__init__.py | 5 +- .../apTools/chi2}/__init__.py | 4 +- .../apTools/chi2/cosmologyTools.py | 4 +- .../apTools/profiles}/__init__.py | 5 +- .../apTools/profiles/getSurveyProps.py | 6 +- .../backend/__init__.py | 6 +- .../backend/classes.py | 2 +- .../backend/launchers.py | 190 +- .../voidUtil}/__init__.py | 12 +- .../voidUtil/catalogUtil.py | 202 +- .../voidUtil/matchUtil.py | 12 +- python_tools/vide/voidUtil/periodic_kdtree.py | 394 + .../voidUtil/plotDefs.py | 6 +- .../voidUtil/plotUtil.py | 26 +- .../voidUtil/profileUtil.py | 24 +- .../voidUtil/xcorUtil.py | 275 +- .../voidUtil/xcorlib.py | 195 +- python_tools/void_pipeline/__init__.py | 0 .../void_pipeline/__main__.py | 38 +- .../datasets/example_observation.py | 21 +- .../datasets/example_simulation.py | 14 +- .../void_python_tools/voidUtil/__init__.py | 26 - run_env.sh.in | 6 - run_python.sh.in | 6 - setup.py | 263 + zobov/CMakeLists.txt | 2 +- 392 files changed, 4092 insertions(+), 260938 deletions(-) rename README => README.md (60%) create mode 100644 container/Dockerfile create mode 100644 container/build.sh create mode 100644 external/cfitsio-3.47.tar.gz delete mode 100644 external/cfitsio/License.txt delete mode 100644 external/cfitsio/Makefile.in delete mode 100644 external/cfitsio/README delete mode 100644 external/cfitsio/README.MacOS delete mode 100644 external/cfitsio/README.win32 delete mode 100644 external/cfitsio/adler32.c delete mode 100644 external/cfitsio/buffers.c delete mode 100644 external/cfitsio/cfileio.c delete mode 100644 external/cfitsio/cfitsio.doc delete mode 100644 external/cfitsio/cfitsio.pc.in delete mode 100644 external/cfitsio/cfitsio.tex delete mode 100644 external/cfitsio/cfitsio_mac.sit.hqx delete mode 100644 external/cfitsio/cfortran.doc delete mode 100644 external/cfitsio/cfortran.h delete mode 100644 external/cfitsio/changes.txt delete mode 100644 external/cfitsio/checksum.c delete mode 100755 external/cfitsio/configure delete mode 100644 external/cfitsio/configure.in delete mode 100644 external/cfitsio/cookbook.c delete mode 100644 external/cfitsio/cookbook.f delete mode 100644 external/cfitsio/crc32.c delete mode 100644 external/cfitsio/crc32.h delete mode 100644 external/cfitsio/deflate.c delete mode 100644 external/cfitsio/deflate.h delete mode 100644 external/cfitsio/drvrfile.c delete mode 100644 external/cfitsio/drvrgsiftp.c delete mode 100644 external/cfitsio/drvrgsiftp.h delete mode 100644 external/cfitsio/drvrmem.c delete mode 100644 external/cfitsio/drvrnet.c delete mode 100644 external/cfitsio/drvrsmem.c delete mode 100644 external/cfitsio/drvrsmem.h delete mode 100644 external/cfitsio/editcol.c delete mode 100644 external/cfitsio/edithdu.c delete mode 100644 external/cfitsio/eval.l delete mode 100644 external/cfitsio/eval.y delete mode 100644 external/cfitsio/eval_defs.h delete mode 100644 external/cfitsio/eval_f.c delete mode 100644 external/cfitsio/eval_l.c delete mode 100644 external/cfitsio/eval_tab.h delete mode 100644 external/cfitsio/eval_y.c delete mode 100644 external/cfitsio/f77.inc delete mode 100644 external/cfitsio/f77_wrap.h delete mode 100644 external/cfitsio/f77_wrap1.c delete mode 100644 external/cfitsio/f77_wrap2.c delete mode 100644 external/cfitsio/f77_wrap3.c delete mode 100644 external/cfitsio/f77_wrap4.c delete mode 100644 external/cfitsio/fits_hcompress.c delete mode 100644 external/cfitsio/fits_hdecompress.c delete mode 100644 external/cfitsio/fitscopy.c delete mode 100644 external/cfitsio/fitscore.c delete mode 100644 external/cfitsio/fitsfile.tpt delete mode 100644 external/cfitsio/fitsio.doc delete mode 100644 external/cfitsio/fitsio.h delete mode 100644 external/cfitsio/fitsio.pdf delete mode 100644 external/cfitsio/fitsio.ps delete mode 100644 external/cfitsio/fitsio.tex delete mode 100644 external/cfitsio/fitsio.toc delete mode 100644 external/cfitsio/fitsio2.h delete mode 100644 external/cfitsio/fpack.c delete mode 100644 external/cfitsio/fpack.h delete mode 100644 external/cfitsio/fpackutil.c delete mode 100644 external/cfitsio/funpack.c delete mode 100644 external/cfitsio/getcol.c delete mode 100644 external/cfitsio/getcolb.c delete mode 100644 external/cfitsio/getcold.c delete mode 100644 external/cfitsio/getcole.c delete mode 100644 external/cfitsio/getcoli.c delete mode 100644 external/cfitsio/getcolj.c delete mode 100644 external/cfitsio/getcolk.c delete mode 100644 external/cfitsio/getcoll.c delete mode 100644 external/cfitsio/getcols.c delete mode 100644 external/cfitsio/getcolsb.c delete mode 100644 external/cfitsio/getcolui.c delete mode 100644 external/cfitsio/getcoluj.c delete mode 100644 external/cfitsio/getcoluk.c delete mode 100644 external/cfitsio/getkey.c delete mode 100644 external/cfitsio/group.c delete mode 100644 external/cfitsio/group.h delete mode 100644 external/cfitsio/grparser.c delete mode 100644 external/cfitsio/grparser.h delete mode 100644 external/cfitsio/histo.c delete mode 100644 external/cfitsio/imcompress.c delete mode 100644 external/cfitsio/imcopy.c delete mode 100644 external/cfitsio/infback.c delete mode 100644 external/cfitsio/inffast.c delete mode 100644 external/cfitsio/inffast.h delete mode 100644 external/cfitsio/inffixed.h delete mode 100644 external/cfitsio/inflate.c delete mode 100644 external/cfitsio/inflate.h delete mode 100644 external/cfitsio/inftrees.c delete mode 100644 external/cfitsio/inftrees.h delete mode 100644 external/cfitsio/iraffits.c delete mode 100644 external/cfitsio/iter_a.c delete mode 100644 external/cfitsio/iter_a.f delete mode 100644 external/cfitsio/iter_a.fit delete mode 100644 external/cfitsio/iter_b.c delete mode 100644 external/cfitsio/iter_b.f delete mode 100644 external/cfitsio/iter_b.fit delete mode 100644 external/cfitsio/iter_c.c delete mode 100644 external/cfitsio/iter_c.f delete mode 100644 external/cfitsio/iter_c.fit delete mode 100644 external/cfitsio/iter_image.c delete mode 100644 external/cfitsio/iter_var.c delete mode 100644 external/cfitsio/longnam.h delete mode 100644 external/cfitsio/make_dfloat.com delete mode 100644 external/cfitsio/make_gfloat.com delete mode 100644 external/cfitsio/make_ieee.com delete mode 100644 external/cfitsio/makefile.bc delete mode 100644 external/cfitsio/makefile.vcc delete mode 100644 external/cfitsio/makepc.bat delete mode 100644 external/cfitsio/mkpkg delete mode 100644 external/cfitsio/modkey.c delete mode 100644 external/cfitsio/pliocomp.c delete mode 100644 external/cfitsio/putcol.c delete mode 100644 external/cfitsio/putcolb.c delete mode 100644 external/cfitsio/putcold.c delete mode 100644 external/cfitsio/putcole.c delete mode 100644 external/cfitsio/putcoli.c delete mode 100644 external/cfitsio/putcolj.c delete mode 100644 external/cfitsio/putcolk.c delete mode 100644 external/cfitsio/putcoll.c delete mode 100644 external/cfitsio/putcols.c delete mode 100644 external/cfitsio/putcolsb.c delete mode 100644 external/cfitsio/putcolu.c delete mode 100644 external/cfitsio/putcolui.c delete mode 100644 external/cfitsio/putcoluj.c delete mode 100644 external/cfitsio/putcoluk.c delete mode 100644 external/cfitsio/putkey.c delete mode 100644 external/cfitsio/quantize.c delete mode 100644 external/cfitsio/quick.pdf delete mode 100644 external/cfitsio/quick.ps delete mode 100644 external/cfitsio/quick.tex delete mode 100644 external/cfitsio/quick.toc delete mode 100644 external/cfitsio/region.c delete mode 100644 external/cfitsio/region.h delete mode 100644 external/cfitsio/ricecomp.c delete mode 100644 external/cfitsio/sample.tpl delete mode 100644 external/cfitsio/scalnull.c delete mode 100644 external/cfitsio/smem.c delete mode 100644 external/cfitsio/speed.c delete mode 100644 external/cfitsio/swapproc.c delete mode 100644 external/cfitsio/testf77.f delete mode 100644 external/cfitsio/testf77.out delete mode 100644 external/cfitsio/testf77.std delete mode 100644 external/cfitsio/testprog.c delete mode 100644 external/cfitsio/testprog.out delete mode 100644 external/cfitsio/testprog.std delete mode 100644 external/cfitsio/testprog.tpt delete mode 100644 external/cfitsio/trees.c delete mode 100644 external/cfitsio/trees.h delete mode 100644 external/cfitsio/uncompr.c delete mode 100644 external/cfitsio/vmsieee.c delete mode 100644 external/cfitsio/vmsieeed.mar delete mode 100644 external/cfitsio/vmsieeer.mar delete mode 100644 external/cfitsio/wcssub.c delete mode 100644 external/cfitsio/wcsutil.c delete mode 100644 external/cfitsio/winDumpExts.mak delete mode 100644 external/cfitsio/windumpexts.c delete mode 100644 external/cfitsio/zcompress.c delete mode 100644 external/cfitsio/zconf.h delete mode 100644 external/cfitsio/zlib.h delete mode 100644 external/cfitsio/zuncompress.c delete mode 100644 external/cfitsio/zutil.c delete mode 100644 external/cfitsio/zutil.h create mode 100644 external/configure_healpix.cmake delete mode 100644 external/cosmotool/.gitignore delete mode 100644 external/cosmotool/CMakeLists.txt delete mode 100644 external/cosmotool/FindNumPy.cmake delete mode 100644 external/cosmotool/FindPyLibs.cmake delete mode 100644 external/cosmotool/GetGitRevisionDescription.cmake delete mode 100644 external/cosmotool/GetGitRevisionDescription.cmake.in delete mode 100644 external/cosmotool/LICENCE_CeCILL_V2 delete mode 100644 external/cosmotool/build_tools/gather_sources.py delete mode 100644 external/cosmotool/color_msg.cmake delete mode 100644 external/cosmotool/doc/make.bat delete mode 100644 external/cosmotool/doc/source/conf.py delete mode 100644 external/cosmotool/doc/source/cpplibrary.rst delete mode 100644 external/cosmotool/doc/source/index.rst delete mode 100644 external/cosmotool/doc/source/intro.rst delete mode 100644 external/cosmotool/doc/source/pythonmodule.rst delete mode 100644 external/cosmotool/external/external_build.cmake delete mode 100644 external/cosmotool/external/libsharp-6077806.tar.gz delete mode 100644 external/cosmotool/external/omptl-20120422.tar.bz2 delete mode 100644 external/cosmotool/external/patch-omptl delete mode 100644 external/cosmotool/python/CMakeLists.txt delete mode 100644 external/cosmotool/python/_cosmo_bispectrum.cpp delete mode 100644 external/cosmotool/python/_cosmo_cic.pyx delete mode 100644 external/cosmotool/python/_cosmo_power.pyx delete mode 100644 external/cosmotool/python/_cosmotool.pyx delete mode 100644 external/cosmotool/python/_fast_interp.pyx delete mode 100644 external/cosmotool/python/_project.pyx delete mode 100644 external/cosmotool/python/copy.pxd delete mode 100644 external/cosmotool/python/cosmotool/__init__.py delete mode 100644 external/cosmotool/python/cosmotool/bispectrum.py delete mode 100644 external/cosmotool/python/cosmotool/borg.py delete mode 100644 external/cosmotool/python/cosmotool/cic.py delete mode 100644 external/cosmotool/python/cosmotool/cl_cic.py delete mode 100644 external/cosmotool/python/cosmotool/config.py.in delete mode 100644 external/cosmotool/python/cosmotool/ctpv.py delete mode 100644 external/cosmotool/python/cosmotool/fftw.py delete mode 100644 external/cosmotool/python/cosmotool/grafic.py delete mode 100644 external/cosmotool/python/cosmotool/simu.py delete mode 100644 external/cosmotool/python/cosmotool/smooth.py delete mode 100644 external/cosmotool/python/cosmotool/timing.py delete mode 100644 external/cosmotool/python/cppHelper.hpp delete mode 100644 external/cosmotool/python/project_tool.hpp delete mode 100644 external/cosmotool/python/safe_gadget.hpp delete mode 100644 external/cosmotool/python_sample/build_2lpt_ksz.py delete mode 100644 external/cosmotool/python_sample/build_2lpt_skymap.py delete mode 100644 external/cosmotool/python_sample/build_dipole_ksz_from_galaxies.py delete mode 100644 external/cosmotool/python_sample/build_nbody_ksz.py delete mode 100644 external/cosmotool/python_sample/build_nbody_ksz_from_galaxies.py delete mode 100644 external/cosmotool/python_sample/build_nbody_skymap.py delete mode 100644 external/cosmotool/python_sample/gen_2lpt_asmooth.py delete mode 100644 external/cosmotool/python_sample/gen_2lpt_density.py delete mode 100644 external/cosmotool/python_sample/icgen/__init__.py delete mode 100644 external/cosmotool/python_sample/icgen/borgadaptor.py delete mode 100644 external/cosmotool/python_sample/icgen/borgicgen.py delete mode 100644 external/cosmotool/python_sample/icgen/cosmogrowth.py delete mode 100644 external/cosmotool/python_sample/icgen/gen_ic_from_borg.py delete mode 100644 external/cosmotool/python_sample/icgen/test_ic_from_borg.py delete mode 100644 external/cosmotool/python_sample/icgen/test_whitify.py delete mode 100644 external/cosmotool/python_sample/ksz/__init__.py delete mode 100644 external/cosmotool/python_sample/ksz/constants.py delete mode 100644 external/cosmotool/python_sample/ksz/gal_prof.py delete mode 100644 external/cosmotool/python_sample/ramsesToArray.py delete mode 100644 external/cosmotool/python_sample/test_bispectrum.py delete mode 100644 external/cosmotool/python_sample/test_spheric_proj.py delete mode 100644 external/cosmotool/sample/CMakeLists.txt delete mode 100644 external/cosmotool/sample/Hartmann_Matrix.txt delete mode 100644 external/cosmotool/sample/gadgetToArray.cpp delete mode 100644 external/cosmotool/sample/gadgetToDensity.cpp delete mode 100644 external/cosmotool/sample/graficToDensity.cpp delete mode 100644 external/cosmotool/sample/simple3DFilter.cpp delete mode 100644 external/cosmotool/sample/simpleDistanceFilter.cpp delete mode 100644 external/cosmotool/sample/testAlgo.cpp delete mode 100644 external/cosmotool/sample/testBQueue.cpp delete mode 100644 external/cosmotool/sample/testBSP.cpp delete mode 100644 external/cosmotool/sample/testDelaunay.cpp delete mode 100644 external/cosmotool/sample/testEskow.cpp delete mode 100644 external/cosmotool/sample/testHDF5.cpp delete mode 100644 external/cosmotool/sample/testInterpolate.cpp delete mode 100644 external/cosmotool/sample/testNewton.cpp delete mode 100644 external/cosmotool/sample/testPool.cpp delete mode 100644 external/cosmotool/sample/testReadFlash.cpp delete mode 100644 external/cosmotool/sample/testSmooth.cpp delete mode 100644 external/cosmotool/sample/test_cosmopower.cpp delete mode 100644 external/cosmotool/sample/test_fft_calls.cpp delete mode 100644 external/cosmotool/sample/test_healpix_calls.cpp delete mode 100644 external/cosmotool/sample/testkd.cpp delete mode 100644 external/cosmotool/sample/testkd2.cpp delete mode 100644 external/cosmotool/sample/testkd3.cpp delete mode 100644 external/cosmotool/src/CMakeLists.txt delete mode 100644 external/cosmotool/src/algo.hpp delete mode 100644 external/cosmotool/src/bqueue.hpp delete mode 100644 external/cosmotool/src/bqueue.tcc delete mode 100644 external/cosmotool/src/bsp_simple.hpp delete mode 100644 external/cosmotool/src/bsp_simple.tcc delete mode 100644 external/cosmotool/src/cic.cpp delete mode 100644 external/cosmotool/src/cic.hpp delete mode 100644 external/cosmotool/src/config.hpp delete mode 100644 external/cosmotool/src/cosmopower.cpp delete mode 100644 external/cosmotool/src/cosmopower.hpp delete mode 100644 external/cosmotool/src/dinterpolate.hpp delete mode 100644 external/cosmotool/src/dinterpolate.tcc delete mode 100644 external/cosmotool/src/eskow.hpp delete mode 100644 external/cosmotool/src/field.hpp delete mode 100644 external/cosmotool/src/fixArray.hpp delete mode 100644 external/cosmotool/src/fortran.cpp delete mode 100644 external/cosmotool/src/fortran.hpp delete mode 100644 external/cosmotool/src/fourier/base_types.hpp delete mode 100644 external/cosmotool/src/fourier/details/euclidian_maps.hpp delete mode 100644 external/cosmotool/src/fourier/details/euclidian_spectrum_1d.hpp delete mode 100644 external/cosmotool/src/fourier/details/euclidian_spectrum_1d_bin.hpp delete mode 100644 external/cosmotool/src/fourier/details/euclidian_transform.hpp delete mode 100644 external/cosmotool/src/fourier/details/healpix_alms.hpp delete mode 100644 external/cosmotool/src/fourier/details/healpix_map.hpp delete mode 100644 external/cosmotool/src/fourier/details/healpix_spectrum.hpp delete mode 100644 external/cosmotool/src/fourier/details/healpix_transform.hpp delete mode 100644 external/cosmotool/src/fourier/details/healpix_utility.hpp delete mode 100644 external/cosmotool/src/fourier/euclidian.hpp delete mode 100644 external/cosmotool/src/fourier/fft/fftw_calls.hpp delete mode 100644 external/cosmotool/src/fourier/fft/fftw_calls_mpi.hpp delete mode 100644 external/cosmotool/src/fourier/fft/fftw_complex.hpp delete mode 100644 external/cosmotool/src/fourier/healpix.hpp delete mode 100644 external/cosmotool/src/growthFactor.cpp delete mode 100644 external/cosmotool/src/growthFactor.hpp delete mode 100644 external/cosmotool/src/h5_readFlash.cpp delete mode 100644 external/cosmotool/src/h5_readFlash.hpp delete mode 100644 external/cosmotool/src/hdf5_array.hpp delete mode 100644 external/cosmotool/src/hdf5_flash.h delete mode 100644 external/cosmotool/src/interpolate.cpp delete mode 100644 external/cosmotool/src/interpolate.hpp delete mode 100644 external/cosmotool/src/interpolate3d.hpp delete mode 100644 external/cosmotool/src/kdtree_leaf.hpp delete mode 100644 external/cosmotool/src/kdtree_leaf.tcc delete mode 100644 external/cosmotool/src/kdtree_splitters.hpp delete mode 100644 external/cosmotool/src/loadFlash.cpp delete mode 100644 external/cosmotool/src/loadFlash.hpp delete mode 100644 external/cosmotool/src/loadFlash_dummy.cpp delete mode 100644 external/cosmotool/src/loadGadget.cpp delete mode 100644 external/cosmotool/src/loadGadget.hpp delete mode 100644 external/cosmotool/src/loadRamses.cpp delete mode 100644 external/cosmotool/src/loadRamses.hpp delete mode 100644 external/cosmotool/src/loadSimu.hpp delete mode 100644 external/cosmotool/src/load_data.cpp delete mode 100644 external/cosmotool/src/load_data.hpp delete mode 100644 external/cosmotool/src/mach.hpp delete mode 100644 external/cosmotool/src/miniargs.cpp delete mode 100644 external/cosmotool/src/miniargs.hpp delete mode 100644 external/cosmotool/src/mykdtree.hpp delete mode 100644 external/cosmotool/src/mykdtree.tcc delete mode 100644 external/cosmotool/src/newton.hpp delete mode 100644 external/cosmotool/src/octTree.hpp delete mode 100644 external/cosmotool/src/octTree.tcc delete mode 100644 external/cosmotool/src/openmp.hpp delete mode 100644 external/cosmotool/src/pool.hpp delete mode 100644 external/cosmotool/src/powerSpectrum.cpp delete mode 100644 external/cosmotool/src/powerSpectrum.hpp delete mode 100644 external/cosmotool/src/replicateGenerator.hpp delete mode 100644 external/cosmotool/src/sparseGrid.hpp delete mode 100644 external/cosmotool/src/sparseGrid.tcc delete mode 100644 external/cosmotool/src/sphSmooth.hpp delete mode 100644 external/cosmotool/src/sphSmooth.tcc delete mode 100644 external/cosmotool/src/symbol_visible.hpp delete mode 100644 external/cosmotool/src/tf_fit.hpp delete mode 100644 external/cosmotool/src/yorick.hpp delete mode 100644 external/cosmotool/src/yorick_nc3.cpp delete mode 100644 external/cosmotool/src/yorick_nc4.cpp delete mode 100644 external/patch_kdtree delete mode 100644 external/python_build.cmake delete mode 100644 external/python_install.cmake mode change 100755 => 100644 python_tools/misc_util/figureOutMask.py create mode 100644 python_tools/vide/__init__.py rename python_tools/{void_python_tools/apTools/chi2 => vide/apTools}/__init__.py (91%) rename python_tools/{void_python_tools/apTools/profiles => vide/apTools/chi2}/__init__.py (91%) rename python_tools/{void_python_tools => vide}/apTools/chi2/cosmologyTools.py (95%) rename python_tools/{void_python_tools/apTools => vide/apTools/profiles}/__init__.py (91%) rename python_tools/{void_python_tools => vide}/apTools/profiles/getSurveyProps.py (92%) rename python_tools/{void_python_tools => vide}/backend/__init__.py (90%) rename python_tools/{void_python_tools => vide}/backend/classes.py (99%) rename python_tools/{void_python_tools => vide}/backend/launchers.py (85%) rename python_tools/{void_python_tools => vide/voidUtil}/__init__.py (82%) rename python_tools/{void_python_tools => vide}/voidUtil/catalogUtil.py (79%) rename python_tools/{void_python_tools => vide}/voidUtil/matchUtil.py (90%) mode change 100755 => 100644 create mode 100644 python_tools/vide/voidUtil/periodic_kdtree.py rename python_tools/{void_python_tools => vide}/voidUtil/plotDefs.py (90%) rename python_tools/{void_python_tools => vide}/voidUtil/plotUtil.py (94%) rename python_tools/{void_python_tools => vide}/voidUtil/profileUtil.py (93%) rename python_tools/{void_python_tools => vide}/voidUtil/xcorUtil.py (84%) rename python_tools/{void_python_tools => vide}/voidUtil/xcorlib.py (80%) create mode 100644 python_tools/void_pipeline/__init__.py rename pipeline/generateCatalog.py => python_tools/void_pipeline/__main__.py (81%) mode change 100755 => 100644 rename {pipeline => python_tools/void_pipeline}/datasets/example_observation.py (84%) rename {pipeline => python_tools/void_pipeline}/datasets/example_simulation.py (92%) delete mode 100644 python_tools/void_python_tools/voidUtil/__init__.py delete mode 100644 run_env.sh.in delete mode 100644 run_python.sh.in create mode 100644 setup.py diff --git a/.gitignore b/.gitignore index 68c9fda..6b6572e 100644 --- a/.gitignore +++ b/.gitignore @@ -148,4 +148,5 @@ zobov/CMakeFiles/ zobov/Makefile zobov/cmake_install.cmake zobov/jozov_persistent - +container/vide_key* +container/id_vide* diff --git a/CMakeLists.txt b/CMakeLists.txt index c638cd9..089d9f9 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1,4 +1,5 @@ -cmake_minimum_required(VERSION 2.8) +cmake_minimum_required(VERSION 3.2) +set(CMAKE_CXX_STANDARD 11) project(zobovPerso) @@ -65,12 +66,22 @@ endmacro(configure_exec) include(${CMAKE_SOURCE_DIR}/external/base_external.cmake) include(${CMAKE_SOURCE_DIR}/external/external_build.cmake) -include(${CMAKE_SOURCE_DIR}/external/external_python_build.cmake) include(${CMAKE_SOURCE_DIR}/external/external_cosmotool.cmake) +include(${CMAKE_SOURCE_DIR}/external/external_python_build.cmake) + +option(INSTALL_PYTHON_LOCAL OFF) +option(INSTALL_CTOOLS_IN_PYTHON OFF) +IF(PYTHON_SITE_PACKAGES) + SET(PYTHON_LOCAL_SITE_PACKAGE ${PYTHON_SITE_PACKAGES}) +ELSE() + IF (INSTALL_PYTHON_LOCAL) + SET(PYTHON_LOCAL_SITE_PACKAGE ${USER_PYTHON_SITE_PACKAGES}) + ELSE() + SET(PYTHON_LOCAL_SITE_PACKAGE ${SYSTEM_PYTHON_SITE_PACKAGES}) + ENDIF() +ENDIF() SET(PYTHONPATH ${PYTHON_LOCAL_SITE_PACKAGE}) -configure_exec(${CMAKE_SOURCE_DIR}/run_python.sh.in ${CMAKE_BINARY_DIR} run_python.sh) -configure_exec(${CMAKE_SOURCE_DIR}/run_env.sh.in ${CMAKE_BINARY_DIR} run_env.sh) configure_exec(${CMAKE_SOURCE_DIR}/python_tools/pipeline_source/prepareInputs.in.py ${CMAKE_BINARY_DIR}/pipeline prepareInputs.py) #configure_exec(${CMAKE_SOURCE_DIR}/python_tools/pipeline_source/applyMaskToMock.in.py @@ -81,12 +92,19 @@ ${CMAKE_BINARY_DIR}/pipeline prepareInputs.py) SET(python_build_environment ${CMAKE_COMMAND} -DPYTHON_LOCAL_SITE_PACKAGE=${PYTHON_LOCAL_SITE_PACKAGE} -DVOID_GSL=${CMAKE_BINARY_DIR}/ext_build/gsl -DPYTHON_EXECUTABLE=${PYTHON_EXECUTABLE} -DTARGET_PATH=${CMAKE_BINARY_DIR}/ext_build/python -P) -add_custom_target(python_pipeline ALL - COMMAND ${python_build_environment} ${CMAKE_SOURCE_DIR}/external/python_build.cmake - COMMAND ${python_build_environment} ${CMAKE_SOURCE_DIR}/external/python_install.cmake - DEPENDS gsl cython netcdf4-python ${PYTHON_AUXILIARY_DEPEND} - WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}/python_tools -) +if (INSTALL_CTOOLS_IN_PYTHON) + SET(VIDE_BIN ${PYTHON_LOCAL_SITE_PACKAGE}/void_python_tools/bin) +else() + SET(VIDE_BIN ${CMAKE_INSTALL_PREFIX}/bin) +endif() +message(STATUS "Vide binary directory: ${VIDE_BIN}") + +#add_custom_target(python_pipeline ALL +# COMMAND ${python_build_environment} ${CMAKE_SOURCE_DIR}/external/python_build.cmake +# COMMAND ${python_build_environment} ${CMAKE_SOURCE_DIR}/external/python_install.cmake +# DEPENDS gsl cython netcdf4-python ${PYTHON_AUXILIARY_DEPEND} +# WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}/python_tools +#) subdirs(zobov c_tools) diff --git a/README b/README.md similarity index 60% rename from README rename to README.md index e028033..904e27e 100644 --- a/README +++ b/README.md @@ -1,58 +1,84 @@ -\ / / |-\ ----- - \ / | | \ | - \ / / | | |-- - \ / | | / | - \/ / |-/ ----- - -*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-* - -This is VIDE, the Void IDentification and Examination toolkit. - -For more information, see http://www.cosmicvoids.net - -Please cite arXiv:1406.1191 and arXiv:0712.0349 if you use this software, -using the following suggested sentence: - -"This work uses voids identified with VIDE\footnote{\url{http:www.cosmicvoids.net}} (Sutter et al. 2014), -which implements an enhanced version of ZOBOV (Neyrinck 2008) to construct -voids with a watershed algorithm." - - -License/Copyright information ------------------------------ - -Copyright (C) 2010-2014 Guilhem Lavaux, 2011-2014 P.M. Sutter. -This software is put under the GNU Public License. -Please see LICENSE for further information. - -Mainline VIDE contributions from Ben Wandelt, Nico Hamaus, Alice Pisani, -Paul Zivick, and Qingqing Mao. -This toolkit includes ZOBOV, originally developed by Mark Neyrinck. -See zobov/zobov_readme.txt for copyright/license information. -SDF library provided by Michael S. Warren and John Salmon. -HOD fitting code provided by Francisco Navarro. -HOD halo population code provided by Jeremy Tinker. -RAMSES module provided by Benjamin B. Thompson. - - -Requirements ------------- - -The package swig needs to be installed and available in the PATH (http://www.swig.org/). It -is required by scipy and we have not decided to bundle it with VIDE at the moment. - - -Quick Start Guide ------------------ - -ccmake ./ -make -add path/to/vide/ext_build/python/lib/python2.7/site-packages/ to PYTHONPATH -cd pipeline/ -./prepareInputs.py --scripts --parm=path/to/dataset.py -./generateCatalog.py path/to/parameter_file.py - -Version Summary ------------------ - -v1.0 - Initial Release +``` +\ / / |-\ ----- + \ / | | \ | + \ / / | | |-- + \ / | | / | + \/ / |-/ ----- + +*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-* +``` + +This is VIDE, the Void IDentification and Examination toolkit. + +For more information, see http://www.cosmicvoids.net + +Please cite arXiv:1406.1191 and arXiv:0712.0349 if you use this software, +using the following suggested sentence: + +"This work uses voids identified with VIDE\footnote{\url{http:www.cosmicvoids.net}} (Sutter et al. 2014), +which implements an enhanced version of ZOBOV (Neyrinck 2008) to construct +voids with a watershed algorithm." + + +License/Copyright information +----------------------------- + +Copyright (C) 2010-2020 Guilhem Lavaux, 2011-2014 P.M. Sutter. +This software is put under the GNU Public License. +Please see LICENSE for further information. + +Mainline VIDE contributions from Ben Wandelt, Nico Hamaus, Alice Pisani, +Paul Zivick, and Qingqing Mao. +This toolkit includes ZOBOV, originally developed by Mark Neyrinck. +See `zobov/zobov_readme.txt` for copyright/license information. +SDF library provided by Michael S. Warren and John Salmon. +HOD fitting code provided by Francisco Navarro. +HOD halo population code provided by Jeremy Tinker. +RAMSES module provided by Benjamin B. Thompson. + + +Requirements +------------ + +The package swig needs to be installed and available in the PATH (http://www.swig.org/). It +is required by scipy and we have not decided to bundle it with VIDE at the moment. + + +Quick Start Guide +----------------- + +After installing the package with `python3 setup.py install --user`, you can execute + +``` +python3 -m void_pipeline your_config_file.py +``` + +The VIDE tools are all packaged in the `vide` package. + + + +Notes for CONDA +--------------- + + +If you use a conda installation, you have to be sure to use all the building tools that +are consistent. On linux that means for example installing the conda packages `gcc_linux-64` + and `gxx_linux-64`. In addition to that it is recommended to define the environment variable +`LIBRARY_PATH=the_path_of_your_conda_environment_with_/lib`. For example if your environment +is in '/home/user/conda' you should define + +``` +export LIBRARY_PATH=/home/user/conda/lib +``` + +You can then initiate the construction with + +``` +python3 setup.py build +``` + +Version Summary +----------------- + +v1.0 - Initial Release +v2.0 - Ported to python3, revisited build system diff --git a/build_tools/gather_sources.py b/build_tools/gather_sources.py index f4464bd..300b8bc 100644 --- a/build_tools/gather_sources.py +++ b/build_tools/gather_sources.py @@ -25,14 +25,12 @@ from git import Repo,Tree,Blob def apply_license(license, relimit, filename): header = re.sub(r'@FILENAME@', filename, license) - f = file(filename) - lines = f.read() - f.close() + with open(filename) as f: + lines = f.read() - lines = re.sub(relimit, '', lines) - lines = header + lines + lines = re.sub(relimit, lambda x: (("" if x.group(1) is None else x.group(1)) + header), lines) - with tempfile.NamedTemporaryFile(delete=False) as tmp_sources: + with tempfile.NamedTemporaryFile(delete=False, mode="wt", encoding="UTF-8") as tmp_sources: tmp_sources.write(lines) shutil.move(tmp_sources.name, filename) @@ -61,7 +59,7 @@ def apply_python_license(filename): """ print("Shell/Python file: %s" % filename) - relimit=r'^#\+\n(#.*\n)*#\+\n' + relimit=r'^(#!.*\n)?#\+\n(#.*\n)*#\+\n' apply_license(license, relimit, filename) @@ -85,8 +83,8 @@ def apply_cpp_license(filename): 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. +*/ """ - relimit = r'^(?s)/\*\+.*\+\*/\n' print("C++ file: %s" % filename) + relimit = r'(?s)^()/\*\+.*\+\*/\n' apply_license(license, relimit, filename) @@ -107,6 +105,11 @@ def analyze_tree(prefix, t): if __name__=="__main__": + import sys + if len(sys.argv) >= 2: + apply_python_license(sys.argv[1]) + sys.exit(0) + repo = Repo(".") assert repo.bare == False t = repo.tree() diff --git a/c_tools/CMakeLists.txt b/c_tools/CMakeLists.txt index dcb353e..9247018 100644 --- a/c_tools/CMakeLists.txt +++ b/c_tools/CMakeLists.txt @@ -30,10 +30,6 @@ ELSE (CAIROMMCONFIG_INCLUDE_PATH AND CAIROMM_INCLUDE_PATH AND SIGC_INCLUDE_PATH ENDIF (CAIROMMCONFIG_INCLUDE_PATH AND CAIROMM_INCLUDE_PATH AND SIGC_INCLUDE_PATH AND SIGCCONFIG_INCLUDE_PATH AND CAIRO_INCLUDE_PATH AND FREETYPE_INCLUDE_PATH AND CAIROMM_LIB) -SET(ZOB_LIBS zobovTool - ${COSMOTOOL_LIBRARY} ${GSL_LIBRARIES} - ${NETCDF_LIBRARIES} ${DL_LIB}) - include_directories( ${QHULL_INCLUDES} @@ -41,6 +37,8 @@ include_directories( ${CMAKE_CURRENT_BINARY_DIR} ${CMAKE_CURRENT_SOURCE_DIR}/libzobov) +SET(ZOB_LIBS zobovTool) + set(computeAverageDistortion_SRCS computeAverageDistortion.cpp) add_genopt(computeAverageDistortion_SRCS computeAverageDistortion.ggo computeAverageDistortion_conf STRUCTNAME Params) diff --git a/c_tools/analysis/CMakeLists.txt b/c_tools/analysis/CMakeLists.txt index 4fd2153..202b97f 100644 --- a/c_tools/analysis/CMakeLists.txt +++ b/c_tools/analysis/CMakeLists.txt @@ -4,3 +4,5 @@ SET(voidOverlap_SRCS voidOverlap.cpp) add_genopt(voidOverlap_SRCS voidOverlap.ggo voidOverlap_conf STRUCTNAME voidOverlap_info) add_executable(voidOverlap ${voidOverlap_SRCS}) target_link_libraries(voidOverlap ${ZOB_LIBS}) + +install(TARGETS voidOverlap DESTINATION ${VIDE_BIN}) diff --git a/c_tools/analysis/voidOverlap.cpp b/c_tools/analysis/voidOverlap.cpp index d96f75e..9e51598 100644 --- a/c_tools/analysis/voidOverlap.cpp +++ b/c_tools/analysis/voidOverlap.cpp @@ -36,7 +36,7 @@ #include #include "voidOverlap_conf.h" #include -#include +#include #include #include #include @@ -546,13 +546,13 @@ void loadCatalog(const char *partFile, const char *volFile, float ranges[3][2]; printf("Loading info...\n"); - NcFile f_info(infoFile); - ranges[0][0] = f_info.get_att("range_x_min")->as_double(0); - ranges[0][1] = f_info.get_att("range_x_max")->as_double(0); - ranges[1][0] = f_info.get_att("range_y_min")->as_double(0); - ranges[1][1] = f_info.get_att("range_y_max")->as_double(0); - ranges[2][0] = f_info.get_att("range_z_min")->as_double(0); - ranges[2][1] = f_info.get_att("range_z_max")->as_double(0); + netCDF::NcFile f_info(infoFile, netCDF::NcFile::read); + f_info.getAtt("range_x_min").getValues(&ranges[0][0]); + f_info.getAtt("range_x_max").getValues(&ranges[0][1]); + f_info.getAtt("range_y_min").getValues(&ranges[1][0]); + f_info.getAtt("range_y_max").getValues(&ranges[1][1]); + f_info.getAtt("range_z_min").getValues(&ranges[2][0]); + f_info.getAtt("range_z_max").getValues(&ranges[2][1]); catalog.boxLen[0] = ranges[0][1] - ranges[0][0]; catalog.boxLen[1] = ranges[1][1] - ranges[1][0]; diff --git a/c_tools/hod/CMakeLists.txt b/c_tools/hod/CMakeLists.txt index 9931729..f3ce28f 100644 --- a/c_tools/hod/CMakeLists.txt +++ b/c_tools/hod/CMakeLists.txt @@ -26,3 +26,4 @@ SET(hod_SRCS header.c main.c utility.c sigmac.c ) add_executable(hod ${hod_SRCS}) target_link_libraries(hod -lm) +install(TARGETS hod DESTINATION ${VIDE_BIN}) diff --git a/c_tools/hod/header.c b/c_tools/hod/header.c index c911069..2550bd4 100644 --- a/c_tools/hod/header.c +++ b/c_tools/hod/header.c @@ -94,3 +94,4 @@ struct perform_tasks Task; struct workspace Work; struct COLOR_DATA wp_color; struct m2n_workspace M2N; +struct WP wp; diff --git a/c_tools/hod/header.h b/c_tools/hod/header.h index b20a72c..5a66a3a 100644 --- a/c_tools/hod/header.h +++ b/c_tools/hod/header.h @@ -371,7 +371,7 @@ extern struct hod_parameters { /* Structure to keep information/data about fitting * color-defined samples. */ -struct COLOR_DATA { +extern struct COLOR_DATA { int ON; double ngal_red; double ngal_blue; @@ -383,8 +383,7 @@ struct COLOR_DATA { double *e_red,*e_blue,*e_full; double *x_red,*x_blue,*x_full; double **covar_red, **covar_blue, **covar_full; -} wp_color; - +}; /* This is to put the work done in xi_multipoles into * a global space. @@ -530,7 +529,7 @@ extern struct perform_tasks { /* Workspace for w_p minimzation. */ -struct WP { +extern struct WP { double **covar; int np; int ncf; diff --git a/c_tools/libzobov/CMakeLists.txt b/c_tools/libzobov/CMakeLists.txt index ead0a51..452fc5b 100644 --- a/c_tools/libzobov/CMakeLists.txt +++ b/c_tools/libzobov/CMakeLists.txt @@ -2,7 +2,4 @@ add_library(zobovTool loadZobov.cpp particleInfo.cpp contour_pixels.cpp) set_target_properties(zobovTool PROPERTIES COMPILE_FLAGS ${OpenMP_CXX_FLAGS} LINK_FLAGS ${OpenMP_CXX_FLAGS}) - -SET(ZOB_LIBS zobovTool ${COSMOTOOL_LIBRARY} ${GSL_LIBRARY} ${GSLCBLAS_LIBRARY} ${NETCDFCPP_LIBRARY} ${NETCDF_LIBRARY}) -SET(ZOB_LIBS PARENT ${ZOB_LIBS}) - +target_link_libraries(zobovTool ${COSMOTOOL_LIBRARY} ${GSL_LIBRARIES} ${NETCDF_LIBRARIES} ${HDF5_CXX_LIBRARIES} ${HDF5_HL_LIBRARIES} ${HDF5_LIBRARIES} ${DL_LIBRARY}) diff --git a/c_tools/libzobov/particleInfo.cpp b/c_tools/libzobov/particleInfo.cpp index 398209e..b59bf67 100644 --- a/c_tools/libzobov/particleInfo.cpp +++ b/c_tools/libzobov/particleInfo.cpp @@ -17,118 +17,121 @@ 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. +*/ - - -#include -#include -#include #include "particleInfo.hpp" +#include +#include +#include + using namespace std; using namespace CosmoTool; +using namespace netCDF; -template -double retrieve_attr_safe_double(NcFile& f, const char *name, double defval) -{ - NcAtt *a = f.get_att(name); - if (a == 0) - { - if (failure) - abort(); - return defval; - } - return a->as_double(0); +template +double retrieve_attr_safe_double(NcFile& f, const char* name, double defval) { + NcGroupAtt a = f.getAtt(name); + if (a.isNull()) { + if (failure) abort(); + return defval; + } + if (a.getAttLength() != 1) { + abort(); + } + double x; + a.getValues(&x); + return x; } -template -int retrieve_attr_safe_int(NcFile& f, const char *name, int defval) -{ - NcAtt *a = f.get_att(name); - if (a == 0) - { - if (failure) - abort(); - return defval; - } - return a->as_int(0); +template +int retrieve_attr_safe_int(NcFile& f, const char* name, int defval) { + NcGroupAtt a = f.getAtt(name); + if (a.isNull()) { + if (failure) abort(); + return defval; + } + if (a.getAttLength() != 1) { + abort(); + } + int x; + a.getValues(&x); + return x; } - +bool loadParticleInfo(ParticleInfo& info, const std::string& particles, + const std::string& extra_info) { + int numpart; + int isObservation; -bool loadParticleInfo(ParticleInfo& info, - const std::string& particles, - const std::string& extra_info) -{ - int numpart; - int isObservation; + try { + NcFile f_info(extra_info, NcFile::read); - NcFile f_info(extra_info.c_str()); - NcError nerr(NcError::verbose_nonfatal); - - if (!f_info.is_valid()) - return false; + info.ranges[0][0] = + retrieve_attr_safe_double(f_info, "range_x_min", 0); + info.ranges[0][1] = + retrieve_attr_safe_double(f_info, "range_x_max", 0); + info.ranges[1][0] = + retrieve_attr_safe_double(f_info, "range_y_min", 0); + info.ranges[1][1] = + retrieve_attr_safe_double(f_info, "range_y_max", 0); + info.ranges[2][0] = + retrieve_attr_safe_double(f_info, "range_z_min", 0); + info.ranges[2][1] = + retrieve_attr_safe_double(f_info, "range_z_max", 0); + info.mask_index = retrieve_attr_safe_int(f_info, "mask_index", 0); + isObservation = retrieve_attr_safe_int(f_info, "is_observation", 0); - info.ranges[0][0] = retrieve_attr_safe_double(f_info, "range_x_min", 0); - info.ranges[0][1] = retrieve_attr_safe_double(f_info, "range_x_max", 0); - info.ranges[1][0] = retrieve_attr_safe_double(f_info, "range_y_min", 0); - info.ranges[1][1] = retrieve_attr_safe_double(f_info, "range_y_max", 0); - info.ranges[2][0] = retrieve_attr_safe_double(f_info, "range_z_min", 0); - info.ranges[2][1] = retrieve_attr_safe_double(f_info, "range_z_max", 0); - info.mask_index = retrieve_attr_safe_int(f_info, "mask_index", 0); - isObservation = retrieve_attr_safe_int(f_info, "is_observation", 0); + for (int i = 0; i < 3; i++) + info.length[i] = info.ranges[i][1] - info.ranges[i][0]; - for (int i = 0; i < 3; i++) - info.length[i] = info.ranges[i][1] - info.ranges[i][0]; - - try - { + try { UnformattedRead f(particles); float mul, offset; - + f.beginCheckpoint(); numpart = f.readInt32(); f.endCheckpoint(); - + info.particles.resize(numpart); - + offset = info.ranges[0][0]; // TEST PMS NON-COBIC BOXES - //mul = 1.0; + // mul = 1.0; mul = info.ranges[0][1] - info.ranges[0][0]; f.beginCheckpoint(); for (int i = 0; i < numpart; i++) - info.particles[i].x = mul*f.readReal32(); + info.particles[i].x = mul * f.readReal32(); f.endCheckpoint(); - + offset = info.ranges[1][0]; - //mul = 1.0; + // mul = 1.0; mul = info.ranges[1][1] - info.ranges[1][0]; f.beginCheckpoint(); for (int i = 0; i < numpart; i++) - info.particles[i].y = mul*f.readReal32(); + info.particles[i].y = mul * f.readReal32(); f.endCheckpoint(); - + offset = info.ranges[2][0]; - //mul = 1.0; + // mul = 1.0; mul = info.ranges[2][1] - info.ranges[2][0]; f.beginCheckpoint(); for (int i = 0; i < numpart; i++) - info.particles[i].z = mul*f.readReal32(); + info.particles[i].z = mul * f.readReal32(); f.endCheckpoint(); if (!isObservation) { for (int i = 0; i < numpart; i++) { - info.particles[i].x += info.ranges[0][0]; - info.particles[i].y += info.ranges[1][0]; - info.particles[i].z += info.ranges[2][0]; + info.particles[i].x += info.ranges[0][0]; + info.particles[i].y += info.ranges[1][0]; + info.particles[i].z += info.ranges[2][0]; } } - } - catch (const NoSuchFileException& e) - { + } catch (NoSuchFileException const& e) { return false; } + } catch (exceptions::NcCantRead const&) { + return false; + } return true; } diff --git a/c_tools/mock/CMakeLists.txt b/c_tools/mock/CMakeLists.txt index 8761175..a5d25d2 100644 --- a/c_tools/mock/CMakeLists.txt +++ b/c_tools/mock/CMakeLists.txt @@ -7,7 +7,7 @@ ENDIF(SDF_SUPPORT) SET(generateMock_SRCS generateMock.cpp ) add_genopt(generateMock_SRCS generateMock.ggo generateMock_conf STRUCTNAME generateMock_info) add_executable(generateMock ${generateMock_SRCS}) -target_link_libraries(generateMock simu_loaders ${ZOB_LIBS} ${HDF5HL_CPP_LIBRARY} ${HDF5_CPP_LIBRARY} ${HDF5_LIBRARY} ${LIBSDF_LIBRARY}) +target_link_libraries(generateMock simu_loaders ${ZOB_LIBS} ${LIBSDF_LIBRARY} ${HDF5_CXX_LIBRARIES} ${HDF5_HL_LIBRARIES} ${HDF5_LIBRARIES} ${DL_LIBRARY}) add_executable(generateTestMock generateTestMock.cpp) target_link_libraries(generateTestMock ${ZOB_LIBS}) @@ -16,8 +16,11 @@ target_link_libraries(generateTestMock ${ZOB_LIBS}) SET(generateFromCatalog_SRCS generateFromCatalog.cpp) add_genopt(generateFromCatalog_SRCS generateFromCatalog.ggo generateFromCatalog_conf STRUCTNAME generateFromCatalog_info) add_executable(generateFromCatalog ${generateFromCatalog_SRCS}) -target_link_libraries(generateFromCatalog ${ZOB_LIBS} ${HDF5HL_CPP_LIBRARY} ${HDF5_CPP_LIBRARY} ${HEALPIX_LIBRARIES}) +target_link_libraries(generateFromCatalog ${ZOB_LIBS} ${HDF5_CXX_LIBRARIES} ${HDF5_HL_LIBRARIES} ${HDF5_LIBRARIES} ${HEALPIX_LIBRARIES} ${DL_LIBRARY}) set_target_properties(generateFromCatalog PROPERTIES COMPILE_FLAGS ${OpenMP_CXX_FLAGS} LINK_FLAGS ${OpenMP_CXX_FLAGS}) subdirs(loaders) + +install(TARGETS generateMock generateTestMock generateFromCatalog DESTINATION ${VIDE_BIN}) + diff --git a/c_tools/mock/generateFromCatalog.cpp b/c_tools/mock/generateFromCatalog.cpp index d95311d..b98a18c 100644 --- a/c_tools/mock/generateFromCatalog.cpp +++ b/c_tools/mock/generateFromCatalog.cpp @@ -28,7 +28,7 @@ #include #include "generateFromCatalog_conf.h" #include "contour_pixels.hpp" -#include +#include #include #include #include @@ -38,6 +38,7 @@ using namespace std; using boost::format; using namespace CosmoTool; +using namespace netCDF; struct NYU_Data { @@ -457,13 +458,11 @@ void generateSurfaceMask(generateFromCatalog_info& args , void saveData(ParticleData& pdata) { - NcFile f("particles.nc", NcFile::Replace); - - assert(f.is_valid()); + NcFile f("particles.nc", NcFile::replace); - NcDim *d = f.add_dim("space", 3); - NcDim *p = f.add_dim("Np", pdata.pos.size()); - NcVar *v = f.add_var("particles", ncDouble, d, p); + NcDim d = f.addDim("space", 3); + NcDim p = f.addDim("Np", pdata.pos.size()); + NcVar v = f.addVar("particles", ncDouble, {d, p}); double *x = new double[pdata.pos.size()]; for (int j = 0; j < 3; j++) @@ -472,11 +471,11 @@ void saveData(ParticleData& pdata) for (int i = 0; i < pdata.pos.size(); i++) x[i] = pdata.pos[i].xyz[j]; - v->put_rec(d, x, j); + v.putVar({size_t(j), 0}, {1, pdata.pos.size()}, x); } - v = f.add_var("id_gal", ncInt, p); - v->put(&pdata.id_gal[0], pdata.id_gal.size()); + v = f.addVar("id_gal", ncInt, std::vector({p})); + v.putVar(&pdata.id_gal[0]); delete[] x; @@ -533,30 +532,30 @@ void saveForZobov(ParticleData& pdata, const string& fname, const string& paramn } f.endCheckpoint(); - NcFile fp(paramname.c_str(), NcFile::Replace); + NcFile fp(paramname.c_str(), NcFile::replace); - fp.add_att("range_x_min", -Lmax/100.); - fp.add_att("range_x_max", Lmax/100.); - fp.add_att("range_y_min", -Lmax/100.); - fp.add_att("range_y_max", Lmax/100.); - fp.add_att("range_z_min", -Lmax/100.); - fp.add_att("range_z_max", Lmax/100.); - fp.add_att("mask_index", pdata.mask_index); // PMS - fp.add_att("is_observation", 1); // PMS + fp.putAtt("range_x_min", ncDouble, -Lmax/100.); + fp.putAtt("range_x_max", ncDouble, Lmax/100.); + fp.putAtt("range_y_min", ncDouble, -Lmax/100.); + fp.putAtt("range_y_max", ncDouble, Lmax/100.); + fp.putAtt("range_z_min", ncDouble, -Lmax/100.); + fp.putAtt("range_z_max", ncDouble, Lmax/100.); + fp.putAtt("mask_index", ncInt, pdata.mask_index); // PMS + fp.putAtt("is_observation", ncInt, 1); // PMS int nOutputPart = pdata.mask_index; //int nOutputPart = pdata.pos.size(); - NcDim *NumPart_dim = fp.add_dim("numpart_dim", nOutputPart); - NcVar *v = fp.add_var("particle_ids", ncInt, NumPart_dim); - //NcVar *v2 = fp.add_var("expansion", ncDouble, NumPart_dim); + NcDim NumPart_dim = fp.addDim("numpart_dim", nOutputPart); + NcVar v = fp.addVar("particle_ids", ncInt, NumPart_dim); + //NcVar v2 = fp.addVar("expansion", ncDouble, NumPart_dim); //double *expansion_fac = new double[pdata.pos.size()]; //for (int i = 0; i < pdata.pos.size(); i++) // expansion_fac[i] = 1.0; - v->put(&pdata.id_gal[0], nOutputPart); + v.putVar({0}, {size_t(nOutputPart)}, &pdata.id_gal[0]); //v2->put(expansion_fac, pdata.pos.size()); //delete[] expansion_fac; diff --git a/c_tools/mock/generateMock.cpp b/c_tools/mock/generateMock.cpp index e5d525d..4c59f88 100644 --- a/c_tools/mock/generateMock.cpp +++ b/c_tools/mock/generateMock.cpp @@ -36,12 +36,13 @@ #include #include "generateMock_conf.h" #include "gslIntegrate.hpp" -#include +#include #include "simulation_loader.hpp" using namespace std; using namespace CosmoTool; using boost::format; +using namespace netCDF; #define LIGHT_SPEED 299792.458 @@ -426,7 +427,7 @@ void buildBox(SimuData *simu, long num_targets, long loaded, void saveBox(SimuData *&boxed, const std::string& outbox, generateMock_info& args_info) { double *ranges = boxed->as("ranges"); - NcFile f(outbox.c_str(), NcFile::Replace, 0, 0, NcFile::Netcdf4); + NcFile f(outbox.c_str(), NcFile::replace); long *particle_id = boxed->as("particle_id"); double *expansion_fac = boxed->as("expansion_fac"); long *snapshot_split = boxed->as("snapshot_split"); @@ -436,56 +437,51 @@ void saveBox(SimuData *&boxed, const std::string& outbox, generateMock_info& arg float *velY = boxed->Vel[1]; float *velZ = boxed->Vel[2]; - if (!f.is_valid()) - { - cerr << "Could not create parameter file '" << outbox << "'. Aborting." << endl; - exit(1); - } - f.add_att("range_x_min", ranges[0]); - f.add_att("range_x_max", ranges[1]); - f.add_att("range_y_min", ranges[2]); - f.add_att("range_y_max", ranges[3]); - f.add_att("range_z_min", ranges[4]); - f.add_att("range_z_max", ranges[5]); - f.add_att("mask_index", -1); - f.add_att("is_observation", 0); - f.add_att("data_subsampling", args_info.subsample_arg); + f.putAtt("range_x_min", ncDouble, ranges[0]); + f.putAtt("range_x_max", ncDouble, ranges[1]); + f.putAtt("range_y_min", ncDouble, ranges[2]); + f.putAtt("range_y_max", ncDouble, ranges[3]); + f.putAtt("range_z_min", ncDouble, ranges[4]); + f.putAtt("range_z_max", ncDouble, ranges[5]); + f.putAtt("mask_index", ncInt, -1); + f.putAtt("is_observation", ncInt, 0); + f.putAtt("data_subsampling", ncInt, args_info.subsample_arg); - NcDim *NumPart_dim = f.add_dim("numpart_dim", boxed->NumPart); - NcDim *NumSnap_dim = f.add_dim("numsnap_dim", num_snapshots); - NcVar *v = f.add_var("particle_ids", ncLong, NumPart_dim); - NcVar *v2 = f.add_var("expansion", ncDouble, NumPart_dim); - NcVar *v3 = f.add_var("snapshot_split", ncLong, NumSnap_dim); + NcDim NumPart_dim = f.addDim("numpart_dim", boxed->NumPart); + NcDim NumSnap_dim = f.addDim("numsnap_dim", num_snapshots); + NcVar v = f.addVar("particle_ids", ncInt64, NumPart_dim); + NcVar v2 = f.addVar("expansion", ncDouble, NumPart_dim); + NcVar v3 = f.addVar("snapshot_split", ncInt64, NumSnap_dim); - v->put(particle_id, boxed->NumPart); - v2->put(expansion_fac, boxed->NumPart); - v3->put(snapshot_split, num_snapshots); + v.putVar({0}, {size_t(boxed->NumPart)}, particle_id); + v2.putVar({0}, {size_t(boxed->NumPart)}, expansion_fac); + v3.putVar({0}, {size_t(boxed->NumPart)}, snapshot_split); if (uniqueID != 0) { - NcVar *v4 = f.add_var("unique_ids_lsb", ncLong, NumPart_dim); - NcVar *v5 = f.add_var("unique_ids_msb", ncLong, NumPart_dim); + NcVar v4 = f.addVar("unique_ids_lsb", ncInt, NumPart_dim); + NcVar v5 = f.addVar("unique_ids_msb", ncInt, NumPart_dim); nclong *tmp_int = new nclong[boxed->NumPart]; for (long i = 0; i < boxed->NumPart; i++) tmp_int[i] = (nclong)(((unsigned long)uniqueID[i]) & 0xffffffff); - v4->put(tmp_int, boxed->NumPart); + v4.putVar({0}, {size_t(boxed->NumPart)}, tmp_int); for (long i = 0; i < boxed->NumPart; i++) tmp_int[i] = (nclong)((((unsigned long)uniqueID[i]) & 0xffffffff) >> 32); - v5->put(tmp_int, boxed->NumPart); + v5.putVar({0}, {size_t(boxed->NumPart)}, tmp_int); delete[] tmp_int; } - NcVar *v6 = f.add_var("vel_x", ncFloat, NumPart_dim); - NcVar *v7 = f.add_var("vel_y", ncFloat, NumPart_dim); - NcVar *v8 = f.add_var("vel_z", ncFloat, NumPart_dim); - v6->put(velX, boxed->NumPart); - v7->put(velY, boxed->NumPart); - v8->put(velZ, boxed->NumPart); + NcVar v6 = f.addVar("vel_x", ncFloat, NumPart_dim); + NcVar v7 = f.addVar("vel_y", ncFloat, NumPart_dim); + NcVar v8 = f.addVar("vel_z", ncFloat, NumPart_dim); + v6.putVar({0}, {size_t(boxed->NumPart)}, velX); + v7.putVar({0}, {size_t(boxed->NumPart)}, velY); + v8.putVar({0}, {size_t(boxed->NumPart)}, velZ); } void makeBoxFromParameter(SimuData *simu, SimuData* &boxed, generateMock_info& args_info) { - NcFile f(args_info.inputParameter_arg); + NcFile f(args_info.inputParameter_arg, NcFile::read); NcVar *v; long *particle_id; double *expansion_fac; @@ -500,29 +496,32 @@ void makeBoxFromParameter(SimuData *simu, SimuData* &boxed, generateMock_info& a boxed->time = simu->time; boxed->BoxSize = simu->BoxSize; - NcAtt *d_sub = f.get_att("data_subsampling"); - if (d_sub == 0 || d_sub->as_double(0)/args_info.subsample_arg-1. > 1.e-5) + NcGroupAtt d_sub = f.getAtt("data_subsampling"); + auto checkAtt = [&args_info](NcGroupAtt a) { + if (a.isNull()) + return true; + double subsampling; + a.getValues(&subsampling); + return subsampling/args_info.subsample_arg - 1 > 1e-5; + }; + if (checkAtt(d_sub)) { - cerr << "Parameter file was not generated with the same simulation subsampling argument. Particles will be different. Stop here." << d_sub->as_double(0) << " " << args_info.subsample_arg <edges(); - dim_snap = v_snap->edges(); - assert(v_id->num_dims()==1); - assert(v_snap->num_dims()==1); + std::vector edges1 = v_id.getDims(); + std::vector dim_snap = v_snap.getDims(); + assert(edges1.size()==1); + assert(dim_snap.size()==1); - boxed->NumPart = edges1[0]; - *num_snapshots = dim_snap[0]; - delete[] dim_snap; - delete[] edges1; + boxed->NumPart = edges1[0].getSize(); + *num_snapshots = dim_snap[0].getSize(); particle_id = new long[boxed->NumPart]; uniqueID = new long[boxed->NumPart]; @@ -540,15 +539,15 @@ void makeBoxFromParameter(SimuData *simu, SimuData* &boxed, generateMock_info& a boxed->new_attribute("snapshot_split", snapshot_split, delete_adaptor); boxed->new_attribute("expansion_fac", expansion_fac, delete_adaptor); - v_id->get(particle_id, boxed->NumPart); - v_snap->get(snapshot_split, *num_snapshots); + v_id.getVar(particle_id); + v_snap.getVar(snapshot_split); - ranges[0] = f.get_att("range_x_min")->as_double(0); - ranges[1] = f.get_att("range_x_max")->as_double(0); - ranges[2] = f.get_att("range_y_min")->as_double(0); - ranges[3] = f.get_att("range_y_max")->as_double(0); - ranges[4] = f.get_att("range_z_min")->as_double(0); - ranges[5] = f.get_att("range_z_max")->as_double(0); + f.getAtt("range_x_min").getValues(&ranges[0]); + f.getAtt("range_x_max").getValues(&ranges[1]); + f.getAtt("range_y_min").getValues(&ranges[2]); + f.getAtt("range_y_max").getValues(&ranges[3]); + f.getAtt("range_z_min").getValues(&ranges[4]); + f.getAtt("range_z_max").getValues(&ranges[5]); for (int j = 0; j < 3; j++) { @@ -559,17 +558,17 @@ void makeBoxFromParameter(SimuData *simu, SimuData* &boxed, generateMock_info& a } uint32_t k = 0; - NcVar *v_uniq_lsb = f.get_var("unique_ids_lsb"); - NcVar *v_uniq_msb = f.get_var("unique_ids_lsb"); + NcVar v_uniq_lsb = f.getVar("unique_ids_lsb"); + NcVar v_uniq_msb = f.getVar("unique_ids_lsb"); nclong *tmp_int; tmp_int = new nclong[boxed->NumPart]; - v_uniq_lsb->get(tmp_int, boxed->NumPart); + v_uniq_lsb.getVar(tmp_int); for (long i = 0; i < boxed->NumPart; i++) uniqueID[i] = tmp_int[i]; - v_uniq_msb->get(tmp_int, boxed->NumPart); + v_uniq_msb.getVar(tmp_int); for (long i = 0; i < boxed->NumPart; i++) uniqueID[i] |= (unsigned long)(tmp_int[i]) << 32; diff --git a/c_tools/stacking/CMakeLists.txt b/c_tools/stacking/CMakeLists.txt index 27ec89a..5f40f75 100644 --- a/c_tools/stacking/CMakeLists.txt +++ b/c_tools/stacking/CMakeLists.txt @@ -37,3 +37,5 @@ target_link_libraries(pruneVoids ${ZOB_LIBS}) #add_genopt(makeAHFOutput_SRCS makeAHFOutput.ggo makeAHFOutput_conf STRUCTNAME makeAHFOutput_info) #add_executable(makeAHFOutput ${makeAHFOutput_SRCS}) #target_link_libraries(makeAHFOutput ${ZOB_LIBS}) + +install(TARGETS pruneVoids DESTINATION ${VIDE_BIN}) diff --git a/c_tools/stacking/pruneVoids.cpp b/c_tools/stacking/pruneVoids.cpp index ba5cddf..a6ca383 100644 --- a/c_tools/stacking/pruneVoids.cpp +++ b/c_tools/stacking/pruneVoids.cpp @@ -37,7 +37,7 @@ #include "stdlib.h" #include #include -#include +#include #include "pruneVoids_conf.h" #include #include "assert.h" @@ -243,13 +243,13 @@ int main(int argc, char **argv) { // load box size printf("\n Getting info...\n"); - NcFile f_info(args.extraInfo_arg); - ranges[0][0] = f_info.get_att("range_x_min")->as_double(0); - ranges[0][1] = f_info.get_att("range_x_max")->as_double(0); - ranges[1][0] = f_info.get_att("range_y_min")->as_double(0); - ranges[1][1] = f_info.get_att("range_y_max")->as_double(0); - ranges[2][0] = f_info.get_att("range_z_min")->as_double(0); - ranges[2][1] = f_info.get_att("range_z_max")->as_double(0); + netCDF::NcFile f_info(args.extraInfo_arg, netCDF::NcFile::read); + f_info.getAtt("range_x_min").getValues(&ranges[0][0]); + f_info.getAtt("range_x_max").getValues(&ranges[0][1]); + f_info.getAtt("range_y_min").getValues(&ranges[1][0]); + f_info.getAtt("range_y_max").getValues(&ranges[1][1]); + f_info.getAtt("range_z_min").getValues(&ranges[2][0]); + f_info.getAtt("range_z_max").getValues(&ranges[2][1]); printf(" Range xmin %e\n", ranges[0][0]); printf(" Range xmax %e\n", ranges[0][1]); diff --git a/c_tools/zobov2/jozov2/CMakeLists.txt b/c_tools/zobov2/jozov2/CMakeLists.txt index 81c1f1d..33deb8a 100644 --- a/c_tools/zobov2/jozov2/CMakeLists.txt +++ b/c_tools/zobov2/jozov2/CMakeLists.txt @@ -22,3 +22,5 @@ if (ENABLE_OPENMP) omp_add_flags(jozov2 CXX) add_definitions(-DOPENMP) ENDIF(ENABLE_OPENMP) + +install(TARGETS jozov2 DESTINATION ${VIDE_BIN}) diff --git a/c_tools/zobov2/voz1b1/CMakeLists.txt b/c_tools/zobov2/voz1b1/CMakeLists.txt index 98fa941..686e034 100644 --- a/c_tools/zobov2/voz1b1/CMakeLists.txt +++ b/c_tools/zobov2/voz1b1/CMakeLists.txt @@ -1,4 +1,5 @@ add_executable(voz1b1_2 voz1b1.cpp vozutil.c voz_io.cpp) target_link_libraries(voz1b1_2 ${QHULL_LIBRARY} ${COSMOTOOL_LIBRARY} ${MATH_LIB}) +install(TARGETS voz1b1_2 DESTINATION ${VIDE_BIN}) include_directories(${COSMOTOOL_INCLUDE_PATH} ${QHULL_INCLUDE_PATH}) diff --git a/container/Dockerfile b/container/Dockerfile new file mode 100644 index 0000000..a2269de --- /dev/null +++ b/container/Dockerfile @@ -0,0 +1,17 @@ +FROM debian:stable + + +RUN apt update && apt install -y git gcc g++ python3 python3-dev python3-pip python3-numpy python3-setuptools cmake libz-dev coreutils m4 + +WORKDIR /build + +###ADD vide_key_ssh . +ENV GIT_SSH_COMMAND='ssh -i /ssh-key/vide_key_ssh -o "StrictHostKeyChecking no"' +RUN pip3 install --no-cache-dir 'astropy<4.1' +RUN git clone --recursive git@bitbucket.org:glavaux/vide_next.git + +WORKDIR /build/vide_next + +RUN git checkout python3 +#RUN python3 setup.py build +RUN pip3 install --verbose . diff --git a/container/build.sh b/container/build.sh new file mode 100644 index 0000000..33b6665 --- /dev/null +++ b/container/build.sh @@ -0,0 +1,20 @@ +#+ +# VIDE -- Void IDentification and Examination -- ./container/build.sh +# Copyright (C) 2010-2014 Guilhem Lavaux +# Copyright (C) 2011-2014 P. M. Sutter +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; version 2 of the License. +# +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License along +# with this program; if not, write to the Free Software Foundation, Inc., +# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. +#+ +podman build --volume $(pwd)/key:/ssh-key:z -t vide_next . diff --git a/external/cfitsio-3.47.tar.gz b/external/cfitsio-3.47.tar.gz new file mode 100644 index 0000000000000000000000000000000000000000..61d397cd7a9394e3702b2fb2d04dbc40f15736d7 GIT binary patch literal 4853990 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