def setUp(self):
     ## prior 
     self.prior = gv.BufferDict()
     nt = NTERM
     self.prior['a'] = gv.gvar(nt*["0.50(1)"])
     self.prior['ao'] = gv.gvar(nt*["0.250(5)"])
     self.prior['logb'] = gv.log(gv.gvar(nt*["0.60(1)"]))
     self.prior['bo'] = gv.gvar(nt*["0.30(1)"])
     self.prior['logdEa'] = gv.log(gv.gvar(nt*["0.50(1)"]))
     self.prior['logdEao'] = gv.log(gv.gvar(nt*["0.60(1)"]))
     self.prior['logdEb'] = gv.log(gv.gvar(nt*["0.45(1)"]))
     self.prior['logdEbo'] = gv.log(gv.gvar(nt*["0.65(1)"]))
     self.prior['Vnn'] = gv.gvar(nt*[nt*["2.00(1)"]])
     self.prior['Vno'] = gv.gvar(nt*[nt*["1.00(1)"]])
     self.prior['Von'] = gv.gvar(nt*[nt*["1.00(1)"]])
     self.prior['Voo'] = gv.gvar(nt*[nt*["2.00(1)"]])
     nsym = int(nt*(nt+1)/2)
     self.prior['Vnn_sym'] = gv.gvar(nsym*["2.00(1)"])
     self.prior['Voo_sym'] = gv.gvar(nsym*["2.00(1)"])
     
     ## actual parameters, time ranges, corr counter 
     self.p = next(gv.raniter(self.prior))
     for x in ['b', 'dEa', 'dEao', 'dEb', 'dEbo']:
         self.p[x] = gv.exp(self.p['log' + x])
     self.T = 18.
     self.tdata = np.arange(self.T)
     self.tfit = self.tdata[1:]
     self.ncorr = 0
     
     self.ran = gv.gvar(0,1)
Esempio n. 2
0
def make_an_BsEtas(n,Nijk,addrho,p,tag,Fit,alat,mass,amh,fpf0same,newdata=False): # tag is 0,p,T in this way, we can set fp(0)=f0(0) by just putting 0 for n=0 alat is lattice spacing (mean) so we can use this to evaluate at different lattice spacings p is dict containing all values (prior or posterior or anything)
    fit = Fit['conf']
    an = 0
    for i in range(Nijk):
        for j in range(Nijk):
            for k in range(Nijk):
                tagsamed = tag
                tagsamerho = tag
                if tag == '0' or fpf0same == False:
                    pass
                elif n == 0:     # this means only works for t_0 = 0
                    tagsamerho = '0'
                    if j == 0 and k == 0 :
                       tagsamed = '0'
                if addrho:
                    if newdata:
                        #print('Added external data in a{0}'.format(n))
                        an += (1 + p['{0}rho'.format(tagsamerho)][n]*gv.log(p['MBsphys']/p['MDsphys'])) *  p['{0}d'.format(tagsamed)][i][j][k][n] * (LQCD/p['MBsphys'])**int(i) * (amh/np.pi)**int(2*j) * (LQCD*alat/np.pi)**int(2*k)
                    elif newdata == False:
                        an += (1 + p['{0}rho'.format(tagsamerho)][n]*gv.log(p['MHs_{0}_m{1}'.format(fit,mass)]/p['MDs_{0}'.format(fit)])) * (1 + (p['{0}csval'.format(tag)][n]*p['deltasval_{0}'.format(fit)] + p['{0}cs'.format(tag)][n]*p['deltas_{0}'.format(fit)] + 2*p['{0}cl'.format(tag)][n]*p['deltal_{0}'.format(fit)])/(10*p['mstuned_{0}'.format(fit)]) + p['{0}cc'.format(tag)][n]*((p['Metac_{0}'.format(fit)] - p['Metacphys'])/p['Metacphys'])) * p['{0}d'.format(tagsamed)][i][j][k][n] * (p['LQCD_{0}'.format(fit)]/p['MHs_{0}_m{1}'.format(fit,mass)])**int(i) * (amh/np.pi)**int(2*j) * (LQCD*alat/np.pi)**int(2*k)
                    else:
                        print('Error in make_an_BsEtas(): newdata = {0}'.format(newdata))
                        
                else:
                    if newdata:
                        #print('Added external data in a{0}'.format(n))
                        an += p['{0}d'.format(tagsamed)][i][j][k][n] * (LQCD/p['MBsphys'])**int(i) * (amh/np.pi)**int(2*j) * (LQCD*alat/np.pi)**int(2*k)
                    elif newdata == False:
                        an += (1 + (p['{0}csval'.format(tag)][n]*p['deltasval_{0}'.format(fit)] + p['{0}cs'.format(tag)][n]*p['deltas_{0}'.format(fit)] + 2*p['{0}cl'.format(tag)][n]*p['deltal_{0}'.format(fit)])/(10*p['mstuned_{0}'.format(fit)]) + p['{0}cc'.format(tag)][n]*((p['Metac_{0}'.format(fit)] - p['Metacphys'])/p['Metacphys'])) * p['{0}d'.format(tagsamed)][i][j][k][n] * (p['LQCD_{0}'.format(fit)]/p['MHs_{0}_m{1}'.format(fit,mass)])**int(i) * (amh/np.pi)**int(2*j) * (LQCD*alat/np.pi)**int(2*k)
                    else:
                        print('Error in make_an_BsEtas(): newdata = {0}'.format(newdata))
                    
    return(an)
Esempio n. 3
0
    def setUp(self):
        ## prior
        self.prior = gv.BufferDict()
        nt = NTERM
        self.prior["a"] = gv.gvar(nt * ["0.50(1)"])
        self.prior["ao"] = gv.gvar(nt * ["0.250(5)"])
        self.prior["log(b)"] = gv.log(gv.gvar(nt * ["0.60(1)"]))
        self.prior["bo"] = gv.gvar(nt * ["0.30(1)"])
        self.prior["log(dEa)"] = gv.log(gv.gvar(nt * ["0.50(1)"]))
        self.prior["log(dEao)"] = gv.log(gv.gvar(nt * ["0.60(1)"]))
        self.prior["log(dEb)"] = gv.log(gv.gvar(nt * ["0.45(1)"]))
        self.prior["log(dEbo)"] = gv.log(gv.gvar(nt * ["0.65(1)"]))
        self.prior["Vnn"] = gv.gvar(nt * [nt * ["2.00(1)"]])
        self.prior["Vno"] = gv.gvar(nt * [nt * ["1.00(1)"]])
        self.prior["Von"] = gv.gvar(nt * [nt * ["1.00(1)"]])
        self.prior["Voo"] = gv.gvar(nt * [nt * ["2.00(1)"]])
        nsym = int(nt * (nt + 1) / 2)
        self.prior["Vnn_sym"] = gv.gvar(nsym * ["2.00(1)"])
        self.prior["Voo_sym"] = gv.gvar(nsym * ["2.00(1)"])

        ## actual parameters, time ranges, corr counter
        self.p = next(gv.raniter(self.prior))
        for x in ["b", "dEa", "dEao", "dEb", "dEbo"]:
            self.p[x] = gv.exp(self.p["log(" + x + ")"])
        self.T = 18.0
        self.tdata = np.arange(self.T)
        self.tfit = self.tdata[1:]
        self.ncorr = 0

        self.ran = gv.gvar(0, 1)
Esempio n. 4
0
def make_prior(models,prior_dict=None,nst=-1,ost=-1,do_amp_prior=True):
 prior = gv.BufferDict()
 
 for model in models:
  skey=model.all_datatags[0]

  if prior_dict is None: ## -- take default from defines
   if (nst > -1 and ost > -1):
    dprior = utf.get_prior_dict(df.define_prior,
     df.define_prior['nkey'],df.define_prior['okey'],nst,ost,do_amp_prior=do_amp_prior)
   else:
    dprior = utf.get_prior_dict(df.define_prior,
     df.define_prior['nkey'],df.define_prior['okey'],df.num_nst,df.num_ost,
      do_amp_prior=do_amp_prior)
   for pkey in dprior[skey]:
    prior[pkey]=dprior[skey][pkey]

   ## -- logarithmize the logarithmic coefficients
   for pkey in prior:
    ## -- don't do logs unless they are in the current model, else double counting
    bkey = utf.get_basekey(pkey)
    #if not(pkey[3:] in model.a+model.b+model.dE) and\
    #   not(pkey[4:] in model.a+model.b+model.dE):
    if not(bkey[1] in model.a+model.b+model.dE):
     continue
    if bkey[0] == 'log':
     negcheck = filter(lambda x: x[1].mean < 0,enumerate(prior[pkey]))
     if len(negcheck) > 0:
      raise ValueError("Prior indices ",list(np.array(negcheck)[:,0]),
       " have negative values, key ",pkey)
     prior[pkey] = gv.log(prior[pkey])
    elif bkey[0] == 'sqrt':
     negcheck = filter(lambda x: x[1].mean < 0,enumerate(prior[pkey]))
     if len(negcheck) > 0:
      raise ValueError("Prior indices ",list(np.array(negcheck)[:,0]),
       " have negative values, key ",pkey)
     prior[pkey] = gv.sqrt(prior[pkey])
  else: ## -- allow passing of new prior, for chained operations
   if (nst > -1 and ost > -1):
    dprior = utf.get_prior_dict(prior_dict,
     prior_dict['nkey'],prior_dict['okey'],nst,ost)
   else:
    dprior = utf.get_prior_dict(prior_dict,
     prior_dict['nkey'],prior_dict['okey'],df.num_nst,df.num_ost)
   for pkey in dprior[skey]:
    prior[pkey]=dprior[skey][pkey]

   for pkey in prior:
    bkey = utf.get_basekey(pkey)
    #if not(pkey[3:] in model.a+model.b+model.dE) and\
    #   not(pkey[4:] in model.a+model.b+model.dE):
    if not(bkey[1] in model.a+model.b+model.dE):
     continue
    if bkey[0] == 'log':
     prior[pkey] = gv.log(prior[pkey])
    elif bkey[0] == 'sqrt':
     prior[pkey] = gv.sqrt(prior[pkey])

 return prior
