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