File size: 2,666 Bytes
fae1173 | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 | import json
import pandas as pd
import os
AAs = set('ACDEFGHIKLMNPQRSTVWY')
seqs_abs = {
'cr6261_vh': 'EVQLVESGAEVKKPGSSVKVSCKASGGPFRSYAISWVRQAPGQGPEWMGGIIPIFGTTKYAPKFQGRVTITADDFAGTVYMELSSLRSEDTAMYYCAKHMGYQVRETMDVWGKGTTVTVSS',
'cr9114_vh': 'QVQLVQSGAEVKKPGSSVKVSCKSSGGTSNNYAISWVRQAPGQGLDWMGGISPIFGSTAYAQKFQGRVTISADIFSNTAYMELNSLTSEDTAVYFCARHGNYYYYSGMDVWGQGTTVTVSS',
'g6_vh': 'EVQLVESGGGLVQPGGSLRLSCAASGFTISDYWIHWVRQAPGKGLEWVAGITPAGGYTYYADSVKGRFTISADTSKNTAYLQMNSLRAEDTAVYYCARFVFFLPYAMDYWGQGTLVTV',
'g6_vl': 'DIQMTQSPSSLSASVGDRVTITCRASQDVSTAVAWYQQKPGKAPKLLIYSASFLYSGVPSRFSGSGSGTDFTLTISSLQPEDFATYYCQQSYTTPPTFGQGTKVEIK',
'beb_vh': 'QITLKESGPTLVKPTQTLTLTCTFSGFSLSISGVGVGWLRQPPGKALEWLALIYWDDDKRYSPSLKSRLTISKDTSKNQVVLKMTNIDPVDTATYYCAHHSISTIFDHWGQGTLVTVSS',
'beb_vl' : 'QSALTQPASVSGSPGQSITISCTATSSDVGDYNYVSWYQQHPGKAPKLMIFEVSDRPSGISNRFSGSKSGNTASLTISGLQAEDEADYYCSSYTTSSAVFGGGTKLTVL',
'sa58_vh': 'QVQLAQSGSELRKPGASVKVSCDTSGHSFTSNAIHWVRQAPGQGLEWMGWINTDTGTPTYAQGFTGRFVFSLDTSARTAYLQISSLKADDTAVFYCARERDYSDYFFDYWGQGTLVTVSS',
'sa58_vl': 'EVVMTQSPASLSVSPGERATLSCRARASLGISTDLAWYQQRPGQAPRLLIYGASTRATGIPARFSGSGSGTEFTLTISSLQSEDSAVYYCQQYSNWPLTFGGGTKVEIK',
}
def parse_abysis(seq, seq_name):
fname = f'data/abysis/abysis_counts_{seq_name}.json'
with open(fname) as f:
json_data = json.load(f)
data = []
for idx, freq_table in enumerate(json_data['frequencies']):
wt = seq[idx]
total = freq_table['total']
for entry in freq_table['counts']:
if entry['aa'] == seq[idx]:
wt_frac = entry['c'] / total
aa_to_freq, seen = {}, set()
for entry in freq_table['counts']:
mt = entry['aa']
seen.add(mt)
counts = entry['c']
frac = entry['c'] / total
ratio = frac / wt_frac
data.append([ idx + 1, wt, mt, counts, frac, ratio ])
for mt in AAs - seen:
data.append([ idx + 1, wt, mt, 0, 0., 0. ])
df = pd.DataFrame(data, columns=[
'pos',
'wt',
'mt',
'counts',
'fraction',
'likelihood_ratio',
])
if any(prefix in seq_name for prefix in ['cr6261', 'cr9114', 'g6']):
subdirectory = seq_name.split('_')[0]
else:
subdirectory = ''
output_dir = os.path.join('output', 'ab_mutagenesis_expts', subdirectory)
os.makedirs(output_dir, exist_ok=True)
output_path = os.path.join(output_dir, f'abysis_counts_{seq_name}.txt')
df.to_csv(output_path, sep='\t')
if __name__ == '__main__':
for seq_name in seqs_abs:
seq = seqs_abs[seq_name]
parse_abysis(seq, seq_name) |