Esempio n. 5
0
def make_prior_all_twostate():
    prior = gv.BufferDict()
    prior["log(Mg1)"] = gv.log(gv.gvar(0.24, 0.2))
    prior["log(Mg2)"] = gv.log(gv.gvar(0.4, 0.2))
    prior["Zg1"] = gv.gvar(1, 1)
    prior["Zg2"] = gv.gvar(1, 1)

    return prior
Esempio n. 6
0
def make_prior_3pt(models,prior_dict=None,nst=-1,ost=-1,n3st=-1,o3st=-1,do_amp_prior=True):
 prior = gv.BufferDict()
 
 for model in models:
  skey=model.all_datatags[0]

  if prior_dict is None: ## -- take default from defines
   if (nst > -1 and ost > -1):
    dprior = utf.get_prior_dict(df.define_prior_3pt,
     df.define_prior_3pt['nkey'],df.define_prior_3pt['okey'],nst,ost,
     df.define_prior_3pt['vkey'],n3st,o3st,
     do_v_symm=df.do_v_symmetric,do_amp_prior=df.do_amp_prior)
   else:
    dprior = utf.get_prior_dict(df.define_prior_3pt,
     df.define_prior_3pt['nkey'],df.define_prior_3pt['okey'],df.num_nst,df.num_ost,
     df.define_prior_3pt['vkey'],df.num_nst_3pt,df.num_ost_3pt,
     do_v_symm=df.do_v_symmetric,do_amp_prior=df.do_amp_prior)
   for pkey in dprior[skey]:
    prior[pkey]=dprior[skey][pkey]

   ## -- logarithmize the logarithmic coefficients
   for pkey in prior:
    ## -- don't do logs unless they are in the current model, else double counting
    bkey = utf.get_basekey(pkey)
    if not(bkey[1] in model.a+model.b+model.dEa+model.dEb):
     continue
    if bkey[0] == 'log':
     #print pkey,prior[pkey]
     prior[pkey] = gv.log(prior[pkey])
    elif bkey[0] == 'sqrt':
     prior[pkey] = gv.sqrt(prior[pkey])
  else: ## -- allow passing of new prior, for chained operations
   if (nst > -1 and ost > -1):
    dprior = utf.get_prior_dict(prior_dict,
     prior_dict['nkey'],prior_dict['okey'],nst,ost,prior_dict['vkey'],n3st,o3st,df.do_v_symmetric)
   else:
    dprior = utf.get_prior_dict(prior_dict,
     prior_dict['nkey'],prior_dict['okey'],df.num_nst,df.num_ost,
     prior_dict['vkey'],df.num_nst_3pt,df.num_ost_3pt,df.do_v_symmetric)
   for pkey in dprior[skey]:
    prior[pkey]=dprior[skey][pkey]

   for pkey in prior:
    bkey = utf.get_basekey(pkey)
    if not(bkey[1] in model.a+model.b+model.dEa+model.dEb):
     continue
    if bkey[0] == 'log':
     prior[pkey] = gv.log(prior[pkey])
    elif bkey[0] == 'sqrt':
     prior[pkey] = gv.sqrt(prior[pkey])

 return prior
Esempio n. 7
0
def safelog(x, verbose=False):
    """
    Takes in gvar x, returns log(x). If x not suitable for log, returns log(1.0(9)).
    """
    logx = log(x)
    if isnan(gv.mean(logx)):
        if verbose:
            print(
                'CorrBayes.safelog WARNING: invalid argument for log - replacing with log(1.0(9))'
            )
        return log(gv.gvar(1.0, 0.9))
    else:
        return logx
Esempio n. 8
0
def make_prior(N):
    """ Create prior for N-state fit. """
    prior = collections.OrderedDict()
    prior['log(a)'] = gv.log(gv.gvar(['1.00(0.99)'] +
                                     (N - 1) * ['0.01(0.99)']))
    prior['log(dE)'] = gv.log(gv.gvar(['1.5(5)'] + (N - 1) * ['0.3(2)']))

    #----------OSC PARAMS-------------#
    if OSC:
        prior['log(ao)'] = gv.log(
            gv.gvar(['1.00(0.99)'] + (N - 1) * ['0.01(0.99)']))
        prior['log(dEo)'] = gv.log(gv.gvar(['1.5(5)'] + (N - 1) * ['0.3(2)']))
    return prior
Esempio n. 9
0
    def build_prior(self,params):
        """build prior from file"""
        prior = BufferDict()

        name = self.name
        nexp = self.nexp
        noxp = self.noxp
        prior_file = open(self.priorfile,'r')
        pp = yaml.load(prior_file)

        prior['log('+name+':dE)'] = [ gvar(0,0) for i in range(nexp) ]
        prior['log('+name+':a)'] = [ gvar(0,0) for i in range(nexp) ]

        # non-osc. state priors
        prior['log('+name+':dE)'][0] = log(gvar(pp['e0'][0],pp['e0'][1]))
        prior['log('+name+':a)'][0] = log(gvar(pp['a0'][0],pp['a0'][1]))
        for i in range(1,nexp):
            prior['log('+name+':dE)'][i] = log(gvar(pp['e1'][0],pp['e1'][1]))
            prior['log('+name+':a)'][i] = log(gvar(pp['a1'][0],pp['a1'][1]))
        # osc. state priors
        if self.name != 'pimom0':
            prior['log('+name+':dEo)'] = [ 0 for i in range(noxp) ]
            prior['log('+name+':ao)'] = [ 0 for i in range(noxp) ]
            prior['log('+name+':dEo)'][0] = log(gvar(pp['o0'][0],pp['o0'][1]))
            prior['log('+name+':ao)'][0] = log(gvar(pp['b0'][0],pp['b0'][1]))
            for i in range(1,noxp):
                prior['log('+name+':dEo)'][i] = log(gvar(pp['o1'][0],pp['o1'][1]))
                prior['log('+name+':ao)'][i] = log(gvar(pp['b1'][0],pp['b1'][1]))
        #print(prior)
        return prior
Esempio n. 10
0
def make_prior_all_twostate_theta():
    prior = gv.BufferDict()
    prior["log(Mc1)"] = gv.log(gv.gvar(0.28, 0.2))
    prior["log(Mc2)"] = gv.log(gv.gvar(0.4, 0.2))
    prior["log(Mg1)"] = gv.log(gv.gvar(0.24, 0.2))
    prior["log(Mg2)"] = gv.log(gv.gvar(0.4, 0.2))
    prior["Zc1"] = gv.gvar(50, 50)
    prior["Zc2"] = gv.gvar(10, 10)
    prior["Zcg"] = gv.gvar(0.02, 0.05)
    prior["Zg1"] = gv.gvar(1, 5)
    prior["Zg2"] = gv.gvar(0, 1)
    prior["theta_1"] = gv.gvar(0.1, 0.2)
    prior["theta_2"] = gv.gvar(-0.3, 0.2)

    return prior
Esempio n. 11
0
    def test_chained_lsqfit(self):
        " MultiFitter.chained_lsqfit(models=[m1, m2, m3], ...) "
        # sequential fit
        fitter = MultiFitter(models=self.make_models(ncg=1))
        fit1 = fitter.chained_lsqfit(data=self.data, prior=self.prior)
        self.assertEqual(str(fit1.p), "{'a': 0.99929(48),'b': 0.50004(81)}")
        self.assertEqual(list(fit1.chained_fits.keys()), ['l', 'c1', 'c2'])

        # with coarse grain, marginalization and extend, and with fast=False
        prior = gv.BufferDict([
            ('log(a)', gv.log(self.prior['a'])),
            ('b', self.prior['b']),
        ])
        prior['log(aa)'] = prior['log(a)'] + gv.gvar('0(1)') * 1e-6
        fitter = MultiFitter(models=self.make_models(ncg=2), fast=False)
        fit2 = fitter.chained_lsqfit(data=self.data,
                                     prior=prior,
                                     mopt=True,
                                     extend=True)
        self.assertEqual(
            str(fit2.p),
            "{'log(a)': -0.00073(48),'b': 0.50015(82),"
            "'log(aa)': -0.00073(48),'a': 0.99927(48),"
            "'aa': 0.99927(48)}",
        )
Esempio n. 12
0
def test_flat():
    hp = gvar.BufferDict({'log(sdev)': gvar.log(gvar.gvar(1, 1))})
    x = np.linspace(0, 5, 10)

    def gpfactory1(hp):
        gp = lgp.GP(lgp.ExpQuad() * hp['sdev']**2)
        gp.addx(x, 'x')
        return gp

    def gpfactory2(hp):
        gp = lgp.GP(lgp.ExpQuad() * jnp.exp(hp[0])**2)
        gp.addx(x, 'x')
        return gp

    def gpfactory3(hp):
        gp = lgp.GP(lgp.ExpQuad() * jnp.exp(hp)**2)
        gp.addx(x, 'x')
        return gp

    truehp = gvar.sample(hp)
    truegp = gpfactory1(truehp)
    trueprior = truegp.prior()
    data = gvar.sample(trueprior)
    fit1 = lgp.empbayes_fit(hp, gpfactory1, data)
    fit2 = lgp.empbayes_fit(hp.buf, gpfactory2, data)
    fit3 = lgp.empbayes_fit(hp.buf[0], gpfactory3, data)
    util.assert_similar_gvars(fit1.p.buf[0], fit2.p[0], fit3.p)
