{"id":31136428,"url":"https://github.com/snu-hanaro/static-fire-toolkit","last_synced_at":"2026-06-20T04:03:33.192Z","repository":{"id":314597514,"uuid":"1055944851","full_name":"snu-hanaro/static-fire-toolkit","owner":"snu-hanaro","description":"Convert thrust/pressure data obtained from static fire tests into refined, analysis-ready outputs suitable for performance analysis, burn rate estimates, and flight prediction through data post-processing.","archived":false,"fork":false,"pushed_at":"2026-02-06T19:43:37.000Z","size":15745,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2026-02-07T05:18:12.345Z","etag":null,"topics":["aerospace","aerospace-engineering","dataprocessing","engineering","rocket"],"latest_commit_sha":null,"homepage":"","language":"Python","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/snu-hanaro.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":"docs/CODE_OF_CONDUCT.md","threat_model":null,"audit":null,"citation":"CITATION.bib","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":"AGENTS.md","dco":null,"cla":null}},"created_at":"2025-09-13T04:56:39.000Z","updated_at":"2026-02-06T19:43:37.000Z","dependencies_parsed_at":"2025-09-13T14:40:34.644Z","dependency_job_id":"9cc15be8-f636-47cd-924a-e88944bda922","html_url":"https://github.com/snu-hanaro/static-fire-toolkit","commit_stats":null,"previous_names":["hanaro2024/static-fire-toolkit","snu-hanaro/static-fire-toolkit"],"tags_count":2,"template":false,"template_full_name":null,"purl":"pkg:github/snu-hanaro/static-fire-toolkit","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/snu-hanaro%2Fstatic-fire-toolkit","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/snu-hanaro%2Fstatic-fire-toolkit/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/snu-hanaro%2Fstatic-fire-toolkit/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/snu-hanaro%2Fstatic-fire-toolkit/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/snu-hanaro","download_url":"https://codeload.github.com/snu-hanaro/static-fire-toolkit/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/snu-hanaro%2Fstatic-fire-toolkit/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":34556497,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-26T15:22:16.424Z","status":"online","status_checked_at":"2026-06-20T02:00:06.407Z","response_time":98,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"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":["aerospace","aerospace-engineering","dataprocessing","engineering","rocket"],"created_at":"2025-09-18T08:01:26.465Z","updated_at":"2026-06-20T04:03:33.181Z","avatar_url":"https://github.com/snu-hanaro.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"![HANARO SFT Logo](https://raw.githubusercontent.com/snu-hanaro/static-fire-toolkit/refs/heads/main/docs/img/logo-banner.png)\n\n[![License - MIT](https://img.shields.io/github/license/snu-hanaro/static-fire-toolkit)](https://github.com/snu-hanaro/static-fire-toolkit/blob/main/LICENSE)\n[![PyPI Version](https://img.shields.io/pypi/v/static-fire-toolkit)](https://pypi.org/project/static-fire-toolkit/)\n[![SemVer Versioning](https://img.shields.io/badge/version_scheme-SemVer-0097a7)](https://semver.org/)\n[![Supported Python versions](https://img.shields.io/pypi/pyversions/static-fire-toolkit)](https://pypi.python.org/pypi/static-fire-toolkit)\n[![GitHub issues](https://img.shields.io/badge/issue_tracking-GitHub-blue.svg)](https://github.com/snu-hanaro/static-fire-toolkit/issues)\n[![GitHub actions status](https://github.com/snu-hanaro/static-fire-toolkit/workflows/CI/badge.svg)](https://github.com/snu-hanaro/static-fire-toolkit/actions?query=workflow%3ACI)\n\n[![Pepy Total Downloads](https://img.shields.io/pepy/dt/static-fire-toolkit?label=Downloads%20from%20PyPI)](https://pepy.tech/projects/static-fire-toolkit?timeRange=threeMonths\u0026category=version\u0026includeCIDownloads=true\u0026granularity=daily\u0026viewType=line\u0026versions=1.0.1%2C1.0.0)\n[![GitHub Downloads (all assets, all releases)](https://img.shields.io/github/downloads/snu-hanaro/static-fire-toolkit/total?label=Downloads%20from%20GitHub)](https://github.com/snu-hanaro/static-fire-toolkit/releases)\n[![DOI](https://zenodo.org/badge/DOI/10.5281/zenodo.17218595.svg)](https://doi.org/10.5281/zenodo.17218595)\n\n**HANARO SFT (Static-Fire Toolkit)** is an open-source command-line toolkit developed by the [Seoul National University Rocket Team **HANARO**](https://hanaro.snu.ac.kr/).  \nIt provides a standardized workflow for processing **static-fire test data** from amateur and research solid rocket motors, focusing on **data cleaning, performance analysis, burn rate estimation, and visualization**.\n\nWhile the library can be imported in Python, the **initial releases focus on the CLI interface**, making it straightforward to use as a standalone tool in test workflows.\n\n## Features\n- **CLI-based workflow** — run analysis directly from the terminal  \n- **Data processing** — clean and normalize raw thrust/pressure sensor logs  \n- **Performance metrics** — compute impulse, burn time, chamber pressure statistics  \n- **Burn rate estimation** — regression-based analysis for solid propellants  \n- **Visualization** — generate thrust/pressure plots for reports and documentation  \n\n## Requirements\n- Python 3 (3.10+ required)\n- Packages:\n  - numpy (\u003e=2.0)\n  - scipy (\u003e=1.13)\n  - pandas (\u003e=2.0)\n  - matplotlib (\u003e=3.10)\n  - openpyxl (\u003e=3.1)  # pandas read_excel engine\n\n## Installation\n\nFrom PyPI:\n\n```bash\npython3 -m pip install static-fire-toolkit\n```\n\nOr install from source:\n\n```bash\ngit clone https://github.com/snu-hanaro/static-fire-toolkit.git\ncd static-fire-toolkit\npython3 -m pip install -e .\n```\n\n## Usage\n\n### Required Directory Layout\n\n```sh\nroot/                        # run sft here (or specify this path using the --root option)\n├─ global_config.xlsx        # global configs\n├─ config.xlsx               # per-test configs\n├─ data/\n│  ├─ _pressure_raw/         # input pressure raw CSVs\n│  └─ _thrust_raw/           # input thrust raw CSVs\n├─ results/\n│  ├─ burnrate/              # calculated burnrate CSVs\n│  ├─ burnrate_graph/        # burnrate PNG/GIF plots\n│  ├─ pressure/              # processed pressure CSVs\n│  ├─ pressure_graph/        # pressure PNG plots\n│  ├─ thrust/                # processed thrust CSVs\n│  └─ thrust_graph/          # thrust PNG plots\n└─ logs/                     # logs for debugging\n```\n\nAll commands assume the root contains `data/_pressure_raw`, `data/_thrust_raw`, and `config.xlsx`.\n\n### CLI\nBasic workflow (see `examples/` for a runnable set):\n\n```bash\n# End-to-end: thrust -\u003e pressure -\u003e burnrate\nsft [--root \u003cpath\u003e] process [--expt \u003cexpt_file_name\u003e]  # e.g. sft --root examples process [--expt KNSB_250220]\n\n# Stage-by-stage\nsft [--root \u003cpath\u003e] thrust [--expt \u003cexpt_file_name\u003e]  # e.g. sft --root examples thrust --expt KNSB_250220\nsft [--root \u003cpath\u003e] pressure [--expt \u003cexpt_file_name\u003e]  # e.g. sft --root examples pressure --expt KNSB_250220\nsft [--root \u003cpath\u003e] burnrate [--expt \u003cexpt_file_name\u003e]  # e.g. sft --root examples burnrate --expt KNSB_250220\n```\n\nRun `sft --help` and `sft [--root \u003cpath\u003e] info` for more details.\n\n#### Examples from this repo:\n- Input samples: [`examples/data/_thrust_raw/`](https://github.com/snu-hanaro/static-fire-toolkit/tree/main/examples/data/_thrust_raw), [`examples/data/_pressure_raw/`](https://github.com/snu-hanaro/static-fire-toolkit/tree/main/examples/data/_pressure_raw/), [`examples/config.xlsx`](https://github.com/snu-hanaro/static-fire-toolkit/blob/main/examples/config.xlsx), [`examples/global_config.py`](https://github.com/snu-hanaro/static-fire-toolkit/blob/main/examples/global_config.py)\n- Output samples: [`examples/results/thrust/`](https://github.com/snu-hanaro/static-fire-toolkit/tree/main/examples/results/thrust), [`examples/results/pressure/`](https://github.com/snu-hanaro/static-fire-toolkit/tree/main/examples/results/pressure), [`examples/results/burnrate/`](https://github.com/snu-hanaro/static-fire-toolkit/tree/main/examples/results/burnrate)\n\n#### Output preview (from `examples/`):\n\n![Thrust Graph](https://raw.githubusercontent.com/snu-hanaro/static-fire-toolkit/refs/heads/main/examples/results/thrust_graph/KNSB_250220_thrust.png)\n\n![Pressure Graph](https://raw.githubusercontent.com/snu-hanaro/static-fire-toolkit/refs/heads/main/examples/results/pressure_graph/KNSB_250220_pressure.png)\n\n![Burnrate-Time Graph](https://raw.githubusercontent.com/snu-hanaro/static-fire-toolkit/refs/heads/main/examples/results/burnrate_graph/Burnrate-Time/KNSB_250220_burnrate.png)\n\n![Burnrate-Pressure Graph](https://raw.githubusercontent.com/snu-hanaro/static-fire-toolkit/refs/heads/main/examples/results/burnrate_graph/Burnrate-Pressure/KNSB_250220_burnrate.png)\n\n![Burnrate-Pressure Animation](https://raw.githubusercontent.com/snu-hanaro/static-fire-toolkit/refs/heads/main/examples/results/burnrate_graph/Burnrate-Pressure/animation/KNSB_250220_burnrate_animation.gif)\n\n### Global Configuration: `global_config.py`\n\nDefine runtime parameters for parsing and processing. The following load-cell parameters are device-specific and must be explicitly set:\n\n- sensitivity_mv_per_v (mV/V)\n- rated_capacity_kgf (kgf)\n- gain_internal_resistance_kohm (kOhm)\n- gain_offset (V)\n\n\u003e [!NOTE]\n\u003e **How to Convert Voltage[V] to Thrust[N]**:  \n\u003e - `gain = gain_offset + (gain_internal_resistance_kohm * 1000)[Ω] / gain_resistance[Ω]`\n\u003e - `bridge_output_mv [mV] = sensitivity_mv_per_v[mV/V] * excitation_voltage[V] * thrust[N] / (rated_capacity_kgf[kgf] * g[N/kgf])`\n\u003e - `measured_output_v = (bridge_output_mv / 1000)[V] * gain`\n\u003e\n\u003e ```\n\u003e thrust[N] = (bridge_output_mv / sensitivity_mv_per_v)[V] / excitation_voltage[V] * (rated_capacity_kgf * g)[N]\n\u003e           = (measured_output_v * 1000 / gain)[mV] / sensitivity_mv_per_v[mV/V] / excitation_voltage[V]\n\u003e              * (rated_capacity_kgf * g)[N]\n\u003e ```\n\u003e\n\nOptional parsing controls (fallbacks apply if unspecified):\n- thrust_sep, pressure_sep (CSV delimiter, default:`,`)\n- thrust_header, pressure_header (header row index or None, default: `0`)\n- thrust_time_col_idx, thrust_col_idx, pressure_time_col_idx, pressure_col_idx\n\n[Example](https://github.com/snu-hanaro/static-fire-toolkit/blob/main/examples/global_config.py):\n\n```python\n# ------------ Load Cell (Required) ------------\nrated_capacity_kgf = 500  # 정격하중: rated capacity of load cell, kgf\nsensitivity_mv_per_v = 3  # 감도: sensitivity of load cell, mV/V\ngain_internal_resistance_kohm = (\n    49.4  # amplifier-specific internal resistor of load cell, kΩ\n)\ngain_offset = 1  # gain offset of load cell\n\n# ----------- Thrust Data Processing -----------\nthrust_sep = \"[,\\t]\"  # separator for thrust data, character or Regex\nthrust_header = None  # header for thrust data (row number or None)\nthrust_time_col_idx = 0  # index of time column\nthrust_col_idx = 1  # index of thrust column\n\n# ---------- Pressure Data Processing ----------\npressure_sep = \";\"  # separator for pressure data, character or Regex\npressure_header = 0  # header for pressure data (row number or None)\npressure_time_col_idx = 0  # index of datetime column\npressure_col_idx = 2  # index of pressure column\n\n# ------------ Processing Params ---------------\nfrequency = 100  # Sampling rate, Hz\ncutoff_frequency = 30  # LPF, Hz\nlowpass_order = 5  # order for low pass filter\ngaussian_weak_sigma = 1.5  # sigma for weak gaussian filter\ngaussian_strong_sigma = 10  # sigma for strong gaussian filter\nstart_criteria = 0.2  # Criteria for the starting point of a meaningful interval in thrust data processing\nend_criteria = 0.1  # Criteria for the ending point of a meaningful interval in thrust data processing\n```\n\n### Per-Test Configuration: `config.xlsx`\nRecord one row per test; the latest row is processed by default. Required columns:\n\n| Column | Description | Example |\n| :--- | :--- | :--- |\n| index | Zero-based test index\t| 17 |\n| date | Date in YYMMDD | 250220 |\n| type | Propellant type | KNSB |\n| expt_file_name | Experiment base name | KNSB_250220 |\n| expt_excitation_voltage [V] | DAQ excitation voltage | 11.94 |\n| expt_resistance [Ohm] | DAQ potentiometer resistance | 200.4 |\n| totalmass [g] | Propellant total mass | 4996.3 |\n| Nozzlediameter [mm] | Throat diameter | 20 |\n| Outerdiameter [mm] | Grain OD | 90 |\n| Innerdiameter [mm] | Grain ID | 30 |\n| singlegrainheight [mm] | Single grain height | 104.5 |\n| segment | Grain count | 5 |\n\n\u003e [!NOTE]\n\u003e `expt_file_name` (if present) is auto-filled based on the values of date and type — do not edit. Notes/remarks are optional.\n\n\u003e [!NOTE]\n\u003e If your sheet uses the legacy column name `expt_input_voltage [V]` instead of `expt_excitation_voltage [V]`, it will be used automatically as a fallback.\n\n### Data I/O Format \u0026 Processing Pipeline\n- **Inputs**:\n  - Raw Thrust Data: CSV\n  - Raw Pressure Data: CSV\n- **Outputs**:\n  - Uniform-step processed CSVs at Δt = 1/`frequency` s: `time` + `thrust [N]` or `pressure [bar]`\n  - PNG plots of thrust and pressure curves\n- **Filtering**:\n  - Thrust → low-pass filter + Gaussian smoothing\n  - Pressure → no filter (typically smooth enough)\n- **Pressure Normalization**: adjust for local vs. standard atmospheric pressure at test time\n- **Config**: `config.xlsx` stores test conditions (date/nozzle/grain, etc.)\n\n\u003e [!NOTE]\n\u003e **File-Naming Summary**:\n\u003e - Thrust raw: `TYPE_YYMMDD_thrust_raw.csv`\n\u003e - Thrust outputs: `TYPE_YYMMDD_thrust.csv`, `TYPE_YYMMDD_thrust.png`\n\u003e - Pressure raw: `TYPE_YYMMDD_pressure_raw.csv`\n\u003e - Pressure outputs: `TYPE_YYMMDD_pressure.csv`, `TYPE_YYMMDD_pressure.png`\n\n### Thrust Data Processing\n#### Thrust raw (`data/_thrust_raw/`)\n- Filename: `TYPE_YYMMDD_thrust_raw.csv` (e.g., `KNSB_250220_thrust_raw.csv`)\n- Default Format: comma-separated, 2 columns, with column labels (Configurable via [`global_config.py`](#global-configuration-global_configpy))\n\t1. time (s)\n  2. voltage (V) (must be 1:1 linearly convertible to thrust)\n- Important: treat raw CSV as read-only. Re-saving in third-party editor such as Excel may change encoding/separators.\n\nExample (header + excerpt):\n\n```csv\ntime,voltage(V)\n246.42052460007835,1.34765625\n246.42483200004790,1.455078125\n```\n\n#### Pipeline\n1. Read the latest test row from `config.xlsx`\n2. Load and Parse the matching raw thrust CSV from `_thrust_raw/`\n3. Convert voltage to thrust\n4. Extract combustion window; handle spikes/outliers\n5. PCHIP interpolation to Δt = 1/`frequency` s\n6. Apply low-pass + Gaussian filters\n7. Save processed thrust CSV → `results/thrust/TYPE_YYMMDD_thrust.csv`\n8. Save thrust plot PNG → `results/thrust_graph/TYPE_YYMMDD_thrust.png`\n\n#### Output CSV schema\n\n| time [s] | thrust [N] |\n| :--- | :--- |\n| 0.00 | 2.757… |\n| 0.01 | 16.772… |\n| 0.02 | 32.070… |\n| … | … |\n\n### Pressure Data Processing\n#### Pressure raw (`data/_pressure_raw/`)\n- Filename: `TYPE_YYMMDD_pressure_raw.csv`\n- Default Format: comma-separated, 2 columns, with column labels (Configurable via [`global_config.py`](#global-configuration-global_configpy))\n  1. Datetime ([ISO 8601](https://www.iso.org/iso-8601-date-and-time-format.html) format recommended, not necessarily in exactly the same format. For more details, see the [`pandas.to_datetime` documentation](https://pandas.pydata.org/docs/reference/api/pandas.to_datetime.html).)\n  2. Pressure (Bar)\n\nExample (header + excerpt):\n\n```csv\nDatetime,Pressure (Bar)\n2025.2.20 22:34,1.159\n2025.2.20 22:34,1.132\n```\n\n#### Pipeline\n1. Read the latest test row from config.xlsx\n2. Load the matching raw pressure CSV from `_pressure_raw/`\n3. Load the processed thrust CSV to synchronize burn window\n4. PCHIP interpolation to Δt = 1/`frequency` s\n5. Atmospheric correction: adjust for local vs. standard atmospheric pressure at test time\n6. No filtering (pressure changes are typically smooth)\n7. Save processed pressure CSV → `results/pressure/TYPE_YYMMDD_pressure.csv`\n8. Save pressure plot PNG → `results/pressure_graph/TYPE_YYMMDD_pressure.png`\n\n#### Output CSV schema\n\n| time [s] | pressure [bar] |\n| :--- | :--- |\n| 0.00 | 1.447… |\n| 0.01 | 1.500… |\n| 0.02 | 1.560… |\n| … | … |\n\n## Troubleshooting \u0026 Best Practices\n- Do not edit raw CSVs. Excel re-save can alter encoding/delimiters → corrupted data. Keep raw files read-only.\n- Configure your `global_config.py` and `config.xlsx` correctly.\n- “Latest row” logic. The CLI processes the most recent test by default. To reprocess an older test, update `config.xlsx` or pass `--expt`. We plan to add batch processing feature in a future release.\n- Debugging order: follow the stage order — load → windowing → interpolation → filters → correction → save. Most issues are path/filename mismatches, delimiter/headers, or NaNs from partial rows.\n- Reproducibility: do not overwrite raw CSVs; version `config.xlsx`; keep outputs auto-versioned by type/date in filenames.\n\n### How to Report Issues\nIf you encounter a problem, please open an issue with:\n- The output of `sft info --root \u003cyour-root\u003e` (global configurations, environment, and package details)\n- The corresponding logs in the `logs/` directory\n- If possible, a minimal sample (subset of `data/_thrust_raw`, `data/_pressure_raw`, and `config.xlsx`) that reproduces the issue\n\n## FAQ\n### Q1. Why filter thrust but not pressure?\nThrust often contains transient spikes/noise (mechanical shocks, DAQ artifacts), so smoothing helps. Pressure changes are typically gradual; avoiding filters prevents distortion of real variations.\n\n### Q2. What does the pressure correction do?\nIt compensates for the difference between local atmospheric pressure at test time and standard atmosphere, enabling apples-to-apples comparisons across sessions.\n\n## Development\n\n### Specs \u0026 Issue Tracking\n\nThis project is document-first.\n\nAuthoritative project records live under:\n- docs/context\n- docs/log\n- docs/work\n- docs/specs\n\nDo not treat these as auxiliary documentation.\n\n### Tools used\n- Ruff: linting \u0026 formatting\n- pytest: testing\n- coverage: test coverage reports\n- pre-commit — enforce style checks before commits\n- GitHub Actions — CI/CD (matrix testing across Python 3.10–3.13)\n\n### Local setup\n\n```bash\n# Run linting\nruff check .\nruff format .\n\n# Run tests\npytest -q\n```\n\n### CI/CD Strategy\n- Branching: trunk-based development (main protected)\n- Matrix testing: Python 3.10–3.13, both latest and [minimum dependencies](https://github.com/snu-hanaro/static-fire-toolkit/blob/main/constraints-min.txt)\n- Tags:\n  - Signed tags by default\n  - Annotated tags allowed with --no-sign\n  - Structured tag messages including Summary / Highlights / Breaking / Fixes / Docs / Thanks / Artifacts\n\n## Contributing\n\nPlease use Issues/PRs with templates. Recommended:\n- Feature request \u0026 bug report templates\n- Code style (e.g., black, ruff) \u0026 type hints\n- Sample data policy (strip sensitive metadata)\n\n## Author \u0026 Maintainers\n- Author: Seoul National University Rocket Team HANARO\n- Maintainer: [@yunseo-kim](https://github.com/yunseo-kim)\n\n## Citing Static-Fire Toolkit\n\nIf *HANARO SFT (Static-Fire Toolkit)* contributes to a project that leads to a scientific publication, please acknowledge this fact by citing [the published software](#static-fire-toolkit-on-zenodo):\n\n### Static-Fire Toolkit on Zenodo\n\nThe following DOI represents *all* Static-Fire Toolkit versions.  \nYou may cite it directly, or visit [Zenodo]((https://doi.org/10.5281/zenodo.17218595)) to find the DOI of the specific version you used.\n\n[![DOI](https://zenodo.org/badge/DOI/10.5281/zenodo.17218595.svg)](https://doi.org/10.5281/zenodo.17218595)\n\nBibTeX bibliography file: [CITATION.bib](https://raw.githubusercontent.com/snu-hanaro/static-fire-toolkit/refs/heads/main/CITATION.bib)\n\n```\n@software{hanaro-sft,\n  author       = {Kim, Yunseo and\n                  Seo, Jiwan and\n                  Yun, Junghyeon},\n  title        = {Static-Fire Toolkit},\n  month        = sep,\n  year         = 2025,\n  publisher    = {Zenodo},\n  version      = {latest},\n  doi          = {10.5281/zenodo.17218595},\n  url          = {https://doi.org/10.5281/zenodo.17218595},\n}\n```\n\n- **Chicago**: Kim, Yunseo, Jiwan Seo, and Junghyeon Yun. “Static-fire Toolkit”. Zenodo, 2025. https://doi.org/10.5281/zenodo.17218595.\n- **IEEE**: [1] Y. Kim, J. Seoand J. Yun, “Static-Fire Toolkit”. Zenodo, 2025. doi: 10.5281/zenodo.17218595.\n- **ACS**: Kim, Y.; Seo, J.; Yun, J. Static-Fire Toolkit; Zenodo, 2025. https://doi.org/10.5281/zenodo.17218595.\n- **APS**: [1] Y. Kim, J. Seo, and J. Yun, Static-Fire Toolkit (Zenodo, 2025), https://doi.org/10.5281/zenodo.17218595.\n\n#### By version (past releases)\n\n##### v1.0.1\n\n[![DOI](https://zenodo.org/badge/DOI/10.5281/zenodo.17218872.svg)](https://doi.org/10.5281/zenodo.17218872)\n\n##### v1.0.0\n\n[![DOI](https://zenodo.org/badge/DOI/10.5281/zenodo.17218596.svg)](https://doi.org/10.5281/zenodo.17218596)\n\n## License\n\nThis project is licensed under the [MIT License](https://github.com/snu-hanaro/static-fire-toolkit/blob/main/LICENSE).\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsnu-hanaro%2Fstatic-fire-toolkit","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fsnu-hanaro%2Fstatic-fire-toolkit","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsnu-hanaro%2Fstatic-fire-toolkit/lists"}