1
2
3 import os
4 import sys
5
6
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
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
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
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
65 model.setData( datasrc )
66
67 obj = getFitter(model)
68
69 return obj
70
71
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
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
101
102
103
104 del fit
105
106
107
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