def get_sismo_data(ID): """ Retrieve CoRoT timeseries from a local data repository. The output record array has fields 'HJD', 'flux', 'e_flux', 'flag'. @param ID: ID of the target: either an integer (CoRoT ID), an SIMBAD-recognised target name, or a valid CoRoT FITS file @type ID: int or str @return: data, header @rtype: numpy recarray, dict """ #-- data on one target can be spread over multiple files: collect the # data data = [] if isinstance(ID, str) and os.path.isfile(ID): header = pyfits.getheader(ID) times, flux, error, flags = fits.read_corot(ID) data.append([times, flux, error, flags]) else: #-- resolve the target's name: it's either a target name or CoRoT ID. try: ID = int(ID) except ValueError: info = sesame.search(ID, db='S') IDs = [alias for alias in info['alias'] if 'HD' in alias] if len(IDs) != 1: logger.error( "Data retrieval for %s not possible. Reason: no HD number resolved" % (ID)) return ID = IDs[0] #-- collect the files containing data on the target #catfiles = config.glob((os.sep).join(['catalogs','corot','sismo']),'*.fits') fn_sismo = os.path.join(cc.path.ivsdata, 'catalogs', 'corot', 'sismo', '*.fits') catfiles = glob.glob(fn_sismo) catfiles.sort() for catfile in catfiles: try: header = pyfits.getheader(catfile) except IOError: continue if header['starname'] == ID or header['corotid'].replace( ' ', '') == '%s' % (ID): times, flux, error, flags = fits.read_corot(catfile) data.append([times, flux, error, flags]) #-- now make a record array and sort according to times if not data: raise ValueError( 'target {0} not in offline CoRoT data repository'.format(ID)) data = np.hstack(data) data = np.rec.fromarrays(data, dtype=[('HJD', '>f8'), ('flux', '>f8'), ('e_flux', '>f8'), ('flag', 'i')]) sa = np.argsort(data['HJD']) return data[sa], header
def get_exo_data(ID, type_data='white'): """ Retrieve CoRoT timeseries from a remote data repository. The output record array has fields 'HJD', 'flux', 'e_flux', 'flag'. @param ID: ID of the target: either an integer (CoRoT ID), an SIMBAD-recognised target name, or a valid CoRoT FITS file @type ID: int or str @param type_data: 'white' or 'colors' (if available!) @type type_data: str @return: data, header @rtype: numpy recarray, dict """ cat, units, comms = get_exo_catalog() header = None data = [] if isinstance(ID, str) and os.path.isfile(ID): header = pyfits.getheader(ID) times, flux, error, flags = fits.read_corot(ID) data.append([times, flux, error, flags]) else: #-- resolve the target's name: it's either a target name or CoRoT ID. try: ID = int(ID) except ValueError: logger.error( "Data retrieval for %s not possible. Reason: ID not resolved" % (ID)) return None #-- collect the files containing data on the target for filename in cat['FileName'][cat['CoRoT'] == ID]: url = urllib.URLopener() filen, msg = url.retrieve(filename) try: header = pyfits.getheader(filen) except IOError: continue times, flux, error, flags = fits.read_corot(filen, type_data=type_data) url.close() data.append([times, flux, error, flags]) #-- now make a record array and sort according to times if not data: raise ValueError( 'target {0} not in online CoRoT data repository'.format(ID)) data = np.hstack(data) data = np.rec.fromarrays(data, dtype=[('HJD', '>f8'), ('flux', '>f8'), ('e_flux', '>f8'), ('flag', 'i')]) sa = np.argsort(data['HJD']) return data[sa], header
def get_sismo_data(ID): """ Retrieve CoRoT timeseries from a local data repository. The output record array has fields 'HJD', 'flux', 'e_flux', 'flag'. @param ID: ID of the target: either an integer (CoRoT ID), an SIMBAD-recognised target name, or a valid CoRoT FITS file @type ID: int or str @return: data, header @rtype: numpy recarray, dict """ # -- data on one target can be spread over multiple files: collect the # data data = [] if isinstance(ID, str) and os.path.isfile(ID): header = pyfits.getheader(ID) times, flux, error, flags = fits.read_corot(ID) data.append([times, flux, error, flags]) else: # -- resolve the target's name: it's either a target name or CoRoT ID. try: ID = int(ID) except ValueError: info = sesame.search(ID, db="S") IDs = [alias for alias in info["alias"] if "HD" in alias] if len(IDs) != 1: logger.error("Data retrieval for %s not possible. Reason: no HD number resolved" % (ID)) return ID = IDs[0] # -- collect the files containing data on the target # catfiles = config.glob((os.sep).join(['catalogs','corot','sismo']),'*.fits') fn_sismo = os.path.join(cc.path.ivsdata, "catalogs", "corot", "sismo", "*.fits") catfiles = glob.glob(fn_sismo) catfiles.sort() for catfile in catfiles: try: header = pyfits.getheader(catfile) except IOError: continue if header["starname"] == ID or header["corotid"].replace(" ", "") == "%s" % (ID): times, flux, error, flags = fits.read_corot(catfile) data.append([times, flux, error, flags]) # -- now make a record array and sort according to times if not data: raise ValueError("target {0} not in offline CoRoT data repository".format(ID)) data = np.hstack(data) data = np.rec.fromarrays(data, dtype=[("HJD", ">f8"), ("flux", ">f8"), ("e_flux", ">f8"), ("flag", "i")]) sa = np.argsort(data["HJD"]) return data[sa], header
def get_exo_data(ID, type_data="white"): """ Retrieve CoRoT timeseries from a remote data repository. The output record array has fields 'HJD', 'flux', 'e_flux', 'flag'. @param ID: ID of the target: either an integer (CoRoT ID), an SIMBAD-recognised target name, or a valid CoRoT FITS file @type ID: int or str @param type_data: 'white' or 'colors' (if available!) @type type_data: str @return: data, header @rtype: numpy recarray, dict """ cat, units, comms = get_exo_catalog() header = None data = [] if isinstance(ID, str) and os.path.isfile(ID): header = pyfits.getheader(ID) times, flux, error, flags = fits.read_corot(ID) data.append([times, flux, error, flags]) else: # -- resolve the target's name: it's either a target name or CoRoT ID. try: ID = int(ID) except ValueError: logger.error("Data retrieval for %s not possible. Reason: ID not resolved" % (ID)) return None # -- collect the files containing data on the target for filename in cat["FileName"][cat["CoRoT"] == ID]: url = urllib.URLopener() filen, msg = url.retrieve(filename) try: header = pyfits.getheader(filen) except IOError: continue times, flux, error, flags = fits.read_corot(filen, type_data=type_data) url.close() data.append([times, flux, error, flags]) # -- now make a record array and sort according to times if not data: raise ValueError("target {0} not in online CoRoT data repository".format(ID)) data = np.hstack(data) data = np.rec.fromarrays(data, dtype=[("HJD", ">f8"), ("flux", ">f8"), ("e_flux", ">f8"), ("flag", "i")]) sa = np.argsort(data["HJD"]) return data[sa], header