Esempio n. 13
0
 def test_extend(self):
     " MultiFitter.lsqfit(..., extend=True) "
     fitter = MultiFitter(models=self.make_models(ncg=1))
     prior = gv.BufferDict([('log(a)', gv.log(self.prior['a'])),
                            ('b', self.prior['b'])])
     fit5 = fitter.lsqfit(data=self.data, prior=prior, extend=True)
     self.assertEqual(str(fit5.p['a']), str(self.ref_fit.p['a']))
     self.assertEqual(gv.fmt_chi2(fit5), gv.fmt_chi2(self.ref_fit))
     self.assertTrue('log(a)' in fit5.p)
Esempio n. 14
0
    def setUp(self):
        ## prior
        self.prior = gv.BufferDict()
        nt = NTERM
        self.prior["a"] = gv.gvar(nt * ["0.50(1)"])
        self.prior["ao"] = gv.gvar(nt * ["0.250(5)"])
        self.prior["log(b)"] = gv.log(gv.gvar(nt * ["0.60(1)"]))
        self.prior["bo"] = gv.gvar(nt * ["0.30(1)"])
        self.prior["log(dE)"] = gv.log(gv.gvar(nt * ["0.50(1)"]))
        self.prior["log(dEo)"] = gv.log(gv.gvar(nt * ["0.60(1)"]))

        ## actual parameters, time ranges, corr counter
        self.p = gv.ExtendedDict(next(gv.raniter(self.prior)))
        self.tp = 10.0
        self.tdata = np.arange(self.tp)
        self.tfit = self.tdata[1:]
        self.ncorr = 0

        self.ran = gv.gvar(0, 1)
Esempio n. 15
0
 def test_extend(self):
     " MultiFitter.lsqfit(...) "
     fitter = MultiFitter(models=self.make_models(ncg=1))
     prior = gv.BufferDict([('log(a)', gv.log(self.prior['a'])),
                            ('b', self.prior['b'])])
     fit5 = fitter.lsqfit(data=self.data, prior=prior)
     self.assertTrue(self.agree_ref(fit5.p))
     self.assertTrue(
         abs(fit5.chi2 - self.ref_fit.chi2) / 0.1 / self.ref_fit.chi2)
     self.assertTrue('log(a)' in fit5.p)
Esempio n. 16
0
def make_prior(N, basis):
    prior = basis.make_prior(nterm=N, keyfmt=tag + '{s1}')  #, eig_srcs=True)
    if OSC:
        prior1 = collections.OrderedDict()
        for i in SRCs:
            prior1[otag + i] = gv.gvar(['1(0.9)'] + (N - 1) * ['0.5(5)'])
        prior1['log(' + otag + 'dE)'] = gv.log(
            gv.gvar(['1.7(4)'] + (N - 1) * ['0.5(4)']))
        prior.update(prior1)
    return prior
Esempio n. 17
0
def apply_fn_op(key,val):
 bkey = get_basekey(key)
 if bkey[0] is None:
  return val
 else:
  if bkey[0] == 'log':
   return gv.log(val)
  elif bkey[0] == 'sqrt':
   return gv.sqrt(val)
  else:
   raise KeyError("Unknown function operation:",bkey[0])
Esempio n. 18
0
def test_scale():
    hp = {'log(scale)': gvar.log(gvar.gvar(3, 0.2))}
    x = np.linspace(0, 2 * np.pi * 5, 20)

    def gpfactory(hp):
        gp = lgp.GP(lgp.ExpQuad(scale=hp['scale']))
        gp.addx(x, 'x')
        return gp

    for _ in range(10):
        check_fit(hp, gpfactory, alpha=1e-7)
Esempio n. 19
0
def test_sdev():
    hp = {'log(sdev)': gvar.log(gvar.gvar(1, 1))}
    x = np.linspace(0, 5, 10)

    def gpfactory(hp):
        gp = lgp.GP(lgp.ExpQuad() * hp['sdev']**2)
        gp.addx(x, 'x')
        return gp

    for _ in range(10):
        check_fit(hp, gpfactory, alpha=1e-8)
Esempio n. 20
0
def test_period():
    hp = {'log(scale)': gvar.log(gvar.gvar(1, 0.1))}
    x = np.linspace(0, 6, 10)

    def gpfactory(hp):
        gp = lgp.GP(lgp.Periodic(scale=hp['scale']))
        gp.addx(x, 'x')
        return gp

    for _ in range(10):
        check_fit(hp, gpfactory)
 def setUp(self):
     ## prior 
     self.prior = gv.BufferDict()
     nt = NTERM
     self.prior['a'] = gv.gvar(nt*["0.50(1)"])
     self.prior['ao'] = gv.gvar(nt*["0.250(5)"])
     self.prior['logb'] = gv.log(gv.gvar(nt*["0.60(1)"]))
     self.prior['bo'] = gv.gvar(nt*["0.30(1)"])
     self.prior['logdE'] = gv.log(gv.gvar(nt*["0.50(1)"]))
     self.prior['logdEo'] = gv.log(gv.gvar(nt*["0.60(1)"]))
     
     ## actual parameters, time ranges, corr counter 
     self.p = next(gv.raniter(self.prior))
     for x in ['b', 'dE', 'dEo']:
         self.p[x] = gv.exp(self.p['log' + x])
     self.tp = 10.
     self.tdata = np.arange(self.tp)
     self.tfit = self.tdata[1:]
     self.ncorr = 0
     
     self.ran = gv.gvar(0,1)
Esempio n. 22
0
def test_data():

    hp = gvar.BufferDict({'log(sdev)': gvar.log(gvar.gvar(1, 1))})
    x = np.linspace(0, 5, 10)

    def gpfactory(hp):
        gp = lgp.GP(lgp.ExpQuad() * hp['sdev']**2)
        gp.addx(x, 'x')
        return gp

    truehp = gvar.sample(hp)
    truegp = gpfactory(truehp)
    trueprior = truegp.prior()

    def makeerr(bd, err):
        return gvar.BufferDict(bd, buf=np.full_like(bd.buf, err))

    data_noerr = gvar.sample(trueprior)
    error = makeerr(data_noerr, 0.1)
    zeroerror = makeerr(data_noerr, 0)
    zerocov = gvar.evalcov(gvar.gvar(data_noerr, zeroerror))
    data_err = gvar.make_fake_data(gvar.gvar(data_noerr, error))

    datas = [
        [
            data_noerr,
            gvar.gvar(data_noerr),
            (data_noerr, ),
            (data_noerr, zerocov),
            lambda _: data_noerr,
            lambda _: gvar.gvar(data_noerr),
            lambda _: (data_noerr, ),
            lambda _: (data_noerr, zerocov),
        ],
        [
            data_err,
            (data_err, ),
            (gvar.mean(data_err), gvar.evalcov(data_err)),
            lambda _: data_err,
            lambda _: (data_err, ),
            lambda _: (gvar.mean(data_err), gvar.evalcov(data_err)),
        ],
    ]

    for datasets in datas:
        fits = []
        for data in datasets:
            fit = lgp.empbayes_fit(hp, gpfactory, data)
            fits.append(fit)

        p = fits[0].minresult.x
        for fit in fits[1:]:
            np.testing.assert_allclose(fit.minresult.x, p, atol=1e-6)
Esempio n. 23
0
def gaussian1d(x,h,a,dx,fwhm):
    """Return a 1D gaussian given a set of parameters.

    :param x: Array giving the positions where the gaussian is evaluated
    :param h: Height
    :param a: Amplitude
    :param dx: Position of the center
    :param fwhm: FWHM, :math:`\\text{FWHM} = \\text{Width} \\times 2 \\sqrt{2 \\ln 2}`
    """
    if not isinstance(x, np.ndarray):
        x = np.array(x)

    w = fwhm / (2. * gvar.sqrt(2. * gvar.log(2.)))
    return  h + a * gvar.exp(-(x - dx)**2. / (2. * w**2.))
Esempio n. 24
0
def gaussian1d_complex(x,h,a,dx,fwhm):
    """Return a 1D gaussian given a set of parameters.

    :param x: Array giving the positions where the gaussian is evaluated
    :param h: Height
    :param a: Amplitude
    :param dx: Position of the center
    :param fwhm: FWHM, :math:`\\text{FWHM} = \\text{Width} \\times 2 \\sqrt{2 \\ln 2}`
    """
    if not isinstance(x, np.ndarray):
        x = np.array(x)

    w = fwhm / (2. * gvar.sqrt(2. * gvar.log(2.)))
    b = (x - dx) / (np.sqrt(2) * w)
    return  (h + a * gvar.exp(-b**2.), h + a * 2 / np.sqrt(np.pi) * special.dawsn(b))
Esempio n. 25
0
def sincgauss1d_complex(x, h, a, dx, fwhm, sigma):
    """The "complex" version of the sincgauss (dawson definition).

    This is the real sinc*gauss function when ones wants to fit both the real
    part and the imaginary part of the spectrum.

    :param x: 1D array of float64 giving the positions where the
      function is evaluated
    
    :param h: Height
    :param a: Amplitude
    :param dx: Position of the center
    :param fwhm: FWHM of the sinc
    :param sigma: Sigma of the gaussian.
    """
    if np.size(sigma) > 1:
        if np.any(sigma != sigma[0]):
            raise Exception('Only one value of sigma can be passed')
        else:
            sigma = sigma[0]

    sigma = np.fabs(sigma)
    fwhm = np.fabs(fwhm)

    broadening_ratio = np.fabs(sigma / fwhm)
    max_broadening_ratio = gvar.mean(broadening_ratio) + gvar.sdev(
        broadening_ratio)

    if broadening_ratio < 1e-2:
        return sinc1d_complex(x, h, a, dx, fwhm)

    if np.isclose(gvar.mean(sigma), 0.):
        return sinc1d_complex(x, h, a, dx, fwhm)

    if max_broadening_ratio > 7:
        return gaussian1d_complex(x, h, a, dx,
                                  sigma * (2. * gvar.sqrt(2. * gvar.log(2.))))

    width = gvar.fabs(fwhm) / orb.constants.FWHM_SINC_COEFF
    width /= np.pi  ###

    a_ = sigma / np.sqrt(2) / width
    b_ = ((x - dx) / np.sqrt(2) / sigma)
    if b_.dtype == np.float128: b_ = b_.astype(float)

    sg1c = orb.cgvar.sincgauss1d_complex(a_, b_)
    return (h + a * sg1c[0], h + a * sg1c[1])
