Exemple #1
0
def amber99(selection="(all)",quiet=0,_self=cmd):
    cmd=_self
    result = 1
    # first, set all parameters to zero

    cmd.alter(selection,"partial_charge=0")
    cmd.alter(selection,"elec_radius=0.0")
    cmd.alter(selection,"text_type=''")

    # next, flag all atoms so that we'll be able to detect what we miss
    
    cmd.flag(23,selection,'set')

    # get the amber99 dictionary
    
    if not hasattr(champ,'amber99_dict'):
        from chempy.champ.amber99 import amber99_dict
        champ.amber99_dict = amber99_dict

    # iterate through the residue dictionary matching each residue based on chemistry
    # and generating the expressions for reassigning formal charges
    
    alter_list = []
    for resn in champ.amber99_dict.keys():
        if cmd.select(tmp_sele1,"(%s) and resn %s"%(selection,resn))>0:
            entry = champ.amber99_dict[resn]
            for rule in entry:
                model = cmd.get_model(tmp_sele1)
                ch = Champ()
                model_pat = ch.insert_model(model)
                ch.pattern_detect_chirality(model_pat)
                assn_pat = ch.insert_pattern_string(rule[0])
                ch.pattern_clear_tags(model_pat)
                if ch.match_1v1_n(assn_pat,model_pat,10000,2)>0:
                    result = ch.pattern_get_ext_indices_with_tags(model_pat)
                    for atom_tag in result[0]: # just iterate over atom tags
                        if len(atom_tag[1])==1: # one and only one match
                            tag = atom_tag[1][0]
                            prop_list = rule[1][tag]
                            # the following expression both changes the formal charge and resets flag 23
                            alter_list.append([atom_tag[0],
            "name='''%s''';text_type='''%s''';partial_charge=%f;elec_radius=%f;flags=flags&-8388609"%prop_list])

    # now evaluate all of these expressions efficiently en-masse 
    cmd.alter_list(selection,alter_list)

    # see if we missed any atoms
    missed_count = cmd.count_atoms("("+selection+") and flag 23")

    if missed_count>0:
        if not quiet:
            # looks like we did, so alter the user
            print " WARNING: %d atoms did not have properties assigned"%missed_count
        result = 0

    # remove the temporary selection we used to select appropriate residues
    
    cmd.delete(tmp_sele1)

    return result
Exemple #2
0
def missing_c_termini(selection="(all)", quiet=0, _self=cmd):
    cmd = _self
    # assumes that hydogens are not present!

    sele_list = []
    ch = Champ()
    model = cmd.get_model(selection)
    model_pat = ch.insert_model(model)
    assn_pat = ch.insert_pattern_string("[N+0+1]C[C;D2]<0>(=O)")
    ch.pattern_clear_tags(model_pat)
    if ch.match_1v1_n(assn_pat, model_pat, 10000, 2) > 0:
        result = ch.pattern_get_ext_indices_with_tags(model_pat)
        for atom_tag in result[0]:  # just iterate over atom tags
            if len(atom_tag[1]) == 1:  # one and only one match
                if atom_tag[1][0] == 0:
                    sele_list.append(atom_tag[0])
    cmd.select_list(tmp_sele1, selection, sele_list, mode='index')
    while cmd.pop(tmp_sele2, tmp_sele1) > 0:  # complete the carboxy terminus
        cmd.edit(tmp_sele2)
        cmd.attach("O", 1, 1, "OXT", quiet=1)
        cmd.unpick()
    cmd.delete(tmp_sele1)
