Exemple #1
0
	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
Exemple #2
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
Exemple #3
0
    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
Exemple #4
0
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
Exemple #5
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
Exemple #6
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
Exemple #7
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)
Exemple #9
0
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