Package reflectometry :: Package model1d :: Package examples :: Module reflClient

Source Code for Module reflectometry.model1d.examples.reflClient

  1  #!/usr/bin/env python 
  2   
  3  import os 
  4  import sys 
  5   
  6  # must install reflectometry 
  7  try: 
  8      import reflectometry 
  9      pdir = os.path.dirname( os.path.abspath(reflectometry.__file__) ) 
 10      sys.path.append( os.path.join(pdir, 'model1d', 'adaptor') ) 
 11  except: 
 12      import traceback 
 13      print "Error in import reflectometry", traceback.format_exc() 
 14   
 15  # must install park also 
 16  from park.fitpark.parkFitClient              import ParkFitClient 
 17  from park.fitpark.fitParkHelper              import getFitter 
 18  from reflectometry.model1d.adaptor.reflModel import ReflModel 
 19   
 20  import numpy as nx 
 21   
 22   
 23  rho1   = 40.0 
 24  depth2 = 100 
 25  radius = 160 
 26   
27 -def buildFitModel():
28 29 model = ReflModel('M0') 30 31 model.layer('Air', rho=0.0, mu=0.0) 32 model.interface(8.0) 33 34 model.layer('layer1', depth=60, rho=rho1, mu=20.0) 35 model.interface(5.0) 36 37 model.layer('layer2', depth=depth2, rho=5.0, mu=1.0) 38 model.interface(5.0) 39 40 model.layer('Si', rho=2.07, mu=0.0) 41 42 return model
43 44
45 -def buildFitObject():
46 from numpy.random import uniform 47 48 EX_BASE_DIR = '.' 49 datasrc = os.path.join(EX_BASE_DIR,'test6.dat') 50 51 model = ReflModel('M0') 52 53 model.layer('Air', rho=0.0, mu=0.0) 54 model.interface(8.0) 55 56 model.layer('layer1', depth=60, rho=[35, uniform(35,45), 45], mu=20) 57 model.interface(5.0) 58 59 model.layer('layer2', depth=[70, uniform(70,130), 130], rho=5.0, mu=1.0) 60 model.interface(5.0) 61 62 model.layer('Si', rho=2.07, mu=0.0) 63 64 #set data source 65 model.setData( datasrc ) 66 67 obj = getFitter(model) 68 69 return obj
70 71
72 -def fit(i):
73 74 fit = ParkFitClient() 75 req = buildFitObject() 76 oldModel = buildFitModel() 77 78 fit.submit(req) 79 80 while (not fit.isCompleted()): 81 job = fit.getJob() 82 83 models = job.getObjective().getModels() 84 p0 = oldModel.getParameters() 85 p1 = models[models.keys()[0]].getParameters() 86 87 chisq = job.getSummary().getChisq()/200 88 names=[]; initvals=[]; fitvals=[] 89 #print '----chisq for fit(%d): %f ---- '%(i, chisq) 90 for ind in xrange(len(p0)): 91 pm0 = p0[ind]; pm1 = p1[ind] 92 if pm1.isOptimized(): 93 names.append(pm0.path+'/'+pm0.name) 94 initvals.append(pm1.v0) 95 fitvals.append(pm1.value) 96 97 print '%f %f %f %f' %(initvals[0], initvals[1], 98 fitvals[0], fitvals[1] 99 ) 100 #print '(%s(%f),%s(%f)) ==>(%f %f)' %( names[0], initvals[0], 101 # names[1], initvals[1], 102 # fitvals[0], fitvals[1] 103 # ) 104 del fit
105 106 107
108 -def main():
109 110 if 0: 111 print 'Optimizer: fmin' 112 print 'Fitting Results:' 113 print 'Name \t\t\t Initial \t Fitting' 114 115 nx.random.seed( [1.0] ) 116 for i in xrange(10): 117 fit(i)
118 119 120 if __name__ == '__main__': 121 main() 122