Esempio n. 26
0
    def test_chained_lsqfit(self):
        " MultiFitter.chained_lsqfit(...) "
        # sequential fit
        fitter = MultiFitter(models=self.make_models(ncg=1))
        fit1 = fitter.chained_lsqfit(data=self.data, prior=self.prior)
        self.assertTrue(self.agree_ref(fit1.p))
        self.assertEqual(list(fit1.chained_fits.keys()), ['l', 'c1', 'c2'])

        # with coarse grain, marginalization and extend, and with fast=False
        prior = gv.BufferDict([
            ('log(a)', gv.log(self.prior['a'])),
            ('b', self.prior['b']),
        ])
        prior['log(aa)'] = prior['log(a)'] + gv.gvar('0(1)') * 1e-6
        fitter = MultiFitter(models=self.make_models(ncg=2), fast=False)
        fit2 = fitter.chained_lsqfit(data=self.data, prior=prior, mopt=True)
        self.assertTrue(self.agree_ref(fit2.p))
Esempio n. 27
0
    def test_chained_fit_simul(self):
        " MultiFitter(models=[m1, (m2,m3)], ...) "
        models = self.make_models(ncg=1)
        models = [models[0], tuple(models[1:])]
        fitter = MultiFitter(models=models)
        fit3 = fitter.chained_lsqfit(data=self.data, prior=self.prior)
        self.assertTrue(self.agree_ref(fit3.p))
        self.assertEqual(list(fit3.chained_fits.keys()), ['l', '(c1,c2)'])

        # with coarse grain, marginalization and extend
        models = self.make_models(ncg=2)
        models = [models[0], tuple(models[1:])]
        prior = gv.BufferDict([('log(a)', gv.log(self.prior['a'])),
                               ('b', self.prior['b'])])
        fitter = MultiFitter(models=self.make_models(ncg=2))
        fit4 = fitter.chained_lsqfit(data=self.data, prior=prior, mopt=True)
        self.assertTrue(self.agree_ref(fit4.p))
Esempio n. 28
0
def sincgauss1d(x, h, a, dx, fwhm, sigma):
    """Return a 1D sinc convoluted with a gaussian of parameter sigma.

    If sigma == 0 returns a pure sinc.

    :param x: 1D array of float64 giving the positions where the
    sinc is evaluated
    
    :param h: Height
    :param a: Amplitude
    :param dx: Position of the center
    :param fwhm: FWHM of the sinc
    :param sigma: Sigma of the gaussian.
    """
    if np.size(sigma) > 1:
        if np.any(sigma != sigma[0]):
            raise Exception('Only one value of sigma can be passed')
        else:
            sigma = sigma[0]

    sigma = np.fabs(sigma)
    fwhm = np.fabs(fwhm)

    broadening_ratio = np.fabs(sigma / fwhm)
    max_broadening_ratio = gvar.mean(broadening_ratio) + gvar.sdev(
        broadening_ratio)

    if broadening_ratio < 1e-2:
        return sinc1d(x, h, a, dx, fwhm)

    if np.isclose(gvar.mean(sigma), 0.):
        return sinc1d(x, h, a, dx, fwhm)

    if max_broadening_ratio > 7:
        return gaussian1d(x, h, a, dx,
                          sigma * (2. * gvar.sqrt(2. * gvar.log(2.))))

    width = gvar.fabs(fwhm) / orb.constants.FWHM_SINC_COEFF
    width /= np.pi  ###

    a_ = sigma / math.sqrt(2) / width
    b_ = (x - dx) / math.sqrt(2) / sigma

    return h + a * orb.cgvar.sincgauss1d(a_, b_)
Esempio n. 29
0
def make_prior(N):
    """ Create priors for fit parameters. """
    prior = gv.BufferDict()
    # etas
    metas = gv.gvar('0.4(2)')
    prior['log(etas:a)'] = gv.log(gv.gvar(N * ['0.3(3)']))   
    prior['log(etas:dE)'] = gv.log(gv.gvar(N * ['0.5(5)']))
    prior['log(etas:dE)'][0] = gv.log(metas)

    # Ds
    mDs = gv.gvar('1.2(2)')
    prior['log(Ds:a)'] = gv.log(gv.gvar(N * ['0.3(3)']))
    prior['log(Ds:dE)'] = gv.log(gv.gvar(N * ['0.5(5)']))
    prior['log(Ds:dE)'][0] = gv.log(mDs)

    # Ds -- oscillating part
    prior['log(Dso:a)'] = gv.log(gv.gvar(N * ['0.1(1)']))
    prior['log(Dso:dE)'] = gv.log(gv.gvar(N * ['0.5(5)']))
    prior['log(Dso:dE)'][0] = gv.log(mDs + gv.gvar('0.3(3)'))

    # V
    prior['Vnn'] = gv.gvar(N * [N * ['0(1)']])
    prior['Vno'] = gv.gvar(N * [N * ['0(1)']])
    return prior
Esempio n. 30
0
def make_prior(N):
    """ Create priors for fit parameters. """
    prior = gv.BufferDict()
    # etas
    metas = gv.gvar('0.4(2)')
    prior['log(etas:a)'] = gv.log(gv.gvar(N * ['0.3(3)']))
    prior['log(etas:dE)'] = gv.log(gv.gvar(N * ['0.5(5)']))
    prior['log(etas:dE)'][0] = gv.log(metas)

    # Ds
    mDs = gv.gvar('1.2(2)')
    prior['log(Ds:a)'] = gv.log(gv.gvar(N * ['0.3(3)']))
    prior['log(Ds:dE)'] = gv.log(gv.gvar(N * ['0.5(5)']))
    prior['log(Ds:dE)'][0] = gv.log(mDs)

    # Ds -- oscillating part
    prior['log(Dso:a)'] = gv.log(gv.gvar(N * ['0.1(1)']))
    prior['log(Dso:dE)'] = gv.log(gv.gvar(N * ['0.5(5)']))
    prior['log(Dso:dE)'][0] = gv.log(mDs + gv.gvar('0.3(3)'))

    # V
    prior['Vnn'] = gv.gvar(N * [N * ['0(1)']])
    prior['Vno'] = gv.gvar(N * [N * ['0(1)']])
    return prior
Esempio n. 31
0
    def test_chained_fit_seq_simul(self):
        " MultiFitter.chained_lsqfit(models=[m1, (m2,m3)], ...) "
        models = self.make_models(ncg=1)
        models = [models[0], tuple(models[1:])]
        fitter = MultiFitter(models=models)
        fit3 = fitter.chained_lsqfit(data=self.data, prior=self.prior)
        self.assertEqual(str(fit3.p), "{'a': 0.99931(48),'b': 0.50000(81)}")
        self.assertEqual(list(fit3.chained_fits.keys()), ['l', '(c1,c2)'])

        # with coarse grain, marginalization and extend
        models = self.make_models(ncg=2)
        models = [models[0], tuple(models[1:])]
        prior = gv.BufferDict([('log(a)', gv.log(self.prior['a'])),
                               ('b', self.prior['b'])])
        fitter = MultiFitter(models=self.make_models(ncg=2))
        fit4 = fitter.chained_lsqfit(data=self.data,
                                     prior=prior,
                                     mopt=True,
                                     extend=True)
        self.assertEqual(str(fit4.p),
                         "{'log(a)': -0.00073(48),'a': 0.99927(48)}")
Esempio n. 32
0
    def test_chained_fit_seq_parallel(self):
        " MultiFitter.chained_lsqfit(models=[m1, [m2,m3]], ...) "
        models = self.make_models(ncg=1)
        models = [models[0], models[1:]]
        fitter = MultiFitter(models=models)
        fit5 = fitter.chained_lsqfit(data=self.data, prior=self.prior)
        self.assertEqual(str(fit5.p), "{'a': 0.99932(48),'b': 0.49998(81)}")
        self.assertEqual(list(fit5.chained_fits.keys()), ['l', '[c1,c2]'])
        self.assertEqual(list(fit5.chained_fits['[c1,c2]'].sub_fits.keys()),
                         ['c1', 'c2'])

        # with coarse grain, marginalization and extend
        models = self.make_models(ncg=2)
        models = [models[0], models[1:]]
        prior = gv.BufferDict([('log(a)', gv.log(self.prior['a'])),
                               ('b', self.prior['b'])])
        fitter = MultiFitter(models=self.make_models(ncg=2))
        fit6 = fitter.chained_lsqfit(data=self.data,
                                     prior=prior,
                                     mopt=True,
                                     extend=True)
        self.assertEqual(str(fit6.p),
                         "{'log(a)': -0.00073(48),'a': 0.99927(48)}")
