def main():
    data = make_data('etas-Ds.data') 
    models = make_models() 
    prior = make_prior(8)
    fitter = CorrFitter(models=make_models())
    p0 = None
    for N in [1, 2, 3, 4]:  
        print(30 * '=', 'nterm =', N)
        prior = make_prior(N)               
        fit = fitter.chained_lsqfit(data=data, prior=prior, p0=p0) 
        p0 = fit.pmean
    print_results(fit, prior, data)  
    if DISPLAYPLOTS:
            fitter.display_plots()
    # polish fit
    print('--- polish fit')
    fit = fitter.lsqfit(data=data, prior=fit.p, svdcut=1e-4)
    print_results(fit, prior, data)  
    if DISPLAYPLOTS:
            fitter.display_plots()
    # fit with structured models
    print('--- refit with structured models')
    models = [models[:2]] + models[2:]  
    fitter = CorrFitter(models=make_models())
    fit = fitter.chained_lsqfit(data=data, prior=prior, p0=p0)
    # polish
    print('--- polish fit')
    fit = fitter.lsqfit(data=data, prior=fit.p, svdcut=1e-4)
    print_results(fit, prior, data)
def doProcess(tmin,tmax,data=data,mdef=mdef):
  ## -- do a single fit ... set up for parallelizing
  for key in data:
    mdef[key]['tfit'] = range(tmin,tmax)
  models = make_models(data=data,lkey=df.lkey,mdef=mdef)
  pdict0 = utf.get_prior_dict(df.define_prior,
   df.define_prior['nkey'],df.define_prior['okey'],df.num_nst,df.num_ost)
  prior = make_prior(models,prior_dict=pdict0,nst=df.num_nst,ost=df.num_ost)
  fitter = CorrFitter(models=models,maxit=df.maxit)
  #try: ## -- if catching value error, just exit
  ## -- p0 = initial values (dictionary)
  if df.do_initial:
   try:
    p0={}
    for key in df.define_init:
     eokey = utf.get_evenodd(key)
     if eokey == 'o':
      p0[key] = df.define_init[key][:df.num_ost]
     else:
      p0[key] = df.define_init[key][:df.num_nst]
    fit = fitter.lsqfit(data=data,prior=prior,p0=p0,svdcut=df.svdcut)
   except KeyError:
    print "Could not use initial point definitions"
    fit = fitter.lsqfit(data=data,prior=prior,svdcut=df.svdcut)
  else:
   fit = fitter.lsqfit(data=data,prior=prior,svdcut=df.svdcut)
  ## --
  print_fit(fit,prior)
  print_error_budget(fit)
  save_data('fit-timevary/fit_'+str(tmin)+'_'+str(tmax)+'.out',fit,data)
示例#3
0
def single_fit(tag_, tstar, CHARGED=False):

    w0 = gv.gvar('0.1715(9)')
    w0overa = gv.gvar('1.1367(5)')
    ZV = gv.gvar('0.9837(20)')
    ZVqed = gv.gvar('0.999544(14)') * ZV
    hbarc = 0.197326968
    a_vcoarse = (w0 / w0overa) / hbarc

    if CHARGED == True:
        ZV = ZVqed
    else:
        ZV = ZV
    dataf = dsetavg[tag_]
    tmin = 2

    # replace data after t* with fit
    #  t* can be changed

    fitter = CorrFitter(models=build_models(tmin, 48, tag_))
    svdcut = 1e-6

    for nexp in [4]:
        print('=== nexp =', nexp, ' tmin = ', tmin, ' svdcut = ', svdcut)
        fit = fitter.lsqfit(data=dsetavg,
                            prior=build_prior(nexp),
                            p0=pfile,
                            maxit=10000,
                            svdcut=svdcut)  #,fitter='gsl_multifit')
        print(fit)

    newdata = dataf[:tstar]
    #print("Before append/concatenate")
    #print(newdata, len(newdata))
    fitdata = Corr2(datatag=tag_,
                    tdata=range(48),
                    a=('a:rho', 'a:rhoo'),
                    b=('b:rho', 'b:rhoo'),
                    dE=('dE:rho', 'dE:rhoo'),
                    s=(1, -1)).fitfcn(fit.p)
    newdata = np.append(np.array(newdata), fitdata[tstar:])
    #print(fitdata[tstar:], fitdata[tstar:].size)
    #print("After append/concatenate")
    #print(newdata, newdata.size)
    #sys.exit(0)

    # use Z_V from appendix of 1909.00756; divided by u_0 to make the 1-link currents used match
    vpol = g2.fourier_vacpol(newdata, Z=ZV, ainv=1 / a_vcoarse, periodic=False)

    a_mu = g2.a_mu(vpol, Q=1. / 3.)

    print('a_mu:', a_mu, "for", tag_, "t* = ", tstar)

    return a_mu
示例#4
0
def main():
    data, basis = make_data('etab.data') 
    fitter = CorrFitter(models=make_models(basis))
    p0 = None
    for N in range(1, 10):  
        print(30 * '=', 'nterm =', N)
        prior = make_prior(N, basis)          
        fit = fitter.lsqfit(data=data, prior=prior, p0=p0, svdcut=0.0004) 
        p0 = fit.pmean
    print_results(fit, basis, prior, data) 
    if DISPLAYPLOTS:
        fitter.display_plots()
def main():
    data = make_data('etas-Ds.data') 
    models = make_models()   
    prior = make_prior(8)
    fitter = CorrFitter(models=make_models(), ratio=False)                  # 1
    p0 = None
    for N in [1, 2]:                                                        # 2
        print(30 * '=', 'nterm =', N)
        prior = make_prior(8)                                               # 3          
        fit = fitter.lsqfit(data=data, prior=prior, p0=p0, nterm=(N, N))    # 4 
        p0 = fit.pmean
    print_results(fit, prior, data)  
    if DISPLAYPLOTS:
        fitter.display_plots()
    test_fit(fitter, 'etas-Ds.data')
示例#6
0
 def __init__(self, dic, params, childfit, parentfit):
     self.name = dic['name']
     self.Texts = dic['Text']
     self.child_index = dic['child_index']
     self.parent_index = dic['parent_index']
     self.include2ptdata = dic['include2ptdata']
     self.priorfile = dic['priorfile']
     self.child = childfit
     self.parent = parentfit
     self.tmin = childfit.tmin
     self.tmax = parentfit.tmin
     self.nexp = self.child.nexp
     self.dofit = True
     if childfit.name == 'pimom0':
         self.Von=None
         self.Voo=None
     else:
         self.Von='Von'
         self.Voo='Voo'
     self.Vnn='Vnn'
     self.Vno='Vno'
     self.model = self.build_3pt_models(params)
     self.fitter = CorrFitter(self.model)
     self.prior =  self.build_prior(params)
     self.prior.update( self.child.prior )
     self.prior.update( self.parent.prior )
