Data Export and Analysis
Export Formats
Prismo supports multiple export formats for different use cases:
Format |
Use Case |
File Size |
Speed |
|---|---|---|---|
CSV |
Spreadsheets, universal |
Large |
Slow |
Parquet |
Big data, Python analysis |
10-100x smaller |
10x faster |
Touchstone |
Circuit simulators |
Compact |
Fast |
CSV Export
Basic Usage
from prismo import CSVExporter
exporter = CSVExporter(output_dir="./results")
Export Field Data
# Export electromagnetic fields
exporter.export_fields(
filename="fields_t100",
fields={
'Ex': Ex_array,
'Ey': Ey_array,
'Ez': Ez_array,
'Hx': Hx_array,
'Hy': Hy_array,
'Hz': Hz_array,
},
coordinates={'x': x_array, 'y': y_array, 'z': z_array},
metadata={'time': 100e-15, 'wavelength': 1.55e-6}
)
Output columns: x, y, z, Ex, Ey, Ez, Hx, Hy, Hz, |E|, |H|
Export Spectra
exporter.export_spectrum(
filename="transmission_spectrum",
frequencies=freq_array,
spectrum=transmission_array,
metadata={'component': 'S21', 'units': 'linear'}
)
Export S-Parameters
exporter.export_sparameters(
filename="device_sparameters",
frequencies=frequencies,
sparameters={
'S11': s11_array,
'S21': s21_array,
'S12': s12_array,
'S22': s22_array,
},
metadata={'device': 'directional_coupler'}
)
Parquet Export
More efficient for large datasets:
from prismo import ParquetExporter
exporter = ParquetExporter(
output_dir="./results",
compression='snappy' # Options: 'snappy', 'gzip', 'lz4', 'zstd'
)
# Use same API as CSV
exporter.export_fields(...)
exporter.export_spectrum(...)
exporter.export_sparameters(...)
Reading Parquet Files
import polars as pl
# Simple read
df = pl.read_parquet("results/device_sparameters.parquet")
# Lazy read with filtering
df = exporter.read_with_filter(
filepath="results/fields.parquet",
filter_expr=pl.col('frequency_Hz') > 190e12,
columns=['frequency_Hz', 'S21_magnitude']
)
# Process with Polars
transmission_db = -10 * np.log10(df['S21_magnitude'])
Touchstone Export
Standard format for circuit simulators (ADS, HFSS, etc.):
from prismo import export_touchstone
export_touchstone(
filename="device.s2p", # .s2p for 2-port
frequencies=frequencies,
s_matrix=s_matrix, # Shape: (n_freq, n_ports, n_ports)
z0=50.0,
comments=[
"Silicon photonic waveguide",
"Operating wavelength: 1550 nm",
"Simulated with Prismo FDTD"
]
)
The .s2p file can be directly imported into:
Keysight ADS
Ansys HFSS
Cadence
LTspice
Other RF/photonic circuit simulators
Metadata
All exporters support metadata for provenance tracking:
metadata = {
'simulation_id': 'wg_001',
'date': '2025-10-17',
'device': 'silicon_waveguide',
'dimensions': '500nm x 220nm',
'wavelength_range': '1500-1600 nm',
'backend': 'cupy',
'grid_resolution': '20 nm',
'pml_layers': 10,
}
exporter.export_sparameters(..., metadata=metadata)
Metadata is saved as:
Comments in CSV files (header lines starting with
#)Separate JSON file for Parquet (
.meta.json)Comments in Touchstone files (lines starting with
!)
Best Practices
Use Parquet for large datasets: 10-100x smaller files, much faster I/O
Use CSV for small data: Easy to inspect in spreadsheets
Use Touchstone for S-parameters: Standard format for circuit design
Always include metadata: Makes results self-documenting
Compress Parquet files: Use ‘snappy’ for speed, ‘zstd’ for size