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)