def cmpxyz(ifname1, ifname2): conns = read.readconns(ifname1) Rs = relalist.genR(conns) As = relalist.genA(conns) Ds = relalist.genD(conns) xyz1 = read.readxyz_2(ifname1) xyz2 = read.readxyz_2(ifname2) Rds1 = [tools.distance(xyz1[x[0]], xyz1[x[1]]) for x in Rs] Rds2 = [tools.distance(xyz2[x[0]], xyz2[x[1]]) for x in Rs] Ads1 = [tools.angle(xyz1[x[0]], xyz1[x[1]], xyz1[x[2]]) for x in As] Ads2 = [tools.angle(xyz2[x[0]], xyz2[x[1]], xyz2[x[2]]) for x in As] Dds1 = [tools.torsionangle(xyz1[x[0]], xyz1[x[1]], xyz1[x[2]], xyz1[x[3]]) \ for x in Ds] Dds2 = [tools.torsionangle(xyz2[x[0]], xyz2[x[1]], xyz2[x[2]], xyz2[x[3]]) \ for x in Ds] dR = [math.fabs(Rds1[i] - Rds2[i]) for i in range(len(Rds1))] dA = [math.fabs(Ads1[i] - Ads2[i]) for i in range(len(Ads1))] dD = [math.fabs(Dds1[i] - Dds2[i]) for i in range(len(Dds1))] M = maxb(dR) print 'max R diff: %f, R(%i, %i)' % (dR[M], Rs[M][0]+1, Rs[M][1]+1) M = maxb(dA) print 'max angle diff: %f, A(%i, %i, %i)' % \ (dA[M], As[M][0]+1, As[M][1]+1, As[M][2]+1) M = maxb(dD) print 'max torsion diff: %f, D(%i, %i, %i, %i)' % \ (dD[M], Ds[M][0]+1, Ds[M][1]+1, Ds[M][2]+1, Ds[M][3]+1)
def cmpmol(mol1, mol2, cmplist = None): if cmplist is None: cmplist1 = relalist.Relalist(mol1) cmplist2 = relalist.Relalist(mol2) if cmplist1 == cmplist2: cmplist = cmplist1 else: raise ValueError result = Cmpresult() for x in cmplist.bonds: b1 = mol1.calclen(x[0], x[1]) b2 = mol2.calclen(x[0], x[1]) result.bonds.append(Cmpresbon(x, b1, b2, b1-b2)) for x in cmplist.angles: b1 = mol1.calcang(x[0], x[1], x[2]) b2 = mol2.calcang(x[0], x[1], x[2]) result.angles.append(Cmpresang(x, b1, b2, b1-b2)) for x in cmplist.torsions: b1 = mol1.calctor(x[0], x[1], x[2], x[3]) b2 = mol2.calctor(x[0], x[1], x[2], x[3]) diff = b1-b2 if diff < -180: diff += 360 elif diff > 180: diff -= 360 result.torsions.append(Cmprestor(x, b1, b2, diff)) for i in range(len(mol1)): result.displacement.append([i, tools.distance(mol1[i], mol2[i])]) return result