First Example

This example illustrates the basic usage of PHRINGE with a config file (download config file here). For more advanced use cases, see the Advanced Example.

In the following, we will generate and plot a synthetic data set for a double Bracewell nuller in the Emma-X configuration observing an Earth-like exoplanet (with a blackbody spectrum) around a Sun twin at 10 pc.

To create your own instrument or use a custom planet spectrum, have a look at the Custom Instrument and Custom Spectrum tutorials.

Config File

We use the config file to specify the observation, instrument, and astrophysical scene:

from phringe.core.perturbations.power_law_psd_perturbation import PowerLawPSDPerturbation
from phringe.lib.array_configuration import XArrayConfiguration
from phringe.lib.baseline import OptimalNullingBaseline
from phringe.lib.beam_combiner import DoubleBracewell

config = {
    'observation': {
        'solar_ecliptic_latitude': '0 deg',  # Used to determine the local zodi brightness
        'total_integration_time': '4 d',  # Total integration time of the observation
        'detector_integration_time': '0.04 d',  # Results in 200 time steps; use between 100 and 1000
        'modulation_period': '4 d',  # Period of the interferometer modulation, e.g. rotation
        'nulling_baseline': OptimalNullingBaseline(  # Alternatively a fixed value, e.g. '10 m'
            angular_star_separation='habitable-zone',  # Alternatively a numerical value, e.g. '0.1 arcsec'
            wavelength='10 um',
            sep_at_max_mod_eff=DoubleBracewell.sep_at_max_mod_eff[0]
        ),
        'host_star_radius': '1 Rsun',  # Only required as a reference if no star is present in the scene
        'host_star_temperature': '5770 K',  # Only required as a reference if no star is present in the scene
        'host_star_mass': '1 Msun',  # Only required as a reference if no star is present in the scene
        'host_star_distance': '10 pc',  # Only required as a reference if no star is present in the scene
        'host_star_right_ascension': '10 hourangle',  # Only required as a reference if no star is present in the scene
        'host_star_declination': '45 deg',  # Only required as a reference if no star is present in the scene
    },
    'instrument': {
        'array_configuration_matrix': XArrayConfiguration.acm,  # Array configuration; collector position and motion
        'complex_amplitude_transfer_matrix': DoubleBracewell.catm,  # Beam combiner transfer matrix
        'kernels': DoubleBracewell.kernels,  # Kernel matrix
        'aperture_diameter': '3.5 m',
        'nulling_baseline_max': '600 m',
        'nulling_baseline_min': '5 m',
        'spectral_resolving_power': 20,
        'wavelength_min': '4 um',
        'wavelength_max': '18.5 um',
        'wavelength_bands_boundaries': [],
        'throughput': 0.05,
        'quantum_efficiency': 0.7,
        'amplitude_perturbation': PowerLawPSDPerturbation(coefficient=1, rms='0.1%'),
        'phase_perturbation': PowerLawPSDPerturbation(coefficient=1, rms='1.5 nm', chromatic=True),
        'polarization_perturbation': PowerLawPSDPerturbation(coefficient=1, rms='0.001 rad'),
    },
    'scene': {
        'star': {
            'name': 'Sun',
            'distance': '10 pc',
            'mass': '1 Msun',
            'radius': '1 Rsun',
            'temperature': '5700 K',
            'right_ascension': '10 hourangle',
            'declination': '45 deg',
        },
        'exozodi': {
            'level': 3,
        },
        'local_zodi': {},
        'planets': [
            {
                'name': 'Earth',
                'propagate_orbit': False,
                'mass': '1 Mearth',
                'radius': '1 Rearth',
                'temperature': '254 K',
                'semi_major_axis': '1 au',
                'eccentricity': '0',
                'inclination': '0 deg',
                'raan': '0 deg',
                'argument_of_periapsis': '135 deg',
                'true_anomaly': '0 deg',
                'sed_loader': None  # Will generate a blackbody spectrum, see tutorial for custom spectra
            },
            # Add more planets here
            # {
            #     'name': 'Mars',
            #     'mass': '1 Mearth',
            #     'radius': '1 Rearth',
            #     'temperature': '288 K',
            #     'semi_major_axis': '1 au',
            #     'eccentricity': '0',
            #     'inclination': '0 deg',
            #     'raan': '0 deg',
            #     'argument_of_periapsis': '45 deg',
            #     'true_anomaly': '0 deg',
            #     'sed_loader': None
            # },
        ],
    },
}

Python Script