Esempio n. 33
0
    def test_chained_fit_parallel(self):
        " MultiFitter(models=[m1, [m2,m3]], ...) "
        models = self.make_models(ncg=1)
        models = [models[0], models[1:]]
        fitter = MultiFitter(models=models)
        fit5 = fitter.chained_lsqfit(data=self.data, prior=self.prior)
        self.assertTrue(self.agree_ref(fit5.p))
        self.assertEqual(list(fit5.chained_fits.keys()),
                         ['l', 'c1', 'c2', 'wavg(c1,c2)'])

        # degenerate parallel fit (nfit=1)
        models = self.make_models(ncg=1)
        models = [[models[0]], models[1:]]
        fitter = MultiFitter(models=models)
        fit5 = fitter.chained_lsqfit(data=self.data, prior=self.prior)
        self.assertTrue(self.agree_ref(fit5.p))
        self.assertEqual(list(fit5.chained_fits.keys()),
                         ['l', 'c1', 'c2', 'wavg(c1,c2)'])

        # dictionaries in parallel fits
        models = self.make_models(ncg=1)
        models = [[dict(svdcut=1e-12), models[0]],
                  [dict(svdcut=1e-12)] + models[1:]]
        fitter = MultiFitter(models=models)
        fit5 = fitter.chained_lsqfit(data=self.data, prior=self.prior)
        self.assertTrue(self.agree_ref(fit5.p))
        self.assertEqual(list(fit5.chained_fits.keys()),
                         ['l', 'c1', 'c2', 'wavg(c1,c2)'])

        # with coarse grain, marginalization
        models = self.make_models(ncg=2)
        models = [models[0], models[1:]]
        prior = gv.BufferDict([('log(a)', gv.log(self.prior['a'])),
                               ('b', self.prior['b'])])
        fitter = MultiFitter(models=self.make_models(ncg=2))
        fit6 = fitter.chained_lsqfit(data=self.data, prior=prior, mopt=True)
        self.assertTrue(self.agree_ref(fit6.p))
Esempio n. 34
0
def test_method():

    hp = gvar.BufferDict({'log(sdev)': gvar.log(gvar.gvar(1, 1))})
    x = np.linspace(0, 5, 10)

    def gpfactory(hp):
        gp = lgp.GP(lgp.ExpQuad() * hp['sdev']**2)
        gp.addx(x, 'x')
        return gp

    truehp = gvar.sample(hp)
    truegp = gpfactory(truehp)
    trueprior = truegp.prior()
    data_fixed = gvar.sample(trueprior)

    def data_variable(hp):
        return {k: v + hp['log(sdev)'] for k, v in data_fixed.items()}

    for data in [data_fixed, data_variable]:
        fits = []
        kws = [
            dict(method='nograd', minkw=dict(options=dict(xatol=1e-6))),
            dict(method='gradient'),
            dict(method='hessian'),
            dict(method='fisher'),
            dict(method='fisher'),
            dict(method='hessmod'),
        ]
        for kw in kws:
            kwargs = dict(data=data)
            kwargs.update(kw)
            kwargs.setdefault('minkw', {}).update(x0=truehp.buf)
            fit = lgp.empbayes_fit(hp, gpfactory, **kwargs)
            fits.append(fit)
        p = fits[0].minresult.x
        for fit in fits[1:]:
            np.testing.assert_allclose(fit.minresult.x, p, atol=1e-5)
Esempio n. 35
0
def get_sigma_str(key,fit,prior,j,do_unicode=True):
 ## -- list the sigma away from prior
 #
 try:
  ## -- requesting log, log prior
  ##    or requesting linear, linear prior
  sig=int(np.abs(np.trunc(\
      (fit.p[key][j].mean-prior[key][j].mean)\
       /(prior[key][j]).sdev)))
 except KeyError:
  ## -- requested linear, have log or sqrt prior
  try:
   sig=int(np.abs(np.trunc(\
       (gv.log(fit.p[key][j].mean)-prior['log('+key+')'][j].mean)\
        /(prior['log('+key+')'][j]).sdev)))
  except KeyError:
   sig=int(np.abs(np.trunc(\
       (gv.sqrt(fit.p[key][j].mean)-prior['sqrt('+key+')'][j].mean)\
        /(prior['sqrt('+key+')'][j]).sdev)))
 except TypeError:
  ## -- Vnn, Vno, etc...
  #print key,j
  sig=int(np.abs(np.trunc(\
      (fit.p[key][j[0]][j[1]].mean-prior[key][j[0]][j[1]].mean)\
       /(prior[key][j[0]][j[1]]).sdev)))
 if do_unicode:
  if sig > 0:
   sigstr=str(sig)+u'\u03C3' # unicode for sigma (cannot be saved to string)
  else:
   sigstr='  '
 else:
  if sig > 0:
   sigstr=str(sig)+'sig'
  else:
   sigstr='    '
 return sigstr
Esempio n. 36
0
def make_prior(N):
    """ Create priors for fit parameters. """
    prior = gv.BufferDict()
    # Ds
    mDs = gv.gvar('1.2(2)')
    prior['log(a)'] = gv.log(gv.gvar(N * ['0.3(3)']))
    prior['log(dE)'] =  gv.log(gv.gvar(N * ['0.5(5)']))
    prior['log(dE)'][0] = gv.log(mDs)

    # Ds -- oscillating part
    prior['log(ao)'] = gv.log(gv.gvar(N * ['0.1(1)']))
    prior['log(dEo)'] = gv.log(gv.gvar(N * ['0.5(5)']))
    prior['log(dEo)'][0] = gv.log(mDs + gv.gvar('0.3(3)'))

    # V
    nV = int((N * (N + 1)) / 2)
    prior['Vnn'] = gv.gvar(nV * ['0(1)'])
    prior['Voo'] = gv.gvar(nV * ['0(1)'])
    prior['Vno'] = gv.gvar(N * [N * ['0(1)']])
    return prior
Esempio n. 37
0
def make_prior(N):
    """ Create priors for fit parameters. """
    prior = gv.BufferDict()
    # Ds
    mDs = gv.gvar('1.2(2)')
    prior['log(a)'] = gv.log(gv.gvar(N * ['0.3(3)']))
    prior['log(dE)'] =  gv.log(gv.gvar(N * ['0.5(5)']))
    prior['log(dE)'][0] = gv.log(mDs)

    # Ds -- oscillating part
    prior['log(ao)'] = gv.log(gv.gvar(N * ['0.1(1)']))
    prior['log(dEo)'] = gv.log(gv.gvar(N * ['0.5(5)']))
    prior['log(dEo)'][0] = gv.log(mDs + gv.gvar('0.3(3)'))

    # V
    nV = int((N * (N + 1)) / 2)
    prior['Vnn'] = gv.gvar(nV * ['0.0(5)'])
    prior['Voo'] = gv.gvar(nV * ['0.0(5)'])
    prior['Vno'] = gv.gvar(N * [N * ['0.0(5)']])
    return prior
Esempio n. 38
0
def build_prior(nexp, dErho=gv.gvar('0.476(100)')):
    """ build prior """
    prior = gv.BufferDict()

    prior.add(
        'a:rho',
        [gv.gvar(0, 0.1),
         gv.gvar(0, 0.1),
         gv.gvar(0, 0.1),
         gv.gvar(0, 0.1)])
    # fix it so that the rho terms are opposite sign to the omega
    prior.add('b:rho', [
        -prior['a:rho'][0], prior['a:rho'][1], prior['a:rho'][2],
        -prior['a:rho'][3]
    ])
    prior.add('log(dE:rho)', [log(gv.gvar(0.5, 0.4)) for i in range(nexp)])
    prior['log(dE:rho)'][0] = log(dErho)  # rho
    prior['log(dE:rho)'][1] = log(gv.gvar('0.09(18)'))  # omega
    prior['log(dE:rho)'][2] = log(gv.gvar('0.90(32)'))  # excited omega
    prior['log(dE:rho)'][3] = log(gv.gvar('0.023(30)'))  #excited rho

    prior.add(
        'a:rhoo',
        [gv.gvar(0, 0.1),
         gv.gvar(0, 0.1),
         gv.gvar(0, 0.1),
         gv.gvar(0, 0.1)])
    prior.add('b:rhoo', [
        -prior['a:rhoo'][0], prior['a:rhoo'][1], prior['a:rhoo'][2],
        -prior['a:rhoo'][3]
    ])
    prior.add('log(dE:rhoo)', [log(gv.gvar(1, 1)) for i in range(nexp)])
    prior['log(dE:rhoo)'][0] = log(gv.gvar(2, 2))
    ##

    return prior
Esempio n. 39
0
def make_prior(N):
    """ Create prior for N-state fit. """
    prior = collections.OrderedDict()
    prior['a'] = gv.gvar(N * ['0(1)'])
    prior['log(dE)'] = gv.log(gv.gvar(N * ['0.5(5)']))
    return prior
