def read_atl09_ancillary_data(atl09filepath): # Iterate through keys for ancillary data subgroup = '/ancillary_data/' keys = getH5Keys(atl09filepath, subgroup) key_info = get_H5_keys_info(atl09filepath, subgroup) byte_encoded = ['control', 'data_start_utc', 'data_end_utc', 'granule_start_utc', 'granule_end_utc'] # Read each key, put it in pandas df for idx, key in enumerate(keys): data = readAtlH5(atl09filepath, subgroup + '/' + key + '/') if np.isin(key, ['release', 'version']): data = int(data) if np.isin(key, byte_encoded): data = data[0] data = data.decode('utf-8') if key_info[idx][1] != 'Group': if len(key.split('/')) == 1: if idx == 0: df = pd.Series(data, index=[key.split('/')[-1]], dtype=object) else: df = pd.concat( [df, pd.Series(data, index=[key.split('/')[-1]], dtype=object)]) return df
def read_atl03_heights_data(atl03filepath, gt): # Iterate through keys for "Heights" keys = getH5Keys(atl03filepath, gt + '/heights') # Read each key, put it in pandas df for idx, key in enumerate(keys): data = readAtl03H5(atl03filepath, '/heights/' + key, gt) if idx == 0: df = pd.DataFrame(data, columns=[key]) else: df = pd.concat([df, pd.DataFrame(data, columns=[key])], axis=1) return df
def read_atl09_orbit_info(atl09filepath): subgroup = '/orbit_info/' keys = getH5Keys(atl09filepath, subgroup) key_info = get_H5_keys_info(atl09filepath, subgroup) # Read each key, put it in pandas df for idx, key in enumerate(keys): data = readAtlH5(atl09filepath, subgroup + '/' + key + '/') if idx == 0: df = pd.Series(data, index=[key], dtype=object) else: df_key = pd.Series(data, index=[key], dtype=object) df = pd.concat([df, df_key]) return df
def read_atl08_land_segments(atl08filepath, gt): # Iterate through keys for "Land Segments" keys = getH5Keys(atl08filepath, gt + '/land_segments') key_info = get_H5_keys_info(atl08filepath, gt + '/land_segments') # Read each key, put it in pandas df for idx, key in enumerate(keys): data = readAtl03H5(atl08filepath, '/land_segments/' + key, gt) if key_info[idx][1] != 'Group': if idx == 0: df = pd.DataFrame(data, columns=[key.split('/')[-1]]) else: if len(data.shape) == 2: cols = data.shape[1] for idx2 in range(0, cols): df = pd.concat([df,pd.DataFrame(data[:,idx2],columns=\ [key.split('/')[-1] +\ '_' + str(idx2)])], axis=1) else: df = pd.concat([df,pd.DataFrame(data,columns=\ [key.split('/')[-1]])], axis=1) return df
def read_atl09_hr_profile(atl09filepath, gt): # Iterate through keys for "Land Segments" subgroup = 'profile_' + gt[2] + '/high_rate/' keys = getH5Keys(atl09filepath, subgroup) key_info = get_H5_keys_info(atl09filepath, subgroup) # Read each key, put it in pandas df for idx, key in enumerate(keys): data = readAtlH5(atl09filepath, subgroup + '/' + key + '/') if key == 'ds_layers': ds_layers = np.array(data) elif key == 'ds_va_bin_h': ds_va_bin_h = np.array(data) elif key == 'cab_prof': cab_prof = np.array(data) elif key == 'density_pass1': density_pass1 = np.array(data) elif key == 'density_pass2': density_pass2 = np.array(data) else: if key_info[idx][1] != 'Group': if idx == 0: df = pd.DataFrame(data, columns=[key.split('/')[-1]]) else: if len(data.shape) == 2: cols = data.shape[1] for idx2 in range(0, cols): df = pd.concat( [df,pd.DataFrame(data[:,idx2],columns=\ [key.split('/')[-1] +'_' + str(idx2)])],axis=1) else: df = pd.concat( [df,pd.DataFrame(data,columns=\ [key.split('/')[-1]])],axis=1) return df, ds_layers, ds_va_bin_h, cab_prof, density_pass1, density_pass2
def get_H5_keys_info(atl08filepath, gt): keys = getH5Keys(atl08filepath, gt) h = h5py.File(atl08filepath, 'r') key_name = [] key_type = [] key_len = [] for key in keys: try: data = h[gt + '/' + key] kname = str(key) ktype = str(data.dtype) klen = int(len(data)) key_name.append(kname) key_type.append(ktype) key_len.append(klen) except: kname = str(key) ktype = 'Group' klen = 0 key_name.append(kname) key_type.append(ktype) key_len.append(klen) key_info = [list(a) for a in zip(key_name, key_type, key_len)] return key_info