def CalculateUnweightRDF(ChargeCoordinates): """Calculate unweighted RDF descriptors.""" R = GetR(n=30) temp = [] # ChargeCoordinates=_ReadCoordinates('temp.arc') for i in ChargeCoordinates: # if i[0]!='H': temp.append([float(i[1]), float(i[2]), float(i[3])]) DM = GetGeometricalDistanceMatrix(temp) nAT = len(temp) RDFresult = {} for kkk, Ri in enumerate(R): res = 0.0 for j in range(nAT - 1): for k in range(j + 1, nAT): res = res + math.exp(-_beta * math.pow(Ri - DM[j, k], 2)) RDFresult[f'RDFU{kkk + 1}'] = round(res, 3) return RDFresult
def CalculatePolarizabilityRDF(ChargeCoordinates): """Calculate RDF descriptors with Polarizability schemes.""" R = GetR(n=30) temp = [] polarizability = [] # ChargeCoordinates=_ReadCoordinates('temp.arc') for i in ChargeCoordinates: # if i[0]!='H': temp.append([float(i[1]), float(i[2]), float(i[3])]) polarizability.append(GetRelativeAtomicProperty(i[0], 'alapha')) DM = GetGeometricalDistanceMatrix(temp) nAT = len(temp) RDFresult = {} for kkk, Ri in enumerate(R): res = 0.0 for j in range(nAT - 1): for k in range(j + 1, nAT): res = res + polarizability[j] * polarizability[k] * math.exp(-_beta * math.pow(Ri - DM[j, k], 2)) RDFresult[f'RDFP{kkk + 1}'] = round(res, 3) return RDFresult
def CalculateMassRDF(mol, ChargeCoordinates): """Calculate RDF descriptors with Mass schemes.""" mol.addh() mass = [i.atomicmass for i in mol.atoms] R = GetR(n=30) temp = [] # ChargeCoordinates=_ReadCoordinates('temp.arc') for i in ChargeCoordinates: # if i[0]!='H': temp.append([float(i[1]), float(i[2]), float(i[3])]) DM = GetGeometricalDistanceMatrix(temp) nAT = len(temp) RDFresult = {} for kkk, Ri in enumerate(R): res = 0.0 for j in range(nAT - 1): for k in range(j + 1, nAT): res = res + mass[j] * mass[k] * math.exp(-_beta * math.pow(Ri - DM[j, k], 2)) RDFresult[f'RDFM{kkk + 1}'] = round(res / 144, 3) return RDFresult
def CalculateVDWVolumeRDF(ChargeCoordinates): """Calculate RDF with atomic van der Waals volume shemes.""" R = GetR(n=30) temp = [] VDW = [] # ChargeCoordinates=_ReadCoordinates('temp.arc') for i in ChargeCoordinates: # if i[0]!='H': temp.append([float(i[1]), float(i[2]), float(i[3])]) VDW.append(GetRelativeAtomicProperty(i[0], 'V')) DM = GetGeometricalDistanceMatrix(temp) nAT = len(temp) RDFresult = {} for kkk, Ri in enumerate(R): res = 0.0 for j in range(nAT - 1): for k in range(j + 1, nAT): res = res + VDW[j] * VDW[k] * math.exp(-_beta * math.pow(Ri - DM[j, k], 2)) RDFresult[f'RDFV{kkk + 1}'] = round(res, 3) return RDFresult
def CalculateUnweightMoRSE(ChargeCoordinates: List[List[float]]) -> dict: """Calculate unweighted 3D MoRse descriptors. :param ChargeCoordinates: Atomic coordinates and charges as read by chemopy.GeoOpt._ReadCoordinates """ R = GetR(n=30) temp = [] # ChargeCoordinates=_ReadCoordinates('temp.arc') for i in ChargeCoordinates: # if i[0]!='H': temp.append([float(i[1]), float(i[2]), float(i[3])]) DM = GetGeometricalDistanceMatrix(temp) nAT = len(temp) RDFresult = {} for kkk, Ri in enumerate(R): res = 0.0 for j in range(nAT - 1): for k in range(j + 1, nAT): res = res + math.sin(Ri * DM[j, k]) / (Ri * DM[j, k]) RDFresult[f'MoRSEU{kkk + 1}'] = round(res, 3) return RDFresult
def CalculateAtomicNumberMoRSE(mol: Chem.Mol, ChargeCoordinates: List[List[float]]) -> dict: """Calculate 3D MoRse descriptors from atomic number. :param ChargeCoordinates: Atomic coordinates and charges as read by chemopy.GeoOpt._ReadCoordinates """ R = GetR(n=30) temp = [] mass = [i.atomicnum for i in mol.atoms] for i in ChargeCoordinates: # if i[0]!='H': temp.append([float(i[1]), float(i[2]), float(i[3])]) DM = GetGeometricalDistanceMatrix(temp) nAT = len(temp) RDFresult = {} for kkk, Ri in enumerate(R): res = 0.0 for j in range(nAT - 1): for k in range(j + 1, nAT): res = res + mass[j] * mass[k] * math.sin( Ri * DM[j, k]) / (Ri * DM[j, k]) RDFresult[f'MoRSEN{kkk + 1}'] = round(res / 144, 3) return RDFresult
def CalculateVDWVolumeMoRSE(ChargeCoordinates: List[List[float]]) -> dict: """Calculate 3D MoRse descriptors from van der Waals volume. :param ChargeCoordinates: Atomic coordinates and charges as read by chemopy.GeoOpt._ReadCoordinates """ R = GetR(n=30) temp = [] VDW = [] for i in ChargeCoordinates: # if i[0]!='H': temp.append([float(i[1]), float(i[2]), float(i[3])]) VDW.append(GetRelativeAtomicProperty(i[0], 'V')) DM = GetGeometricalDistanceMatrix(temp) nAT = len(temp) RDFresult = {} for kkk, Ri in enumerate(R): res = 0.0 for j in range(nAT - 1): for k in range(j + 1, nAT): res = res + VDW[j] * VDW[k] * math.sin( Ri * DM[j, k]) / (Ri * DM[j, k]) RDFresult[f'MoRSEV{kkk + 1}'] = round(res, 3) return RDFresult