Skip to content

Commit

Permalink
Updated files
Browse files Browse the repository at this point in the history
  • Loading branch information
FrederikTheisen authored Aug 13, 2024
1 parent 76c8aa6 commit ef259f6
Show file tree
Hide file tree
Showing 7 changed files with 614 additions and 492 deletions.
2 changes: 1 addition & 1 deletion Bioinformatics/14_3_3/14_3_3_ComplexPDBIDs.txt
Original file line number Diff line number Diff line change
@@ -1 +1 @@
5NWI,2C63,3EFZ,2BR9,5NWJ,1QJA,6KZG,1QJB,6BCR,3E6Y,7QI1,2WH0,8QTF,8QTT,3AXY,5YQG,6FBB,6RJL,6RJQ,6SLX,6Y3O,6Y3S,6YIA,6YIB,6YIC,6YOW,6YOX,6YOY,6YP2,6YP3,6YP8,6YPL,6YPY,6YQ2,6ZCJ,7B13,3CU8,3O8I,3MHR,3UX0,6Y40,6YR6,8C28,3SMK,3SML,3SMM,3SMN,3SMO,3SP5,3SPR,4FR3,5HF3,5N5R,5N5T,5N5W,6BD1,6NV2,6QHM,6QIU,6QZS,6W0L,6Y3V,7O07,8C2D,8C2Y,1O9D,4DAT,4DAU,4WRQ,7ZMU,7ZMW,6QDU,4HKC,1YWT,6A5S,6FI4,6XWD,6XXC,6XY5,6Y18,6Y1D,6Y3W,6Y58,7BM9,7BMC,7NMA,7NMW,7NMX,7NN2,7NND,7NNE,7NP2,7NPB,7NPG,7OQG,7OQJ,7OQS,7OQU,7OQW,8B2I,8B5P,8C30,2C1N,3UAL,3UBW,5BTV,6FCP,6FI5,8ANB,6R5L,6S3C,6S40,6YLU,7B15,6FBW,6Y44,6HMT,6HN2,6Y3M,6Y3R,8AZE,8BWJ,8BWX,8BWZ,8BX0,8BX3,8BX4,8BXI,8BXM,8BXN,8BXO,8BXQ,8BXS,8BY9,8BYB,8BYC,8BYD,8BYE,8BYG,8BYO,8BYY,8BYZ,8BZ0,8BZ9,8BZA,8BZC,8BZF,8BZW,8C04,8C0K,8C4F,8C4G,3UZD,5ULO,6A5Q,6Y8B,6Y8D,6Y8E,7OBX,7OBY,7QIK,7ZIT,8C2E,4JC3,4JDD,6BCY,6ZVD,6ZVE,5MY9,5MYC,6G8I,7OR3,7OR5,7OR7,4O46,5N75,6F08,6TCH,7OBG,7OBH,8C2F,5MOC,8C40,8C43,6G8J,6G8K,6G8L,7NMZ,8A62,8A65,6ZFD,6ZFG,8BYF,5M36,5M37,6T5H,5MXO,7A6Y,7PWT,7PWZ,3P1N,3P1O,3P1P,3P1Q,3P1R,3P1S,4FL5,4Y32,4Y5I,5LU1,5NAS,5OK9,6RHC,6RP6,6SLW,6YMO,4IEA,6FAU,6FAV,6FAW,6FBY,8A68,8A6F,8A6H,8ATR,8ATS,8AV0,3IQU,6EF5,6G6X,6G8P,6G8Q,6TJM,3IQJ,3IQV,5LU2,5N10,4FJ3,4IHL,6Y1J,6YR5,6YR7,6ZBT,6ZC9,7AEW,6Y8A,7AOG,7AXN,7AYF,7AZ1,7AZ2,7BDP,7BDT,7BDY,7BFW,7BG3,7BGQ,7BGR,7BGV,7BGW,7NIF,7NIG,7NJ6,7NJ8,7NJA,7NRK,7NRL,7OQ9,7OQA,8C2G,8C3C,4QLI,3NKX,7OBC,7OBD,8ANC,8B2K,8BFC,6QZR,7NIX,7OR8,7ORG,7ORH,7ORS,7ORT,4Y3B,6S9K,8ADM,8B4Q,8BJG,8BJN,8BM5,5MHC,5M35,6U2H,4BG6,6QHL,7BI3,7BIQ,7BIW,7BIY,7BJB,7BJF,7BJL,7BJW,7BKH,7NJ9,7NJB,7NK3,7NK5,7NLA,7NLE,7NM1,7NM3,7NM9,7NMH,7NQP,7NR7,7NSV,7NV4,7NVI,7NWS,7NXS,7NXT,7NXW,7NXY,7NY4,7NYE,7NYF,7NYG,7NZ6,7NZG,7NZK,7NZV,7O34,7O3A,7O3F,7O3P,7O3Q,7O3R,7O3S,7O57,7O59,7O5A,7O5C,7O5D,7O5F,7O5G,7O5O,7O5P,7O5S,7O5U,7O5X,7O6F,7O6G,7O6I,7O6J,7O6K,7O6M,7O6O,8P0D,6RJZ,6RK8,6RKI,6RKK,6RKM,6RL3,6RL4,6RL6,6RM5,6RM7,6RWH,6RWI,6RWS,6RWU,6RX2,6S9Q,6SIN,6SIO,6SIP,6SIQ,6SLV,6YO8,8A9G,6F09,6HHP,6HKB,6HKF,6HMU,6QDR,6QDS,6S39,6TL3,7B9M,7B9R,7B9T,7BA3,7BA5,7BA6,7BA7,7BA8,7BA9,7BAA,7BAB,7NFW,7NIZ,7OPW,7OQ7,7OQ8,8AFN,8AI0,8ALR,8ALT,8ALV,8ALW,8AM7,8ANF,8AOY,8APS,8AQ1,8AQC,8AQE,8AQZ,8AR4,8AR5,8ARG,8ARO,8ARQ,8ARR,8ARW,8ARX,8ARY,8ARZ,8AS1,8AT9,8ATP,8AU2,8AUS,8AUY,8AV3,8AV4,8AV7,8AV8,8AWG,8AXE,8AXU,8B39,8BZB,8C3Z,8C42,6EJL,5D2D,3LW1,6HEP,7OB5,7OB8,6GHP,7D8H,7D8P,7D9V,2V7D,7Q16,5EXA,7OBS,7OBT,5EWZ,5XY9,6QDT,7OBK,7OBL,8BI7
6YMO,5NWI,2C63,3EFZ,2BR9,5NWJ,1QJA,6KZG,1QJB,6BCR,3E6Y,7QI1,2WH0,8QTF,8QTT,3AXY,5YQG,6FBB,6RJL,6RJQ,6SLX,6Y3O,6Y3S,6YIA,6YIB,6YIC,6YOW,6YOX,6YOY,6YP2,6YP3,6YP8,6YPL,6YPY,6YQ2,6ZCJ,7B13,3CU8,3O8I,3MHR,3UX0,6Y40,6YR6,8C28,3SMK,3SML,3SMM,3SMN,3SMO,3SP5,3SPR,4FR3,5HF3,5N5R,5N5T,5N5W,6BD1,6NV2,6QHM,6QIU,6QZS,6W0L,6Y3V,7O07,8C2D,8C2Y,1O9D,4DAT,4DAU,4WRQ,7ZMU,7ZMW,6QDU,4HKC,1YWT,6A5S,6FI4,6XWD,6XXC,6XY5,6Y18,6Y1D,6Y3W,6Y58,7BM9,7BMC,7NMA,7NMW,7NMX,7NN2,7NND,7NNE,7NP2,7NPB,7NPG,7OQG,7OQJ,7OQS,7OQU,7OQW,8B2I,8B5P,8C30,2C1N,3UAL,3UBW,5BTV,6FCP,6FI5,8ANB,6R5L,6S3C,6S40,6YLU,7B15,6FBW,6Y44,6HMT,6HN2,6Y3M,6Y3R,8AZE,8BWJ,8BWX,8BWZ,8BX0,8BX3,8BX4,8BXI,8BXM,8BXN,8BXO,8BXQ,8BXS,8BY9,8BYB,8BYC,8BYD,8BYE,8BYG,8BYO,8BYY,8BYZ,8BZ0,8BZ9,8BZA,8BZC,8BZF,8BZW,8C04,8C0K,8C4F,8C4G,3UZD,5ULO,6A5Q,6Y8B,6Y8D,6Y8E,7OBX,7OBY,7QIK,7ZIT,8C2E,4JC3,4JDD,6BCY,6ZVD,6ZVE,5MY9,5MYC,6G8I,7OR3,7OR5,7OR7,4O46,5N75,6F08,6TCH,7OBG,7OBH,8C2F,5MOC,8C40,8C43,6G8J,6G8K,6G8L,7NMZ,8A62,8A65,6ZFD,6ZFG,8BYF,5M36,5M37,6T5H,5MXO,7A6Y,7PWT,7PWZ,3P1N,3P1O,3P1P,3P1Q,3P1R,3P1S,4FL5,4Y32,4Y5I,5LU1,5NAS,5OK9,6RHC,6RP6,6SLW,4IEA,6FAU,6FAV,6FAW,6FBY,8A68,8A6F,8A6H,8ATR,8ATS,8AV0,3IQU,6EF5,6G6X,6G8P,6G8Q,6TJM,3IQJ,3IQV,5LU2,5N10,4FJ3,4IHL,6Y1J,6YR5,6YR7,6ZBT,6ZC9,7AEW,6Y8A,7AOG,7AXN,7AYF,7AZ1,7AZ2,7BDP,7BDT,7BDY,7BFW,7BG3,7BGQ,7BGR,7BGV,7BGW,7NIF,7NIG,7NJ6,7NJ8,7NJA,7NRK,7NRL,7OQ9,7OQA,8C2G,8C3C,4QLI,3NKX,7OBC,7OBD,8ANC,8B2K,8BFC,6QZR,7NIX,7OR8,7ORG,7ORH,7ORS,7ORT,4Y3B,6S9K,8ADM,8B4Q,8BJG,8BJN,8BM5,5MHC,5M35,6U2H,4BG6,6QHL,7BI3,7BIQ,7BIW,7BIY,7BJB,7BJF,7BJL,7BJW,7BKH,7NJ9,7NJB,7NK3,7NK5,7NLA,7NLE,7NM1,7NM3,7NM9,7NMH,7NQP,7NR7,7NSV,7NV4,7NVI,7NWS,7NXS,7NXT,7NXW,7NXY,7NY4,7NYE,7NYF,7NYG,7NZ6,7NZG,7NZK,7NZV,7O34,7O3A,7O3F,7O3P,7O3Q,7O3R,7O3S,7O57,7O59,7O5A,7O5C,7O5D,7O5F,7O5G,7O5O,7O5P,7O5S,7O5U,7O5X,7O6F,7O6G,7O6I,7O6J,7O6K,7O6M,7O6O,8P0D,6RJZ,6RK8,6RKI,6RKK,6RKM,6RL3,6RL4,6RL6,6RM5,6RM7,6RWH,6RWI,6RWS,6RWU,6RX2,6S9Q,6SIN,6SIO,6SIP,6SIQ,6SLV,6YO8,8A9G,6F09,6HHP,6HKB,6HKF,6HMU,6QDR,6QDS,6S39,6TL3,7B9M,7B9R,7B9T,7BA3,7BA5,7BA6,7BA7,7BA8,7BA9,7BAA,7BAB,7NFW,7NIZ,7OPW,7OQ7,7OQ8,8AFN,8AI0,8ALR,8ALT,8ALV,8ALW,8AM7,8ANF,8AOY,8APS,8AQ1,8AQC,8AQE,8AQZ,8AR4,8AR5,8ARG,8ARO,8ARQ,8ARR,8ARW,8ARX,8ARY,8ARZ,8AS1,8AT9,8ATP,8AU2,8AUS,8AUY,8AV3,8AV4,8AV7,8AV8,8AWG,8AXE,8AXU,8B39,8BZB,8C3Z,8C42,6EJL,5D2D,3LW1,6HEP,7OB5,7OB8,6GHP,7D8H,7D8P,7D9V,2V7D,7Q16,5EXA,7OBS,7OBT,5EWZ,5XY9,6QDT,7OBK,7OBL,8BI7
201 changes: 151 additions & 50 deletions Bioinformatics/14_3_3/analysis_of_14_3_3_complexes.py
Original file line number Diff line number Diff line change
Expand Up @@ -21,21 +21,34 @@
}

