Source code for diviner.formats

from io import StringIO
import os
import diviner
import pandas as pd


[docs]def read_csv_format_file(): fname = os.path.join(diviner.__path__[0], 'data', 'joined_format_file.csv') return pd.read_csv(fname)
[docs]def create_formatdic_for_dataframe(): """Generate format dictionary to be used for pandas.DataFrame.to_string(). Currently not in use, because of DataFrame.to_string bug: https://github.com/pydata/pandas/issues/4158 Saving this part, can be used for when to_string() is being repaired. """ # general formatter def format_general(input, prec_string, type_string): return '{:>{prec}{type}},'.format(input, prec=prec_string, type=type_string) # general float formatter, receiving width and prec as input as well def format_float(input, prec_string): return format_general(input, prec_string, type_string='f') def format_integer(input, prec_string): return format_general(input, prec_string, type_string='d') def date(input): # return '"{:>11}",'.format(input.strip()) return '"%11s",' % input def utc(input): return '"{:>12}",'.format(input.strip()) def jdate(input): return format_float(input, '17.9') def orbit(input): return format_integer(input, '5') def sundist(input): return format_float(input, '7.5') def sunlat(input): return format_float(input, '8.5') def sunlon(input): return format_float(input, '9.5') def sclk(input): return format_float(input, '16.5') def sclatlon(input): return format_float(input, '9.5') def scradalt(input): return format_float(input, '11.5') def elaz_cmd(input): return format_float(input, '7.3') def af(input): return format_integer(input, '4') def orientlatlon(input): return format_float(input, '9.5') def c(input): return format_integer(input, '1') def det(input): return format_integer(input, '3') def vlook(input): return format_float(input, '9.6') def radiance(input): return format_float(input, '10.4') def tb(input): return format_float(input, '8.3') def clatlonemissunzenazi(input): return format_float(input, '9.5') def cloctime(input): return format_float(input, '8.5') def cphase(input): return format_float(input, '9.5') def flag(input): return format_integer(input, '1') def roi(input): return format_integer(input, '4') # this is the formatters dictionary for the dataframe.to_string() call format_dic = {'date': date, 'utc': utc, 'jdate': jdate, 'orbit': orbit, 'sundist': sundist, 'sunlat': sunlat, 'sunlon': sunlon, 'sclk': sclk, 'sclat': sclatlon, 'sclon': sclatlon, 'scrad': scradalt, 'scalt': scradalt, 'el_cmd': elaz_cmd, 'az_cmd': elaz_cmd, 'af': af, 'orientlat': orientlatlon, 'orientlon': orientlatlon, 'c': c, 'det': det, 'vlookx': vlook, 'vlooky': vlook, 'vlookz': vlook, 'radiance': radiance, 'tb': tb, 'clat': clatlonemissunzenazi, 'clon': clatlonemissunzenazi, 'cemis': clatlonemissunzenazi, 'csunzen': clatlonemissunzenazi, 'csunazi': clatlonemissunzenazi, 'cloctime': cloctime, 'qca': flag, 'qge': flag, 'qmi': flag} return format_dic
##### ####### #####
[docs]class Formatter(object): format_list = [(0, 'date', '"{:>11s}"'), (1, 'utc', '"{:>12s}"'), (2, 'jdate', '{:17.9f}'), (3, 'orbit', '{:5d}'), (4, 'sundist', '{:7.5f}'), (5, 'sunlat', '{:8.5f}'), (6, 'sunlon', '{:9.5f}'), (7, 'sclk', '{:016.5f}'), (8, 'sclat', '{:9.5f}'), (9, 'sclon', '{:9.5f}'), (10, 'scrad', '{:11.5f}'), (11, 'scalt', '{:11.5f}'), (12, 'el_cmd', '{:7.3f}'), (13, 'az_cmd', '{:7.3f}'), (14, 'af', '{:4d}'), (15, 'orientlat', '{:9.5f}'), (16, 'orientlon', '{:9.5f}'), (17, 'c', '{:1d}'), (18, 'det', '{:3d}'), (19, 'vlookx', '{:9.6f}'), (20, 'vlooky', '{:9.6f}'), (21, 'vlookz', '{:9.6f}')] subformat_nominal = [ (22, 'radiance', '{:10.4f}'), (23, 'tb', '{:8.3f}'), (24, 'clat', '{:9.5f}'), (25, 'clon', '{:9.5f}'), (26, 'cemis', '{:9.5f}'), (27, 'csunzen', '{:9.5f}'), (28, 'csunazi', '{:9.5f}'), (29, 'cloctime', '{:8.5f}'), ] # for spaceviews subformat_space = [ (22, 'radiance', '{:10.4f}'), (23, 'tb', '{:8.3f}'), (24, 'clat', '{:9.1f}'), (25, 'clon', '{:9.1f}'), (26, 'cemis', '{:9.1f}'), (27, 'csunzen', '{:9.1f}'), (28, 'csunazi', '{:9.1f}'), (29, 'cloctime', '{:8.1f}'), ] # when looking at the solar target, we calculate csunzen and csunazi for the # illumination of the target subformat_solartarget = [ (22, 'radiance', '{:10.4f}'), (23, 'tb', '{:8.3f}'), (24, 'clat', '{:9.1f}'), (25, 'clon', '{:9.1f}'), (26, 'cemis', '{:9.1f}'), (27, 'csunzen', '{:9.5f}'), (28, 'csunazi', '{:9.5f}'), (29, 'cloctime', '{:8.1f}'), ] subformat_nan = [ (22, 'radiance', '{:10.1f}'), (23, 'tb', '{:8.1f}'), (24, 'clat', '{:9.1f}'), (25, 'clon', '{:9.1f}'), (26, 'cemis', '{:9.1f}'), (27, 'csunzen', '{:9.1f}'), (28, 'csunazi', '{:9.1f}'), (29, 'cloctime', '{:8.1f}'), ] subformat_rest = [ (30, 'cphase', '{:9.5f}'), (31, 'roi', '{:4d}'), ] flags = ['o', 'v', 'i', 'm', 'q', 'p', 'e', 'z', 't', 'h', 'd', 'n', 's', 'a', 'b'] for i, flag in enumerate(flags): subformat_rest += [(i+32, flag, '{:1d}')] format_nominal = format_list + subformat_nominal + subformat_rest format_space = format_list + subformat_space + subformat_rest format_solartarget = format_list + subformat_solartarget + subformat_rest format_nan = format_list + subformat_nan + subformat_rest nominal = [i[2] for i in format_nominal] space = [i[2] for i in format_space] solartarget = [i[2] for i in format_solartarget] nan = [i[2] for i in format_nan]