예제 #1
0
    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
예제 #3
0
        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.
예제 #4
0
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
예제 #5
0
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