DATABASE_FILE = "./14_3_3_ComplexPDBIDs.txt" # File with PDB ids
SKIP_IDS = {'7ZMW', '7ZMU', '6TCH', '3MVH', '5OMA', '1G6G', '7MFF', '1IB1', '6Q0K', '6G6X', '8A65','3EFZ'} # PDB IDs have some disqualifying property
SKIP_IDS = {'7ZMW', '7ZMU', '6TCH', '3MVH', '5OMA', '1G6G', '7MFF', '1IB1', '6Q0K', '6G6X', '8A65','3EFZ','7QI1','7Q16'} # PDB IDs have some disqualifying property
ISOFORMS = ['alpha','alpha/beta','beta/alpha','theta','zeta','delta','sigma','eta','epsilon','gamma']
GROUP_BY_MOTIF = False
PHOS_BUFFER = [0, 2]
GROUP_BY_MOTIF = True
PHOS_BUFFER = [2, 2]
DICTIONARYKEYS = []
SmallMoleculeMassIgnoreList = []

ALIGNMODEL = ""

def clamp(n, smallest, largest):
return max(smallest, min(n, largest))

def setup_smallmolecule_clearlist():
with open("smallmol_ignorelist.txt") as f:
for line in f:
dat = line.split()
mw = float(dat[-1])
name = " ".join(dat[:-1])