示例#7
0
 def __init__(self, dic, params):
     #print('Creating 2pt fit')
     #print(dic)
     self.name = dic['name']
     self.tmin = dic['tmin']
     self.tmax = dic['tmax']
     self.nexp = dic['nexp']
     self.noxp = dic['noxp']
     self.priorfile = dic['priorfile']
     self.p0file = dic['p0file']
     self.savep0 = dic['savep0']
     self.type = dic['type']
     self.dofit = dic['dofit']
     name = self.name
     if name == 'pimom0':
         self.a=(name+':a')
         self.dE=(name+':dE')
     else:
         self.a=(name+':a',name+':ao')
         self.dE=(name+':dE',name+':dEo')
     # build model
     self.model = self.build_model(params)
     self.fitter = CorrFitter(self.model)
     # build prior
     self.prior = self.build_prior(params)
示例#8
0
def main(tstr):
    dfile = '/home/gray/Desktop/lattice-analysis/data/qed/coarse/rho_coarse_ms.gpl'

    madedata = make_data(
        dfile, norm=3.)  # factor of 3 for colour (missed in extraction)
    data = madedata[0]
    T = data.size / len(madedata[1])  # extent in time dir
    tag01 = madedata[1][0]
    tag02 = madedata[1][1]
    print("time extent is: ", T)
    print(dfile)
    suggestedsvdcut = madedata[2]

    pfile = None  #"vector_fit.p" # last fit

    tmin = 2
    svdcut = 1e-10  #suggestedsvdcut

    fitter = CorrFitter(models=build_models(tag01, tag02, tmin, T))
    for nexp in [2, 3, 4, 5]:
        fit = fitter.lsqfit(data=data,
                            prior=build_prior(nexp),
                            p0=None,
                            maxit=20000,
                            svdcut=svdcut,
                            add_svdnoise=False)
    print(fit)

    tdata = range(T)
    tfit = range(tmin, T + 1 - tmin)  # all ts
    tp = T

    tstar = tstr

    tcut = 200

    newdata = {}

    tags = ['nocharge', 'charge']
    newdata[tags[0]] = data[tag01][:tstar + 1]
    newdata[tags[1]] = data[tag02][:tstar + 1]

    # do replacement of data with fit

    fitdatauncharged = Corr2(datatag=tags[0],
                             tdata=range(T),
                             a=('a1:vec:s', 'ao:vec:s'),
                             b=('a1:vec:s', 'ao:vec:s'),
                             dE=('dE:vec:s', 'dEo:vec:s'),
                             s=(1., -1.)).fitfcn(fit.p)
    for index in range(T):
        if index >= tcut:
            newdata[tags[0]] = np.append(newdata[tags[0]], 0.)
        elif index > tstar:
            newdata[tags[0]] = np.append(newdata[tags[0]],
                                         fitdatauncharged[index])

    fitdatachargeddown = Corr2(datatag=tags[1],
                               tdata=range(T),
                               a=('a1:vec:qed:s', 'ao:vec:qed:s'),
                               b=('a1:vec:qed:s', 'ao:vec:qed:s'),
                               dE=('dE:vec:qed:s', 'dEo:vec:qed:s'),
                               s=(1., -1.)).fitfcn(fit.p)
    for index in range(T):
        if index >= tcut:
            newdata[tags[1]] = np.append(newdata[tags[1]], 0.)
        elif index > tstar:
            newdata[tags[1]] = np.append(newdata[tags[1]],
                                         fitdatachargeddown[index])

    print('THIS IS THE INFORMATION CENTRE')
    print(len(newdata[tags[0]]), len(newdata[tags[1]]))
    print('tmin, tstar', tmin, tstar)

    vpol = g2.fourier_vacpol(newdata[tags[0]],
                             Z=ZV,
                             ainv=1 / a,
                             periodic=False)
    unchargedamus = g2.a_mu(vpol, 1 / 3.)

    vpol = g2.fourier_vacpol(newdata[tags[1]],
                             Z=ZVqed,
                             ainv=1 / a,
                             periodic=False)
    chargedamus = g2.a_mu(vpol, 1 / 3.)

    amus_rt = chargedamus / unchargedamus
    amu_diff = chargedamus - unchargedamus
    amu_diff_rt = amu_diff / unchargedamus

    print(
        '[s] a_mu[QCD+QED]{0:>20}\n|a_mu[QCD+QED]-a_mu[QCD]{1:>20}\n|a_mu/a_mu {2:>20}'
        .format(chargedamus, amu_diff, amu_diff_rt))
       init3[key] = utf.truncate_upper_triangle(init3[key],df.num_ost_3pt)
     elif eokey == 'no':
      init3[key] = np.resize(df.define_init_3pt[key],(df.num_nst_3pt,df.num_ost_3pt))
     elif eokey == 'on':
      ## -- is this correct for symmetric v?
      #init3[key] = np.resize(df.define_init_3pt[key],(df.num_ost_3pt,df.num_nst_3pt))
      pass
     elif eokey == 'n':
      init3[key] = df.define_init_3pt[key][:df.num_nst]
     elif eokey == 'o':
      init3[key] = df.define_init_3pt[key][:df.num_ost]
else:
  init3=None
pass 

fitter2 = CorrFitter(models=models2,maxit=df.maxit)
fitter3 = CorrFitter(models=models,maxit=df.maxit)
fitterc = CorrFitter(models=[models2,models],maxit=df.maxit)
if df.do_2pt:
 print "starting 2pt fit..."
 fit2 = fitter2.lsqfit(data=dall,prior=priors2,p0=init2,svdcut=df.svdcut)
 ## -- fits take a long time, so print prematurely
 print_fit(fit2,priors2)
if df.do_3pt:
 print "starting 3pt fit..."
 fit3 = fitter3.lsqfit(data=dall,prior=priors,p0=init3,svdcut=df.svdcut)
else:
 print "Ignoring 3pt fit!"
 fit3=None

