Example #1
0
    def __init__(self,argv,name='eoldas',logger=None):
        from eoldas.eoldas_Lib import sortopt, sortlog

        argv = argv or sys.argv
        here = os.getcwd()
        self.thisname = name
        Parser.__init__(self,argv,name=self.thisname,logger=logger,\
            general=None,outdir=".",getopdir=False,parse=True)
        os.chdir(here)
        if not hasattr(self,'configs'):
            self.logger.error('No configration file specfied')
            help(eoldas)
            return

        self.thisname = name
        solver = eoldas_Solver(self,logger=self.logger,name=self.thisname+'.solver')
        self.general = sortopt(self.root[0],'general',ParamStorage())
        self.general.write_results = sortopt(self.general,'write_results',True)
        self.general.calc_posterior_unc = sortopt(self.general,'calc_posterior_unc',False)
        self.general.passer = sortopt(self.general,'passer',False)
        self.solver = solver
        self.logger.info('testing full cost functions')
        for i in xrange(len(solver.confs.infos)):
            self.logger.info('%d/%d ...'%(i+1,len(solver.confs.infos)))
            # try an initial solver.prep(i)
            J = solver.cost(None)
            J_prime = solver.cost_df(None)
            self.logger.info('done')

        # give the user some info on where the log file is
        # in case theyve forgotten
        print 'logging to',self.general.logfile
Example #2
0
def tester():
    '''
    Derivative test for total J_prime
        
    It should plot a scatterplot of derivatives calculated
    by independent methods.
        
    They should lie on a 1:1 line, or if not, there
    is a problem with the derivative calculation implemented.
        
    In this case, you should check the individual operator
    derivatives carefully, using e.g. tester() in 
    eoldas_Operator.py
    '''
    solver = eoldas_Solver()
    print "See logfile for results of test"
    
    for i in xrange(len(solver.confs.infos)):
        solver.prep(i)
        xopt = np.zeros(solver.nmask1+solver.nmask2)
        
        # randomise, so we get a good signal to look at
        # Make the xstate random here, just as a good test
        #xopt = np.random.rand(solver.nmask1+solver.nmask2)
        
        solver.loader(xopt,solver.root.x.state)
        J = solver.cost(xopt)
        J_prime = solver.cost_df(xopt)
        J_prime_approx = solver.approx_cost_df(xopt)
        #ww = np.where(J_prime>0)
        #J_prime = J_prime[ww]
        #J_prime_approx = J_prime_approx[ww]
        try:
            import pylab
            max = np.max([np.max(J_prime),np.max(J_prime_approx)])
            min = np.min([np.min(J_prime),np.min(J_prime_approx)])
            pylab.plot(min,max,'b-')
            pylab.plot(J_prime,J_prime_approx,'o')
            pylab.show()
        except:
            pass
Example #3
0
def tester():
    '''
    Derivative test for total J_prime
        
    It should plot a scatterplot of derivatives calculated
    by independent methods.
        
    They should lie on a 1:1 line, or if not, there
    is a problem with the derivative calculation implemented.
        
    In this case, you should check the individual operator
    derivatives carefully, using e.g. tester() in 
    eoldas_Operator.py
    '''
    solver = eoldas_Solver()
    print "See logfile for results of test"

    for i in xrange(len(solver.confs.infos)):
        solver.prep(i)
        xopt = np.zeros(solver.nmask1 + solver.nmask2)

        # randomise, so we get a good signal to look at
        # Make the xstate random here, just as a good test
        #xopt = np.random.rand(solver.nmask1+solver.nmask2)

        solver.loader(xopt, solver.root.x.state)
        J = solver.cost(xopt)
        J_prime = solver.cost_df(xopt)
        J_prime_approx = solver.approx_cost_df(xopt)
        #ww = np.where(J_prime>0)
        #J_prime = J_prime[ww]
        #J_prime_approx = J_prime_approx[ww]
        try:
            import pylab
            max = np.max([np.max(J_prime), np.max(J_prime_approx)])
            min = np.min([np.min(J_prime), np.min(J_prime_approx)])
            pylab.plot(min, max, 'b-')
            pylab.plot(J_prime, J_prime_approx, 'o')
            pylab.show()
        except:
            pass
Example #4
0
def demonstration():
    '''
    An example of running EOLDAS
    '''
    from eoldas_ConfFile import ConfFile
    print "Testing ConfFile class with conf file eoldas_Test1"
    logdir = 'test/eoldas_Test/log'
    logfile = 'log.dat'
    thisname = 'eoldas_Test1'
    conffile = ['semid_default.conf']
 
	#['Obs1.conf']
    datadir = ['.']
    confs = ConfFile(conffile,\
                             logdir=logdir,\
                             logfile=logfile,\
                             datadir=datadir)

    solver = eoldas_Solver(confs,thisname=thisname,\
                           logdir=logdir,\
                           logfile=logfile,\
                           datadir=datadir)
    
    for i in xrange(len(solver.confs.infos)):
        solver.prep(i)
        # try an initial calculation
        J = solver.cost()
        J_prime = solver.cost_df(None)
        # run the solver
        solver.solver()
        # Hessian
        solver.uncertainty()
        # write out the state
        solver.write()
        # write out any fwd modelling of observations
        solver.writeHx()
Example #5
0
def demonstration():
    '''
    An example of running EOLDAS
    '''
    from eoldas_ConfFile import ConfFile
    print "Testing ConfFile class with conf file eoldas_Test1"
    logdir = 'test/eoldas_Test/log'
    logfile = 'log.dat'
    thisname = 'eoldas_Test1'
    conffile = ['semid_default.conf']

    #['Obs1.conf']
    datadir = ['.']
    confs = ConfFile(conffile,\
                             logdir=logdir,\
                             logfile=logfile,\
                             datadir=datadir)

    solver = eoldas_Solver(confs,thisname=thisname,\
                           logdir=logdir,\
                           logfile=logfile,\
                           datadir=datadir)

    for i in xrange(len(solver.confs.infos)):
        solver.prep(i)
        # try an initial calculation
        J = solver.cost()
        J_prime = solver.cost_df(None)
        # run the solver
        solver.solver()
        # Hessian
        solver.uncertainty()
        # write out the state
        solver.write()
        # write out any fwd modelling of observations
        solver.writeHx()