예제 #1
0
def acolite_settings(settings):
    import os
    from acolite import acolite

    ## read defaults
    default_settings = acolite.config['acolite_defaults']
    setd = acolite.settings_read(default_settings)

    ## read settings file
    if settings is not None:
        ## path to settings file given
        if type(settings) is str:
            if os.path.exists(settings):
                setu = acolite.settings_read(settings)
            else:
                print('Settings file {} not found.'.format(settings))
                return (1)
        elif type(settings) is dict:
            setu = settings
        else:
            print('Settings not recognised.')
            return (1)
    else:
        setu = {}

    ## set defaults for options not specified
    for key in setd.keys():
        if key in setu.keys(): continue
        else: setu[key] = setd[key]
    return (setu)
예제 #2
0
        def restore(self, settings_file=None):
            if settings_file is None:
                initial_dir=os.path.dirname(self.settings_file)
                initial_file=os.path.basename(self.settings_file)
                settings_file = filedialog.askopenfilename(title='Select settings file to restore.', initialdir=initial_dir, initialfile=initial_file)
            if len(settings_file) > 0:
                self.settings_file = settings_file
                try:
                    self.setimport = settings_read(self.settings_file)
                    for k in self.setimport:
                        self.acolite_settings[k] = self.setimport[k]
                except:
                    print('Could not restore settings from {}'.format(settings_file))

                try:
                    ## clear ROI
                    self.sbox.delete(1.0, END)
                    self.nbox.delete(1.0, END)
                    self.wbox.delete(1.0, END)
                    self.ebox.delete(1.0, END)

                    ## set ROI if in settings file
                    if 'limit' in self.acolite_settings:
                        if self.acolite_settings['limit'] is not None:
                            if len(self.acolite_settings['limit'])==4:
                                self.sbox.insert(1.0, self.acolite_settings['limit'][0])
                                self.nbox.insert(1.0, self.acolite_settings['limit'][2])
                                self.wbox.insert(1.0, self.acolite_settings['limit'][1])
                                self.ebox.insert(1.0, self.acolite_settings['limit'][3])
                    ## clear and set inputfile
                    self.tinput.delete(1.0, END)
                    if 'inputfile' not in self.acolite_settings: self.acolite_settings['inputfile'] = ''
                    self.tinput.insert(END,self.acolite_settings['inputfile'])

                    ## clear and set output
                    self.toutput.delete(1.0, END)
                    if 'output' not in self.acolite_settings: self.acolite_settings['output'] = ''
                    self.toutput.insert(END,self.acolite_settings['output'])

                    ##
                    if 'l2w_parameters' in self.acolite_settings:
                        l2wpar=self.acolite_settings['l2w_parameters']
                        if (l2wpar is not None):
                            if len(l2wpar)>0:
                                self.tl2wpar.delete(1.0,END)
                                if type(l2wpar) is list: l2wpar = ','.join(l2wpar)
                                self.tl2wpar.insert(1.0, l2wpar)

                    ## restore RGB buttons
                    v = 1
                    tag = 'rgb_rhot'
                    if tag in self.acolite_settings: v = 1 if self.acolite_settings[tag] else 0
                    self.rgb_rhot.set(v)
                    v = 1
                    tag = 'rgb_rhos'
                    if tag in self.acolite_settings: v = 1 if self.acolite_settings[tag] else 0
                    self.rgb_rhos.set(v)
                    v = 1
                    tag = 'map_l2w'
                    if tag in self.acolite_settings: v = 1 if self.acolite_settings[tag] else 0
                    self.map_l2w.set(v)

                    ## done restoring settings
                    print('Restored settings file {}'.format(settings_file))
                except:
                    print('Failed to restore settings.')
예제 #3
0
def acolite_cli(*args):
    import os

    ## object for logging stdout to log file when processing
    class LogTee(object):
        def __init__(self, name):
            self.name = name
            ## make new file
            if os.path.exists(os.path.dirname(self.name)) is False:
                os.makedirs(os.path.dirname(self.name))
            self.file = open(self.name, 'w')
            self.file.close()
            self.mode = 'a'
            self.stdout = sys.stdout
            sys.stdout = self

        def __del__(self):
            sys.stdout = self.stdout

        def write(self, data):
            self.stdout.write(data)
            data = data.strip()
            if len(data) > 0:
                self.file = open(self.name, self.mode)
                self.file.write('{}: {}\n'.format(
                    datetime.datetime.now().strftime('%Y-%m-%d %H:%M:%S'),
                    data))
                self.file.close()

        def flush(self):
            pass

    import argparse
    parser = argparse.ArgumentParser(description='ACOLITE CLI')
    parser.add_argument('--settings', help='settings file')
    parser.add_argument('--images', help='list of images')
    #args = parser.parse_args()
    args, unknown = parser.parse_known_args()

    if args.settings is None:
        print('No settings file given.')
        return (1)

    import sys, datetime
    from acolite.acolite import acolite_run, settings_read

    acolite_settings = settings_read(args.settings)
    if 'runid' not in acolite_settings:
        acolite_settings['runid'] = datetime.datetime.now().strftime(
            '%Y%m%d_%H%M%S')
    if 'output' not in acolite_settings:
        print('No output specified in settings file.')
        return (1)

    logfile = '{}/{}'.format(
        acolite_settings['output'],
        'acolite_run_{}_log.txt'.format(acolite_settings['runid']))
    log = LogTee(logfile)

    print('Running ACOLITE')
    if args.images is None:
        acolite_run(settings=acolite_settings)
    else:
        images = args.images
        if ',' in images:
            images = images.split(',')

        if type(images) is not list:
            if not os.path.isdir(images):
                with open(images, 'r') as f:
                    images = [line.strip() for line in f.readlines()]
            else:
                images = [images]

        acolite_settings['inputfile'] = images
        acolite_run(settings=acolite_settings)