def plot_corr_effective_mass(models,data,fit=None,req=[list(),list()],**kwargs):
 """
 Get all data ready so that it can be plotted on command
 Allows for dynamic cycling through plots
 """
 _emNMod = len(models)
 _emIdx = [0] ## -- index of plotted function, in array so it can be modified in functions
 ## -- objects to hold all plot data
 ##  - Dat/Fit refers to the correlator data or the fit function
 ##  - Central/Error are the central value and errors
 _emLogRatio        = []
 _emLogRatioCentral = []
 _emLogRatioError   = []
 _emLogRatioFit     = []
 _emFoldRatio       = []
 _emFoldRatioCentral= []
 _emFoldRatioError  = []
 _emFoldRatioFit    = []
 _emRatioFit        = []
 _emRatioFitNonZero = []
 _emFitCentral      = []
 _emFitError        = []
 ## -- timeslice objects
 _emTPosRatio    = []
 _emTPosFit      = []
 _emTPosFold     = []
 _emTPosFoldFit  = []
 #
 ## -- fitting options
 _emFitMin = 0
 _emFitMax = 0
 _emSep    = 0
 fig,ax = plt.subplots(1,figsize=(10,8))
 #
 ## -- setup plot function
 def do_plot_corr_effective_mass(idx,fig=fig):
   fig.clear()
   #fig.set_size_inches(10,10) #doesn't work
   ax = fig.add_subplot(111)
   if print_quality:
    plt.subplots_adjust(bottom=0.15,left=0.18,right=0.97,top=0.95)
   else:
    #plt.subplots_adjust(bottom=0.15,left=0.15,right=0.97,top=0.95)
    pass
   #fig.set_figheight(20) #doesn't work
   #fig.set_figwidth(20)
   key = models[idx[0]].datatag
   ax.set_xlim([-1,df.cor_len/2])
   ax.set_ylim(utp.get_option("y_limit",[0.0,1.4],**kwargs[key]))
   #
   # -- plot correlator data
   if utp.get_option("meff_do_fold",False,**kwargs[key]):
    ## -- plot fit
    ax.plot([t for t in _emTPosFit[idx[0]] if t < len(_emTData)/2],_emFitCentral[idx[0]],
     color=utp.get_option("color3",'b',**kwargs[key]))
    ax.plot([t for t in _emTPosFit[idx[0]] if t < len(_emTData)/2],_emFitError[idx[0]][0],
     color=utp.get_option("color3",'b',**kwargs[key]),
     ls=utp.get_option("linestyle2",'--',**kwargs[key]))
    ax.plot([t for t in _emTPosFit[idx[0]] if t < len(_emTData)/2],_emFitError[idx[0]][1],
     color=utp.get_option("color3",'b',**kwargs[key]),
     ls=utp.get_option("linestyle2",'--',**kwargs[key]))
    ## -- _emTPosRatio not necessarily symmetric, get times correct
    ax.errorbar(_emTPosFold[idx[0]],_emFoldRatioCentral[idx[0]],yerr=_emFoldRatioError[idx[0]],
     mfc=utp.get_option("markerfacecolor1",'None',**kwargs[key]),
     mec=utp.get_option("markeredgecolor1",'k',**kwargs[key]),
     color=utp.get_option("markeredgecolor1",'k',**kwargs[key]),
     ls=utp.get_option("linestyle1",'None',**kwargs[key]),
     marker=utp.get_option("marker1",'o',**kwargs[key]),
     ms=utp.get_option("markersize",10,**kwargs[key]))
    ax.scatter(_emTPosFoldFit[idx[0]],gv.mean(_emFoldRatioFit[idx[0]]),
     color=utp.get_option("color1",'r',**kwargs[key]),
     marker=utp.get_option("marker",'o',**kwargs[key]),
     s=utp.get_option("markersize",100,**kwargs[key]))
   else:
    ## -- plot fit
    ax.plot(_emTPosFit[idx[0]],_emFitCentral[idx[0]],
     color=utp.get_option("color3",'b',**kwargs[key]))
    ax.plot(_emTPosFit[idx[0]],_emFitError[idx[0]][0],
     color=utp.get_option("color3",'b',**kwargs[key]),
     ls=utp.get_option("linestyle2",'--',**kwargs[key]))
    ax.plot(_emTPosFit[idx[0]],_emFitError[idx[0]][1],
     color=utp.get_option("color3",'b',**kwargs[key]),
     ls=utp.get_option("linestyle2",'--',**kwargs[key]))
    ## -- 
    ax.errorbar(_emTPosRatio[idx[0]],_emLogRatioCentral[idx[0]],yerr=_emLogRatioError[idx[0]],
     mfc=utp.get_option("markerfacecolor1",'None',**kwargs[key]),
     mec=utp.get_option("markeredgecolor1",'k',**kwargs[key]),
     color=utp.get_option("markeredgecolor1",'k',**kwargs[key]),
     ls=utp.get_option("linestyle1",'None',**kwargs[key]),
     marker=utp.get_option("marker1",'o',**kwargs[key]),
     ms=utp.get_option("markersize",8,**kwargs[key]))
    ax.scatter(_emTPosFit[idx[0]],gv.mean(_emLogRatioFit[idx[0]]),
     color=utp.get_option("color1",'r',**kwargs[key]),
     marker=utp.get_option("marker",'o',**kwargs[key]),
     s=utp.get_option("markersize",64,**kwargs[key]))
   fig.suptitle(utp.get_option("plottitleem",str(idx[0])+" default title "+str(key),**kwargs[key]),
    fontsize=utp.get_option("titlesize",20,**kwargs[key]))
   # -- modify some options 
   if print_quality:
    ax.set_xlabel(r'$t$',fontsize=40)
    if sn_ratio:
     ax.set_ylabel(utp.get_option("yaxistitle",
      r"$-\frac{1}{"+str(_emSep)+r"}v_{i}^{T}\,log\frac{C_{ij}(t+"+str(_emSep)+r")}{C_{ij}(t)}w_{j}$",
      **kwargs[key]),fontsize=40)
    else:
     ax.set_ylabel(utp.get_option("yaxistitle",
      r"$-\frac{1}{"+str(_emSep)+r"}\,log\frac{C_{ij}(t+"+str(_emSep)+r")}{C_{ij}(t)}$",
      **kwargs[key]),fontsize=40)
    plt.xticks(plt.xticks()[0],fontsize=24)
    plt.yticks(plt.yticks()[0],fontsize=24)
   else:
    ax.set_xlabel(r'$t$')
    ax.set_ylabel(utp.get_option("yaxistitle",
     r"$-\frac{1}{"+str(_emSep)+r"}\,log\frac{C(t+"+str(_emSep)+r")}{C(t)}$",**kwargs[key]))
    for item in ([ax.xaxis.label,ax.yaxis.label]):
     # must be after setting label content (LaTeX ruins it)
     item.set_fontsize(fontsize=utp.get_option("fontsize",20,**kwargs[key]))
   rect =fig.patch
   rect.set_facecolor('white')
   if utp.get_option("to_file",False,**kwargs[key]):
    save_dir  = utp.get_option("em_save_dir","./plotdump",**kwargs[key])
    save_name = utp.get_option("em_save_name","emplot-"+key+".pdf",**kwargs[key])
    plt.savefig(save_dir+'/'+save_name)
   if utp.get_option("to_terminal",True,**kwargs[key]):
    plt.draw()
   pass
 #
 ## -- setup button press action function
 def press_effective_mass(event,idx=_emIdx):
   #print('press_effective_mass', event.key)
   try:
     ## -- manually indicate index
     idx[0] = int(event.key) + (idx[0])*10
   except ValueError:
     if event.key==' ': ## -- space
       ## -- allows for replotting when changing index by typing number keys
       idx[0] = idx[0] % _emNMod
       do_plot_corr_effective_mass(idx)
     elif event.key=='left':
       idx[0] = (idx[0] - 1) % _emNMod
       do_plot_corr_effective_mass(idx)
     elif event.key=='right':
       idx[0] = (idx[0] + 1) % _emNMod
       do_plot_corr_effective_mass(idx)
     elif event.key=='backspace':
       ## -- reset index so can manually flip through using number keys
       idx[0] = 0
     elif event.key=='d':
       ## -- dump plots into ./plotdump directory
       for ix,model in zip(range(len(models)),models):
         key = model.datatag
         save_dir  = utp.get_option("em_save_dir","./plotdump",**kwargs[key])
         save_name = utp.get_option("em_save_name","emplot-"+key+".png",**kwargs[key])
         do_plot_corr_effective_mass([ix])
         plt.savefig(save_dir+'/'+save_name)
       do_plot_corr_effective_mass(idx)
 #
 ## -- 
 fig.canvas.mpl_connect('key_press_event',press_effective_mass)
 ## -- save plot data
 for idx,model in zip(range(len(models)),models):
   key = model.datatag
   ## -- parameters used in fitting
   ##    default = 2
   _emSep    = utp.get_option("meff_sep",2,**kwargs[key])
   ##    default = smallest t not included in fit
   _emFitMin = utp.get_option("meff_fit_min",model.tfit[-1]+1,**kwargs[key])
   ##    default = midpoint - sep
   _emFitMax = utp.get_option("meff_fit_max",
     model.tdata[-1]/2-_emSep-int(model.tdata[-1]/12),**kwargs[key])
   _emTData = model.tdata
   _emTFit = range(_emFitMin,_emFitMax)
   _emTFit = np.append(_emTFit,list(sorted([len(_emTData) - t for t in _emTFit])))
   if not(fit is None) and (len(req[0]) > 0 or len(req[1]) > 0):
     _emSubFcn = utp.mask_fit_fcn(model,fit,req,invert=False)
     _emSub = np.array(_emSubFcn(np.array(_emTData)))
   else:
     _emSub = 0
   _emDataFold = utf.fold_data(data[key]-_emSub,(model.tp < 0))
   #_emTDataNonZero = [t for t in _emTData if np.abs(gv.mean(data[key])[t]) > 1e-20]
   #_emTDataNonZero = [t for t in range(len(_emDataFold)) if np.mean(_emDataFold[t]) > 1e-20]
   #
   ## -- data
   _emRatio = np.array(_emDataFold[_emSep:])/np.array(_emDataFold[:-_emSep])
   _emTDataRatio = np.array(range(len(_emRatio)))
   _emTDataNonZero = np.array([t for t in range(len(_emRatio)) if _emRatio[t] > 1e-20])
   #_emRatio = np.array([-gv.log(x)/_emSep for x in _emRatio if x > 1e-20])
   #_emTDataRatio =\
   # [t for t in _emTData
   # if (t in _emTDataNonZero) and (t <= _emTData[-1]/2 +1 - _emSep) ]   # first half
   #_emTDataRatio = np.append(_emTDataRatio,
   # [t for t in _emTData
   # if (t in _emTDataNonZero) and (t >= _emTData[-1]/2 +1 + _emSep) ] ) # second half
   #_emRatio =\
   # [data[key][t+_emSep]/data[key][t] for t in _emTData
   # if (t in _emTDataNonZero) and (t <= _emTData[-1]/2 +1 - _emSep) ]   # first half
   #_emRatio = np.append(_emRatio,
   # [data[key][t-_emSep]/data[key][t] for t in _emTData
   # if (t in _emTDataNonZero) and (t >= _emTData[-1]/2 +1 + _emSep) ] ) # second half
   ## -- times
   _emTPosRatio.append(
    [_emTDataRatio[t] for t in range(len(_emTDataRatio)) if _emRatio[t] > 0] )
   _emTPosFit.append(
    [_emTDataRatio[t] for t in range(len(_emTDataRatio))
    if _emRatio[t] > 0 and _emTDataRatio[t] in _emTFit] )
   ## -- ratios 
   _emLogRatio.append(
    [-gv.log(_emRatio[t])/_emSep for t in range(len(_emTDataRatio)) if _emRatio[t] > 0] )
   _emLogRatioFit.append(
    [-gv.log(_emRatio[t])/_emSep for t in range(len(_emTDataRatio))
    if (gv.mean(_emRatio[t]) > 0) and (_emTDataRatio[t] in _emTPosFit[-1])] )
   _emFoldRatio.append(_emLogRatio[-1])
   _emFoldRatioFit.append(_emLogRatioFit[-1])
   _emTPosFold.append(_emTPosRatio[-1])
   _emTPosFoldFit.append(_emTPosFit[-1])
   ## -- folding
   #_emFoldRatio.append(list())
   #_emFoldRatioFit.append(list())
   #_emTPosFold.append(list())
   #_emTPosFoldFit.append(list())
   #for t in range(1,len(_emTData)/2):
   # if not(t in _emTPosRatio[-1]) or not(len(_emTData)-t in _emTPosRatio[-1]):
   #  continue
   # _emFoldRatio[-1].append((_emLogRatio[-1][list(_emTPosRatio[-1]).index(t)]
   #   +_emLogRatio[-1][list(_emTPosRatio[-1]).index(len(_emTData)-t)])/2)
   # _emTPosFold[-1].append(t)
   # if not(t in _emTPosFit[-1]) or not(len(_emTData)-t in _emTPosFit[-1]):
   #  continue
   # _emFoldRatioFit[-1].append((_emLogRatio[-1][list(_emTPosRatio[-1]).index(t)]
   #   +_emLogRatio[-1][list(_emTPosRatio[-1]).index(len(_emTData)-t)])/2)
   # _emTPosFoldFit[-1].append(t)
   #for t in range(len(_emTPosFold[-1])):
   # print t,_emTPosFold[-1][t],_emFoldRatio[-1][t]
   #for t in range(len(_emTPosFoldFit[-1])):
   # print t,_emTPosFoldFit[-1][t],_emFoldRatioFit[-1][t]
   _emLogRatioCentral.append(gv.mean(_emLogRatio[-1]))
   _emLogRatioError.append([ list(gv.sdev(_emLogRatio[-1])), list(gv.sdev(_emLogRatio[-1])) ])
   _emFoldRatioCentral.append(gv.mean(_emFoldRatio[-1]))
   _emFoldRatioError.append([ list(gv.sdev(_emFoldRatio[-1])), list(gv.sdev(_emFoldRatio[-1])) ])
   ## -- fit
   _emRatioFit.append(lsq.wavg(_emLogRatioFit[-1]))
   if utp.get_option("meff_do_fold",False,**kwargs[key]):
    _emFitCentral.append([gv.mean(_emRatioFit[-1]) for t in _emTPosFit[-1] if t < len(_emTData)/2])
    _emFitError.append(
     [list(np.array(_emFitCentral[-1])-np.array([gv.sdev(_emRatioFit[-1])
       for t in _emTPosFit[-1] if t < len(_emTData)/2])),
      list(np.array(_emFitCentral[-1])+np.array([gv.sdev(_emRatioFit[-1])
        for t in _emTPosFit[-1] if t < len(_emTData)/2]))])
   else:
    _emFitCentral.append([gv.mean(_emRatioFit[-1]) for t in _emTPosFit[-1]])
    _emFitError.append(
     [list(np.array(_emFitCentral[-1])-np.array([gv.sdev(_emRatioFit[-1])
       for t in _emTPosFit[-1]])),
      list(np.array(_emFitCentral[-1])+np.array([gv.sdev(_emRatioFit[-1])
        for t in _emTPosFit[-1]]))])
 print "Best plateau fits: "
 for key,rfit in zip([model.datatag for model in models],_emRatioFit):
  print "  ",key," : ",rfit
 print "   ----------------- "
 _emRatioFitNonZero = [x for x in _emRatioFit if not(x is None)]
 print "   avg  : ",lsq.wavg(_emRatioFitNonZero)

 ## -- done saving data
 if not(utp.get_option("to_terminal",True,**kwargs[key])) and\
    utp.get_option("to_file",False,**kwargs[key]):
  for ix in range(len(models)):
    ## -- loops and saves all without creating window
    do_plot_corr_effective_mass([ix])
 else:
  do_plot_corr_effective_mass(_emIdx)