SmallMoleculeMassIgnoreList.append(mw)
SmallMoleculeMassIgnoreList.append(name)

def write_groups(peptides, filename=""):
with open(f"{filename}_groups.txt", "w") as f:
with open(f"{filename}_groups.tsv", "w") as f:
header = ['MotifSequence']
for key in DICTIONARYKEYS:
header.append(key)
f.write(','.join(header) + '\n')
f.write('\t'.join(header) + '\n')

for pepid in peptides:
peptide = peptides[pepid]
Expand All @@ -47,30 +60,75 @@ def write_groups(peptides, filename=""):
for key in DICTIONARYKEYS:
line.append(str(peptide[key][i]))

f.write(f"{','.join(line)}\n")

# def align_structured(peptides):
# models = []
# for id in (v[0] for v in peptides):
# cmd.fetch(id)
# cmd.select('PHOS', f'{id} and (resn SEP or resn TPO) and visible')
# residues = {'data': []}
# cmd.iterate('PHOS and n. CA', 'data.append([resi, chain])', space=residues)
# unique_chains = set()
# for res in residues['data']:
# if res[1] not in unique_chains:
# unique_chains.add(res[1])
# cmd.select('probe', f'{id} and chain {res[1]} and resi {res[0]}')
# cmd.do('select probe, probe extend 7')
# cmd.select('monomer', f'{id} within 7 of probe')
# cmd.do('select monomer, bymolecule monomer')
# mdl = f"{id}_{len(models) + 1}"
# cmd.extract(mdl, 'monomer')
# models.append(mdl)
# cmd.delete(id)
# cmd.do('remove solvent')
# for mdl in models:
# cmd.do(f'align {mdl}, {models[4]}')
f.write(f"{'\t'.join(line)}\n")

