usage
- Command
- Description
- Basic usage
- URL sources
- CSV options
- Two’s complement decoding
- Excel sheets
- Exporting without the GUI
- Loading large file sets
- Environment variables
Command
cicwave --help
Usage: cicwave [OPTIONS] [FILES]...
cicwave: Advanced waveform viewer with PyQtGraph backend.
A high-performance waveform viewer focused on PyQtGraph and Qt6 for advanced
visualization of simulation data.
Supports: .raw, .csv, .tsv, .xlsx, .json, .parquet, .feather, .npz, .h5,
.pkl, .vcd (digital), .iqvsa (LitePoint), .stdf (ATE), .u32 (raw counter
captures), and more.
URL sources:
cicwave https://example.com/data.csv Any http(s) URL works directly
--format json Force format for extension-less
REST endpoints
Pivot:
--pivot spec.yaml Reshape data using pivot spec before viewing
--pivot-info Print unique values per pivot dimension and exit
API sources:
cicwave api.yaml A pivot spec with a 'source:' block fetches its
own data from a JSON REST API (no file needed)
--pivot api.yaml Same, spelled out
Session:
--session plot.cicwave.yaml Load saved session
--export plot.pdf Export image and exit (no GUI)
--export-data out.csv Export plotted data and exit
--session s.yaml --export out.pdf Restore session and export
Globs:
--glob 'data/*.csv' Repeatable, supports ** for recursion
--glob '**/*.raw' Useful on PowerShell which doesn't
auto-expand patterns
Options:
--glob TEXT Glob pattern (repeatable). Supports ** for
recursion. Useful on shells like PowerShell
that don't auto-expand.
--x TEXT X-axis column; else CICWAVE_X; else saved
default; else auto
--sheet TEXT Sheet name for Excel files (default: first
sheet)
--format [csv|tsv|txt|json|xlsx|xls|ods|parquet|feather|html|xml|fwf]
Force the data format for a URL source (e.g.
a REST API endpoint with no file extension).
Ignored for local files, which are always
dispatched by extension.
--pivot TEXT Pivot spec file (YAML/JSON)
--pivot-info Print pivot dimensions and exit
--session TEXT Load session file (.cicwave.yaml)
--export TEXT Export plot to file (PDF/PNG/SVG) and exit
--export-data TEXT Export the plotted wave data (not the image)
to file (CSV/TSV/Parquet/Feather/HDF5) and
exit. Combine with --export to write both.
Headless, like --export.
--csv-sep SEP Override CSV delimiter for all .csv files in
this run (e.g. ';', '|', 'tab'). Disables
auto-sniffing.
--csv-comment STR Strip lines starting with STR from text data
files (e.g. '#', '*', '//'). Pass '' to
disable. Default: '#' for
.dat/.spe/.cou/.chi; off for .csv/.tsv.
--twos-complement W Decode integer columns as W-bit 2's
complement after load.
--twos-complement-cols LIST Comma-separated column names for --twos-
complement (default: all except
time/frequency sweep columns).
--color / --no-color Enable/Disable color output
--debug Enable debug logging
--help Show this message and exit.
See the full option list on the home page.
Description
cicwave opens an interactive waveform viewer for one or more data files,
local or remote. Files are dispatched by extension; anything unrecognised
falls through to the ngspice .raw reader, so non-standard suffixes on
ngspice output (.raw0, .bin, …) usually still work.
Basic usage
Open a single file:
cicwave data.raw
Open multiple files at once:
cicwave sim1.csv sim2.csv results.xlsx
Open many files with a glob pattern. --glob is repeatable and supports
** for recursion — useful on shells like PowerShell that don’t
auto-expand wildcards for external commands:
cicwave --glob "results/*.csv" --glob "**/*.raw"
Positional arguments containing glob metacharacters (* ? [) are expanded
the same way, so cicwave path/*.raw also works if a file named literally
path/*.raw doesn’t exist.
Pick the X-axis column explicitly:
cicwave data.csv --x time
If --x is omitted, cicwave falls back to the CICWAVE_X environment
variable, then a saved default, then auto-detection.
URL sources
Any http:///https:// URL works wherever a local path does:
cicwave https://raw.githubusercontent.com/owid/co2-data/master/owid-co2-data.csv
For a REST endpoint with no file extension, force the format with
--format:
cicwave https://api.example.com/v1/measurements --format json
See URL sources for the full reference (supported formats, fetch behavior, security notes).
CSV options
Force a delimiter (disables auto-sniffing for the run):
cicwave --csv-sep ';' european_data.csv
cicwave --csv-sep tab measurements.csv
Strip comment lines from text files (.csv, .tsv, .dat, .spe,
.cou, .chi):
cicwave --csv-comment '#' results.csv # strip '#' banners
cicwave --csv-comment '*' spice_log.csv # SPICE-style comments
cicwave --csv-comment '//' c_style_dump.csv # multi-char marker
cicwave --csv-comment '' eldo.cou # disable default for .cou
By default, comment stripping is on (#) for .dat/.spe/.cou/.chi
files and off for .csv/.tsv.
Two’s complement decoding
Decode integer columns as signed two’s complement after load — useful for raw ADC codes:
cicwave --twos-complement 12 adc_codes.csv
cicwave --twos-complement 10 --twos-complement-cols ADC_A,ADC_B data.csv
--twos-complement-cols defaults to every non-time/frequency column.
Excel sheets
cicwave data.xlsx --sheet "Sheet2"
Exporting without the GUI
Export a plot image straight to a file — useful in scripts and CI:
cicwave --session mysession.cicwave.yaml --export plot.pdf
Export the plotted data instead of (or alongside) the image — one
column per (X, Y) pair, format from the extension (.csv, .tsv,
.parquet, .feather, .h5):
cicwave --session mysession.cicwave.yaml --export-data plot.csv
cicwave --session mysession.cicwave.yaml --export plot.pdf --export-data plot.csv
This is the same code path as the GUI’s File → Export Data…, so a CI job gets the actual processed numbers (pivoted, two’s-complement decoded, …), not just a picture of them.
See Sessions for the session file format.
Loading large file sets
Files are opened lazily: only the column header is read on open, and the
full data is parsed (with pyarrow when available) the first time a wave
is actually plotted. This makes it practical to drop hundreds of large
CSV/TSV/Excel files into the viewer at once. Selecting “Plot all visible
waves” or “Plot for all files” then triggers the full parse only for the
files you actually plot.
When PyOpenGL is installed (it is by default), the pyqtgraph backend
uses GPU-accelerated rendering, which keeps zoom/pan responsive even with
hundreds of curves on screen. Display-time downsampling (lossless,
viewport-aware) is enabled automatically.
Environment variables
| Variable | Description |
|---|---|
CICWAVE_X |
Default X-axis column name, used when --x is not given |