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)
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)
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)