Source code for irisreader.coalignment.iris_sji_raster

#!/usr/bin/env python3

"""
functions for coalignment of SJI and raster data
"""

import numpy as np
import pandas as pd
from functools import lru_cache

# internal function to sort steps of an observation in a dataframe
@lru_cache(maxsize=64)
def sort_steps( raster, sji ):
    rts = raster.get_timestamps()
    sts = sji.get_timestamps()
    df = pd.DataFrame({
        'timestamp': np.hstack([rts, sts]),
        'origin': np.hstack([['raster']*len(rts), ['sji']*len(sts)]),
        'step': np.hstack([np.arange(len(rts)), np.arange(len(sts))])
    })
    df = df.set_index('timestamp').sort_index()
    return df

[docs]@lru_cache(maxsize=64) def find_closest_raster( raster, sji ): """ Finds closest raster steps to sji steps for a given raster and sji object. Parameters ---------- raster : irisreader.raster_cube raster_cube instance sji : irisreader.sji_cube sji_cube_instance Returns ------- raster_steps : numpy.array array with closest raster steps """ # sort steps df = sort_steps( raster, sji ) # get available sji steps raster_steps = [] for sji_step in range(sji.n_steps): # timestamp of sji sji_tstamp = df[(df.origin=='sji') & (df.step==sji_step)].index.values[0] # get closest rasters on both sides below = df[(df.origin=='raster') & (df.index<=sji_tstamp)].tail(1) above = df[(df.origin=='raster') & (df.index>sji_tstamp)].head(1) candidates = pd.concat( [below, above], axis=0 ) # append closest raster step of both raster_steps.append( candidates.step.values[np.argmin(np.abs(candidates.index - sji_tstamp))] ) return np.array(raster_steps)
[docs]@lru_cache(maxsize=64) def find_closest_sji( raster, sji ): """ Finds closest sji steps to raster steps for a given sji and raster object. Parameters ---------- raster : irisreader.raster_cube raster_cube instance sji : irisreader.sji_cube sji_cube_instance Returns ------- sji_steps : numpy.array array with closest sji steps """ return find_closest_raster( sji, raster )