Esempio n. 41
0
if df.do_sn_minimize:
 defm = {}
 for key in dall:
  if 't' in key: 
   continue
  tlen = len(dall[key])
  #if dall[key][2]/dall[key][0] > 0.\
  #and dall[key][tlen-2]/dall[key][0] > 0.:
  # defm[key] = [-gv.log(dall[key][2]/dall[key][0])/2.+gv.log(dall[key][tlen-2]/dall[key][0])/2.]
  #else:
  # defm[key] = [gv.gvar(1e-8,1e-6)]
  defm[key] = [] ## -- skip the first
  for t in range(1,tlen/2-2):
   if dall[key][t+2]/dall[key][t] > 0.\
   and dall[key][tlen-t-2]/dall[key][tlen-t] > 0.:
    defm[key].append(-gv.log(dall[key][t+2]/dall[key][t])/4.
     -gv.log(dall[key][tlen-t-2]/dall[key][tlen-t])/4.)
   else:
    defm[key].append(gv.gvar(1e-8,1e-8)) ## -- add garbage value, > 0
  #defm[key].append(-gv.log(dall[key][tlen/2]/dall[key][tlen/2-2])/2.
  # -gv.log(dall[key][tlen/2]/dall[key][tlen/2+2])/2.)
  #print defm[key]
 #raise ValueError("test")
 cvec,kvec,_ = sn_minimize_postload(defm,df.rangeMax)
 clist = list()
 klist = list()
 for key in dall:
  if 't' in key: 
   continue
  ## -- deconstruct key based on current conventions
  k = int(key[-1])
Esempio n. 42
0
def build_prior(nexp):
    prior = gv.BufferDict()

    prior.add('log(a1:vec:s)', [log(gv.gvar(1, 1)) for i in range(nexp)])
    prior['log(a1:vec:s)'][0] = log(gv.gvar(0.5, 1))
    prior.add('log(ao:vec:s)', [log(gv.gvar(1, 1)) for i in range(nexp)])
    prior['log(ao:vec:s)'][0] = log(gv.gvar(0.5, 1))
    #prior.add('as1:etac',[gv.gvar(0.001,0.01) for i in range(nexp)])
    prior.add('log(dE:vec:s)', [log(gv.gvar(2, 2)) for i in range(nexp)])
    prior['log(dE:vec:s)'][0] = log(gv.gvar(1, 1))
    prior.add('log(dEo:vec:s)', [log(gv.gvar(1, 1)) for i in range(nexp)])
    prior['log(dEo:vec:s)'][0] = log(gv.gvar(1, 1))
    #prior['logdE:etac'][0] = log(gv.gvar(0.1,0.05))

    prior.add('log(a1:vec:qed:s)', [log(gv.gvar(1, 1)) for i in range(nexp)])
    prior['log(a1:vec:qed:s)'][0] = log(gv.gvar(0.5, 1))
    prior.add('log(ao:vec:qed:s)', [log(gv.gvar(1, 1)) for i in range(nexp)])
    prior['log(ao:vec:qed:s)'][0] = log(gv.gvar(0.5, 1))
    #prior.add('as1:etac',[gv.gvar(0.001,0.01) for i in range(nexp)])
    prior.add('log(dE:vec:qed:s)', [log(gv.gvar(2, 2)) for i in range(nexp)])
    prior['log(dE:vec:qed:s)'][0] = log(gv.gvar(1, 1))
    prior.add('log(dEo:vec:qed:s)', [log(gv.gvar(1, 1)) for i in range(nexp)])
    prior['log(dEo:vec:qed:s)'][0] = log(gv.gvar(1, 1))

    return prior
Esempio n. 43
0
def make_prior(N):
    """ Create prior for N-state fit. """
    prior = collections.OrderedDict()
    prior['a'] = gv.gvar(N * ['0(1)'])
    prior['logdE'] = gv.log(gv.gvar(N * ['0.5(5)']))
    return prior