#fit3 = fitter3.lsqfit(data=dall,prior=priors,svdcut=df.svdcut)
def main(tstr):
    dfile = '/home/gray/Desktop/lattice-analysis/data/qed/vcoarse/self_b/rho_vcoarse_7ml.gpl'
   
    madedata = make_data(dfile,norm=3.) # factor of 3 for colour (missed in extraction)
    data = madedata[0]
    T = data.size / len(madedata[1]) 		# extent in time dir
    tag01 = madedata[1][0]
    tag02 = madedata[1][1]
    tag03 = madedata[1][2]		# =tag01 if no isospin breaking
    print("time extent is: ", T)
    print(dfile)
    suggestedsvdcut = madedata[2]
    
    pfile = None #"vector_fit.p" # last fit

    tmin = 2
    svdcut = 1e-10 #suggestedsvdcut

    fitter = CorrFitter(models=build_models(tag01,tag02,tag03,tmin,T))
    for nexp in [2,3,4,5]:
        fit = fitter.lsqfit(data=data,prior=build_prior(nexp),p0=None,maxit=20000,svdcut=svdcut,add_svdnoise=False)
    print(fit)


    tdata = range(T)
    tfit = range(tmin,T+1-tmin) # all ts
    tp = T

    tstar = tstr 

    tcut = 200

    newdata = {}

    tags = ['nocharge', 'up_charge', 'down-charge']
    newdata[tags[0]] = data[tag01][:tstar+1]
    newdata[tags[1]] = data[tag02][:tstar+1]
    newdata[tags[2]] = data[tag03][:tstar+1]


    # do replacement of data with fit

    fitdatauncharged = Corr2(datatag=tags[0],tdata=range(T),a=('a1:vec:u','ao:vec:u'),b=('a1:vec:u','ao:vec:u'),dE=('dE:vec:u','dEo:vec:u'),s=(1.,-1.)).fitfcn(fit.p)
    for index in range(T):
            if index >= tcut:
                newdata[tags[0]] = np.append(newdata[tags[0]],0.)
            elif index > tstar:
                newdata[tags[0]] = np.append(newdata[tags[0]],fitdatauncharged[index])

    fitdatachargedup = Corr2(datatag=tags[1],tdata=range(T),a=('a1:vec:qed:u','ao:vec:qed:u'),b=('a1:vec:qed:u','ao:vec:qed:u'),dE=('dE:vec:qed:u','dEo:vec:qed:u'),s=(1.,-1.)).fitfcn(fit.p)
    fitdatachargedown = Corr2(datatag=tags[2],tdata=range(T),a=('a1:vec:qed:d','ao:vec:qed:d'),b=('a1:vec:qed:d','ao:vec:qed:d'),dE=('dE:vec:qed:d','dEo:vec:qed:d'),s=(1.,-1.)).fitfcn(fit.p)
    for index in range(T):
            if index >= tcut:
                newdata[tags[1]] = np.append(newdata[tags[1]],0.)
                newdata[tags[2]] = np.append(newdata[tags[2]],0.)
            elif index > tstar:
                newdata[tags[1]] = np.append(newdata[tags[1]],fitdatachargedup[index])
                newdata[tags[2]] = np.append(newdata[tags[2]],fitdatachargedown[index])

    print('THIS IS THE INFORMATION CENTRE')
    print(len(newdata[tags[0]]), len(newdata[tags[1]]), len(newdata[tags[2]]))
    print('tmin, tstar', tmin, tstar)

    vpol = g2.fourier_vacpol(newdata[tags[0]], Z=ZV, ainv=1/a, periodic=False)
    unchargedamuu = g2.a_mu(vpol,2/3.)
 
    vpol = g2.fourier_vacpol(newdata[tags[1]], Z=ZVqed, ainv=1/a, periodic=False)
    chargedamuu = g2.a_mu(vpol,2/3.)

    vpol = g2.fourier_vacpol(newdata[tags[0]], Z=ZV, ainv=1/a, periodic=False)
    unchargedamud = g2.a_mu(vpol,1/3.)
 
    vpol = g2.fourier_vacpol(newdata[tags[2]], Z=ZVqed, ainv=1/a, periodic=False)
    chargedamud = g2.a_mu(vpol,1/3.)

    d_rt = chargedamud/unchargedamud
    u_rt = chargedamuu/unchargedamuu 
    amu_qcd = unchargedamud+unchargedamuu
    amu_qcdqed = chargedamuu+chargedamud
    amu_rt = amu_qcdqed/amu_qcd
    amu_diff = (amu_qcdqed-amu_qcd)/amu_qcd
    amu_diff2 = amu_qcdqed-amu_qcd

    print('[d] a_mu[QCD+QED]||a_mu[QCD+QED]/a_mu[QCD]{0:>20}||{1}'.format(chargedamud,d_rt))
    print('[u] a_mu[QCD+QED]||a_mu[QCD+QED]/a_mu[QCD]{0:>20}||{1}'.format(chargedamuu,u_rt))
    print('\n[u+d] a_mu[QCD+QED]||a_mu[QCD]||ratio||diff\n{0:20}{1:20}{2:20}{3:20}'.format(amu_qcdqed, amu_qcd, amu_rt, amu_diff))
