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
def load(): cmd.set("valence") r = 0 list = glob("pdb/*/*") # list = ["pdb/06/pdb406d"] # while list[0]!="pdb/f8/pdb1f8u": # list.pop(0) for file in list: cmd.delete('pdb') cmd.load(file,'pdb') cmd.remove("not alt ''+A") cmd.fix_chemistry("all","all") cmd.h_add() sys.__stderr__.write(file) sys.__stderr__.flush() ch = Champ() model = cmd.get_model('pdb') idx = ch.insert_model(model) ch.pattern_orient_bonds(idx) print " %5d"%cmd.count_atoms(),"%5d"%len(ch.pattern_get_string(idx)), ch.pattern_detect_chirality(idx) pat = ch.pattern_get_string(idx) print "%5d"%len(pat),pat[0:22]+"..."+pat[-10:]
'ser', 'thr', 'trp', 'tyr', 'val'): stored.fc_dict = {} print "'" + string.upper(res) + "': [" print " (" ch = Champ() cmd.fragment(res, "tmp") cmd.iterate("tmp", "stored.fc_dict[name]=formal_charge", quiet=1) cmd.alter("all", "formal_charge=0", quiet=1) cmd.remove("hydro", quiet=1) model = cmd.get_model("tmp") cmd.delete("tmp") m1 = ch.insert_model(model) ch.pattern_detect_chirality(m1) ch.pattern_orient_bonds(m1) pat1 = ch.pattern_get_string_with_names(m1) 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 '''# NOTE: This file was autogenerated aa_dict = {' ''' for res in ( 'ala','arg','asp','asn','cys','gln','glu','gly','his','ile','leu','lys','met','phe','pro','ser','thr','trp','tyr','val' ): print "'"+string.upper(res)+"': [" ch = Champ() cmd.fragment(res,"tmp") model = cmd.get_model("tmp") cmd.delete("tmp") m1 = ch.insert_model(model) ch.pattern_detect_chirality(m1) ch.pattern_orient_bonds(m1) pat1 = ch.pattern_get_string_with_names(m1) 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