Пример #1
0
def migrate_image_files(connection, image_bucket_name, file_bucket_name, s3helper):
    for file_name in glob.glob('/home/ec2-user/galaxyImages/*/*'):
        (name, version, extension) = get_name_version(file_name)

        # Only migrate the images in the original galaxy is still in the database
        galaxy = connection.execute(select([GALAXY]).where(and_(GALAXY.c.name == name, GALAXY.c.version_number == version))).first()
        if galaxy is not None:
            if extension == '.fits':
                add_file_to_bucket1(file_bucket_name, get_key_fits(galaxy[GALAXY.c.name], galaxy[GALAXY.c.run_id], galaxy[GALAXY.c.galaxy_id]), file_name, s3helper)
            else:
                galaxy_key = get_galaxy_file_name(galaxy[GALAXY.c.name], galaxy[GALAXY.c.run_id], galaxy[GALAXY.c.galaxy_id])
                if file_name.endswith('_tn_colour_1.png'):
                    add_file_to_bucket1(image_bucket_name, get_thumbnail_colour_image_key(galaxy_key, 1), file_name, s3helper)
                elif file_name.endswith('_colour_1.png'):
                    add_file_to_bucket1(image_bucket_name, get_colour_image_key(galaxy_key, 1), file_name, s3helper)
                elif file_name.endswith('_colour_2.png'):
                    add_file_to_bucket1(image_bucket_name, get_colour_image_key(galaxy_key, 2), file_name, s3helper)
                elif file_name.endswith('_colour_3.png'):
                    add_file_to_bucket1(image_bucket_name, get_colour_image_key(galaxy_key, 3), file_name, s3helper)
                elif file_name.endswith('_colour_4.png'):
                    add_file_to_bucket1(image_bucket_name, get_colour_image_key(galaxy_key, 4), file_name, s3helper)
                elif file_name.endswith('_mu.png'):
                    add_file_to_bucket1(image_bucket_name, get_build_png_name(galaxy_key, 'mu'), file_name, s3helper)
                elif file_name.endswith('_m.png'):
                    add_file_to_bucket1(image_bucket_name, get_build_png_name(galaxy_key, 'm'), file_name, s3helper)
                elif file_name.endswith('_ldust.png'):
                    add_file_to_bucket1(image_bucket_name, get_build_png_name(galaxy_key, 'ldust'), file_name, s3helper)
                elif file_name.endswith('_sfr.png'):
                    add_file_to_bucket1(image_bucket_name, get_build_png_name(galaxy_key, 'sfr'), file_name, s3helper)
Пример #2
0
def galaxy_parameter_image(bucket, galaxy_key, name):
    """
    Returns base64 string version of galaxy image
    """
    tmp_file = get_temp_file('.png')
    key = get_build_png_name(galaxy_key, name)
    get_file_from_bucket(bucket, key, tmp_file)

    out_file = open(tmp_file, "rb")
    image64 = base64.b64encode(out_file.read())
    out_file.close()

    os.remove(tmp_file)

    return image64
Пример #3
0
def galaxy_parameter_image(bucket, galaxy_key, name):
    """
    Returns base64 string version of galaxy image
    """
    tmp_file = get_temp_file('.png')
    key = get_build_png_name(galaxy_key, name)
    get_file_from_bucket(bucket, key, tmp_file)

    out_file = open(tmp_file, "rb")
    image64 = base64.b64encode(out_file.read())
    out_file.close()

    os.remove(tmp_file)

    return image64