示例#11
0
class Fit2:

    def __init__(self, dic, params):
        #print('Creating 2pt fit')
        #print(dic)
        self.name = dic['name']
        self.tmin = dic['tmin']
        self.tmax = dic['tmax']
        self.nexp = dic['nexp']
        self.noxp = dic['noxp']
        self.priorfile = dic['priorfile']
        self.p0file = dic['p0file']
        self.savep0 = dic['savep0']
        self.type = dic['type']
        self.dofit = dic['dofit']
        name = self.name
        if name == 'pimom0':
            self.a=(name+':a')
            self.dE=(name+':dE')
        else:
            self.a=(name+':a',name+':ao')
            self.dE=(name+':dE',name+':dEo')
        # build model
        self.model = self.build_model(params)
        self.fitter = CorrFitter(self.model)
        # build prior
        self.prior = self.build_prior(params)

    def build_model(self,params):
        model = Corr2( datatag='2pt'+self.name,tp=params.NT,tdata=range(params.NT),
                       tfit=range(self.tmin,self.tmax+1),
                       a=self.a,b=self.a,dE=self.dE,s=(1.,-1.) )
        return model

    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

    def print_fit(self,par,outfile):
        """print the energy and amplitude results from a fit"""
        fit = self.results
        name = self.name
        p = fit.p
        self.chi2_cal()
        self.chi2_aug_part()
        self.Q = conf_int(self.chi2/2, par.ncon, self.dof/2)

        dE = exp(p['log('+name+':dE)'])
        E = [sum(dE[:i+1]) for i in range(self.nexp)]
        a = exp(p['log('+name+':a)'])
        if self.name != 'pimom0':
            dEo = exp(p['log('+name+':dEo)'])
            Eo = [sum(dEo[:i+1]) for i in range(self.nexp)]
            ao = exp(p['log('+name+':ao)'])

        ofile = open(outfile,'a')

        if self.dof > 0:
            chi2dof = self.chi2/self.dof
        else:
            chi2dof = 99.9
        if chi2dof > 99:
            chi2dof = 99.9

        form = "{:s} & {:2d} - {:2d} & {:d}+{:d} & {:4.1f} & {:3d} & {:4.2f} "
        ena  = "& {:<11s} & {:<11s} "
        ofile.write( form.format( self.name,self.tmin,self.tmax,self.nexp,self.noxp,chi2dof,self.dof,self.Q ) )
        for i in range(self.nexp):
            ofile.write( ena.format(E[i].fmt(ndecimal=4),a[i].fmt(ndecimal=4),Eo[i].fmt(ndecimal=4),ao[i].fmt(ndecimal=4)) )
        ofile.write(" \\\\ \n")
                         

    def print_prior(self,par,outfile):
        """print the priors and result for comparison"""
        fit = self.results
        p = self.prior
        name = self.name
        f = fit.p
        
        dE = exp(f['log('+name+':dE)'])
        E = [sum(dE[:i+1]) for i in range(self.nexp)]
        a = exp(f['log('+name+':a)'])
        if self.name != 'pimom0':
            dEo = exp(f['log('+name+':dEo)'])
            Eo = [sum(dEo[:i+1]) for i in range(self.nexp)]
            ao = exp(f['log('+name+':ao)'])
        
        pdE = exp(p['log('+name+':dE)'])
        pa = exp(p['log('+name+':a)'])
        if self.name != 'pimom0':
            pdEo = exp(p['log('+name+':dEo)'])
            pao = exp(p['log('+name+':ao)'])

        ofile = open(outfile,'a')
        ofile.write("{:s} & Prior & Value & & Prior & Value \\\\ # {:d}-{:d} {:d}+{:d} \n".format(
                name,self.tmin,self.tmax,self.nexp,self.nexp))
            
        form = "$a_{:d}$  & {:<11s} & {:<11s} & $dE_{:d}$  & {:<11s} & {:<11s} \\\\ \n"
        for state in range(self.nexp):
            ofile.write( form.format( state,pa[state].fmt(),a[state].fmt(),
                                      state,pdE[state].fmt(),dE[state].fmt() ) )
        if self.name != 'pimom0':
            form = "$a'_{:d}$ & {:<11s} & {:<11s} & $dE'_{:d}$ & {:<11s} & {:<11s} \\\\ \n"
            for state in range(self.nexp):
                ofile.write( form.format( state,pao[state].fmt(),ao[state].fmt(),
                                          state,pdEo[state].fmt(),dEo[state].fmt() ) )
        
    def print_model(self,par,outfile):
        """print the fit data and model and the difference"""
        fit = self.results
        t,g,dg,gth,dgth = self.fitter.collect_fitresults()['2pt'+self.name]
        ofile = open(outfile,'a')
        ofile.write( "   t | {:12s}           value                | sigma_m sigma_v \n".format('2pt'+self.name) )
        for it in range(0,self.tmax-self.tmin):
            data = gvar(g[it],dg[it])
            model = gvar(gth[it],dgth[it])
            diff1 = (data.mean-model.mean)/data.sdev
            diff2 = (data.mean-model.mean)/model.sdev
            ofile.write( " {:3d} | {:<20s} {:<20s} | {:+5.3f}  {:+5.3f} \n".format(
                    t[it],data.fmt(),model.fmt(),diff1,diff2) )

    def chi2_cal(self):
        """calculate chi2 of fit"""
        t,g,dg,gth,dgth = self.fitter.collect_fitresults()['2pt'+self.name]
        chi2 = 0.
        for it in range(0,self.tmax-self.tmin):
            chi2 = ( (g[it]-gth[it])/dg )**2
        total = sum(chi2)
        #print(chi2,total)
        parameters = 0
        for key in self.prior.keys():
            parameters = parameters + len(self.results.p[key])
        self.dof = len(g)-parameters
        self.chi2 = total
        return total,self.dof

    def chi2_aug_part(self):
        """calculate the part of the chi2 coming from the priors"""
        pth = self.results.p
        p = self.prior
        aug = 0
        for key in p.keys():
            for exp in range(self.nexp):
                aug = aug + ( (p[key][exp].mean-pth[key][exp].mean)/p[key][exp].sdev )**2
        self.aug = aug
        return aug
