def run_ephem_main(reproc=False): ''' The main controller for the module. It executes the code in ephem_main and writes the output to the database. ''' #print 'Processing ' + str(len(file_list)) + ' files.' count = 0 query_list = session.query(MasterFinders, MasterImages).\ join(MasterImages).\ options(subqueryload('master_images_rel')).\ filter(or_(MasterFinders.jpl_ra != None, MasterFinders.jpl_dec != None)).\ all() print 'Processing ' + str(len(query_list)) + ' files.' for record in query_list: if record.MasterFinders.ephem_x == None \ or record.MasterFinders.ephem_y == None \ or reproc == True: file_dict = get_header_info(\ os.path.join(\ record.MasterImages.file_location[0:-4], record.MasterImages.fits_file)) delta_x, delta_y = calc_delta(file_dict, record.MasterFinders) ephem_x, ephem_y = calc_pixel_position(file_dict, delta_x, delta_y) update_dict = {} update_dict['ephem_x'] = int(ephem_x) update_dict['ephem_y'] = int(ephem_y) session.query(MasterFinders).\ filter(MasterFinders.id == record.MasterFinders.id).\ update(update_dict) count = counter(count) session.commit() session.close()
def run_ephem_main(reproc=False): ''' The main controller for the module. It executes the code in ephem_main and writes the output to the database. ''' # Build the record list and log the length. query_all_records = session.query(MasterFinders, MasterImages).\ join(MasterImages).\ options(subqueryload('master_images_rel')) logging.info('{} total records in master_finders.'.\ format(query_all_records.count())) if reproc == True: query_list = query_all_records.all() logging.info('reproc == True, Reprocessing all records') else: logging.info('reproc == False') query_list = session.query(MasterFinders, MasterImages).\ join(MasterImages).\ options(subqueryload('master_images_rel')).\ filter(or_(MasterFinders.jpl_ra != None, MasterFinders.jpl_dec != None)).\ all() logging.info('Processing {} files where ephem_x or ephem_y IS NULL.'.\ format(len(query_list))) for counter, record in enumerate(query_list): logging.info('Working on {}'.\ format(record.MasterImages.name, record.MasterFinders.object_name)) file_dict = get_header_info(\ os.path.join(\ record.MasterImages.file_location[0:-4], record.MasterImages.fits_file)) delta_x, delta_y = calc_delta(file_dict, record.MasterFinders) ephem_x, ephem_y = calc_pixel_position(file_dict, delta_x, delta_y) update_dict = {} update_dict['ephem_x'] = int(ephem_x) update_dict['ephem_y'] = int(ephem_y) session.query(MasterFinders).\ filter(MasterFinders.id == record.MasterFinders.id).\ update(update_dict) if counter % 100 == 0: session.commit() session.close()
def jpl2db_main(filename, reproc=False): ''' The main controller. ''' # Get the unique record from the master_images table. assert os.path.splitext(filename)[1] == '.fits', \ 'Expected .fits got ' + filename master_images_query = session.query(MasterImages).filter(\ MasterImages.fits_file == os.path.basename(filename)).one() # Gather some file information and iterate over the moons file_dict = get_header_info(os.path.abspath(filename)) file_dict = convert_datetime(file_dict) all_moon_dict = make_all_moon_dict('planets_and_moons.txt', file_dict) for moon in all_moon_dict.keys(): logging.info('Processing {} for {}'.format(moon, filename)) moon_dict = all_moon_dict[moon] moon_dict.update(file_dict) # Check if a record exists. If there's no record insert one. master_finders_count = session.query(MasterFinders).filter(\ MasterFinders.master_images_id == master_images_query.id).filter(\ MasterFinders.object_name == moon).count() if master_finders_count == 0: jpl_dict = get_jpl_data(moon_dict) moon_dict.update(jpl_dict) insert_record(moon_dict, master_images_query.id) # When a record exists, check if it has jpl_ra info. If it # doesn't then update. else: master_finders_count = session.query(MasterFinders).filter(\ MasterFinders.master_images_id == master_images_query.id).filter(\ MasterFinders.object_name == moon).filter(\ MasterFinders.jpl_ra == None).count() if master_finders_count == 1 or reproc == True: jpl_dict = get_jpl_data(moon_dict) moon_dict.update(jpl_dict) update_record(moon_dict, master_images_query.id) session.close()
def add_new_record(record, region): ''' Make a dictionary of all the data for a record. ''' finders = Finders() finders.sub_images_id = session.query(SubImages.id)\ .filter(SubImages.master_images_id == record.MasterFinders.master_images_id)\ .filter(SubImages.region == region)\ .one().id finders.master_finders_id = record.MasterFinders.id finders.object_name = record.MasterFinders.object_name finders.x = record.MasterFinders.ephem_x - ((record.MasterFinders.ephem_x // 425) * 425) finders.y = record.MasterFinders.ephem_y - ((record.MasterFinders.ephem_y // 425) * 425) session.add(finders)
def build_sub_images_table_main(filename, reproc): ''' The main controller. ''' assert os.path.splitext(filename)[1] == '.png', \ 'Expected .png got ' + filename path = os.path.split(filename)[0] basename = os.path.basename(filename) master_filename = get_master_filename(basename) master_images_query = session.query(MasterImages).filter(\ MasterImages.name == master_filename).one() sub_images_query = session.query(SubImages).filter(\ SubImages.name == basename).count() image_width, image_height = get_image_size(filename) # Make the input dict record_dict = {} record_dict['master_images_id'] = master_images_query.id record_dict['master_images_name'] = master_images_query.name record_dict['name'] = basename record_dict['file_location'] = path record_dict['image_width'] = image_width record_dict['image_height'] = image_height record_dict['region'] = get_region(filename) if sub_images_query == 0: record = SubImages() insert_record(record_dict, record) elif sub_images_query == 1: sub_images_query = session.query(SubImages).filter(\ SubImages.name == basename).update(record_dict) session.commit() else: pass session.close()
def build_finders_table_main(reproc): ''' Calculate the ephemeris information for the subimages. ''' query = session.query(MasterFinders).count() print str(query) + ' total ephemerides' query = session.query(MasterFinders, MasterImages)\ .join(MasterImages, MasterImages.id == MasterFinders.master_images_id)\ .filter(MasterFinders.ephem_x >= 0)\ .filter(MasterFinders.ephem_y >= 0)\ .filter(MasterFinders.ephem_x <= 1725)\ .filter(MasterFinders.ephem_y <= 1300)\ .filter(MasterImages.drz_mode == 'wide')\ .all() print str(len(query)) + ' ephemerides in wide mode image FOVs' count = 0 for record in query: count = counter(count) region_list = get_region_list(record.MasterFinders.ephem_x, record.MasterFinders.ephem_y) for region in region_list: add_new_record(record, region) session.commit() session.close()
def update_record(moon_dict, master_images_id): ''' Update a record in the master_finders table. ''' update_dict = {} update_dict['object_name'] = moon_dict['object'] update_dict['jpl_ra'] = moon_dict['jpl_ra'] update_dict['jpl_dec'] = moon_dict['jpl_dec'] try: update_dict['magnitude'] = float(moon_dict['jpl_APmag']) except Exception as err: logging.critical('{0} {1} {2}'.format( type(err), err.message, sys.exc_traceback.tb_lineno)) try: update_dict['diameter'] = float(moon_dict['jpl_ang_diam']) except Exception as err: logging.critical('{0} {1} {2}'.format( type(err), err.message, sys.exc_traceback.tb_lineno)) update_dict['master_images_id'] = master_images_id update_dict['version'] = __version__ session.query(MasterFinders).filter(\ MasterFinders.master_images_id == master_images_id, MasterFinders.object_name == moon_dict['object']).update(update_dict) session.commit()
def check_database_completeness_main(): """The main function for the module.""" # Log the hostname and database record counds. logging.info('Host is {}'.format(socket.gethostname())) # Log the total number of records in master_images table. master_images_query = session.query(MasterImages).all() master_images_count = len(master_images_query) logging.info('{} records found in master_images'.format(master_images_count)) # Use a wildcard search to log the number of existing records in # master_images for the 2 different modes. wide_count = session.query(MasterImages).\ filter(MasterImages.fits_file.like('%wide_single_sci.fits')).\ count() logging.info('{} of expected {} wide records found in master_finders'.\ format(wide_count, master_images_count / 2)) center_count = session.query(MasterImages).\ filter(MasterImages.fits_file.like('%center_single_sci.fits')).\ count() logging.info('{} of expected {} center records found in master_finders'.\ format(center_count, master_images_count / 2)) # Use a length count for the fits_file field to infer the number # of records in the 4 combinations of the 2 cr mode and the 2 # astro drizzle modes. cr_wide_count = 0 cr_center_count = 0 non_cr_wide_count = 0 non_cr_center_count = 0 unknown_type_count = 0 for record in master_images_query: if len(record.fits_file) == 37: cr_wide_count += 1 elif len(record.fits_file) == 39: cr_center_count += 1 elif len(record.fits_file) == 34: non_cr_wide_count += 1 elif len(record.fits_file) == 36: non_cr_center_count += 1 else: unknown_type_count += 1 logging.info('{} of {} expected cr wide records found in master_images by length.'.\ format(cr_wide_count, master_images_count / 4)) logging.info('{} of {} expected cr center records found in master_images by length.'.\ format(cr_center_count, master_images_count / 4)) logging.info('{} of {} expected non-cr wide records found in master_images by length.'.\ format(non_cr_wide_count, master_images_count / 4)) logging.info('{} of {} expected non-cr center records found in master_images by length.'.\ format(non_cr_center_count, master_images_count / 4)) logging.info('{} of 0 expected unknown type records found in master_images by length.'.\ format(unknown_type_count)) # Do the record counts for the master_finders records logging.info('{} records found in master_finders'.\ format(session.query(MasterFinders).count())) logging.info('{} records found in master_images LEFT JOIN master_finders'.\ format(session.query(MasterImages, MasterFinders).\ outerjoin(MasterFinders).count())) logging.info('{} records with object_name IS NULL in master_images LEFT JOIN master_finders'.\ format(session.query(MasterImages, MasterFinders).\ outerjoin(MasterFinders).\ filter(MasterFinders.object_name == None).count())) # Log the missing master_finders records master_finders_query = session.query(MasterImages, MasterFinders).\ outerjoin(MasterFinders).\ filter(MasterFinders.object_name == None).all() if len(master_finders_query) != 0: for record in master_finders_query: logging.error('No object_name value for {}'.\ format(os.path.join(record.MasterImages.file_location, record.MasterImages.name)))
#! /usr/bin/env python import glob import os from database_interface import session from database_interface import Master from database_interface import IR_FLT_0 query = session.query(Master, IR_FLT_0).\ join(IR_FLT_0, Master.id == IR_FLT_0.id).\ order_by(IR_FLT_0.EXPSTART) test = True if test: sorted_local_files = [] local_file_list = glob.glob('../data/*/Visit*/*.fits') for local_file in local_file_list: local_query = query.filter(Master.filename == os.path.basename(local_file)).one() sorted_local_files.append((local_file, local_query.IR_FLT_0.EXPSTART)) #for record in query[0:25]: # print os.path.join(record.Master.dir, record.Master.filename) sorted_local_files = sorted(sorted_local_files, key=lambda item : item[1]) with open('per_list.txt', 'w') as f: for line in sorted_local_files: f.write(line[0] + '\n')
logging.info('Machine: {0}'.format(machine())) logging.info('Platform: {0}'.format(platform())) logging.info("Command-line arguments used:") for arg in args.__dict__: logging.info(arg + ": " + str(args.__dict__[arg])) # Create the filelist. if args.filelist != None: filelist = glob.glob(args.filelist) filelist = [x for x in filelist if len(os.path.basename(x)) == 18] assert isinstance(filelist, list), \ 'Expected list for filelist, got ' + str(type(filelist)) assert filelist != [], 'No files found.' elif args.missing_only == True: master_finders_query = session.query(MasterImages).\ outerjoin(MasterFinders).\ filter(MasterFinders.object_name == None).all() filelist = [os.path.join(record.file_location[:-4], record.fits_file) \ for record in master_finders_query] print 'Processing ' + str(len(filelist)) + ' files.' logging.info('Processing ' + str(len(filelist)) + ' files.') # Run with exception handling. count = 0 for filename in filelist: logging.info ('Now running for ' + filename) try: jpl2db_main(filename, args.reproc) logging.info ("Completed for : " + filename) except Exception as err: logging.critical('{0} {1} {2}'.format(