def gather_metadata(self, ramean, decmean, dirpath): #logger = logging.getLogger("Panstamps") fitsPaths, jpegPaths, colorPath = downloader( log=logging.getLogger(__name__), settings=False, fits=False, jpeg=True, arcsecSize=75, filterSet='gri', color=True, singleFilters=False, ra=ramean, dec=decmean, imageType="stack", downloadDirectory=dirpath, mjdStart=False, mjdEnd=False, window=False).get() return colorPath
def get(self): """ *get the panstarrs_location_stamps object* """ self.log.debug('starting the ``get`` method') # FOR A SINGLE TRANSIENT if self.transientId: transientId = self.transientId sqlQuery = u""" select t.transientBucketId, t.raDeg,t.decDeg from pesstoObjects p, transientBucketSummaries t where p.transientBucketId = t.transientBucketId and t.transientBucketId = %(transientId)s; """ % locals() # OR THE NEXT 200 TRANSIENTS NEEDING STAMPS else: # GET NEXT 200 TRANSIENTS NEEDING PANSTARRS STAMPS sqlQuery = u""" select * from pesstoObjects p, transientBucketSummaries t where (ps1_map is null or ps1_map not in (0,1)) and p.transientBucketId = t.transientBucketId order by t.transientBucketId desc limit 200; """ % locals() rows = readquery(log=self.log, sqlQuery=sqlQuery, dbConn=self.dbConn) # FOR EACH TRANSIENT DOWNLOAD STAMP TO CACHE DIRECTORY downloadDirectoryPath = self.settings[ "cache-directory"] + "/transients/" for row in rows: transientBucketId = row["transientBucketId"] downloadPath = f"{downloadDirectoryPath}/{transientBucketId}" ra = row["raDeg"] dec = row["decDeg"] fitsPaths, jpegPaths, colorPath = downloader( log=self.log, settings=self.settings, downloadDirectory=downloadPath, fits=False, jpeg=False, arcsecSize=60, filterSet='gri', color=True, singleFilters=False, ra=ra, dec=dec, imageType="stack" # warp | stack ).get() # CHECK FOR FAILED IMAGES AND FLAG IN DATABASE if len(colorPath) == 0 or not colorPath[0]: sqlQuery = u""" update pesstoObjects p, transientBucketSummaries t set p.ps1_map = 0 where p.transientBucketId=t.transientBucketId and (ps1_map is null or ps1_map != 0) and t.decDeg < -40; update pesstoObjects set ps1_map = 2 where transientBucketId = %(transientBucketId)s and ps1_map is null; update pesstoObjects set ps1_map = 2+ps1_map where transientBucketId = %(transientBucketId)s and ps1_map is not null; update pesstoObjects set ps1_map = 0 where transientBucketId = %(transientBucketId)s and ps1_map > 10; """ % locals() writequery(log=self.log, sqlQuery=sqlQuery, dbConn=self.dbConn) continue source = colorPath[0] destination = downloadPath + "/ps1_map_color.jpeg" try: os.rename(source, destination) # DOWNLOAD THE COLOR IMAGE myimage = image(log=self.log, settings=self.settings, imagePath=destination, arcsecSize=60, crosshairs=True, transient=False, scale=True, invert=False, greyscale=False).get() # UPDATE DATABASE FLAG sqlQuery = u""" update pesstoObjects set ps1_map = 1 where transientBucketId = %(transientBucketId)s """ % locals() writequery(log=self.log, sqlQuery=sqlQuery, dbConn=self.dbConn) except: self.log.warning( "Could not process the image %(destination)s" % locals()) self.log.debug('completed the ``get`` method') return None
if not is_cand: continue time.sleep(1. + np.abs(np.random.randn())) # no hurry # locate image try: fits_files, jpeg_files, color_files = downloader( log=log, settings=False, downloadDirectory='./ps1-stamps/', fits=False, jpeg=True, arcsecSize=120, filterSet='gri', color=True, singleFilters=False, ra='%f'%(crd_i.ra.deg,), dec="%f"%(crd_i.dec.deg), imageType="stack", mjdStart=False, mjdEnd=False, window=False ).get() except: continue # there is an undebuggable error here. if not color_files: image_cutout[event_i] = dict(ps1=None) continue # coordinates beyond survey footprint: skip.
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
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