def compose_block(Slist, dims, Nseg): ''' Compose block of size Nseg from segments stored in Slist. ''' comp = np.empty((Nseg,), dtype="int") if (Nseg > 1): seg_ind = np.random.randint(low=0, high=Nseg) Seg = Slist[seg_ind] # choose a segment from list as starting point comp[0] = seg_ind+1 else: Seg = Slist[0] comp[0] = 1 for seg in range(Nseg-1): t, _ = trans.calc_t(Seg, dims, 1) tp, _ = trans.calc_tp(Seg, dims, 1) r, _ = trans.calc_r(Seg, dims, 1) rp, _ = trans.calc_rp(Seg, dims, 1) flip = np.random.choice([True,False]) # flip segment or not if (Nseg > 1): seg_ind = np.random.randint(low=0, high=Nseg) SA = Slist[seg_ind] # choose a segment to add if(not flip): comp[seg+1] = seg_ind+1 if(flip): comp[seg+1] = -(seg_ind+1) else: SA = Slist[0] if(not flip): comp[seg+1] = 1 if(flip): comp[seg+1] = -1 if (not flip): tA, _ = trans.calc_t(SA, dims, 1) tpA, _ = trans.calc_tp(SA, dims, 1) rA, _ = trans.calc_r(SA, dims, 1) rpA, _ = trans.calc_rp(SA, dims, 1) elif (flip): tA, _ = trans.calc_tp(SA, dims, 1) tpA, _ = trans.calc_t(SA, dims, 1) rA, _ = trans.calc_rp(SA, dims, 1) rpA, _ = trans.calc_r(SA, dims, 1) Seg = [] # new S matrix for old + new at each frequency Nw = len(dims) for w in range(Nw): tN = np.dot(tA[w], np.dot(np.linalg.inv(np.eye(dims[w]/2) - np.dot(rp[w], rA[w])), t[w])) tpN = np.dot(tp[w], np.dot(np.linalg.inv(np.eye(dims[w]/2) - np.dot(rA[w], rp[w])), tpA[w])) rN = r[w] + np.dot(tp[w], np.dot(np.linalg.inv(np.eye(dims[w]/2) - np.dot(rA[w], rp[w])), np.dot(rA[w], t[w]))) rpN = rpA[w] + np.dot(tA[w], np.dot(np.linalg.inv(np.eye(dims[w]/2) - np.dot(rp[w], rA[w])), np.dot(rp[w], tpA[w]))) s = np.zeros((dims[w], dims[w]), dtype="complex") s[:dims[w]/2,:dims[w]/2] = rN s[:dims[w]/2,dims[w]/2:] = tpN s[dims[w]/2:,:dims[w]/2] = tN s[dims[w]/2:,dims[w]/2:] = rpN Seg.append(s) return Seg, comp
"VSC/Fibres-20130819/" + pic_filen + "/") elif machine ==2: data_direc = ("/home/ambichl/Universitaet/Scattering-Data/" "VSC2/Fibres-20130802/" + filen + "/") pic_direc = ("/home/ambichl/Universitaet/Scattering-Data/" "VSC2/Fibres-20130802/" + pic_filen + "/") else: print "specify machine (VSC: 1, VSC2: 2)" plot_direc = data_direc S, dims = scat.read_S(data_direc, filen+".1E-%i"%expo, old_ver=1) modes = int(max(dims)/2) t , t_q = trans.calc_t(S, dims, refmodes) tp = (t[2] - t[0]) / (2*dk) ShiftPhase = -I * (t[1]/np.absolute(t[1])).conj() * (t[2]/np.absolute(t[2]) - t[0]/np.absolute(t[0])) / (2*dk) #ShiftPhase = 0.001*np.ones((3,3), dtype="complex") ShiftFacsP = np.exp( I * ShiftPhase * dk) ShiftFacsM = np.exp(-I * ShiftPhase * dk) #print np.absolute(ShiftFacsM) tpShift = (t[2]*ShiftFacsM - t[0]*ShiftFacsP) / (2*dk) + I * t[1]*ShiftPhase # print np.absolute(t[1]) * (t[2]/np.absolute(t[2]) - t[0]/np.absolute(t[0])) / (2*dk)\
else: S, dims, energs = np.load(data_direc + "scatter." + file_i + ".dat.npy") Slist.append(S) for i in range(max(0,Nseg-Nfile)): el = np.random.randint(low=0, high=len(Slist)) Slist.append(Slist[el]) # if Nseg > Nfile append randomly chosen S-matrices Slist = np.array(Slist) Nw = len(dims) dw = np.sqrt(2.0*energs[2]) - np.sqrt(2.0*energs[1]) tsafe = trans.calc_t(Slist[0], dims, 1)[0] def compose_block(Slist, dims, Nseg): ''' Compose block of size Nseg from segments stored in Slist. ''' comp = np.empty((Nseg,), dtype="int") if (Nseg > 1): seg_ind = np.random.randint(low=0, high=Nseg) Seg = Slist[seg_ind] # choose a segment from list as starting point comp[0] = seg_ind+1 else: Seg = Slist[0] comp[0] = 1