{"id":34085999,"url":"https://github.com/dfujim/bfit","last_synced_at":"2026-03-17T22:07:41.585Z","repository":{"id":46165286,"uuid":"159874104","full_name":"dfujim/bfit","owner":"dfujim","description":"A Python application for the analysis of β-NMR and β-NQR data taken at TRIUMF.","archived":false,"fork":false,"pushed_at":"2025-12-10T18:32:22.000Z","size":2627,"stargazers_count":0,"open_issues_count":6,"forks_count":2,"subscribers_count":1,"default_branch":"master","last_synced_at":"2026-01-28T08:28:19.347Z","etag":null,"topics":["b-nmr","b-nqr","triumf"],"latest_commit_sha":null,"homepage":"https://pypi.org/project/bfit/","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"gpl-3.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/dfujim.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":"2018-11-30T20:16:25.000Z","updated_at":"2025-12-10T18:32:26.000Z","dependencies_parsed_at":"2023-02-03T02:30:33.994Z","dependency_job_id":"4a72b856-7ecf-4094-b2dd-7ceda93be58b","html_url":"https://github.com/dfujim/bfit","commit_stats":{"total_commits":1296,"total_committers":6,"mean_commits":216.0,"dds":"0.043209876543209846","last_synced_commit":"d7072dbdfa0ad4a01f84be9db15634e39f0c673c"},"previous_names":[],"tags_count":68,"template":false,"template_full_name":null,"purl":"pkg:github/dfujim/bfit","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/dfujim%2Fbfit","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/dfujim%2Fbfit/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/dfujim%2Fbfit/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/dfujim%2Fbfit/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/dfujim","download_url":"https://codeload.github.com/dfujim/bfit/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/dfujim%2Fbfit/sbom","scorecard":{"id":339270,"data":{"date":"2025-08-11","repo":{"name":"github.com/dfujim/bfit","commit":"3a978d517dcc6e4f93a44be7bbf3e03c7a861e27"},"scorecard":{"version":"v5.2.1-40-gf6ed084d","commit":"f6ed084d17c9236477efd66e5b258b9d4cc7b389"},"score":3.7,"checks":[{"name":"Code-Review","score":0,"reason":"Found 2/28 approved changesets -- score normalized to 0","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":"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":0,"reason":"detected GitHub workflow tokens with excessive permissions","details":["Warn: no topLevel permission defined: .github/workflows/python-publish.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":"Maintained","score":3,"reason":"4 commit(s) and 0 issue activity found in the last 90 days -- score normalized to 3","details":null,"documentation":{"short":"Determines if the project is \"actively maintained\".","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#maintained"}},{"name":"Packaging","score":-1,"reason":"packaging workflow not detected","details":["Warn: no GitHub/GitLab publishing workflow detected."],"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":"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":"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":"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":"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/python-publish.yml:16: update your workflow using https://app.stepsecurity.io/secureworkflow/dfujim/bfit/python-publish.yml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/python-publish.yml:18: update your workflow using https://app.stepsecurity.io/secureworkflow/dfujim/bfit/python-publish.yml/master?enable=pin","Warn: pipCommand not pinned by hash: .github/workflows/python-publish.yml:23","Warn: pipCommand not pinned by hash: .github/workflows/python-publish.yml:24","Info:   0 out of   2 GitHub-owned GitHubAction dependencies pinned","Info:   0 out of   2 pipCommand 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":"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: GNU General Public License v3.0: 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":"Branch-Protection","score":0,"reason":"branch protection not enabled on development/release branches","details":["Warn: branch protection not enabled for 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":"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":"SAST","score":0,"reason":"SAST tool is not run on all commits -- score normalized to 0","details":["Warn: 0 commits out of 4 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-18T05:24:40.260Z","repository_id":46165286,"created_at":"2025-08-18T05:24:40.260Z","updated_at":"2025-08-18T05:24:40.260Z"},"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":30225437,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-03-07T17:00:40.062Z","status":"ssl_error","status_checked_at":"2026-03-07T17:00:39.026Z","response_time":53,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.6: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":["b-nmr","b-nqr","triumf"],"created_at":"2025-12-14T13:20:20.836Z","updated_at":"2026-03-17T22:07:41.552Z","avatar_url":"https://github.com/dfujim.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"# bfit\n\n\u003ca href=\"https://pypi.org/project/bfit/\" alt=\"PyPI Version\"\u003e\u003cimg src=\"https://img.shields.io/pypi/v/bfit?label=PyPI%20Version\"/\u003e\u003c/a\u003e\n\u003cimg src=\"https://img.shields.io/pypi/format/bfit?label=PyPI%20Format\"/\u003e\n\u003cimg src=\"https://img.shields.io/github/languages/code-size/dfujim/bfit\"/\u003e\n\u003cimg src=\"https://img.shields.io/tokei/lines/github/dfujim/bfit\"/\u003e\n\u003cimg src=\"https://img.shields.io/pypi/l/bfit\"/\u003e\n[![DOI](https://joss.theoj.org/papers/10.21105/joss.03598/status.svg)](https://doi.org/10.21105/joss.03598)\n\n\u003ca href=\"https://github.com/dfujim/bfit/commits/master\" alt=\"Commits\"\u003e\u003cimg src=\"https://img.shields.io/github/commits-since/dfujim/bfit/latest/master\"/\u003e\u003c/a\u003e\n\u003ca href=\"https://github.com/dfujim/bfit/commits/master\" alt=\"Commits\"\u003e\u003cimg src=\"https://img.shields.io/github/last-commit/dfujim/bfit\"/\u003e\u003c/a\u003e\n\n[bfit] is a [Python] application aimed to aid in the analysis of β-detected\nnuclear magnetic/quadrupole resonance (β-NMR and β-NQR) data taken at [TRIUMF].\nThese techniques are similar to muon spin rotation ([μSR]) and \"conventional\"\nnuclear magnetic resonance ([NMR]), but use radioactive nuclei as their [NMR]\nprobe in place of the [muon] or a stable isotope.\nThe instruments and research program are governed through [TRIUMF]'s [CMMS],\nwith more information given at \u003chttps://bnmr.triumf.ca\u003e.\nAn overview of instrumentation details and scientific applications of the\nβ-NMR/β-NQR techniques can be found in several recent journal articles:\n\n- W. A. MacFarlane.\n  \u003ci\u003eImplanted-ion βNMR: a new probe for nanoscience\u003c/i\u003e.\n  \u003ca href=\"https://doi.org/10.1016/j.ssnmr.2015.02.004\"\u003e\n  Solid State Nucl. Magn. Reson. \u003cb\u003e68-69\u003c/b\u003e, 1-12 (2015)\u003c/a\u003e.\n- G. D. Morris.\n  \u003ci\u003eβ-NMR\u003c/i\u003e.\n  \u003ca href=\"https://doi.org/10.1007/s10751-013-0894-6\"\u003e\n  Hyperfine Interact. \u003cb\u003e225\u003c/b\u003e, 173-182 (2014)\u003c/a\u003e.\n\nThe intended user of [bfit] is anyone performing experiments with or analyzing\ndata taken from [TRIUMF]'s β-NMR or β-NQR spectrometers - independent of whether\nthey are a new student, visiting scientist, or someone with decades of experience.\n(e.g., someone from the \"local\" [TRIUMF]/[CMMS]/[UBC] group).\nA key goal of the project is to alleviate much of the technical tedium that is\noften encountered during any analysis.\nMore generally, [bfit] has been written to fulfill the following needs:\n\n* Provide the means for quick on-line analyses during beam time.\n* Provide a useful and flexible API for refined analyses in [Python],\n  to be used in conjunction with [bdata] and the [SciPy] ecosystem.\n* Provide an intuitive, user-friendly interface for non-programmers.\n* Be easily maintainable and distributable.\n\n## Citing\n\nIf you use [bfit] in your work, please cite:\n\nD. Fujimoto, \"bfit: A Python Application For Beta-Detected NMR,\" [J. Open Source Softw. \u003cb\u003e6\u003c/b\u003e, 3598 (2021).](https://doi.org/10.21105/joss.03598)\n\n## Useful Links\n\n* [bfit]\n  * [Wiki]\n    * [API Reference]\n    * [API Tutorial]\n    * [GUI Tutorial]\n* [mudpy]\n* [bdata]\n\n## Community Guidelines\n\n* Contributing:\n  * Please submit your contribution to [bfit] through the list of\n    [Pull Requests]!\n* Reporting issues and/or seeking support:\n  * Please file a new ticket in [bfit]'s list of [Issues] - I will get an email\n    notification of your problem and try to fix it ASAP!\n\n## Installation and Use\n\n### Dependencies\n\nThe following packages/applications are needed _prior_ to [bfit] installation:\n- [Python] 3.9 or higher: a dynamically typed programming language. [[install](https://wiki.python.org/moin/BeginnersGuide/Download)]\n- [Tkinter] : [Python]'s de facto standard GUI package. [[install](https://tkdocs.com/tutorial/install.html)]\n\n### Install Instructions\n\n|  | Command |\n|:-- | :--|\nFrom the [PyPI] | `pip install bfit` |\nFrom source | `pip install -e .` |\nDeveloper mode | `pip --no-build-isolation -e .` |\n\nNote that `pip` should point to a (version 3) [Python] executable\n(e.g., `python3`, `python3.8`, etc.).\nIf the above does not work, try using `pip3` or `python3 -m pip` instead.\n\n### Optional Setup\n\nFor convenience,\nyou may want to tell [bfit] where the data is stored on your machine.\nThis is done by defining two environment variables:\n`BNMR_ARCHIVE` and `BNQR_ARCHIVE`.\nThis can be done, for example, in your `.bashrc` script.\nBoth variables expect the data to be stored in directories with a particular\nhierarchy:\n\n```\n/path/\n|---bnmr/\n|---bnqr/\n|-------2017/\n|-------2018/\n|-----------045123.msr\n```\n\nHere, the folders `/path/bnmr/` and `/path/bnqr/` both contain runs\n(i.e., `.msr` files) organized into subdirectories by year of acquisition.\nIn this case, you would set (in your `.bashrc`):\n\n```bash\nexport BNMR_ARCHIVE=/path/bnmr/\nexport BNQR_ARCHIVE=/path/bnqr/\n```\n\nIf [bfit] cannot find the data, it will attempt to download the relevant [MUD]\n(i.e., `.msr`) files from \u003chttps://cmms.triumf.ca/mud/runSel.html\u003e.\nThis is the default behaviour for [bfit] installed from [PyPI].\n\n### First Startup\n\nTo launch the GUI from a terminal simply call `bfit`, if this fails, one can also use the alternative syntax `python3 -m bfit`, where `python3` may be replaced with any (version 3) [Python] executable.\n\n### Testing\n\nTesting your installation of [bfit] is accomplished by running `pytest` within the installation folder. Note that some tests, particularly those involving drawing, fail when run as group in this environment, but they should pass on a subsequent attempts: `pytest --lf`. Further testing information can be found [here](https://github.com/dfujim/bfit/wiki/Installation-and-first-startup).\n\n[Python]: https://www.python.org/\n[SciPy]: https://www.scipy.org/\n[Cython]: https://cython.org/\n[NumPy]: https://numpy.org/\n[pandas]: https://pandas.pydata.org/\n[Matplotlib]: https://matplotlib.org/\n[Tkinter]: https://wiki.python.org/moin/TkInter\n[PyYAML]: https://pyyaml.org/\n[pytest]: https://docs.pytest.org/en/6.2.x/\n[tqdm]: https://github.com/tqdm/tqdm\n[requests]: https://requests.readthedocs.io/en/master/\n[Jupyter]: https://jupyter.org/\n[argparse]: https://docs.python.org/3/library/argparse.html\n\n[YAML]: https://yaml.org/\n[C]: https://en.wikipedia.org/wiki/C_(programming_language)\n[HTTP]: https://en.wikipedia.org/wiki/Hypertext_Transfer_Protocol\n\n[TRIUMF]: https://www.triumf.ca/\n[CMMS]: https://cmms.triumf.ca\n[MUD]: https://cmms.triumf.ca/mud/\n[archive]: https://cmms.triumf.ca/mud/runSel.html\n[`data/BNMR/2020/040123.msr`]: https://cmms.triumf.ca/mud/mud_hdrs.php?ray=Run%2040123%20from%20BNMR%20in%202020\u0026cmd=heads\u0026fn=data/BNMR/2020/040123.msr\n\n[PHYSICA]: https://computing.triumf.ca/legacy/physica/\n[UBC]: https://www.ubc.ca/\n[μSR]: https://en.wikipedia.org/wiki/Muon_spin_spectroscopy\n[NMR]: https://en.wikipedia.org/wiki/Nuclear_magnetic_resonance\n[muon]: https://en.wikipedia.org/wiki/Muon\n\n[bnmr_1f]: https://gitlab.com/rmlm/bnmr_1f\n[bnmr_2e]: https://gitlab.com/rmlm/bnmr_2e\n[bnmrfit]: https://gitlab.com/rmlm/bnmrfit\n[bnmroffice]: https://github.com/hsaadaoui/bnmroffice\n[musrfit]: https://bitbucket.org/muonspin/musrfit\n[musrfit documentation]: https://lmu.web.psi.ch/musrfit/user/html/index.html\n\n[mudpy]: https://github.com/dfujim/mudpy\n[bdata]: https://github.com/dfujim/bdata\n\n[bfit]: https://github.com/dfujim/bfit\n[Pull Requests]: https://github.com/dfujim/bfit/pulls\n[Issues]: https://github.com/dfujim/bfit/issues\n[PyPI]: https://pypi.org/project/bfit/\n[API Reference]: https://github.com/dfujim/bfit/wiki/API-Reference\n[API Tutorial]: https://github.com/dfujim/bfit/wiki/API-Tutorial\n[GUI Tutorial]: https://github.com/dfujim/bfit/wiki/GUI-Tutorial\n[Wiki]: https://github.com/dfujim/bfit/wiki\n\n[ROOT]: https://github.com/root-project/root\n[MINUIT]: https://doi.org/10.1016/0010-4655(75)90039-9\n[MINUIT2]: https://root.cern/doc/master/Minuit2Page.html\n[iminuit]: https://github.com/scikit-hep/iminuit\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdfujim%2Fbfit","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fdfujim%2Fbfit","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdfujim%2Fbfit/lists"}