Visual showcase of rbvfit2 capabilities with example outputs and use cases.
This gallery demonstrates the range of absorption line systems rbvfit2 can analyze, from simple single-component fits to complex multi-instrument joint analysis.
Example: example_voigt_model.py
Figure: Basic MgII doublet synthetic spectrum
Use Case: Understanding Voigt profile shapes and doublet ratios
Key Features:
- Automatic doublet ratio (2:1 for MgII)
- Component velocity separation
- Instrumental convolution effects
Example: example_voigt_model.py - Multi-ion function
Figure: Multiple ion species absorption
Use Case: Multi-phase absorption analysis
Key Features:
- Automatic parameter tying for same redshift
- Multiple transition families
- Physical velocity component sharing
Example: example_voigt_fitter.py
Figure: Complete fitting workflow result
Use Case: Standard single-system absorption line fitting
Key Features:
- Multi-transition fitting
- Component decomposition
- Residual analysis
- Parameter uncertainty visualization
Figure: MCMC parameter correlations
Use Case: Understanding parameter degeneracies and uncertainties
Example: rbvfit2-single-instrument-tutorial.py
Figure: Complex velocity structure
Use Case: Resolving complex kinematic structure
Key Features:
- Multiple velocity components
- Component velocity determination
- Kinematic interpretation
- Individual component properties
Use Case: Verifying MCMC convergence quality
Example: rbvfit2-multi-instrument-tutorial.py
Figure: Multi-instrument comparison
Expected plot: Comparison figure showing:
- XShooter data (higher resolution)
- FIRE data (lower resolution)
- Joint best-fit model
- Residuals for each instrument
- Combined chi-squared statistics
Use Case: Combining data from different telescopes/instruments
Key Features:
- Shared physical parameters
- Different instrumental resolutions
- Joint uncertainty estimation
- Cross-validation between datasets
Figure: Ion-specific velocity plots
Expected plot: Velocity-space representation showing:
- Absorption profiles in velocity coordinates
- Component positions marked
- Multiple ions overlaid
- Kinematic interpretation aids
Use Case: Physical interpretation of absorption kinematics
Example: rbvfit2-multi-instrument-tutorial2.py
Figure: Complete contamination analysis
Expected plot: Multi-panel complex system showing:
- Full spectral range with multiple systems
- Individual system contributions
- System-by-system decomposition
- Redshift identification
Use Case: Analyzing complex contaminated absorption
Key Features:
- Multiple redshift systems
- Different ion species
- Automatic line identification
- Contamination handling
Figure: Individual system analysis
Expected plot: System-by-system breakdown showing:
- CIV system at z=4.95 (background)
- OI system at z=6.07 (foreground)
- SiII system at z=6.07 (foreground)
- Parameter sharing within redshift groups
Use Case: Understanding complex absorption line regions
Example: Mixed from fitting method examples
Figure: Method comparison
Expected plot: Side-by-side comparison showing:
- Quick fit results (left panels)
- MCMC fit results (right panels)
- Parameter value comparison
- Uncertainty comparison
- Computational time comparison
Use Case: Choosing appropriate fitting method
Key Insights:
- Quick fit: seconds, approximate uncertainties
- MCMC fit: minutes, robust uncertainties
- Parameter values typically agree
- MCMC provides correlation information
Figure: Publication-quality results presentation
Expected plot: Multi-panel summary showing:
- Best-fit spectrum with model overlay
- Parameter table with uncertainties
- Corner plot with correlations
- Residual analysis with chi-squared
- Component decomposition
- Velocity structure analysis
Use Case: Publication-ready absorption line analysis
Key Features:
- Professional visualization
- Complete uncertainty analysis
- Physical interpretation aids
- Exportable parameter tables
Figure: Error analysis demonstration
Expected plot: Error visualization showing:
- Parameter uncertainty distributions
- Correlated vs uncorrelated errors
- Confidence intervals on model
- Bootstrap comparison
- Systematic error assessment
Use Case: Understanding and reporting uncertainties
Key Features:
- Full posterior sampling
- Confidence interval calculation
- Error propagation to derived quantities
- Robust uncertainty estimation
Figure: Advanced plotting capabilities
Expected plot: Enhanced visualization showing:
- Velocity plots by ion species
- Component identification markers
- Interactive parameter exploration
- Model component toggles
- Residual inspection tools
Use Case: Detailed results exploration and interpretation
Key Features:
- Ion-specific analysis
- Component identification
- Interactive exploration
- Publication-quality outputs
What: Data vs model comparison When: All fitting examples Interpretation: Visual assessment of fit quality
What: Parameter correlations and distributions When: MCMC fitting examples Interpretation: Parameter degeneracies and uncertainties
What: MCMC convergence assessment When: Long MCMC runs Interpretation: Sampling quality and burn-in
What: Data - model differences
When: All fitting examples
Interpretation: Systematic deviations and fit quality
What: Absorption in velocity space When: Multi-component systems Interpretation: Kinematic structure
What: Individual velocity component contributions When: Multi-component fits Interpretation: Physical component properties
# Navigate to examples directory
cd src/rbvfit/examples/
# Basic model creation
python example_voigt_model.py
# Generates: MgII doublet, multi-ion system plots
# Single system fitting
python example_voigt_fitter.py
# Generates: Fit results, corner plot, convergence diagnostics
# Complex system analysis
python rbvfit2-single-instrument-tutorial.py
# Generates: Multi-component CIV analysis
# Multi-instrument fitting
python rbvfit2-multi-instrument-tutorial.py
# Generates: Joint fitting results, velocity plots
# Complex multi-system
python rbvfit2-multi-instrument-tutorial2.py
# Generates: Multi-redshift system analysis# Save figures instead of displaying
import matplotlib.pyplot as plt
plt.savefig('my_fit_result.pdf', dpi=300, bbox_inches='tight')
# Customize figure size and quality
plt.figure(figsize=(12, 8))
# ... plotting commands ...
plt.savefig('publication_figure.pdf', dpi=300)
# Export parameter tables
results.export_parameter_table('fit_parameters.txt')
results.save('complete_results.h5') # Save everythingAfter running examples, expect to generate:
Plots:
spectrum_fit.pdf- Data vs model comparisoncorner_plot.pdf- Parameter correlationsconvergence.pdf- MCMC diagnosticsvelocity_plots.pdf- Kinematic analysisresiduals.pdf- Fit quality assessment
Data Files:
fit_results.h5- Complete results packageparameters.txt- Parameter tablemodel_spectrum.txt- Best-fit model spectrum
| System Type | Complexity | Example File | Key Features |
|---|---|---|---|
| Single ion, 1 component | Simple | example_voigt_model.py |
Basic concepts |
| Single ion, 2 components | Moderate | example_voigt_fitter.py |
Multi-component |
| Multi-ion, same z | Moderate | example_voigt_model.py |
Parameter tying |
| Single ion, multi-component | Complex | rbvfit2-single-instrument-tutorial.py |
Kinematic analysis |
| Multi-instrument | Complex | rbvfit2-multi-instrument-tutorial.py |
Joint fitting |
| Multi-system | Very Complex | rbvfit2-multi-instrument-tutorial2.py |
Contamination |
Good Fit Indicators:
- Model (red) closely follows data (black)
- Residuals scattered around zero
- χ²/ν ≈ 1.0
- No systematic patterns in residuals
Poor Fit Indicators:
- Large systematic deviations
- χ²/ν >> 1.0 or << 1.0
- Obvious patterns in residuals
- Model doesn't capture line shapes
Parameter Distributions:
- Diagonal: Marginalized parameter distributions
- Narrow peaks: Well-constrained parameters
- Broad distributions: Poorly constrained parameters
- Multiple peaks: Multi-modal posteriors
Parameter Correlations:
- Off-diagonal: Joint parameter distributions
- Diagonal patterns: Strong correlations
- Circular contours: Uncorrelated parameters
- Curved contours: Non-linear correlations
Physical Meaning:
- X-axis: Velocity relative to systemic redshift
- Y-axis: Normalized flux (1.0 = continuum)
- Absorption depth: Column density
- Line width: Doppler parameter
- Line center: Velocity offset
Kinematic Structure:
- Multiple components: Distinct velocity systems
- Broad lines: High turbulence or temperature
- Narrow lines: Low turbulence, possibly thermal
- Velocity separation: Kinematic relationship
- High Resolution: Use
dpi=300or higher - Vector Formats: PDF preferred over PNG for scalability
- Clear Labels: Ensure axis labels and units are clear
- Color Blind Friendly: Use distinguishable colors
- Consistent Style: Match journal requirements
- Interactive Plots: Use for exploration
- Multiple Views: Generate various plot types
- Save Intermediate: Keep analysis checkpoints
- Document Parameters: Include parameter values in plots
- Version Control: Save both plots and generating code
No plots appear:
import matplotlib
matplotlib.use('TkAgg') # or 'Qt5Agg'
import matplotlib.pyplot as plt
plt.show() # Ensure this is calledPoor plot quality:
plt.figure(figsize=(10, 8)) # Larger figure size
plt.savefig('plot.pdf', dpi=300, bbox_inches='tight')Memory issues with large datasets:
# Downsample for plotting
plot_indices = np.arange(0, len(wave), 10) # Every 10th point
plt.plot(wave[plot_indices], flux[plot_indices])# For interactive exploration
%matplotlib widget
import ipywidgets as widgets
# Interactive parameter adjustment
@widgets.interact(N=(12.0, 16.0, 0.1), b=(5.0, 100.0, 5.0), v=(-200.0, 200.0, 10.0))
def plot_model(N=13.5, b=25.0, v=0.0):
theta = [N, b, v]
model_flux = model.evaluate(theta, wave)
plt.figure(figsize=(10, 6))
plt.plot(wave, flux, 'k-', label='Data')
plt.plot(wave, model_flux, 'r-', label='Model')
plt.legend()
plt.show()# Live updating plots during MCMC
def plot_progress(sampler, step):
if step % 100 == 0:
current_samples = sampler.get_chain()
plt.clf()
plt.plot(current_samples[:, :, 0].T, alpha=0.3)
plt.ylabel('Parameter 0')
plt.xlabel('Step')
plt.title(f'MCMC Progress: Step {step}')
plt.pause(0.1)