Пример #4
0
def build_png_image_ami():
    """
    Build the images

    :return:
    """
    # First check the galaxy exists in the database
    engine = create_engine(DB_LOGIN)
    connection = engine.connect()
    try:
        query = select([GALAXY]).distinct().where(and_(AREA.c.galaxy_id == GALAXY.c.galaxy_id, AREA.c.update_time >= GALAXY.c.image_time))

        galaxy_count = 0
        s3helper = S3Helper()
        bucket_name = get_galaxy_image_bucket()

        # Start the shutdown signal poller to check when this instance must close
        start_poll()
        galaxy_list = []

        for galaxy in connection.execute(query):
            galaxy_list.append(galaxy)

        total_galaxies = len(galaxy_list)
        processed_galaxies = 0
        processed_print_point = 50

        for galaxy in galaxy_list:

            if processed_galaxies == processed_print_point:
                LOG.info('{0} out of {1} galaxies processed'.format(processed_galaxies, total_galaxies))
                processed_print_point += 50

            processed_galaxies += 1

            LOG.info('Working on galaxy %s', galaxy[GALAXY.c.name])
            array = numpy.empty((galaxy[GALAXY.c.dimension_y], galaxy[GALAXY.c.dimension_x], len(PNG_IMAGE_NAMES)), dtype=numpy.float)
            array.fill(numpy.NaN)

            # Return the rows
            pixel_count = 0
            pixels_processed = 0
            for row in connection.execute(select([PIXEL_RESULT]).where((PIXEL_RESULT.c.galaxy_id == galaxy[GALAXY.c.galaxy_id]) and PIXEL_RESULT.c.x > -1)):
                row__x = row[PIXEL_RESULT.c.x]
                row__y = row[PIXEL_RESULT.c.y]
                pixel_count += 1
                if row[PIXEL_RESULT.c.workunit_id] is not None:
                    pixels_processed += 1

                    # Defend against bad values
                    if row[PIXEL_RESULT.c.mu] is not None:
                        array[row__y, row__x, 0] = row[PIXEL_RESULT.c.mu]
                    if row[PIXEL_RESULT.c.m] is not None:
                        array[row__y, row__x, 1] = row[PIXEL_RESULT.c.m]
                    if row[PIXEL_RESULT.c.ldust] is not None:
                        array[row__y, row__x, 2] = row[PIXEL_RESULT.c.ldust]
                    if row[PIXEL_RESULT.c.sfr] is not None:
                        # the SFR is a log
                        array[row__y, row__x, 3] = math.pow(10, row[PIXEL_RESULT.c.sfr])

            connection.execute(GALAXY.update()
                               .where(GALAXY.c.galaxy_id == galaxy[GALAXY.c.galaxy_id])
                               .values(image_time=datetime.datetime.now(), pixel_count=pixel_count, pixels_processed=pixels_processed))
            galaxy_count += 1

            # Now write the files
            black_rgb = (0, 0, 0)
            for name in PNG_IMAGE_NAMES:
                value = 0
                height = galaxy[GALAXY.c.dimension_y]
                width = galaxy[GALAXY.c.dimension_x]
                idx = 0
                if name == 'mu':
                    idx = 0
                elif name == 'm':
                    idx = 1
                elif name == 'ldust':
                    idx = 2
                elif name == 'sfr':
                    idx = 3

                values = []
                for x in range(0, width - 1):
                    for y in range(0, height - 1):
                        value = array[y, x, idx]
                        if not math.isnan(value) and value > 0:
                            values.append(value)

                values.sort()
                if len(values) > 1000:
                    top_count = int(len(values) * 0.005)
                    top_value = values[len(values) - top_count]
                elif len(values) > 0:
                    top_value = values[len(values) - 1]
                else:
                    top_value = 1
                if len(values) > 1:
                    median_value = values[int(len(values) / 2)]
                elif len(values) > 0:
                    median_value = values[0]
                else:
                    median_value = 1

                sigma = 1 / median_value
                multiplier = 255.0 / math.asinh(top_value * sigma)

                image = Image.new("RGB", (width, height), black_rgb)
                for x in range(0, width - 1):
                    for y in range(0, height - 1):
                        value = array[y, x, idx]
                        if not math.isnan(value) and value > 0:
                            value = int(math.asinh(value * sigma) * multiplier)
                            if value > 255:
                                value = 255
                            red = FIRE_R[value]
                            green = FIRE_G[value]
                            blue = FIRE_B[value]
                            image.putpixel((x, height - y - 1), (red, green, blue))

                file_name = '{0}/image.png'.format(POGS_TMP)
                image.save(file_name)
                s3helper.add_file_to_bucket(bucket_name,
                                            get_build_png_name(get_galaxy_file_name(galaxy[GALAXY.c.name], galaxy[GALAXY.c.run_id], galaxy[GALAXY.c.galaxy_id]),
                                                               name),
                                            file_name)
            if shutdown() is True:
                LOG.info('Spot Instance Terminate Notice received, build_png_image is shutting down')
                break

    except:
        LOG.exception('An exception occurred.')

    finally:
        connection.close()

    LOG.info('Built images for %d galaxies', galaxy_count)
Пример #5
0
            median_value = values[int(len(values) / 2)]
        elif len(values) > 0:
            median_value = values[0]
        else:
            median_value = 1

        sigma = 1 / median_value
        multiplier = 255.0 / math.asinh(top_value * sigma)

        image = Image.new("RGB", (width, height), blackRGB)
        for x in range(0, width - 1):
            for y in range(0, height - 1):
                value = array[y, x, idx]
                if not math.isnan(value) and value > 0:
                    value = int(math.asinh(value * sigma) * multiplier)
                    if value > 255:
                        value = 255
                    red = FIRE_R[value]
                    green = FIRE_G[value]
                    blue = FIRE_B[value]
                    image.putpixel((x, height - y - 1), (red, green, blue))

        file_name = '{0}/image.png'.format(POGS_TMP)
        image.save(file_name)
        s3helper.add_file_to_bucket(bucket_name,
                                    get_build_png_name(get_galaxy_file_name(galaxy[GALAXY.c.name], galaxy[GALAXY.c.run_id], galaxy[GALAXY.c.galaxy_id]),
                                                       name),
                                    file_name)

LOG.info('Built images for %d galaxies', galaxy_count)
Пример #6
0
        else:
            median_value = 1

        sigma = 1 / median_value
        multiplier = 255.0 / math.asinh(top_value * sigma)

        image = Image.new("RGB", (width, height), blackRGB)
        for x in range(0, width - 1):
            for y in range(0, height - 1):
                value = array[y, x, idx]
                if not math.isnan(value) and value > 0:
                    value = int(math.asinh(value * sigma) * multiplier)
                    if value > 255:
                        value = 255
                    red = FIRE_R[value]
                    green = FIRE_G[value]
                    blue = FIRE_B[value]
                    image.putpixel((x, height - y - 1), (red, green, blue))

        file_name = '{0}/image.png'.format(POGS_TMP)
        image.save(file_name)
        s3helper.add_file_to_bucket(
            bucket_name,
            get_build_png_name(
                get_galaxy_file_name(galaxy[GALAXY.c.name],
                                     galaxy[GALAXY.c.run_id],
                                     galaxy[GALAXY.c.galaxy_id]), name),
            file_name)

LOG.info('Built images for %d galaxies', galaxy_count)