Пример #1
0
 def _reflamp(self):
     #calc_q = self.probe.calc_Q
     #return calc_q,calc_q
     key = 'calc_r'
     if key not in self._cache:
         slabs = self._render_slabs()
         w = slabs.w
         rho,irho = slabs.rho, slabs.irho
         sigma = slabs.sigma
         #sigma = slabs.sigma
         calc_q = self.probe.calc_Q
         #print("calc Q", self.probe.calc_Q)
         if slabs.ismagnetic:
             rhoM, thetaM = slabs.rhoM, slabs.thetaM
             Aguide = self.probe.Aguide
             calc_r = reflmag(-calc_q/2, depth=w, rho=rho[0], irho=irho[0],
                              rhoM=rhoM, thetaM=thetaM, Aguide=Aguide)
         else:
             calc_r = reflamp(-calc_q/2, depth=w, rho=rho, irho=irho,
                              sigma=sigma)
         if False and numpy.isnan(calc_r).any():
             print("w %s",w)
             print("rho",rho)
             print("irho",irho)
             print("sigma",sigma)
             print("kz",self.probe.calc_Q/2)
             print("R",abs(calc_r**2))
             pars = parameter.unique(self.parameters())
             fitted = parameter.varying(pars)
             print(parameter.summarize(fitted))
             print("===")
         self._cache[key] = calc_q,calc_r
         #if numpy.isnan(calc_q).any(): print("calc_Q contains NaN")
         #if numpy.isnan(calc_r).any(): print("calc_r contains NaN")
     return self._cache[key]
Пример #2
0
 def _reflamp(self):
     #calc_q = self.probe.calc_Q
     #return calc_q, calc_q
     key = 'calc_r'
     if key not in self._cache:
         slabs = self._render_slabs()
         w = slabs.w
         rho, irho = slabs.rho, slabs.irho
         sigma = slabs.sigma
         #sigma = slabs.sigma
         calc_q = self.probe.calc_Q
         #print("calc Q", self.probe.calc_Q)
         if slabs.ismagnetic:
             rhoM, thetaM = slabs.rhoM, slabs.thetaM
             Aguide = self.probe.Aguide.value
             H = self.probe.H.value
             calc_r = reflmag(-calc_q / 2,
                              depth=w,
                              rho=rho[0],
                              irho=irho[0],
                              rhoM=rhoM,
                              thetaM=thetaM,
                              Aguide=Aguide,
                              H=H,
                              sigma=sigma)
         else:
             calc_r = reflamp(-calc_q / 2,
                              depth=w,
                              rho=rho,
                              irho=irho,
                              sigma=sigma)
         if False and np.isnan(calc_r).any():
             print("w", w)
             print("rho", rho)
             print("irho", irho)
             if slabs.ismagnetic:
                 print("rhoM", rhoM)
                 print("thetaM", thetaM)
                 print("Aguide", Aguide, "H", H)
             print("sigma", sigma)
             print("kz", self.probe.calc_Q / 2)
             print("R", abs(np.asarray(calc_r)**2))
             pars = parameter.unique(self.parameters())
             fitted = parameter.varying(pars)
             print(parameter.summarize(fitted))
             print("===")
         self._cache[key] = calc_q, calc_r
         #if np.isnan(calc_q).any(): print("calc_Q contains NaN")
         #if np.isnan(calc_r).any(): print("calc_r contains NaN")
     return self._cache[key]
Пример #3
0
    L.interface.value = min([
        L.interface.value, L.thickness.value / 3, L[i].thickness.value / 3,
        L[i + 2].thickness.value / 3
    ])
layers[0].interface.value = min([
    layers[0].interface.value, layers[0].thickness.value / 3,
    layers[1].thickness.value / 3
])
layers[-1].interface.value = min([
    layers[-1].interface.value, layers[-2].thickness.value / 3,
    layers[-1].thickness.value / 3
])

sample = silicon(0, 5) | layers | air

T = numpy.linspace(0, 5, 100)
probe = NeutronProbe(T=T, dT=0.01, L=4.75, dL=0.0475)

M = Experiment(probe=probe, sample=sample)
M.simulate_data(1.5)

problem = FitProblem(M)
print("chisq", problem.chisq(), file=out)
print("target", file=out)
print(summarize(problem.parameters), file=out)
problem.randomize()
M.update()
print("start", file=out)
print(summarize(problem.parameters), file=out)
out.close()
Пример #4
0
    elif CONSTRAINTS=="known":
        layer.thickness.range(3,2*layer.thickness.value)
        layer.interface.range(0,min([2*layer.thickness.value/3.,200.]))
        layer.material.rho.range(layer.material.rho.value-1,layer.material.rho.value+1)
    return layer

layers = [genlayer("L%d"%i) for i in range(num_layers)]
for i,L in layers[-1:1]:
    L.interface.value = min([L.interface.value, L.thickness.value/3, L[i].thickness.value/3, L[i+2].thickness.value/3])
layers[0].interface.value = min([layers[0].interface.value, layers[0].thickness.value/3, layers[1].thickness.value/3])
layers[-1].interface.value = min([layers[-1].interface.value, layers[-2].thickness.value/3, layers[-1].thickness.value/3])

sample = silicon(0,5) | layers | air

T = numpy.linspace(0, 5, 100)
probe = NeutronProbe(T=T, dT=0.01, L=4.75, dL=0.0475)

M = Experiment(probe=probe, sample=sample)
M.simulate_data(1.5)

problem = FitProblem(M)
print("chisq",problem.chisq(), file=out)
print("target", file=out)
print(summarize(problem.parameters), file=out)
problem.randomize()
M.update()
print("start", file=out)
print(summarize(problem.parameters), file=out)
out.close()