Exemple #1
0
def sheet_from_params(xyz,params):
    N = len(xyz.atoms)

    H = {}
    S = {}
    H[0,0] = matrix(zeros((N,N)))
    S[0,0] = matrix(zeros((N,N)))

    h00,s00 = params(0.0)
    assert s00 == 1.0

    for i in range(N):
        H[0,0][i,i] = h00
        for j in range(i+1,N):
            h,s = params(norm(xyz.atoms[i].pos - xyz.atoms[j].pos))
            H[0,0][i,j] = h
            H[0,0][j,i] = h
            S[0,0][i,j] = s
            S[0,0][j,i] = s

    if any(S[0,0] != 0.0):
	for i in range(N):
	    S[0,0][i,i] = 1.0
	else:
	    S = None

    for i0,i1 in [(0,1),(1,1),(1,0),(1,-1)]:
        shift = i0 * xyz.period[0] + i1 * xyz.period[1]

        H_hop = matrix(zeros((N,N)))
        S_hop = matrix(zeros((N,N)))

        for i in range(N):
            for j in range(N):
		h,s = params(norm(xyz.atoms[i].pos - (xyz.atoms[j].pos + shift)))
                H_hop[i,j] = h
                S_hop[i,j] = h
		
        if any(H_hop != 0.0):
            H[i0,i1] = H_hop
	    if S is None:
		assert all(S_hop == 0.0)
	    else:
		S[i0,i1] = S_hop
	else:
    	    assert all(S_hop == 0.0)

    return sheet.sheet(H,xyz,S=S)
    opt = parse_opts()
    opt.class_counts = (125, 352)
    opt.snippet_length = 1  # Numbertemporal_transform of frames composing the snippet, 1 for RGB, 5 for optical flow
    opt.snippet_channels = 3  # Number of channels in a frame, 3 for RGB, 2 for optical flow

    #memory logdata

    logdata = [
        opt.video_root, opt.batch_size, opt.epoch_num, opt.category_num,
        opt.class_type, opt.train_val, opt.crop_position, opt.cropSsize,
        str(opt.cropCsize), opt.cropRsize, opt.framesize, opt.temporal_p,
        opt.horizon, opt.normalization
    ]

    #Function to pass parameter information to google spread sheet
    sheet(logdata)
    #image proccesing parameter

    image_transforms = [
        Scale(opt.cropSsize),
    ]
    video_transforms = [RandomCornerCrop(opt.cropCsize), RandHorFlipVideo()]

    vtransforms = ComposeVideo(image_transforms, video_transforms)
    #    dataset = EpicDataset_4_Tmodel(transforms, class_type=opt.class_type, frame_size=opt.framesize, path=opt.video_root)
    dataset = EpicDataset_4_Vmodel(vtransforms,
                                   class_type=opt.class_type,
                                   frame_size=opt.framesize,
                                   path=opt.video_root)
    print(opt.cropCsize)
Exemple #3
0
    def setup_sheet(self,xyz_sheet,do_cache=True):
        at = xyz_sheet.atoms
        for a in at:
            a.rot4 = matrix(eye(4))
            a.rot4[1:4,1:4] = a.rot

        period = xyz_sheet.period
        Natoms = len(at)

        H = {}
        S = {}
        rho = zeros((Natoms,))

        H[0,0] = matrix(zeros((4*Natoms,4*Natoms)))
        S[0,0] = matrix(zeros((4*Natoms,4*Natoms)))
        for i in range(Natoms):
            for j in range(i+1,Natoms):
                Rvec = at[i].pos - at[j].pos

                drho, h_xyz, s_xyz = self.calc_pair_HS(Rvec)
                if drho is None:
                    continue

                rho[i] += drho
                rho[j] += drho

                H[0,0][4*i:4*i+4,4*j:4*j+4] = at[i].rot4.T * h_xyz * at[j].rot4
                S[0,0][4*i:4*i+4,4*j:4*j+4] = at[i].rot4.T * s_xyz * at[j].rot4

        def calc_H_S_i0_i1(i0,i1):
            shift = i0 * period[0] + i1 * period[1]
            h_hop = matrix(zeros((4*Natoms,4*Natoms)))
            s_hop = matrix(zeros((4*Natoms,4*Natoms)))
            nonzero = False

            for i in range(Natoms):
                for j in range(Natoms):
                    Rvec = at[i].pos - (at[j].pos + shift)
                    drho, h_xyz, s_xyz = self.calc_pair_HS(Rvec)

                    if drho is None:
                        continue
                    nonzero = True

                    h_hop[4*i:4*i+4,4*j:4*j+4] = at[i].rot4.T * h_xyz * at[j].rot4
                    s_hop[4*i:4*i+4,4*j:4*j+4] = at[i].rot4.T * s_xyz * at[j].rot4
            if nonzero:
                H[i0,i1] = h_hop
                S[i0,i1] = s_hop
            else:
		pass

            return nonzero

        i0 = 0
        for i1 in count(1):
            nonzero = calc_H_S_i0_i1(i0,i1)
            if not nonzero:
                break
        for i0 in count(1):
            i1 = 0
            nonzero = calc_H_S_i0_i1(i0,i1)
            if not nonzero:
                break

            for i1 in count(1):
                nonzero = calc_H_S_i0_i1(i0,i1)
                if not nonzero:
                    break

            for neg_i1 in count(1):
                nonzero = calc_H_S_i0_i1(i0,-neg_i1)
                if not nonzero:
                    break

        for i in range(Natoms):
            rho3 = rho[i]**(1/3.)
            h_s = self.alpha_s + self.beta_s * rho3**2 + self.gamma_s * rho3**4 + self.chi_s * rho3**6
            h_p = self.alpha_p + self.beta_p * rho3**2 + self.gamma_p * rho3**4 + self.chi_p * rho3**6
            H[0,0][4*i,4*i] = h_s
            H[0,0][4*i+1,4*i+1] = h_p
            H[0,0][4*i+2,4*i+2] = h_p
            H[0,0][4*i+3,4*i+3] = h_p

            S[0,0][4*i,4*i] = 1.0
            S[0,0][4*i+1,4*i+1] = 1.0
            S[0,0][4*i+2,4*i+2] = 1.0
            S[0,0][4*i+3,4*i+3] = 1.0

            for j in range(i):
                H[0,0][4*i:4*(i+1),4*j:4*(j+1)] = H[0,0][4*j:4*(j+1),4*i:4*(i+1)].H
                S[0,0][4*i:4*(i+1),4*j:4*(j+1)] = S[0,0][4*j:4*(j+1),4*i:4*(i+1)].H

        return sheet.sheet(H,S=S,xyz_sheet=xyz_sheet,do_cache=do_cache)
