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
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
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
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()