Exemple #3
0
def missing_c_termini(selection="(all)",quiet=0,_self=cmd):
    cmd=_self
    # assumes that hydogens are not present!
    
    sele_list = []
    ch=Champ()
    model = cmd.get_model(selection)
    model_pat = ch.insert_model(model)
    assn_pat = ch.insert_pattern_string("[N+0+1]C[C;D2]<0>(=O)")
    ch.pattern_clear_tags(model_pat)
    if ch.match_1v1_n(assn_pat,model_pat,10000,2)>0:
        result = ch.pattern_get_ext_indices_with_tags(model_pat)
        for atom_tag in result[0]: # just iterate over atom tags
            if len(atom_tag[1])==1: # one and only one match
                if atom_tag[1][0]==0:
                    sele_list.append(atom_tag[0])
    cmd.select_list(tmp_sele1,selection,sele_list, mode='index')
    while cmd.pop(tmp_sele2,tmp_sele1)>0: # complete the carboxy terminus
        cmd.edit(tmp_sele2)
        cmd.attach("O",1,1,"OXT",quiet=1)
        cmd.unpick()
    cmd.delete(tmp_sele1)
ch = Champ()

f = open("nci.smi")

c = 1
lst = []
while 1:
   l = f.readline()
   if not l: break
   l = string.strip(l)
   if len(l):
      if 1000*(c/1000)==c:
         print c
      c = c + 1
#      print l
      idx = ch.insert_pattern_string(l)
 #      ch.pattern_dump(idx)
      o = ch.get_pattern_string(idx)
      if len(o) != len(l): # same length?
         print "orig:  ",l
         print "champ: ",o
         ch.pattern_dump(idx)
         break
      else:
         # now, anonymize cycle identifiers and then compare...
         o = pnum_re.sub("|",o)
         o = num_re.sub("|",o)
         l = pnum_re.sub("|",l)
         l = num_re.sub("|",l)
         fail = 0
         if o!=l:
