Пример #1
0
def main(project=None, unit=None, folders_file=None, parallel=False, remote=False, remove_after=False, verbose=False, **kwargs):

    pan = Panoptes(simulator=['all'])

    folders = get_file_contents(folders_file).strip().split('\n')

    # See if the remote path exists in the HDF5 data store
    store = pd.HDFStore(kwargs.get('hdf5_file'))

    with console.ProgressBarOrSpinner(len(folders), "Folders") as bar:
        for idx, folder in enumerate(folders):
            folder = folder.rstrip('/')

            hdf_path = '/observing/{}'.format(folder)

            if hdf_path not in store.keys():

                local_dir = '/var/panoptes/images/fields/{}/'.format(folder)

                if not os.path.exists(local_dir) and remote:
                    # Get the data
                    remote_path = 'gs://{}/{}/{}'.format(project, unit, folder)
                    get_remote_dir(remote_path, local_dir=local_dir, extension='cr2')

                # Make data
                make_pec_data(folder, observer=pan.observatory.scheduler, parallel=parallel, verbose=verbose)

                if remove_after:
                    # Remove the data
                    try:
                        shutil.rmtree(local_dir)
                    except Exception as e:
                        if verbose:
                            print("Error removing dir: {}".format(e))
            else:
                if verbose:
                    print("{} already in HDF5 table".format(folder))

            bar.update(idx)
Пример #2
0
from panoptes.utils import images

parser = argparse.ArgumentParser(
    description='Convert Canon .cr2 file(s) to a FITS')
parser.add_argument('--directory', help="Convert all .cr2 files in directory.")
parser.add_argument('-v',
                    '--verbose',
                    action='store_true',
                    default=False,
                    help='Verbose mode')


def out(msg):
    if args.verbose:
        console.color_print(msg)


args = parser.parse_args()

if args.directory:
    out("Converting all files in {}".format(args.directory))
    cr2_files = glob.glob("{}/*.cr2".format(args.directory))

    with console.ProgressBarOrSpinner(len(cr2_files), "CR2 to FITS") as bar:
        for num, cr2 in enumerate(cr2_files):

            images.get_solve_field(cr2)

            bar.update(num)
Пример #3
0
def output_seds(image_stack):
    """
    Makes the SEDs.

    Parameters
    ----------
    image_stack: HDU list
        A structure containing headers and image data for all FITS input
        images.

    """
    # make new directory for output, if needed
    new_directory = image_directory + "/seds/"
    if not os.path.exists(new_directory):
        os.makedirs(new_directory)

    all_image_data = []
    wavelengths = []

    num_wavelengths = len(image_stack)
    # print("In seds")
    # print("num_wavelenghts : ", num_wavelengths)
    for i in range(1, num_wavelengths):
        original_filename = os.path.basename(image_stack[i].header['FILENAME'])
        original_directory = os.path.dirname(image_stack[i].header['FILENAME'])
        input_directory = original_directory + "/resampled/"
        input_filename = (input_directory + original_filename +
                          "_resampled.fits")
        wavelength = image_stack[i].header['WAVELNTH']
        wavelengths.append(wavelength)

        # Load the data for each image and append it to a master list of
        # all image data.
        ##NOTETOSELF: change to use nddata structure?
        hdulist = image_stack[i]
        image_data = hdulist.data
        all_image_data.append(image_data)
    print(len(all_image_data))
    sed_data = []
    for i in range(0, num_wavelengths - 1):
        print(i, "on")
        for j in range(len(all_image_data[i])):
            for k in range(len(all_image_data[i][j])):
                sed_data.append(
                    (int(j), int(k), wavelengths[i], all_image_data[i][j][k]))
        print(i, "done")

    # write the SED data to a test file
    # NOTETOSELF: make this optional?
    data = np.copy(sorted(sed_data))
    np.savetxt('test.out',
               data,
               fmt='%f,%f,%f,%f',
               header='x, y, wavelength (um), flux units (Jy/pixel)')
    num_seds = int(len(data) / num_wavelengths)

    with console.ProgressBarOrSpinner(num_seds, "Creating SEDs") as bar:
        for i in range(0, num_seds):

            # change to the desired fonts
            rc('font', family='Times New Roman')
            rc('text', usetex=True)
            # grab the data from the cube
            wavelength_values = data[:, 2][i * num_wavelengths:(i + 1) *
                                           num_wavelengths]
            flux_values = data[:, 3][i * num_wavelengths:(i + 1) *
                                     num_wavelengths]
            # NOTETOSELF: change from 0-index to 1-index
            x_values = data[:, 0][i * num_wavelengths:(i + 1) *
                                  num_wavelengths]  # pixel pos
            y_values = data[:, 1][i * num_wavelengths:(i + 1) *
                                  num_wavelengths]  # pixel pos
            fig, ax = plt.subplots()
            ax.scatter(wavelength_values, flux_values)
            # axes specific
            ax.set_xlabel(r'Wavelength ($\mu$m)')
            ax.set_ylabel(r'Flux density (Jy/pixel)')
            rc('axes', labelsize=14, linewidth=2, labelcolor='black')
            ax.set_xscale('log')
            ax.set_yscale('log')
            ax.set_xlim(min(wavelength_values), max(
                wavelength_values))  #NOTETOSELF: doesn't quite seem to work
            ax.set_ylim(min(flux_values), max(flux_values))
            fig.savefig(new_directory + '/' + str(int(x_values[0])) + '_' +
                        str(int(y_values[0])) + '_sed.eps')
            bar.update(i)
    return
