def imidazole(l_atom2, l_atom_lig): """search imidazole global in: list atom connected of nitrogen, list atom ligand out: boolean""" connect1 = toolSubstructure.matrixElement(l_atom2) # print connect1 # append first atom if connect1 == ["N", "C", "C"]: l_atom3, conect2 = retrieveAtom.atomConnect(l_atom_lig, l_atom2[1]["serial"]) l_atom32, conect22 = retrieveAtom.atomConnect(l_atom_lig, l_atom2[2]["serial"]) # sort list to reduce if condition conect2.sort () conect22.sort () if conect2 == ["C", "C", "N", "N"] or conect2 == ["C", "N", "N"]: l_serial_check = [l_atom2[0]["serial"], l_atom3[0]["serial"]] if imidazoleATOM3(l_atom3, l_serial_check, l_atom_lig)[0] == 1: # print "l344" return [1, l_serial_check] elif conect22 == ["C", "C", "N", "N"] or conect22 == ["C", "N", "N"]: l_serial_check = [l_atom2[0]["serial"], l_atom32[0]["serial"]] if imidazoleATOM3(l_atom32, l_serial_check, l_atom_lig)[0] == 1: # print "l350" return [1, l_serial_check] return [0, []]
def cn(listAtomConnectNitrogen, l_atom_lig): """search primary stAtom in: list atom connected of nitrogen, list atom ligand out: 1 or 0""" stAtom = toolSubstructure.matrixElement(listAtomConnectNitrogen) if stAtom == ["N", "C"] or stAtom == ["N", "C"]: if toolSubstructure.checkSingleBond(listAtomConnectNitrogen[0], listAtomConnectNitrogen[1]) == 1: if toolSubstructure.checkConectOnlyC(listAtomConnectNitrogen[1], l_atom_lig) == 1 : return 1 return 0
def cnc(l_atom_connectN, l_atom_lig, more_flex = 0): """search secondary connect_element in: list atom connected of nitrogen, list atom ligand out: 1 or 0""" connect_element = toolSubstructure.matrixElement(l_atom_connectN) if connect_element == ["N", "C", "C"]: # print "IN - NH2" if more_flex == 1 : # more flexible control just connectivity #if toolSubstructure.checkConectOnlyC(l_atom_connectN[1], l_atom_lig) == 1 and toolSubstructure.checkConectOnlyC(l_atom_connectN[2], l_atom_lig) == 1: #if toolSubstructure.checkSingleBond(l_atom_connectN[0], l_atom_connectN[1]) == 1 and toolSubstructure.checkSingleBond(l_atom_connectN[0], l_atom_connectN[2]) == 1: return 1 else : if toolSubstructure.checkConectOnlyC(l_atom_connectN[1], l_atom_lig) == 1 and toolSubstructure.checkConectOnlyC(l_atom_connectN[2], l_atom_lig) == 1: if toolSubstructure.checkSingleBond(l_atom_connectN[0], l_atom_connectN[1]) == 1 and toolSubstructure.checkSingleBond(l_atom_connectN[0], l_atom_connectN[2]) == 1: return 1 return 0
def cncc(l_atom_connectN, l_atom_lig, more_flex = 0): """ Search tertiary amine in list of atom lig - Append option """ connect_element = toolSubstructure.matrixElement(l_atom_connectN) if connect_element == ["N", "C", "C", "C"]: if more_flex == 1 : #if toolSubstructure.checkCoplanar(l_atom_connectN[0], l_atom_lig) == 1: # if toolSubstructure.checkSingleBond(l_atom_connectN[0], l_atom_connectN[1], d_min = 1.34) == 1 and toolSubstructure.checkSingleBond(l_atom_connectN[0], l_atom_connectN[2], d_min = 1.34) == 1 and toolSubstructure.checkSingleBond(l_atom_connectN[0], l_atom_connectN[3], d_min = 1.34) == 1: return 1 else : if toolSubstructure.checkConectOnlyC(l_atom_connectN[1], l_atom_lig) == 1 and toolSubstructure.checkConectOnlyC(l_atom_connectN[2], l_atom_lig) == 1 and toolSubstructure.checkConectOnlyC(l_atom_connectN[3], l_atom_lig) == 1: if toolSubstructure.checkCoplanar(l_atom_connectN[0], l_atom_lig) == 1: if toolSubstructure.checkSingleBond(l_atom_connectN[0], l_atom_connectN[1]) == 1 and toolSubstructure.checkSingleBond(l_atom_connectN[0], l_atom_connectN[2]) == 1 and toolSubstructure.checkSingleBond(l_atom_connectN[0], l_atom_connectN[3]) == 1: return 1 return 0
def acidCarboxylic(l_C2, l_atom_lig) : l_serial = [] connectO1 = toolSubstructure.matrixElement(l_C2) if connectO1 != ["O", "C"] : return [0, []] else : l_serial.append (l_C2[0]["serial"]) l_connect3, connectC2 = retrieveAtom.atomConnect(l_atom_lig, l_C2[1]["serial"]) connectC2.sort() if connectC2 == ["C", "C", "O", "O"] : l_serial.append (l_connect3[0]["serial"]) for atom3 in l_connect3[1:] : if atom3["element"] == "O" and not atom3["serial"] in l_serial: l_O2, connectO2 = retrieveAtom.atomConnect(l_atom_lig, atom3["serial"]) if connectO2 == ["O", "C"] : l_serial.append (atom3["serial"]) else : return [0, []] elif atom3["element"] == "C" and not atom3["serial"] in l_serial : l_atomC4, connectC4 = retrieveAtom.atomConnect(l_atom_lig, atom3["serial"]) # print connectC4, "Check" connectC4_unique = sorted(set(connectC4),key=connectC4.index) # print connectC4_unique if connectC4_unique != ["C"] : return [0, []] else : for atom_conex in l_atomC4[1:] : if toolSubstructure.checkSingleBond(l_atomC4[0], atom_conex) == 0 : return [0, []] # check 3 atom and not a hydroxyl group if len (l_serial) == 3 : return [1, l_serial] return [0, []]
def Guanidium(l_at_connect_N, l_atom_lig): """search Guanidium in: list atom connected of nitrogen, list atom ligand out: 1 or 0""" connectN1 = toolSubstructure.matrixElement(l_at_connect_N) nb_NH = 0 l_atom_out = [] # atom lateral if connectN1 == ["N", "C"] : l_at_connect_c, connectC = retrieveAtom.atomConnect(l_atom_lig , l_at_connect_N[1]["serial"]) if connectC == ["C", "N", "N", "N"] : l_atom_out.append (deepcopy(l_at_connect_c[0])) # append C groupAtomN1, conect_N1 = retrieveAtom.atomConnect(l_atom_lig , int (l_at_connect_c[0]["connect"][1])) groupAtomN2, conect_N2 = retrieveAtom.atomConnect(l_atom_lig , int (l_at_connect_c[0]["connect"][2])) groupAtomN3, conect_N3 = retrieveAtom.atomConnect(l_atom_lig , int (l_at_connect_c[0]["connect"][3])) l_conect = [conect_N1, conect_N2, conect_N3] l_group_atom = [groupAtomN1, groupAtomN2, groupAtomN3] i = 0 while i < 3 : if l_conect[i] == ["N", "C"] : nb_NH = nb_NH + 1 i = i + 1 elif l_conect[i] == ["N", "C", "C"]: if l_group_atom[i][1]["serial"] != l_at_connect_c[0]["serial"] : l_atom_out.append (deepcopy(l_group_atom[i][1])) elif l_group_atom[i][2]["serial"] != l_at_connect_c[0]["serial"] : l_atom_out.append (deepcopy(l_group_atom[i][2])) else : print "ERROR l158" return [0, []] i = i + 1 else : return [0, []] # check number primary connectN1 -> case GAI not take, change ? if nb_NH == 2 : l_atom_out.append (deepcopy(groupAtomN1[0])) l_atom_out.append (deepcopy(groupAtomN2[0])) l_atom_out.append (deepcopy(groupAtomN3[0])) else : return [0, []] # atom central structure elif connectN1 == ["N", "C", "C"] : for at_conect in l_at_connect_N[1:] : l_group_at, conect_N = retrieveAtom.atomConnect(l_atom_lig , at_conect["serial"]) if conect_N == ["C", "N", "N", "N"] : l_c_central = l_group_at l_atom_out.append (deepcopy(l_c_central[0])) for group_at in l_group_at[1:] : l_goup_N, connect_N = retrieveAtom.atomConnect(l_atom_lig , group_at["serial"]) if connect_N == ["N", "C"] : nb_NH = nb_NH + 1 else : l_atom_out.append (deepcopy(l_group_at[0])) if nb_NH >= 2 and len (l_atom_out) >= 2 : l_atom_out.append (deepcopy(l_c_central[1])) l_atom_out.append (deepcopy(l_c_central[2])) l_atom_out.append (deepcopy(l_c_central[3])) else : return [0, []] if len (l_atom_out) != 5 : return [0,[]] else : # append 2 carbons l_C, connectC = retrieveAtom.atomConnect(l_atom_lig , l_atom_out[0]["serial"]) if connectC == ["C", "N", "N", "N"] : l_serial = [l_atom_out[1]["serial"], l_atom_out[0]["serial"]] atomC1 = l_atom_out[1] else : l_serial = [l_atom_out[0]["serial"], l_atom_out[1]["serial"]] atomC1 = l_atom_out[0] # distance between C2 and N d1 = calcul.distanceTwoatoms(atomC1, l_atom_out[2]) d2 = calcul.distanceTwoatoms(atomC1, l_atom_out[3]) d3 = calcul.distanceTwoatoms(atomC1, l_atom_out[4]) l_dist = [d1, d2, d3] l_dist.sort () for dist in l_dist : if dist == d1 : l_serial.append (l_atom_out[2]["serial"]) elif dist == d2 : l_serial.append (l_atom_out[3]["serial"]) else : l_serial.append (l_atom_out[4]["serial"]) return [1,l_serial] return [0, []]