Exemple #5
0
def formal_charges(selection="(all)", quiet=0, _self=cmd):
    cmd = _self
    result = 1
    # assumes that hydogens are not present!

    # first, set all formal charges to zero

    cmd.alter(selection, "formal_charge=0")

    # next, flag all atoms so that we'll be able to detect what we miss

    cmd.flag(23, selection, 'set')

    # get the residue dictionary for formal charges

    if not hasattr(champ, 'formal_charge_dict'):
        from chempy.champ.formal_charges import formal_charge_dict
        champ.formal_charge_dict = formal_charge_dict

    # iterate through the residue dictionary matching each residue based on chemistry
    # and generating the expressions for reassigning formal charges

    alter_list = []
    for resn in champ.formal_charge_dict.keys():
        if cmd.select(tmp_sele1, "(%s) and resn %s" % (selection, resn)) > 0:
            entry = champ.formal_charge_dict[resn]
            for rule in entry:
                model = cmd.get_model(tmp_sele1)
                ch = Champ()
                model_pat = ch.insert_model(model)
                assn_pat = ch.insert_pattern_string(rule[0])
                ch.pattern_clear_tags(model_pat)
                if ch.match_1v1_n(assn_pat, model_pat, 10000, 2) > 0:
                    result = ch.pattern_get_ext_indices_with_tags(model_pat)
                    for atom_tag in result[0]:  # just iterate over atom tags
                        if len(atom_tag[1]) == 1:  # one and only one match
                            tag = atom_tag[1][0]
                            formal_charge = rule[1][tag]
                            # the following expression both changes the formal charge and resets flag 23
                            alter_list.append([
                                atom_tag[0],
                                "formal_charge=%d;flags=flags&-8388609" %
                                formal_charge
                            ])

    if 1:  # n-terminal amine
        # non-proline
        ch = Champ()
        model = cmd.get_model(selection)
        model_pat = ch.insert_model(model)
        assn_pat = ch.insert_pattern_string("[N;D1]<0>CC(=O)")
        ch.pattern_clear_tags(model_pat)
        if ch.match_1v1_n(assn_pat, model_pat, 10000, 2) > 0:
            result = ch.pattern_get_ext_indices_with_tags(model_pat)
            for atom_tag in result[0]:  # just iterate over atom tags
                if len(atom_tag[1]) == 1:  # one and only one match
                    if atom_tag[1][0] == 0:
                        # the following expression both changes the formal charge and resets flag 23
                        alter_list.append([
                            atom_tag[0], "formal_charge=1;flags=flags&-8388609"
                        ])
        # proline residues
        ch = Champ()
        model = cmd.get_model(selection)
        model_pat = ch.insert_model(model)
        assn_pat = ch.insert_pattern_string("C1CC[N;D2]<0>C1C(=O)")
        ch.pattern_clear_tags(model_pat)
        if ch.match_1v1_n(assn_pat, model_pat, 10000, 2) > 0:
            result = ch.pattern_get_ext_indices_with_tags(model_pat)
            for atom_tag in result[0]:  # just iterate over atom tags
                if len(atom_tag[1]) == 1:  # one and only one match
                    if atom_tag[1][0] == 0:
                        # the following expression both changes the formal charge and resets flag 23
                        alter_list.append([
                            atom_tag[0], "formal_charge=1;flags=flags&-8388609"
                        ])

    if 1:  # c-terminal acid
        ch = Champ()
        model = cmd.get_model(selection)
        model_pat = ch.insert_model(model)
        assn_pat = ch.insert_pattern_string("NCC(=O<0>)[O;D1]<1>")
        ch.pattern_clear_tags(model_pat)
        if ch.match_1v1_n(assn_pat, model_pat, 10000, 2) > 0:
            result = ch.pattern_get_ext_indices_with_tags(model_pat)
            for atom_tag in result[0]:  # just iterate over atom tags
                if len(atom_tag[1]) == 1:  # one and only one match
                    if atom_tag[1][0] == 1:
                        # the following expression both changes the formal charge and resets flag 23
                        alter_list.append([
                            atom_tag[0],
                            "formal_charge=-1;flags=flags&-8388609"
                        ])

    # now evaluate all of these expressions efficiently en-masse
    cmd.alter_list(selection, alter_list)

    # see if we missed any atoms
    missed_count = cmd.count_atoms("(" + selection + ") and flag 23")

    if missed_count > 0:
        if not quiet:
            # looks like we did, so alter the user
            print(" WARNING: %d atoms did not have formal charges assigned" %
                  missed_count)
        result = 0
    # remove the temporary selection we used to select appropriate residues

    cmd.delete(tmp_sele1)

    return result
    pat2 = ch.pattern_get_string_with_names(m1)

    # confirm that CHAMP handles this pattern well...

    if pat1 != pat2:
        print " Chirality Assignment Error!"
        print pat1
        print pat2
        break
    else:
        pat = pat1

#   print pat1

    clean_pat = re.sub("<[^>]*>", "", pat)
    source = ch.insert_pattern_string(clean_pat)
    #   print ch.pattern_get_string(source)
    #   print ch.pattern_get_string(m1)
    if ch.match_1v1_b(source, m1) == 0:
        print " Error: Pattern doesn't match with self!"

    pat_isomer = string.replace(pat, "@@", "X")
    pat_isomer = string.replace(pat_isomer, "@", "@@")
    pat_isomer = string.replace(pat_isomer, "X", "@")
    isomer = ch.insert_pattern_string(pat_isomer)
    #   if ch.match_1v1_b(isomer,m1)==1:
    #      if(res!='gly'):
    #         print " Error: Pattern matches the enatiomer"

    pat_racemic = string.replace(pat, "@", "")
    racemic = ch.insert_pattern_string(pat_racemic)
