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)
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)
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
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