Hide keyboard shortcuts

Hot-keys on this page

r m x p   toggle line displays

j k   next/prev highlighted chunk

0   (zero) top of page

1   (one) first highlighted chunk

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63

64

65

66

67

68

69

70

71

72

73

74

75

76

77

78

79

80

81

82

83

84

85

86

87

88

89

90

91

92

93

94

95

96

97

98

99

100

101

102

103

104

105

106

107

108

109

110

111

112

113

114

115

116

117

118

119

120

121

122

123

124

125

126

127

128

129

130

131

132

133

134

135

136

137

138

139

140

141

142

143

144

145

146

147

148

149

150

151

152

153

154

155

156

157

158

159

160

161

162

163

164

165

166

167

168

169

170

171

172

173

174

175

176

177

178

179

180

181

182

183

184

185

186

187

188

189

190

191

192

193

194

195

196

197

198

199

200

201

202

203

204

205

206

207

208

209

210

211

212

213

214

215

216

217

218

219

220

221

222

223

224

225

226

227

228

229

230

231

232

233

234

235

236

237

238

239

240

241

242

243

244

245

#!/usr/local/bin/python 

# encoding: utf-8 

""" 

Documentation for panstamps can be found here: http://panstamps.readthedocs.org/en/stable 

 

Usage: 

panstamps [options] [--width=<arcminWidth>] [--filters=<filterSet>] [--settings=<pathToSettingsFile>] [--downloadFolder=<path>] (warp|stack) <ra> <dec> [<mjdStart> <mjdEnd>] 

panstamps [options] --closest=<beforeAfter> [--width=<arcminWidth>] [--filters=<filterSet>] [--settings=<pathToSettingsFile>] [--downloadFolder=<path>] <ra> <dec> <mjd> 

 

-h, --help show this help message 

-f, --fits download fits (default on) 

-F, --nofits don't download fits (default off) 

-j, --jpeg download jepg (default off) 

-J, --nojpeg don't download jepg (default on) 

-c, --color download color jepg (default off) 

-C, --nocolor don't download color jepg (default on) 

-a, --annotate annotate jpeg (default true) 

-A, --noannotate don't annotate jpeg (default false) 

-t, --transient add a small red circle at transient location (default false) 

-T, --notransient don't add a small red circle at transient location (default true) 

-g, --greyscale convert jpeg to greyscale (default false) 

-G, --nogreyscale don't convert jpeg to greyscale (default true) 

-i, --invert invert jpeg colors (default false) 

-I, --noinvert don't invert jpeg colors (default true) 

--width=<arcminWidth> width of image in arcsec (default 1) 

--filters=<filterSet> filter set to download and use for color image (default gri) 

--downloadFolder=<path> path to the download folder, relative or absolute (folder created where command is run if not set) 

--settings=<pathToSettingsFile> the settings file  

--closest=<beforeAfter> return the warp closest in time to the given mjd. If you want to set a strict time window then pass in a positive or negative time in sec (before | after | secs) 

 

ra right-ascension in sexagesimal or decimal degrees 

dec declination in sexagesimal or decimal degrees 

mjdStart the start of the time-window within which to select images 

mjdEnd the end of the time-window within which to select images 

mjd report the warp closest in time to this mjd 

""" 

################# GLOBAL IMPORTS #################### 

import sys 

import os 

from os.path import expanduser 

os.environ['TERM'] = 'vt100' 

import readline 

import glob 

import pickle 

from docopt import docopt, printable_usage 

from fundamentals import tools, times 

from panstamps.downloader import downloader 

from panstamps.image import image 

# from ..__init__ import * 

 

 

def tab_complete(text, state): 

return (glob.glob(text + '*') + [None])[state] 

 

 

def main(arguments=None): 

""" 

*The main function used when ``cl_utils.py`` is run as a single script from the cl, or when installed as a cl command* 

""" 

# setup the command-line util settings 

su = tools( 

arguments=arguments, 

docString=__doc__, 

logLevel="WARNING", 

options_first=True, 

projectName="panstamps" 

) 

arguments, settings, log, dbConn = su.setup() 

 

# unpack remaining cl arguments using `exec` to setup the variable names 

# automatically 

for arg, val in arguments.iteritems(): 

if arg[0] == "-": 

varname = arg.replace("-", "") + "Flag" 

else: 

varname = arg.replace("<", "").replace(">", "") 

if isinstance(val, str) or isinstance(val, unicode): 

exec(varname + " = '%s'" % (val,)) 

else: 

exec(varname + " = %s" % (val,)) 

if arg == "--dbConn": 

dbConn = val 

log.debug('%s = %s' % (varname, val,)) 

 

if ra: 

try: 

ra = float(ra) 

except: 

if ":" not in ra: 

log.error( 

"ERROR: ra must be in decimal degree or sexagesimal format") 

return 

 

if dec: 

try: 

dec = float(dec) 

except: 