Exemple #7
0
def formal_charges(selection="(all)",quiet=0,_self=cmd):
    cmd=_self
    result = 1
    # assumes that hydogens are not present!
    
    # first, set all formal charges to zero
    
    cmd.alter(selection,"formal_charge=0")

    # next, flag all atoms so that we'll be able to detect what we miss
    
    cmd.flag(23,selection,'set')

    # get the residue dictionary for formal charges
    
    if not hasattr(champ,'formal_charge_dict'):
        from chempy.champ.formal_charges import formal_charge_dict
        champ.formal_charge_dict = formal_charge_dict

    # iterate through the residue dictionary matching each residue based on chemistry
    # and generating the expressions for reassigning formal charges
    
    alter_list = []
    for resn in champ.formal_charge_dict.keys():
        if cmd.select(tmp_sele1,"(%s) and resn %s"%(selection,resn))>0:
            entry = champ.formal_charge_dict[resn]
            for rule in entry:
                model = cmd.get_model(tmp_sele1)
                ch = Champ()
                model_pat = ch.insert_model(model)         
                assn_pat = ch.insert_pattern_string(rule[0])
                ch.pattern_clear_tags(model_pat)
                if ch.match_1v1_n(assn_pat,model_pat,10000,2)>0:
                    result = ch.pattern_get_ext_indices_with_tags(model_pat)
                    for atom_tag in result[0]: # just iterate over atom tags
                        if len(atom_tag[1])==1: # one and only one match
                            tag = atom_tag[1][0]
                            formal_charge = rule[1][tag]
                            # the following expression both changes the formal charge and resets flag 23
                            alter_list.append([atom_tag[0],
                                                     "formal_charge=%d;flags=flags&-8388609"%formal_charge])

    if 1: # n-terminal amine
        # non-proline 
        ch=Champ()
        model = cmd.get_model(selection)
        model_pat = ch.insert_model(model)
        assn_pat = ch.insert_pattern_string("[N;D1]<0>CC(=O)")
        ch.pattern_clear_tags(model_pat)
        if ch.match_1v1_n(assn_pat,model_pat,10000,2)>0:
                result = ch.pattern_get_ext_indices_with_tags(model_pat)
                for atom_tag in result[0]: # just iterate over atom tags
                    if len(atom_tag[1])==1: # one and only one match
                        if atom_tag[1][0]==0:
                            # the following expression both changes the formal charge and resets flag 23
                            alter_list.append([atom_tag[0],
                                                     "formal_charge=1;flags=flags&-8388609"])
        # proline residues
        ch=Champ()
        model = cmd.get_model(selection)
        model_pat = ch.insert_model(model)
        assn_pat = ch.insert_pattern_string("C1CC[N;D2]<0>C1C(=O)")
        ch.pattern_clear_tags(model_pat)
        if ch.match_1v1_n(assn_pat,model_pat,10000,2)>0:
                result = ch.pattern_get_ext_indices_with_tags(model_pat)
                for atom_tag in result[0]: # just iterate over atom tags
                    if len(atom_tag[1])==1: # one and only one match
                        if atom_tag[1][0]==0:
                            # the following expression both changes the formal charge and resets flag 23
                            alter_list.append([atom_tag[0],
                                                     "formal_charge=1;flags=flags&-8388609"])
                                    
    if 1: # c-terminal acid
        ch=Champ()
        model = cmd.get_model(selection)
        model_pat = ch.insert_model(model)
        assn_pat = ch.insert_pattern_string("NCC(=O<0>)[O;D1]<1>")
        ch.pattern_clear_tags(model_pat)
        if ch.match_1v1_n(assn_pat,model_pat,10000,2)>0:
                result = ch.pattern_get_ext_indices_with_tags(model_pat)
                for atom_tag in result[0]: # just iterate over atom tags
                    if len(atom_tag[1])==1: # one and only one match
                        if atom_tag[1][0]==1:
                            # the following expression both changes the formal charge and resets flag 23
                            alter_list.append([atom_tag[0],
                                                     "formal_charge=-1;flags=flags&-8388609"])
        
    # now evaluate all of these expressions efficiently en-masse 
    cmd.alter_list(selection,alter_list)

    # see if we missed any atoms
    missed_count = cmd.count_atoms("("+selection+") and flag 23")

    if missed_count>0:
        if not quiet:
            # looks like we did, so alter the user
            print " WARNING: %d atoms did not have formal charges assigned"%missed_count
        result = 0
    # remove the temporary selection we used to select appropriate residues
    
    cmd.delete(tmp_sele1)
    
    return result
