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 insert_record(moon_dict,  master_images_id):
    '''
    Make a new record to be in the master_finders table.
    '''
    record = MasterFinders()
    record.object_name = moon_dict['object']
    record.jpl_ra = moon_dict['jpl_ra']
    record.jpl_dec = moon_dict['jpl_dec']
    try:
        record.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))
    try:
        record.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))
    record.master_images_id = master_images_id
    record.version = __version__
    session.add(record)
    session.commit()
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()