def build_master_images_table_main(png_file_list, reproc, reproc_sets):
    '''
    The main controller.    
    '''
    logging.info('Beginning script')
    logging.info('-filelist setting is {}'.format(png_file_list))
    logging.info('-reproc setting is {}'.format(reproc))
    logging.info('-reproc_sets setting is {}'.format(reproc_sets))
    png_file_list = glob.glob(png_file_list)
    logging.info('filelist returned {} files'.format(len(png_file_list)))

    # Trim the input_png_list according to the reproc settings
    if reproc:
        png_file_list = png_file_list
    elif not reproc:
        logging.info('Removing existing records from filelist')
        existing_png_files = session.query(distinct(MasterImages.name)).all()
        existing_png_files = set([item[0] for item in existing_png_files])
        png_file_list = [item for item in png_file_list
                         if os.path.basename(item) not in existing_png_files]
    logging.info('Processing {} files'.format(len(png_file_list)))

    # Get Existing set information from the DB
    set_info_query = session.query(MasterImages.set_id, 
                                   MasterImages.set_index, 
                                   MasterImages.project_id,
                                   MasterImages.visit,
                                   MasterImages.orbit,
                                   MasterImages.drz_mode,
                                   MasterImages.cr_mode).\
                             filter(MasterImages.visit != None).\
                             filter(MasterImages.orbit != None).\
                             all()
    existing_set_dict = {(record.project_id, 
                          record.visit, 
                          record.orbit,
                          MasterImages.drz_mode,
                          MasterImages.cr_mode): {'set_id':record.set_id, 
                                                  'set_index':record.set_index} 
                         for record in set_info_query}
    
    # Get the max set_id value
    max_set_id = session.query(func.max(MasterImages.set_id)).one()[0]
    if max_set_id == None:
        max_set_id = 0
            
    # Build the new records     
    for png_file in png_file_list:
        logging.info('Processing {}'.format(png_file))
        fits_file = png_file.replace('png/','').replace('_linear.png','.fits')
        with fits.open(fits_file) as hdulist:
            header = hdulist[0].header
        master_images = MasterImages(header, fits_file, png_file)
        existing_set_dict, max_set_id = master_images.set_set_values(existing_set_dict, max_set_id)
        session.add(master_images)
    logging.info('Committing records to database')
    session.commit()
    logging.info('Committing records to database complete')
    logging.info('Script completed')
 def getEphem(self):
     '''
     Get the ephemerids information from the database.
     '''
     master_images_query = session.query(MasterImages.id).filter(\
         MasterImages.name == os.path.basename(self.filename)).one()
     master_finders_query = session.query(MasterFinders).filter(\
         MasterFinders.master_images_id == master_images_query.id).count()
     assert master_finders_query != 0, \
         'No record found in master_finders_query'
     master_finders_query = session.query(MasterFinders).filter(\
         MasterFinders.master_images_id == master_images_query.id).all()
     self.master_finders_query = master_finders_query
 def getcrpix(self):
     '''
     Get the cr pixel information from the single_sci.fits file.
     '''
     fitsfile = master_images_query = session.query(MasterImages.fits_file).\
         filter(MasterImages.name == os.path.basename(self.filename)).\
         one()[0]
     png_path = os.path.split(self.filename)[0]
     png_path = os.path.split(png_path)[0]
     fitsfile = os.path.join(png_path, fitsfile)
     self.crpix1 = pyfits.getval(fitsfile, 'CRPIX1', 0)
     self.crpix2 = pyfits.getval(fitsfile, 'CRPIX2', 0)
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_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()