Source code for irisreader.get_lines

#!/usr/bin/env python

# import libraries
import pandas as pd
from irisreader import iris_data_cube, sji_cube, raster_cube

[docs]def get_lines( file_object ): """ Returns the available lines in a raster or SJI file. Both filenames and open iris_data_cube objects are accepted. Parameters ---------- file_object : string or iris_data_cube The function accepts either an open iris_data_cube or the path to the FITS file to assess the lines in the observation. Returns ------- pandas.DataFrame : Data frame with info about available lines. """ # check whether file_object is a filename or an already opened iris_data_cube object if isinstance( file_object, str ): fits_data = iris_data_cube( file_object ) elif isinstance( file_object, iris_data_cube ) or isinstance( file_object, sji_cube ) or isinstance( file_object, raster_cube ): fits_data = file_object else: raise ValueError("Please pass a either a filename or a valid iris_data_cube object.") # check whether the object is a raster or SJI and extract line info if fits_data.type == 'sji': line_info = pd.DataFrame( { 'field': ['FUV1', 'FUV2', 'NUV', 'NUV'], 'wavelength': [1330.0, 1400.0, 2796.0, 2832.0], 'description': ['C II 1330', 'Si IV 1400', 'Mg II h/k 2796', 'Mg II wing 2832'] } ) line_info = line_info[line_info.description == fits_data.line_info].reset_index( drop=True ) line_info = line_info[['field', 'wavelength', 'description']] # make sure line info stays in the right format elif fits_data.type == 'raster': wave_field_keys = [k for k in fits_data.primary_headers.keys() if k.startswith("TDET")] wave_field_values = [fits_data.primary_headers[x] for x in sorted(wave_field_keys)] wave_length_keys = [k for k in fits_data.primary_headers.keys() if k.startswith("TWAVE")] wave_length_values = [round(fits_data.primary_headers[x],1) for x in sorted(wave_length_keys)] wave_text_keys = [k for k in fits_data.primary_headers.keys() if k.startswith("TDESC")] wave_text_values = [fits_data.primary_headers[x] for x in sorted(wave_text_keys)] line_info = pd.DataFrame( {'field': wave_field_values, 'wavelength': wave_length_values, 'description': wave_text_values}, columns=['field', 'wavelength', 'description'] ) # close object again if a string was passed if isinstance( file_object, str ): fits_data.close() return line_info
# MOVE TO TEST if __name__ == "__main__": get_lines( '/home/chuwyler/Desktop/FITS/20140329_140938_3860258481/iris_l2_20140329_140938_3860258481_SJI_1400_t000.fits' ) get_lines( "/home/chuwyler/Desktop/IRISreader/irisreader/data/IRIS_raster_test1.fits" )