def setJD(self,jd=None): ''' Configure time domain by specifing a julian day. It will use information on exposure time to build time bins that will be filled when selecting targets. ''' if not jd: site = Site() jd = np.floor(site.JD())+0.5 nightstart = _skysub.jd_sun_alt(self.sunMaxAlt, jd, self.sitelat, self.sitelong) nightend = _skysub.jd_sun_alt(self.sunMaxAlt, jd+0.5, self.sitelat, self.sitelong) self.log.debug('Nigh Start @JD= %.3f # Night End @JD = %.3f'%(nightstart,nightend)) tbin = np.max([np.max(self.sciExpTime),np.max(self.stdExpTime)])*self.nfilters/60./60./24. self.obsTimeBins = np.arange(nightstart,nightend+tbin,tbin) self.obsTimeMask = np.zeros(len(self.obsTimeBins)) self.obsTimeMask[-1] = 1.0 # Marking filled bins session = Session() scheduled = session.query(Program) for target in scheduled: tindex = np.abs(self.obsTimeBins - 2400000.5 - target.slewAt).argmin() self.obsTimeMask[tindex] = 1.0
def setJD(self,options): ''' Configure time domain by specifing a julian day. It will use information on exposure time to build time bins that will be filled when selecting targets. ''' sysconfig = SystemConfig.fromFile(options.config) manager = Manager() site = manager.getProxy(sysconfig.sites[0]) jd = options.JD if not jd: jd = np.floor(site.JD())+0.5 lat = np.array([float(tt) / 60.**i for i,tt in enumerate(str(site['latitude']).split(':'))]) lat[1:] *= lat[0]/np.abs(lat[0]) sitelat = np.sum(lat) long = np.array([float(tt) / 60.**i for i,tt in enumerate(str(site['longitude']).split(':'))]) long[1:] *= long[0]/np.abs(long[0]) sitelong = abs(np.sum(long)/360*24.) print site['latitude'],'->',sitelat print site['longitude'],'->',sitelong nightstart = _skysub.jd_sun_alt(self.sunMaxAlt, jd, sitelat, sitelong) nightend = _skysub.jd_sun_alt(self.sunMaxAlt, jd+0.5, sitelat, sitelong) print('Nigh Start @JD= %.3f # Night End @JD = %.3f'%(nightstart,nightend)) # Creating a 1 minute time bin tbin = self.tbin self.obsTimeBins = np.arange(nightstart,nightend+tbin,tbin) self.obsTimeMask = np.zeros(len(self.obsTimeBins)) self.obsTimeMask[-1] = 1.0 # Marking filled bins session = Session() scheduled = session.query(Program) for target in scheduled: tindex = np.abs(self.obsTimeBins - 2400000.5 - target.slewAt).argmin() self.obsTimeMask[tindex] = 1.0 self.isJD = True
def setJD(self, jd=None): ''' Configure time domain by specifing a julian day. It will use information on exposure time to build time bins that will be filled when selecting targets. ''' if not jd: site = Site() jd = np.floor(site.JD()) + 0.5 nightstart = _skysub.jd_sun_alt(self.sunMaxAlt, jd, self.sitelat, self.sitelong) nightend = _skysub.jd_sun_alt(self.sunMaxAlt, jd + 0.5, self.sitelat, self.sitelong) log.debug('Nigh Start @JD= %.3f # Night End @JD = %.3f' % (nightstart, nightend)) tbin = np.max([np.max(self.sciExpTime), np.max(self.stdExpTime) ]) * self.nfilters / 60. / 60. / 24. self.obsTimeBins = np.arange(nightstart, nightend + tbin, tbin) self.obsTimeMask = np.zeros(len(self.obsTimeBins)) self.obsTimeMask[-1] = 1.0 # Marking filled bins session = Session() scheduled = session.query(Program) for target in scheduled: tindex = np.abs(self.obsTimeBins - 2400000.5 - target.slewAt).argmin() self.obsTimeMask[tindex] = 1.0 self.isJD = True
def main(argv): ''' Main function. Reads input parameters, run scheduler and stores results. ''' from optparse import OptionParser parser = OptionParser() parser.add_option("-m",'--meteorology', help=''' Input file. This file contains weather information. Only clouded nights need be specified. Format is MJD FLAG, where FLAG is 0 - Good night. Less than 0.5 mag extinction (may be skipped) 1 - Thin Cirrus. Between 0.5 and 2 mag extinction. 2 - Cloudy. Between 2 and 4 mag extinction. 3 - Closed.''' ,type="string") parser.add_option("-s", '--savefig',action="store_true", default=False, help="Save images of survey evolution.") parser.add_option("-v", '--verbose',action="store_true", dest="verbose", default=False, help="Don't print status messages to stdout") opt,arg = parser.parse_args(argv) # # Reading input files # _path = os.path.expanduser('~/Develop/SMAPs/coordinatesystemandtiling/') sna_file = os.path.join(_path,'smaps_pointT80norte.dat') ssa_file = os.path.join(_path,'smaps_pointsulT80.dat') #var_file = os.path.join(_path,'../splus_varregions.dat') var_file = os.path.join(_path,'des_sna.dat') # # North and south galactic regions # iis,jjs,ras,decs,rots = np.loadtxt(sna_file,unpack=True,usecols=(0,1,4,5,6)) iin,jjn,ran,decn,rotn = np.loadtxt(ssa_file,unpack=True,usecols=(0,1,4,5,6)) ii = np.array(np.append(iis,iin+iis.max()+10),dtype=int) jj = np.array(np.append(jjs,jjn),dtype=int) ra = np.append(ras,ran) dec = np.append(decs,decn) # # Variability regions # iiv,jjv,rav,decv,rotv = np.loadtxt(var_file,unpack=True,usecols=(0,1,4,5,6)) #ObsSim = SurveySim([ra],[dec],[ii],[jj],1,[0.05]) ObsSim = SurveySim([ra,rav],[dec,decv],[ii,iiv],[jj,jjv],2,[0.05,0.05]) ObsSim.setupSPLUS(1,-1,7) #ObsSim.setupSPLUS(0,10,7,0.05) sinfo = 'surveysim_05.txt' storeImage='amap_%04i.png' #ObsSim = SurveySim(ra,dec,ii,jj,1,[0.03]) MJD_dstart = aux.mjd(2014,01,01) # 01/jan/2014 exptime = [0.003,0.024] MJD = MJD_dstart SurveyLength = 365.*2 # two years top #for MJD in np.arange(MJD_dstart,MJD_dstart+365.*2): cmap = colors.ListedColormap(['black', 'gray', 'green', 'red', 'blue', 'white']) bounds=[0,1,2,3,4,5] norm = colors.BoundaryNorm(bounds, cmap.N) fig = plt.figure() ax1 = fig.add_axes([0,0,1,1]) ax1.axis("off") #ax2 = fig.add_axes([0,0,1,0.5]) #ax2.axis("off") nmap = 0 fp = open(sinfo,'w') #while ( (not ObsSim.allDone()) and (MJD < MJD_dstart+SurveyLength) ) : totalTiles = ObsSim.Tiles()*ObsSim.ntrays while ( ObsSim.obsTiles(0) > 0 ) : nightStart = _skysub.jd_sun_alt(ObsSim.sunMaxAlt,2400000.5+MJD+1.0, ObsSim.sitelat, ObsSim.sitelong) nightEnd = _skysub.jd_sun_alt(ObsSim.sunMaxAlt,2400000.5+MJD+1.5, ObsSim.sitelat, ObsSim.sitelong) ''' ramoon = 0. decmoon = 0. distmoon = 0. rasun = 0. decsun = 0. ramoon,decmoon,distmoon = _skysub.lpmoon(nightStart,ObsSim.sitelat,_skysub.lst(nightStart,ObsSim.sitelong)) ill_frac=0.5*(1.-np.cos(_skysub.subtend(ramoon,decmoon,rasun,decsun))) if ill_frac < 0.95: ''' #print 'Running...' info,queue,queueInfo = ObsSim.makeObs(nightStart,nightEnd) for jj,ii in enumerate(info): if jj < 20: stdscr.addstr(jj,0,'[%2i] - %s'%(jj,ii)) else: break stdscr.refresh() fp.write(queueInfo+'\n') if opt.savefig: map1 = ObsSim.trayImage(0) #map2 = ObsSim.trayImage(1) ax1.cla() ax1.imshow(map1,aspect='auto',interpolation='nearest',cmap=cmap, norm=norm) ax1.annotate( 'Day: %5.0f\nTiles: %5i/%5i'%(MJD-MJD_dstart+1,ObsSim.obsTiles(0),ObsSim.nTiles(0)), rotation=0, xy=(.5, .9), xycoords='axes fraction', horizontalalignment='center', verticalalignment='center', color='w') ''' ax2.cla() ax2.imshow(map2,aspect='auto',interpolation='nearest',cmap=cmap, norm=norm) ax2.annotate( 'Day: %5.0f\nTiles: %5i/%5i'%(MJD-MJD_dstart+1,ObsSim.obsTiles(1),ObsSim.nTiles(1)), rotation=0, xy=(.5, .9), xycoords='axes fraction', horizontalalignment='center', verticalalignment='center', color='w') ''' fig.canvas.draw() #plt.show() #return 0 fig.savefig(storeImage%nmap) nmap += 1 MJD+=1.0 # for ii in queue: # print ii fp.close() fp = open('nvisits','w') for i in range(len(ObsSim.repeatInfo['nobs'])): fp.write('%i %i\n'%(ObsSim.repeatInfo['tile'][i],ObsSim.repeatInfo['nobs'][i])) fp.close() return 0
def main(argv): ''' Main function. Reads input parameters, run scheduler and stores results. ''' from optparse import OptionParser parser = OptionParser() parser.add_option("-s",'--south_pt', help=''' Input file. This file contains the ra dec for all the tiles. The format is the same as the output of tiler.''' ,type="string") parser.add_option("-n",'--north_pt', help=''' Input file. This file contains the ra dec for all the tiles. The format is the same as the output of tiler.''' ,type="string") parser.add_option("-m",'--meteorology', help=''' Input file. This file contains weather information. Only clouded nights need be specified. Format is MJD FLAG, where FLAG is 0 - Good night. Less than 0.5 mag extinction (may be skipped) 1 - Thin Cirrus. Between 0.5 and 2 mag extinction. 2 - Cloudy. Between 2 and 4 mag extinction. 3 - Closed.''' ,type="string") parser.add_option("-v", '--verbose',action="store_true", dest="verbose", default=False, help="Don't print status messages to stdout") opt,arg = parser.parse_args(argv) # # Reading input files # _path = os.path.expanduser('~/Develop/SMAPs/coordinatesystemandtiling/') sna_file = os.path.join(_path,'smaps_pointT80norte.dat') ssa_file = os.path.join(_path,'smaps_pointsulT80.dat') iis,jjs,ras,decs,rots = np.loadtxt(sna_file,unpack=True,usecols=(0,1,4,5,6)) iin,jjn,ran,decn,rotn = np.loadtxt(ssa_file,unpack=True,usecols=(0,1,4,5,6)) ii = np.array(np.append(iis,iin+iis.max()+10),dtype=int) jj = np.array(np.append(jjs,jjn),dtype=int) ra = np.append(ras,ran) dec = np.append(decs,decn) # Store maximum altitude of tiles maxAltit = np.array([_skysub.altit(dec[j],0.,sitelat)[0] for j in range(len(ra))]) iciclo = 0 ncycle = 2 xcycle = 0 ntryes = 400 tryes = 0 obs = np.array([np.zeros(len(ii))==0,np.zeros(len(ii))==0,np.zeros(len(ii))==0,np.zeros(len(ii))==0]) MJD_dstart = aux.mjd(2014,01,01) # 01/jan/2014 exptime = [0.003,0.024] xx = ii.max()+1 yy = jj.max()+1 map = np.zeros(xx*yy).reshape(yy,xx) for i in range(len(ii)): map[jj[i]][ii[i]] = 1.0 xmap = np.array([map,map,map]) cmap = colors.ListedColormap(['black', 'gray', 'red','white','white']) bounds=[0,1,2,3,4] norm = colors.BoundaryNorm(bounds, cmap.N) #plt.plot(ii,jj,'.') fig = plt.figure() ax = fig.add_subplot(1,1,1) #[fig.add_subplot(2,2,0),fig.add_subplot(2,2,1),fig.add_subplot(2,2,2),fig.add_subplot(2,2,3)] ax = fig.add_axes([0,0,1,1]) ax.axis("off") #for i in range(len(obs)): ax.imshow(map,aspect='auto',interpolation='nearest',cmap=cmap, norm=norm) fig.savefig('xmap_%04i.png'%0) nmap = 1 no_obsTray = np.zeros(len(obs)) == 1 fp = open('surveysim_02.dat','w') for MJD in np.arange(MJD_dstart,MJD_dstart+365.*2): nightStart = _skysub.jd_sun_alt(sunMaxAlt,2400000.5+MJD+1.0, sitelat, sitelong) nightEnd = _skysub.jd_sun_alt(sunMaxAlt,2400000.5+MJD+1.5, sitelat, sitelong) ramoon = 0. decmoon = 0. distmoon = 0. rasun = 0. decsun = 0. ramoon,decmoon,distmoon = _skysub.lpmoon(nightStart,sitelat,_skysub.lst(nightStart,sitelong)) ill_frac=0.5*(1.-np.cos(_skysub.subtend(ramoon,decmoon,rasun,decsun))) stdscr.addstr(7, 0, 'Moon illum: %.3f '%(ill_frac)) stdscr.clrtoeol() if ill_frac < 0.95: iciclo = 0 else: iciclo = -1 stdscr.addstr(0,0,'Observations start at JD = %12.2f'%nightStart) stdscr.addstr(1,0,'Observations end at JD = %12.2f'%nightEnd) xnobs=0 if iciclo >= 0: nobs = len(obs[iciclo][obs[iciclo]]) try: obs[iciclo],xnobs,tnobs,emptyObsSlots = make_obs(nightStart,nightEnd,ra,dec,obs[iciclo],exptime[iciclo],maxAltit) fp.write('%10.2f %6.3f %4i %4i '%(nightStart,nightEnd-nightStart,xnobs,tnobs)) xnobs = 0 tnobs = len(emptyObsSlots) if len(emptyObsSlots) > 0: obs[iciclo+1],xnobs,tnobs,emptyObsSlots = make_obs(nightStart,nightEnd,ra,dec,obs[iciclo+1],exptime[iciclo+1],maxAltit) fp.write('%4i %4i\n'%(xnobs,tnobs)) except: #stdscr.addstr(8,0,sys.exc_info()[0]) errinfo = traceback.format_exc(sys.exc_info()[2]).split('\n') for ierr in range(len(errinfo)): stdscr.addstr(11+ierr,0,errinfo[ierr]) pass if nobs == len(obs[iciclo][obs[iciclo]]): no_obsTray[iciclo] = True else: no_obsTray[iciclo] = False if no_obsTray.all(): if tryes > ntryes: break else: tryes+=1 else: fp.write('%10.2f %6.3f %4i %4i 0 0\n'%(nightStart,nightEnd-nightStart,0.,len(np.arange(nightStart,nightEnd,exptime[iciclo])))) stdscr.addstr(7, 20, ' - No observations this night') stdscr.addstr(2, 0, ' Observed %i '%(xnobs)) xjj = jj[np.bitwise_not(obs[iciclo])] xii = ii[np.bitwise_not(obs[iciclo])] for i in range(len(xii)): xmap[iciclo][xjj[i]][xii[i]] = 2.0 xjj = jj[np.bitwise_not(obs[iciclo+1])] xii = ii[np.bitwise_not(obs[iciclo+1])] for i in range(len(xii)): xmap[iciclo+1][xjj[i]][xii[i]] = 2.0 xcycle+=1 #stdscr.addstr(0, 0, "Moving file: {0}".format(filename)) #stdscr.addstr(1, 0, "Total progress: [{1:10}] {0}%".format(progress * 10, "#" * progress)) alldone = np.zeros(ncycle) == 1 for i in range(ncycle): if i == iciclo: start = '--> ' else: start = '--- ' stdscr.addstr(i+3, 0, start+'[Tray: %i] - %4i/%i areas observed'%(i,len(obs[i])-len(obs[i][obs[i]]),len(obs[i]))) alldone[i] = len(obs[i][obs[i]]) == 0 stdscr.refresh() #print '[Ciclo: %i] - %i/%i areas observed'%(i,len(obs[i])-len(obs[i][obs[i]]),len(obs[i])) #for i in range(len(obs)): # ax[i].cla() # ax[i].imshow(xmap[i],aspect='auto',interpolation='nearest',cmap=cmap, norm=norm) ax.cla() ax.imshow(xmap[0]+xmap[1]-1,aspect='auto',interpolation='nearest',cmap=cmap, norm=norm) fig.canvas.draw() if not no_obsTray.all(): fig.savefig('ymap_%04i.png'%nmap) nmap += 1 #plt.plot(ii,jj,'.') if alldone.all(): break fp.close() print 'Observations started in ',MJD_dstart print 'Observations ended in ',MJD print 'Survey took %i days'%(MJD-MJD_dstart) return 0
def main(argv): ''' Main function. Reads input parameters, run scheduler and stores results. ''' from optparse import OptionParser parser = OptionParser() parser.add_option("-s",'--south_pt', help=''' Input file. This file contains the ra dec for all the tiles. The format is the same as the output of tiler.''' ,type="string") parser.add_option("-n",'--north_pt', help=''' Input file. This file contains the ra dec for all the tiles. The format is the same as the output of tiler.''' ,type="string") parser.add_option("-m",'--meteorology', help=''' Input file. This file contains weather information. Only clouded nights need be specified. Format is MJD FLAG, where FLAG is 0 - Good night. Less than 0.5 mag extinction (may be skipped) 1 - Thin Cirrus. Between 0.5 and 2 mag extinction. 2 - Cloudy. Between 2 and 4 mag extinction. 3 - Closed.''' ,type="string") parser.add_option("-v", '--verbose',action="store_true", dest="verbose", default=False, help="Don't print status messages to stdout") opt,arg = parser.parse_args(argv) # # Reading input files # iis,jjs,ras,decs,rots = np.loadtxt(opt.south_pt,unpack=True,usecols=(0,1,4,5,6)) iin,jjn,ran,decn,rotn = np.loadtxt(opt.north_pt,unpack=True,usecols=(0,1,4,5,6)) ii = np.array(np.append(iis,iin+iis.max()+10),dtype=int) jj = np.array(np.append(jjs,jjn),dtype=int) ra = np.append(ras,ran) dec = np.append(decs,decn) iciclo = 0 ncycle = 3 xcycle = 0 ntryes = 400 tryes = 0 obs = np.array([np.zeros(len(ii))==0,np.zeros(len(ii))==0,np.zeros(len(ii))==0,np.zeros(len(ii))==0]) MJD_dstart = 56294.5 exptime = 0.01 xx = ii.max()+1 yy = jj.max()+1 map = np.zeros(xx*yy).reshape(yy,xx) for i in range(len(ii)): map[jj[i]][ii[i]] = 1.0 xmap = np.array([map,map,map]) cmap = colors.ListedColormap(['black', 'gray', 'red', 'blue', 'blue', 'white']) bounds=[0,1,2,3,4,5] norm = colors.BoundaryNorm(bounds, cmap.N) #plt.plot(ii,jj,'.') fig = plt.figure() ax = fig.add_subplot(1,1,1) #[fig.add_subplot(2,2,0),fig.add_subplot(2,2,1),fig.add_subplot(2,2,2),fig.add_subplot(2,2,3)] ax = fig.add_axes([0,0,1,1]) ax.axis("off") #for i in range(len(obs)): ax.imshow(map,aspect='auto',interpolation='nearest',cmap=cmap, norm=norm) fig.savefig('map_%04i.png'%0) nmap = 1 no_obsTray = np.zeros(len(obs)) == 1 for MJD in np.arange(MJD_dstart,MJD_dstart+365.*6): nightStart = _skysub.jd_sun_alt(sunMaxAlt, MJD, sitelat, sitelong) nightEnd = _skysub.jd_sun_alt(sunMaxAlt, MJD+0.5, sitelat, sitelong) ramoon = 0. decmoon = 0. distmoon = 0. rasun = 0. decsun = 0. ramoon,decmoon,distmoon = _skysub.lpmoon(nightStart,sitelat,_skysub.lst(nightStart,sitelong)) ill_frac=0.5*(1.-np.cos(_skysub.subtend(ramoon,decmoon,rasun,decsun))) stdscr.addstr(7, 0, 'Moon illum: %.3f '%(ill_frac)) stdscr.clrtoeol() if ill_frac < 0.25: iciclo = 0 elif ill_frac < 0.75: iciclo = 1 elif ill_frac < 0.95: iciclo = 2 else: iciclo = -1 stdscr.addstr(0,0,'Observations start at JD = %12.2f'%nightStart) stdscr.addstr(1,0,'Observations end at JD = %12.2f'%nightEnd) if iciclo >= 0: nobs = len(obs[iciclo][obs[iciclo]]) if len(obs[iciclo][obs[iciclo]]) > 1: try: obs[iciclo] = make_obs(nightStart,nightEnd,ra,dec,obs[iciclo],exptime) except: pass elif (len(obs[0][obs[0]]) == 0 and len(obs[1][obs[1]]) == 0 and len(obs[2][obs[2]]) == 0 and len(obs[3][obs[3]]) == 0): break if nobs == len(obs[iciclo][obs[iciclo]]): no_obsTray[iciclo] = True else: no_obsTray[iciclo] = False if no_obsTray.all(): if tryes > ntryes: break else: tryes+=1 else: stdscr.addstr(7, 20, ' - No observations this night') xjj = jj[np.bitwise_not(obs[iciclo])] xii = ii[np.bitwise_not(obs[iciclo])] for i in range(len(xii)): xmap[iciclo][xjj[i]][xii[i]] = 2.0 xcycle+=1 #stdscr.addstr(0, 0, "Moving file: {0}".format(filename)) #stdscr.addstr(1, 0, "Total progress: [{1:10}] {0}%".format(progress * 10, "#" * progress)) for i in range(ncycle): if i == iciclo: start = '--> ' else: start = '--- ' stdscr.addstr(i+3, 0, start+'[Tray: %i] - %4i/%i areas observed'%(i,len(obs[i])-len(obs[i][obs[i]]),len(obs[i]))) stdscr.refresh() #print '[Ciclo: %i] - %i/%i areas observed'%(i,len(obs[i])-len(obs[i][obs[i]]),len(obs[i])) #for i in range(len(obs)): # ax[i].cla() # ax[i].imshow(xmap[i],aspect='auto',interpolation='nearest',cmap=cmap, norm=norm) ax.cla() ax.imshow(xmap[0]+xmap[1]+xmap[2]-2,aspect='auto',interpolation='nearest',cmap=cmap, norm=norm) fig.canvas.draw() if not no_obsTray.all(): fig.savefig('map_%04i.png'%nmap) nmap += 1 #plt.plot(ii,jj,'.') print 'Observations started in ',MJD_dstart print 'Observations ended in ',MJD print 'Survey took %i days'%(MJD-MJD_dstart) return 0
def computesunmoon(self) : [ras,decs,dists,toporas,topodecs,xs,ys,zs] = \ _skysub.accusun(self.jd, self.sidereal.val,self.lat) self.SunCoords = celest([ras,decs,self.julian_epoch()]) self.hasun = ha(self.sidereal.val - self.SunCoords.ra.val) [self.altsun,self.azsun,parangsun] = \ _skysub.altit(self.SunCoords.dec.val,self.hasun.val,\ self.lat) self.ztwilight = _skysub.ztwilight(self.altsun) [georam,geodm,geodism,toporam,topodecm,topodistm] = \ _skysub.accumoon(self.jd,self.lat,self.sidereal.val, self.elevsea) self.MoonCoords = celest([toporam,topodecm,self.julian_epoch()]) self.hamoon = ha(self.sidereal.val - self.MoonCoords.ra.val) [self.altmoon,self.azmoon,parangmoon] = \ _skysub.altit(self.MoonCoords.dec.val,self.hamoon.val,\ self.lat) self.sun_moon = _skysub.subtend(self.MoonCoords.ra.val, self.MoonCoords.dec.val,self.SunCoords.ra.val, self.SunCoords.dec.val) # radians self.moonillfrac = 0.5 * (1. - math.cos(self.sun_moon)) self.sun_moon = self.sun_moon * _skysub.DEG_IN_RADIAN self.obj_moon = _skysub.subtend(self.MoonCoords.ra.val, self.MoonCoords.dec.val,self.CoordsOfDate.ra.val, self.CoordsOfDate.dec.val) * _skysub.DEG_IN_RADIAN self.lunsky = _skysub.lunskybright(self.sun_moon, self.obj_moon,0.17,self.altmoon,self.altit,topodistm) [self.barytcor, self.baryvcor] = _skysub.helcor(self.jd,self.CoordsOfDate.ra.val, self.CoordsOfDate.dec.val,self.hanow.val,self.lat,self.elevsea) self.baryjd = self.jd + self.barytcor / _skysub.SEC_IN_DAY # find the jd at the nearest clock-time midnight ... localtimestr = self.calstring(stdz = self.stdz, use_dst = self.use_dst) x = string.split(localtimestr) ymd = x[0] + " " + x[1] + " " + x[2] if float(x[3]) >= 12. : midnstring = ymd + " 23 59 59.99" else : midnstring = ymd + " 0 0 0 " self.jdmid = time_to_jd(midnstring, stdz = self.stdz, \ use_dst = self.use_dst) self.stmid = ra( _skysub.lst(self.jdmid,self.longit)) # elevation correction (in degrees) for horizon depression horiz = math.sqrt(2. * self.elevhoriz / _skysub.EQUAT_RAD) \ * _skysub.DEG_IN_RADIAN setelev = -1. * (0.83 + horiz) hasunset = _skysub.ha_alt(self.SunCoords.dec.val,self.lat,setelev) if hasunset > 900. : self.jdsunset = 1000. # never sets self.jdsunrise = 1000. self.jdcent = 1000. elif hasunset < -900. : self.jdsunset = -1000. # never rises self.jdsunrise = -1000. self.jdcent = -1000. else : self.jdsunset = self.jdmid + _skysub.adj_time(self.SunCoords.ra.val \ + hasunset - self.stmid.val)/24. # initial guess # print "entering jdsunset - self.jdsunset = ",self.jdsunset, self.jdsunset = _skysub.jd_sun_alt(setelev,self.jdsunset,self.lat, \ self.longit) self.jdsunrise = self.jdmid + _skysub.adj_time(self.SunCoords.ra.val \ - hasunset - self.stmid.val)/24. # initial guess self.jdsunrise = _skysub.jd_sun_alt(setelev,self.jdsunrise,self.lat, \ self.longit) self.jdcent = (self.jdsunset + self.jdsunrise) / 2. hatwilight = _skysub.ha_alt(self.SunCoords.dec.val, self.lat, -18.) if hatwilight > 900. : self.jdevetwi = 1000. # never gets dark self.jdmorntwi = 1000. elif hatwilight < -900. : self.jdevetwi = -1000. # never gets light self.jdmorntwi = -1000. else : self.jdevetwi = self.jdmid + _skysub.adj_time(self.SunCoords.ra.val \ + hatwilight - self.stmid.val)/24. # initial guess self.jdevetwi = _skysub.jd_sun_alt(-18.,self.jdevetwi,self.lat, \ self.longit) self.jdmorntwi = self.jdmid + _skysub.adj_time(self.SunCoords.ra.val \ - hatwilight - self.stmid.val)/24. # initial guess self.jdmorntwi = _skysub.jd_sun_alt(-18.,self.jdmorntwi,self.lat, \ self.longit) [ramoonmid,decmoonmid,distmoonmid] = \ _skysub.lpmoon(self.jdmid,self.lat,self.sidereal.val) [minmoonalt,maxmoonalt] = _skysub.min_max_alt(self.lat,decmoonmid) # rough (close enough) check to see if moonrise or moonset occur ... if maxmoonalt < setelev : self.jdmoonrise = -100. # never rises # -1000. is used later to signal non-convergence self.jdmoonset = -100. if minmoonalt > setelev : self.jdmoonrise = 100. # never sets self.jdmoonset = 100. else : hamoonset = _skysub.ha_alt(decmoonmid,self.lat,setelev) tmoonrise = _skysub.adj_time(ramoonmid - hamoonset - self.stmid.val) tmoonset = _skysub.adj_time(ramoonmid + hamoonset - self.stmid.val) self.jdmoonrise = self.jdmid + tmoonrise / 24. self.jdmoonrise = _skysub.jd_moon_alt(setelev,self.jdmoonrise, \ self.lat,self.longit,self.elevsea) self.jdmoonset = self.jdmid + tmoonset / 24. self.jdmoonset = _skysub.jd_moon_alt(setelev,self.jdmoonset,self.lat, \ self.longit,self.elevsea) [self.par_dra,self.par_ddec,self.aber_dra,self.aber_ddec] = \ _skysub.parellipse(self.jd,self.ra.val,self.dec.val,self.equinox, self.lat,self.longit)
def computesunmoon(self): [ras,decs,dists,toporas,topodecs,xs,ys,zs] = \ _skysub.accusun(self.jd, self.sidereal.val,self.lat) self.SunCoords = celest([ras, decs, self.julian_epoch()]) self.hasun = ha(self.sidereal.val - self.SunCoords.ra.val) [self.altsun,self.azsun,parangsun] = \ _skysub.altit(self.SunCoords.dec.val,self.hasun.val,\ self.lat) self.ztwilight = _skysub.ztwilight(self.altsun) [georam,geodm,geodism,toporam,topodecm,topodistm] = \ _skysub.accumoon(self.jd,self.lat,self.sidereal.val, self.elevsea) self.MoonCoords = celest([toporam, topodecm, self.julian_epoch()]) self.hamoon = ha(self.sidereal.val - self.MoonCoords.ra.val) [self.altmoon,self.azmoon,parangmoon] = \ _skysub.altit(self.MoonCoords.dec.val,self.hamoon.val,\ self.lat) self.sun_moon = _skysub.subtend(self.MoonCoords.ra.val, self.MoonCoords.dec.val, self.SunCoords.ra.val, self.SunCoords.dec.val) # radians self.moonillfrac = 0.5 * (1. - math.cos(self.sun_moon)) self.sun_moon = self.sun_moon * _skysub.DEG_IN_RADIAN self.obj_moon = _skysub.subtend( self.MoonCoords.ra.val, self.MoonCoords.dec.val, self.CoordsOfDate.ra.val, self.CoordsOfDate.dec.val) * _skysub.DEG_IN_RADIAN self.lunsky = _skysub.lunskybright(self.sun_moon, self.obj_moon, 0.17, self.altmoon, self.altit, topodistm) [self.barytcor, self.baryvcor] = _skysub.helcor(self.jd, self.CoordsOfDate.ra.val, self.CoordsOfDate.dec.val, self.hanow.val, self.lat, self.elevsea) self.baryjd = self.jd + self.barytcor / _skysub.SEC_IN_DAY # find the jd at the nearest clock-time midnight ... localtimestr = self.calstring(stdz=self.stdz, use_dst=self.use_dst) x = string.split(localtimestr) ymd = x[0] + " " + x[1] + " " + x[2] if float(x[3]) >= 12.: midnstring = ymd + " 23 59 59.99" else: midnstring = ymd + " 0 0 0 " self.jdmid = time_to_jd(midnstring, stdz = self.stdz, \ use_dst = self.use_dst) self.stmid = ra(_skysub.lst(self.jdmid, self.longit)) # elevation correction (in degrees) for horizon depression horiz = math.sqrt(2. * self.elevhoriz / _skysub.EQUAT_RAD) \ * _skysub.DEG_IN_RADIAN setelev = -1. * (0.83 + horiz) hasunset = _skysub.ha_alt(self.SunCoords.dec.val, self.lat, setelev) if hasunset > 900.: self.jdsunset = 1000. # never sets self.jdsunrise = 1000. self.jdcent = 1000. elif hasunset < -900.: self.jdsunset = -1000. # never rises self.jdsunrise = -1000. self.jdcent = -1000. else: self.jdsunset = self.jdmid + _skysub.adj_time(self.SunCoords.ra.val \ + hasunset - self.stmid.val)/24. # initial guess # print "entering jdsunset - self.jdsunset = ",self.jdsunset, self.jdsunset = _skysub.jd_sun_alt(setelev,self.jdsunset,self.lat, \ self.longit) self.jdsunrise = self.jdmid + _skysub.adj_time(self.SunCoords.ra.val \ - hasunset - self.stmid.val)/24. # initial guess self.jdsunrise = _skysub.jd_sun_alt(setelev,self.jdsunrise,self.lat, \ self.longit) self.jdcent = (self.jdsunset + self.jdsunrise) / 2. hatwilight = _skysub.ha_alt(self.SunCoords.dec.val, self.lat, -18.) if hatwilight > 900.: self.jdevetwi = 1000. # never gets dark self.jdmorntwi = 1000. elif hatwilight < -900.: self.jdevetwi = -1000. # never gets light self.jdmorntwi = -1000. else: self.jdevetwi = self.jdmid + _skysub.adj_time(self.SunCoords.ra.val \ + hatwilight - self.stmid.val)/24. # initial guess self.jdevetwi = _skysub.jd_sun_alt(-18.,self.jdevetwi,self.lat, \ self.longit) self.jdmorntwi = self.jdmid + _skysub.adj_time(self.SunCoords.ra.val \ - hatwilight - self.stmid.val)/24. # initial guess self.jdmorntwi = _skysub.jd_sun_alt(-18.,self.jdmorntwi,self.lat, \ self.longit) [ramoonmid,decmoonmid,distmoonmid] = \ _skysub.lpmoon(self.jdmid,self.lat,self.sidereal.val) [minmoonalt, maxmoonalt] = _skysub.min_max_alt(self.lat, decmoonmid) # rough (close enough) check to see if moonrise or moonset occur ... if maxmoonalt < setelev: self.jdmoonrise = -100. # never rises # -1000. is used later to signal non-convergence self.jdmoonset = -100. if minmoonalt > setelev: self.jdmoonrise = 100. # never sets self.jdmoonset = 100. else: hamoonset = _skysub.ha_alt(decmoonmid, self.lat, setelev) tmoonrise = _skysub.adj_time(ramoonmid - hamoonset - self.stmid.val) tmoonset = _skysub.adj_time(ramoonmid + hamoonset - self.stmid.val) self.jdmoonrise = self.jdmid + tmoonrise / 24. self.jdmoonrise = _skysub.jd_moon_alt(setelev,self.jdmoonrise, \ self.lat,self.longit,self.elevsea) self.jdmoonset = self.jdmid + tmoonset / 24. self.jdmoonset = _skysub.jd_moon_alt(setelev,self.jdmoonset,self.lat, \ self.longit,self.elevsea) [self.par_dra,self.par_ddec,self.aber_dra,self.aber_ddec] = \ _skysub.parellipse(self.jd,self.ra.val,self.dec.val,self.equinox, self.lat,self.longit)
def main(argv): ''' Calculates observable area per month. ''' _path = os.path.expanduser('~/Develop/SMAPs/coordinatesystemandtiling/') sna_file = os.path.join(_path,'smaps_pointT80norte.dat') ssa_file = os.path.join(_path,'smaps_pointsulT80.dat') iis,jjs,ras,decs,rots = np.loadtxt(sna_file,unpack=True,usecols=(0,1,4,5,6)) iin,jjn,ran,decn,rotn = np.loadtxt(ssa_file,unpack=True,usecols=(0,1,4,5,6)) print 'Total number of tiles: %i'%(len(iis)+len(iin)) print 'South region tiles: %i'%len(iis) print 'North region tiles: %i'%len(iin) ii = np.array(np.append(iis,iin+iis.max()+10),dtype=int) jj = np.array(np.append(jjs,jjn),dtype=int) ra = np.append(ras,ran) dec = np.append(decs,decn) xx = ii.max()+10 yy = jj.max()+10 ii+=5 jj+=5 fig = py.figure(1)#,figsize=(10,4)) #ax = fig.add_axes([0.05,0.,0.90,1]) #ax.axis("off") map = np.zeros(xx*yy).reshape(yy,xx) for i in range(len(ii)): map[jj[i]][ii[i]] = 1.0 cmap = colors.ListedColormap(['black', 'gray', 'red', 'blue', 'blue', 'white']) bounds=[0,1,2,3,4,5] norm = colors.BoundaryNorm(bounds, cmap.N) month = np.arange(12) ndays = [31,28,31,30,31,30,31,31,30,31,30,31] nmonth = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep','Oct','Nov','Dec'] imm = 1 for mm in month: dateStart = aux.mjd(2014,mm+1,01) dateEnd = aux.mjd(2014,mm+1,ndays[mm]) obshours = 0. for date in np.linspace(dateStart,dateEnd,ndays[mm]): nightStart = _skysub.jd_sun_alt(sunMaxAlt, 2400000.5+date+1.0, sitelat, sitelong) nightEnd = _skysub.jd_sun_alt(sunMaxAlt, 2400000.5+date+1.5, sitelat, sitelong) #print 'Night start: ',nightStart #print 'Night end: ',nightEnd #print 'Duration: %f (hours)'%((nightEnd-nightStart)*24.0) obshours+=(nightEnd-nightStart)*24.0 lst_start = _skysub.lst(nightStart,sitelong)#*360./24. lst_end = _skysub.lst(nightEnd,sitelong)#*360./24. #ha = lst - RA[obsmask] #print 'LST @ Start: %f'%(lst_start) #print 'LST @ end: %f'%(lst_end) obsmask = np.zeros_like(map) == 0 if lst_start < lst_end: obsmask = np.bitwise_and(ra > lst_start*360./24., ra < lst_end*360./24.) else: obsmask1 = ra > lst_start*360./24. obsmask2 = np.bitwise_and(ra > 0.,ra < lst_end*360./24.) obsmask = np.bitwise_or(obsmask1,obsmask2) for i in np.arange(len(ii))[obsmask]: map[jj[i]][ii[i]] = 2 print '%s & %3i & %7.3f & %7.2f \\ \\'%(nmonth[mm],len(map[map>1]),obshours/ndays[mm],obshours) ax = fig.add_subplot(4,3,imm) ax.cla() ax.axis("off") dmap = np.array(map) ax.imshow(dmap,interpolation='nearest',cmap=cmap, norm=norm) ax.set_title(nmonth[imm-1]) #py.show() fig.canvas.draw() #fig.savefig('xmap_%02i.png'%(mm+1)) mask = map > 0 map[mask] = 1.0 imm+=1 #py.show() fig.subplots_adjust(wspace=0.01,hspace=0) py.show() return 0