Ejemplo n.º 1
0
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, []]
Ejemplo n.º 2
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
Ejemplo n.º 3
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
Ejemplo n.º 4
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
Ejemplo n.º 5
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, []]
Ejemplo n.º 6
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, []]