示例#12
0
class Fit3:
    
    def __init__(self, dic, params, childfit, parentfit):
        self.name = dic['name']
        self.Texts = dic['Text']
        self.child_index = dic['child_index']
        self.parent_index = dic['parent_index']
        self.include2ptdata = dic['include2ptdata']
        self.priorfile = dic['priorfile']
        self.child = childfit
        self.parent = parentfit
        self.tmin = childfit.tmin
        self.tmax = parentfit.tmin
        self.nexp = self.child.nexp
        self.dofit = True
        if childfit.name == 'pimom0':
            self.Von=None
            self.Voo=None
        else:
            self.Von='Von'
            self.Voo='Voo'
        self.Vnn='Vnn'
        self.Vno='Vno'
        self.model = self.build_3pt_models(params)
        self.fitter = CorrFitter(self.model)
        self.prior =  self.build_prior(params)
        self.prior.update( self.child.prior )
        self.prior.update( self.parent.prior )

            

    def build_3pt_models(self,params):
        models_3pt = []
        for T in self.Texts:
            models_3pt.append( Corr3( datatag="3pt"+self.name+"T"+str(T),T=T,tdata=range(T+1),
                                      tfit=range(self.tmin,T-self.tmax+1),
                                      a=self.child.a,dEa=self.child.dE,sa=(1.,-1.),
                                      b=self.parent.a,dEb=self.parent.dE,sb=(1.,-1.),
                                      Vnn=self.Vnn,Vno=self.Vno,Von=self.Von,Voo=self.Voo) )
        if self.include2ptdata:
            models_3pt.append( self.child.build_model(params) )
            models_3pt.append( self.parent.build_model(params) ) 

        return models_3pt
        
    def build_prior(self,params):
        """build interaction matrix prior"""
        prior = BufferDict()
        
        nexp = self.child.nexp
        noxp = self.child.noxp
        prior_file = open(self.priorfile,'r')
        pp = yaml.load(prior_file)
        
        prior['Vnn'] = [[ gvar(pp['v22'][0],pp['v22'][1]) for i in range(nexp)] for j in range(nexp)]
        prior['Vno'] = [[ gvar(pp['v22'][0],pp['v22'][1]) for i in range(nexp)] for j in range(nexp)]
        
        prior['Vnn'][0][0] = gvar(pp['v00'][0],pp['v00'][1])
        prior['Vno'][0][0] = gvar(pp['v11'][0],pp['v11'][1])
        for i in range(1,nexp):
            for j in range(1,nexp):
                if i<1 or j<1:
                    prior['Vnn'][i][j] = gvar(pp['v11'][0],pp['v11'][1])
                    prior['Vno'][i][j] = gvar(pp['v11'][0],pp['v11'][1])
                    
        if self.name != "DPm0":
            prior['Voo'] = [[ gvar(pp['v22'][0],pp['v22'][1]) for i in range(nexp)] for j in range(nexp)]
            prior['Von'] = [[ gvar(pp['v22'][0],pp['v22'][1]) for i in range(nexp)] for j in range(nexp)]
        
            prior['Voo'][0][0] = gvar(pp['v11'][0],pp['v11'][1])
            prior['Von'][0][0] = gvar(pp['v11'][0],pp['v11'][1])
            for i in range(1,nexp):
                for j in range(1,nexp):
                    if i<1 or j<1:
                        prior['Voo'][i][j] = gvar(pp['v11'][0],pp['v11'][1])
                        prior['Von'][i][j] = gvar(pp['v11'][0],pp['v11'][1])
                        
        return prior
                    
    def print_fit(self,par,outfile):
        """print the energy and amplitude results from a fit"""
        fit = self.results
        name = self.name
        p = fit.p
        self.chi2_cal()
        #self.chi2_aug_part()
        self.Q = conf_int(self.chi2/2, par.ncon, self.dof/2)
        nexp = self.child.nexp

        name = self.child.name
        CdE = exp(p['log('+name+':dE)'])
        CE = [sum(CdE[:i+1]) for i in range(nexp)]
        a = exp(p['log('+name+':a)'])
        if self.name != 'pimom0':
            CdEo = exp(p['log('+name+':dEo)'])
            CEo = [sum(CdEo[:i+1]) for i in range(nexp)]
            ao = exp(p['log('+name+':ao)'])

        name = self.parent.name
        PdE = exp(p['log('+name+':dE)'])
        PE = [sum(PdE[:i+1]) for i in range(nexp)]
        b = exp(p['log('+name+':a)'])
        if self.name != 'pimom0':
            PdEo = exp(p['log('+name+':dEo)'])
            PEo = [sum(PdEo[:i+1]) for i in range(nexp)]
            bo = exp(p['log('+name+':ao)'])

        # calculating f_0
        # DOESN"T WORK FOR D TO K YET!!!!!!!!!
        if self.child.name == 'pimom0':
            mpi = CE[0]
        else:
            mpi = gvar(par.pi0,par.pi0_err)
        if self.child.name == 'pimom0' or self.child.name == 'pimom2':
            m_q = par.m_l
        else:
            m_q = par.m_s
        Epi = CE[0]
        mD = PE[0]
        v = p['Vnn'][0][0]
        self.f_0 = v*sqrt(Epi*mD)*(par.m_c-m_q)/(mD**2-mpi**2)
        self.qsq = mpi**2+mD**2-2*mD*Epi        

        ofile = open(outfile,'a')

        if self.dof != 0:
            chi2dof = self.chi2/self.dof
        else:
            chi2dof = 99.9
        if chi2dof > 99:
            chi2dof = 99.9

        pars = "{:s} & {:2d}-{:2d} & {:2d}-{:2d} & {:d}+{:d} & {:4.1f} & {:3d} & {:4.2f} & "
        energies = "{:s} & {:<11s} & {:<11s} & "
        form = "{:<12s} & {:<12s} \\\\ \n"
        ofile.write( pars.format( self.name,self.tmin,self.child.tmax,self.tmax,self.parent.tmax,
                                  nexp,nexp,chi2dof,self.dof,self.Q )
                     +energies.format( self.child.name,CE[0].fmt(ndecimal=4),a[0].fmt(ndecimal=4) )
                     +energies.format( self.parent.name,PE[0].fmt(ndecimal=4),b[0].fmt(ndecimal=4) )
                     +form.format( self.f_0.fmt(ndecimal=4), self.qsq.fmt(ndecimal=4) ) )

    def print_model(self,par,outfile):
        """print the fit data and model and the difference"""
        fit = self.results
        names = ["2pt"+self.child.name,"2pt"+self.parent.name]
        [names.append("3pt"+self.name+"T"+str(T)) for T in self.Texts]
        print(names)
        ofile = open(outfile,'a')
        ofile.write("{:5s} models, {:d}+{:d} fit, {:d} to T-{:d} window "+strftime("%H:%M:%S")+"\n".format(self.name,self.nexp,self.nexp,self.child.tmin,self.child.tmax))
        for name in names:
            t,g,dg,gth,dgth = self.fitter.collect_fitresults()[name]
            ofile.write( "   t | {:<11s}          theory               | sigma_data sigma_th \n".format(name) )
            for it in range(0,len(t)):
                data = gvar(g[it],dg[it])
                model = gvar(gth[it],dgth[it])
                diff1 = (data.mean-model.mean)/data.sdev
                diff2 = (data.mean-model.mean)/model.sdev
                ofile.write( " {:3d} | {:<20s} {:<20s} | {:+6.3f}     {:+6.3f} \n".format(
                        t[it],data.fmt(),model.fmt(),diff1,diff2) )

    def print_prior(self,par,outfile):
        """print the priors and result for comparison"""
        fit = self.results
        p = self.prior
        name = self.name
        f = fit.p

        ofile = open(outfile,'a')

        ofile.write("{:5s} priors, {:d}+{:d} fit, {:d} to T-{:d} window "+strftime("%H:%M:%S")+"\n".format(name,self.nexp,self.nexp,self.child.tmin,self.child.tmax))
        self.print_2pt_prior(par,ofile,self.child.name)
        self.print_2pt_prior(par,ofile,self.parent.name)

        ofile.write("V \n")
        form = "{:<8s} "
        self.V_prior_line(ofile,"Vnn prior",form,self.nexp,p['Vnn'])
        self.V_prior_line(ofile,"Vnn fittd",form,self.nexp,f['Vnn'])
        self.V_prior_line(ofile,"Vno prior",form,self.nexp,p['Vno'])
        self.V_prior_line(ofile,"Vno fittd",form,self.nexp,f['Vno'])
        if self.child.name != 'pimom0':
            self.V_prior_line(ofile,"Von prior",form,self.nexp,p['Von'])
            self.V_prior_line(ofile,"Von fittd",form,self.nexp,f['Von'])
            self.V_prior_line(ofile,"Voo prior",form,self.nexp,p['Voo'])
            self.V_prior_line(ofile,"Voo fittd",form,self.nexp,f['Voo'])

    def print_2pt_prior(self,par,ofile,name):
        fit = self.results
        p = self.prior
        f = fit.p
        
        dE = exp(f['log('+name+':dE)'])
        E = [sum(dE[:i+1]) for i in range(self.nexp)]
        a = exp(f['log('+name+':a)'])
        if self.name != 'pimom0':
            dEo = exp(f['log('+name+':dEo)'])
            Eo = [sum(dEo[:i+1]) for i in range(self.nexp)]
            ao = exp(f['log('+name+':ao)'])
        
        pdE = exp(p['log('+name+':dE)'])
        pa = exp(p['log('+name+':a)'])
        if self.name != 'pimom0':
            pdEo = exp(p['log('+name+':dEo)'])
            pao = exp(p['log('+name+':ao)'])

        ofile.write("{:5s} \n".format(name))
        form = "{:<12s} {:<12s} "
        self.prior_line(ofile,"odd prior",form,self.nexp,pa,pdE)
        self.prior_line(ofile,"odd fittd",form,self.nexp,a,dE)
        if self.name != 'pimom0':  
            self.prior_line(ofile,"evn prior",form,self.nexp,pao,pdEo)
            self.prior_line(ofile,"evn fittd",form,self.nexp,ao,dEo)

    def prior_line(self,ofile,name,form,nexp,a,E):
        ofile.write(name+": ")
        ofile.write(form.format(a[0].fmt(),E[0].fmt()))
        for state in range(1,self.nexp):
            ofile.write("| "+form.format(a[state].fmt(),E[state].fmt()))
        ofile.write(" \n")

    def V_prior_line(self,ofile,name,form,nexp,V):
        ofile.write(name+": ")
        ofile.write(form.format(V[0][0].fmt()))
        for i in range(1,self.nexp):
            for j in range(1,self.nexp):
                ofile.write("| "+form.format(V[i][j].fmt()))
        ofile.write(" \n")


    def chi2_cal(self):
        """calculate chi2 of fit"""

        chi2 = 0.
        points = 0
        for fit in (self.child,self.parent):
            t,g,dg,gth,dgth = self.fitter.collect_fitresults()["2pt"+fit.name]
            for it in range(0,fit.tmax-fit.tmin):
                chi2 = ( (g[it]-gth[it])/dg )**2
            total2pt = sum(chi2)
            points = points + len(g)
        for T in self.Texts:
            t,g,dg,gth,dgth = self.fitter.collect_fitresults()["3pt"+self.name+"T"+str(T)]
            for it in range(0,T-fit.tmax-fit.tmin):
                chi2 = ( (g[it]-gth[it])/dg )**2
            total3pt = sum(chi2)
            points = points + len(g)
            
        parameters = 0
        for key in self.prior.keys():
            parameters = parameters + len(self.results.p[key])
        self.dof = points-parameters
        self.chi2 = total2pt+total3pt
        return self.chi2,self.dof

    def chi2_aug_part(self):
        """calculate the part of the chi2 coming from the priors"""
        ####### NOT WORKING ATM #####
        pth = self.results.p
        p = self.prior
        aug = 0
        print(pth.values())
        qth = np.fromiter(pth.values(),np.float)
        q = np.fromiter(p.values(),np.float)
        print(qth)
        print(q)
        for exp in range(self.nexp):
            aug = aug + ( (p[key][exp].mean-pth[key][exp].mean)/p[key][exp].sdev )**2
        self.aug = aug
        return aug