def align_structured(groups, parentgroup = ""):
global ALIGNMODEL

struc_selection = f'sel_{parentgroup}_1433'
pep_selection = f'sel_{parentgroup}_pep'
cmd.select(struc_selection, 'None')
cmd.select(pep_selection, 'None')

models = []
for group_seq,group in groups.items():
group_mdls = []
for i in range(len(group['PDB'])):
pdb_id = group['PDB'][i]
chain = group['CHAIN'][i]
resi = group['PHOSRESI'][i]
contains_smallmol = group['SMALLMOL'][i] != ""
print(pdb_id)
cmd.fetch(pdb_id)
cmd.do('remove solvent')
cmd.select('PROBE', f'{pdb_id} and chain {chain} and resi {resi}')
cmd.do('select PROBE, PROBE extend 7')

selection_radius = 2
radius_stepsize = 1

# Try to increase selection radius until two chains are selected
while True:
cmd.select('MONOMER', f'{pdb_id} within {selection_radius} of PROBE')
stored = {'chains':[]}
cmd.iterate('MONOMER','chains.append(chain)',space=stored)

print(f"{selection_radius} {len(set(stored['chains']))}")
if len(set(stored['chains'])) == 2: # Two chains selected, exit loop
break
if len(set(stored['chains'])) > 2: # More than two chains selected, go back, reduce radius increase, try again
selection_radius -= radius_stepsize
radius_stepsize /= 2

selection_radius += radius_stepsize

if radius_stepsize < 0.05 or selection_radius > 10: break # Give up...

# Complete monomer selection
cmd.do('select MONOMER, bymolecule MONOMER')
mdl = f"{pdb_id}_{len([n for n in models if pdb_id in n]) + 1}_{parentgroup}" # Assign name to specific monomer
if contains_smallmol: mdl += '_sm'
cmd.extract(mdl, 'MONOMER')
models.append(mdl)
group_mdls.append(mdl)