Exemple #4
0
def tight_binding_triozon(xyz_coords,do_cache=True,graphite=False):
    # based on the parametrization described in
    # doi:10.1103/PhysRevB.64.121401

    CC_DIST = param.GRAPHENE_CC_DISTANCE
    NN_HOP = param.GRAPHENE_1STNN_HOPPING

    TRIO_CUTOFF = param.TRIOZON_CUTOFF
    Z_CUTOFF = param.TRIOZON_Z_CUTOFF
    BETA = param.TRIOZON_BETA
    A = param.TRIOZON_A
    DELTA = param.TRIOZON_DELTA


    at = xyz_coords.atoms
    period = xyz_coords.period

    Natoms = len(at)

    if isinstance(xyz_coords,xyz.chain):
        if graphite:
            def hopping(pos_a,pos_b):
                if abs(pos_a[2] - pos_b[2]) > Z_CUTOFF:
                    return 0.0
                elif abs(pos_a[1]-pos_b[1]) < CC_DIST*0.1:
                    if norm(pos_a - pos_b) < CC_DIST*1.1:
                        return -NN_HOP
                else:
                    d = norm(pos_b-pos_a);
                    if d < TRIO_CUTOFF:
                        return -BETA * exp((A - d)/DELTA);
                return 0.0
        else: # MWCNT
	    def vdot(a,b):
		sum = 0.0
    		for i in range(len(a)):
        	    sum += a[i]*b[i]
    		return sum

            def hopping(pos_a,pos_b):
                if abs(pos_a[2] - pos_b[2]) > Z_CUTOFF:
                    return 0.0
                elif abs(norm(pos_a[:2])-norm(pos_b[:2])) < CC_DIST*0.1:
                    if norm(pos_a - pos_b) < CC_DIST*1.1:
                        return -NN_HOP
                else:
                    d = norm(pos_b-pos_a);
                    if d < TRIO_CUTOFF:
                        cos_theta = vdot(pos_a[:2],pos_b[:2])/(norm(pos_a[:2])*norm(pos_b[:2]));
                        return -BETA * cos_theta * exp((A - d)/DELTA);
                return 0.0

    elif isinstance(xyz_coords,xyz.sheet):
        def hopping(pos_a,pos_b):
            if abs(pos_a[2] - pos_b[2]) < CC_DIST*0.1:
                if norm(pos_a - pos_b) < CC_DIST*1.1:
                    return -NN_HOP
            else:
                d = norm(pos_b-pos_a);
                if d < TRIO_CUTOFF:
                    return -BETA * exp((A - d)/DELTA)
            return 0.0

    if isinstance(xyz_coords,xyz.chain):
        H = [ matrix(zeros((Natoms,Natoms))) ]

        for i in range(Natoms):
            for j in range(i+1,Natoms):
                hop = hopping(at[i].pos,at[j].pos)
                if hop != 0.0:
                    H[0][i,j] = hop
                    H[0][j,i] = conj(hop)

        for n in range(1,100):
            h = matrix(zeros((Natoms,Natoms)))
            nonzero = False
            for i in range(Natoms):
                for j in range(Natoms):
                    hop = hopping(at[i].pos,at[j].pos + period*n)
                    if hop != 0.0:
                        nonzero = True
                        h[i,j] = hop
            if not nonzero:
                break
            H.append(h)

        assert n < 99

        return chain.chain(H,xyz_coords,do_cache=do_cache)

    elif isinstance(xyz_coords,xyz.sheet):

        H = {}
        H[0,0] = matrix(zeros((Natoms,Natoms)))

        for i in range(Natoms):
            for j in range(i+1,Natoms):
                hop = hopping(at[i].pos,at[j].pos)
                if hop != 0.0:
                    H[0,0][i,j] = hop
                    H[0,0][j,i] = conj(hop)

        for i0 in range(6):
            for i1 in range(-6,6):
                if i0 == 0 and i1 <= 0:
                    continue
                shift = i0 * period[0] + i1 * period[1]

                H_hop = matrix(zeros((Natoms,Natoms)))
                nonzero = False

                for i in range(Natoms):
                    for j in range(Natoms):
                        hop = hopping(at[i].pos,at[j].pos + shift)
                        if hop != 0.0:
                            H_hop[i,j] = hop
                            nonzero = True
                if nonzero:
                    assert norm(shift) <= Z_CUTOFF + norm(period[0]) + norm(period[1])
                    H[i0,i1] = H_hop

        return sheet.sheet(H,xyz_coords,do_cache=do_cache)