示例#13
0
 models = make_models(data=data,lkey=df.lkey)
 prior = make_prior(models)
## --

## -- DEPRICATED
#if df.do_uncorr:
# ## -- remove the correlations from the data
# dataCorr = data
# datlen = len(gv.evalcov(data)['Gaa','Gaa'])
# fakecov = np.zeros((datlen,datlen))
# for i in range(datlen):
#  fakecov[i,i] = np.diag(gv.evalcov(data)['Gaa','Gaa'])[i]
# data['Gaa'] = gv.gvar([data['Gaa'][i].mean for i in range(datlen)],np.array(fakecov))
## --

fitter = CorrFitter(models=models,maxit=df.maxit)
#fit = fitter.chained_lsqfit(data=data, prior=prior)
#fit = fitter.lsqfit(data=data, prior=fit.p)
#fit = fitter.lsqfit(data=data,prior=prior,p0="test.init.out",svdcut=df.svdcut)
if df.do_2pt:
  if df.do_initial:
   try:
    p0={}
    for key in df.define_init:
     eokey = utf.get_evenodd(key)
     if eokey == 'o':
      p0[key] = df.define_init[key][:df.num_ost]
     else:
      p0[key] = df.define_init[key][:df.num_nst]
    fit = fitter.lsqfit(data=data,prior=prior,p0=p0,svdcut=df.svdcut)
   except KeyError:
## -- temporary fix
if df.do_init3:
  #init3={}
  #if argsin['override_init']:
  init3 = make_adv_init_from_fit_file_3pt(models3,'fit_adv_'+irrepStr+'_3pt',\
   fresh_overlap=True,fresh_amplitude=True)
else:
  init3=None
pass 

## -- temporary
init2=None
#init3=None
#print init3

fitter2 = CorrFitter(models=models2,maxit=df.maxit)
fitter3 = CorrFitter(models=models,maxit=df.maxit)
#print models
#raise ValueError('test')
print
print 'prior: '
for key in sorted(priors):
 print key,priors[key]
#print
#print 'init : ',init3
#for key in init3:
# print key,init3[key]
print
if df.do_2pt:
 print "starting 2pt fit..."
 fit2 = fitter2.lsqfit(data=dall,prior=priorsa2,p0=init2,svdcut=df.svdcut)
