{"id":17655145,"url":"https://github.com/ickc/ducc","last_synced_at":"2025-03-30T09:26:50.936Z","repository":{"id":90861308,"uuid":"329497964","full_name":"ickc/ducc","owner":"ickc","description":"Unofficial clone of https://gitlab.mpcdf.mpg.de/mtr/ducc","archived":false,"fork":false,"pushed_at":"2021-01-14T03:34:59.000Z","size":968,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":3,"default_branch":"branch_0_3","last_synced_at":"2025-02-05T11:36:42.575Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":"https://gitlab.mpcdf.mpg.de/mtr/ducc","language":"C++","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"gpl-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/ickc.png","metadata":{"files":{"readme":"README.md","changelog":"ChangeLog","contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2021-01-14T03:34:30.000Z","updated_at":"2021-01-14T03:40:20.000Z","dependencies_parsed_at":null,"dependency_job_id":"33bb2053-5a0e-44a8-81cf-8287a2a4b24d","html_url":"https://github.com/ickc/ducc","commit_stats":null,"previous_names":[],"tags_count":8,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ickc%2Fducc","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ickc%2Fducc/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ickc%2Fducc/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ickc%2Fducc/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/ickc","download_url":"https://codeload.github.com/ickc/ducc/tar.gz/refs/heads/branch_0_3","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":246299373,"owners_count":20755149,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2024-10-23T12:40:57.089Z","updated_at":"2025-03-30T09:26:50.919Z","avatar_url":"https://github.com/ickc.png","language":"C++","funding_links":[],"categories":[],"sub_categories":[],"readme":"Distinctly Useful Code Collection (DUCC)\n========================================\n\nThis is a collection of basic programming tools for numerical computation,\nincluding Fast Fourier Transforms, Spherical Harmonic Transforms, non-equispaced\nFourier transforms, as well as some concrete applications like 4pi convolution\non the sphere and gridding/degridding of radio interferometry data.\n\nThe code is written in C++17, but provides a simple and comprehensive Python\ninterface.\n\n### Requirements\n\n- [Python \u003e= 3.6](https://www.python.org/)\n- [pybind11](https://github.com/pybind/pybind11)\n- a C++17-capable C++ compiler (tested with g++ version 7 or newer and clang++;\n  recent versions of MSVC on Windows also work, but are tested less frequently)\n\n### Sources\n\nThe latest version of DUCC can be obtained by cloning the repository via\n\n    git clone https://gitlab.mpcdf.mpg.de/mtr/ducc.git\n\n### Installation\n\nIn the following, we assume a Debian-based distribution. For other\ndistributions, the \"apt\" lines will need slight changes.\n\nDUCC and its mandatory dependencies can be installed via:\n\n    sudo apt-get install git python3 python3-pip python3-dev python3-pybind11 pybind11-dev\n    pip3 install --user git+https://gitlab.mpcdf.mpg.de/mtr/ducc.git\n\nNOTE: compilation of the code will take a sinificant amount of time\n(several minutes). Binary packages are deliberately not made available, since\nmuch better performance can be achieved by compiling the code specifically for\nthe detected target CPU.\n\n\nInstalling multiple versions simultaneously\n-------------------------------------------\n\nThe interfaces of the DUCC components are expected to evolve over time; whenever\nan interface changes in a manner that is not backwards compatible, the DUCC\nversion number will increase. As a consequence it might happen that one part of\na Python code may use an older version of DUCC while at the same time another\npart requires a newer version. Since DUCC's version number is included in the\nmodule name itself (the module is not called `ducc`, but rather `ducc\u003cX\u003e`),\nthis is not a problem, as multiple DUCC versions can be installed\nsimultaneously.\nThe latest patch levels of a given DUCC version will always be available at the\nHEAD of the git branch with the respective name. In other words, if you need\nthe latest incarnation of DUCC 0, this will be on branch \"ducc0\" of the\ngit repository, and it will be installed as the package \"ducc0\".\nLater versions will be maintained on new branches and will be installed as\n\"ducc1\" and \"ducc2\", so that there will be no conflict with potentially\ninstalled older versions.\n\n\nDUCC components\n===============\n\nducc.fft\n--------\n\nThis package provides Fast Fourier, trigonometric and Hartley transforms with a\nsimple Python interface. It is an evolution of `pocketfft` and `pypocketfft`\nwhich are currently used by `numpy` and `scipy`.\n\nThe central algorithms are derived from Paul Swarztrauber's\n[FFTPACK](http://www.netlib.org/fftpack) code.\n\n### Features\n- supports fully complex and half-complex (i.e. complex-to-real and\n  real-to-complex) FFTs, discrete sine/cosine transforms and Hartley transforms\n- achieves very high accuracy for all transforms\n- supports multidimensional arrays and selection of the axes to be transformed\n- supports single, double, and long double precision\n- makes use of CPU vector instructions when performing 2D and higher-dimensional\n  transforms\n- supports prime-length transforms without degrading to O(N**2) performance\n- has optional multi-threading support for multidimensional transforms\n\n### Design decisions and performance characteristics\n- there is no internal caching of plans and twiddle factors, making the\n  interface as simple as possible\n- 1D transforms are significantly slower than those provided by FFTW (if FFTW's\n  plan generation overhead is ignored)\n- multi-D transforms in double precision perform fairly similar to FFTW with\n  FFTW_MEASURE; in single precision `ducc.fft` can be significantly faster.\n\nducc.sht\n--------\n\nThis package provides efficient spherical harmonic trasforms (SHTs). Its code\nis derived from [libsharp](https://arxiv.org/abs/1303.4945), with accelerated\nrecurrence algorithms presented in\n\u003chttps://www.jstage.jst.go.jp/article/jmsj/96/2/96_2018-019/_pdf\u003e.\n\n\nducc.healpix\n------------\n\nThis library provides Python bindings for the most important functionality\nrelated to the [HEALPix](https://arxiv.org/abs/astro-ph/0409513) tesselation,\nexcept for spherical harmonic transforms, which are covered by `ducc.sht`.\n\nThe design goals are\n- similarity to the interface of the HEALPix C++ library\n  (while respecting some Python peculiarities)\n- simplicity (no optional function parameters)\n- low function calling overhead\n\n\nducc.totalconvolve\n------------------\n\nLibrary for high-accuracy 4pi convolution on the sphere, which generates a\ntotal convolution data cube from a set of sky and beam `a_lm` and computes\ninterpolated values for a given list of detector pointings.\nThis code has evolved from the original\n[totalconvolver](https://arxiv.org/abs/astro-ph/0008227) algorithm described\nvia the [conviqt](https://arxiv.org/abs/1002.1050) code.\n\n\n### Algorithmic details:\n- the code uses `ducc.sht` SHTs and `ducc.fft` FFTs to compute the data cube\n- shared-memory parallelization is provided via standard C++ threads.\n- for interpolation, the algorithm and kernel described in\n  \u003chttps://arxiv.org/abs/1808.06736\u003e are used. This allows very efficient\n  interpolation with user-adjustable accuracy.\n\n\nducc.wgridder\n-------------\n\nLibrary for high-accuracy gridding/degridding of radio interferometry datasets.\nAn earlier version of this code has been integrated into\n[wsclean](https://sourceforge.net/projects/wsclean/)\n(\u003chttps://arxiv.org/abs/1407.1943\u003e)\nas the `wgridder` component.\n\n### Programming aspects\n- shared-memory parallelization via standard C++ threads.\n- kernel computation is performed on the fly, avoiding inaccuracies\n  due to table lookup and reducing overall memory bandwidth\n\n### Numerical aspects\n- uses the analytical gridding kernel presented in\n  \u003chttps://arxiv.org/abs/1808.06736\u003e\n- uses the \"improved W-stacking method\" described in\n  \u003chttps://www.repository.cam.ac.uk/handle/1810/292298\u003e (p. 139ff)\n- in combination these two aspects allow extremely accurate gridding/degridding\n  operations (L2 error compared to explicit DFTs can go below 1e-12) with\n  reasonable resource consumption\n\n\nducc.misc\n---------\n\nVarious unsorted functionality which will hopefully be categorized in the\nfuture.\n\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fickc%2Fducc","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fickc%2Fducc","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fickc%2Fducc/lists"}