def plot_corr_effective_mass_check(models,data,fit=None,**kwargs):
 """
 Get all data ready so that it can be plotted on command
 Allows for dynamic cycling through plots
 """
 _emNMod = len(models)
 _emIdx = [0] ## -- index of plotted function, in array so it can be modified in functions
 ## -- objects to hold all plot data
 ##  - Dat/Fit refers to the correlator data or the fit function
 ##  - Central/Error are the central value and errors
 _emLogRatio        = []
 _emLogRatioCentral = []
 _emLogRatioError   = []
 _emLogRatioFit     = []
 _emRatioFit        = []
 _emRatioFitNonZero = []
 _emFitCentral      = []
 _emFitError        = []
 ## -- timeslice objects
 _emTPosRatio    = []
 _emTPosFit      = []
 #
 ## -- fitting options
 _emFitMin = 0
 _emFitMax = 0
 _emSep    = 0
 fig,ax = plt.subplots(1)
 #
 ## -- setup plot function
 def do_plot_corr_effective_mass_check(idx,fig=fig):
   fig.clear()
   ax = fig.add_subplot(111)
   key = models[idx[0]].datatag
   ax.set_ylim(utp.get_option("y_limit",[0.0,1.2],**kwargs[key]))
   #
   ## -- plot fit
   ax.plot(_emTPosFit[idx[0]],_emFitCentral[idx[0]],
    color=utp.get_option("color3",'b',**kwargs[key]))
   ax.plot(_emTPosFit[idx[0]],_emFitError[idx[0]][0],
    color=utp.get_option("color3",'b',**kwargs[key]),
    ls=utp.get_option("linestyle2",'--',**kwargs[key]))
   ax.plot(_emTPosFit[idx[0]],_emFitError[idx[0]][1],
    color=utp.get_option("color3",'b',**kwargs[key]),
    ls=utp.get_option("linestyle2",'--',**kwargs[key]))
   ## -- plot reference
   for val in df.ec_reference_lines:
     vt = [val for t in _emTPosFit[idx[0]]]
     ax.plot(_emTPosFit[idx[0]],vt,
      color=utp.get_option("color2",'g',**kwargs[key]))
   # -- plot correlator data
   ax.errorbar(_emTPosRatio[idx[0]],_emLogRatioCentral[idx[0]],yerr=_emLogRatioError[idx[0]],
    mfc=utp.get_option("markerfacecolor1",'None',**kwargs[key]),
    mec=utp.get_option("markeredgecolor1",'k',**kwargs[key]),
    color=utp.get_option("markeredgecolor1",'k',**kwargs[key]),
    ls=utp.get_option("linestyle1",'None',**kwargs[key]),
    marker=utp.get_option("marker1",'o',**kwargs[key]),
    ms=utp.get_option("markersize",6,**kwargs[key]))
   ax.scatter(_emTPosFit[idx[0]],gv.mean(_emLogRatioFit[idx[0]]),
    color=utp.get_option("color1",'r',**kwargs[key]),
    marker=utp.get_option("marker",'o',**kwargs[key]),
    s=utp.get_option("markersize",36,**kwargs[key]))
   fig.suptitle(utp.get_option("plottitle",str(idx[0])+" default title "+str(key),**kwargs[key]),
    fontsize=utp.get_option("titlesize",20,**kwargs[key]))
   # -- modify some options 
   ax.set_xlabel(r'$t$ slice')
   ax.set_ylabel(utp.get_option("yaxistitle",
    r"$-\frac{1}{"+str(_emSep)+r"}\,log\frac{C(t+"+str(_emSep)+r")}{C(t)}$",**kwargs[key]))
   for item in ([ax.xaxis.label,ax.yaxis.label]):
    # must be after setting label content (LaTeX ruins it)
    item.set_fontsize(fontsize=utp.get_option("fontsize",20,**kwargs[key]))
   rect =fig.patch
   rect.set_facecolor('white')
   if utp.get_option("to_file",False,**kwargs[key]):
    save_dir  = utp.get_option("ec_save_dir","./plotdump",**kwargs[key])
    save_name = utp.get_option("ec_save_name","ecplot-"+key+".pdf",**kwargs[key])
    plt.savefig(save_dir+'/'+save_name)
   if utp.get_option("to_terminal",True,**kwargs[key]):
    plt.draw()
   pass
 #
 ## -- setup button press action function
 def press_effective_mass(event,idx=_emIdx):
   #print('press_effective_mass', event.key)
   try:
     ## -- manually indicate index
     idx[0] = int(event.key) + (idx[0])*10
   except ValueError:
     if event.key==' ': ## -- space
       ## -- allows for replotting when changing index by typing number keys
       idx[0] = idx[0] % _emNMod
       do_plot_corr_effective_mass_check(idx)
     elif event.key=='left':
       idx[0] = (idx[0] - 1) % _emNMod
       do_plot_corr_effective_mass_check(idx)
     elif event.key=='right':
       idx[0] = (idx[0] + 1) % _emNMod
       do_plot_corr_effective_mass_check(idx)
     elif event.key=='backspace':
       ## -- reset index so can manually flip through using number keys
       idx[0] = 0
     elif event.key=='d':
       ## -- dump plots into ./plotdump directory
       for ix,model in zip(range(len(models)),models):
         key = model.datatag
         save_dir  = utp.get_option("ec_save_dir","./plotdump",**kwargs[key])
         save_name = utp.get_option("ec_save_name","ecplot-"+key+".png",**kwargs[key])
         do_plot_corr_effective_mass_check([ix])
         plt.savefig(save_dir+'/'+save_name)
       do_plot_corr_effective_mass_check(idx)
 #
 ## -- 
 fig.canvas.mpl_connect('key_press_event',press_effective_mass)
 ## -- save plot data
 for idx,model in zip(range(len(models)),models):
   key = model.datatag
   ## -- parameters used in fitting
   ##    default = 2
   _emSep    = utp.get_option("meff_sep",2,**kwargs[key])
   ##    default = smallest t not included in fit
   _emFitMin = utp.get_option("meff_fit_min",model.tfit[-1]+1,**kwargs[key])
   ##    default = midpoint - sep
   _emFitMax = utp.get_option("meff_fit_max",
     model.tdata[-1]/2-_emSep-int(model.tdata[-1]/12),**kwargs[key])
   _emTData = model.tdata
   _emTFit = range(_emFitMin,_emFitMax)
   _emTFit = np.append(_emTFit,list(sorted([len(_emTData) - t for t in _emTFit])))
   _emTDataNonZero = [t for t in _emTData if np.abs(gv.mean(data[key])[t]) > 1e-20]
   #
   ## -- data
   _emTDataRatio =\
    [t for t in _emTData
    if (t in _emTDataNonZero) and (t <= _emTData[-1]/2 +1 - _emSep) ]   # first half
   _emTDataRatio = np.append(_emTDataRatio,
    [t for t in _emTData
    if (t in _emTDataNonZero) and (t >= _emTData[-1]/2 +1 + _emSep) ] ) # second half
   _emRatio =\
    [data[key][t+_emSep]/data[key][t] for t in _emTData
    if (t in _emTDataNonZero) and (t <= _emTData[-1]/2 +1 - _emSep) ]   # first half
   _emRatio = np.append(_emRatio,
    [data[key][t-_emSep]/data[key][t] for t in _emTData
    if (t in _emTDataNonZero) and (t >= _emTData[-1]/2 +1 + _emSep) ] ) # second half
   _emTPosRatio.append(
    [_emTDataRatio[t] for t in range(len(_emTDataRatio)) if _emRatio[t] > 0] )
   _emTPosFit.append(
    [_emTDataRatio[t] for t in range(len(_emTDataRatio))
    if _emRatio[t] > 0 and _emTDataRatio[t] in _emTFit] )
   _emLogRatio.append(
    [-gv.log(_emRatio[t])/_emSep for t in range(len(_emTDataRatio)) if _emRatio[t] > 0] )
   _emLogRatioFit.append(
    [-gv.log(_emRatio[t])/_emSep for t in range(len(_emTDataRatio))
    if (gv.mean(_emRatio[t]) > 0) and (_emTDataRatio[t] in _emTPosFit[-1])] )
   _emLogRatioCentral.append(gv.mean(_emLogRatio[-1]))
   _emLogRatioError.append([ list(gv.sdev(_emLogRatio[-1])), list(gv.sdev(_emLogRatio[-1])) ])
   ## -- fit
   _emRatioFit.append(lsq.wavg(_emLogRatioFit[-1]))
   _emFitCentral.append([gv.mean(_emRatioFit[-1]) for t in _emTPosFit[-1]])
   _emFitError.append(
    [list(np.array(_emFitCentral[-1])-np.array([gv.sdev(_emRatioFit[-1]) for t in _emTPosFit[-1]])),
     list(np.array(_emFitCentral[-1])+np.array([gv.sdev(_emRatioFit[-1]) for t in _emTPosFit[-1]]))]
    )
 print "Best plateau fits: "
 for key,rfit in zip([model.datatag for model in models],_emRatioFit):
  print "  ",key," : ",rfit
 print "   ----------------- "
 _emRatioFitNonZero = [x for x in _emRatioFit if not(x is None)]
 print "   avg  : ",lsq.wavg(_emRatioFitNonZero)

 ## -- done saving data
 if not(utp.get_option("to_terminal",True,**kwargs[key])) and\
    utp.get_option("to_file",False,**kwargs[key]):
  for ix in range(len(models)):
    ## -- loops and saves all without creating window
    do_plot_corr_effective_mass_check([ix])
 else:
  do_plot_corr_effective_mass_check(_emIdx)
Esempio n. 45
0
#        linestyle='none',
#        color='black',
#        )
#plt.plot(*exact, linestyle='none', marker='.')
#plt.title("Exact ellipse and data points")
#plt.xlim(6.5, 13.5)
#plt.ylim(10.5, 13.5)

#print("Looking at that figure, we come up with...")

banner("PRIORS")
priors = {
    'x0': gv.gvar('10(3)'),
    'y0': gv.gvar('12(2)'),
    'phi': gv.gvar('0(0.78)'),
    'log(a-b)':  gv.log(gv.gvar('2(2)')),
    'b':  gv.gvar('2(2)'),
}

for p in priors:
    print(f"{p} = {priors[p]}")

banner("METHOD")

print("\nWe're hoping to find the best-fit ellipse.  We should think of both the X and Y points as input and demand that they satisfy the constraint")
print("\n   [ (x-x0) * cos phi + (y-y0)* sin phi ]^2 / a^2 + [ (x-x0) * sin phi - (y-y0) * cos phi ]^2 / b^2 == 1\n")

print("So... what do we take as the 'data' to fit?  We should rewrite the constraint as a level curve,")
print("\n   g(x, y) = [ (x-x0) * cos phi + (y-y0)* sin phi ]^2 / a^2 + [ (x-x0) * sin phi - (y-y0) * cos phi ]^2 / b^2 - 1\n")
print("and the ellipse is when g(x,y) = 0.")