def doProcess(nst,ost,n3st=1,o3st=1,data=dall):
  ## -- do a single fit ... set up for parallelizing
  if df.do_2pt and not(df.do_3pt):
   pdict3 = utf.get_prior_dict(df.define_prior,
    df.define_prior['nkey'],df.define_prior['okey'],nst,ost,do_v_symm=True)
   models = make_models(data=dall,lkey=df.lkey)
   prior  = make_prior(models,prior_dict=pdict3,nst=nst,ost=ost)
   fitter = CorrFitter(models=models,maxit=df.maxit)
   if df.do_init2:
     init={}
     if argsin['override_init']:
      init = make_init_from_fit_file_3pt(models,'fit_dict')
     else:
      for key in df.define_init:
        ## -- does this interfere with underscore tags?
        eokey = utf.get_evenodd(key)
        if eokey == 'n':
         init[key] = df.define_init[key][:nst]
        elif eokey == 'o':
         init[key] = df.define_init[key][:ost]
   else:
     init=None
  else:
   pdict = utf.get_prior_dict(df.define_prior,
    df.define_prior['nkey'],df.define_prior['okey'],
    nst,ost,do_v_symm=True)
   pdict3 = 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'],nst,ost,do_v_symm=True)
   for key in pdict:
    pdict3[key] = pdict[key]
   models2 = make_models(data=dall,lkey=df.lkey,use_advanced=True)
   #models3 = make_models_3pt(data=dall,lkey=df.lkey3)
   models3 = make_models_advanced(data=dall,lkey=df.lkey3)
   models = list()
   for model in models2:
    models.append(model)
   for model in models3:
    models.append(model)
   #prior2 = make_prior(models2,prior_dict=pdict,nst=nst,ost=ost)
   #prior3 = make_prior_3pt(models3,prior_dict=pdict3,nst=nst,ost=ost,n3st=nst,o3st=ost)
   #priors = gv.BufferDict()
   #for key in prior2:
   # priors[key] = prior2[key]
   #for key in prior3:
   # priors[key] = prior3[key]
   priorsa = truncate_prior_states(df.define_prior_adv,
    nst,ost,n3st,o3st)
   fitter = CorrFitter(models=models,maxit=df.maxit)
   if df.do_init3:
     #init3={}
     #if argsin['override_init']:
     init = make_adv_init_from_fit_file_3pt(models3,'fit_adv_'+irrepStr+'_3pt',\
      fresh_overlap=True,fresh_amplitude=True)
   else:
     init=None
   pass 
  #fit = fitter.lsqfit(data=dall,prior=priors,p0=init,svdcut=df.svdcut)
  #print priorsa
  #print init
  fit = fitter.lsqfit(data=dall,prior=priorsa,p0=init,svdcut=df.svdcut)
  ## --
  print_fit(fit,priorsa,do_v_symm=True)
  print_error_budget(fit)
  #save_data('fit-stability/fit_'+str(nst)+'_'+str(ost)+'.out',fit,dall)
  if df.do_2pt and not(df.do_3pt):
   save_init_from_fit(fit,'fit-adv/fit_'+str(nst)+'_'+str(ost)+'.py',do_v_symm=True)
  else:
   save_init_from_fit(fit,'fit-adv/fit_n'+str(nst)+'_o'+str(ost)\
    +'_ng'+str(n3st)+'_og'+str(o3st)+'.py',do_v_symm=True)
def doProcess(nst,ost,data=dall):
  ## -- do a single fit ... set up for parallelizing
  if df.do_2pt and not(df.do_3pt):
   pdict3 = utf.get_prior_dict(df.define_prior,
    df.define_prior['nkey'],df.define_prior['okey'],nst,ost,do_v_symm=df.do_v_symmetric)
   models = make_models(data=dall,lkey=df.lkey)
   prior  = make_prior(models,prior_dict=pdict3,nst=nst,ost=ost)
   fitter = CorrFitter(models=[models],maxit=df.maxit)
   if df.do_init2:
     init={}
     if argsin['override_init']:
      init = make_init_from_fit_file_3pt(models,'fit_dict')
     else:
      for key in df.define_init:
        eokey = utf.get_evenodd(key)
        if eokey == 'n':
         init[key] = df.define_init[key][:nst]
        elif eokey == 'o':
         init[key] = df.define_init[key][:ost]
   else:
     init=None
  else:
   pdict = utf.get_prior_dict(df.define_prior,
    df.define_prior['nkey'],df.define_prior['okey'],
    nst,ost,do_v_symm=df.do_v_symmetric)
   pdict3 = 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'],nst,ost,do_v_symm=df.do_v_symmetric)
   for key in pdict:
    pdict3[key] = pdict[key]
   models2 = make_models(data=dall,lkey=df.lkey)
   models3 = make_models_3pt(data=dall,lkey=df.lkey3)
   models = list()
   for model in models2:
    models.append(model)
   for model in models3:
    models.append(model)
   #print df.lkey+df.lkey3
   #for model in models:
   # model.all_datatags
   #raise ValueError("test")
   prior2 = make_prior(models2,prior_dict=pdict,nst=nst,ost=ost)
   prior3 = make_prior_3pt(models3,prior_dict=pdict3,nst=nst,ost=ost,n3st=nst,o3st=ost)
   priors = gv.BufferDict()
   for key in prior2:
    priors[key] = prior2[key]
   for key in prior3:
    priors[key] = prior3[key]
   fitter = CorrFitter(models=[models2,models],maxit=df.maxit)
   if df.do_init3:
     init={}
     if argsin['override_init']:
      init = make_init_from_fit_file_3pt(models,'fit_dict')
     else:
      for key in df.define_init_3pt:
        eokey = utf.get_evenodd(key)
        if eokey == 'nn':
         init[key] = np.resize(df.define_init_3pt[key],(nst,nst))
        elif eokey == 'no':
         init[key] = np.resize(df.define_init_3pt[key],(nst,ost))
        elif eokey == 'on':
         init[key] = np.resize(df.define_init_3pt[key],(ost,nst))
        elif eokey == 'oo':
         init[key] = np.resize(df.define_init_3pt[key],(ost,ost))
        elif eokey == 'n':
         init[key] = df.define_init_3pt[key][:nst]
        elif eokey == 'o':
         init[key] = df.define_init_3pt[key][:ost]
   else:
     init=None
  fit = fitter.chained_lsqfit(data=dall,prior=priors,p0=init,svdcut=df.svdcut)
  ## --
  print_fit(fit,priors,do_v_symm=df.do_v_symmetric)
  print_error_budget(fit)
  #save_data('fit-stability/fit_'+str(nst)+'_'+str(ost)+'.out',fit,dall)
  if df.do_2pt and not(df.do_3pt):
   save_init_from_fit(fit,'fit-stability/fit_'+str(nst)+'_'+str(ost)+'.py',do_v_symm=df.do_v_symmetric)
  else:
   save_init_from_fit(fit,'fit-stability/fit_n'+str(nst)+'_o'+str(ost)\
    +'_ng'+str(nst)+'_og'+str(ost)+'.py',do_v_symm=df.do_v_symmetric)
