PHISE Documentation#
PHISE (PHotonic Interferometry Simulation for Exoplanets) is a Python package for simulation and analysis of interferometric instruments using layered photonic chips for exoplanet detection.
⚠️ Development Status Warning
PHISE is currently under active development as part of a PhD research project by Vincent Foriel. The package is highly unstable and subject to breaking changes at any time without notice. The API, functionalities, and internal architecture may change significantly as research progresses.
Important notes:
This library is tightly coupled to ongoing thesis work and is not yet production-ready
The
src/analysis/module contains thesis-specific analysis scripts and will be moved to a separate repository when PHISE is publishedDocumentation may not always reflect the current state of the code
Use at your own risk for research purposes only
If you’re visiting this documentation now, please be aware that you’re looking at a work-in-progress research tool.
Overview#
PHISE provides a comprehensive framework for modeling interferometric instruments with photonic beam combiners. The package includes:
High-level classes to model the complete instrument chain: telescopes, interferometer arrays, photonic chips (kernel nullers), detectors, and target scenes
Numerical modules for signal propagation, coordinate transformations, MMI transfer matrices, phase calculations, and detection statistics
Pre-configured architectures like SuperKN for 4-telescope kernel nulling
Visualization tools for transmission maps, projected baselines, null depth analysis, and more
Scientific computing performance via numba JIT compilation and numpy vectorization
Architecture#
The following UML diagram shows the main components and their relationships:
classDiagram
%% Core simulation orchestrator
class Context {
+Interferometer interferometer
+Target target
+Quantity h (hour angle)
+Quantity Δh (time span)
+Quantity Γ (cophasing error)
+bool monochromatic
+str name
+_update_p()
+_update_pf()
+plot_transmission_map()
+plot_projected_baselines()
}
%% Instrument components
class Interferometer {
+Quantity l (latitude)
+Quantity λ (wavelength)
+Quantity Δλ (bandwidth)
+Quantity fov (field of view)
+float η (efficiency)
+List~Telescope~ telescopes
+Chip chip
+Camera camera
+str name
}
class Telescope {
+Quantity a (collecting area)
+Quantity r (position)
+str name
}
class Chip {
<<abstract>>
}
class SuperKN {
+Quantity φ (phase shifters)
+Quantity σ (OPD errors)
+Quantity λ0 (reference wavelength)
+ndarray output_order
+ndarray input_attenuation
+Quantity input_opd
+int nb_raw_outputs
+int nb_processed_outputs
+get_matrices()
+apply_opd()
}
class Camera {
+Quantity e (exposure time)
+bool ideal
+str name
+detect()
}
%% Scene components
class Target {
+Quantity δ (declination)
+Quantity S (spectral flux)
+Quantity m (magnitude)
+CompanionList companions
+str name
+plot()
}
class Companion {
+float c (contrast)
+Quantity ρ (angular separation)
+Quantity θ (parallactic angle)
+str name
}
class CompanionList {
+append()
+extend()
}
%% Numerical modules
class coordinates {
<<module>>
+projected_baselines()
+hour_angle_transform()
}
class signals {
<<module>>
+photon_flux()
+signal_propagation()
}
class phase {
<<module>>
+optical_path_difference()
+phase_screen()
}
class mmi {
<<module>>
+transfer_matrix()
+combiner_output()
}
class test_statistics {
<<module>>
+null_depth()
+detection_statistics()
}
%% Relationships
Context *-- Interferometer : contains
Context *-- Target : observes
Context ..> coordinates : uses
Context ..> signals : uses
Context ..> phase : uses
Interferometer *-- "1..*" Telescope : array of
Interferometer *-- Chip : beam combiner
Interferometer *-- Camera : detector
Chip <|-- SuperKN : implements
Chip ..> mmi : uses
Chip ..> phase : uses
Target *-- CompanionList : has
CompanionList o-- "0..*" Companion : contains
%% Module dependencies
signals ..> coordinates : uses
test_statistics ..> signals : uses
%% Parent references (auto-update pattern)
Telescope --> Interferometer : _parent_interferometer
Chip --> Interferometer : _parent_interferometer
Camera --> Interferometer : _parent_interferometer
Interferometer --> Context : _parent_ctx
Target --> Context : _parent_ctx
Companion --> Target : _parent_target
Key Design Patterns#
Context Auto-Update Pattern: The Context class automatically propagates parameter changes through the instrument chain. When you modify observation parameters (hour angle, target position, etc.), dependent quantities are automatically recomputed.
Units at API Boundaries: All user-facing APIs use astropy.units.Quantity for physical quantities. Internally, values are converted to native Python types for performance in numba-compiled code.
Component Hierarchy:
Contextorchestrates the simulation combining anInterferometerand aTargetInterferometermanages the telescope array, photonic chip, and detectorChipimplementations (likeSuperKN) define the optical architectureNumerical modules provide low-level algorithms for signal processing
Features#
Instrument Modeling#
Multi-telescope interferometer configurations
Photonic kernel nulling architectures (MMI-based beam combiners)
Realistic detector models with quantum efficiency, dark current, and readout noise
Wavelength-dependent transmission and chromatic effects
Scene Modeling#
Target stars with spectral flux and magnitude
Multiple companions with configurable contrast and angular separation
Field-of-view coverage for transmission map analysis
Numerical Simulation#
Projected baseline calculations accounting for Earth rotation
Photon flux propagation through optical chain
Phase and amplitude modulation by photonic circuits
Statistical detection analysis (null depth, SNR, test statistics)
Visualization#
Transmission maps showing null depth across field of view
Projected baseline configurations at different hour angles
Output photon distributions
Temporal response of the instrument
Quick Links#
Installation#
See the Quickstart Guide for installation instructions.
Citation#
If you use PHISE in scientific work, please cite the repository and related publications. Lead author: Vincent Foriel.
Support#
Issues and contributions are welcome on the GitHub repository. Please note the development status warnings above before reporting issues.