Пример #4
0
def output_seds(images_with_headers):
    """
    Makes the SEDs.

    Parameters
    ----------
    images_with_headers: zipped list structure
        A structure containing headers and image data for all FITS input
        images.

    """

    all_image_data = []
    wavelengths = []

    num_wavelengths = len(images_with_headers)

    for i in range(0, num_wavelengths):
        original_filename = os.path.basename(images_with_headers[i][2])
        original_directory = os.path.dirname(images_with_headers[i][2])
        new_directory = original_directory + "/seds/"
        input_directory = original_directory + "/resampled/"
        input_filename = (input_directory + original_filename +
                          "_resampled.fits")
        wavelength = images_with_headers[i][1]['WAVELNTH']
        wavelengths.append(wavelength)
        if not os.path.exists(new_directory):
            os.makedirs(new_directory)

        # Load the data for each image and append it to a master list of
        # all image data.
        ##NOTETOSELF: change to use nddata structure?
        hdulist = fits.open(input_filename)
        image_data = hdulist[0].data
        all_image_data.append(image_data)
        hdulist.close()

    sed_data = []
    for i in range(0, num_wavelengths):
        for j in range(len(all_image_data[i])):
            for k in range(len(all_image_data[i][j])):
                sed_data.append(
                    (int(j), int(k), wavelengths[i], all_image_data[i][j][k]))

    data = np.copy(sorted(sed_data))
    np.savetxt('test.out',
               data,
               fmt='%f,%f,%f,%f',
               header='x, y, wavelength (um), flux units (Jy/pixel)')
    num_seds = int(len(data) / num_wavelengths)

    with console.ProgressBarOrSpinner(num_seds, "Creating SEDs") as bar:
        for i in range(0, num_seds):

            # change to the desired fonts
            rc('font', family='Times New Roman')
            rc('text', usetex=True)
            wavelength_values = data[:, 2][i * num_wavelengths:(i + 1) *
                                           num_wavelengths]
            flux_values = data[:, 3][i * num_wavelengths:(i + 1) *
                                     num_wavelengths]
            x_values = data[:,
                            0][i * num_wavelengths:(i + 1) * num_wavelengths]
            y_values = data[:,
                            1][i * num_wavelengths:(i + 1) * num_wavelengths]
            fig, ax = plt.subplots()
            ax.scatter(wavelength_values, flux_values)
            # axes specific
            ax.set_xlabel(r'Wavelength ($\mu$m)')
            ax.set_ylabel(r'Flux density (Jy/pixel)')
            rc('axes', labelsize=14, linewidth=2, labelcolor='black')
            ax.set_xscale('log')
            ax.set_yscale('log')
            ax.set_xlim(min(wavelength_values), max(
                wavelength_values))  #NOTETOSELF: doesn't quite seem to work
            ax.set_ylim(min(flux_values), max(flux_values))
            fig.savefig(new_directory + '/' + ` int(x_values[0]) ` + '_' +
                        ` int(y_values[0]) ` + '_sed.eps')
            bar.update(i)
    return