def test_exposure_ranges(self): query = (str(self.baseURL)+ 'select vpo.objid, ra, dec, nuv_mag, fuv_mag, fov_radius, nuv_skybg,' ' fuv_skybg, nuv_fwhm_world, fuv_fwhm_world, vpe.fexptime,' ' vpe.nexptime, fuv_mag_aper_1, fuv_mag_aper_2, fuv_mag_aper_3,' ' fuv_mag_aper_4, fuv_mag_aper_5, fuv_mag_aper_6, fuv_mag_aper_7,' ' nuv_mag_aper_1, nuv_mag_aper_2, nuv_mag_aper_3, nuv_mag_aper_4,' ' nuv_mag_aper_5, nuv_mag_aper_6, nuv_mag_aper_7,' ' fuv_magerr_aper_1, fuv_magerr_aper_2, fuv_magerr_aper_3,' ' fuv_magerr_aper_4, fuv_magerr_aper_5, fuv_magerr_aper_6,' ' fuv_magerr_aper_7, nuv_magerr_aper_1, nuv_magerr_aper_2,' ' nuv_magerr_aper_3, nuv_magerr_aper_4, nuv_magerr_aper_5,' ' nuv_magerr_aper_6, nuv_magerr_aper_7' ' from '+str(self.MCATDB)+'.visitphotoobjall as vpo' ' inner join '+str(self.MCATDB)+'.visitphotoextract' ' as vpe on vpo.photoextractid=vpe.photoextractid inner join' ' '+str(self.MCATDB)+'.fGetNearbyVisitObjEq('+repr(float(self.ra0))+','+ repr(float(self.dec0))+', '+str(self.radius*60.)+ ') as nb on vpo.objid=nb.objid'+str(self.formatURL)) self.assertEqual(gq.exposure_ranges(self.NUV,self.ra0,self.dec0,t0=self.t0,t1=self.t1,detsize=self.detsize),query)
def get_valid_times(band,skypos,trange=None,detsize=1.1,verbose=0,retries=100., skyrange=None): if not np.array(trange).tolist(): trange = [1,1000000000000] if len(np.shape(trange))==2: trange=trange[0] # FIXME: This is probably not an optimally efficient way to check an entire # region of sky for data, but it's not hugely dumb and does work... # Assemble sky positions on a grid within the targeted region. skypos_list = [skypos] if skyrange: for r in np.linspace(skypos[0]-skyrange[0]/2.,skypos[0]+skyrange[0]/2., np.ceil(skyrange[0]/(detsize/2.)),endpoint=True): for d in np.linspace(skypos[1]-skyrange[1]/2., skypos[1]+skyrange[1]/2.,np.ceil(skyrange[1]/(detsize/2.)), endpoint=True): skypos_list += [[r,d]] times = [] for skypos in skypos_list: try: times = (list(times) + list(np.array(gQuery.getArray(gQuery.exposure_ranges( band,skypos[0],skypos[1],t0=trange[0],t1=trange[1], detsize=detsize),verbose=verbose,retries=retries), dtype='float64')[:,0]/tscale)) except IndexError: if verbose: print "No exposure time available at {pos}".format(pos=skypos) return np.array([],dtype='float64') except TypeError: print "Is one of the inputs malformed?" raise except: raise return np.sort(np.unique(times))
def test_exposure_ranges(self): self.assertEqual(gq.exposure_ranges(self.NUV,self.ra0,self.dec0,t0=self.t0,t1=self.t1,detsize=self.detsize),"http://masttest.stsci.edu/portal/Mashup/MashupQuery.asmx/GalexPhotonListQueryTest?query=select distinct time from fGetNearbyAspectEq(176.919525856,0.255696872807,((1.25/2.0)*60.0),766525332995,866526576995) where band='NUV' or band='FUV/NUV' order by time&format=json&timeout={}")
def fGetTimeRanges(band,skypos,trange=None,tscale=1000.,detsize=1.25,verbose=0, maxgap=1.,minexp=1.,retries=100.,predicted=False): """Find the contiguous time ranges within a time range at a specific location. minexp - Do not include exposure time less than this. maxgap - Gaps in exposure longer than this initiate a new time range. detsize - Fiddle with this if you want to exlude the edges of the detector. predicted - Use the aspect solutions to estimate what exposure will be available once the database is fully populated. """ try: if not np.array(trange).tolist(): trange = [1,1000000000000] if len(np.shape(trange))==2: trange=trange[0] times = (np.array(gQuery.getArray(gQuery.exposure_ranges(band, skypos[0],skypos[1],t0=trange[0],t1=trange[1],detsize=detsize, tscale=tscale),verbose=verbose,retries=retries), dtype='float64')[:,0]/tscale if not predicted else get_aspect(band,skypos,trange, tscale=tscale,verbose=verbose)['t']) except IndexError: if verbose: print "No exposure time available at {pos}".format(pos=skypos) return np.array([],dtype='float64') except TypeError: print "Is one of the inputs malformed?" raise except: raise if verbose: print_inline('Parsing '+str(len(times)-1)+' seconds of exposure.: ['+str(trange[0])+', '+str(trange[1])+']') blah = [] for i in xrange(len(times[0:-1])): blah.append(times[i+1]-times[i]) # A drop in data with duration greater than maxgap initiates a # new exposure gaps = np.where(np.array(blah)>maxgap) ngaps = len(gaps[0]) chunks = [] for i in range(ngaps): if not i: chunk = [times[0],times[gaps[0][i]]] elif i==ngaps-1: chunk = [times[gaps[0][i]+1],times[-1]] else: chunk = [times[gaps[0][i]+1],times[gaps[0][i+1]]] # If the duration of this slice is less than minexp, do not # count it as valid exposure. if chunk[1]-chunk[0]<minexp: continue else: chunks.append(chunk) if not ngaps: if times.min()==times.max(): chunks.append([times.min(),times.min()+1]) else: chunks.append([times.min(),times.max()]) return np.array(chunks,dtype='float64')