if ":" not in dec: 

log.error( 

"ERROR: dec must be in decimal degree or sexagesimal format") 

return 

 

## START LOGGING ## 

startTime = times.get_now_sql_datetime() 

log.info( 

'--- STARTING TO RUN THE cl_utils.py AT %s' % 

(startTime,)) 

 

# BUILD KEYWORD DICT 

kwargs = {} 

kwargs["log"] = log 

kwargs["settings"] = settings 

kwargs["ra"] = ra 

kwargs["dec"] = dec 

 

# FITS OPTIONS 

kwargs["fits"] = True # DEFAULT 

if fitsFlag == False and nofitsFlag == True: 

kwargs["fits"] = False 

 

# JPEG OPTIONS 

kwargs["jpeg"] = False # DEFAULT 

if jpegFlag == True and nojpegFlag == False: 

kwargs["jpeg"] = True 

 

# COLOR JPEG OPTIONS 

kwargs["color"] = False # DEFAULT 

if colorFlag == True and nocolorFlag == False: 

kwargs["color"] = True 

 

# WIDTH OPTION 

kwargs["arcsecSize"] = 60 

if widthFlag: 

kwargs["arcsecSize"] = float(widthFlag) * 60. 

 

# CHOOSE A FILTERSET 

kwargs["filterSet"] = 'gri' 

if filtersFlag: 

kwargs["filterSet"] = filtersFlag 

 

for i in kwargs["filterSet"]: 

if i not in "grizy": 

log.error( 

"ERROR: the requested filter must be in the grizy filter set") 

return 

 

# WHICH IMAGE TYPE TO DOWNLOAD 

if stack: 

kwargs["imageType"] = "stack" 

if warp: 

kwargs["imageType"] = "warp" 

if closestFlag: 

kwargs["imageType"] = "warp" 

 

# MJD WINDOW 

kwargs["mjdStart"] = mjdStart 

kwargs["mjdEnd"] = mjdEnd 

kwargs["window"] = False 

 

try: 

kwargs["window"] = int(closestFlag) 

except: 

pass 

 

if not kwargs["window"]: 

if mjd and closestFlag == "before": 

kwargs["mjdEnd"] = mjd 

elif mjd and closestFlag == "after": 

kwargs["mjdStart"] = mjd 

else: 

if mjd and kwargs["window"] < 0: 

kwargs["mjdEnd"] = mjd 

elif mjd and kwargs["window"] > 0: 

kwargs["mjdStart"] = mjd 

 

# DOWNLOAD LOCATION 

if downloadFolderFlag: 

home = expanduser("~") 

downloadFolderFlag = downloadFolderFlag.replace("~", home) 

kwargs["downloadDirectory"] = downloadFolderFlag 

 

# xt-kwarg_key_and_value 

 

# DOWNLOAD THE IMAGES 

images = downloader(**kwargs) 

fitsPaths, jpegPaths, colorPath = images.get() 

jpegPaths += colorPath 

 

# POST-DOWNLOAD PROCESS IMAGES 

kwargs = {} 

kwargs["log"] = log 

kwargs["settings"] = settings 

# WIDTH OPTION 

kwargs["arcsecSize"] = 60 

if widthFlag: 

kwargs["arcsecSize"] = float(widthFlag) * 60. 

 

# ANNOTATE JPEG OPTIONS 

kwargs["crosshairs"] = True # DEFAULT 

kwargs["scale"] = True 

if annotateFlag == False and noannotateFlag == True: 

kwargs["crosshairs"] = False # DEFAULT 

kwargs["scale"] = False 

 

# INVERT OPTIONS 

kwargs["invert"] = False # DEFAULT 

if invertFlag == True and noinvertFlag == False: 

kwargs["invert"] = True 

 

# GREYSCALE OPTIONS 

kwargs["greyscale"] = False # DEFAULT 

if greyscaleFlag == True and nogreyscaleFlag == False: 

kwargs["greyscale"] = True 

 

# TRANSIENT DOT OPTIONS 

kwargs["transient"] = False # DEFAULT 

if transientFlag == True and notransientFlag == False: 

kwargs["transient"] = True 

 

for j in jpegPaths: 

kwargs["imagePath"] = j 

 

# kwargs["transient"] = False 

 

# kwargs["invert"] = False 

# kwargs["greyscale"] = False 

oneImage = image(**kwargs) 

oneImage.get() 

 

# CALL FUNCTIONS/OBJECTS 

 

if "dbConn" in locals() and dbConn: 

dbConn.commit() 

dbConn.close() 

## FINISH LOGGING ## 

endTime = times.get_now_sql_datetime() 

runningTime = times.calculate_time_difference(startTime, endTime) 

log.info('-- FINISHED ATTEMPT TO RUN THE cl_utils.py AT %s (RUNTIME: %s) --' % 

(endTime, runningTime, )) 

 

return 

 

 

if __name__ == '__main__': 

main()