示例#1
0
def bilinear_Lambdas(Data):
    # type check? data loaded?
    amputated = amputate_bilinears(Data.inprop_list,
                                    Data.outprop_list,
                                    Data.bilinear_array)
                                    
    # Include Tr[qslash*inv(prop)]
    # Are you matching momenta to the prop correctly?
    Data.prop_trace_in = prop_trace(Data.inprop_list, Data.ap, sin=True)*Data.V
    #Data.prop_trace_out = prop_trace(Data.outprop_list, Data.ap2, sin=True)*Data.V
    Data.prop_trace_in2 = prop_trace(Data.inprop_list, Data.ap, sin=False)*Data.V
    #Data.prop_trace_out2 = prop_trace(Data.outprop_list, Data.ap2, sin=False)*Data.V

    
    norm = Data.V/12.
    Lambda = lambda x, y: (trace(dot(dw.hc(x), y)).real)*norm
    Data.Lambda = map(Lambda, Gc, amputated)

    # For the (X, g) schemes.
    Data.Lambda_V = (Data.Lambda[1] + Data.Lambda[2] + Data.Lambda[4] +
                     Data.Lambda[8])*(1./4)   
    Data.Lambda_A = (Data.Lambda[14] + Data.Lambda[13] + Data.Lambda[11] +
                     Data.Lambda[7])*(1./4)
    Data.Lambda_VpA = (Data.Lambda[1] + Data.Lambda[2] + Data.Lambda[4] +
                       Data.Lambda[8] + Data.Lambda[14] + Data.Lambda[13] +
                       Data.Lambda[11] + Data.Lambda[7])*(1./8)
    Data.Lambda_VmA = 2*(Data.Lambda_V - Data.Lambda_A)/\
                        (Data.Lambda_V + Data.Lambda_A)
    Data.Lambda_PmS = 2*(Data.Lambda[15] - Data.Lambda[0])/\
                        (Data.Lambda[15] + Data.Lambda[0])
    Data.Lambda_T = (Data.Lambda[3] + Data.Lambda[5] + Data.Lambda[6] +
                     Data.Lambda[9] + Data.Lambda[10] + Data.Lambda[12])/6.
    # For the (X, q) schemes.
    aq = Data.aq
    Gmu = (amputated[1], amputated[2], amputated[4], amputated[8])
    qmuGmu = sum([aq[i]*Gmu[i] for i in range(4)])
    Data.Vq = (trace(dot(qmuGmu, dw.slash(aq))).real)*norm/Data.apSq
    Gmu5 = (amputated[14], -amputated[13], amputated[11], -amputated[7])
    qmuGmu5 = sum([aq[i]*Gmu5[i] for i in range(4)])
    tmp = reduce(dot, [qmuGmu5, Gc[15], dw.slash(aq)]).real
    Data.Vq5 = trace(tmp*norm)/Data.apSq
    Data.Vq_ = Data.Vq
    Data.Vq = (Data.Vq + Data.Vq5)/2

    # Z-factors.
    Data.Z_S = dict(g=None, q=None)
    Data.Z_T = dict(g=None, q=None)
    Data.Z_S['g'] = Data.Lambda_VpA/Data.Lambda[0]
    Data.Z_S['q'] = Data.Vq/Data.Lambda[0]
    Data.Z_T['g'] = Data.Lambda_VpA/Data.Lambda_T
    Data.Z_T['q'] = Data.Vq/Data.Lambda_T
示例#2
0
 def test_traces(self):
     "Ensure Tr(hc(G[i]).G[j]) = 4 delta_{ij}"
     traces = np.array([[np.trace(np.dot(dw.hc(dw.G[i]), dw.G[j]))/4 
                         for i in range(16)] for j in range(16)])
     np.testing.assert_array_equal(traces, np.identity(16, dtype=complex))
