def draw(diction, e_homo): #for f_dic in FL_sMO_dic: for f_dic in diction: #print FL_qchem_outf[fid], "MO id and energy:" #### change into sorted dictionary: but list of (key, value) tuples l_dic=sorted(f_dic.items()) nkeys=len(l_dic) #### obtain degeneracy in advance Degen=1 ii=0 for pair in l_dic: print pair ii+=1 if ii==1: tmp=pair[1] d_moe=1 else: if tmp==pair[1]: d_moe+=1 else: d_moe=1 tmp=pair[1] if d_moe > Degen: Degen=d_moe #print FL_qchem_outf[fid], "degeneracy = ", Degen #### initialize variables for each file drawing tag_draw_beta="NO" #### MO level ragne is classified by nfiles i=0 degen_eline=1 #e_homo=float(FL_homo_ene[fid][0]) #### for H radical if nkeys == 1: y=[l_dic[0][1], l_dic[0][1]] f_draw(1, x_3kinds[0], y, e_homo) fid+=1 continue temp_ene=TEMP_ENE tag_last_draw="NO" #if re.search("\*", v_ene): # in qchem outfile, 1st low number might be ****** #### When use dictionary, be needed to sort keys for tup in l_dic: i+=1 v_ene=tup[1] if print_draw: print v_ene if temp_ene==TEMP_ENE: # for initial energy value, just save temp_ene=v_ene continue #### draw the previous energy y y=[temp_ene, temp_ene] #### if energies are same, increase multi degeneracy if temp_ene == v_ene: degen_eline += 1 ### if not last energy if i != nkeys: continue ### draw 3 plots if last ene and finish else: f_draw(degen_eline, Xrange_nf(nfile, fid, degen_eline,0), y, e_homo) #print "finish drawing" ### if energies are different else: ### draw 3 kind of plots with degeneracy for previous energies if degen_eline > 4: print "ERROR:: so many degeneracy in drawing" exit(10) #print "degen_eline = ", degen_eline #print Xrange_nf(nfile, fid, degen_eline,0), y f_draw(degen_eline, Xrange_nf(nfile, fid, degen_eline,0), y, e_homo) # if last ene and no degenracy, plot additional energy if i == nkeys: y=[v_ene, v_ene] f_draw(1, Xrange_nf(nfile, fid, 1,0), y, e_homo ) """ #### Draw BETA level if(temp_ene > v_ene): print "Draw beta spin" print "Beta is not drawing" print temp_ene, v_ene tag_draw_beta="YES" e_homo=float(FL_homo_ene[fid][1]) x_3kinds=x_3kinds_b """ temp_ene=v_ene degen_eline = 1 #### end of one energy value #fid+=1 #### end of energy list return
#### end of energy list return fid=0 for f_abMO_dic in FL_abMO_dic_list: # draw for alpha draw(f_abMO_dic[0], fid, FL_homo_ene[fid], 0) if draw(FL_sMO_dic, FL_homo_ene[0][0], fid) #### draw MPL link line if nfile == 2: i=0 x=Xrange_nf(2, 0, 1, 0) x2=x[1] x=Xrange_nf(2, 1, 1, 0) x3=x[0] xl_link=[x2, x3] for pair in MO_link_hl_ene: f_draw_link(xl_link, pair) i+=1 elif nfile == 3: i=0 x=Xrange_nf(3, 0, 1, 0) x2=x[1] x=Xrange_nf(3, 1, 1, 0) x3=x[0]
def ab_draw(nfile, fid, beta_tag, ab_tag, diction, e_homo): """ type ab_draw(int, int, int, int, hash(int, float), float) sub function: """ #### change into sorted dictionary: but list of (key, value) tuples print "func: ab_draw ", e_homo l_dic = sorted(diction.items()) nkeys = len(l_dic) #### obtain degeneracy in advance Degen = 1 ii = 0 for pair in l_dic: print pair ii += 1 if ii == 1: tmp = pair[1] d_moe = 1 else: if tmp == pair[1]: d_moe += 1 else: d_moe = 1 tmp = pair[1] if d_moe > Degen: Degen = d_moe #print FL_qchem_outf[fid], "degeneracy = ", Degen #### initialize variables for each file drawing tag_draw_beta = "NO" #### MO level ragne is classified by nfiles i = 0 degen_eline = 1 #e_homo=float(FL_homo_ene[fid][0]) #### for H radical if nkeys == 1: y = [l_dic[0][1], l_dic[0][1]] f_draw(1, x_3kinds[0], y, e_homo) fid += 1 #continue temp_ene = TEMP_ENE tag_last_draw = "NO" #if re.search("\*", v_ene): # in qchem outfile, 1st low number might be ****** #### When use dictionary, be needed to sort keys for tup in l_dic: i += 1 v_ene = tup[1] if print_draw: print v_ene if temp_ene == TEMP_ENE: # for initial energy value, just save temp_ene = v_ene continue #### draw the previous energy y y = [temp_ene, temp_ene] #### if energies are same, increase multi degeneracy if temp_ene == v_ene: degen_eline += 1 ### if not last energy if i != nkeys: continue ### draw 3 plots if last ene and finish else: x_r = Xrange_nf(nfile, fid, beta_tag, ab_tag, degen_eline) f_draw(degen_eline, x_r, y, e_homo) #print "finish drawing" ### Draw if energies are different else: ### draw 3 kind of plots with degeneracy for previous energies if degen_eline > 4: print "ERROR:: so many degeneracy in drawing" exit(10) #print "degen_eline = ", degen_eline #print nfile, fid, beta_tag, ab_tag x_r = Xrange_nf(nfile, fid, beta_tag, ab_tag, degen_eline) #print "ab_tag: ", ab_tag, x_r f_draw(degen_eline, x_r, y, e_homo) # if last ene and no degenracy, plot additional energy if i == nkeys: y = [v_ene, v_ene] #print nfile, fid, beta_tag, ab_tag #print Xrange_nf(nfile, fid, beta_tag, ab_tag, 1) x_r = Xrange_nf(nfile, fid, beta_tag, ab_tag, 1) #print x_r f_draw(1, x_r, y, e_homo) temp_ene = v_ene degen_eline = 1 #### end of one energy value #### end of energy list return 0
beta_tag = FL_beta_tag[fid] if beta_tag == 0: ab_draw(nfile, fid, beta_tag, 0, f_abMO_dic[0], float(FL_homo_ene[fid][0])) else: # 0 for alpha, 1 for beta ab_draw(nfile, fid, beta_tag, 0, f_abMO_dic[0], float(FL_homo_ene[fid][0])) ab_draw(nfile, fid, beta_tag, 1, f_abMO_dic[1], float(FL_homo_ene[fid][1])) fid += 1 #### draw MPL link line if Link_tag: if nfile == 2: i = 0 x = Xrange_nf(nfile, 0, 0, 0, 1) x2 = x[1] x = Xrange_nf(nfile, 1, 0, 0, 1) x3 = x[0] xl_link = [x2, x3] for pair in MO_link_hl_ene: f_draw_link(xl_link, pair) i += 1 elif nfile == 3: i = 0 x = Xrange_nf(nfile, 0, 0, 0, 1) x2 = x[1] x = Xrange_nf(nfile, 1, 0, 0, 1) x3 = x[0] x4 = x[1]
if print_draw: print v_ene if temp_ene==TEMP_ENE: # for initial energy value, just save temp_ene=v_ene continue #### draw the previous energy y y=[temp_ene, temp_ene] #### if energies are same, increase multi degeneracy if temp_ene == v_ene: degen_eline += 1 ### if not last energy if i != nkeys: continue ### draw 3 plots if last ene and finish else: f_draw(degen_eline, Xrange_nf(nfile, fid, degen_eline,0), y, e_homo) #print "finish drawing" ### if energies are different else: ### draw 3 kind of plots with degeneracy for previous energies if degen_eline > 4: print "ERROR:: so many degeneracy in drawing" exit(10) #print "degen_eline = ", degen_eline #print Xrange_nf(nfile, fid, degen_eline,0), y f_draw(degen_eline, Xrange_nf(nfile, fid, degen_eline,0), y, e_homo) # if last ene and no degenracy, plot additional energy if i == nkeys: y=[v_ene, v_ene] f_draw(1, Xrange_nf(nfile, fid, 1,0), y, e_homo ) #### Draw BETA level