{"id":48491600,"url":"https://github.com/mpes-kit/fuller","last_synced_at":"2026-04-07T11:33:20.717Z","repository":{"id":57432552,"uuid":"265510007","full_name":"mpes-kit/fuller","owner":"mpes-kit","description":"Probabilistic machine learning for reconstruction and parametrization of electronic band sturcture from photoemission spectroscopy data","archived":false,"fork":false,"pushed_at":"2025-11-05T10:35:29.000Z","size":32726,"stargazers_count":13,"open_issues_count":2,"forks_count":2,"subscribers_count":1,"default_branch":"master","last_synced_at":"2026-01-27T22:53:28.953Z","etag":null,"topics":["arpes","band-structure","electron-spectroscopy","fitting","inference","machine-learning","markov-random-field","materials-informatics","materials-science","mpes","photoemission","probabilistic-graphical-models","reconstruction"],"latest_commit_sha":null,"homepage":"https://mpes-kit.github.io/fuller/","language":"Jupyter Notebook","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/mpes-kit.png","metadata":{"files":{"readme":"README.md","changelog":null,"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,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2020-05-20T09:06:54.000Z","updated_at":"2025-07-02T17:57:00.000Z","dependencies_parsed_at":"2023-01-23T11:01:17.435Z","dependency_job_id":"f622104f-f704-4179-815e-76dddea9c897","html_url":"https://github.com/mpes-kit/fuller","commit_stats":{"total_commits":40,"total_committers":2,"mean_commits":20.0,"dds":"0.15000000000000002","last_synced_commit":"4dad9a95ccfca99baa767cb67b8881b50cd62058"},"previous_names":[],"tags_count":7,"template":false,"template_full_name":null,"purl":"pkg:github/mpes-kit/fuller","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mpes-kit%2Ffuller","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mpes-kit%2Ffuller/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mpes-kit%2Ffuller/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mpes-kit%2Ffuller/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/mpes-kit","download_url":"https://codeload.github.com/mpes-kit/fuller/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mpes-kit%2Ffuller/sbom","scorecard":{"id":662772,"data":{"date":"2025-08-11","repo":{"name":"github.com/mpes-kit/fuller","commit":"c213cc20b37615416bdd172da4f17bad9517a195"},"scorecard":{"version":"v5.2.1-40-gf6ed084d","commit":"f6ed084d17c9236477efd66e5b258b9d4cc7b389"},"score":5.4,"checks":[{"name":"Dangerous-Workflow","score":10,"reason":"no dangerous workflow patterns detected","details":null,"documentation":{"short":"Determines if the project's GitHub Action workflows avoid dangerous patterns.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#dangerous-workflow"}},{"name":"Token-Permissions","score":9,"reason":"detected GitHub workflow tokens with excessive permissions","details":["Warn: no topLevel permission defined: .github/workflows/release.yml:1","Info: no jobLevel write permissions found"],"documentation":{"short":"Determines if the project's workflows follow the principle of least privilege.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#token-permissions"}},{"name":"Code-Review","score":4,"reason":"Found 2/5 approved changesets -- score normalized to 4","details":null,"documentation":{"short":"Determines if the project requires human code review before pull requests (aka merge requests) are merged.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#code-review"}},{"name":"Maintained","score":0,"reason":"0 commit(s) and 0 issue activity found in the last 90 days -- score normalized to 0","details":null,"documentation":{"short":"Determines if the project is \"actively maintained\".","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#maintained"}},{"name":"CII-Best-Practices","score":0,"reason":"no effort to earn an OpenSSF best practices badge detected","details":null,"documentation":{"short":"Determines if the project has an OpenSSF (formerly CII) Best Practices Badge.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#cii-best-practices"}},{"name":"Binary-Artifacts","score":10,"reason":"no binaries found in the repo","details":null,"documentation":{"short":"Determines if the project has generated executable (binary) artifacts in the source repository.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#binary-artifacts"}},{"name":"Security-Policy","score":0,"reason":"security policy file not detected","details":["Warn: no security policy file detected","Warn: no security file to analyze","Warn: no security file to analyze","Warn: no security file to analyze"],"documentation":{"short":"Determines if the project has published a security policy.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#security-policy"}},{"name":"Vulnerabilities","score":10,"reason":"0 existing vulnerabilities detected","details":null,"documentation":{"short":"Determines if the project has open, known unfixed vulnerabilities.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#vulnerabilities"}},{"name":"Fuzzing","score":0,"reason":"project is not fuzzed","details":["Warn: no fuzzer integrations found"],"documentation":{"short":"Determines if the project uses fuzzing.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#fuzzing"}},{"name":"License","score":10,"reason":"license file detected","details":["Info: project has a license file: LICENSE:0","Info: FSF or OSI recognized license: MIT License: LICENSE:0"],"documentation":{"short":"Determines if the project has defined a license.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#license"}},{"name":"Signed-Releases","score":-1,"reason":"no releases found","details":null,"documentation":{"short":"Determines if the project cryptographically signs release artifacts.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#signed-releases"}},{"name":"Pinned-Dependencies","score":0,"reason":"dependency not pinned by hash detected -- score normalized to 0","details":["Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/release.yml:28: update your workflow using https://app.stepsecurity.io/secureworkflow/mpes-kit/fuller/release.yml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/release.yml:33: update your workflow using https://app.stepsecurity.io/secureworkflow/mpes-kit/fuller/release.yml/master?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/release.yml:48: update your workflow using https://app.stepsecurity.io/secureworkflow/mpes-kit/fuller/release.yml/master?enable=pin","Warn: downloadThenRun not pinned by hash: .github/workflows/release.yml:39","Info:   0 out of   2 GitHub-owned GitHubAction dependencies pinned","Info:   0 out of   1 third-party GitHubAction dependencies pinned","Info:   0 out of   1 downloadThenRun dependencies pinned"],"documentation":{"short":"Determines if the project has declared and pinned the dependencies of its build process.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#pinned-dependencies"}},{"name":"Packaging","score":10,"reason":"packaging workflow detected","details":["Info: Project packages its releases by way of GitHub Actions.: .github/workflows/release.yml:18"],"documentation":{"short":"Determines if the project is published as a package that others can easily download, install, easily update, and uninstall.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#packaging"}},{"name":"Branch-Protection","score":5,"reason":"branch protection is not maximal on development and all release branches","details":["Info: 'allow deletion' disabled on branch 'master'","Info: 'force pushes' disabled on branch 'master'","Warn: 'branch protection settings apply to administrators' is disabled on branch 'master'","Warn: 'stale review dismissal' is disabled on branch 'master'","Warn: required approving review count is 1 on branch 'master'","Warn: codeowners review is not required on branch 'master'","Warn: 'last push approval' is disabled on branch 'master'","Warn: no status checks found to merge onto branch 'master'","Info: PRs are required in order to make changes on branch 'master'"],"documentation":{"short":"Determines if the default and release branches are protected with GitHub's branch protection settings.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#branch-protection"}},{"name":"SAST","score":0,"reason":"SAST tool is not run on all commits -- score normalized to 0","details":["Warn: 0 commits out of 29 are checked with a SAST tool"],"documentation":{"short":"Determines if the project uses static code analysis.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#sast"}}]},"last_synced_at":"2025-08-21T16:43:47.049Z","repository_id":57432552,"created_at":"2025-08-21T16:43:47.050Z","updated_at":"2025-08-21T16:43:47.050Z"},"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":31511740,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-07T03:10:19.677Z","status":"ssl_error","status_checked_at":"2026-04-07T03:10:13.982Z","response_time":105,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.5:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"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":["arpes","band-structure","electron-spectroscopy","fitting","inference","machine-learning","markov-random-field","materials-informatics","materials-science","mpes","photoemission","probabilistic-graphical-models","reconstruction"],"created_at":"2026-04-07T11:33:19.952Z","updated_at":"2026-04-07T11:33:20.698Z","avatar_url":"https://github.com/mpes-kit.png","language":"Jupyter Notebook","funding_links":[],"categories":[],"sub_categories":[],"readme":"# fuller\n![License](https://img.shields.io/github/license/mpes-kit/fuller?color=lightgrey) ![PyPI Version](https://badge.fury.io/py/fuller.svg) ![Downloads](https://pepy.tech/badge/fuller)\n\nIntegrated computational framework for electronic band structure reconstruction and parametrization, powered by probabilistic machine learning\n\n## Introduction\n\nThis Python package comprises a set of tools to reconstruct and parametrize the electronic band structure (EBS) from photoemission spectroscopy data. It implements the Markov Random Field model introduced in\n[Xian \u0026 Stimper et al. (2020)](https://arxiv.org/abs/2005.10210) in TensorFlow.\n\n\n## Methods of installation\n\nThe latest version of the package can be installed via pip\n\n```\npip install --upgrade git+https://github.com/mpes-kit/fuller.git\n```\n\nAlternatively, download the repository and run\n\n```\npython setup.py install\n```\n\nInstall directly from PyPI\n\n```\npip install fuller\n```\n\n### Requirements\n\nApart from the packages specified in the `requirements.txt` file, `tensorflow` is needed. Installation instructions can be found at the [official webpage](https://www.tensorflow.org/install). The package works with the CPU only and GPU supported version of the framework. Currently, only version TensorFlow 1 (1.14 onwards) is supported, but we are working on porting it to TensorFlow 2.\n\n## Sample dataset\n\nAs a model system to demonstrate the effectiveness of the methodology we worked on 3D photoemission data of the semiconductor tungsten diselenide (WSe\u003csub\u003e2\u003c/sub\u003e). It resolve the momentum along the x- and y- axis (k\u003csub\u003ex\u003c/sub\u003e and k\u003csub\u003ey\u003c/sub\u003e) and the energy.\n\n### Reconstruction\n\nAll 14 valence band of WSe\u003csub\u003e2\u003c/sub\u003e are visible in the dataset. The optimization was initialized by DFT calculation with [HSE06](https://aip.scitation.org/doi/10.1063/1.1564060) hybrid exchange-correlation functional. The results are shown in the figure below.\n\n![Valence bands of tungsten diselenide reconstructed using MRF model](https://github.com/VincentStimper/fuller/blob/master/images/mrf_rec_init_kx_slices.gif \"Valence bands of tungsten diselenide reconstructed using MRF model\")\n\n\n## Documentation\n\nComplete API documentation is provided [here](https://mpes-kit.github.io/fuller/).\n\n### Preprocessing and Reconstruction\n\n#### Class MrfRec\n\nThe `MrfRec` class is of central importance for reconstruction as well as preprocessing the data. To reconstruct the EBS create a `MrfRec` object and use its methods to perform the algorithms and plot the results. Here, we list a selection of the most important methods of the class. For further illustration on how to use the class check out the `mpes_reconstruction_mrf.ipynb` notebook in the example folder.\n\n##### \\_\\_init\\_\\_\n\n```python\ndef __init__(E, kx=None, ky=None, I=None, E0=None, eta=0.1, includeCurv=False, etaCurv=0.1):\n    ...\n```\n\n* `E`: Energy as 1D numpy array\n* `kx`: Momentum along x axis as 1D numpy array, if `None` it is set to 0\n* `ky`: Momentum along y axis as 1D numpy array, if `None` it is set to 0\n* `I`: Measured intensity wrt momentum (rows) and energy (columns), generated if `None`\n* `E0`: Initial guess for band structure energy values, if `None` the median of `E` is taken\n* `eta`: Standard deviation of neighbor interaction term\n* `includeCurv`: Flag, if true curvature term is included during optimization\n* `etaCurv`: Standard deviation of curvature term\n\n##### iter_para\n\n```python\ndef iter_para(num_epoch=1, updateLogP=False, use_gpu=True, disable_tqdm=False, graph_reset=False):\n    ...\n```\n\nHereby, the parallel optimization of Markov Random Field model can be performed to reconstruct an electronic\nband.\n* `num_epoch`: Number of epochs to perform\n* `updateLogP`: Flag, if true logP is updated every half epoch (requires more computations)\n* `use_gpu`: Flag, if true gpu is used for computations if available\n* `disable_tqdm`: Flag, it true no progress bar is shown during optimization\n* `graph_reset`: Flag, if true Tensorflow graph is reset after computation to reduce memory demand\n\n##### normalizeI\n\n```python\ndef normalizeI(kernel_size=None, n_bins=128, clip_limit=0.01, use_gpu=True, threshold=1e-6):\n    ...\n```\n\nThis performs Multidimensional Contrast Limited Adaptive Histogram Equalization (MCLAHE), introduced in [Stimper et al. 2019](https://ieeexplore.ieee.org/document/8895993). The method is a wrapper for the [TensorFlow implementation of the `mclahe` function](https://github.com/VincentStimper/mclahe).\n* `kernel_size`: Tuple of kernel sizes, 1/8 of dimension lengths of x if `None`\n* `n_bins`: Number of bins to be used in the histogram\n* `clip_limit`: Relative intensity limit to be ignored in the histogram equalization\n* `use_gpu`: Flag, if true gpu is used for computations if available\n* `threshold`: Threshold below which intensity values are set to zero\n\n\n## Citation\n\nIf you are using this package within your own projects, please cite it as\n\u003e R. P. Xian, V. Stimper, M. Zacharias, S. Dong, M. Dendzik, S. Beaulieu, B. Schölkopf, M. Wolf, L. Rettig, C. Carbogno, S. Bauer, and R. Ernstorfer, \"A machine learning route between band mapping and band structure,\" arXiv:2005.10210, 2020.\n\nBibtex code\n```\n@article{Xian2020,\n    author={R. P. Xian and V. Stimper and M. Zacharias and S. Dong and M. Dendzik and S. Beaulieu and\n            B. Schölkopf and M. Wolf and L. Rettig and C. Carbogno and S. Bauer and R. Ernstorfer},\n    journal={arXiv:2005.10210},\n    title={A machine learning route between band mapping and band structure},\n    year={2020},\n}\n```\n\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmpes-kit%2Ffuller","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fmpes-kit%2Ffuller","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmpes-kit%2Ffuller/lists"}