示例#3
0
def bilinear_LambdaJK(Data):
    amputatedJK = map(amputate_bilinears, JKsample(Data.inprop_list),
                                          JKsample(Data.outprop_list),
                                          JKsample(Data.bilinear_array))
    norm = Data.V/12.
    Lambda = lambda x, y: (trace(dot(dw.hc(x), y)).real)*norm
    Data.LambdaJK = [np.array(map(Lambda, Gc, amp)) for amp in amputatedJK]
    Data.Lambda_sigmaJK = JKsigma(Data.LambdaJK, Data.Lambda)
    
    # For the (X, g) schemes.
    def V(Lambda):
        return (Lambda[1] + Lambda[2] + Lambda[4] + Lambda[8])*(1/4.)
    def A(Lambda):
        return (Lambda[14] + Lambda[13] + Lambda[11] + Lambda[7])*(1/4.)
    def VpA(Lambda):
        return (Lambda[1] + Lambda[2] + Lambda[4] +
                Lambda[8] + Lambda[14] + Lambda[13] +
                Lambda[11] + Lambda[7])*(1./8)
    def VmA(Lambda):
        return 2*(V(Lambda) - A(Lambda))/(V(Lambda) + A(Lambda))
    def PmS(Lambda):
        return 2*(Lambda[15] - Lambda[0])/(Lambda[15] + Lambda[0])
    def T(Lambda):
        return (Lambda[3] + Lambda[5] + Lambda[6] + 
                Lambda[9] + Lambda[10] + Lambda[12])/6.
        
    Data.Lambda_VpA_JK = map(VpA, Data.LambdaJK)
    Data.Lambda_VpA_sigmaJK = JKsigma(Data.Lambda_VpA_JK, Data.Lambda_VpA)
    Data.Lambda_V_JK = map(V, Data.LambdaJK)
    Data.Lambda_V_sigmaJK = JKsigma(Data.Lambda_V_JK, Data.Lambda_V)
    Data.Lambda_A_JK = map(A, Data.LambdaJK)
    Data.Lambda_A_sigmaJK = JKsigma(Data.Lambda_A_JK, Data.Lambda_A)
    Data.Lambda_V_sigmaJK = JKsigma(Data.Lambda_V_JK, Data.Lambda_V)
    Data.Lambda_VmA_JK = map(VmA, Data.LambdaJK)
    Data.Lambda_VmA_sigmaJK = JKsigma(Data.Lambda_VmA_JK, Data.Lambda_VmA)
    Data.Lambda_PmS_JK = map(PmS, Data.LambdaJK)
    Data.Lambda_PmS_sigmaJK = JKsigma(Data.Lambda_PmS_JK, Data.Lambda_PmS)
    Data.Lambda_T_JK = map(T, Data.LambdaJK)
    Data.Lambda_T_sigmaJK = JKsigma(Data.Lambda_T_JK, Data.Lambda_T)
    
    # For the (X, q) schemes.
    aq = Data.aq
    apSq = Data.apSq
    def Vq(amputated):
        Gmu = (amputated[1], amputated[2], amputated[4], amputated[8])
        qmuGmu = sum([aq[i]*Gmu[i] for i in range(4)])
        return (trace(dot(qmuGmu, dw.slash(aq))).real)*norm/apSq
    def Vq5(amputated):
        Gmu5 = (amputated[14], -amputated[13], amputated[11], -amputated[7])
        qmuGmu5 = sum([aq[i]*Gmu5[i] for i in range(4)])
        tmp = reduce(dot, [qmuGmu5, Gc[15], dw.slash(aq)]).real
        return trace(tmp*norm)/Data.apSq
    Data.Vq_JK = [(Vq(amp)+Vq5(amp))/2 for amp in amputatedJK]
    Data.Vq_sigmaJK = JKsigma(Data.Vq_JK, Data.Vq)

    # Z-factors.
    Z_S = lambda Lambda, Lambda_vec: Lambda_vec/Lambda[0]
    Data.Z_S_JK = dict(g=None, q=None)
    Data.Z_S_sigmaJK = dict(g=None, q=None)
    Data.Z_S_JK['g'] = map(Z_S, Data.LambdaJK, Data.Lambda_VpA_JK)
    Data.Z_S_JK['q'] = map(Z_S, Data.LambdaJK, Data.Vq_JK)
    Data.Z_S_sigmaJK['g'] = JKsigma(Data.Z_S_JK['g'], Data.Z_S['g'])
    Data.Z_S_sigmaJK['q'] = JKsigma(Data.Z_S_JK['q'], Data.Z_S['q'])

    Z_T = lambda Lambda_T, Lambda_vec: Lambda_vec/Lambda_T
    Data.Z_T_JK = dict(g=None, q=None)
    Data.Z_T_sigmaJK = dict(g=None, q=None)
    Data.Z_T_JK['g'] = map(Z_T, Data.Lambda_T_JK, Data.Lambda_VpA_JK)
    Data.Z_T_JK['q'] = map(Z_T, Data.Lambda_T_JK, Data.Vq_JK)
    Data.Z_T_sigmaJK['g'] = JKsigma(Data.Z_T_JK['g'], Data.Z_T['g'])
    Data.Z_T_sigmaJK['q'] = JKsigma(Data.Z_T_JK['q'], Data.Z_T['q'])
    '''
    Gauge-average and amputate bilinear correlation functions.

    Acts on a list of tuples [(prop, [bl0, bl1,...,bl15]), ...]
    corresponding to each gauge configuration.'''

    prop_list, bilinear_array = zip(*prop_bilinear_tuples)  # Unzip.

    N = len(prop_list)
    assert N == len(prop_list) == len(bilinear_array)
    prop_inv = inv(sum(prop_list)/N)
    bilinears = sum(bilinear_array)/N
    return array([reduce(dot, [prop_inv, bilinears[g], prop_inv])
                     for g in range(16)])

gamma_trace = lambda g, a: trace(dot(dw.hc(g), a).real)

def bilinear_Lambdas(Data):
    data_tuples = zip(Data.prop_list, Data.bilinear_array)
    norm = Data.V/12
    amputated = amputate_bilinears_e(data_tuples)
    Data.Lambda = map(gamma_trace, Gc, amputated*norm)

    # For the (X, g) schemes.
    Data.Lambda_VpA = (Data.Lambda[1] + Data.Lambda[2] + Data.Lambda[4] +
                       Data.Lambda[8] + Data.Lambda[14] + Data.Lambda[13] +
                       Data.Lambda[11] + Data.Lambda[7])*(1./8)   
    Data.Lambda_V = (Data.Lambda[1] + Data.Lambda[2] + Data.Lambda[4] +
                       Data.Lambda[8])*(1./4)   
    Data.Lambda_A = (Data.Lambda[14] + Data.Lambda[13] + Data.Lambda[11] +
                       Data.Lambda[7])*(1./4)