frinZrs
Rust version of frinZ.py - A high-performance fringe-fitting tool for VLBI data analysis.
Original Python version: https://github.com/M-AKIMOTOO/frinZ.py
Overview
frinZrs is a Rust implementation of the frinZ fringe-fitting tool for processing Very Long Baseline Interferometry (VLBI) correlation data. It provides accurate delay and rate measurements with enhanced performance compared to the original Python version.
Features
- Fringe fitting analysis for VLBI correlation data (.cor files)
- Phase reference calibration with polynomial fitting
- Precise search mode with iterative refinement
- RFI mitigation with frequency range exclusion
- Bandpass calibration with binary file support
- Visualization with delay/rate plots and cumulative SNR plots
- Multiple output formats (text, binary, plots)
- Cross-power spectrum analysis
- Pulsar gating analysis with dedispersion, folding, and gating reports
Installation
From Source
# Clone the repository
# Install to ~/.cargo/bin
# OR
Development Build
# Run directly
# OR
Note: Both frinZ and frinZ-rs are identical programs. On Windows, antivirus software may flag the compiled binary.
Usage
Basic Syntax
Input Options
Single File Analysis
# Basic fringe fitting
# With integration time and loop count
# Skip first 10 seconds
Phase Reference Analysis
# Basic phase referencing (calibrator, target)
# With fit_spec and custom integration times
# Arguments: calibrator target fit_spec cal_length target_length loop
# fit_spec: <deg>, sin, <deg>+sin, <deg>+sin:<period_sec>
Analysis Options
Frequency Domain Analysis
# Cross-power spectrum instead of fringe
Precise Search Mode
# Enable iterative search with custom iterations
# With search windows
Manual Corrections
# Apply delay and rate corrections
RFI Mitigation
# Exclude frequency ranges (MHz)
Bandpass Calibration
# Generate bandpass table
# Apply existing bandpass calibration
Output Options
Text Output
# Save analysis results to text files
# Show header information
Plotting
# Generate fringe plots
# Time series plots
# Cumulative SNR plots
Advanced Examples
Complete Analysis with All Options
Phase Reference with Custom Parameters
Pulsar Gating Analysis
Outputs (CSV + PNG) are written under frinZ/pulsar_gating next to the input file:
*_raw_time_series.*– frequency-integrated amplitudes without DM correction*_dedispersed_time_series.*– dedispersed, frequency-integrated amplitude vs time*_mean_spectrum.*– time-integrated spectrum across channels*_dedispersed_spectrum.*– DM 補正後の時間積分スペクトル*_profile.*– folded pulse profile and gating summary*_raw_heatmap.png– amplitude/phase heatmap of the raw spectra (PP × channel)*_dedispersed_heatmap.png– DM 補正後のスペクトル行列(指定した場合のみ)*_phase_resolved_amplitude.png– DM 補正後のパルス位相 vs 振幅プロファイル*_phase_series.png– 周波数積分後の時系列を位相軸に展開した散布図
Output Files
frinZrs creates organized output directories:
frinZ/
├── fringe_graph/ # Delay/rate plots
│ ├── time_domain/
│ └── freq_domain/
├── fringe_output/ # Text analysis results
├── add_plot/ # Time series plots
├── cumulate/ # Cumulative SNR plots
├── bandpass_table/ # Bandpass calibration files
├── phase_reference/ # Phase reference outputs
└── cor_header/ # Header information
Output File Formats
- Text files (
.txt): Analysis results with delay, rate, SNR, and statistics - Binary files (
.bin,.cor): Complex spectra and calibrated data - Plot files (
.png): Visualization of fringe patterns and time series
File Naming Convention
Output files follow the pattern:
{station1}_{station2}_{timestamp}_{source}_{band}_len{length}s[_rfi][_bp]
Example: YAMAGU32_YAMAGU34_2025001120000_3C84_x_len60s_rfi
Command Reference
Required Arguments (one of)
--input <FILE>: Single .cor file for analysis--phase-reference <CAL> <TARGET> [OPTIONS]: Phase referencing mode
Time Parameters
--length <SECONDS>: Integration time (default: entire file)--skip <SECONDS>: Skip time from start (default: 0)--loop <COUNT>: Number of processing loops (default: 1)--cumulate <SECONDS>: Cumulative integration length
Search Parameters
--search: Enable precise search mode--iter <COUNT>: Search iterations (default: 3)--delay-window <MIN MAX>: Delay search range (samples)--rate-window <MIN MAX>: Rate search range (Hz)--delay-correct <VALUE>: Manual delay correction (samples)--rate-correct <VALUE>: Manual rate correction (Hz)
Analysis Options
--frequency: Frequency domain analysis--rfi <"MIN,MAX">: RFI frequency ranges to exclude (MHz)--bandpass <FILE>: Apply bandpass calibration--bandpass-table: Generate bandpass table
Output Options
--output: Save text results--header: Show header information--plot: Generate fringe plots--add-plot: Generate time series plots--cross-output: Output complex visibility data--dynamic-spectrum: Generate dynamic spectrum plots
Performance Notes
frinZrs provides significant performance improvements over the Python version:
- Faster FFT processing using rustfft
- Optimized memory usage for large datasets
- Parallel processing capabilities
- Accuracy comparable to original (within 0.1%)
The minor numerical differences (≤0.1%) compared to frinZ.py arise from:
- Different FFT library implementations (rustfft vs scipy.fft)
- Precision differences in binary decoding (Rust: 7-8 digits, Python: 6 digits)
- DC component handling in FFT processing
License
This program is licensed under the MIT License.
Author
(c) M.AKIMOTO with Gemini in 2025/08/04
Related Projects
- frinZ.py - Original Python implementation