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') 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