def desc_ed(df): print("DESC_ED") #Get descriptors from ci mol = gto.Mole() cis = fci.direct_uhf.FCISolver(mol) sigUs = [] sigJsd = [] sigNdz2 = [] sigNdpi = [] sigNdd = [] sigNd = [] sigN2pz = [] sigN2ppi = [] sigN4s = [] sigTpi = [] sigTds = [] sigTdz = [] sigTsz = [] sigMONdz2 = [] sigMONdpi = [] sigMONdd = [] sigMONd = [] sigMON2pz = [] sigMON2ppi = [] sigMON4s = [] sigMOTpi = [] sigMOTds = [] sigMOTdz = [] sigMOTsz = [] #GET MO TO IAO MATRIX act_iao = [5, 9, 6, 8, 11, 12, 7, 13, 1] iao = np.load('../../../pyscf/ub3lyp_full/b3lyp_iao_b.pickle') iao = iao[:, act_iao] #LOAD IN MOS act_mo = [5, 6, 7, 8, 9, 10, 11, 12, 13] chkfile = '../../../pyscf/chk/Cuvtz_r1.725_s1_B3LYP_1.chk' mol = lib.chkfile.load_mol(chkfile) m = ROKS(mol) m.__dict__.update(lib.chkfile.load(chkfile, 'scf')) mo = m.mo_coeff[:, act_mo] s = m.get_ovlp() mo_to_iao = reduce(np.dot, (mo.T, s, iao)) for i in range(df.shape[0]): ci = df['ci'].iloc[i] norb = 9 nelec = (8, 7) if (df['Sz'].iloc[i] == 1.5): nelec = (9, 6) ci = ci.reshape((sp.misc.comb(norb, nelec[0], exact=True), sp.misc.comb(norb, nelec[1], exact=True))) dm2 = cis.make_rdm12s(ci, norb, nelec) sigUs.append(dm2[1][1][8, 8, 8, 8]) Jsd = 0 for j in [0, 1, 2, 3, 6]: Jsd += 0.25*(dm2[1][0][8,8,j,j] + dm2[1][2][8,8,j,j] - dm2[1][1][8,8,j,j] - dm2[1][1][j,j,8,8])-\ 0.5*(dm2[1][1][j,8,8,j] + dm2[1][1][8,j,j,8]) sigJsd.append(Jsd) dm = dm2[0][0] + dm2[0][1] #IAO ordering: ['del','del','yz','xz','x','y','z2','z','s'] sigNdz2.append(dm[6, 6]) sigNdpi.append(dm[2, 2] + dm[3, 3]) sigNdd.append(dm[0, 0] + dm[1, 1]) sigNd.append(dm[0, 0] + dm[1, 1] + dm[2, 2] + dm[3, 3] + dm[6, 6]) sigN2pz.append(dm[7, 7]) sigN2ppi.append(dm[4, 4] + dm[5, 5]) sigN4s.append(dm[8, 8]) sigTpi.append(2 * (dm[3, 4] + dm[2, 5])) sigTds.append(2 * dm[6, 8]) sigTdz.append(2 * dm[6, 7]) sigTsz.append(2 * dm[7, 8]) #MO ordering: dxz, dyz, dz2, delta, delta, px, py, pz, 4s mo_dm = reduce(np.dot, (mo_to_iao, dm, mo_to_iao.T)) sigMONdz2.append(mo_dm[2, 2]) sigMONdpi.append(mo_dm[0, 0] + mo_dm[1, 1]) sigMONdd.append(mo_dm[3, 3] + mo_dm[4, 4]) sigMONd.append(mo_dm[0, 0] + mo_dm[1, 1] + mo_dm[2, 2] + mo_dm[3, 3] + mo_dm[4, 4]) sigMON2pz.append(mo_dm[7, 7]) sigMON2ppi.append(mo_dm[6, 6] + mo_dm[5, 5]) sigMON4s.append(mo_dm[8, 8]) sigMOTpi.append(2 * (mo_dm[0, 5] + mo_dm[1, 6])) sigMOTds.append(2 * mo_dm[2, 8]) sigMOTdz.append(2 * mo_dm[2, 7]) sigMOTsz.append(2 * mo_dm[7, 8]) df['iao_n_3dz2'] = sigNdz2 df['iao_n_3dpi'] = sigNdpi df['iao_n_3dd'] = sigNdd df['iao_n_3d'] = sigNd df['iao_n_2pz'] = sigN2pz df['iao_n_2ppi'] = sigN2ppi df['iao_n_4s'] = sigN4s df['iao_t_pi'] = sigTpi df['iao_t_ds'] = sigTds df['iao_t_dz'] = sigTdz df['iao_t_sz'] = sigTsz df['mo_n_3dz2'] = sigMONdz2 df['mo_n_3dpi'] = sigMONdpi df['mo_n_3dd'] = sigMONdd df['mo_n_3d'] = sigMONd df['mo_n_2pz'] = sigMON2pz df['mo_n_2ppi'] = sigMON2ppi df['mo_n_4s'] = sigMON4s df['mo_t_pi'] = sigMOTpi df['mo_t_ds'] = sigMOTds df['mo_t_dz'] = sigMOTdz df['mo_t_sz'] = sigMOTsz df['Us'] = sigUs df['Jsd'] = sigJsd return df
S = 1 r = 1.725 method = 'UB3LYP' basis = 'vtz' el = 'Cu' df = None for run in range(16): chkfile = el + basis + "_r" + str(r) + "_s" + str( S) + "_" + method + "_" + str(run) + ".chk" print(chkfile) mol = lib.chkfile.load_mol(chkfile) m = ROKS(mol) m.__dict__.update(lib.chkfile.load(chkfile, 'scf')) #Build RDM on IAO basis s = m.get_ovlp() mo_occ = m.mo_occ M = m.mo_coeff[0][:, mo_occ[0] > 0] M = reduce(np.dot, (a.T, s, M)) dm_u = np.dot(M, M.T) M = m.mo_coeff[1][:, mo_occ[1] > 0] M = reduce(np.dot, (a.T, s, M)) dm_d = np.dot(M, M.T) obdm = np.array([dm_u, dm_d]) ''' #Gather (MO) orb1=[0,1,2,3,4,5,6,7,8,9,10,11,12,13,5, 6 ,7 ,7 ,12] orb2=[0,1,2,3,4,5,6,7,8,9,10,11,12,13,10,11,12,13,13] one_body=sum_onebody(obdm,orb1,orb2) one_labels=['t_'+str(orb1[i])+'_'+str(orb2[i]) for i in range(len(orb1))]
def analyze(df): df['gsw'] = np.round(df['gsw'], 2) print(list(df)) df['n_3dd'] = df['t_4_4'] + df['t_5_5'] df['n_3dpi'] = df['t_1_1'] + df['t_2_2'] df['n_3dz2'] = df['t_3_3'] df['n_3d'] = df['n_3dd'] + df['n_3dpi'] + df['n_3dz2'] df['n_2ppi'] = df['t_6_6'] + df['t_7_7'] df['n_2pz'] = df['t_8_8'] df['n_2p'] = df['n_2ppi'] + df['n_2pz'] df['n_4s'] = df['t_9_9'] df['t_pi'] = 2 * (df['t_1_6'] + df['t_2_7']) df['t_dz'] = 2 * df['t_3_8'] df['t_sz'] = 2 * df['t_8_9'] df['t_ds'] = 2 * df['t_3_9'] df['n'] = df['n_3d'] + df['n_4s'] + df['n_2p'] #PAIRPLOTS -------------------------------------------------------------------------- #sns.pairplot(df,vars=['energy','n'],hue='basestate',markers=['o']+['.']*8) #sns.pairplot(df,vars=['energy','n_2ppi','n_2pz','n_3d'],hue='basestate',markers=['o']+['.']*8) #sns.pairplot(df,vars=['energy','t_pi','t_dz','t_ds','t_sz'],hue='basestate',markers=['o']+['.']*8) #plt.show() #exit(0) #FITS -------------------------------------------------------------------------- y = df['energy'] yerr = df['energy_err'] #BIGGEST #X=df[['n_3dd','n_3d','n_2ppi','n_2pz','n_2p','n_4s','t_pi','t_sz','t_dz','t_ds']] #SMALLEST #X=df[['n_3d','n_2ppi','n_2pz']] #SEQUENTIALLY BETTER #X=df[['n_3d','n_2ppi','n_2pz','t_pi']] #X=df[['n_3d','n_2ppi','n_2pz','t_pi','t_sz']] #X=df[['n_3d','n_2ppi','n_2pz','t_pi','t_dz']] #X=df[['n_3d','n_2ppi','n_2pz','t_pi','t_dz','t_sz']] #X=df[['n_3d','n_2ppi','n_2pz','t_dz']] #X=df[['n_3d','n_2ppi','n_2pz','t_sz']] X = df[['n_3d', 'n_2ppi', 'n_2pz', 't_ds', 't_pi']] #X=df[['n_3d','n_2ppi','n_2pz','t_pi','t_ds']] #X=df[['n_3d','n_2ppi','n_2pz','t_dz','t_ds']] #X=df[['n_3d','n_2ppi','n_2pz','t_sz','t_ds']] #X=df[['n_3d','n_2ppi','n_2pz','t_dz','t_sz','t_ds']] X = sm.add_constant(X) beta = 0.0 wls = sm.WLS(y, X, weights=np.exp(-beta * (y - min(y)))).fit() print(wls.summary()) df['pred'] = wls.predict(X) df['resid'] = df['energy'] - df['pred'] sns.pairplot(df, vars=['resid', 't_pi', 't_dz', 't_sz'], hue='basestate', markers=['o'] + ['.'] * 8) ''' g = sns.FacetGrid(df,hue='basestate',hue_kws=dict(marker=['o']+['.']*8),palette=sns.color_palette('husl',9)) g.map(plt.errorbar, "pred", "energy", "energy_err",fmt='o').add_legend() plt.plot(df['energy'],df['energy'],'k--') ''' plt.show() exit(0) #ROTATE TO IAOS -------------------------------------------------------------------------- #Gather IAOs f = '../../pyscf/analyze/b3lyp_iao_b.pickle' #IAOs which span the MOs a = np.load(f) chkfile = '../../pyscf/chk/Cuvtz_r1.725_s1_B3LYP_1.chk' #MOs we used to calculate RDM elements mol = lib.chkfile.load_mol(chkfile) m = ROKS(mol) m.__dict__.update(lib.chkfile.load(chkfile, 'scf')) s = m.get_ovlp() #dpi,dpi,dz2,dd,dd,ppi,ppi,pz,4s #e3d,e2pz,e2ppi,tpi,tdz,tsz=(-3.2487,-2.5759,-1.6910,0.3782,-0.7785,1.1160) #DMC e3d, e2pz, e2ppi, tpi, tdz, tsz = (-3.3324, -1.8762, -0.9182, 0.8266, 0, 0 ) #DMC H = np.diag([e3d, e3d, e3d, e3d, e3d, e2ppi, e2ppi, e2pz, 0]) H[0, 5] = tpi H[5, 0] = tpi H[1, 6] = tpi H[6, 1] = tpi H[2, 7] = tdz H[7, 2] = tdz H[7, 8] = tsz H[8, 7] = tsz mo_coeff = m.mo_coeff[:, 5:14] #Only include active MOs a = a[:, [1, 5, 6, 7, 8, 9, 11, 12, 13]] #Only include active IAOs e1 = reduce(np.dot, (a.T, s, mo_coeff, H, mo_coeff.T, s.T, a)) e1 = (e1 + e1.T) / 2. plt.matshow(e1, vmax=5, vmin=-5, cmap=plt.cm.bwr) plt.colorbar() #labels=['3s','4s','3px','3py','3pz','3dxy','3dyz','3dz2','3dxz','3dx2-y2','2s','2px','2py','2pz'] labels = [ '4s', '3dxy', '3dyz', '3dz2', '3dxz', '3dx2-y2', '2px', '2py', '2pz' ] plt.xticks(np.arange(len(labels)), labels, rotation=90) plt.yticks(np.arange(len(labels)), labels) plt.show()