Beispiel #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]
Beispiel #2
0
 def save(self, basename):
     import json
     pars = [(p.name,p.value) for p in varying(self.parameters())]
     out = json.dumps(dict(theory=self.theory().tolist(),
                           data=self.data.tolist(),
                           err=self.err.tolist(),
                           X = self.X.tolist(),
                           Y = self.Y.tolist(),
                           pars = pars))
     open(basename+".json","w").write(out)
Beispiel #3
0
 def save(self, basename):
     import json
     pars = [(p.name, p.value) for p in varying(self.parameters())]
     out = json.dumps(
         dict(theory=self.theory().tolist(),
              data=self.data.tolist(),
              err=self.err.tolist(),
              X=self.X.tolist(),
              Y=self.Y.tolist(),
              pars=pars))
     open(basename + ".json", "w").write(out)
Beispiel #4
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]