Source code for madcubapy.regions.interface
import re
from madcubapy.regions.carta import _import_crtf_roi
from madcubapy.regions.madcuba import _import_mcroi_roi
from madcubapy.regions.ds9 import _import_ds9_roi
from madcubapy.regions.pyroi import _import_pyroi_roi
from madcubapy.regions.patches import _export_roi_as_pyroi
from madcubapy.regions.patches import _export_roi_as_crtf
__all__ = [
'export_roi',
'import_roi',
]
[docs]
def export_roi(
patch,
filename,
format="pyroi",
coord_frame="image",
fitsmap=None,
patch_info=None):
"""
Export a region of interest (ROI) to a specified file format.
Parameters
----------
patch : `~matplotlib.patches.Patch`
Patch object to export.
filename : `str` or `~pathlib.Path`
Path of the output file.
format : `str`, optional
The export format. Options: ``'pyroi'`` (default), ``'crtf'``.
coord_frame : `str`
Coordinate frame to use. Options: ``'world'`` and ``'image'``.
fitsmap : `~madcubapy.io.MadcubaMap` or `~astropy.nddata.CCDData`
Map object used to transform coordinates.
patch_info : `str`
Custom information text to add to the roi file.
"""
match format:
case "pyroi":
_export_roi_as_pyroi(patch, filename, coord_frame, fitsmap, patch_info)
case "crtf":
_export_roi_as_crtf(patch, filename, coord_frame, fitsmap, patch_info)
case _:
raise ValueError(f"Unsupported export format: {format}")
[docs]
def import_roi(
input_file,
fitsmap=None,
log=False,
**kwargs):
"""
Import a RoI file as a matplotlib patch.
Parameters
----------
input_file : `str` or `pathlib.Path`
Path of the .pyroi file to be imported.
fitsmap : `~madcubapy.io.MadcubaMap` or `~astropy.nddata.ccddata.CCDData`
Map object used to transform coordinates.
log : `bool`
If True, print parsed RoI info onscreen.
Returns
-------
patch : `~matplotlib.patches.Patch`
Patch object.
Other Parameters
----------------
**kwargs
Parameters to pass to the `~matplotlib.patches.Patch` class.
"""
# if fitsmap == None:
# print(f"If no CCDData file is set with the fitsmap argument, " \
# + "the ROI parameters will be assumed to be pixels.")
with open(input_file) as f:
lines = f.readlines()
# Matplotlib ROIs
if lines[0].startswith('# Matplotlib'):
# lines[1] for now because there is only one roi per file
data = re.split(r"[(,) ]+", lines[1])
if log: print(data)
patch = _import_pyroi_roi(data, fitsmap, **kwargs)
# MADCUBA ROIs
if lines[0].startswith('// MADCUBA'):
# lines[1] for now because there is only one roi per file
frame = re.split(r"//", lines[1])[1].strip()
system = re.split(r"//", lines[2])[1].strip()
data = re.split(r"[(,) ]+", lines[3])
if log:
print(frame)
print(system)
print(data)
patch = _import_mcroi_roi(data, frame, system, fitsmap, **kwargs)
# CARTA ROIs
if lines[0].startswith('#CRTF'):
# lines[1] for now because there is only one roi per file
data = re.split(r"[\[,\] ]+", lines[1])
if log: print(data)
patch = _import_crtf_roi(data, fitsmap, **kwargs)
# DS9 ROIs
if lines[0].startswith('# Region file format: DS9'):
system = lines[2].strip()
# lines[3] for now because there is only one roi per file
data = re.split(r"[\(),\) ]+", lines[3])
if log:
print(system)
print(data)
patch = _import_ds9_roi(data, system, fitsmap, **kwargs)
return patch