Skip to main content

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

  1. Clone the repository:
git clone https://github.com/marjanstojchev/Calibration-Statistics-Tool.git
cd Calibration-Statistics-Tool
  1. Create a virtual environment:
python -m venv .venv
.venv\Scripts\activate  # Windows
source .venv/bin/activate  # Linux/Mac
  1. 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_base and adjust auxiliary.py to 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

  1. Fork the repository
  2. Create a feature branch
  3. Make your changes
  4. Add tests if applicable
  5. Submit a pull request

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distributions

No source distribution files available for this release.See tutorial on generating distribution archives.

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

calibration_statistics_tool-1.0.8-py3-none-any.whl (1.9 MB view details)

Uploaded Python 3

File details

Details for the file calibration_statistics_tool-1.0.8-py3-none-any.whl.

File metadata

File hashes

Hashes for calibration_statistics_tool-1.0.8-py3-none-any.whl
Algorithm Hash digest
SHA256 1c398476fee56dc6f0b40d532e858283c75e4c2bddf5350d004d19c64edbd6bb
MD5 6f6a6877e985080b5d778686d6a7fa2a
BLAKE2b-256 e0e3af24c1986d5e08f655a5186fe76a0912fa090f0af01376e989e40396260e

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page