Exemple #8
0
from chempy.champ import Champ

ch = Champ()
p1 = ch.insert_pattern_string("C(N)(F)O")
ch.pattern_dump(p1)

ch = Champ()
p1 = ch.insert_pattern_string("C1(N)(F).O1")
ch.pattern_dump(p1)
    "HC(N)(O)C",
    "HC(O)(C)N",
    "CC(H)(O)N",
    "NC(H)(C)O",
    "OC(H)(N)C",
    "OC(N)(C)H",
    "CC(O)(N)H",
    "NC(C)(O)H",
    "NC(O)(H)C",
    "OC(C)(H)N",
    "CC(N)(H)O",
]

# print

PIS = map(lambda x: ch.insert_pattern_string(x), IS)
PXS = map(lambda x: ch.insert_pattern_string(x), XS)

for a in range(0, len(PIS)):
    print IS[a], ch.pattern_get_string(PIS[a])

for a in range(0, len(PXS)):
    print XS[a], ch.pattern_get_string(PXS[a])

PIR = map(lambda x: ch.insert_pattern_string(x), IR)
PXR = map(lambda x: ch.insert_pattern_string(x), XR)

for a in range(0, len(PIR)):
    print IR[a], ch.pattern_get_string(PIR[a])

for a in range(0, len(PXR)):
Exemple #10
0
   ch.pattern_detect_chirality(m1)
   pat2 = ch.pattern_get_string_with_names(m1)

# confirm that CHAMP handles this pattern well...

   if pat1!=pat2:
      print " Chirality Assignment Error!"
      print pat1
      print pat2
      break
   else:
      pat = pat1

#   print pat1
   clean_pat = re.sub("<[^>]*>","",pat)
   source = ch.insert_pattern_string(clean_pat)

#   print ch.pattern_get_string(source)
#   print ch.pattern_get_string(m1)
   if ch.match_1v1_b(source,m1)==0:
      print " Error: Pattern doesn't match with self!"

   pat_isomer = string.replace(pat,"@@","X")
   pat_isomer = string.replace(pat_isomer,"@","@@")
   pat_isomer = string.replace(pat_isomer,"X","@")
   isomer = ch.insert_pattern_string(pat_isomer)
   if ch.match_1v1_b(isomer,m1)==1:
      if(res!='gly'):
         print " Error: Pattern matches the enatiomer"

   pat_racemic = string.replace(pat,"@","")
Exemple #11
0
   "NC(H)(C)O",
   "OC(H)(N)C",

   "OC(N)(C)H",
   "CC(O)(N)H",
   "NC(C)(O)H",

   "NC(O)(H)C",
   "OC(C)(H)N",
   "CC(N)(H)O",

   ]

# S match tests

PIS = map(lambda x:ch.insert_pattern_string(x),IS)
TIS = map(lambda x:ch.insert_pattern_string(x),IS)

PXS = map(lambda x:ch.insert_pattern_string(x),XS)
TXS = map(lambda x:ch.insert_pattern_string(x),XS)

for a in range(0,len(PIS)):
   for b in range(0,len(TIS)):
      if not (ch.match_1v1_b(PIS[a],TIS[b]) == 1):
         print "Error: PIS[%d],TIS[%d]"%(a,b)

for a in range(0,len(TIS)):
   for b in range(0,len(TIS)):
      if not (ch.match_1v1_b(TIS[a],TIS[b]) == 1):
         print "Error: TIS[%d],TIS[%d]"%(a,b)
Exemple #12
0
from chempy.champ import Champ

ch = Champ()
p1 = ch.insert_pattern_string("C(N)(F)O")
ch.pattern_dump(p1)


ch = Champ()
p1 = ch.insert_pattern_string("C1(N)(F).O1")
ch.pattern_dump(p1)