def fukuiPlusMartinez(self): print "-----------------------------------------------------------------" print "\nProcessing Chi plus.... \n\n" occ_orb = sp.get_orbitals(self.lines)[0] all_orb = sp.get_orbitals(self.lines)[2] molecule = self.fchkFile.split("_")[0] chiplus=[] denvirt=0.0 # Compute the denominator of chiplus start = int(len(occ_orb)) for j in range(start,len(all_orb)): ek_ej = float(all_orb[-1])-float(all_orb[j]) denvirt= denvirt + ek_ej # Compute the division to get total chiplus for i in range(start,len(all_orb)): chiplus_i=(float(all_orb[-1])-float(all_orb[i]))/denvirt chiplus.append(chiplus_i) if i==start: cub_sum="F_plus_"+molecule+".cub" input1="cubegen 0 MO="+str(i+1)+" "+self.fchkFile+" "+cub_sum+" 0 h" commands.getstatusoutput(input1) cubman.sq_cube(cub_sum) cubman.mult_cube(cub_sum+"_sq",chiplus_i) if i>start: cub_out=molecule+"_"+str(i+1)+".cub" input1="cubegen 0 MO="+str(i+1)+" "+self.fchkFile+" "+cub_out+" 0 h" commands.getstatusoutput(input1) cubman.sq_cube(cub_out) cubman.mult_cube(cub_out+"_sq",chiplus_i) cubman.sum_total(cub_sum+"_sq"+"_mult",cub_out+"_sq"+"_mult") os.system("mv "+cub_sum+"_sq_mult"+" fukuiPlusIAP.cub") cub_final = "fukuiPlusIAP.cub" return cub_final
def all_symm_orbs_energ(lines): occ_energ_symm = {} virt_energ_symm = {} blocks = get_blocks(lines) for blockNum in range(0,len(blocks)): # Get the dictcionary with the number of orbitals and respective symmetries Occ_dict_num = sp.get_symm_orbs(blocks[blockNum])[0] Virt_dict_num = sp.get_symm_orbs(blocks[blockNum])[1] #Get the orbital energies: occ_energ = sp.get_orbitals(blocks[blockNum])[0] virt_energ = sp.get_orbitals(blocks[blockNum])[1] all_orbs = sp.get_orbitals(blocks[blockNum])[2] #In the first block initialize the symm_orbital dictcionary if blockNum == 0: for itemNum in range(1,len(occ_energ)+1): symm = Occ_dict_num[itemNum] occ_energ_symm[symm] = [] for itemNum in range(len(occ_energ)+1, len(all_orbs)+1): symm = Virt_dict_num[itemNum] virt_energ_symm[symm] = [] # Appending the orbital energies of that point in the IRC with the orbtial enengies for itemNum in range(1,len(occ_energ)+1): symm = str(Occ_dict_num[itemNum]) occ_energ_symm[symm].append(occ_energ[itemNum-1]) for itemNum in range(len(occ_energ)+1, len(all_orbs)+1): #print itemNum symm = str(Virt_dict_num[itemNum]) virt_energ_symm[symm].append(virt_energ[itemNum-len(occ_energ)-1]) all_energ_symm = dict(occ_energ_symm.items() + virt_energ_symm.items()) return(all_energ_symm, occ_energ_symm, virt_energ_symm)
def LUMO(self): virt_energy_list = sp.get_orbitals(self.lines)[1] occ_energy_list = sp.get_orbitals(self.lines)[0] lumo_energy = virt_energy_list[0] lumo_number = int(len(occ_energy_list)) + 1 lumo = cubman.generate_cube(lumo_number,self.fchkpath, "LUMO.cube",True) print "LUMO: "+str(lumo_number) + " "+lumo_energy return lumo
def fukuiMinusMartinez(self): print "Processing Chi minus.... \n\n" occ_orb = sp.get_orbitals(self.lines)[0] molecule = self.fchkFile.split("_")[0] chiminus=[] denocc=0.0 # Compute the denominator of chimins for j in range(1,len(occ_orb)): denocc=denocc+float(occ_orb[j])-float(occ_orb[0]) # Compute the division to get total chiminus for i in range(0,len(occ_orb)): chiminus_i = (float(occ_orb[i])-float(occ_orb[0]))/denocc chiminus.append(chiminus_i) # Calculo del cubo perteneciente al orbital i-esimo if i==0: print "Computing cube for orbital "+str(i) cub_sum="F_minus_"+molecule+".cub" input1="cubegen 0 MO="+str(i+1)+" "+self.fchkFile+" "+cub_sum+" 0 h" commands.getstatusoutput(input1) cubman.sq_cube(cub_sum) cubman.mult_cube(cub_sum+"_sq",chiminus_i) if i>0: print "Computing cube for orbital "+str(i) cub_out=molecule+"_"+str(i+1)+".cub" input1="cubegen 0 MO="+str(i+1)+" "+self.fchkFile+" "+cub_out+" 0 h" commands.getstatusoutput(input1) cubman.sq_cube(cub_out) cubman.mult_cube(cub_out+"_sq",chiminus_i) cubman.sum_total(cub_sum+"_sq"+"_mult",cub_out+"_sq"+"_mult") os.system("mv "+cub_sum+"_sq_mult"+" fukuiMinusIAP.cub") os.system("rm *cub_sq") cub_final = "fukuiMinusIAP.cub" return cub_final
def H**O(self): occ_energy_list = sp.get_orbitals(self.lines)[0] homo_energy = occ_energy_list[-1] homo_number = len(occ_energy_list) h**o = cubman.generate_cube(homo_number,self.fchkpath, "H**O.cube",True) print "H**O: "+str(homo_number) + " "+homo_energy return h**o
def localHyperSoftnessFMOA(self): occ_energy_list = sp.get_orbitals(self.lines)[0] HOMO_enr = occ_energy_list[-1] virt_energy_list = sp.get_orbitals(self.lines)[1] LUMO_energy = virt_energy_list[0] hard = float(HOMO_enr) - float(LUMO_energy) print "HARDNESS: " + str(hard) if not os.path.exists("lhsFMOA"): os.makedirs("lhsFMOA") os.chdir("lhsFMOA") print "CALCULATING THE DUAL DESCRIPTOR" dual = cubman.substract_cube(self.LUMO(), self.H**O()) os.system("mv "+dual+" dualFMOA.cub") print "MULTIPlYING THE DUAL DESCRIPTOR" HS = cubman.mult_cube("dualFMOA.cub", 1.0/(hard*hard)) os.system("mv "+HS+" lhsFMOA.cub") os.chdir("../")
def allCubes(self): all_orbs = sp.get_orbitals(self.lines)[2] for orbNum in range(1,len(all_orbs)+1): cubman.generate_cube(orbNum, self.fchkpath,"cube_"+str(orbNum)+".cub")
def all_orbs(lines): all_orbs = [] blocks = get_blocks(lines) for blockNum in range(0,len(blocks)): all_orbs.append(sp.get_orbitals(blocks[blockNum])) return all_orbs