def main():
    args = parser.parse_args()

    catalog = read_catalog(
        max_magnitude=args.max_magnitude,
        max_variability=None,
    )

    img = cam.read(args.inputfile)

    # create catalog of possibly visible stars and planets
    stars_catalog, magnitude = transform_catalog(
        catalog, img.timestamp, cam, min_altitude=args.min_altitude)

    # find blobs in the image
    r, c, s = find_stars(img.data, threshold=args.threshold)
    found_altaz = cam.pixel2horizontal(r, c, img.timestamp)

    # only use blobs with alt > min_altitude
    mask = found_altaz.alt.deg > args.min_altitude
    idx, found = find_matching_stars(stars_catalog, found_altaz[mask])

    print('Simple:  ', calculate_cloudiness_simple(found))
    print('Weighted:', calculate_cloudiness_weighted(magnitude, found))

    # plot that stuff
    fig, ax, plot = plot_img(img)

    add_blobs(
        *cam.horizontal2pixel(stars_catalog[found]),
        np.full(len(stars_catalog), 1.5),
        color='C2',
        ax=ax,
    )
    add_blobs(
        *cam.horizontal2pixel(stars_catalog[~found]),
        np.full(len(stars_catalog), 1.5),
        color='C1',
        ax=ax,
    )
    plt.legend([
        plt.Circle((0, 0), 0, edgecolor='C2', fill=False),
        plt.Circle((0, 0), 0, edgecolor='C1', fill=False),
    ], ['Found Catalog Stars', 'Catalog stars without match'])

    add_zenith_lines(cam, ax=ax)
    add_direction_labels(cam, ax=ax, color='crimson', weight='bold', size=14)
    plt.show()
def test_images():
    from all_sky_cloud_detection.cameras import cta_la_palma as cam
    from all_sky_cloud_detection.catalog import read_catalog, transform_catalog
    from all_sky_cloud_detection.star_detection import find_stars, find_matching_stars
    from all_sky_cloud_detection.calculate_cloudiness import calculate_cloudiness_simple

    images = [
        'tests/resources/cta_images/starry_nomoon.fits.gz',
        'tests/resources/cta_images/starry.fits.gz',
        'tests/resources/cta_images/partly_cloudy.fits.gz',
        'tests/resources/cta_images/cloudy.fits.gz',
    ]

    limits = [
        (0, 0.1),
        (0, 0.2),
        (0.3, 0.7),
        (0.9, 1.0),
    ]

    catalog = read_catalog(
        max_magnitude=cam.max_magnitude,
        max_variability=None,
    )

    for (a, b), path in zip(limits, images):
        img = cam.read(path)

        # create catalog of possibly visible stars and planets
        stars_catalog, magnitude = transform_catalog(
            catalog, img.timestamp, cam, min_altitude=20,
        )

        r, c, s = find_stars(img.data, threshold=cam.threshold)
        found_altaz = cam.pixel2horizontal(r, c, img.timestamp)
        mask = found_altaz.alt.deg > 20

        idx, found = find_matching_stars(
            stars_catalog, found_altaz[mask], max_sep=0.25 * u.deg
        )

        cl = calculate_cloudiness_simple(found)

        assert a <= cl <= b
def find_blobs(img_name, format, threshold):

    if format == 'fits':
        scale = 2**16
    else:
        scale = 2**10
    image = normalize_image(read_fits(img_name), scale=scale)
    row, col, size = find_stars(image, threshold=threshold)

    fig, ax = plt.subplots(1, 1)

    ax.imshow(
        image,
        cmap='gray',
        vmin=np.nanpercentile(image, 1),
        vmax=np.nanpercentile(image, 99),
    )
    add_blobs(row, col, size, ax=ax)
    fig.tight_layout()
    plt.savefig(img_name + '_blobs.pdf', dpi=600)
    return row, col, size
Esempio n. 4
0
)

write_header = True
for path in tqdm(sorted(os.listdir(args.inputdir))):

    img = magic_2018.read(os.path.join(args.inputdir, path))

    if img.data.mean() > 0.030:
        continue

    stars_altaz = transform_catalog(catalog, img.timestamp, magic_2018)
    objects = concatenate(
        [stars_altaz, get_planets(img.timestamp, magic_2018)])
    objects = objects[objects.alt.deg > 5]

    r, c, s = find_stars(img.data, 0.04)
    found_altaz = magic_2018.pixel2horizontal(r, c, img.timestamp)
    mask = found_altaz.alt.deg > 5

    r, c, s = r[mask], c[mask], s[mask]
    found_altaz = found_altaz[mask]

    idx, d2d, d3d = match_coordinates_sky(objects, found_altaz)
    mask = d2d < 1.0 * u.deg
    idx = idx[mask]

    pd.DataFrame(
        dict(
            row=r[idx],
            col=c[idx],
            alt=objects[mask].alt.deg,
Esempio n. 5
0
def main():
    args = parser.parse_args()

    catalog = read_catalog(
        max_magnitude=args.max_magnitude,
        max_variability=None,
    )

    for path in images:
        img = cam.read(path)

        # create catalog of possibly visible stars and planets
        stars_catalog, magnitude = transform_catalog(
            catalog, img.timestamp, cam, min_altitude=args.min_altitude
        )

        # img.smoothed = gaussian(img.data, sigma=1.5)

        # find blobs in the image
        r, c, s = find_stars(img.data, threshold=args.threshold)

        found_altaz = cam.pixel2horizontal(r, c, img.timestamp)
        # only use blobs with alt > min_altitude
        mask = found_altaz.alt.deg > args.min_altitude
        idx, found = find_matching_stars(
            stars_catalog, found_altaz[mask], max_sep=0.25 * u.deg
        )

        print('Simple:  ', calculate_cloudiness_simple(found))
        print('Weighted:', calculate_cloudiness_weighted(magnitude, found))

        img.data[np.isnan(img.data)] = np.nanmin(img.data)
        img.data = adjust_gamma(rescale_intensity(img.data, (0, 1)), gamma=0.7)

        # plot that stuff
        fig, ax, plot = plot_img(img)
        fig.colorbar(plot)

        add_blobs(
            r[mask], c[mask], s[mask],
            color='C0',
            ax=ax,
        )

        add_blobs(
            *cam.horizontal2pixel(stars_catalog[found]),
            np.full(len(stars_catalog), 1.5),
            color='C2',
            ax=ax,
        )
        add_blobs(
            *cam.horizontal2pixel(stars_catalog[~found]),
            np.full(len(stars_catalog), 1.5),
            color='C1',
            ax=ax,
        )
        plt.legend([
            plt.Circle((0, 0), 0, edgecolor='C2', fill=False),
            plt.Circle((0, 0), 0, edgecolor='C1', fill=False),
        ], [
            'Found Catalog Stars',
            'Catalog stars without match'
        ])

        add_zenith_lines(cam, ax=ax)
        add_direction_labels(cam, ax=ax, color='crimson', weight='bold', size=14)
        plt.show()