def is_dendro(file, **kwargs): if is_hdf5(file): import h5py f = h5py.File(file, 'r') return 'data' in f and 'index_map' in f and 'newick' in f elif is_fits(file): from astropy.io import fits with fits.open(file, ignore_missing_end=True) as hdulist: # For recent versions of astrodendro the HDUs have a recongnizable # set of names. if 'DATA' in hdulist and 'INDEX_MAP' in hdulist and 'NEWICK' in hdulist: return True # For older versions of astrodendro, the HDUs did not have names # Here we use heuristics to figure out if this is likely to be a # dendrogram. Specifically, there should be three HDU extensions. # The primary HDU should be empty, HDU 1 and HDU 2 should have # matching shapes, and HDU 3 should have a 1D array. Also, if the # HDUs do have names then this is not a dendrogram since the old # files did not have names # This branch can be removed once we think most dendrogram files # will have HDU names. if len(hdulist) != 4: return False if hdulist[1].name != '' or hdulist[2].name != '' or hdulist[ 3].name != '': return False if hdulist[0].data is not None: return False if hdulist[1].data is None or hdulist[2].data is None or hdulist[ 3].data is None: return False if hdulist[1].data.shape != hdulist[2].data.shape: return False if hdulist[3].data.ndim != 1: return False # We're probably ok, so return True return True else: return False
def is_gridded_data(filename, **kwargs): if is_hdf5(filename): return True if is_fits(filename): from astropy.io import fits with fits.open(filename) as hdulist: return is_image_hdu(hdulist[0]) return False
def gridded_data(filename, format='auto', **kwargs): result = Data() # Try and automatically find the format if not specified if format == 'auto': format = file_format(filename) # Read in the data if is_fits(filename): from astropy.io import fits arrays = extract_data_fits(filename, **kwargs) header = fits.getheader(filename) result.coords = coordinates_from_header(header) elif is_hdf5(filename): arrays = extract_data_hdf5(filename, **kwargs) else: raise Exception("Unkonwn format: %s" % format) for component_name in arrays: comp = Component.autotyped(arrays[component_name]) result.add_component(comp, component_name) return result
def is_dendro(file, **kwargs): if is_hdf5(file): import h5py f = h5py.File(file, 'r') return 'data' in f and 'index_map' in f and 'newick' in f elif is_fits(file): from astropy.io import fits hdulist = fits.open(file, ignore_missing_end=True) # In recent versions of Astropy, we could do 'DATA' in hdulist etc. but # this doesn't work with Astropy 0.3, so we use the following method # instead: try: hdulist['DATA'] hdulist['INDEX_MAP'] hdulist['NEWICK'] except KeyError: pass # continue else: return True # For older versions of astrodendro, the HDUs did not have names # Here we use heuristics to figure out if this is likely to be a # dendrogram. Specifically, there should be three HDU extensions. # The primary HDU should be empty, HDU 1 and HDU 2 should have # matching shapes, and HDU 3 should have a 1D array. Also, if the # HDUs do have names then this is not a dendrogram since the old # files did not have names # This branch can be removed once we think most dendrogram files # will have HDU names. if len(hdulist) != 4: return False if hdulist[1].name != '' or hdulist[2].name != '' or hdulist[3].name != '': return False if hdulist[0].data is not None: return False if hdulist[1].data is None or hdulist[2].data is None or hdulist[3].data is None: return False if hdulist[1].data.shape != hdulist[2].data.shape: return False if hdulist[3].data.ndim != 1: return False # We're probably ok, so return True return True else: return False