diff --git a/common/python/nomadcore/md_data_access/MDDataAccess.py b/common/python/nomadcore/md_data_access/MDDataAccess.py index 773bbd124064a717d2f42a154dd3994dad371330..715854a262b927492bb9e847a376b46736a71f47 100644 --- a/common/python/nomadcore/md_data_access/MDDataAccess.py +++ b/common/python/nomadcore/md_data_access/MDDataAccess.py @@ -320,8 +320,8 @@ def pymConvertTopoDict(topoStor, topoPYM): if noninter: noninter = False typeList.extend(list([ - atmlist[0][2], - atmlist[1][2] + atom_type_dict[atmlist[0][1]], + atom_type_dict[atmlist[1][1]] ])) interTypeDict.update({interNum : typeList}) interNum += 1 @@ -674,8 +674,8 @@ def mdaConvertTopoDict(topoStor, topoMDA): if noninter: noninter = False typeList.extend(list([ - atmlist[0][2], - atmlist[1][2] + atom_type_dict[atmlist[0][1]], + atom_type_dict[atmlist[1][1]] ])) interTypeDict.update({interNum : typeList}) interNum += 1 @@ -2269,3 +2269,194 @@ if __name__ == "__main__": atom = MDdata.iread() print(i) + if "mdanalysis" in MDdata.topocode: + + def getseg(seg): + regex = re.compile(r"^seg_[0-9]+_b") + if regex.findall(seg.segid): + segname = bytes(re.sub(r"^seg_[0-9]+_b","",seg.segid).replace("'",""), "utf-8").decode("utf-8") + else: + segname = seg.segid + return [seg.ix,segname] + + def get_atomseg(atom): + return [atom.segment.ix,atom.segment.segname.decode('utf-8')] + + def getres(atom): + return [atom.resname.decode('utf-8'),atom.resid] + + def getatom(atom): + atmid = atom.ix + atmname = atom.name.decode('utf-8') + atmtyp = atom.type.decode('utf-8') + atmres = atom.resname.decode('utf-8') + atmresid = atom.resid + atmsegid = atom.segid + return [atmid,atmname,atmtyp,atmres,atmresid,atmsegid] + + def residuepairs(atom1,atom2): + return [getres(atom1),getres(atom2)] + + def atompairs(atom1,atom2): + return [getatom(atom1),getatom(atom2)] + + print(MDdata.topohandler.atoms) + attrlist = dir(MDdata.topohandler.atoms) + if "names" in attrlist: + print("Atom Names:",MDdata.topohandler.atoms.names) + if "types" in attrlist: + print("Atom Types:",MDdata.topohandler.atoms.types) + if "masses" in attrlist: + print("Atom Masses:",MDdata.topohandler.atoms.masses) + if "charges" in attrlist: + print("Atom Charges:",MDdata.topohandler.atoms.charges) + if "radiuses" in attrlist: + print("Atom Radiuses:",MDdata.topohandler.atoms.radiuses) + if "bfactors" in attrlist: + print("Atom bFactors:",MDdata.topohandler.atoms.bfactors) + print("Atom List:",[mda.topology.guessers.guess_atom_element(getatom(a)[1]) for a in MDdata.topohandler.atoms]) + print("Atom Residues:",MDdata.topohandler.atoms.residues) + print("Atom Residue ids:",MDdata.topohandler.atoms.residues.ix) + print("Atom Residue Names:",[a.resname for a in MDdata.topohandler.atoms.residues]) + print("Atom Segments:",MDdata.topohandler.atoms.segments) + print("Atom Bonds:",MDdata.topohandler.atoms.bonds) + print("Atom Angles:",MDdata.topohandler.atoms.angles) + print("Atom Dihedrals:",MDdata.topohandler.atoms.dihedrals) + print("Atom Impropers:",MDdata.topohandler.atoms.impropers) + print(MDdata.topohandler.bonds) + topd = MDdata.topohandler.bonds.topDict + topdk = topd.keys() + for key in topdk: + topt = topd[key] + for b in topt: + reslist=residuepairs(b.atoms[0],b.atoms[1]) + atmlist=atompairs(b.atoms[0],b.atoms[1]) + if str(reslist[0][0]) != str(reslist[1][0]): + print("RES:",reslist, + "ATM:",atmlist) + + + #print("Bonds:",[ [a[0].ix,a[1].ix] for a in MDdata.topohandler.bonds]) + print(MDdata.topohandler.angles) + #print("Angles:",[ [a[0].ix,a[1].ix,a[2].ix] for a in MDdata.topohandler.angles]) + print(MDdata.topohandler.residues) + #print("Residue bonds:",[a.bonds for a in MDdata.topohandler.residues]) + #for r in MDdata.topohandler.residues: + # print(r.resname,r.resid) + print([getseg(seg)[1] for seg in MDdata.topohandler.segments]) + #print("Segment Names:",[a.segment for a in MDdata.topohandler.segments]) + #print("Residue Names:",MDdata.topohandler.residues.names) + #print("Residue Types:",MDdata.topohandler.residues.names) + #print("Residue Bonds:",MDdata.topohandler.residues.bonds) + #print("Residue Angles:",MDdata.topohandler.residues.angles) + + + print(mda.topology.guessers.guess_atom_element("BERK")) + + #angles = mdtraj.compute_angles(mytopology) + #dihedrals = mdtraj.compute_dihedrals(mytopology) + #print(dihedrals) + #print(' Chains: %s' % [res for res in mytopology.chains]) + #print(' Residues: %s' % [res for res in mytopology.residues]) + #print(' Atoms: %s' % [res for res in mytopology.atoms]) + #print(' Bonds: %s' % [res for res in mytopology.bonds]) + #print(mytopology.chain(0)) + table, bonds = mytopology.to_dataframe() + print(bonds) + print(len(bonds)) + array = table.get("resSeq") + #print([res for res in array]) + mydict = table.to_dict(orient='list') + mylist = mydict["resSeq"] + print('mylist') + print(mylist) + print('mylist') + atomindex = np.arange(len(mylist)) + passarray = np.zeros((len(mylist), 2), dtype=int) + passarray[:,0] = atomindex + passarray[:,1] = mylist + print(table) + print(passarray) + #print(bonds) + #for bond in bonds: + # print(bond) + mol_to_mol_bond = [] + mol_to_mol_bond_num = [] + atom_in_mol_bond = [] + atom_in_mol_bond_num = [] + index=0 + print(len([res for res in mytopology.bonds])) + for res in mytopology.bonds: + molname1, molatom1 = str(res[0]).split('-') + molname2, molatom2 = str(res[1]).split('-') + if molname1 in molname2: + atom_in_mol_bond.append(res) + atom_in_mol_bond_num.append(bonds[index]) + else: + mol_to_mol_bond.append(res) + mol_to_mol_bond_num.append(bonds[index]) + index += 1 + print(mol_to_mol_bond) + print(np.array(mol_to_mol_bond_num)) + + atom_list = list(set(mydict["name"])) + atom_type_dict = {} + print(atom_list) + print(len(atom_list)) + masses = {} + for ielm in range(len(atom_list)): + elm = atom_list[ielm] + atom_type_dict.update({elm : ielm}) + for atom in mytopology.atoms: + if elm == atom.name: + masses.update({atom.name : atom.element}) + print([atom_list, masses]) + interDict = {} + interTypeDict = {} + for elm in atom_list: + bondList = [] + typeList = [] + bondid = 0 + for bond in mytopology.bonds: + molname1, molatom1 = str(bond[0]).split('-') + molname2, molatom2 = str(bond[1]).split('-') + if (elm == str(molatom1) or elm == str(molatom2)): + bondList.append(list(bonds[bondid])) + #typeList.append(list([molatom1,molatom2])) + typeList.append(list([ + atom_type_dict[str(molatom1)], + atom_type_dict[str(molatom2)] + ])) + interDict.update({elm : bondList}) + interTypeDict.update({elm : typeList}) + bondid += 1 + + # print(interDict) + print(interDict["CH3"]) + print(interTypeDict["CH3"]) + print(len(interDict["CH3"][0])) + + # print([[atom.element.radius, atom.index, atom.name, atom.residue.name, atom.element] for atom in mytopology.atoms]) + + # Atom labels: + print(table) + # for atom in mytopology.atoms: + # print(atom) + labellist = mydict["element"] + #print(labellist) + # atomlabels = np.arange(len(labellist)) + # labelarray = np.zeros((len(labellist), 2), dtype=int) + # labelarray[:,0] = atomlabels + # labelarray[:,1] = labellist + # print(labelarray) + # print(readdata.unitcell_lengths) + latticevectors = readdata.iread().unitcell_vectors + box = readdata.iread().unitcell_lengths + step = 0 + for latvec in latticevectors: + print(step, latvec) + step += 1 + for pbc in box: + print(step, box) + step += 1 +