https://github.com/uvegege/touchstoneparser.jl
https://github.com/uvegege/touchstoneparser.jl
julia touchstone
Last synced: 4 months ago
JSON representation
- Host: GitHub
- URL: https://github.com/uvegege/touchstoneparser.jl
- Owner: uvegege
- License: mit
- Created: 2025-08-12T20:16:28.000Z (11 months ago)
- Default Branch: main
- Last Pushed: 2025-12-14T18:46:38.000Z (6 months ago)
- Last Synced: 2025-12-16T23:45:35.732Z (6 months ago)
- Topics: julia, touchstone
- Language: Julia
- Homepage: https://uvegege.github.io/TouchstoneParser.jl/dev/
- Size: 6.36 MB
- Stars: 2
- Watchers: 1
- Forks: 0
- Open Issues: 1
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
# TouchstoneParser
[](https://uvegege.github.io/TouchstoneParser.jl/dev/)
`TouchstoneParser.jl` is a Julia package for reading [Touchstone](https://ibis.org/touchstone_ver2.1/touchstone_ver2_1.pdf) files.
It implements the specification (versions **1.0, 1.1, 2.0 and 2.1**) and provides a simple API to access data and metadata.
## Notes
While the core functionality has been tested using examples from the official Touchstone specification, it has **not been extensively validated** against a wide variety of real-world files. Contributions or bug reports are welcome.
Another option you can consider is [Touchstone.jl](https://github.com/mpichl87/Touchstone.jl), which to the best of my knowledge is fully functional.
## Features
- [x] Parse Touchstone files in **v1.0, v1.1, v2.0, v2.1** (`read_touchstone`).
- [x] Automatically detect format even if the filename does not contain the `.sNp` extension
- [x] Write Touchstone files in the desired format (`write_touchstone`)
- [x] Handle non-standard versions of the format (e.g., files generated by **HFSS**. Used **skrf** as reference because I didn't found other resources.)
- [x] Support for comments.
- [x] Convenient access to data via `ts.data`, `ts.frequency`, `ts.noise_data`, `ts.noise_frequency`.
## Roadmap
- [ ] Better validation to ensure Touchstone files strictly comply with the official specification.
- [ ] Enhanced customization options for writing files, including units, formatting, and ordering.
- [ ] Batch reading/writing for entire directories of Touchstone files.
## Installation
```julia
] add TouchstoneParser
```
## Usage
It's easy to write and read Touchstone files:
```julia
using TouchstoneParser
# Example 18
f = [2.0, 22.0]
S = [
[[0.95 * cis(deg2rad(-26)), 3.57 * cis(deg2rad(157))];;
[0.04 * cis(deg2rad(76 )), 0.66 *cis(deg2rad(-14))]],
[[0.60 * cis(deg2rad(-144 )), 1.30 * cis(deg2rad(40))];;
[0.14 * cis(deg2rad(40)), 0.56 * cis(deg2rad(-85))]]
]
z0 = [50, 25.0]
noise_f = [4.0, 18.0]
noise_data = [NoiseData(0.7, 0.64 * cis(deg2rad(69)), 19), NoiseData(0.7, 0.46 * cis(deg2rad(-33)), 20)]
TouchstoneParser.write_touchstone("Example.s2p", f, S, z0;
version = "1.0", noise_data = noise_data, noise_f = noise_f, twoportorder = "21_12")
TouchstoneParser.write_touchstone("Example.ts", f, S, z0;
version = "2.1", noise_data = noise_data, noise_f = noise_f, twoportorder = "21_12")
ex_10 = read_touchstone("Example.s2p")
ex_21 = read_touchstone("Example.ts")
```
You can access the data like this:
```julia
ex_21.frequency # Vector of frequencies [ts.units]
ex_21.data # {ts.type} - parameters (Array{ComplexF64,3})
ex_21.noise_frequency # Noise frequency points (if present)
ex_21.noise_data # Noise data (if present)
ex_10.data == stack(S)
ex_21.data == stack(S)
ex_10.noise_data == noise_data
ex_21.noise_data == noise_data
```
## Metadata
It is possible to inspect the metadata of the read file with some key fields of the TSParser struct.
For example, the `comments` field stores tuples containing the line where it was read and a string with the comment. This allows, for example, to extract the variables written in the touchstone by programs such as HFSS or CST using the `simvariables(ts)` function.