def attach(partmono, attach1, monomer, number): # needs more work, very specific right now monomernew = monomer num = int(number) for run in range(0, num): add = int(monomernew.atoms[-1].atom_id) newalist = [] newblist = [] # remove bonds in old attach and remove the hydrogen as well for i in range(len(attach1.atom_bonds)): if attach1.atom_bonds[i].atom_type == "H": # this has to do in a specific manner, may have to change oldh = attach1.atom_bonds[i] attachid = attach1.atom_id abond = bond.get_bond(attach1, oldh, monomernew.bonds) monomernew.bonds.remove(abond) monomernew.atoms.remove(oldh) # take partmono and offset all of its atoms to create a good atomlist for i in range(len(partmono)): newalist.append(copy.deepcopy(partmono[i])) newalist[i].atom_id = int(partmono[i].atom_id) + add newalist[i].x_pos = float(newalist[i].x_pos) + (run + 1) * -4.000 print (run + 1) * 5.000 # generate new alist, put this kind of stuff into one big method or something for i in range(len(newalist)): for j in range(len(newalist[i].atom_bonds)): newalist[i].atom_bonds[j] = atom.get_atombyid(newalist, int(newalist[i].atom_bonds[j].atom_id) + add) # generate new blist newblist = getpartblist(partmono, monomer, newalist, add) for i in range(len(newblist)): if newblist[i].bond_slave == None: newblist.remove(newblist[i]) break a5add = atom.get_atombyid(newalist, 5 + add) a37add = atom.get_atombyid(newalist, 37 + add) newblist.append(bond.Bond(1, a5add, a37add)) # remove the nonetype from addloc so it doesnt f**k shit up # add this to newmonomer for i in range(len(newalist)): monomernew.atoms.append(newalist[i]) for i in range(len(newblist)): monomernew.bonds.append(newblist[i]) print newalist[0].atom_id print monomer.atoms[0].atom_id print newalist[0].atom_bonds[1].atom_id print newblist[0].bond_master.atom_id print newalist[0].x_pos print monomer.atoms[0].x_pos attach1 = atom.get_atombyid(newalist, int(attachid) + add) return monomernew
def getpartblist(partmono, monomer, newatoms, add): partmonobonds = [] for i in range(len(partmono)): for j in range(len(monomer.bonds)): if monomer.bonds[j].bond_master == partmono[i]: bondscopy = copy.deepcopy(monomer.bonds[j]) newmast = atom.get_atombyid(newatoms, int(monomer.bonds[j].bond_master.atom_id) + add) newslave = atom.get_atombyid(newatoms, int(monomer.bonds[j].bond_slave.atom_id) + add) bondscopy.bond_master = newmast bondscopy.bond_slave = newslave partmonobonds.append(bondscopy) return partmonobonds