cmd.select(f'{struc_selection}',f'{struc_selection} ({mdl} and not chain {chain})')
cmd.select(f'{pep_selection}',f'{pep_selection} ({mdl} and chain {chain})')

if len(group_mdls) > 1: cmd.disable(mdl) # Only show one of each peptide model by default

cmd.delete(pdb_id)

cmd.group(f'{group_seq}_{parentgroup}',' '.join(group_mdls)) # Group peptide groups

cmd.group(parentgroup,' '.join([f'{g}_{parentgroup}' for g in list(groups.keys())])) # Group all peptide group in cis or trans

if ALIGNMODEL == "": ALIGNMODEL = models[1] # To align both cis and trans group to the same model

for mdl in models:
cmd.do(f'align {mdl}, {ALIGNMODEL}')

cmd.center()

def group_by_peptide(peptides):
output = {}
Expand All @@ -79,8 +137,6 @@ def group_by_peptide(peptides):
logged = False
pepseq = peptide['SEQUENCE_PEPTIDE_RAW']

print(pepseq)

if GROUP_BY_MOTIF:
start = clamp(peptide['PHOSRESI_LOCAL'] - PHOS_BUFFER[0], 0, len(pepseq))
end = clamp(peptide['PHOSRESI_LOCAL'] + PHOS_BUFFER[1] + 1, 0, len(pepseq))
Expand Down Expand Up @@ -118,7 +174,9 @@ def process_pdb_id(pdb_id, chains_and_phosres):
ENTRY['PDB'] = pdb_id
ENTRY['CHAIN'] = CHAIN
ENTRY['PHOSRESI'] = PHOSRESI
ENTRY['ISOFORM'] = get_isoform_from_cif(pdb_id)
ENTRY['ISOFORM'],ENTRY['SMALLMOL'] = get_isoform_and_substance_info_from_cif(pdb_id)
ENTRY['MESSAGE'] = ""
ENTRY['REMOVE'] = True

cmd.select('PHOSRES','chain ' + CHAIN + " and resi " + str(PHOSRESI)) #select SEP or TPO
cmd.select('PEPTIDE','bychain PHOSRES') #Complete chain selection
Expand Down Expand Up @@ -180,31 +238,42 @@ def process_pdb_id(pdb_id, chains_and_phosres):

ENTRY['PHOS_RES_TYPE'] = PHOS_RES_TYPE
ENTRY['SEQUENCE_PEPTIDE_ANNOTATED'] = sequence_annotated
ENTRY['SEQUENCE_PEPTIDE_RAW'] = ''.join([ONE_LETTER[aa[1]] for aa in sequencedata]) #data sequence_annotated.replace('[TPO]','T').replace('[SEP]','S')''
ENTRY['SEQUENCE_PEPTIDE_RAW'] = ''.join([ONE_LETTER[aa[1]] for aa in sequencedata])
ENTRY['SEQUENCE_MOTIF'] = motifsequence
ENTRY['PHOSRESI_LOCAL'] = LOCAL_PHOSRESIDX

if PHOS_RES_TYPE == "": continue # No phosphorylated residue resolved in chain, continue to next chain
if False in occupancy: continue # Peptide must contain PHOSRES + 2 or more residues
if PHOS_RES_TYPE == "": # No phosphorylated residue resolved in chain
ENTRY['MESSAGE'] = "No phosphorylated residue found"

elif len(ENTRY['SEQUENCE_PEPTIDE_RAW']) < ENTRY['PHOSRESI_LOCAL'] + 1 + 2: # Peptide too short for analysis
ENTRY['MESSAGE'] = "Peptide did not extend +2 residues from phosres"

elif False in occupancy: # Peptide must contain PHOSRES + 2 or more residues
ENTRY['MESSAGE'] = "Phosres +2 not resolved"

