コード例 #1
0
ファイル: cmpxyz.py プロジェクト: lidaobing/itcc
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)
コード例 #2
0
ファイル: cmpmol.py プロジェクト: lidaobing/itcc
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