Statistics and antenna pattern analysis tool for radar systems
Project description
StatisticToolPython
A comprehensive statistics and antenna pattern analysis tool for radar systems, built with Python and PySide6.
Features
- Statistics Analysis: Process and analyze measurement data with statistical limits
- Antenna Pattern Processing: Handle antenna diagrams and patterns for various radar types
- GUI Interface: User-friendly Qt-based interface for data visualization
- Report Generation: Automated PowerPoint and PDF report creation
- Data Processing: Support for multiple data formats (JSON, YAML, protocol files)
Requirements
- Python 3.8+
- PySide6 for GUI
- matplotlib for plotting
- numpy for numerical operations
- PyYAML for configuration
- python-pptx for PowerPoint generation
Installation
From PyPI (recommended)
pip install calibration-statistics-tool
calibration-tool
From source
- Clone the repository:
git clone https://github.com/marjanstojchev/Calibration-Statistics-Tool.git
cd Calibration-Statistics-Tool
- Create a virtual environment:
python -m venv .venv
.venv\Scripts\activate # Windows
source .venv/bin/activate # Linux/Mac
- Install in editable mode:
pip install -e .
Configuration
On first launch the tool automatically creates a configuration file and an output directory. No manual setup is required to start — but configuring the input directories makes file dialogs open directly in the right folder.
Configuration file (paths.json)
| Platform | Location |
|---|---|
| Windows | %APPDATA%\calibration-statistics-tool\paths.json |
| Linux | ~/.config/calibration-statistics-tool/paths.json |
The file is created with defaults on first run. Edit it with any text editor:
{
"output_base": "C:\\Users\\you\\Documents\\calibration-tool",
"input_protocol_dir": "D:\\measurements\\protocol_files",
"input_ptu_dir": "D:\\measurements\\ptu_files",
"input_tx_ant_dir": "D:\\measurements\\tx_antenna_files"
}
| Key | Description |
|---|---|
output_base |
Root folder for all generated reports and diagrams. Created automatically if it does not exist. |
input_protocol_dir |
Folder containing protocol measurement files (.csv / text format). File dialogs open here. Leave empty to start at the home folder. |
input_ptu_dir |
Folder containing PTU-2 antenna measurement files (.ptu binary format). |
input_tx_ant_dir |
Folder containing Tx-antenna diagram input files. |
Output directories
All output is written under output_base. The tool creates these subdirectories automatically:
| Subdirectory | Contents |
|---|---|
output/ |
Antenna system diagram PPTX reports |
output_tx_diagrams/ |
Tx-antenna diagram PPTX reports |
output_antenna_patterns/ |
Antenna pattern YAML + plot exports |
output_huellkurven/ |
Hüllkurven (hull curve) PPTX reports |
output_certificates/ |
Calibration certificate exports |
output_setcurves/ |
Set-curves output and input config JSON |
output_statistic/ |
Statistics PPTX reports |
output_merge/ |
Merged PPTX output (combine.pptx) |
Input directory conventions
| Input folder | Expected file types | Used by tab |
|---|---|---|
protocol_files/ |
Protocol text/CSV files exported from the measurement system | Parse Protocols |
ptu_files/ |
PTU-2 binary files (*.ptu) |
Parse Protocols / System Diagrams |
tx_antenna_files/ |
Tx-antenna measurement files | Tx-Ant. Diagrams |
Bundled configuration files
The following files are included in the installed package (shared/config/) and are loaded automatically. They define measurement limits and plot layouts:
| File | Purpose |
|---|---|
CalLimits.yaml |
Calibration measurement limits (gradient, curvilinearity, peak width, variation) |
CalLimGroups.yaml |
Grouping metadata for CalLimits — controls how limits are organised in the UI |
BurnInLimits.yaml |
Burn-in measurement limits (Doppler, speed, range, amplitude, cycle duration) |
BurnInLimGroups.yaml |
Grouping metadata for BurnInLimits |
StatisticsLimitsConfig.json |
Statistics plot setup — defines which measurements to plot and how slides are laid out |
AntennaSystemDiagramsConf.yaml |
System diagram computation config (plot/graph/chirp/diagram layouts) |
TxAntDiagramsConf.yaml |
Tx-antenna diagram computation config |
Note: These files live inside the installed package. To customise limits without modifying the package, copy the relevant YAML to
output_baseand adjustauxiliary.pyto load from there (see docs/mvc_architecture.md).
Log files
Logs are written to %APPDATA%\calibration-statistics-tool\logs\ (Windows) or ~/.config/calibration-statistics-tool/logs/ (Linux).
Usage
After installing from PyPI:
calibration-tool
When running from source:
python main.py
On startup, the console prints the location of paths.json and lists any input directories that have not been configured yet.
Project Structure
The application follows an MVC architecture split across several sub-packages:
main.py # Thin wiring file -- startup, DI, handler wiring
shared/ # Domain logic (controllers, parsers, models)
models.py # Data model classes
parse_controller.py # ParseController -- protocol/PTU2 business logic
plot_controller.py # PlotController -- diagram/plot state management
calcdiagram_functions.py # Vectorised diagram calculations (NumPy)
parsePTU2data.py # PTU2 file parser and data structures
parse_helpers.py # Protocol parsing helpers
loaddata.py # Data loading utilities
ui/
main_view.py # MainView -- owns QApplication and all widgets
pyside_qtgui.py # Backward-compat shim (delegates to MainView)
ui_constants.py # Pure-Python layout/size/style constants
widgets.py # Reusable Qt widget classes (PlotFrame, etc.)
handlers/ # Signal handler modules (one per tab)
app_context.py # AppContext -- dependency-injection container
parse_handlers.py # Parse Protocols tab handlers
sys_diag_handlers.py # System Diagrams tab handlers
tx_ant_diag_handlers.py # Tx-Antenna Diagrams tab handlers
ant_pat_handlers.py # Antenna Patterns tab handlers
tabs/ # Tab widget declarations (one file per tab)
parse_prot_tab.py
sys_diag_tab.py
tx_ant_diag_tab.py
ant_pat_tab.py
system_diagrams/ # AntennaSystemDiagrams computation module
antenna_patterns/ # Antenna pattern analysis (antpat_v5)
tx_diagrams/ # Tx-Antenna Diagrams computation module
config/ # YAML configuration files
tests/ # Pytest test suite (613 tests)
conftest.py # Shared fixtures and Qt session setup
integration/ # Real-Qt integration tests
docs/ # Architecture documentation
Development
Install development dependencies:
pip install -e ".[dev]"
Run tests:
pytest
Run benchmarks (local only, informational):
pytest --benchmark-only
Lint code:
ruff check .
Architecture
Detailed architecture documentation is in docs/:
docs/mvc_architecture.md— MVC design, dependency injection, layer boundaries
Test Writer Agent (Jira Zephyr)
The agents/zephyr package analyses the Python source tree and generates
manual test cases as a CSV file that can be imported directly into
Jira Zephyr Scale (Test Cases → Import → CSV).
Quick start
# Generate Unit + Integration test cases for the shared/ module
python -m agents.zephyr.mcp_server \
--source shared/ \
--level Unit \
--level Integration \
--output zephyr_tests.csv
Or from Python:
from test_writer import TestWriterAgent
agent = TestWriterAgent(
source_paths=["shared/", "ui/handlers/"],
levels=["Unit", "Integration", "System"],
output_csv="zephyr_tests.csv",
)
path = agent.run()
print(f"Generated: {path}")
CLI reference
| Option | Default | Description |
|---|---|---|
--source PATH |
. |
Directory or .py file to scan. Repeatable. |
--level LEVEL |
Unit, Integration |
Testing level: Unit, Integration, System, Smoke, Regression, Acceptance. Repeatable. |
--output FILE |
zephyr_tests.csv |
Output CSV path. |
--root DIR |
cwd |
Repo root for module-name resolution. |
--prefix PREFIX |
Calibration-Statistics-Tool |
Jira component prefix. |
--skip-dir NAME |
— | Directory name to skip. Repeatable. |
CSV format
The generated file follows the Zephyr Scale CSV import schema:
| Column | Description |
|---|---|
| Name | Test case name (e.g. [Unit] shared.models — MyClass) |
| Status | Draft / Approved / Deprecated |
| Priority | High / Medium / Low |
| Component | Jira component (<prefix>/<top-level-package>) |
| Labels | Comma-separated: level, symbol kind, package |
| Precondition | Environment prerequisites |
| Objective | One-sentence description of what is verified |
| Folder | Zephyr folder path (/<Level>/<module/path>) |
| Test Script (Step) | Step action text |
| Test Script (Step Data) | Input data for the step |
| Test Script (Expected Result) | Expected outcome |
License
MIT License - see LICENSE file for details.
Contributing
- Fork the repository
- Create a feature branch
- Make your changes
- Add tests if applicable
- Submit a pull request
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file calibration_statistics_tool-1.0.14.tar.gz.
File metadata
- Download URL: calibration_statistics_tool-1.0.14.tar.gz
- Upload date:
- Size: 1.9 MB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.13.13
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
f9902bcc681ffb28a6527af4c84513994ae303533d47885f31c982ec897611e1
|
|
| MD5 |
337d05cdf49d6186181a854ddaa63c14
|
|
| BLAKE2b-256 |
3bcc1016c0581731fe88f6e9b06d9c30c5cffcf2fc3773f8d7e26b7b17f4d608
|
File details
Details for the file calibration_statistics_tool-1.0.14-py3-none-any.whl.
File metadata
- Download URL: calibration_statistics_tool-1.0.14-py3-none-any.whl
- Upload date:
- Size: 1.8 MB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.13.13
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
8e7bafc3c53bb9f0d4ae8d7ffd2e23218bede3d4edac34ce6fb26aeb6fb755a4
|
|
| MD5 |
46c6e28773692f6adb4069dd4bae3023
|
|
| BLAKE2b-256 |
19f1470aa715b2228a7fd29f9f3a90924c0f0ac30a25d16b1e6e786e129ddfe5
|