# Get omega angle of +1 to +2 peptide bond
cmd.select('atom1','chain ' + CHAIN + " and (resi " + str(RESI_MOTIF[0]) + " and n. CA)")
cmd.select('atom2','chain ' + CHAIN + " and (resi " + str(RESI_MOTIF[0]) + " and n. C)")
cmd.select('atom3','chain ' + CHAIN + " and (resi " + str(RESI_MOTIF[1]) + " and n. N)")
cmd.select('atom4','chain ' + CHAIN + " and (resi " + str(RESI_MOTIF[1]) + " and n. CA)")
omega = cmd.get_dihedral('first atom1','first atom2','first atom3','first atom4')
else: #Phosresi and occupancy necessary to calculate omega angle
# Get omega angle of +1 to +2 peptide bond
cmd.select('atom1','chain ' + CHAIN + " and (resi " + str(RESI_MOTIF[0]) + " and n. CA)")
cmd.select('atom2','chain ' + CHAIN + " and (resi " + str(RESI_MOTIF[0]) + " and n. C)")
cmd.select('atom3','chain ' + CHAIN + " and (resi " + str(RESI_MOTIF[1]) + " and n. N)")
cmd.select('atom4','chain ' + CHAIN + " and (resi " + str(RESI_MOTIF[1]) + " and n. CA)")
omega = cmd.get_dihedral('first atom1','first atom2','first atom3','first atom4')

if omega < -90: omega += 360 # Fix +-180 degree switch, without messing up cis angles
if omega < -90: omega += 360 # Fix +-180 degree switch, without messing up cis angles

ENTRY['OMEGA'] = omega
ENTRY['OMEGA'] = omega
ENTRY['REMOVE'] = False

ENTRIES.append(ENTRY)

return ENTRIES

def get_isoform_from_cif(pdb_id):
def get_isoform_and_substance_info_from_cif(pdb_id):
isoform = ""
small_mol_name = ""
small_mol_mw = 0

with open(ID + ".cif") as f:
with open(pdb_id + ".cif") as f:
lines = f.readlines()
for line in lines:
if "14-3-3" in line:
Expand All @@ -218,12 +287,36 @@ def get_isoform_from_cif(pdb_id):
isoform = "unknown"
else: isoform = isoform[:-1]

return isoform
# Detect substances
_detectsm = False
for line in lines:
if "_entity.details" in line: _detectsm = True
elif _detectsm and line[0] == '#': break
elif _detectsm:
molecule = re.findall("(?:\'.*?\'|\S)+", line)
if len(molecule) < 5: continue
if molecule[1] == 'non-polymer' and molecule[2] == 'syn':

try:
molname = molecule[3].strip('\'')
mw_sm = float(molecule[4])
if mw_sm < 90 or mw_sm in SmallMoleculeMassIgnoreList or molname in SmallMoleculeMassIgnoreList: continue # Substance not banned
elif mw_sm > small_mol_mw: # Return the largest small molecule found
small_mol_name = molname
small_mol_mw = mw_sm
except:
print(molecule)

return isoform, small_mol_name

def main():
global DICTIONARYKEYS
output = {}
peptides = []
incompatiblecomplexes = []

setup_smallmolecule_clearlist()

with open(DATABASE_FILE) as f:
filedata = f.readlines()[0]
pdb_ids = filedata.split(',')
Expand All @@ -244,9 +337,11 @@ def main():

BOUND_MOTIFS = process_pdb_id(pdb_id, chains_and_phosres['data'])

if len(BOUND_MOTIFS) > 0: peptides.extend(BOUND_MOTIFS)
if len(BOUND_MOTIFS) > 0:
peptides.extend([pep for pep in BOUND_MOTIFS if not pep['REMOVE']])
incompatiblecomplexes.extend([pep for pep in BOUND_MOTIFS if pep['REMOVE']])

#if len(peptides) > 40: break
#if len(peptides) > 60: break

DICTIONARYKEYS = list(peptides[0].keys())

Expand All @@ -259,6 +354,10 @@ def main():
write_groups(cis_groups,'cis')
write_groups(trans_groups,'trans')

cmd.reinitialize()
align_structured(cis_groups,'cis')
align_structured(trans_groups,'trans')

print()
print("14-3-3 ANALYSIS SCRIPT COMPLETED")
print(f"TOTAL CIS PEPTIDES COUNTED: {len(cis_peptides)}")
Expand All @@ -268,6 +367,8 @@ def main():
print()
if GROUP_BY_MOTIF: print(f"PEPTIDE GROUPING RANGE: PHOSRES -{PHOS_BUFFER[0]} to +{PHOS_BUFFER[1]}")

main()

with open('./incomp_complexes.txt','w') as f:
for pep in incompatiblecomplexes:
f.write(f"{pep['PDB']} {pep['CHAIN']} {pep['MESSAGE']}\n")

main()
Loading

0 comments on commit ef259f6

Please sign in to comment.