def main(tstr):
    dfile = '/home/gray/Desktop/lattice-analysis/data/qed/vcoarse/comb/comb_rho_vcoarse_physud.gpl'
    #    tag01 = 'rho_m' + str(mq)
    #    tag02 = 'rho_m' + str(mq) + '_ucav'
    #    tag03 = 'rho_m' + str(mq)
    #    tag04 = 'rho_m' + str(mq) + '_dcav'

    madedata = make_data(
        dfile, norm=3.)  # factor of 3 for colour (missed in extraction)
    data = madedata[0]
    T = data.size / len(madedata[1])  # extent in time dir
    tag01 = madedata[1][0]
    tag02 = madedata[1][1]
    tag03 = madedata[1][2]  # =tag01 if no isospin breaking
    tag04 = madedata[1][3]
    #sys.exit(0)

    #ratiodata = {}
    #ratiodata['up'] = data[tag02]/data[tag01]
    #ratiodata['down'] = data[tag04]/data[tag03]

    suggestedsvdcut = madedata[2]

    pfile = "vector_fit.p"  # last fit

    tmin = 2
    svdcut = 1e-10  #suggestedsvdcut

    fitter = CorrFitter(
        models=build_models(tag01, tag02, tag03, tag04, tmin, T))
    for nexp in [2, 3, 4, 5]:
        fit = fitter.lsqfit(data=data,
                            prior=build_prior(nexp),
                            p0=None,
                            maxit=20000,
                            svdcut=svdcut,
                            add_svdnoise=False)
    print(fit)

    tdata = range(T)
    tfit = range(tmin, T + 1 - tmin)  # all ts
    tp = T

    tstar = tstr

    tcut = 200

    newdata = {}

    tags = ['up', 'up_qed', 'down', 'down_qed']
    newdata[tags[0]] = data[tag01][:tstar + 1]
    newdata[tags[1]] = data[tag02][:tstar + 1]
    newdata[tags[2]] = data[tag03][:tstar + 1]
    newdata[tags[3]] = data[tag04][:tstar + 1]

    # do replacement of data with fit

    fitdataunchargedup = Corr2(datatag=tags[0],
                               tdata=range(T),
                               a=('a1:vec:u', 'ao:vec:u'),
                               b=('a1:vec:u', 'ao:vec:u'),
                               dE=('dE:vec:u', 'dEo:vec:u'),
                               s=(1., -1.)).fitfcn(fit.p)
    fitdataunchargeddown = Corr2(datatag=tags[2],
                                 tdata=range(T),
                                 a=('a1:vec:d', 'ao:vec:d'),
                                 b=('a1:vec:d', 'ao:vec:d'),
                                 dE=('dE:vec:d', 'dEo:vec:d'),
                                 s=(1., -1.)).fitfcn(fit.p)
    for index in range(48):
        if index >= tcut:
            newdata[tags[0]] = np.append(newdata[tags[0]], 0.)
            newdata[tags[2]] = np.append(newdata[tags[2]], 0.)
        elif index > tstar:
            newdata[tags[0]] = np.append(newdata[tags[0]],
                                         fitdataunchargedup[index])
            newdata[tags[2]] = np.append(newdata[tags[2]],
                                         fitdataunchargeddown[index])

    fitdatachargedup = Corr2(datatag=tags[1],
                             tdata=range(T),
                             a=('a1:vec:qed:u', 'ao:vec:qed:u'),
                             b=('a1:vec:qed:u', 'ao:vec:qed:u'),
                             dE=('dE:vec:qed:u', 'dEo:vec:qed:u'),
                             s=(1., -1.)).fitfcn(fit.p)
    fitdatachargedown = Corr2(datatag=tags[3],
                              tdata=range(T),
                              a=('a1:vec:qed:d', 'ao:vec:qed:d'),
                              b=('a1:vec:qed:d', 'ao:vec:qed:d'),
                              dE=('dE:vec:qed:d', 'dEo:vec:qed:d'),
                              s=(1., -1.)).fitfcn(fit.p)
    for index in range(48):
        if index >= tcut:
            newdata[tags[1]] = np.append(newdata[tags[1]], 0.)
            newdata[tags[3]] = np.append(newdata[tags[3]], 0.)
        elif index > tstar:
            newdata[tags[1]] = np.append(newdata[tags[1]],
                                         fitdatachargedup[index])
            newdata[tags[3]] = np.append(newdata[tags[3]],
                                         fitdatachargedown[index])

    w0 = gv.gvar('0.1715(9)')
    w0overa = gv.gvar('1.1367(5)')
    ZV = gv.gvar('0.9837(20)')
    ZVqed = gv.gvar('0.999544(14)') * ZV
    hbarc = 0.197326968
    a = (w0 / w0overa) / hbarc

    print('THIS IS THE INFORMATION CENTRE')
    print(len(newdata[tags[0]]), len(newdata[tags[1]]), len(newdata[tags[2]]),
          len(newdata[tags[3]]))
    print('tmin, tstar', tmin, tstar)

    #moments = g2.moments(newdata[tags[0]],Z=ZV,ainv=1/a,periodic=False)
    #vpol = g2.vacpol(moments,order=(2,1))
    vpol = g2.fourier_vacpol(newdata[tags[0]],
                             Z=ZV,
                             ainv=1 / a,
                             periodic=False)
    unchargedamuu = g2.a_mu(vpol, 2 / 3.)

    #moments = g2.moments(newdata[tags[1]],Z=ZVqed,ainv=1/a,periodic=False)
    #vpol = g2.vacpol(moments,order=(2,1))
    vpol = g2.fourier_vacpol(newdata[tags[1]],
                             Z=ZVqed,
                             ainv=1 / a,
                             periodic=False)
    chargedamuu = g2.a_mu(vpol, 2 / 3.)

    #moments = g2.moments(newdata[tags[2]],Z=ZV,ainv=1/a,periodic=False)
    #vpol = g2.vacpol(moments,order=(2,1))
    vpol = g2.fourier_vacpol(newdata[tags[2]],
                             Z=ZV,
                             ainv=1 / a,
                             periodic=False)
    unchargedamud = g2.a_mu(vpol, 1 / 3.)

    #moments = g2.moments(newdata[tags[3]],Z=ZVqed,ainv=1/a,periodic=False)
    #vpol = g2.vacpol(moments,order=(2,1))
    vpol = g2.fourier_vacpol(newdata[tags[3]],
                             Z=ZVqed,
                             ainv=1 / a,
                             periodic=False)
    chargedamud = g2.a_mu(vpol, 1 / 3.)

    d_rt = chargedamud / unchargedamud
    u_rt = chargedamuu / unchargedamuu
    amu_qcd = unchargedamud + unchargedamuu
    amu_qcdqed = chargedamuu + chargedamud
    amu_rt = amu_qcdqed / amu_qcd
    amu_diff = (amu_qcdqed - amu_qcd) / amu_qcd

    print('[d] a_mu[QCD+QED]||a_mu[QCD+QED]/a_mu[QCD]{0:>20}||{1}'.format(
        chargedamud, d_rt))
    print('[u] a_mu[QCD+QED]||a_mu[QCD+QED]/a_mu[QCD]{0:>20}||{1}'.format(
        chargedamuu, u_rt))
    print(
        '\n[u+d] a_mu[QCD+QED]||a_mu[QCD]||ratio||diff\n{0:20}{1:20}{2:20}{3:20}'
        .format(amu_qcdqed, amu_qcd, amu_rt, amu_diff))