Repository: oxpig/ANARCI Branch: master Commit: 79f6c575056d Files: 25 Total size: 465.7 KB Directory structure: gitextract_q5oqd4l8/ ├── .gitignore ├── Example_scripts_and_sequences/ │ ├── 12e8.fasta │ ├── ImmunoPDB.py │ ├── anarci_API_example.py │ ├── antibody_sequences.fasta │ ├── lysozyme.fasta │ └── run_numbering_benchmark.sh ├── INSTALL ├── LICENCE ├── LICENCE_MUSCLE ├── README.md ├── bin/ │ ├── ANARCI │ ├── muscle │ └── muscle_macOS ├── build_pipeline/ │ ├── FastaIO.py │ ├── FormatAlignments.py │ ├── RUN_pipeline.sh │ ├── RipIMGT.py │ ├── __init__.py │ └── test.csv_H.csv ├── lib/ │ └── python/ │ └── anarci/ │ ├── __init__.py │ ├── anarci.py │ └── schemes.py ├── requirements.txt └── setup.py ================================================ FILE CONTENTS ================================================ ================================================ FILE: .gitignore ================================================ build_pipeline/IMGT_sequence_files build_pipeline/muscle_alignments build_pipeline/curated_alignments build_pipeline/HMMs build_pipeline/__pycache__ build/ ================================================ FILE: Example_scripts_and_sequences/12e8.fasta ================================================ >12E8:H|PDBID|CHAIN|SEQUENCE EVQLQQSGAEVVRSGASVKLSCTASGFNIKDYYIHWVKQRPEKGLEWIGWIDPEIGDTEYVPKFQGKATMTADTSSNTAY LQLSSLTSEDTAVYYCNAGHDYDRGRFPYWGQGTLVTVSAAKTTPPSVYPLAPGSAAQTNSMVTLGCLVKGYFPEPVTVT WNSGSLSSGVHTFPAVLQSDLYTLSSSVTVPSSTWPSETVTCNVAHPASSTKVDKKIVPRD >12E8:L|PDBID|CHAIN|SEQUENCE DIVMTQSQKFMSTSVGDRVSITCKASQNVGTAVAWYQQKPGQSPKLMIYSASNRYTGVPDRFTGSGSGTDFTLTISNMQS EDLADYFCQQYSSYPLTFGAGTKLELKRADAAPTVSIFPPSSEQLTSGGASVVCFLNNFYPKDINVKWKIDGSERQNGVL NSATDQDSKDSTYSMSSTLTLTKDEYERHNSYTCEATHKTSTSPIVKSFNRNEC >12E8:M|PDBID|CHAIN|SEQUENCE DIVMTQSQKFMSTSVGDRVSITCKASQNVGTAVAWYQQKPGQSPKLMIYSASNRYTGVPDRFTGSGSGTDFTLTISNMQS EDLADYFCQQYSSYPLTFGAGTKLELKRADAAPTVSIFPPSSEQLTSGGASVVCFLNNFYPKDINVKWKIDGSERQNGVL NSATDQDSKDSTYSMSSTLTLTKDEYERHNSYTCEATHKTSTSPIVKSFNRNEC >12E8:P|PDBID|CHAIN|SEQUENCE EVQLQQSGAEVVRSGASVKLSCTASGFNIKDYYIHWVKQRPEKGLEWIGWIDPEIGDTEYVPKFQGKATMTADTSSNTAY LQLSSLTSEDTAVYYCNAGHDYDRGRFPYWGQGTLVTVSAAKTTPPSVYPLAPGSAAQTNSMVTLGCLVKGYFPEPVTVT WNSGSLSSGVHTFPAVLQSDLYTLSSSVTVPSSTWPSETVTCNVAHPASSTKVDKKIVPRD ================================================ FILE: Example_scripts_and_sequences/ImmunoPDB.py ================================================ #! /usr/bin/env python # ANARCI - Antibody Numbering and Antigen Receptor ClassIfication # Copyright (C) 2016 Oxford Protein Informatics Group (OPIG) # # This program is free software: you can redistribute it and/or modify # it under the terms of the BSD 3-Clause License. # # You should have received a copy of the BSD 3-Clause Licence # along with this program. If not, see . description=''' ANARCI - ImmunoPDB \\\ // Antibody Numbering and Antigen Receptor ClassIfication \\\ // || (c) Oxford Protein Informatics Group (OPIG). 2015-16 || Example script to number Antibody and TCR PDB structures. ANARCI must be installed and in the path opig.stats.ox.ac.uk/webapps/anarci Requirements: Biopython (version >= 1.66) Muscle This script extends the BioPython PDBParser and Structure classes so that a numbering scheme can be applied to the variable domain of an antigen receptor chain. o Where available the Seqres record is used as the full sequence. Missing residues are recognised by comparing this to the residues with coordinates. o *Only* variable domains are numbered consistently in the chosen scheme. o Residues before the domain are numbered '0' with reverse alphabetical insertions if there are less than 28 (all 0 otherwise - this will break some PDB parsers...) o Residues after the variable domain are numbered sequentially from 1001. o By default when more than one variable domain is found on a single chain (e.g. single chain Fv, diabody...) the numbering will be with respect to the first domain identified. o CDR recognition is performed and regions are annotated in the xtra dictionary attributes of residue objects. o Pairing is performed using the distance between the interface cysteine positions (imgt 104). Basic useage Renumber antibody chains with imgt numbering scheme python ImmunoPDB.py -i infile.pdb -o outfile.pdb -s imgt Renumber tcr chains with imgt numbering scheme python ImmunoPDB.py -i infile.pdb -o outfile.pdb -s imgt --receptor tr ''' epilogue=''' Author: James Dunbar (dunbar@stats.ox.ac.uk) Charlotte Deane (deane@stats.ox.ac.uk) Copyright (C) 2016 Oxford Protein Informatics Group (OPIG) Freely distributed under the BSD 3-Clause Licence. ''' # Antigen receptor numbering and classification. from anarci import anarci, scheme_names, scheme_short_to_long # Biopython - you must use the dev version for this to work. Got to: https://github.com/biopython/biopython # Must be version 1.84 or greater. from Bio.PDB import * from Bio.File import as_handle # from Bio.Alphabet import generic_protein from Bio.Seq import Seq from Bio.SeqRecord import SeqRecord from Bio.SCOP.Raf import protein_letters_3to1_extended as protein_letters_3to1 from Bio.SeqUtils import seq1 # Python import subprocess import os import collections # Globals tebahpla = 'ZYXWVUTSRQPONMLKJIHGFEDCBA ' cysh = {'kabat':92,'chothia':92,'martin':92,'imgt':104,'aho':106,'wolfguy':330 } # The position of the interface cysteine in each cysl = {'kabat':88,'chothia':88,'martin':88,'imgt':104,'aho':106,'wolfguy':734 } # scheme. inter_cys = { 'H':cysh, 'B':cysh, 'D':cysh, 'L':cysl, 'K':cysl, 'A':cysl, 'G':cysl } # Class to apply numbering to a structure object. This can be used in conjunction with the Ig/Tcr parsers or applied to an existing # object. This class annotates in the .xtra dictionary of chains and residues and *does not* modify the residue identifiers. class PDBNumber(object): ''' This will annotate residues in the structure with numbering schemes The original structure object remains unchanged. Annotations are listed in the residue .xtra dictionary. Pairings are listed in the Chains .xtra dictionary. ''' def __init__(self,scheme,allowed_domains, region_definition=None, warnings=False): self.scheme=scheme_short_to_long[scheme.lower()] self.allowed_domains = allowed_domains self.region_definition = region_definition self.warnings = warnings def numberChain(self, chain, sequence=''): ''' Number a Bio.PDB chain with a Ig or Tcr numbering scheme. ''' check_continuity = False structureSequence, index2ResId = extract_sequence( chain ) if not sequence: # No seqres provided sequence = structureSequence seqI2strucI = get_alignment_dict( sequence, sequence ) if self.warnings: check_continuity = True elif which( 'muscle' ) or structureSequence in sequence: # Muscle found or it is an easy alignment chain.xtra['structure_ali'], chain.xtra['seqres_ali'] = pairwise_muscle( structureSequence , sequence ) fix_deletions( chain ) # Fix the position of a missing residue if a degenerate alignment seqI2strucI = get_alignment_dict(chain.xtra['seqres_ali'], chain.xtra['structure_ali']) else: # Missing residues are suspected. raise Warning('Muscle was not found and there are suspected missing residues. Numbering could be incorrect') sequence = structureSequence seqI2strucI = get_alignment_dict( sequence, sequence ) # Reset if needed if 'anarci_details' in chain.xtra: chain.xtra['domains'] = [] chain.xtra['anarci_details'] = [] di = 0 # Domain index (when there are multiple variable domains on the same chain) for numbering2Index, domainType, details in self.numberSequence(chain.id, sequence): # Iterate over the recognised domains. if domainType in self.allowed_domains: chain.xtra['domains'] = chain.xtra.get('domains', [] ) + [domainType] # Append to the domains list. chain.xtra['anarci_details'] = chain.xtra.get('anarci_details', [] ) + [details] # Append to the germlines list. for numberedId, index in numbering2Index: if index not in seqI2strucI: continue # Missing residue res = chain[ index2ResId[ seqI2strucI[index] ] ] res.xtra[self.scheme] = numberedId # Store the annotated numbering if 'pdb' not in res.xtra: res.xtra['pdb'] = res.id[1:] # Store the original numbering res.xtra['domain_type'] = domainType # Store the domain type res.xtra['domain_index'] = di # Store which domain this residue is in. # Second iteration to annotate non variable domains. if 1 < details['query_start'] < 28: # If possible, annotate pre domain with 0C 0B 0A as pre insertions. insertions = tebahpla[ 27 - details['query_start']: ] else: insertions = ' '*(details['query_start']+1) # So that insertion code will always be at least ' ' # All pre, ri, ii = True, 0, 0 for residue in chain: if 'pdb' not in residue.xtra: residue.xtra['pdb'] = residue.id[1:] if residue.xtra.get('domain_index','') == di: if pre: pre, ri, ii = False, 1001, 0 continue residue.xtra[self.scheme+'%d'%di] = (ri, insertions[ii]) if pre: # Update the insertion code ii += 1 else: # Update the residue index ri += 1 self.annotateChainRegions( chain, self.scheme, self.region_definition, domain_index=di ) di +=1 if di and check_continuity: continuous, at = analyse_continuity( chain ) if not continuous: print('Warning: Numbering may be incorrect as a missing residue was detected in chain %s (around residue %d%s). Provide the seqres record to overcome this problem.'%(chain.id, chain.child_list[at].id[1], chain.child_list[at].id[2] )) chain.xtra['scheme'] = self.scheme def annotateChainRegions(self, chain, scheme, definition=None, domain_index=0): ''' Annotate chain with regions. The loaded numbering scheme is used ''' if definition is None or scheme=='pdb': return domain_type = chain.xtra['domains'][domain_index].replace('K','L') numbering = [ (r.xtra[scheme], None) if r.xtra.get('domain_index',None) == domain_index else ((0,' '), None) for r in chain ] try: regions = annotate_regions(numbering, domain_type, numbering_scheme=scheme,definition=definition) except AssertionError: # Unimplemented return for i in range(len(numbering)): if not chain.child_list[i].xtra.get('region'): # Update the region. chain.child_list[i].xtra['region'] = regions[i][2] def numberSequence(self,sequenceName, sequence): ''' Number a sequence and yield the annotations for each domain identified (n to c) ''' if len(sequence) > 70: results = anarci( [(sequenceName, sequence)], scheme=self.scheme, assign_germline=True, allow=self.allowed_domains ) else: return numbered, details = results[0][0], results[1][0] if numbered is None: numbered = [] for i in range( len( numbered ) ): # Iterate over the identified domains (e.g. for an scfv) numbering = [ (n, a) for n, a in numbered[i][0] if a != '-' ] # Remove gaps if made (imgt scheme) yield [ (numbering[ri][0], ri+numbered[i][1]) for ri in range( len( numbering ) ) ], details[i]['chain_type'], details[i] # Extension of the Biopython PDBParser. class AntigenReceptorPDBParser(PDBParser): ''' A generic class to parse antigen receptor structures. ''' allowed_schemes = scheme_names allowed_domains = set(['H','K','L'] + ['A','B','G','D']) allowed_pairs = [ ('H','K'),('H','L'),('B','A'),('D','G') ] annotates = 'antigen receptor' def __init__( self, PERMISSIVE=True, get_header=False, structure_builder=None, QUIET=False, scheme='imgt', region_definition='imgt', warnings=False): ''' ''' super( AntigenReceptorPDBParser, self ).__init__(PERMISSIVE=PERMISSIVE, get_header=get_header, structure_builder=structure_builder, QUIET=QUIET) assert scheme in self.allowed_schemes, 'Scheme unknown' self.scheme=scheme_short_to_long[scheme.lower()] self.region_definition = region_definition self.warnings = warnings def get_structure(self, id, file): """Return the structure. Variable domains are annotated with the chosen numbering scheme. o Receptor chains are numbered with the desired numbering scheme and paired according to the separation of their interface cysteine (or whatever is at position 104 in imgt). o Only 'opposite' type domains (VH-VK, VH-VL, VB-VA, VD-VG) are paired. VL-VL dimers will not be annotated o Single chain fvs are also considered. o The xtra['pairing'] list of a chain tells you how the variable domains it contains are paired. e.g. For a normal Fv with chains H and L. structure[0]['H'].xtra['pairing'] --> [ (, 0) ] structure[0]['L'].xtra['pairing'] --> [ (, 0) ] chain obj, domain index of paired e.g. For a scfv with H and L domains on the same chain, A structure[0]['A'].xtra['pairing'] --> [ (, 1) , (, 0) ] o Numbering will be returned with respect to the first identified variable domain. Use the domain_index argument in the structure object's 'switch_numbering_scheme' method to change to number with respect to the second etc for an scfv. o Residues before the variable domain are all given the residue number 0. If there are less than 27 residues before the start of the variable domain they will be annotated with insertion codes in reverse alphabetical order e.g. 0D 0C 0B 0A 0 | 1 2 3 4 o Residues after the variable domain are numbered sequentially from 1001. No guarantee is given of structural equivalence in the constant domain (yet...) Arguments: - id - string, the id that will be used for the structure - file - name of the PDB file OR an open filehandle """ # Ensure the file is open file handle with as_handle( file ) as fin: # Read the structure using biopyton structure = super( AntigenReceptorPDBParser, self ).get_structure(id, fin) # Rewind to the start of the file fin.seek(0) # Read the seqres entries seqres = self.read_seqres( fin ) stringseqres = dict( (e, str(seqres[e].seq) ) for e in seqres ) self.number_receptor_chains(structure, sequences=stringseqres) # Post process for chain in seqres: structure[0][chain].xtra['seqresobj'] = seqres[chain] # Associtate with the chain object - includes the original lines self.find_pairs(structure) # Pair chains structure.switch_numbering_scheme(self.scheme) # Return the structure with the requested numbering scheme. return structure def read_seqres(self, file): ''' Read the seqres entries of a structure if available ''' try: with as_handle(file) as f: seqres = dict([ (a.id, a) for a in PdbSeqresIterator(f) ]) except: seqres = {} return seqres def number_receptor_chains(self, structure, sequences={}): ''' Apply the numbering to each PDB chain in the file ''' pdbN = PDBNumber(self.scheme, self.allowed_domains, region_definition=self.region_definition, warnings=self.warnings) for model in structure: for chain in model: pdbN.numberChain(chain, sequence=sequences.get(chain.id, '') ) chain.xtra['seqres'] = sequences.get(chain.id, '') def find_pairs(self,structure): ''' Annotate the pairs of domains in the structure using the distance between the interface cysteine residue CA atoms. ''' for model in structure: # Bin the domains of the structure by type model.xtra['domains'] = dict( (d, []) for d in self.allowed_domains ) model.xtra['firstpair']=None # Used for reference if outputting only the first receptor identified. for chain in model: for di in range( len( chain.xtra.get('domains',[]) ) ): model.xtra['domains'][ chain.xtra['domains'][di] ].append( (chain, di) ) if not model.xtra['firstpair']: model.xtra['firstpair'] = [(chain, di)] # For single domain chain.xtra['pairing'] = [None]*len( chain.xtra.get('domains',[]) ) for pA, pB in self.allowed_pairs: for chainA, diA in model.xtra['domains'][pA]: aA = chainA.interface_cys_CA( self.scheme, diA ) if aA is None: continue for chainB, diB in model.xtra['domains'][pB]: aB = chainB.interface_cys_CA( self.scheme, diB ) if aB is None: continue if aA - aB < 25: chainA.xtra['pairing'][diA] = (chainB, diB) chainB.xtra['pairing'][diB] = (chainA, diA) if len( model.xtra['firstpair']) < 2: model.xtra['firstpair'] = sorted( [(chainA, diA) ,(chainB, diB)] ) class TcrPDBParser(AntigenReceptorPDBParser): allowed_schemes = ['imgt','i','aho','a'] allowed_domains = set(['A','B','G','D']) allowed_pairs = [ ('B','A'),('D','G') ] annotates = 'tcr' class AntibodyPDBParser(AntigenReceptorPDBParser): allowed_domains = set(['H','K','L']) allowed_pairs = [ ('H','K'),('H','L')] annotates = 'antibody' # Only accept variable regions of a chain class SelectFv(Select): def accept_residue(self, residue): if 'anarci_details' in residue.parent.xtra: if residue.id[1] > 0 and residue.id[1] < 1000: return 1 # Allows non-receptor chains but restricts scfvs to the variable part. class SelectFvScFv(Select): def accept_residue(self, residue): if len(residue.parent.xtra.get('domains',[])) > 1: if residue.id[1] > 0 and residue.id[1] < 1000: return 1 return 0 return 1 # Extend the Biopython classes with methods to handle numbering. def Entity_switch_numbering_scheme(self, scheme, domain_index=0): # Structure, Model ''' ''' for child in self: child.switch_numbering_scheme(scheme, domain_index=domain_index) def Chain_switch_numbering_scheme(self, scheme, domain_index=0): ''' Change the numbering scheme used in the identifiers of the residues in the chain. By default the numbering will be with respect to the first (0th) variable domain identified. If a single chain fv is identified (i.e. two variable domains on the same chain) one can switch the numbering to be with respect to the second domain using the domain index argument (0 - first domain, 1 - second domain etc). Residues before the numbered domain are numbered 0. Insertion codes are used in reverse alphabetical order iff there are 27 or less n-terminal 'insertions' (all 0 otherwise). Residues after the domain are numbered sequentially from 1001. ''' if scheme not in [ self.xtra['scheme'], 'pdb' ]: PDBNumber(scheme, self.xtra.get('domains', ['H','K','L','A','B','G','D'])).numberChain( self, sequence=self.xtra.get('seqres','' ) ) if 'anarci_details' in self.xtra: # Only bother to recurse into numbered chains if self.xtra.get( 'loaded','' ) == scheme+str(domain_index): return # Only switch if different. for child in self: child.switch_numbering_scheme(scheme, domain_index=domain_index) self.child_dict = {} # Reset the child dict on a separate loop to prevent conflicts for child in self: self.child_dict[child.id]=child self.xtra['loaded'] = scheme+str(domain_index) def Residue_switch_numbering_scheme(self, scheme, domain_index=0): ''' ''' # Replace the residue with the numbering scheme with respect to the domain index. The numbering of its own domain is xtra[scheme] self.id = ( self.id[0], ) + self.xtra.get(scheme+str(domain_index), self.xtra.get( scheme, self.xtra['pdb'] ) ) def Chain_interface_cys_CA(self, scheme, domain_index=0 ): ''' ''' self.switch_numbering_scheme( scheme, domain_index ) try: return self[ (' ', inter_cys[self.xtra['domains'][domain_index]][scheme], ' ') ]['CA'] except KeyError: return def Entity_save(self,filename, select=Select(), write_end=True): ''' ''' pdbio=PDBIO() pdbio.set_structure(self) pdbio.save(filename, select=select, write_end=write_end) Entity.Entity.switch_numbering_scheme = Entity_switch_numbering_scheme Chain.Chain.switch_numbering_scheme = Chain_switch_numbering_scheme Chain.Chain.interface_cys_CA = Chain_interface_cys_CA Residue.Residue.switch_numbering_scheme = Residue_switch_numbering_scheme Entity.Entity.save = Entity_save def compile_remarks( chain, rtype, only_loaded=False ): ''' Compile a remark report that is parsable ''' r=[] # If only loaded only consider the numbered variable domain on the chain (usually there is only 1) if only_loaded: r.append( 'CHAIN %s N_%s-V-DOMAINS %d'%( chain.id, rtype , min(1,len(chain.xtra.get('domains',[])) )) ) else: r.append( 'CHAIN %s N_%s-V-DOMAINS %d'%( chain.id, rtype , len(chain.xtra.get('domains',[])) ) ) # Create remark records about the chain types, pairings and germline assignments for i in range( len( chain.xtra.get('domains',[]) ) ): if only_loaded and i != int(chain.xtra.get('loaded','9')[-1]): continue deets = chain.xtra['anarci_details'][i] di = 'CHAIN %s DOMAIN %d '%( chain.id, i ) r.append(di+'TYPE V%s'%chain.xtra['domains'][i]) if chain.xtra['pairing'][i] is not None: r.append(di+'PAIREDWITH CHAIN %s DOMAIN %d'%( chain.xtra['pairing'][i][0].id, chain.xtra['pairing'][i][1] )) r.append(di+'V_GENE_SPECIES %s'%deets['germlines']['v_gene'][0][0]) r.append(di+'V_GENE_GERMLINE %s'%deets['germlines']['v_gene'][0][1]) r.append(di+'V_GENE_GERMLINE_IDENTITY %.2f'%deets['germlines']['v_gene'][1]) r.append(di+'J_GENE_SPECIES %s'%deets['germlines']['j_gene'][0][0]) r.append(di+'J_GENE_GERMLINE %s'%deets['germlines']['j_gene'][0][1]) r.append(di+'J_GENE_GERMLINE_IDENTITY %.2f'%deets['germlines']['j_gene'][1]) return r def compile_seqres( chain ): ''' ''' if 'seqresobj' in chain.xtra: return ''.join( [ l%chain.id for l in chain.xtra['seqresobj'].lines ] ).strip() return '' def rename_chains( structure ): ''' Rename the first paired receptor chains with (H, L), (B, A). If single domain then only that is renamed. Deletes all other chains from each model. ''' for model in structure: # Find which chains are the first identified keep = [c.id for c,di in model.xtra.get('firstpair',[]) ] remove = [ c.id for c in model if c.id not in keep ] # Delete unwanted chains for ID in remove: model.detach_child(ID) # Rename wanted chains (detach then add with the new ID) lastchain='' for chain, di in model.xtra.get('firstpair',[]): # Make sure the chain identifier is wrt the first variable domain in the chain. Handles scfvs if lastchain == chain.id: continue # Assign the chain identidier with the chain type (Both Kappa and Lambda labelled 'L') model.detach_child(chain.id) chain.id = chain.xtra['domains'][di].replace('K','L') model.add(chain) # Update the last chain processed. lastchain = chain.id def split_scfv( structure ): ''' Split chains with two variable domains into two chains. The first has the original identifier. The second has the lower case identifier. ''' for model in structure: chains = [c for c in model] for chain in chains: if len( chain.xtra.get('domains',[]) ) == 2 and chain.id.lower() not in model: # Biopython builder does not like multiply defined residues (fair enough). Switch back to the original numbering # before copying the object as you will have many '0' residues in the first domain. scheme = chain.xtra['loaded'][:-1] chain.switch_numbering_scheme('pdb') # Copy the chain and assign it the lower case identifier c_copy = chain.copy() c_copy.id = chain.id.lower() chain.parent.add(c_copy) # Switch back to the numbering scheme chain.switch_numbering_scheme( scheme, 0 ) c_copy.switch_numbering_scheme( scheme, 1 ) # Deal with the pairing changes. chain.xtra['pairing'] = [(c_copy,1), None] c_copy.xtra['pairing'] = [None, (chain,0)] if chain.id == model.xtra['firstpair'][0][0].id: model.xtra['firstpair'] = [ model.xtra['firstpair'][0], (c_copy,1) ] # Reset the region annotations for r in chain: if r.xtra.get('domain_index','') != 0: r.xtra['region']='' for r in c_copy: if r.xtra.get('domain_index','') != 1: r.xtra['region']='' # Utility functions def extract_sequence(chain): ''' Extract the sequence of the chain (amino acids only) ''' strucSeq = '' index2ResId = [] index = 0 for r in chain: a = convert_3_to_1( r.get_resname() ) if a: # If an amino acid index2ResId.append( (index, r.id ) ) strucSeq += a index+=1 return strucSeq, dict(index2ResId) def convert_3_to_1(r): ''' Converts amino acid three letter code to one letter codes. '' is returned if a coversion cannot be made. ''' if is_aa( r, standard=False ): a = protein_letters_3to1.get( r, '' ) if len( a ) == 3: # Where there are multiple codes used. return self.convert_3_to_1(a) return a return '' def pairwise_muscle(seq1, seq2,exact=True): """ Interface with pairwise muscle between two sequences that should be identical. Try an easy alignment first by checking that one is in the other. Then if this fails (gaps) use muscle to align the sequences - this should work for seqres and structure sequences with missing atoms. Use muscle to align. if exact is True The gap open penalty is slightly larger than gap extend to break degeneracy between: 1)garbleabcdefg---- -a-----bcdefg---- and 2)garbleabcdefg---- ------abcdefg---- But they are penalties will still make mismatch very unlikely. else default muscle """ if not muscle_path: raise Exception("Muscle could not be found in the path") try_easy = easy_alignment(seq1, seq2) if try_easy: return try_easy[0],try_easy[1] if exact: p = subprocess.Popen( [muscle_path,'-gapopen', '-1.001','-gapextend', '-1'], stdin=subprocess.PIPE, stdout=subprocess.PIPE, stderr=subprocess.PIPE ) else: p = subprocess.Popen( [muscle_path], stdin=subprocess.PIPE, stdout=subprocess.PIPE, stderr=subprocess.PIPE ) output = p.communicate('>seq1\n%s\n>seq2\n%s'%(seq1,seq2)) # check what you have been given. result = output[0].split(">") # expect it to have 2 entries if len(result) == 3: seq1_ali = result[1] seq2_ali = result[2] return "".join( seq1_ali.split("\n")[1:]), "".join( seq2_ali.split("\n")[1:]) else: print("Problem parsing output from muscle: %s"%output[0], file=sys.stderr) def easy_alignment(seq1, seq2): """ Function to align two sequences by checking if one is in the other. This function will conserve gaps. """ assert type(seq1) is str and type(seq2) is str, "Sequences must be strings for easy_alignment" if seq1 in seq2: start = seq2.index(seq1) seq1_ali = "-"*start + seq1 + "-"*(len(seq2) - start - len(seq1) ) return seq1_ali, seq2 elif seq2 in seq1: start = seq1.index(seq2) seq2_ali = "-"*start + seq2 + "-"*(len(seq1) - start - len(seq2) ) return seq1, seq2_ali else: # Can't align them # I return just one value here. return False def which(name, flags=os.X_OK): """ Search PATH for executable files with the given name. On newer versions of MS-Windows, the PATHEXT environment variable will be set to the list of file extensions for files considered executable. This will normally include things like ".EXE". This fuction will also find files with the given name ending with any of these extensions. On MS-Windows the only flag that has any meaning is os.F_OK. Any other flags will be ignored. @type name: C{str} @param name: The name for which to search. @type flags: C{int} @param flags: Arguments to L{os.access}. @rtype: C{list} @param: A list of the unique full paths to files found, in the order in which they were found. """ result = [] exts = [_f for _f in os.environ.get('PATHEXT', '').split(os.pathsep) if _f] path = os.environ.get('PATH', None) if path is None: return [] for p in os.environ.get('PATH', '').split(os.pathsep): p = os.path.join(p, name) if os.access(p, flags): result.append(p) for e in exts: pext = p + e if os.access(pext, flags): result.append(pext) return uniq(result) def uniq(seq, idfun=None): """ A function to uniquify a sequence preserving order With thanks to http://www.peterbe.com @param seq: A sequence to uniquify @param idfun: An optional function to use as a key. Like the "key" kwarg in C{sorted}. @return: The sequence. """ # order preserving if idfun is None: def idfun(x): return x seen = {} result = [] for item in seq: marker = idfun(item) if marker in seen: continue seen[marker] = 1 result.append(item) return result def get_alignment_dict(ali1,ali2): """ Get a dictionary which tells you the index in sequence 2 that should align with the index in sequence 1 (key) ali1: ----bcde-f--- seq1: bcdef ali2: ---abcd--f--- seq2: abcdf alignment_dict={ 0:1, 1:2, 2:3, 4:4 } If the index is aligned with a gap do not include in the dictionary. e.g 1 in alignment_dict --> True e.g 3 in alignment_dict --> False """ assert len(ali1)==len(ali2), "aligned sequences must be same lengths (including gaps)" alignment_dict={} p1=-1 p2=-1 for ap in range( len(ali1) ): if ali1[ap] != "-" and ali2[ap] != "-": assert ali1[ap] == ali2[ap], 'The sequence in the structure did not match that in the provided sequence (seqres entry)' p1+=1 p2+=1 alignment_dict[p1] = p2 elif ali1[ap] != "-": p1+=1 elif ali2[ap] != "-": p2+=1 return alignment_dict def fix_deletions(chain): ''' Consider the case where there is one or more missing residues flanked by identical residues: QETGGGGGGNCP QETGG-GGGNCP The alignment is degenerate. However missing residues can be any one of them e.g. QETGGGGGGNCP QET-GGGGGNCP QETGGGGGGNCP QETGGGG-GNCP This function will check the position of the chain break and fix which positions should be included accordingly ''' # TODO pass def analyse_continuity( chain ): ''' ''' last = chain.child_list[0] i = 1 for residue in chain.child_list[1:]: try: if residue.id[0].strip():continue # Don't consider HETATMS. Enforce them to be missed if abs(last['C'] - residue['N'] ) > 1.5: # Generous cut-off (average 1.33) for C-N peptide bond. return False, i except KeyError: return False, i last = residue i+=1 return True, None # Check whether muscle is in the path. Alternatively provide this as an input argument from another script. if which('muscle'): muscle_path = 'muscle' else: muscle_path = '' # Modified seqres iterator from Biopython def PdbSeqresIterator(handle): """Returns SeqRecord objects for each chain in a PDB file. The sequences are derived from the SEQRES lines in the PDB file header, not the atoms of the 3D structure. Specifically, these PDB records are handled: DBREF, SEQADV, SEQRES, MODRES See: http://www.wwpdb.org/documentation/format23/sect3.html """ chains = collections.defaultdict(list) metadata = collections.defaultdict(list) lines = collections.defaultdict(list) for line in handle: rec_name = line[0:6].strip() if rec_name == 'SEQRES': # NB: We only actually need chain ID and the residues here; # commented bits are placeholders from the wwPDB spec. # Serial number of the SEQRES record for the current chain. # Starts at 1 and increments by one each line. # Reset to 1 for each chain. # ser_num = int(line[8:10]) # Chain identifier. This may be any single legal character, # including a blank which is used if there is only one chain. chn_id = line[11] # Number of residues in the chain (repeated on every record) # num_res = int(line[13:17]) residues = [seq1(res, custom_map=protein_letters_3to1) for res in line[19:].split()] chains[chn_id].extend(residues) lines[chn_id].append( line[:11]+'%s'+line[12:] ) elif rec_name == 'DBREF': # ID code of this entry (PDB ID) pdb_id = line[7:11] # Chain identifier. chn_id = line[12] # Initial sequence number of the PDB sequence segment. # seq_begin = int(line[14:18]) # Initial insertion code of the PDB sequence segment. # icode_begin = line[18] # Ending sequence number of the PDB sequence segment. # seq_end = int(line[20:24]) # Ending insertion code of the PDB sequence segment. # icode_end = line[24] # Sequence database name. database = line[26:32].strip() # Sequence database accession code. db_acc = line[33:41].strip() # Sequence database identification code. db_id_code = line[42:54].strip() # Initial sequence number of the database seqment. # db_seq_begin = int(line[55:60]) # Insertion code of initial residue of the segment, if PDB is the # reference. # db_icode_begin = line[60] # Ending sequence number of the database segment. # db_seq_end = int(line[62:67]) # Insertion code of the ending residue of the segment, if PDB is the # reference. # db_icode_end = line[67] metadata[chn_id].append({'pdb_id': pdb_id, 'database': database, 'db_acc': db_acc, 'db_id_code': db_id_code}) # ENH: 'SEQADV' 'MODRES' for chn_id, residues in sorted(chains.items()): record = SeqRecord(Seq(''.join(residues), generic_protein)) record.annotations = {"chain": chn_id} if chn_id in metadata: m = metadata[chn_id][0] record.id = chn_id record.name = "%s:%s" % (m['pdb_id'], chn_id) record.description = ("%s:%s %s" % (m['database'], m['db_acc'], m['db_id_code'])) record.lines =lines[chn_id] for melem in metadata[chn_id]: record.dbxrefs.extend([ "%s:%s" % (melem['database'], melem['db_acc']), "%s:%s" % (melem['database'], melem['db_id_code'])]) else: record.id = chn_id record.lines =lines[chn_id] yield record ######## Region annotations ######### regions_in_chothia = {"L1": {"kabat":(24,34),"chothia":(24,34),"contact":(30,36),"north":(24,34)}, "L2": {"kabat":(50,56),"chothia":(50,56),"contact":(46,55),"north":(49,56)}, "L3": {"kabat":(89,97),"chothia":(89,97),"contact":(89,96),"north":(89,97)}, "H1": {"kabat":(31,35),"chothia":(26,32),"contact":(30,35),"north":(23,35)}, "H2": {"kabat":(50,65),"chothia":(52,56),"contact":(47,58),"north":(50,58)}, "H3": {"kabat":(95,102),"chothia":(95,102),"contact":(93,101),"north":(93,102)} } _regions = {'imgt':{}} _regions['imgt']['L'] = _regions['imgt']['H'] = '11111111111111111111111111222222222222333333333333333334444444444555555555555555555555555555555555555555666666666666677777777777' _regions['kabat'] = {} _regions['kabat']['L'] = '11111111111111111111111222222222222222223333333333333334444444444444455555555555555555555555555555555555666666666666677777777777' _regions['kabat']['H'] = '11111111111111111111111111111111111222223333333333333344444444444444444444555555555555555555555555555555556666666666677777777777' _regions['chothia'] = {} _regions['chothia']['L'] = '11111111111111111111111222222222222222223333333333333334444444444444455555555555555555555555555555555555666666666666677777777777' _regions['chothia']['H'] = '11111111111111111111111111222222222223333333333333333333444444445555555555555555555555555555555555555555556666666666677777777777' _regions['contact'] = {} _regions['contact']['L'] = '11111111111111111111111111111111111222222233333333344444444444444444555555555555555555555555555555555555666666666666777777777777' _regions['contact']['H'] = '11111111111111111111111111111122222222223333333333344444444444444455555555555555555555555555555555555555666666666666777777777777' _regions['north'] = {} _regions['north']['L'] = '11111111111111111111111222222222222222223333333333333344444444444444455555555555555555555555555555555555666666666666677777777777' _regions['north']['H'] = '11111111111111111111111222222222222222223333333333333344444444444455555555555555555555555555555555555555666666666666677777777777' # For internal use only. These are not direct conversions and are handled heuristically. _index_to_imgt_state = {('chothia', 'H'): {1: 0, 2: 1, 3: 2, 4: 3, 5: 4, 6: 6, 7: 7, 8: 8, 9: 9, 10: 10, 11: 11, 12: 12, 13: 13, 14: 14, 15: 15, 16: 16, 17: 17, 18: 18, 19: 19, 20: 20, 21: 21, 22: 22, 23: 23, 24: 24, 25: 25, 26: 26, 27: 27, 28: 28, 29: 29, 30: 30, 31: 35, 32: 36, 33: 37, 34: 38, 35: 39, 36: 40, 37: 41, 38: 42, 39: 43, 40: 44, 41: 45, 42: 46, 43: 47, 44: 48, 45: 49, 46: 50, 47: 51, 48: 52, 49: 53, 50: 54, 51: 55, 52: 59, 53: 60, 54: 61, 55: 62, 56: 63, 57: 64, 58: 65, 59: 66, 60: 67, 61: 68, 62: 69, 63: 70, 64: 72, 65: 73, 66: 74, 67: 75, 68: 76, 69: 77, 70: 78, 71: 79, 72: 80, 73: 81, 74: 82, 75: 83, 76: 84, 77: 85, 78: 86, 79: 87, 80: 88, 81: 89, 82: 93, 83: 94, 84: 95, 85: 96, 86: 97, 87: 98, 88: 99, 89: 100, 90: 101, 91: 102, 92: 103, 93: 104, 94: 105, 95: 106, 96: 107, 97: 108, 98: 109, 99: 110, 100: 114, 101: 115, 102: 116, 103: 117, 104: 118, 105: 119, 106: 120, 107: 121, 108: 122, 109: 123, 110: 124, 111: 125, 112: 126, 113: 127}, ('kabat', 'H'): {1: 0, 2: 1, 3: 2, 4: 3, 5: 4, 6: 6, 7: 7, 8: 8, 9: 9, 10: 10, 11: 11, 12: 12, 13: 13, 14: 14, 15: 15, 16: 16, 17: 17, 18: 18, 19: 19, 20: 20, 21: 21, 22: 22, 23: 23, 24: 24, 25: 25, 26: 26, 27: 27, 28: 28, 29: 29, 30: 30, 31: 31, 32: 32, 33: 33, 34: 34, 35: 35, 36: 40, 37: 41, 38: 42, 39: 43, 40: 44, 41: 45, 42: 46, 43: 47, 44: 48, 45: 49, 46: 50, 47: 51, 48: 52, 49: 53, 50: 54, 51: 55, 52: 59, 53: 60, 54: 61, 55: 62, 56: 63, 57: 64, 58: 65, 59: 66, 60: 67, 61: 68, 62: 69, 63: 70, 64: 72, 65: 73, 66: 74, 67: 75, 68: 76, 69: 77, 70: 78, 71: 79, 72: 80, 73: 81, 74: 82, 75: 83, 76: 84, 77: 85, 78: 86, 79: 87, 80: 88, 81: 89, 82: 93, 83: 94, 84: 95, 85: 96, 86: 97, 87: 98, 88: 99, 89: 100, 90: 101, 91: 102, 92: 103, 93: 104, 94: 105, 95: 106, 96: 107, 97: 108, 98: 109, 99: 110, 100: 114, 101: 115, 102: 116, 103: 117, 104: 118, 105: 119, 106: 120, 107: 121, 108: 122, 109: 123, 110: 124, 111: 125, 112: 126, 113: 127}, ('imgt', 'H'): {1: 0, 2: 1, 3: 2, 4: 3, 5: 4, 6: 5, 7: 6, 8: 7, 9: 8, 10: 9, 11: 10, 12: 11, 13: 12, 14: 13, 15: 14, 16: 15, 17: 16, 18: 17, 19: 18, 20: 19, 21: 20, 22: 21, 23: 22, 24: 23, 25: 24, 26: 25, 27: 26, 28: 27, 29: 28, 30: 29, 31: 30, 32: 31, 33: 32, 34: 33, 35: 34, 36: 35, 37: 36, 38: 37, 39: 38, 40: 39, 41: 40, 42: 41, 43: 42, 44: 43, 45: 44, 46: 45, 47: 46, 48: 47, 49: 48, 50: 49, 51: 50, 52: 51, 53: 52, 54: 53, 55: 54, 56: 55, 57: 56, 58: 57, 59: 58, 60: 59, 61: 60, 62: 61, 63: 62, 64: 63, 65: 64, 66: 65, 67: 66, 68: 67, 69: 68, 70: 69, 71: 70, 72: 71, 73: 72, 74: 73, 75: 74, 76: 75, 77: 76, 78: 77, 79: 78, 80: 79, 81: 80, 82: 81, 83: 82, 84: 83, 85: 84, 86: 85, 87: 86, 88: 87, 89: 88, 90: 89, 91: 90, 92: 91, 93: 92, 94: 93, 95: 94, 96: 95, 97: 96, 98: 97, 99: 98, 100: 99, 101: 100, 102: 101, 103: 102, 104: 103, 105: 104, 106: 105, 107: 106, 108: 107, 109: 108, 110: 109, 111: 110, 112: 111, 113: 112, 114: 113, 115: 114, 116: 115, 117: 116, 118: 117, 119: 118, 120: 119, 121: 120, 122: 121, 123: 122, 124: 123, 125: 124, 126: 125, 127: 126, 128: 127}, ('chothia', 'L'): {1: 0, 2: 1, 3: 2, 4: 3, 5: 4, 6: 5, 7: 6, 8: 7, 9: 8, 10: 9, 11: 10, 12: 11, 13: 12, 14: 13, 15: 14, 16: 15, 17: 16, 18: 17, 19: 18, 20: 19, 21: 20, 22: 21, 23: 22, 24: 23, 25: 24, 26: 25, 27: 26, 28: 27, 29: 28, 30: 35, 31: 36, 32: 37, 33: 38, 34: 39, 35: 40, 36: 41, 37: 42, 38: 43, 39: 44, 40: 45, 41: 46, 42: 47, 43: 48, 44: 49, 45: 50, 46: 51, 47: 52, 48: 53, 49: 54, 50: 55, 51: 56, 52: 57, 53: 65, 54: 66, 55: 67, 56: 68, 57: 69, 58: 70, 59: 72, 60: 73, 61: 74, 62: 75, 63: 76, 64: 77, 65: 78, 66: 81, 67: 82, 68: 83, 69: 84, 70: 85, 71: 86, 72: 87, 73: 88, 74: 89, 75: 90, 76: 91, 77: 92, 78: 93, 79: 94, 80: 95, 81: 96, 82: 97, 83: 98, 84: 99, 85: 100, 86: 101, 87: 102, 88: 103, 89: 104, 90: 105, 91: 106, 92: 107, 93: 108, 94: 109, 95: 114, 96: 115, 97: 116, 98: 117, 99: 118, 100: 119, 101: 120, 102: 121, 103: 122, 104: 123, 105: 124, 106: 125, 107: 126, 108: 127}, ('martin', 'H'): {1: 0, 2: 1, 3: 2, 4: 3, 5: 4, 6: 5, 7: 6, 8: 8, 9: 9, 10: 10, 11: 11, 12: 12, 13: 13, 14: 14, 15: 15, 16: 16, 17: 17, 18: 18, 19: 19, 20: 20, 21: 21, 22: 22, 23: 23, 24: 24, 25: 25, 26: 26, 27: 27, 28: 28, 29: 29, 30: 30, 31: 35, 32: 36, 33: 37, 34: 38, 35: 39, 36: 40, 37: 41, 38: 42, 39: 43, 40: 44, 41: 45, 42: 46, 43: 47, 44: 48, 45: 49, 46: 50, 47: 51, 48: 52, 49: 53, 50: 54, 51: 55, 52: 59, 53: 60, 54: 61, 55: 62, 56: 63, 57: 64, 58: 65, 59: 66, 60: 67, 61: 68, 62: 69, 63: 70, 64: 72, 65: 73, 66: 74, 67: 75, 68: 76, 69: 77, 70: 78, 71: 79, 72: 83, 73: 84, 74: 85, 75: 86, 76: 87, 77: 88, 78: 89, 79: 90, 80: 91, 81: 92, 82: 93, 83: 94, 84: 95, 85: 96, 86: 97, 87: 98, 88: 99, 89: 100, 90: 101, 91: 102, 92: 103, 93: 104, 94: 105, 95: 106, 96: 107, 97: 108, 98: 109, 99: 110, 100: 114, 101: 115, 102: 116, 103: 117, 104: 118, 105: 119, 106: 120, 107: 121, 108: 122, 109: 123, 110: 124, 111: 125, 112: 126, 113: 127}, ('kabat', 'L'): {1: 0, 2: 1, 3: 2, 4: 3, 5: 4, 6: 5, 7: 6, 8: 7, 9: 8, 10: 9, 11: 10, 12: 11, 13: 12, 14: 13, 15: 14, 16: 15, 17: 16, 18: 17, 19: 18, 20: 19, 21: 20, 22: 21, 23: 22, 24: 23, 25: 24, 26: 25, 27: 32, 28: 33, 29: 34, 30: 35, 31: 36, 32: 37, 33: 38, 34: 39, 35: 40, 36: 41, 37: 42, 38: 43, 39: 44, 40: 45, 41: 46, 42: 47, 43: 48, 44: 49, 45: 50, 46: 51, 47: 52, 48: 53, 49: 54, 50: 55, 51: 56, 52: 57, 53: 65, 54: 66, 55: 67, 56: 68, 57: 69, 58: 70, 59: 72, 60: 73, 61: 74, 62: 75, 63: 76, 64: 77, 65: 78, 66: 81, 67: 82, 68: 83, 69: 84, 70: 85, 71: 86, 72: 87, 73: 88, 74: 89, 75: 90, 76: 91, 77: 92, 78: 93, 79: 94, 80: 95, 81: 96, 82: 97, 83: 98, 84: 99, 85: 100, 86: 101, 87: 102, 88: 103, 89: 104, 90: 105, 91: 106, 92: 107, 93: 108, 94: 109, 95: 114, 96: 115, 97: 116, 98: 117, 99: 118, 100: 119, 101: 120, 102: 121, 103: 122, 104: 123, 105: 124, 106: 125, 107: 126, 108: 127}, ('imgt', 'L'): {1: 0, 2: 1, 3: 2, 4: 3, 5: 4, 6: 5, 7: 6, 8: 7, 9: 8, 10: 9, 11: 10, 12: 11, 13: 12, 14: 13, 15: 14, 16: 15, 17: 16, 18: 17, 19: 18, 20: 19, 21: 20, 22: 21, 23: 22, 24: 23, 25: 24, 26: 25, 27: 26, 28: 27, 29: 28, 30: 29, 31: 30, 32: 31, 33: 32, 34: 33, 35: 34, 36: 35, 37: 36, 38: 37, 39: 38, 40: 39, 41: 40, 42: 41, 43: 42, 44: 43, 45: 44, 46: 45, 47: 46, 48: 47, 49: 48, 50: 49, 51: 50, 52: 51, 53: 52, 54: 53, 55: 54, 56: 55, 57: 56, 58: 57, 59: 58, 60: 59, 61: 60, 62: 61, 63: 62, 64: 63, 65: 64, 66: 65, 67: 66, 68: 67, 69: 68, 70: 69, 71: 70, 72: 71, 73: 72, 74: 73, 75: 74, 76: 75, 77: 76, 78: 77, 79: 78, 80: 79, 81: 80, 82: 81, 83: 82, 84: 83, 85: 84, 86: 85, 87: 86, 88: 87, 89: 88, 90: 89, 91: 90, 92: 91, 93: 92, 94: 93, 95: 94, 96: 95, 97: 96, 98: 97, 99: 98, 100: 99, 101: 100, 102: 101, 103: 102, 104: 103, 105: 104, 106: 105, 107: 106, 108: 107, 109: 108, 110: 109, 111: 110, 112: 111, 113: 112, 114: 113, 115: 114, 116: 115, 117: 116, 118: 117, 119: 118, 120: 119, 121: 120, 122: 121, 123: 122, 124: 123, 125: 124, 126: 125, 127: 126, 128: 127}, ('martin', 'L'): {1: 0, 2: 1, 3: 2, 4: 3, 5: 4, 6: 5, 7: 6, 8: 7, 9: 8, 10: 9, 11: 10, 12: 11, 13: 12, 14: 13, 15: 14, 16: 15, 17: 16, 18: 17, 19: 18, 20: 19, 21: 20, 22: 21, 23: 22, 24: 23, 25: 24, 26: 25, 27: 26, 28: 27, 29: 28, 30: 35, 31: 36, 32: 37, 33: 38, 34: 39, 35: 40, 36: 41, 37: 42, 38: 43, 39: 44, 40: 45, 41: 46, 42: 47, 43: 48, 44: 49, 45: 50, 46: 51, 47: 52, 48: 53, 49: 54, 50: 55, 51: 56, 52: 57, 53: 65, 54: 66, 55: 67, 56: 68, 57: 69, 58: 70, 59: 72, 60: 73, 61: 74, 62: 75, 63: 76, 64: 77, 65: 78, 66: 81, 67: 82, 68: 83, 69: 84, 70: 85, 71: 86, 72: 87, 73: 88, 74: 89, 75: 90, 76: 91, 77: 92, 78: 93, 79: 94, 80: 95, 81: 96, 82: 97, 83: 98, 84: 99, 85: 100, 86: 101, 87: 102, 88: 103, 89: 104, 90: 105, 91: 106, 92: 107, 93: 108, 94: 109, 95: 114, 96: 115, 97: 116, 98: 117, 99: 118, 100: 119, 101: 120, 102: 121, 103: 122, 104: 123, 105: 124, 106: 125, 107: 126, 108: 127}} wolfguy_indexdiv50_to_region = {'H': [ 'fwh1', 'cdrh1','fwh2', 'cdrh2','fwh3', 'cdrh3', 'fwh4'], 'L': [ 'fwl1', 'cdrl1','fwl2', 'cdrl2','fwl3', 'cdrl3', 'fwl4'] } _reg_one2three = { "1":"fw%s1","2":"cdr%s1","3":"fw%s2","4":"cdr%s2","5":"fw%s3","6":"cdr%s3","7":"fw%s4" } def get_region( position, chain, numbering_scheme="chothia", definition="chothia" ): """ Get the region in which the position belongs given the chain, numbering scheme and definition. **Note** this function does not know about insertions on the sequence. Therefore, it will get the region annotation wrong when using non-equivalent scheme-definitions. To get around this please use the annotate_regions function which implements heuristics to get the definition correct in the scheme. """ index, insertion = position chain=chain.upper() # Horrible exception cases revolving around the kabat scheme/definition and cdr h1 if definition == "kabat": if numbering_scheme == "kabat" and chain == "H" and 31 <= index < 36: # Kabat scheme kabat definition. if index == 35: if insertion in " AB": # Position 31 to 35B return "cdrh1" else: return "fwh2" # 31C would be framework. else: return "cdrh1" if numbering_scheme == "kabat": # Kabat numbering, chothia or imgt definitions. if definition=="chothia" and chain == "H" and 33 <= index < 36: return "fwh2" elif definition=="imgt" and chain == "H" and 34 <= index < 36: return "fwh2" if numbering_scheme == "wolfguy" or definition == "wolfguy": assert definition == "wolfguy" and numbering_scheme == "wolfguy", "The wolfguy numbering scheme must be used with the wolfguy CDR definition" if chain == 'H': if index > 411: return "" r = int(index/50)-2 elif chain == 'L': if index > 810: return "" r = int(index/50)-10 try: return wolfguy_indexdiv50_to_region[chain][r] except IndexError: return "" try: return _reg_one2three[_regions[definition][chain][ _index_to_imgt_state[ (numbering_scheme, chain) ][index] ]]%chain.lower() except KeyError: return "?" # Heuristics to locate the different definitions in different numbering scheme # TODO # All definitions in the Aho scheme # All definitions in wolfguy scheme (apart from wolfguy) def annotate_regions(numbered_sequence, chain,numbering_scheme="chothia",definition="chothia"): """ Given a numbered sequence annotate which region each residue belongs to. The numbering scheme can be one chothia, kabat, imgt or martin The definition can be chothia, kabat, imgt, north or contact. Contact definition cannot be used with the kabat numbering scheme. If possible, use the corresponding numbering scheme and definition. This function automates the heuristics recognise different definitions in each scheme. However, some of the conversions are non-trivial. """ # In some cases there is not a direct equivalence between numbering schemes. Therefore, a CDR definition # may not be easily translatable from scheme to scheme. This is the case for: # - H1 Kabat definition in the IMGT scheme # 1 # - H1 Chothia definition in the Kabat scheme # 2 # - H1 IMGT definition in the Kabat scheme # 3 # - H1 Chothia definition in the Kabat scheme # 4 # - L2 IMGT definition in the Kabat scheme # 4 # - L2 IMGT definition in the Chothia scheme # 5 # - L2 IMGT definition in the Martin scheme # 6 # Below are heuristics to allow the conversion. They have been developed so that the CDR sequence extracted # in all schemes is the same as the CDR sequence in the scheme the definition was originally defined. e.g. # Chothia for Chothia, Kabat for Kabat, IMGT for IMGT. Note that the Contact definition *cannot* be defined # in Kabat numbering. # Find which additional positions should be considered in the CDR, given the sequence. assert numbering_scheme in ['chothia','martin','kabat','imgt'], 'Unimplemented' additional_positions = {} excluded_positions = {} c = chain.lower() numdict = dict( numbered_sequence ) cdr_acceptors = { 1:Accept(numbering_scheme=numbering_scheme, definition=definition), 2:Accept(numbering_scheme=numbering_scheme, definition=definition), 3:Accept(numbering_scheme=numbering_scheme, definition=definition) } cdr_acceptors[1].set_regions( ["cdr%s1"%c] ) cdr_acceptors[2].set_regions( ["cdr%s2"%c] ) cdr_acceptors[3].set_regions( ["cdr%s3"%c] ) # Heavy chain if chain == "H": if numbering_scheme == "imgt" and definition == "kabat": # IMGT scheme / Kabat definition # 1 # Count the positions 31-34 inclusive. These become insertions on 35 in Kabat. ins = 0 for i in range( 31, 35 ): if (i, " ") in numdict: if numdict[ (i, " ") ] != "-": ins +=1 for a in "ABCDEFGHIJKLMNOPQRSTUVWXYZ": if (33, a) in numdict: if numdict[ (33, a) ] != "-": ins +=1 else: break # If insertions would occur on 35 in the Kabat scheme, extend the IMGT numbering back until you hit 31. Then put on the insertions at 32 if ins: # Add postions backwards based on the number of insertions starting with H35. # IMGT insertions go on 33 cdr_acceptors[1].add_positions( ([ (35, " "), (34, " "), (33, " "), (32, " ") ]+[(33, a) for a in "ABCDEFGHIJKLMNOPQRSTUVWXYZ"])[:ins], "H" ) # If there more than two insertions we have to start removing positions from the definition. See # 4 below for more of an explanation if ins >2: cdr_acceptors[1].exclude_positions( ([(40," "),(39," "),(38," "),(37," "),(36," "),(35," "),(34," ")]+[(33, a) for a in "FGHIJKLMNOPQRSTUVWXYZ"])[:ins-2], "H" ) elif numbering_scheme == "kabat" and definition in ["chothia","imgt"]: # Kabat scheme / Chothia or IMGT definition # 2, 3 # Count the insertions on 35. These happen outside the CDR definitions of IMGT or Chothia. # They therefore are missed by a straight conversion. The equivalence is dependent on the # number of insertions at this position. # Count the number of insertions on H35. ins = 0 for a in "ABCDEFGHIJKLMNOPQRSTUVWXYZ": if (35, a) in numdict: if numdict[(35,a)] != "-": ins +=1 else: break if ins: # Add postions based on the number of insertions starting with H33 for the Chothia definition. H34 for the IMGT definition. if definition == "chothia": cdr_acceptors[1].add_positions( ([(33, " "),(34," ")]+[(35, a) for a in " ABCDEFGHIJKLMNOPQRSTUVWXYZ"])[:ins], "H" ) elif definition == "imgt": cdr_acceptors[1].add_positions( ([(34, " ")]+[(35, a) for a in " ABCDEFGHIJKLMNOPQRSTUVWXYZ"])[:ins] , "H" ) elif numbering_scheme in ["chothia", "martin"] and definition == "kabat": # 4 # Count the insertions on 31. If there are more than two, exclude back from 35. # e.g. if we have the below. Kabat and Chothia numbered Kabat CDRs # [((31, ' '), 'P'), ((32, ' '), 'A'), ((33, ' '), 'P'), ((34, ' '), 'E'), ((35, ' '), 'H'), ((35, 'A'), 'F'), ((35, 'B'), 'I')] # [((31, ' '), 'P'), ((31, 'A'), 'A'), ((31, 'B'), 'P'), ((31, 'C'), 'E'), ((32, ' '), 'H'), ((33, ' '), 'F'), ((34, ' '), 'I')] # Kabat definition will have a max of length 7 as insertions are on 35 and the definition ends at 35B. # In Chothia numbering the insertions are at 31. Hence when more than 2 insertions occur Chothia 35 falls off the end. Chothia 34 # becomes the end of the Kabat CDR. Similar thing happens with IMGT. # Count the number of insertions on H31. ins = 0 for a in "ABCDEFGHIJKLMNOPQRSTUVWXYZ": if (31, a) in numdict: if numdict[(31,a)] != "-": ins +=1 else: break if ins > 2: cdr_acceptors[1].exclude_positions( ([ (35," "),(34," "),(33," "), (32," ")]+[(31, a) for a in "GHIJKLMNOPQRSTUVWXYZ"])[:ins-2], "H" ) # Light chain if chain == "L": # 5,6,7 if numbering_scheme in ["kabat", "chothia", "martin"] and definition == "imgt": # Kabat-like schemes and IMGT definition # Count the number of insertions on L54. ins = 0 for a in "ABCDEFGHIJKLMNOPQRSTUVWXYZ": if (54, a) in numdict: if numdict[(54,a)] != "-": ins +=1 else: break if ins: # Add positions based on the number of insertions starting with L53. # IMGT definition with no insertions ends and 52 in Kabat/Chothia/Martin. extensions = [ (53," ") ] + [ (54, a) for a in " ABCDEFGHIJKLMNOPQRSTUVWXYZ"] cdr_acceptors[2].add_positions( ([ (53," ") ] + [ (54, a) for a in " ABCDEFGHIJKLMNOPQRSTUVWXYZ"])[:ins], "L") fw_regions = [ "fw%s1"%c,"fw%s2"%c,"fw%s3"%c,"fw%s4"%c ] fw_region = "fw%s1"%c region_annotations = [] cterm = max( _index_to_imgt_state[ (numbering_scheme, chain ) ].keys() ) for r, a in numbered_sequence: if cdr_acceptors[1].accept( r, chain ): region_annotations.append( (r, a, "cdr%s1"%c)) fw_region = "fw%s2"%c elif cdr_acceptors[2].accept( r, chain ): region_annotations.append( (r, a, "cdr%s2"%c)) fw_region = "fw%s3"%c elif cdr_acceptors[3].accept( r, chain ): region_annotations.append( (r, a, "cdr%s3"%c)) fw_region = "fw%s4"%c elif r[0] <= cterm and r[0] > 0: # Anything out of the variable region is not assigned a region i.e. '' region_annotations.append( (r, a, fw_region ) ) else: region_annotations.append( (r, a, '' ) ) return region_annotations class Accept: """ A class to select which positions should be compared. """ _defined_regions = ["fwh1", "fwh2", "fwh3", "fwh4", "fwl1", "fwl2", "fwl3", "fwl4", "cdrh1", "cdrh2", "cdrh3", "cdrl1", "cdrl2", "cdrl3"] _macro_regions= { "hframework":set(["fwh1", "fwh2", "fwh3", "fwh4"]), "hcdrs" :set(["cdrh1", "cdrh2", "cdrh3"]), "lframework":set(["fwl1", "fwl2", "fwl3", "fwl4"]), "lcdrs" :set(["cdrl1", "cdrl2", "cdrl3"]) } _macro_regions.update( { "framework": _macro_regions["hframework"] | _macro_regions["lframework"], "cdrs": _macro_regions["hcdrs"] | _macro_regions["lcdrs"], "vh": _macro_regions["hcdrs"] | _macro_regions["hframework"], "vl": _macro_regions["lcdrs"] | _macro_regions["lframework"], }) _macro_regions.update( { "fv": _macro_regions["vh"] | _macro_regions["vl"] } ) _macro_positions = {} def __init__(self, numbering_scheme="chothia", definition="chothia", NOT=False): self.NOT = NOT self.set_regions() self.positions={"H":set(),"L":set()} self.numbering_scheme = numbering_scheme self.definition = definition self.exclude={"H":set(),"L":set()} def set_regions( self, regions=[] ): """ Set the regions to be used. Will clear anything added using add regions. """ if self.NOT: self.regions= self._macro_regions[ "fv" ] else: self.regions = set() self.add_regions( regions ) def add_regions(self, regions): """ Add regions to the selection. """ for region in regions: region = region.lower() if region in self._defined_regions: if self.NOT: self.regions = self.regions - set([ region ]) else: self.regions.add( region ) elif region in self._macro_regions: if self.NOT: self.regions = self.regions - self._macro_regions[region] else: self.regions = self.regions | self._macro_regions[region] elif region in self._macro_positions: # e.g. interface positions raise AssertionError else: raise AssertionError def add_positions( self, positions, chain ): for position in positions: index, insertion = position self.positions[chain].add( (index, insertion) ) def exclude_positions( self, positions, chain ): for position in positions: index, insertion = position self.exclude[chain].add( (index, insertion) ) def accept(self, position, chain): if position in self.exclude[chain]: return if get_region(position, chain, self.numbering_scheme, self.definition) in self.regions or position in self.positions[chain]: return 1 if __name__ == '__main__': import argparse import sys parser = argparse.ArgumentParser(prog="ImmunoPDB", description=description, epilog=epilogue,formatter_class=argparse.RawDescriptionHelpFormatter) parser.add_argument( '-i', type=str, help="A structure to be numbered", dest="inputstructure") parser.add_argument( '-o', type=str, default=False, help="The output file to use. Default is stdout", dest="outfile") parser.add_argument( '--scheme','-s', type=str, choices=scheme_names+['pdb'], default="imgt", help="Which numbering scheme should be used. i, k, c, m, w and a are shorthand for IMGT, Kabat, Chothia, Martin (Extended Chothia), Wolfguy and Aho respectively. Default IMGT. Use pdb to retain the numbering but get the annotations as remarks", dest="scheme") parser.add_argument( '--receptor','-r', type=str, choices=["ig","tr"], default='ig', help="Choose whether to number Antibody (ig) or TCR (tr) domains.", dest="receptor") parser.add_argument( '--rename', action='store_true',default=False,help='Rename the receptor chains with H and L (ig) or B and A (tr). Only receptor chains output. First pair identified used.',dest='rename') parser.add_argument( '--fvonly', action='store_true',default=False,help='Only output Fv regions.',dest='fvonly') parser.add_argument( '--splitscfv', action='store_true',default=False,help='When they are found split single chain fvs into two seperate chains (fvonly becomes true)',dest='splitscfv') parser.add_argument( '--warnings', action='store_true',default=False,help='Report warnings about missing residues',dest='warnings') args = parser.parse_args() if len(sys.argv) < 2: parser.print_help() sys.exit(0) # Work arounds for either returning pdb scheme or where I have not yet implemented the regions in the scheme. # Assign the regions in imgt then renumber back in the chosen scheme # This is slow for the second case (double numbering). switchback=False if args.scheme == 'pdb' or ((args.fvonly or args.splitscfv) and args.scheme in ['aho','wolfguy']): switchback = args.scheme args.scheme = 'imgt' if args.scheme != 'pdb': args.scheme = scheme_short_to_long[args.scheme.lower()] if args.receptor == 'ig': sparser = AntibodyPDBParser(QUIET=True, scheme=args.scheme, warnings=args.warnings) elif args.receptor == 'tr': if args.scheme not in ['imgt','i','aho','a']: print('Only imgt or aho schemes can be applied to tcrs', file=sys.stderr) sys.exit(1) sparser = TcrPDBParser(QUIET=True, scheme=args.scheme, warnings=args.warnings) name = os.path.splitext(os.path.split(args.inputstructure)[1])[0] try: structure = sparser.get_structure(name, args.inputstructure) except IOError: print('File %s could not be opened'%args.inputstructure, file=sys.stderr) sys.exit(1) except Exception as e: print('%s could not be parsed:'%args.inputstructure, e, file=sys.stderr) sys.exit(1) # Switch back to the numbering scheme of choice. if switchback: structure.switch_numbering_scheme(switchback) args.scheme=switchback # Output the structure according to the input options. try: if args.outfile: of = open(args.outfile,'w') else: of = sys.stdout print('REMARK 6 SCHEME %s'%args.scheme.upper(), file=of) print('REMARK 6 ANARCI TYPE, PAIRING AND ASSIGNED GERMLINE DETAILS', file=of) if args.splitscfv: split_scfv( structure ) if args.rename: rename_chains( structure ) for chain in structure.get_chains(): print('REMARK 6 '+'\nREMARK 6 '.join(compile_remarks(chain, args.receptor.upper(), only_loaded=args.splitscfv)), file=of) for chain in structure.get_chains(): sr = compile_seqres( chain ) if sr: print(sr, file=of) if args.fvonly: structure.save(of,select=SelectFv()) elif args.splitscfv: structure.save(of,select=SelectFvScFv()) else: structure.save(of) if args.outfile: of.close() except IOError: print('Could not write to file %s'%(args.outfile), file=sys.stderr) sys.exit(1) except Exception as e: print(e, file=sys.stderr) sys.exit(1) sys.exit(0) ================================================ FILE: Example_scripts_and_sequences/anarci_API_example.py ================================================ # Import the anarci function. from anarci import anarci # Format the sequences that we want to number. sequences = [ ("12e8:H","EVQLQQSGAEVVRSGASVKLSCTASGFNIKDYYIHWVKQRPEKGLEWIGWIDPEIGDTEYVPKFQGKATMTADTSSNTAYLQLSSLTSEDTAVYYCNAGHDYDRGRFPYWGQGTLVTVSAAKTTPPSVYPLAP"), ("12e8:L","DIVMTQSQKFMSTSVGDRVSITCKASQNVGTAVAWYQQKPGQSPKLMIYSASNRYTGVPDRFTGSGSGTDFTLTISNMQSEDLADYFCQQYSSYPLTFGAGTKLELKRADAAPTVSIFPPSSEQLTSGGASV"), ("scfv:A","DIQMTQSPSSLSASVGDRVTITCRTSGNIHNYLTWYQQKPGKAPQLLIYNAKTLADGVPSRFSGSGSGTQFTLTISSLQPEDFANYYCQHFWSLPFTFGQGTKVEIKRTGGGGSGGGGSGGGGSGGGGSEVQLVESGGGLVQPGGSLRLSCAASGFDFSRYDMSWVRQAPGKRLEWVAYISSGGGSTYFPDTVKGRFTISRDNAKNTLYLQMNSLRAEDTAVYYCARQNKKLTWFDYWGQGTLVTVSSHHHHHH"), ("lysozyme:A","KVFGRCELAAAMKRHGLDNYRGYSLGNWVCAAKFESNFNTQATNRNTDGSTDYGILQINSRWWCNDGRTPGSRNLCNIPCSALLSSDITASVNCAKKIVSDGNGMNAWVAWRNRCKGTDVQAWIRGCRL")] # Hand the list of sequences to the anarci function. Number them with the IMGT scheme results = anarci(sequences, scheme="imgt", output=False) # Unpack the results. We get three lists numbering, alignment_details, hit_tables = results # Each has the same number of elements as the number of sequences submitted assert len(numbering) == len(alignment_details) == len(hit_tables) == len( sequences ) print('I am using the anarci function to number and get all the details about the following sequences') print(sequences) print('\n') # Iterate over the sequences for i in range(len(sequences)): if numbering[i] is None: print('ANARCI did not number', sequences[i][0]) else: print('ANARCI numbered', sequences[i][0]) print('It identified %d domain(s)'%len(numbering[i])) # Iterate over the domains for j in range(len(numbering[i])): domain_numbering, start_index, end_index = numbering[i][j] print('This is the IMGT numbering for the %d\'th domain:'%j, domain_numbering) print('This is the bit of the sequence it corresponds to:', sequences[i][1][start_index:end_index+1]) print('These are the details of the alignment:') for (key,value) in alignment_details[i][j].items(): print(key, ':', value) print('This is the summary of the hits that HMMER found') for line in hit_tables[i]: print(line) print('\n','_'*40) print('Do with this infomation as you wish') print('\n','*'*40) # Want to just get a quick numbering without caring about the other details? from anarci import number seq = "EVQLQQSGAEVVRSGASVKLSCTASGFNIKDYYIHWVKQRPEKGLEWIGWIDPEIGDTEYVPKFQGKATMTADTSSNTAYLQLSSLTSEDTAVYYCNAGHDYDRGRFPYWGQGTLVTVSAAKTTPPSVYPLAP" numbering, chain_type = number( seq, scheme = 'kabat' ) print('Alternatively we can simply number the first domain of a sequence with the number function') print('I gave it this sequence\n', seq) print('ANARCI told me it was a', chain_type, 'chain') print('This is the first domain\'s Kabat numbering:') print(numbering) ================================================ FILE: Example_scripts_and_sequences/antibody_sequences.fasta ================================================ >1mhp_Y IQLTQSPSSLSASVGDRVTITCSASSSVNHMFWYQQKPGKAPKPWIYLTSNLASGVPSRFSGSGSGTDYTLTISSLQPEDFATYYCQQWSGNPWTFGQGTKVEIKRTVAAPSVFIFPPSDEQLKSGTASVVCLLNNFYPREAKVQWKVDNALQSGNSQESVTEQDSKDSTYSLSSTLTLSKADYEKHKVYACEVTHQGLSSPVTKSFNRGEC >1mhp_X EVQLVESGGGLVQPGGSLRLSCAASGFTFSRYTMSWVRQAPGKGLEWVATISGGGHTYYLDSVKGRFTISRDNSKNTLYLQMNSLRAEDTAVYYCTRGFGDGGYFDVWGQGTLVTVSSASTKGPSVFPLAPSSKSTSGGTAALGCLVKDYFPEPVTVSWNSGALTSGVHTFPAVLQSSGLYSLSSVVTVPSSSLGTQTYICNVNHKPSNTKVDKKVEPK >4c57_C QVQLQESGGGLVQPGGSLRLSCSASGFKFNDSYMSWVRRVPGKGLEWVAGIWEDSSAAHYRDSVKGRFTISRDNAKNMLYLQMSSLKSDDTGLYYCVRRGYSGDYRPINNPSSQGTQVTVSSAAAYPYDVPDYGSHHHHHH >4c57_D QVQLQESGGGLVQPGGSLRLSCSASGFKFNDSYMSWVRRVPGKGLEWVAGIWEDSSAAHYRDSVKGRFTISRDNAKNMLYLQMSSLKSDDTGLYYCVRRGYSGDYRPINNPSSQGTQVTVSSAAAYPYDVPDYGSHHHHHH >1xiw_H EVQLQQSGPELVKPGASMKISCKASGYSFTGYTMNWVKQSHGKNLEWMGLINPYKGVSTYNQKFKDKATLTVDKSSSTAYMELLSLTSEDSAVYYCARSGYYGDSDWYFDVWGQGTTLTVFS >1xiw_C MDIQMTQTTSSLSASLGDRVTISCRASQDIRNYLNWYQQKPDGTVKLLIYYTSRLHSGVPSKFSGSGSGTDYSLTISNLEQEDIATYFCQQGNTLPWTFAGGTKLEIK >2hh0_H VQLLEQSGAELVKPGASVKLSCTASGFNIEDSYIHWVKQRPEQGLEWIGRIDPEDGETKYAPKFQGKATITADTSSNTAYLHLRRLTSEDTAIYYCGRGAYYIKEDFWGQGTTLTVSSASTKGPSVFPLAPSSKAGGTAALGCLVKDYFPEPVTVSWNSGALTSGVHTFPAVLQSSGLYSLSSVVTVPSSSLGTQTYICNVNHKPSNTKVDKKVEPA >2hh0_L LVMTQTPSSLSASLGERVSLTCRASQDIGNNLNWIQQKPDGTIKRLIYATSSLDSGVPKRFSGSRSGSDYSLTISSLESEDFADYYCLQHDTFPLTFGGGTKLEIKRTVAAPSVFIFPPSDEQLKSGTASVVCLLNNFYPREAKVQWKVDNALQSGNSQESVTEQDSKDSTYSLSSTLTLSKADYEKHKVYACEVTHQGLSSPVTKSFNR >4kjq_C EVRLLESGGGLVQPGGSLKLSCAASGFDYSRYWMSWVRQAPGKGLKWIGEINPVSSTINYTPSLKDKFIISRDNAKDTLYLQISKVRSEDTALYYCARLYYGYGYWYFDVWGAGTTVTVSSAKTTPPSVYPLAPGSAAAAASMVTLGCLVKGYFPEPVTVTWNSGSLAAGVHTFPAVLQAALYTLSSSVTVPSSSWPSETVTCNVAHPASSTKVDKKIVPRA >4kjq_E EVRLLESGGGLVQPGGSLKLSCAASGFDYSRYWMSWVRQAPGKGLKWIGEINPVSSTINYTPSLKDKFIISRDNAKDTLYLQISKVRSEDTALYYCARLYYGYGYWYFDVWGAGTTVTVSSAKTTPPSVYPLAPGSAAAAASMVTLGCLVKGYFPEPVTVTWNSGSLAAGVHTFPAVLQAALYTLSSSVTVPSSSWPSETVTCNVAHPASSTKVDKKIVPRA >1mhh_A DIVMSQSPSSLAVSAGEKVTMSCKSSQSLLNSRTRKNYLAWYQQKPGQSPKVLIYWASTRESGVPDRFTGRGSGTDFTLTISSVQAEDQAVYYCKQAYIPPLTFGAGTKLELKRADAAPTVSIFPPSSEQLTSGGASVVCFLNNFYPKDINVKWKIDGSERQNGVLNSWTDQDSKDSTYSMSSTLTLTKDEYERHNSYTCEATHKTSTSPIVKSFNRNEX >1mhh_C DIVMSQSPSSLAVSAGEKVTMSCKSSQSLLNSRTRKNYLAWYQQKPGQSPKVLIYWASTRESGVPDRFTGRGSGTDFTLTISSVQAEDQAVYYCKQAYIPPLTFGAGTKLELKRADAAPTVSIFPPSSEQLTSGGASVVCFLNNFYPKDINVKWKIDGSERQNGVLNSWTDQDSKDSTYSMSSTLTLTKDEYERHNSYTCEATHKTSTSPIVKSFNRNEX >1yqv_H EVQLQQSGAELMKPGASVKISCKASGYTFSDYWIEWVKQRPGHGLEWIGEILPGSGSTNYHERFKGKATFTADTSSSTAYMQLNSLTSEDSGVYYCLHGNYDFDGWGQGTTLTVSSAKTTPPSVYPLAPGSAAQTNSMVTLGCLVKGYFPEPVTVTWNSGSLSSGVHTFPAVLQSDLYTLSSSVTVPSSTWPSETVTCNVAHPASSTKVDKKILD >1yqv_L MDIVLTQSPAIMSASPGEKVTMTCSASSSVNYMYWYQQKSGTSPKRWIYDTSKLASGVPVRFSGSGSGTSYSLTISSMETEDAATYYCQQWGRNPTFGGGTKLEIKRADAAPTVSIFPPSSEQLTSGGASVVCFLNNFYPKDINVKWKIDGSERQNGVLNSWTDQDSKDSTYSMSSTLTLTKDEYERHNSYTCEATHKTSTSPIVKSFNRN >1yc7_A DVQLVESGGGSVQAGGSLRLSCAVSGSTYSPCTTGWYRQAPGKEREWVSSISSPGTIYYQDSVKGRFTISRDNAKNTVYLQMNSLQREDTGMYYCQIQCGVRSIREYWGQGTQVTVSSHHHHHH >1yc7_B DVQLVESGGGSVQAGGSLRLSCAVSGSTYSPCTTGWYRQAPGKEREWVSSISSPGTIYYQDSVKGRFTISRDNAKNTVYLQMNSLQREDTGMYYCQIQCGVRSIREYWGQGTQVTVSSHHHHHH >1yc8_A DVQLVESGGGSVQAGGSLRLSCAVSGSTYSPCTTGWVRQAPGKGLEWVSSISSPGTIYYQDSVKGRFTISRDNAKNTVYLQMNSLQREDTGMYYCQIQCGVRSIREYWGQGTQVTVSSHHHHHH >1yc8_B DVQLVESGGGSVQAGGSLRLSCAVSGSTYSPCTTGWVRQAPGKGLEWVSSISSPGTIYYQDSVKGRFTISRDNAKNTVYLQMNSLQREDTGMYYCQIQCGVRSIREYWGQGTQVTVSSHHHHHH >1vge_H QVKLLEQSGAEVKKPGASVKVSCKASGYSFTSYGLHWVRQAPGQRLEWMGWISAGTGNTKYSQKFRGRVTFTRDTSATTAYMGLSSLRPEDTAVYYCARDPYGGGKSEFDYWGQGTLVTVSSASTKGPSVFPLAPSSKSTSGGTAALGCLVKDYFPEPVTVSWNSGALTSGVHTFPAVLQSSGLYSLSSVVTVPSSSLGTQTYICNVNHKPSNTKVDKKVEPKSC >1vge_L ELVMTQSPSSLSASVGDRVNIACRASQGISSALAWYQQKPGKAPRLLIYDASNLESGVPSRFSGSGSGTDFTLTISSLQPEDFAIYYCQQFNSYPLTFGGGTKVEIKRTVAAPSVFIFPPSDEQLKSGTASVVCLLNNFYPREAKVQWKVDNALQSGNSQESVTEQDSKDSTYSLSSTLTLSKADYEKHKVYACEVTHQGLSSPVTKSFNRGEC >1hh9_A DIKMTQSPSSMYTSLGERVTITCKASQDINSFLTWFLQKPGKSPKTLIYRANRLMIGVPSRFSGSGSGQTYSLTISSLEYEDMGIYYCLQYDDFPLTFGAGTKLDLKRADAAPTVSIFPPSSEQLTSGGASVVCFLNNFYPKEINVKWKIDGSERQNGVLDSWTEQDSKDSTYSMSSTLTLTKDEYERHNSYTCEATHKTSTSPIVKSFNRNEC >1hh9_B QDQLQQSGAELVRPGASVKLSCKALGYIFTDYEIHWVKQTPVHGLEWIGGIHPGSSGTAYNQKFKGKATLTADKSSTTAFMELSSLTSEDSAVYYCTRKDYWGQGTLVTVSAAKTTAPSVYPLVPVCGGTTGSSVTLGCLVKGYFPEPVTLTWNSGSLSSGVHTFPALLQSGLYTLSSSVTVTSNTWPSQTITCNVAHPASSTKVDKKIEPRV >1mh5_A DIVMTQAAPSVSVTPGESVSISCRSSKSLLHSNGNTYLYWFLQRPGQSPQLLIYRMSNLASGVPDRFSGSGSGTAFTLRISRVEAEDVGVYYCLQHLEYPFTFGAGTKLELKRADAAPTVSIFPPSSEQLTSGGASVVCFLNNFYPKDINVKWKIDGSERQNGVLNSWTDQDSKDSTYSMSSTLTLTKDEYERHNSYTCEATHKTSTSPIVKSFNRNEC >1mh5_H QVQLQQPGAELVKPGASVKLSCKASGYTFTSNWINWVKQRPGQGLEWIGNIYPDSYRTNYNEKFKRKATLTVDTSSSTAYMQLSSLTSDDSAVYYCVRKHYSYDGVVYWGQGTLVTVSAAKTTAPSVYPLAPVCGDTSGSSVTLGCLVKGYFPEPVTLTWNSGSLSSGVHTFPAVLQSDLYTLSSSVTVTSSTWPSQSITCNVAHPASSTKVDKKIEPRGPTIKPCPPCK >4kq3_H EVQLVQSGAEVKKPGSSVKVSCKASGGTFSSYAISWVRQAPGQGLEWMGSIIPWFGTTNYAQKFQGRVTITADESTSTAYMELSSLRSEDTAVYYCARDSEYYFDHWGQGTLVTVSSASTKGPSVFPLAPSSKSTSGGTAALGCLVKDYFPEPVTVSWNSGALTSGVHTFPAVLQSSGLYSLSSVVTVPSSSLGTQTYICNVNHKPSNTKVDKKVEPKSCHHHHHH >4kq3_L DIQMTQSPSSVSASVGDRVTITCRASQGISNWLNWYQQKPGKAPKLLIYAASSLQSGVPSRFSGSGSGTDFTLTISSLQPEDFATYYCQQYSDDPTFGQGTKVEIKRTVAAPSVFIFPPSDEQLKSGTASVVCLLNNFYPREAKVQWKVDNALQSGNSQESVTEQDSKDSTYSLSSTLTLSKADYEKHKVYACEVTHQGLSSPVTKSFNRGEC >4kq4_H QVQLQQSGAELVRPGVSVRISCKGSGYTFTDYAMHWVKQSHAKSLEWIGVISTYSGDARFNQKFTGKATMTVDKSSSTAYMELARLTSEDSAIYYCAREVRRSMDYWGQGTSVTVSSASTKGPSVFPLAPSSKSTSGGTAALGCLVKDYFPEPVTVSWNSGALTSGVHTFPAVLQSSGLYSLSSVVTVPSSSLGTQTYICNVNHKPSNTKVDKKVEPKSCHHHHHH >4kq4_L DIVMTQSHKFMSTSVGDRVSITCKASQDVSTAVAWYQQKPGQSPKLLIYWASTRHTGVPDRFTGSGSGTDYTLTISSVQAEDLALYYCQQHYSTPYTFGGGTKLEIKRTVAAPSVFIFPPSDEQLKSGTASVVCLLNNFYPREAKVQWKVDNALQSGNSQESVTEQDSKDSTYSLSSTLTLSKADYEKHKVYACEVTHQGLSSPVTKSFNRGEC >1hh6_A DIKMTQSPSSMYTSLGERVTITCKASQDINSFLTWFLQKPGKSPKTLIYRANRLMIGVPSRFSGSGSGQTYSLTISSLEYEDMGIYYCLQYDDFPLTFGAGTKLDLKRADAAPTVSIFPPSSEQLTSGGASVVCFLNNFYPKEINVKWKIDGSERQNGVLDSWTEQDSKDSTYSMSSTLTLTKDEYERHNSYTCEATHKTSTSPIVKSFNRNEC >1hh6_B QDQLQQSGAELVRPGASVKLSCKALGYIFTDYEIHWVKQTPVHGLEWIGGIHPGSSGTAYNQKFKGKATLTADKSSTTAFMELSSLTSEDSAVYYCTRKDYWGQGTLVTVSAAKTTAPSVYPLVPVCGGTTGSSVTLGCLVKGYFPEPVTLTWNSGSLSSGVHTFPALLQSGLYTLSSSVTVTSNTWPSQTITCNVAHPASSTKVDKKIEPRV >1pg7_I EVQLVESGGGLVQPGGSLRLSCAASGFNIKEYYMHWVRQAPGKGLEWVGLIDPEQGNTIYDPKFQDRATISADNSKNTAYLQMNSLRAEDTAVYYCARDTAAYFDYWGQGTLVTVSSASTKGPSVFPLAPSSKSTSGGTAALGCLVKDYFPEPVTVSWNSGALTSGVHTFPAVLQSSGLYSLSSVVTVPSSSLGTQTYICNVNHKPSNTKVDKKVEP >1pg7_H EVQLVESGGGLVQPGGSLRLSCAASGFNIKEYYMHWVRQAPGKGLEWVGLIDPEQGNTIYDPKFQDRATISADNSKNTAYLQMNSLRAEDTAVYYCARDTAAYFDYWGQGTLVTVSSASTKGPSVFPLAPSSKSTSGGTAALGCLVKDYFPEPVTVSWNSGALTSGVHTFPAVLQSSGLYSLSSVVTVPSSSLGTQTYICNVNHKPSNTKVDKKVEP >2atk_A QVQLQQPGAELVKPGASVKLSCKASGYTFTSDWIHWVKQRPGHGLEWIGEIIPSYGRANYNEKIQKKATLTADKSSSTAFMQLSSLTSEDSAVYYCARERGDGYFAVWGAGTTVTVSSAKTTPPSVYPLAPGSAAQTNSMVTLGCLVKGYFPEPVTVTWNSGSLSSGVHTFPAVLQSDLYTLSSSVTVPSSSWPSETVTCNVAHPASSTKVDKKIVPRD >2atk_B DILLTQSPAILSVSPGERVSFSCRASQSIGTDIHWYQQRTNGSPRLLIKYASESISGIPSRFSGSGSGTDFTLSINSVESEDIANYYCQQSNRWPFTFGSGTKLEIKRADAAPTVSIFPPSSEQLTSGGASVVCFLNNFYPKDINVKWKIDGSERQNGVLNSWTDQDSKDSTYSMSSTLTLTKDEYERHNSYTCEATHKTSTSPIVKSFNRN >1t2j_A QVQLQESGGGLVQPGGSLRLSCAASGFTFSNSAMSWVRQAPGKGLEWVSSISGSGGNTYSADSVKGRFTISRDNAKNSLYLQMNSLRAEDTAVYYCARDWYGMDVWGQGTTVTVSS >1i9i_H EVKLVESGGGLVKPGGSLKLSCAASGFTFSTYALSWVRQTADKRLEWVASIVSGGNTYYSGSVKGRFTISRDIARNILYLQMSSLRSEDTAMYYCAREYYGYVGLAYWGQGTLVTVSAAKTTPPSVYPLAPGSAAQTNSMVTLGCLVKGYFPEPVTVTWNSGSLSSGVHTFPAVLQSDLYTLSSSVTVPSSTWPSETVTCNVAHPASSTKVDKKIVPRDC >1i9i_L DVVVTQTPLSLPVSLGDQASISCRSSQSIVHSNGNSYLEWYLQKPGQSPKLLIYKVSNRFSGVPDRFSGSGSGTDFTLKISRVEAEDLGVYYCFQGSHVPPTFGGGTKLEIKRADAAPTVSIFPPSSEQLTSGGASVVCFLNNFYPKDINVKWKIDGSERQNGVLNSWTDQDSKDSTYSMSSTLTLTKDEYERHNSYTCEATHKTSTSPIVKSFNRNEC >1n0x_H QVQLVQSGAEVKKPGASVKVSCQASGYRFSNFVIHWVRQAPGQRFEWMGWINPYNGNKEFSAKFQDRVTFTADTSANTAYMELRSLRSADTAVYYCARVGPYSWDDSPQDNYYMDVWGKGTTVIVSSASTKGPSVFPLAPSSKSTSGGTAALGCLVKDYFPEPVTVSWNSGALTSGVHTFPAVLQSSGLYSLSSVVTVPSSSLGTQTYICNVNHKPSNTKVDKKVEPKSC >1n0x_K QVQLVQSGAEVKKPGASVKVSCQASGYRFSNFVIHWVRQAPGQRFEWMGWINPYNGNKEFSAKFQDRVTFTADTSANTAYMELRSLRSADTAVYYCARVGPYSWDDSPQDNYYMDVWGKGTTVIVSSASTKGPSVFPLAPSSKSTSGGTAALGCLVKDYFPEPVTVSWNSGALTSGVHTFPAVLQSSGLYSLSSVVTVPSSSLGTQTYICNVNHKPSNTKVDKKVEPKSC >1i9j_H EVKLVESGGGLVKPGGSLKLSCAASGFTFSTYALSWVRQTADKRLEWVASIVSGGNTYYSGSVKGRFTISRDIARNILYLQMSSLRSEDTAMYYCAREYYGYVGLAYWGQGTLVTVSAAKTTPPSVYPLAPGSAAQTNSMVTLGCLVKGYFPEPVTVTWNSGSLSSGVHTFPAVLQSDLYTLSSSVTVPSSTWPSETVTCNVAHPASSTKVDKKIVPRDC >1i9j_L DVVVTQTPLSLPVSLGDQASISCRSSQSIVHSNGNSYLEWYLQKPGQSPKLLIYKVSNRFSGVPDRFSGSGSGTDFTLKISRVEAEDLGVYYCFQGSHVPPTFGGGTKLEIKRADAAPTVSIFPPSSEQLTSGGASVVCFLNNFYPKDINVKWKIDGSERQNGVLNSWTDQDSKDSTYSMSSTLTLTKDEYERHNSYTCEATHKTSTSPIVKSFNRNEC >3tt1_I QVQLQQSGAELARPGASVKLSCKASGYTFTDYYINWMKQRTGQGLEWIGEIYPGVGTTYYDEKFKGKATLTADKSSRSAYMQLSSLTSEDSAVYFCARRTVTMGRYAMDYWGQGTSVTVSSAKTTAPSVYPLAPVCGDTTGSSVTLGCLVKGYFPEPVTLTWNSGSLSSGVHTFPAVLQSDLYTLSSSVTVTSSTWPSQSITCNVAHPASSTKVDKKIE >3tt1_H QVQLQQSGAELARPGASVKLSCKASGYTFTDYYINWMKQRTGQGLEWIGEIYPGVGTTYYDEKFKGKATLTADKSSRSAYMQLSSLTSEDSAVYFCARRTVTMGRYAMDYWGQGTSVTVSSAKTTAPSVYPLAPVCGDTTGSSVTLGCLVKGYFPEPVTLTWNSGSLSSGVHTFPAVLQSDLYTLSSSVTVTSSTWPSQSITCNVAHPASSTKVDKKIE >3tt3_H QVQLQQSGTELMRPGASVKISCKAFGYTFTNHHINWMKQRPGQGLDWIGYIIPYNDYTTNNRKFKGKATLTVDRSSSTAYMELSSLTSEDSAVYYCARGNYGSAWFAYWGQGTLVTVSAAKTTPPSVYPLAPGSAAQTNSMVTLGCLVKGYFPEPVTVTWNSGSLSSGVHTFPAVLQSDLYTLSSSVTVPSSTWPSETVTCNVAHPASSTKVDKKIVPRDC >3tt3_L DIVLTQSPTYLAVSLGQRATISCRASESVDTYDNSFIHWYQQKPGQPPKLLIYRASNLESGIPARFSGSGSRTDFTLTINPVETDDVATYYCQQSNEDPLTFGSGTKLEIKRADAAPTVSIFPPSSEQLTSGGASVVCFLNNFYPKDINVKWKIDGSERQNGVLNSWTDQDSKDSTYSMSSTLTLTKDEYERHNSYTCEATHKTSTSPIVKSFNRNEC >1i9r_H QVQLVQSGAEVVKPGASVKLSCKASGYIFTSYYMYWVKQAPGQGLEWIGEINPSNGDTNFNEKFKSKATLTVDKSASTAYMELSSLRSEDTAVYYCTRSDGRNDMDSWGQGTLVTVSSASTKGPSVFPLAPSSKSTSGGTAALGCLVKDYFPEPVTVSWNSGALTSGVHTFPAVLQSSGLYSLSSVVTVPSSSLGTQTYICNVNHKPSNTKVDKKVEPK >1i9r_K QVQLVQSGAEVVKPGASVKLSCKASGYIFTSYYMYWVKQAPGQGLEWIGEINPSNGDTNFNEKFKSKATLTVDKSASTAYMELSSLRSEDTAVYYCTRSDGRNDMDSWGQGTLVTVSSASTKGPSVFPLAPSSKSTSGGTAALGCLVKDYFPEPVTVSWNSGALTSGVHTFPAVLQSSGLYSLSSVVTVPSSSLGTQTYICNVNHKPSNTKVDKKVEPK >1f2x_K QVQLVESGGGSVQAGGSLRLSCAASGYTVSTYCMGWFRQAPGKEREGVATILGGSTYYGDSVKGRFTISQDNAKNTVYLQMNSLKPEDTAIYYCAGSTVASTGWCSRLRPYDYHYRGQGTQVTVSSRGRHHHHHH >1f2x_L QVQLVESGGGSVQAGGSLRLSCAASGYTVSTYCMGWFRQAPGKEREGVATILGGSTYYGDSVKGRFTISQDNAKNTVYLQMNSLKPEDTAIYYCAGSTVASTGWCSRLRPYDYHYRGQGTQVTVSSRGRHHHHHH >4f3f_A DIELTQSPAIMSASPGEKVTMTCSASSSVSYMHWYQQKSGTSPKRWIYDTSKLASGVPGRFSGSGSGNSYSLTISSVEAEDDATYYCQQWSKHPLTFGSGTKVEIKRTVAAPSVFIFPPSDEQLKSGTASVVCLLNNFYPREAKVQWKVDNALQSGNSQESVTEQDSKDSTYSLSSTLTLSKADYEKHKVYACEVTHQGLSSPVTKSFNRGEC >4f3f_B EVQLQQSGPELEKPGASVKISCKASGYSFTGYTMNWVKQSHGKSLEWIGLITPYNGASSYNQKFRGKATLTVDKSSSTAYMDLLSLTSEDSAVYFCARGGYDGRGFDYWGSGTPVTVSSASTKGPSVFPLAPSSKSTSGGTAALGCLVKDYFPEPVTVSWNSGALTSGVHTFPAVLQSSGLYSLSSVVTVPSSSLGTQTYICNVNHKPSNTKVDKKVEPKSCDKTHTCPPC >2fl5_A SYELKQPPSVSVSPGQTARITCSGDVLPKKYAYWYQERSGQAPVLVVYEDSGRPSEIPERFSGSSSGTKATLTISGAQVEDEADYYCYSDISNGYPLFGGGTKLSVGQPKAAPSVTLFPPSSEELQANKATLVCLISDFYPGAVTVAWKADSSPIKAGVETTTPSKQSNNKYAASSYLSLTPEQWKSHRSYSCQVTHEGSTVEKTVAPT >2fl5_C SYELKQPPSVSVSPGQTARITCSGDVLPKKYAYWYQERSGQAPVLVVYEDSGRPSEIPERFSGSSSGTKATLTISGAQVEDEADYYCYSDISNGYPLFGGGTKLSVGQPKAAPSVTLFPPSSEELQANKATLVCLISDFYPGAVTVAWKADSSPIKAGVETTTPSKQSNNKYAASSYLSLTPEQWKSHRSYSCQVTHEGSTVEKTVAPT >1cly_H EVNLVESGGGLVQPGGSLKVSCVTSGFTFSDYYMYWVRQTPEKRLEWVAYISQGGDITDYPDTVKGRFTISRDNAKNSLYLQMSRLKSEDTAMYYCARGLDDGAWFAYWGQGTLVTVSVASTKGPSVFPLAPSSKSTSGGTAALGCLVKDYFPQPVTVSWNSGALTSGVHTFPAVLQSSGLYSLSSVVTVPSSSLGTQTYICNVNHKPSNTKVDKRVEP >1cly_L DVLMTQIPVSLPVSLGDQASISCRSSQIIVHNNGNTYLEWYLQKPGQSPQLLIYKVSNRFSGVPDRFSGSGSGTDFTLKISRVEAEDLGVYYCFQGSHVPFTFGSGTKLEIKRTVAAPSVFIFPPSDEQLKSGTASVVCLLNNFYPREAKVQWKVDNALQSGNSQESVTEQDSKDSTYSLSSTLTLSKADYEKHKVYACEVTHQGLSSPVTKSFNRGEC >1clz_H EVNLVESGGGLVQPGGSLKVSCVTSGFTFSDYYMYWVRQTPEKRLEWVAYISQGGDITDYPDTVKGRFTISRDNAKNSLYLQMSRLKSEDTAMYYCARGLDDGAWFAYWGQGTLVTVSVTTTAPSVYPLVPGCSDTSGSSVTLGCLVKGYFPEPVTVKWNYGALSSGVRTVSSVLQSGFYSLSSLVTVPSSTWPSQTVICNVAHPASKTELIKRIEPR >1clz_L DVLMTQIPVSLPVSLGDQASISCRSSQIIVHNNGNTYLEWYLQKPGQSPQLLIYKVSNRFSGVPDRFSGSGSGTDFTLKISRVEAEDLGVYYCFQGSHVPFTFGSGTKLEIKRADAAPTVSIFPPSSEQLTSGGASVVCFLNNFYPKDINVKWKIDGSERQNGVLNSWTDQDSKDSTYSMSSTLTLTKDEYERHNSYTCEATHKTSTSPIVKSFNRNEC >4lou_C EVRLLESGGGLVQPGGSLKLSCAASGFDYSRYWMSWVRQAPGKGLKWIGEINPVSSTINYTPSLKDKFIISRDNAKDTLYLQISKVRSEDTALYYCARLYYGYGYWYFDVWGAGTTVTVSSAKTTPPSVYPLAPGSAAAAASMVTLGCLVKGYFPEPVTVTWNSGSLAAGVHTFPAVLQAALYTLSSSVTVPSSSWPSETVTCNVAHPASSTKVDKKIVPRA >4lou_E EVRLLESGGGLVQPGGSLKLSCAASGFDYSRYWMSWVRQAPGKGLKWIGEINPVSSTINYTPSLKDKFIISRDNAKDTLYLQISKVRSEDTALYYCARLYYGYGYWYFDVWGAGTTVTVSSAKTTPPSVYPLAPGSAAAAASMVTLGCLVKGYFPEPVTVTWNSGSLAAGVHTFPAVLQAALYTLSSSVTVPSSSWPSETVTCNVAHPASSTKVDKKIVPRA >3k2u_H EVQLVESGGGLVQPGGSLRLSCAASGFTINGTYIHWVRQAPGKGLEWVGGIYPAGGATYYADSVKGRFTISADTSKNTAYLQMNSLRAEDTAVYYCAKWWAWPAFDYWGQGTLVTVSSASTKGPSVFPLAPSSKSTSGGTAALGCLVKDYFPEPVTVSWNSGALTSGVHTFPAVLQSSGLYSLSSVVTVPSSSLGTQTYICNVNHKPSNTKVDKKVEPKSCDKTH >3k2u_L DIQMTQSPSSLSASVGDRVTITCRASQDVSTAVAWYQQKPGKAPKLLIYSASFLYSGVPSRFSGSGSGTDFTLTISSLQPEDFATYYCQQSNRAPATFGQGTKVEIKRTVAAPSVFIFPPSDEQLKSGTASVVCLLNNFYPREAKVQWKVDNALQSGNSQESVTEQDSKDSTYSLSSTLTLSKADYEKHKVYACEVTHQGLSSPVTKSFNRGEC >1clo_H EVKLVESGGGLVQPGGSLRLSCATSGFTFTDYYMNWVRQPPGKALEWLGFIGNKANGYTTEYSASVKGRFTISRDKSQSILYLQMNTLRAEDSATYYCTRDRGLRFYFDYWGQGTTLTVSSAKTTPPSVYPLAPGSAAQTNSMVTLGCLVKGYFPEPVTVTWNSGSLSSGVHTFPAVLQSDLYTLSSSVTVPSSPRPSETVTCNVAHPASSTKVDKKIVPRD >1clo_L QTVLSQSPAILSASPGEKVTMTCRASSSVTYIHWYQQKPGSSPKSWIYATSNLASGVPARFSGSGSGTSYSLTISRVEAEDAATYYCQHWSSKPPTFGGGTKLEIKRADAAPTVSIFPPSSEQLTSGGASVVCFLNNFYPKDINVKWKIDGSERQNGVLNSWTDQDSKDSTYSMSSTLTLTKDEYERHNSYTCEATHKTSTSPIVKSFNRNEC >3eot_H EVQLVESGGGLVQPGGSLRLSCAASGFTFSRYTMSWVRQAPGKGLEWVATISGGGHTYYLDSVKGRFTISRDNSKNTLYLQMNSLRAEDTAVYYCTRGFGDGGYFDVWGQGTLVTVSSAKTTPPSVYPLAPGSAAQTNSMVTLGCLVKGYFPEPVTVTWNSGSLSSGVHTFPAVLQSDLYTLSSSVTVPSSTWPSETVTCNVAHPASSTKVDKKIVPRDCHHHHHH >3eot_L QIQLTQSPSSLSASVGDRVTITCSASSSVNSSALFWYQQKPGKAPKPWIYLTSNLASGVPSRFSGSGSGTDYTLTISSLQPEDFATYYCQQISGNPWTFGQGTKVEIKRADAAPTVSIFPPSSEQLTSGGASVVCFLNNFYPKDINVKWKIDGSERQNGVLNSWTDQDSKDSTYSMSSTLTLTKDEYERHNSYTCEATHKTSTSPIVKSFNRNEC >3mnz_A RLDIQLTQSPSSLAMSGGQKVTMRCKSSQSLLNSRNERNYLAWYQQKPGQSPKLLVYFASIRESGVPDRFIGSGSGTDFTLTISSVQAEDLADYFCLQHYNTPWTFGGGTKLEIKRTVAAPSVFIFPPSDEQLKSGTASVVCLLNNFYPREAKVQWKVDNALQSGNSQESVTEQDSKDSTYSLSSTLTLSKADYEKHKVYACEVTHQGLSSPVTKSFNRGECGS >3mnz_B LQIQLVQSGPELKKPGETVKISCKASGYTFTDYSVHWVKQVPGKGLKWMGWINTETGEPTYADDFKGRFAFSLESSASTAYLEIHNLKNEDTATYFCALGWLHWGLGTTLTVSSASTKGPSVFPLAPSSKSTSGGTAALGCLVKDYFPEPVTVSWNSGALTSGVHTFPAVLQSSGLYSLSSVVTVPSSSLGTQTYICNVNHKPSNTKVDKRVEPKSCDK >3eoa_A DIQMTQSPSSLSASVGDRVTITCRASKTISKYLAWYQQKPGKAPKLLIYSGSTLQSGVPSRFSGSGSGTDFTLTISSLQPEDFATYYCQQHNEYPLTFGQGTKVEIKRTVAAPSVFIFPPSDEQLKSGTASVVCLLNNFYPREAKVQWKVDNALQSGNSQESVTEQDSKDSTYSLSSTLTLSKADYEKHKVYACEVTHQGLSSPVTKSFNRGEC >3eoa_H EVQLVESGGGLVQPGGSLRLSCAASGYSFTGHWMNWVRQAPGKGLEWVGMIHPSDSETRYNQKFKDRFTISVDKSKNTLYLQMNSLRAEDTAVYYCARGIYFYGTTYFDYWGQGTLVTVSSASTKGPSVFPLAPSSKSTSGGTAALGCLVKDYFPEPVTVSWNSGALTSGVHTFPAVLQSSGLYSLSSVVTVPSSSLGTQTYICNVNHKPSNTKVDKKVE >3eob_A DIQMTQSPSSLSASVGDRVTITCRASKTISKYLAWYQQKPGKAPKLLIYSGSTLQSGVPSRFSGSGSGTDFTLTISSLQPEDFATYYCQQHNEYPLTFGQGTKVEIKRTVAAPSVFIFPPSDEQLKSGTASVVCLLNNFYPREAKVQWKVDNALQSGNSQESVTEQDSKDSTYSLSSTLTLSKADYEKHKVYACEVTHQGLSSPVTKSFNRGEC >3eob_H EVQLVESGGGLVQPGGSLRLSCAASGYSFTGHWMNWVRQAPGKGLEWVGMIHPSDSETRYNQKFKDRFTISVDKSKNTLYLQMNSLRAEDTAVYYCARGIYFYGTTYFDYWGQGTLVTVSSASTKGPSVFPLAPSSKSTSGGTAALGCLVKDYFPEPVTVSWNSGALTSGVHTFPAVLQSSGLYSLSSVVTVPSSSLGTQTYICNVNHKPSNTKVDKKVE >2r56_I QVSLRESGGGLVQPGRSLRLSCTASGFTFRHHGMTWVRQAPGKGLEWVASLSGSGTKTHFADSVKGRFTISRDNSNNTLYLQMDNVRDEDTAIYYCAKAKRVGATGYFDLWGRGTLVTVSSASTKGPSVFPLAPSSKSTSGGTAALGCLVKDYFPEPVTVSWNSGALTSGVHTFPAVLQSSGLYSLSSVVTVPSSSLGTQTYICNVNHKPSNTKVDKKAEP >2r56_H QVSLRESGGGLVQPGRSLRLSCTASGFTFRHHGMTWVRQAPGKGLEWVASLSGSGTKTHFADSVKGRFTISRDNSNNTLYLQMDNVRDEDTAIYYCAKAKRVGATGYFDLWGRGTLVTVSSASTKGPSVFPLAPSSKSTSGGTAALGCLVKDYFPEPVTVSWNSGALTSGVHTFPAVLQSSGLYSLSSVVTVPSSSLGTQTYICNVNHKPSNTKVDKKAEP >1ol0_A QVQLVESGGGLVQPGGSLRLSCAASGFTFSSYAMSWFRQAPGKEREIVSAVSGSGGSTYYADSVRGRFTISRDNSKNTLYLQMNSLRAEDTAVYYCAREPRIPRPPSFDYWGQGTLVTVSS >1ol0_B QVQLVESGGGLVQPGGSLRLSCAASGFTFSSYAMSWFRQAPGKEREIVSAVSGSGGSTYYADSVRGRFTISRDNSKNTLYLQMNSLRAEDTAVYYCAREPRIPRPPSFDYWGQGTLVTVSS >1rei_A DIQMTQSPSSLSASVGDRVTITCQASQDIIKYLNWYQQTPGKAPKLLIYEASNLQAGVPSRFSGSGSGTDYTFTISSLQPEDIATYYCQQYQSLPYTFGQGTKLQIT >1rei_B DIQMTQSPSSLSASVGDRVTITCQASQDIIKYLNWYQQTPGKAPKLLIYEASNLQAGVPSRFSGSGSGTDYTFTISSLQPEDIATYYCQQYQSLPYTFGQGTKLQIT >1cl7_H QIQLQQSGPELKKPGETVKISCKATNYAFTDYSMHWVKQAPGGDLKYVGWINTETDEPTFADDFKGRFAFSLDTSTSTAFLQINNLKNEDTATYFCVRDRHDYGEIFTYWGQGTTVTVSSAKTTPPSVYPLAPGS >1cl7_L DVLMTQTPLYLPVSLGDQASISCRSSQTIVHNNGNTYLEWYLQKPGQSPQLLIYKVSNRFSGVPDRFSGSGSGTDFTLKISRVEAEDLGIYYCFQGSHFPPTFGGGTKLEIKRADAAPTVSIFPPSSEQLTSGGASVVCFLNNFYPKDINVKWKIDGSERQNGVLNSWTDQDSKDSTYSMSSTLTLTKDEYERHNSYTCEATHKTSTSPIVKSFNR >1a7o_H QVQLQESGPGLVAPSQSLSITCTVSGFSLTGYGVNWVRQPPGKGLEWLGMIWGDGNTDYNSALKSRLSISKDNSKSQVFLKMNSLHTDDTARYYCARERDYRLDYWGQGTTVTVSS >1a7o_L DIVLTQSPASLSASVGETVTITCRASGNIHNYLAWYQQKQGKSPQLLVYYTTTLADGVPSRFSGSGSGTQYSLKINSLQPDDFGSYYCQHFWSTPTFGGGTKLEIK >1a7n_H QVQLQESGPGLVAPSQSLSITCTVSGFSLTGYGVNWVRQPPGKGLEWLGMIWGDGNTDYNSALKSRLSISKDNSKSQVFLKMNSLHTDDTARYYCARERDYRLDYWGQGTTVTVSS >1a7n_L DIVLTQSPASLSASVGETVTITCRASGNIHNYLAWYQQKQGKSPQLLVYYTTTLADGVPSRFSGSGSGTQYSLKINSLQPDDFGSYYCQHFWSTPRTFGGGTKLEIK >3j1s_H SDVQLQESGPDLVKPSQSLSLTCTVTGYSITSGYTWHWIRQFPGNKQEWMGYIHFSGYTNYNPSLKSRVSITRDTSKNQFFLHLNSVTTEDTATYYCARGDYGYEWFTYWGQGTLVTVSAAKTTPPSVYPLAPGCGDTTGSSVTLGCLVKGYFPESVTVTWNSGSLSSSVHTFPALLQSGLYTMSSSVTVPSSTWPSQTVTCSVAHPASSTTVDKKLE >3j1s_L DIQMTQSSSSFSVSLGDRVTITCKASEDIHNRLAWYKQKPGNAPRLLISGATSLETGVPSRFSGSGSGKDYTLSITSLQNEDVATYYCQQYWIGPFTFGSGTNLEIKRADAAPTVSIFPPSSEQLTSGGASVVCFLNNFYPKDINVKWKIDGSERQNGVLNSWTDQDSKDSTYSMSSTLTLTKDEYERHNSYTCEATHKTSTSPIVKSFNRNEC >1a7r_H QVQLQESGPGLVAPSQSLSITCTVSGFSLTGYGVNWVRQPPGKGLEWLGMIWGDGNTDYNSALKSRLSISKDNSKSQVFLKMNSLHTDDTARYYCARERDYRLDYWGQGTTLTVSS >1a7r_L DIVLTQSPASLSASVGETVTITCRASGNIHNYLAWYQQKQGKSPQLLVYYTTTLADGVPSRFSGSGSGTQYSLKINSLQPDDFGSYYCQHFWSTPRTFGGGTKLEIK >1a7q_H QVQLQESGPGLVAPSQSLSITCTVSGFSLTGYGVNWVRQLPGKGLEWLGMIWGDGNTAYNSALKSRLSISKDNSKSQVFLEMDSLHTDDTARYYCARERDYRLDYWGQGTTVTVSS >1a7q_L DIVLTQSPASLSASVGETVTITCRAGGNTHNYLAWYQQKQGKSPQLLVYYTTTLAAGVPSRFSGSGSGTQYSLKINSLQPDDFGSYYCQHFWSTPRSFGGGTKLEI >1a7p_H QVQLQESGPGLVAPSQSLSITCTVSGFSLTGYGVNWVRQPPGKGLEWLGMIWGDGNTDYNSALKSRLSISKDNSKSQVFLKMNSLHTDDTARYYCARERDYRLDYWGQGTTVTVSS >1a7p_L DIVLTQSPASLSASVGETVTITCRASGNIHNYLAWYQQKQGKSPQLLVYYTTTLADGVPSRFSGSGSGTQYSLKINSLQPDDFGSYYCQHFWSTSRTFGGGTKLEIK >3eo1_A ETVLTQSPGTLSLSPGERATLSCRASQSLGSSYLAWYQQKPGQAPRLLIYGASSRAPGIPDRFSGSGSGTDFTLTISRLEPEDFAVYYCQQYADSPITFGQGTRLEIKRTVAAPSVFIFPPSDEQLKSGTASVVCLLNNFYPREAKVQWKVDNALQSGNSQESVTEQDSKDSTYSLSSTLTLSKADYEKHKVYACEVTHQGLSSPVTKSFNRGEC >3eo1_B QVQLVQSGAEVKKPGSSVKVSCKASGYTFSSNVISWVRQAPGQGLEWMGGVIPIVDIANYAQRFKGRVTITADESTSTTYMELSSLRSEDTAVYYCASTLGLVLDAMDYWGQGTLVTVSSASTKGPSVFPLAPCSRSTSESTAALGCLVKDYFPEPVTVSWNSGALTSGVHTFPAVLQSSGLYSLSSVVTVPSSSLGTKTYTCNVDHKPSNTKVDKRVESKYGPP >3eo0_A ETVLTQSPGTLSLSPGERATLSCRASQSLGSSYLAWYQQKPGQAPRLLIYGASSRAPGIPDRFSGSGSGTDFTLTISRLEPEDFAVYYCQQYADSPITFGQGTRLEIKRTVAAPSVFIFPPSDEQLKSGTASVVCLLNNFYPREAKVQWKVDNALQSGNSQESVTEQDSKDSTYSLSSTLTLSKADYEKHKVYACEVTHQGLSSPVTKSFNRGEC >3eo0_C ETVLTQSPGTLSLSPGERATLSCRASQSLGSSYLAWYQQKPGQAPRLLIYGASSRAPGIPDRFSGSGSGTDFTLTISRLEPEDFAVYYCQQYADSPITFGQGTRLEIKRTVAAPSVFIFPPSDEQLKSGTASVVCLLNNFYPREAKVQWKVDNALQSGNSQESVTEQDSKDSTYSLSSTLTLSKADYEKHKVYACEVTHQGLSSPVTKSFNRGEC >3eo9_H EVQLVESGGGLVQPGGSLRLSCAASGYSFTGHWMNWVRQAPGKGLEWVGMIHPSDSETRYNQKFKDRFTISVDKSKNTLYLQMNSLRAEDTAVYYCARGIYFYGTTYFDYWGQGTLVTVSSASTKGPSVFPLAPSSKSTSGGTAALGCLVKDYFPEPVTVSWNSGALTSGVHTFPAVLQSSGLYSLSSVVTVPSSSLGTQTYICNVNHKPSNTKVDKKV >3eo9_L DIQMTQSPSSLSASVGDRVTITCRASKTISKYLAWYQQKPGKAPKLLIYSGSTLQSGVPSRFSGSGSGTDFTLTISSLQPEDFATYYCQQHNEYPLTFGQGTKVEIKRTVAAPSVFIFPPSDEQLKSGTASVVCLLNNFYPREAKVQWKVDNALQSGNSQESVTEQDSKDSTYSLSSTLTLSKADYEKHKVYACEVTHQGLSSPVTKSFNRGEC >1n7m_H ELVMTQTPKFMSTSVGDRVSITCKASQNVGTAVAWYQQKPGQSPKLLIYSASNRYTGVPDRFTGSGSGTDFTLTISNMQSEDLADYFCQQYSSYPLTFGGGTKVEIKRTVAAPSVFIFPPSDEQLKSGTASVVCLLNNFYPREAKVQWKVDNALQSGNSQESVTEQDSKDSTYSLSSTLTLSKADYEKHKVYACEVTHQGLSSPVTKSFNRGE >1n7m_L QVQLLESGAELVKPGASVKLSCKASGYTFTSYWMHWVKQRPGRGLEWIGRIDPNSGGTKYNEKFKSKATLTVDKPSSTAYMQLSSLTSEDSAVYYCTRRDSDYWGAGTTVTVSSASTKGPSVFPLAPSSKSTSGGTAALGCLVKDYFPEPVTVSWNSGALTSGVHTFPAVLQSSGLYSLSSVVTVPSSSLGTQTYICNVNHKPSNTKVDKKVEPKS >1mcc_A PSALTQPPSASGSLGQSVTISCTGTSSDVGGYNYVSWYQQHAGKAPKVIIYEVNKRPSGVPDRFSGSKSGNTASLTVSGLQAEDEADYYCSSYEGSDNFVFGTGTKVTVLGQPKANPTVTLFPPSSEELQANKATLVCLISDFYPGAVTVAWKADGSPVKAGVETTKPSKQSNNKYAASSYLSLTPEQWKSHRSYSCQVTHEGSTVEKTVAPTECS >1mcc_B PSALTQPPSASGSLGQSVTISCTGTSSDVGGYNYVSWYQQHAGKAPKVIIYEVNKRPSGVPDRFSGSKSGNTASLTVSGLQAEDEADYYCSSYEGSDNFVFGTGTKVTVLGQPKANPTVTLFPPSSEELQANKATLVCLISDFYPGAVTVAWKADGSPVKAGVETTKPSKQSNNKYAASSYLSLTPEQWKSHRSYSCQVTHEGSTVEKTVAPTECS >3ijh_A DIVMTQSPSSLAVSAGEKVTMSCKSSQSLLNSRTRKNYLAWYQQKPGQSPKLLIYWASTRESGVPDRFTGSGSGTDFTLTISSVQAEDLAVYYCKQSNNLRTFGGGTKLEIKRADAAPTVSIFPPSSEQLTSGGASVVCFLNNFYPKDINVKWKIDGSERQNGVLNSWTDQDSKDSTYSMSSTLTLTKDEYERHNSYTCEATHKTSTSPIVKSFNRNEC >3ijh_C DIVMTQSPSSLAVSAGEKVTMSCKSSQSLLNSRTRKNYLAWYQQKPGQSPKLLIYWASTRESGVPDRFTGSGSGTDFTLTISSVQAEDLAVYYCKQSNNLRTFGGGTKLEIKRADAAPTVSIFPPSSEQLTSGGASVVCFLNNFYPKDINVKWKIDGSERQNGVLNSWTDQDSKDSTYSMSSTLTLTKDEYERHNSYTCEATHKTSTSPIVKSFNRNEC >4dcq_A LVLTQSSSASFSLGASAKLTCTLNSQHSTYTIEWYQQQPLKPPKYVMELKKDGSHSTGDGIPDRFSGSSSGADRYLLISNIQPEDEAIYICGVGDTIKEQFVYVFGGGTKVTVLGQPKSTPTLTVFPPSSEELKENKATLVCLISNFSPSGVTVAWKANGTPITQGVDTSNPTKKGNKFMASSFLHLTSDQWRSHQSFTCQVTHEGDTVEKSLSPALR >4dcq_B QIQLVQSGPELKKPGETVKISCKASGYTFTTYGMSWVKQAPGKGFEWMGWINTYSGVPTYVDDFKGRFAFSLETSASTAYLQINNLKNEDTAVYFCARGGNNFLWFAYWGQGTLVTVSAAKTTPPSVYPLAPGSAAQTNSMVTLGCLVKGYFPEPVTVTWNSGSLSSGVHTFPAVLQSDLYTLSSSVTVPSSTWPSQTVTCNVAHPASSTKVDKKIVP >4las_H EVQLQESGPSLVKPSQTLSLTCSVTGDSVTSGYWSWIRQFPGNKLDYMGYISYRGSTYYNPSLKSRISITRDTSKNQVYLQLKSVSSEDTATYYCSYFDSDDYAMEYWGQGTSVTVS >4las_L GGGGSQIVLTQSPAIMSASPGEKVTLTCSASSSVSSSHLYWYQQKPGSSPKLWIYSTSNLASGVPARFSGSGSGTSYSLTISSMEAEDAASYFCHQWSSFPFTFGSGTKLEIKRA >4lar_H EVQLQESGPSLVKPSQTLSLTCSVTGDSVTSGYWSWIRQFPGNKLDYMGYISYRGSTYYNPSLKSRISITRDTSKNQVYLQLKSVSSEDTATYYCSYFDSDDYAMEYWGQGTSVTVS >4lar_L SGGGGSQIVLTQSPAIMSASPGEKVTLTCSASSSVSSSHLYWYQQKPGSSPKLWIYSTSNLASGVPARFSGSGSGTSYSLTISSMEAEDAASYFCHQWSSFPFTFGSGTKLEIKR >4laq_H QTLSLTCSVTGDSVTSGYWSWIRQFPGNKLDYMGYISYRGSTYYNPSLKSRISITRDTSKNQVYLQLKSVSSEDTATYYCSYFDSDDYAMEYWGQGTSVTVSGG >4laq_L SQIVLTQSPAIMSASPGEKVTLTCSASSSVSSSHLYWYQQKPGSSPKLWIYSTSNLASGVPARFSGSGSGTSYSLTISSMEAEDAASYFCHQWSSFPFTFGSGTKLEIKRAPHHHHHH >1nj9_A QAVVTQESALTTSPGETVTLTCRSSTGTITSDNYANWVQEKPDHLFSGLIGVNNARPPGVPARFSGSLTGDKAVLTITGAQTEDEAIYFCALWYSNHWVFGGGTKLTVLGQPKSSPSVTLFPPSSEELETNKATLVCTITDFYPGVVTVDWKVDGTPVTQGMETTQPSKQSNNKYMASSYLTLTAREWERHSSYSCQVTHEGHTVEKSLSRA >1nj9_H EVQLQQSGPELVKPGASVKVSCKASGYSFTDYNMYWVKQNHGESLEWIAYIDPSNGDTFYNQKFQGKATVTLDKSSSTAFMHLNSLTSEDSAVYYCARGGGLFAFWGQGTLVTVSAKTTPPSVYPLAPGSAAQTNSMVTLGCLVKGYFPEPVTVTWNSGSLSSGVHTFPAVLQSDLYTLSSSVTVPSSPRPSETVTCNVAHPASSTKVDKKIVPR >3mo1_A RLDIQLTQSPSSLAMSGGQKVTMRCKSSQSLLNSRNERNYLAWYQQKPGQSPKLLVYFASIRESGVPDRFIGSGSGTDFTLTISSVQAEDLADYFCLQHYNTPWTFGGGTKLEIKRTVAAPSVFIFPPSDEQLKSGTASVVCLLNNFYPREAKVQWKVDNALQSGNSQESVTEQDSKDSTYSLSSTLTLSKADYEKHKVYACEVTHQGLSSPVTKSFNRGECGS >3mo1_B LQIQLVQSGPELKKPGETVKISCKASGYTFTDYSVHWVKQVPGKGLKWMGWINTETGEPTYADDFKGRFAFSLESSASTAYLEIHNLKNEDTATYFCALGWLHWGLGTTLTVSSASTKGPSVFPLAPSSKSTSGGTAALGCLVKDYFPEPVTVSWNSGALTSGVHTFPAVLQSSGLYSLSSVVTVPSSSLGTQTYICNVNHKPSNTKVDKRVEPKSCDK >4toy_H EGQLVQSGAELKKPGASVKISCKTSGYRFNFYHINWIRQTAGRGPEWMGWISPYSGDKNLAPAFQDRVIMTTDTEVPVTSFTSTGAAYMEIRNLKFDDTGTYFCAKGLLRDGSSTWLPYLWGQGTLLTVSSASTKGPSVFPLAPSSKSTSGGTAALGCLVKDYFPEPVTVSWNSGALTSGVHTFPAVLQSSGLYSLSSVVTVPSSSLGTQTYICNVNHKPSNTKVDKRVEPKSCDKGLEVLFQ >4toy_L QSVLTQSASVSGSLGQSVTISCTGPNSVCCSHKSISWYQWPPGRAPTLIIYEDNERAPGISPRFSGYKSYWSAYLTISDLRPEDETTYYCCSYTHNSGCVFGTGTKVSVLGQSKANPSVTLFPPSSEELQANKATLVCLISDFYPGAVTVAWKADSSPVKAGVETTTPSKQSNNKYAASSYLSLTPEQWKSHRSYSCQVTHEGSTVEKTVAPTECS >4laj_I EVQLVESGGGLVQPGGSLRLSCAASGFTLDYYSIGWFRQAPGKEREGVSCISDSDGRTYYADSVKGRFTISRDNAKNTVYLQMNSLKPEDTAVYYCATDCTVDPSLLYVMDYYGKGTQVTVSSAAAEQK >4laj_H EVQLVESGGGLVQPGGSLRLSCAASGFTLDYYSIGWFRQAPGKEREGVSCISDSDGRTYYADSVKGRFTISRDNAKNTVYLQMNSLKPEDTAVYYCATDCTVDPSLLYVMDYYGKGTQVTVSSAAAEQK >4py7_I QVQLVQSGGGVVQPGRSLRLSCAASEFTFRMYATHWVRQAPGKGLEWVALISYDGSNKYYADSVKGRFTISRDNSMNTVYLQMNTLRPEDTAVYYCARDLGGYFIRGIMDVWGQGTLVTVSSASTKGPSVFPLAPSSGGTAALGCLVKDYFPEPVTVSWNSGALTSGVHTFPAVLQSSGLYSLSSVVTVPSSSLGTQTYICNVNHKPSNTKVDKRVEPK >4py7_A QVQLVQSGGGVVQPGRSLRLSCAASEFTFRMYATHWVRQAPGKGLEWVALISYDGSNKYYADSVKGRFTISRDNSMNTVYLQMNTLRPEDTAVYYCARDLGGYFIRGIMDVWGQGTLVTVSSASTKGPSVFPLAPSSGGTAALGCLVKDYFPEPVTVSWNSGALTSGVHTFPAVLQSSGLYSLSSVVTVPSSSLGTQTYICNVNHKPSNTKVDKRVEPK >3eyf_A MEIVLTQSPATLSLSPGERATLSCRASQSVGGYLTWYQHKPGQAPRLLIFDASIRATGIPARFSGSGSGTDFTLTITRLEPEDFAVYYCQQRSMWPPVTFGQGTKLEIKRTVAAPSVFIFPPSDEQLKSGTASVVCLLNNFYPREAKVQWKVDNALQSGNSQESVTEQDSKDSTYSLSSTLTLSKADYEKHKVYACEVTHQGLSSPVTKSFNRGEC >3eyf_C MEIVLTQSPATLSLSPGERATLSCRASQSVGGYLTWYQHKPGQAPRLLIFDASIRATGIPARFSGSGSGTDFTLTITRLEPEDFAVYYCQQRSMWPPVTFGQGTKLEIKRTVAAPSVFIFPPSDEQLKSGTASVVCLLNNFYPREAKVQWKVDNALQSGNSQESVTEQDSKDSTYSLSSTLTLSKADYEKHKVYACEVTHQGLSSPVTKSFNRGEC >3h3b_C AAQPADIVLTQTPSSLPVSVGEKVTMTCKSSQTLLYSNNQKNYLAWYQQKPGQSPKLLISWAFTRKSGVPDRFTGSGSGTDFTLTIGSVKAEDLAVYYCQQYSNYPWTFGGGTRLEIKRGGGGSGGGGSGGGGSGGGGSEVQLQQSGPEVVKTGASVKISCKASGYSFTGYFINWVKKNSGKSPEWIGHISSSYATSTYNQKFKNKAAFTVDTSSSTAFMQLNSLTSEDSAVYYCVRSGNYEEYAMDYWGQGTSVTVSS >3h3b_C AAQPADIVLTQTPSSLPVSVGEKVTMTCKSSQTLLYSNNQKNYLAWYQQKPGQSPKLLISWAFTRKSGVPDRFTGSGSGTDFTLTIGSVKAEDLAVYYCQQYSNYPWTFGGGTRLEIKRGGGGSGGGGSGGGGSGGGGSEVQLQQSGPEVVKTGASVKISCKASGYSFTGYFINWVKKNSGKSPEWIGHISSSYATSTYNQKFKNKAAFTVDTSSSTAFMQLNSLTSEDSAVYYCVRSGNYEEYAMDYWGQGTSVTVSS >3h3b_D AAQPADIVLTQTPSSLPVSVGEKVTMTCKSSQTLLYSNNQKNYLAWYQQKPGQSPKLLISWAFTRKSGVPDRFTGSGSGTDFTLTIGSVKAEDLAVYYCQQYSNYPWTFGGGTRLEIKRGGGGSGGGGSGGGGSGGGGSEVQLQQSGPEVVKTGASVKISCKASGYSFTGYFINWVKKNSGKSPEWIGHISSSYATSTYNQKFKNKAAFTVDTSSSTAFMQLNSLTSEDSAVYYCVRSGNYEEYAMDYWGQGTSVTVSS >3h3b_D AAQPADIVLTQTPSSLPVSVGEKVTMTCKSSQTLLYSNNQKNYLAWYQQKPGQSPKLLISWAFTRKSGVPDRFTGSGSGTDFTLTIGSVKAEDLAVYYCQQYSNYPWTFGGGTRLEIKRGGGGSGGGGSGGGGSGGGGSEVQLQQSGPEVVKTGASVKISCKASGYSFTGYFINWVKKNSGKSPEWIGHISSSYATSTYNQKFKNKAAFTVDTSSSTAFMQLNSLTSEDSAVYYCVRSGNYEEYAMDYWGQGTSVTVSS >4py8_I QVQLVQSGGGVVQPGRSLRLSCAASEFTFRMYATHWVRQAPGKGLEWVALISYDGSNKYYADSVKGRFTISRDNSMNTVYLQMNTLRPEDTAVYYCARDLGGYFIRGIMDVWGQGTLVTVSSASTKGPSVFPLAPSSGGTAALGCLVKDYFPEPVTVSWNSGALTSGVHTFPAVLQSSGLYSLSSVVTVPSSSLGTQTYICNVNHKPSNTKVDKRVEPK >4py8_J ELQMTQSPSSVSASVGDRVTITCRASQGISSWLAWYQQKPGKAPKLLIYAASSLQSGVPSRFSGSGSGTDFTLTISSLQPEDFATYYCQQANSFPLTFGGGTKVEIKRTVAAPSVFIFPPSDEQLKSGTASVVCLLNNFYPREAKVQWKVDNALQSGNSQESVTEQDSKDSTYSLSSTLTLSKADYEKHKVYACEVTHQGLSSPVTKSFNRGEC >3eyo_A MEIVLTQSPATLSLSPGERATLSCRASQSVGGYLTWYQHKPGQAPRLLIFDASIRATGIPARFSGSGSGTDFTLTITRLEPEDFAVYYCQQRSMWPPVTFGQGTKLEIKRTVAAPSVFIFPPSDEQLKSGTASVVCLLNNFYPREAKVQWKVDNALQSGNSQESVTEQDSKDSTYSLSSTLTLSKADYEKHKVYACEVTHQGLSSPVTKSFNRGEC >3eyo_C MEIVLTQSPATLSLSPGERATLSCRASQSVGGYLTWYQHKPGQAPRLLIFDASIRATGIPARFSGSGSGTDFTLTITRLEPEDFAVYYCQQRSMWPPVTFGQGTKLEIKRTVAAPSVFIFPPSDEQLKSGTASVVCLLNNFYPREAKVQWKVDNALQSGNSQESVTEQDSKDSTYSLSSTLTLSKADYEKHKVYACEVTHQGLSSPVTKSFNRGEC >3kyk_H EVQLLESGGGLVQPGGSLRLSCAASGFTFSIYPMFWVRQAPGKGLEWVSWIGPSGGITKYADSVKGRFTISRDNSKNTLYLQMNSLRAEDTATYYCAREGHNDWYFDLWGRGTLVTVSSASTKGPSVFPLAPSSKSTSGGTAALGCLVKDYFPEPVTVSWNSGALTSGVHTFPAVLQSSGLYSLSSVVTVPSSSLGTQTYICNVNHKPSNTKVDKKVEPKSCDKTHT >3kyk_L DIQMTQSPGTLSLSPGERATLSCRASQSVSSYLAWYQQKPGQAPRLLIYDASNRATGIPARFSGSGSGTEFTLTISSLQSEDFAVYYCQQYDKWPLTFGGGTKVEIKRTVAAPSVFIFPPSDEQLKSGTASVVCLLNNFYPREAKVQWKVDNALQSGNSQESVTEQDSKDSTYSLSSTLTLSKADYEKHKVYACEVTHQGLSSPVTKSFNRGEC >3eys_H AVTLKESGPGILKPSQTLSLTCSFSGFSLSTSGMGVGWIRQPSGKGLEWLAHIWWDDDRSYNPSLKSQLTISKDAARNQVFLRITSVDTADTATYYCVRRAHTTVLGDWFAYWGQGTLVTVSAAKTTAPSVYPLAPVCGGTTGSSVTLGCLVKGYFPEPVTLTWNSGSLSSGVHTFPAVLQSDLYTLSSSVTVTSSTWPSQSITCNVAHPASSTKVDKKIEPR >3eys_L DVLMTQTPLSLPVSLGDQASISCRSSQSIVHSNGNTYLEWYLQKPGQSPKLLIYKVSNRFSGVPDRFSGSGSGTDFTLKISRVEAEDLGVYYCFQGSHVPLTFGAGTKLELKRADAAPTVSIFPPSSEQLTSGGASVVCFLNNFYPKDINVKWKIDGSERQNGVLNSWTDQDSKDSTYSMSSTLTLTKDEYERHNSYTCEATHKTSTSPIVKSFNRNEC >3eyq_C MEIVLTQSPATLSLSPGERATLSCRASQSVSSYLAWYQQKPGQAPRLLIYDASNRATGIPARFSGSGSGTDFTLTISSLEPEDFAVYYCQQRSNWPPITFGQGTRLEIKRTVAAPSVFIFPPSDEQLKSGTASVVCLLNNFYPREAKVQWKVDNALQSGNSQESVTEQDSKDSTYSLSSTLTLSKADYEKHKVYACEVTHQGLSSPVTKSFNRGEC >3eyq_D QVQLVESGGGVVQPGRSLRLSCAASGFTFSSYGMHWVRQAPGKGLEWVAVISYDGSNKYYADSVKGRFTISRDNSKNTLYLQMNSLRAEDTAVYYCAKDGKCGGGSCYSGLLDYWGQGTLVTVSSASFKGPSVFPLAPSSKSTSGGTAALGCLVKDYFPEPVTVSWNSGALTSGVHTFPAVLQSSGLYSLSSVVTVPSSSLGTQTYICNVNHKPSNTKVDKKVEPKSCDKTHTGLEHHHHHH >3h3p_I GSQVQLVQSGAEVKRPGSSVTVSCKASGGSFSTYALSWVRQAPGRGLEWMGGVIPLLTITNYAPRFQGRITITADRSTSTAYLELNSLRPEDTAVYYCAREGTTGAGWLGKPIGAFAHWGQGTLVTVSSLEHHHHHH >3h3p_H GSQVQLVQSGAEVKRPGSSVTVSCKASGGSFSTYALSWVRQAPGRGLEWMGGVIPLLTITNYAPRFQGRITITADRSTSTAYLELNSLRPEDTAVYYCAREGTTGAGWLGKPIGAFAHWGQGTLVTVSSLEHHHHHH >2h1p_H DVKLVESGGGLVKLGGSLKLSCAASGFTFSSYFLSWVRQTPEKRLELVATINSNGDKTYHPDTMKGRFTISRDNAKNTLYLQMSSLKSEDTALYYCARRDSSASLYFDYWGQGTTLTVSSAKTTPPSVYPLAPGSAAQTNSMVTLGCLVKGYFPEPVTVTWNSGSLSSGVHTFPAVLQSDLYTLSSSVTVPSSTWPSETVTCNVAHPASSTKVDKKIVPR >2h1p_L DVVMTQTPLSLPVSLGDPASISCRSSQSLVHSNGNTYLHWYLQKPGQSPKLLIYKVSNRFSGVPDKFSGSGSGTDFTLKISRVEAEDQGVYFCSQSTHVPWTFGGGTKLEIKRADAAPTVSIFPPSSEQLTSGGASVVCFLNNFYPKDINVKWKIDGSERQNGVLNSWTDEDSKDSTYSMSSTLTLTKDEYERHNSYTCEATHKTSTSPIVKSFNRNEC >3eyu_H QVTLKESGPGILKPSQTLSLTCSFSGFSLSTSGMGVGWIRQPSGKGLEWLAHIWWDDDRSYNPSLKSQLTISKDAARNQVFLRITSVDTADTATYYCVRRAHTTVLGDWFAYWGQGTLVTVSAAKTTAPSVYPLAPVCGGTTGSSVTLGCLVKGYFPEPVTLTWNSGSLSSGVHTFPAVLQSDLYTLSSSVTVTSSTWPSQSITCNVAHPASSTKVDKKIEPRGPT >3eyu_L DVLMTQTPLSLPVSLGDQASISCRSSQSIVHSNGNTYLEWYLQKPGQSPKLLIYKVSNRFSGVPDRFSGSGSGTDFTLKISRVEAEDLGVYYCFQGSHVPLTFGAGTKLELKRADAAPTVSIFPPSSEQLTSGGASVVCFLNNFYPKDINVKWKIDGSERQNGVLNSWTDQDSKDSTYSMSSTLTLTKDEYERHNSYTCEATHKTSTSPIVKSFNRNEC >4b41_A EVQLVESGGGLVQPGGSLRLSCAASRSIISNNAMGWYRQAPGKQRELVARISSGGRTTYADSVKGRFTISRDNAKTTVYLQMNSLKPEDTAVYYCNAASLVRGPLDHWGQGTQVTVSS >4b41_B EVQLVESGGGLVQPGGSLRLSCAASRSIISNNAMGWYRQAPGKQRELVARISSGGRTTYADSVKGRFTISRDNAKTTVYLQMNSLKPEDTAVYYCNAASLVRGPLDHWGQGTQVTVSS >4dqo_H EEQLVESGGGVVQPGGSLRLSCLASGFTFHKYGMHWVRQAPGKGLEWVALISDDGMRKYHSDSMWGRVTISRDNSKNTLYLQFSSLKVEDTAMFFCAREAGGPIWHDDVKYYDFNDGYYNYHYMDVWGKGTTVTVSSASTKGPSVFPLAPSSKSTSGGTAALGCLVKDYFPEPVTVSWNSGALTSGVHTFPAVLQSSGLYSLSSVVTVPSSSLGTQTYICNVNHKPSNTKVDKRVEPKSCGLEVLF >4dqo_L QSALTQPASVSGSPGQTITISCQGTSSDVGGFDSVSWYQQSPGKAPKVMVFDVSHRPSGISNRFSGSKSGNTASLTISGLHIEDEGDYFCSSLTDRSHRIFGGGTKVTVLGQPKAAPSVTLFPPSSEELQANKATLVCLISDFYPGAVTVAWKADSSPVKAGVETTTPSKQSNNKYAASSYLSLTPEQWKSHKSYSCQVTHEGSTVEKTVAPTECS >2v7h_A DIQMTQTTSSLSASLGDRVTISCRASQDINNYLNWYQQKPDGTVKILIYYTSNLHSGVPSRFSGSGSGTDYSLTISNLEQEDIATYFCQQGNTLPRTFGGGTKLEIKRADAAPTVSIFPPSSEQLTSGGASVVCFLNNFYPKDINVKWKIDGSARQNGVLNSWTDQDSKDSTYSMSSTLTLTKDEYERHNSYTCEATHKTSTSPIVKSFNRNEC >2v7h_H QAQLQQSGAELMKPGASVKISCKATGYTFSNYWIDWIKQRPGHGLEWIGEILPGSGSTNYNEKFRGKATFTADTSSNTAYMQLSSLTSEDSAVYYCTRRGYWAYDFDYWGQGTTLTVSSAKTTPPSVYPLAPGSAAQTNSMVTLGCLVKGYFPEPVTVTWNSGSLSSGVHTFPAVLQSDLYTLSSSVTVPSSPRPSETVTCNVAHPASSTKVDKKIVPRD >1fj1_A DIQMTQSPSSLSATLGGKVTITCKASQDINKYIAWYQHKPGKGPRLLIHYTSTLQPGNPSRFSGSGSGRDYSFSISNLEAEDIAIYYCLQYDNLQRTFGGGTKVEIKRADAAPTVSIFPPSSEQLTSGGASVVCFLNNFYPKDINVKWKIDGSERQNGVLNSWTDQDSKDSTYSMSSTLTLTKDEYERHNSYTCEATHKTSTSPIVKSFNRNE >1fj1_C DIQMTQSPSSLSATLGGKVTITCKASQDINKYIAWYQHKPGKGPRLLIHYTSTLQPGNPSRFSGSGSGRDYSFSISNLEAEDIAIYYCLQYDNLQRTFGGGTKVEIKRADAAPTVSIFPPSSEQLTSGGASVVCFLNNFYPKDINVKWKIDGSERQNGVLNSWTDQDSKDSTYSMSSTLTLTKDEYERHNSYTCEATHKTSTSPIVKSFNRNE >1ynl_H RVQLLESGAELMKPGASVQISCKATGYTFSFYWIEWVKERPGHGLEWIGEILPGSGRTNYREKFKGKATFTADTSSNTAYMQLSSLTSEDSAVYYCTRGYSSMDYWGQGTSVTVSAAKTTPPSVYPLAPGCGDTTGSSVTLGCLVKGYFPESVTVTWNSGSLSSSVHTFPALLQSGLYTMSSSVTVPSSTWPSQTVTCSVAHPASSTTVDKKLEPSGPI >1ynl_L ELVMTQSPLSLPVSLGDQASISCRPSQSLVHSNGNTYLHWYLQKPGQSPKLLIYRVSNRFSGVPDRFSGSGSGTAFTLKISRVEAEDLGVYFCSQGTHVPYTFGGGTKLELKRADAAPTVSIFPPSSEQLTSGGASVVCFLNNFYPKDINVKWKIDGSERQNGVLNSWTDQDSKDSTYSMSSTLTLTKDEYERHNSYTCEATHKTSTSPIVKSFNRNEC >2v7n_A DIVLTQSPATLSLSPGERATLSCRASQSVSSNYLAWYQQKPGQAPRLLIYDSSSRATGVPARFSGSGSGTDFTLTISSLEPEDFAVYYCHQYSDISPTFGQGTKVEIKRTVAAPSVFIFPPSDEQLKSGTASVVCLLNNFYPREAKVQWKVDNALQSGNSQESVTEQDSKDSTYSLSSTLTLSKADYEKHKVYACEVTHQGLSSPVTKSFNRGEA >2v7n_C DIVLTQSPATLSLSPGERATLSCRASQSVSSNYLAWYQQKPGQAPRLLIYDSSSRATGVPARFSGSGSGTDFTLTISSLEPEDFAVYYCHQYSDISPTFGQGTKVEIKRTVAAPSVFIFPPSDEQLKSGTASVVCLLNNFYPREAKVQWKVDNALQSGNSQESVTEQDSKDSTYSLSSTLTLSKADYEKHKVYACEVTHQGLSSPVTKSFNRGEA >1il1_A QLQQSGAELVRSGASVKLSCATSDFNIKDYYIHWVRQRPEQGLEWIGWLDPENGDTESAPKFQGKATMTADTSSNTAYLQLSSLTSEASAVYYCNAISTTRDYYALDYWGQGTSVTVSSAKTTPPSVYPLAPGSAAQTNSMVTLGCLVKGYFPEPVTVTWNSGSLSSGVHTFPAVLQSDLYTLSSSVTVPSSTWPSETVTCNVAHPASSTKVDKKIVPR >1il1_B DIVMSQSPSSLAVSVGEKVTMSCKSSQSLLYSRNQMNYLSWYQQKPGQSPKLLIYWASTRESGVPDRFTGSGSGTDFTLTISSVKAEDLAVYYCQQYYHYRTFGGGTRLEIRRADAAPTVSIFPPSSEQLTSGGASVVCFLNNFYPKDINVKWKIDGSERQNGVLNSWTDQDSKDSTYSMSSTLTLTKDEYERHNSYTCEATHKTSTSPIVKSFNRNEC >3mod_H RITLKESGPPLVKPTQTLTLTCSFSGFSLSDFGVGVGWIRQPPGKALEWLAIIYSDDDKRYSPSLNTRLTITKDTSKNQVVLVMTRVSPVDTATYFCAHRRGPTTLFGVPIARGPVNAMDVWGQGITVTISSTSTKGPSVFPLAPSSKSTSGGTAALGCLVKDYFPEPVTVSWNSGALTSGVHTFPAVLQSSGLYSLSSVVTVPSSSLGTQTYICNVNHKPSNTKVDKRVEPKSCDK >3mod_L ALQLTQSPSSLSASVGDRITITCRASQGVTSALAWYRQKPGSPPQLLIYDASSLESGVPSRFSGSGSGTEFTLTISTLRPEDFATYYCQQLHFYPHTFGGGTRVDVRRTVAAPSVFIFPPSDEQLKSGTASVVCLLNNFYPREAKVQWKVDNALQSGNSQESVTEQDSKDSTYSLSSTLTLSKADYEKHKVYACEVTHQGLSSPVTKSFNRGEC >3moa_H RITLKESGPPLVKPTQTLTLTCSFSGFSLSDFGVGVGWIRQPPGKALEWLAIIYSDDDKRYSPSLNTRLTITKDTSKNQVVLVMTRVSPVDTATYFCAHRRGPTTLFGVPIARGPVNAMDVWGQGITVTISSTSTKGPSVFPLAPSSKSTSGGTAALGCLVKDYFPEPVTVSWNSGALTSGVHTFPAVLQSSGLYSLSSVVTVPSSSLGTQTYICNVNHKPSNTKVDKRVEPKSCDK >3moa_L ALQLTQSPSSLSASVGDRITITCRASQGVTSALAWYRQKPGSPPQLLIYDASSLESGVPSRFSGSGSGTEFTLTISTLRPEDFATYYCQQLHFYPHTFGGGTRVDVRRTVAAPSVFIFPPSDEQLKSGTASVVCLLNNFYPREAKVQWKVDNALQSGNSQESVTEQDSKDSTYSLSSTLTLSKADYEKHKVYACEVTHQGLSSPVTKSFNRGEC >3qrg_H EITLKESGPTLVKPTQTLTLTCTFSGFSLSTSGMGVSWIRQPPGKALEWLAHIYWDDDKRYNPSLKSRLTITKDTSKNQVVLTMTNMDPVDTATYYCARLYGFTYGFAYWGQGTLVTVSSASTKGPSVFPLAPSSKSTSGGTAALGCLVKDYFPEPVTVSWNSGALTSGVHTFPAVLQSSGLYSLSSVVTVPSSSLGTQTYICNVNHKPSNTKVDKKAEPKSCDKTH >3qrg_L DIVMTQSPDSLAVSLGERATINCRASQSVDYNGISYMHWYQQKPGQPPKLLIYAASNPESGVPDRFSGSGSGTDFTLTISSLQAEDVAVYYCQQIIEDPWTFGQGTKVEIKRTVAAPSVFIFPPSDEQLKSGTASVVCLLNNFYPREAKVQWKVDNALQSGNSQESVTEQDSKDSTYSLSSTLTLSKADYEKHKVYACEVTHQGLSSPVTKSFNRGEC >3mob_H RITLKESGPPLVKPTQTLTLTCSFSGFSLSDFGVGVGWIRQPPGKALEWLAIIYSDDDKRYSPSLNTRLTITKDTSKNQVVLVMTRVSPVDTATYFCAHRRGPTTLFGVPIARGPVNAMDVWGQGITVTISSTSTKGPSVFPLAPSSKSTSGGTAALGCLVKDYFPEPVTVSWNSGALTSGVHTFPAVLQSSGLYSLSSVVTVPSSSLGTQTYICNVNHKPSNTKVDKRVEPKSCDK >3mob_L ALQLTQSPSSLSASVGDRITITCRASQGVTSALAWYRQKPGSPPQLLIYDASSLESGVPSRFSGSGSGTEFTLTISTLRPEDFATYYCQQLHFYPHTFGGGTRVDVRRTVAAPSVFIFPPSDEQLKSGTASVVCLLNNFYPREAKVQWKVDNALQSGNSQESVTEQDSKDSTYSLSSTLTLSKADYEKHKVYACEVTHQGLSSPVTKSFNRGEC >1jfq_H EVQLQQSGVELVRAGSSVKMSCKASGYTFTSNGINWVKQRPGQGLEWIGYNNPGNGYITYNEKFKGKTTLTVDKSSNTAYMQLRSLTSEDSAVYFCARSEYYGGSYKFDYWGQGTTLTVSSAGTTPPSVYPLAPGSAAQTNSMVTLGCLVKGYFPEPVTVTWNSGSLSSGVHTFPAVLQSDLYTLSSSVTVPSSPRPSETVTCNVAHPASSTKVDKKIVPRD >1jfq_L DIQMTQIPSSLSASLGDRVSISCRASQDINNFLNWYQQKPDGTIKLLIYFTSRSQSGVPSRFSGSGSGTDYSLTISNLEQEDIATYFCQQGNALPRTFGGGTKLEIKRADAAPTVSIFPPSSEQLTSGGASVVCFLNNFYPKDINVKWKIDGSERQNGVLNSWTDQDSKDSTYSMSSTLTLTKDEYERHNSYTCEATHKTSTSPIVKSFNRNECA >2d7t_H QVQLVQSGAEVKKPGASVKVSCKASGYTFTGNYMHWVRQAPGQGLEYMGWINPKSGDTNYAQKFQGRVTMTRDTSISTVYMEVRRLRSDDTAVYYCATGWWGMDVWGQGTLVTVSSASEQKLISKEDLNGSAGHHHHHH >2d7t_L DIVMTQSPSSLSASVGDRVTITCRASQNINNYLHWYQHEPGKAPKLLIYAASNLQGGVTSRFSGSGSGTDFTLTISTLQPEDFATYYCLQTHAYPLTFGGGTKVDIKRAAHHHHHH >1dvf_A DIVLTQSPASLSASVGETVTITCRASGNIHNYLAWYQQKQGKSPQLLVYYTTTLADGVPSRFSGSGSGTQYSLKINSLQPEDFGSYYCQHFWSTPRTFGGGTKLEIKR >1dvf_C DIQLTQSPSSLSASLGDRVTISCRASQDISNYLNWYQQKPDGTVKLLIYYTSRLHSGVPSRFSGSGSGTDYSLTISNLEQEDIATYFCQQGNTLPWTFGGGTKLEIK >1jp5_A DILMTQTPLYLPVSLGDQASISCRSSQTIVHNNGNTYLEWYLQKPGQSPQLLIYKVSNRFSGVPDRFSGSGSGTDFTLKISRVEAEDLGIYYCFQGSHFPPTFGGGTKLEIKGGGGSGGGGSGGGGSEVQLQQSGPELKKPGETVKISCKATNYAFTDYSMHWVKQAPGGDLKYVGWINTETDEPTFADDFKGRFAFSLDTSTSTAFLQINNLKNEDTATYFCVRDRHDYGEIFTYWGQGTTVTVSS >1jp5_A DILMTQTPLYLPVSLGDQASISCRSSQTIVHNNGNTYLEWYLQKPGQSPQLLIYKVSNRFSGVPDRFSGSGSGTDFTLKISRVEAEDLGIYYCFQGSHFPPTFGGGTKLEIKGGGGSGGGGSGGGGSEVQLQQSGPELKKPGETVKISCKATNYAFTDYSMHWVKQAPGGDLKYVGWINTETDEPTFADDFKGRFAFSLDTSTSTAFLQINNLKNEDTATYFCVRDRHDYGEIFTYWGQGTTVTVSS >1jp5_B DILMTQTPLYLPVSLGDQASISCRSSQTIVHNNGNTYLEWYLQKPGQSPQLLIYKVSNRFSGVPDRFSGSGSGTDFTLKISRVEAEDLGIYYCFQGSHFPPTFGGGTKLEIKGGGGSGGGGSGGGGSEVQLQQSGPELKKPGETVKISCKATNYAFTDYSMHWVKQAPGGDLKYVGWINTETDEPTFADDFKGRFAFSLDTSTSTAFLQINNLKNEDTATYFCVRDRHDYGEIFTYWGQGTTVTVSS >1jp5_B DILMTQTPLYLPVSLGDQASISCRSSQTIVHNNGNTYLEWYLQKPGQSPQLLIYKVSNRFSGVPDRFSGSGSGTDFTLKISRVEAEDLGIYYCFQGSHFPPTFGGGTKLEIKGGGGSGGGGSGGGGSEVQLQQSGPELKKPGETVKISCKATNYAFTDYSMHWVKQAPGGDLKYVGWINTETDEPTFADDFKGRFAFSLDTSTSTAFLQINNLKNEDTATYFCVRDRHDYGEIFTYWGQGTTVTVSS >4jan_A QVQLQESGPGVVKSSETLSLTCTVSGGSMGGTYWSWLRLSPGKGLEWIGYIFHTGETNYSPSLKGRVSISVDTSEDQFSLRLRSVTAADTAVYFCASLPRGQLVNAYFRNWGRGSLVSVTAASTKGPSVFPLAPSSKSTSGGTAALGCLVKDYFPEPVTVSWNSGALTSGVHTFPAVLQSSGLYSLSSVVTVPSSSLGTQTYICNVNHKPSNTKVDKKVEPKSCDK >4jan_H QVQLQESGPGVVKSSETLSLTCTVSGGSMGGTYWSWLRLSPGKGLEWIGYIFHTGETNYSPSLKGRVSISVDTSEDQFSLRLRSVTAADTAVYFCASLPRGQLVNAYFRNWGRGSLVSVTAASTKGPSVFPLAPSSKSTSGGTAALGCLVKDYFPEPVTVSWNSGALTSGVHTFPAVLQSSGLYSLSSVVTVPSSSLGTQTYICNVNHKPSNTKVDKKVEPKSCDK >4h0g_A MEIQLQQSGPELVKPGASVKISCKASGYSFTDYIMLWVKQSHGKSLEWIGNINPYYGSTSYNLKFKGKATLTVDKSSSTAYMQLNSLTSEDSAVYYCARKNYYGSSLDYWGQGTTLTVSSAKTTGGGGSGGGGSGGGGSDVVMTQTPFSLPVSLGDQASISCRSSQSLVHSNGNTYLHWYLQKPGQSPKLLIYKVSNRFSGVPDRFSGSGSGTDFTLKISRVEAEDLGVYFCSQSTHVPYTFGGGTKLEIK >4h0g_A MEIQLQQSGPELVKPGASVKISCKASGYSFTDYIMLWVKQSHGKSLEWIGNINPYYGSTSYNLKFKGKATLTVDKSSSTAYMQLNSLTSEDSAVYYCARKNYYGSSLDYWGQGTTLTVSSAKTTGGGGSGGGGSGGGGSDVVMTQTPFSLPVSLGDQASISCRSSQSLVHSNGNTYLHWYLQKPGQSPKLLIYKVSNRFSGVPDRFSGSGSGTDFTLKISRVEAEDLGVYFCSQSTHVPYTFGGGTKLEIK >4cdg_C MKYLLPTAAAGLLLLAAQPAMAQVQLQESGGGLVQAGGSLRLSCAASGIWFSINNMAWYRQTPGKQRERIAIITSAGTTNYVDSVKGRFTISRDDAKNTMYLQMNSLIPEDTAVYYCNLVADYDMGFQSFWGRGTQVTVSSHHHHHH >4cdg_D MKYLLPTAAAGLLLLAAQPAMAQVQLQESGGGLVQAGGSLRLSCAASGIWFSINNMAWYRQTPGKQRERIAIITSAGTTNYVDSVKGRFTISRDDAKNTMYLQMNSLIPEDTAVYYCNLVADYDMGFQSFWGRGTQVTVSSHHHHHH >4h0i_A MEIQLQQSGPELVKPGASVKISCKASGYSFTDYIMLWVKQSHGKSLEWIGNINPYYGSTSYNLKFKGKATLTVDKSSSTAYMQLNSLTSEDSAVYYCARKNYYGSSLDYWGQGTTLTVSSAKTTGGGGSGGGGSGGGGSDVVMTQTPFSLPVSLGDQASISCRSSQSLVHSNGNTYLHWYLQKPGQSPKLLIYKVSNRFSGVPDRFSGSGSGTDFTLKISRVEAEDLGVYFCSQSTHVPYTFGGGTKLEIK >4h0i_A MEIQLQQSGPELVKPGASVKISCKASGYSFTDYIMLWVKQSHGKSLEWIGNINPYYGSTSYNLKFKGKATLTVDKSSSTAYMQLNSLTSEDSAVYYCARKNYYGSSLDYWGQGTTLTVSSAKTTGGGGSGGGGSGGGGSDVVMTQTPFSLPVSLGDQASISCRSSQSLVHSNGNTYLHWYLQKPGQSPKLLIYKVSNRFSGVPDRFSGSGSGTDFTLKISRVEAEDLGVYFCSQSTHVPYTFGGGTKLEIK >2rhe_A ESVLTQPPSASGTPGQRVTISCTGSATDIGSNSVIWYQQVPGKAPKLLIYYNDLLPSGVSDRFSASKSGTSASLAISGLESEDEADYYCAAWNDSLDEPGFGGGTKLTVLGQPK >12e8_H EVQLQQSGAEVVRSGASVKLSCTASGFNIKDYYIHWVKQRPEKGLEWIGWIDPEIGDTEYVPKFQGKATMTADTSSNTAYLQLSSLTSEDTAVYYCNAGHDYDRGRFPYWGQGTLVTVSAAKTTPPSVYPLAPGSAAQTNSMVTLGCLVKGYFPEPVTVTWNSGSLSSGVHTFPAVLQSDLYTLSSSVTVPSSTWPSETVTCNVAHPASSTKVDKKIVPRD >12e8_M DIVMTQSQKFMSTSVGDRVSITCKASQNVGTAVAWYQQKPGQSPKLMIYSASNRYTGVPDRFTGSGSGTDFTLTISNMQSEDLADYFCQQYSSYPLTFGAGTKLELKRADAAPTVSIFPPSSEQLTSGGASVVCFLNNFYPKDINVKWKIDGSERQNGVLNSATDQDSKDSTYSMSSTLTLTKDEYERHNSYTCEATHKTSTSPIVKSFNRNEC >1tji_H RITLKESGPPLVKPTQTLTLTCSFSGFSLSDFGVGVGWIRQPPGKALEWLAIIYSDDDKRYSPSLNTRLTITKDTSKNQVVLVMTRVSPVDTATYFCAHRRGPTTLFGVPIARGPVNAMDVWGQGITVTISSTSTKGPSVFPLAPSSKSTSGGTAALGCLVKDYFPEPVTVSWNSGALTSGVHTFPAVLQSSGLYSLSSVVTVPSSSLGTQTYICNVNHKPSNTKVDKKVEPKSCDK >1tji_L ALQLTQSPSSLSASVGDRITITCRASQGVTSALAWYRQKPGSPPQLLIYDASSLESGVPSRFSGSGSGTEFTLTISTLRPEDFATYYCQQLHFYPHTFGGGTRVDVRRTVAAPSVFIFPPSDEQLKSGTASVVCLLNNFYPREAKVQWKVDNALQSGNSQESVTEQDSKDSTYSLSSTLTLSKADYEKHKVYACEVTHQGLSSPVTKSFNRGEC >1tjh_H RITLKESGPPLVKPTQTLTLTCSFSGFSLSDFGVGVGWIRQPPGKALEWLAIIYSDDDKRYSPSLNTRLTITKDTSKNQVVLVMTRVSPVDTATYFCAHRRGPTTLFGVPIARGPVNAMDVWGQGITVTISSTSTKGPSVFPLAPSSKSTSGGTAALGCLVKDYFPEPVTVSWNSGALTSGVHTFPAVLQSSGLYSLSSVVTVPSSSLGTQTYICNVNHKPSNTKVDKKVEPKSCDK >1tjh_L ALQLTQSPSSLSASVGDRITITCRASQGVTSALAWYRQKPGSPPQLLIYDASSLESGVPSRFSGSGSGTEFTLTISTLRPEDFATYYCQQLHFYPHTFGGGTRVDVRRTVAAPSVFIFPPSDEQLKSGTASVVCLLNNFYPREAKVQWKVDNALQSGNSQESVTEQDSKDSTYSLSSTLTLSKADYEKHKVYACEVTHQGLSSPVTKSFNRGEC >4k9e_H SEVQLVESGGGLVQPGGSLRLSCAASGFNISVYMMHWVRQAPGKGLEWVASIYPYSGYTYYADSVKGRFTISADTSKNTAYLQMNSLRAEDTAVYYCARYVYHALDYWGQGTLVTVSSASTKGPSVFPLAPSSKSTSGGTAALGCLVKDYFPEPVTVSWNSGALTSGVHTFPAVLQSSGLYSLSSVVTVPSSSLGTQTYICNVNHKPSNTKVDKKVEPKSC >4k9e_L DIQMTQSPSSLSASVGDRVTITCRASQRGLRNVAVAWYQQKPGKAPKLLIYSASSLYSGVPSRFSGSRSGTDFTLTISSLQPEDFATYYCQQWAVHSLITFGQGTKVEIKRTVAAPSVFIFPPSDSQLKSGTASVVCLLNNFYPREAKVQWKVDNALQSGNSQESVTEQDSKDSTYSLSSTLTLSKADYEKHKVYACEVTHQGLSSPVTKSFNRGECGGSDYKDDDDK >43c9_A DVVMTQTPSSLAMSVGQKVTMSCKSSQSLLNISNQKNYLAWYQQKPGQSPKLLVYFASTRESGVPDRFIGSGSGTDFTLTISSVQAEDQADYFCQQHYRAPRTFGGGTKLEIK >43c9_C DVVMTQTPSSLAMSVGQKVTMSCKSSQSLLNISNQKNYLAWYQQKPGQSPKLLVYFASTRESGVPDRFIGSGSGTDFTLTISSVQAEDQADYFCQQHYRAPRTFGGGTKLEIK >3ck0_H QVQLQESGGGLVQPRGSLKLSCAASGFTFNTDAMNWVRQAPGKGLEWVARIRSKGFNFATYYADSVRDRFTISRDDSQSMLYLQMNNLKTEDTGIYYCVRGRDGEAMDYWGQGTTLTVSSAKTTPPSVYPLAPGSAAQTNSMVTLGCLVKGYFPEPVTVTWNSGSLSSGVHTFPAVLQSDLYTLSSSVTVPSSPRPSETVTCNVAHPASSTKVDKKIVN >3ck0_L DIQLTQSPSSLAVSAGEKVTMNCKSSQNLLHSITRKNYLAWYRQKPGQSPKLLIYWASTRGSGVPDRFTGSGSGTDFTLTISSVQAEDLAVYYCKQSYNLYTFGGGTKLEIKRADAAPTVSIFPPSSEQLTSGGASVVCFLNNFYPKDINVKWKIDGSERQNGVLNSWTDQDSKDSTYSMSSTLTLTKDEYERHNSYTCEATHKTSTSPIVKSFNR >1tjg_H RITLKESGPPLVKPTQTLTLTCSFSGFSLSDFGVGVGWIRQPPGKALEWLAIIYSDDDKRYSPSLNTRLTITKDTSKNQVVLVMTRVSPVDTATYFCAHRRGPTTLFGVPIARGPVNAMDVWGQGITVTISSTSTKGPSVFPLAPSSKSTSGGTAALGCLVKDYFPEPVTVSWNSGALTSGVHTFPAVLQSSGLYSLSSVVTVPSSSLGTQTYICNVNHKPSNTKVDKKVEPKSCDK >1tjg_L ALQLTQSPSSLSASVGDRITITCRASQGVTSALAWYRQKPGSPPQLLIYDASSLESGVPSRFSGSGSGTEFTLTISTLRPEDFATYYCQQLHFYPHTFGGGTRVDVRRTVAAPSVFIFPPSDEQLKSGTASVVCLLNNFYPREAKVQWKVDNALQSGNSQESVTEQDSKDSTYSLSSTLTLSKADYEKHKVYACEVTHQGLSSPVTKSFNRGEC >3uyr_H EVKLVESEGGLVQPGSSMKLSCTASGFTFSDYYMAWVRQVPEKGLEWVANINYDGSSTYYLDSLKGRFIISRDIAKNILYLQMSSLRCEDTATYYCARLTNGYLDVWGAGTTVTVSSAKTTPPSVYPLAPGCGDTTGSSVTLGCLVKGYFPESVTVTWNSGSLSSSVHTFPALLESGLYTMSSSVTVPSSTWPSQTVTCSVAHPASSTTVDKKLEP >3uyr_L DVVMTQTPLSLPVSLGDQASISCRSSQSLVHSNGNTYLHWYLQKPGQSPNLLIYKVSNRFSGVPDRFSGSGSGTDFTLKISRVEAEDLGVYFCSQSTHVPTFGGGTKLEIKRADAAPTVSIFPPSSEQLTSGGASVVCFLNNFYPKDINVKWKIDGSERQNGVLNSWTDQDSKDSTYSMSSTLTLTKDEYERHNSYTCEATHKTSTSPIVKSFNRNEC >3uyp_A EVKLLEQSGAELVKPGASVRLSCTASGFNIKDTYMSWVKQRPEQGLEWIGRIDPANGDTKYDPKFQGKATITADTSSNTAYLHLSSLTSGDTAVYYCSRGWEGFAYWGQGTLVTVSAGGGGSGGGGSGGGGSELVMTQTPASLAVSLGQRATISCRASENVDRYGNSFMHWYQQKAGQPPKLLIYRASNLESGIPARFSGSGSRTDFTLTINPVEADDVATYFCQRSNEVPWTFGGGTKLEIKRPLEHHHHHH >3uyp_A EVKLLEQSGAELVKPGASVRLSCTASGFNIKDTYMSWVKQRPEQGLEWIGRIDPANGDTKYDPKFQGKATITADTSSNTAYLHLSSLTSGDTAVYYCSRGWEGFAYWGQGTLVTVSAGGGGSGGGGSGGGGSELVMTQTPASLAVSLGQRATISCRASENVDRYGNSFMHWYQQKAGQPPKLLIYRASNLESGIPARFSGSGSRTDFTLTINPVEADDVATYFCQRSNEVPWTFGGGTKLEIKRPLEHHHHHH >2x1q_A QVQLQESGGGLVQPGGSLRLSCAASGRTFSNYRMGWFRQAPGKEREFVATISQSGAATAYADSVKGRFTFSRDNAKNLLYLEMLSLEPEDTAVYYCAASSRVFYTEVLQTTTGYDYWGQGTQVTVSS >2x1q_B QVQLQESGGGLVQPGGSLRLSCAASGRTFSNYRMGWFRQAPGKEREFVATISQSGAATAYADSVKGRFTFSRDNAKNLLYLEMLSLEPEDTAVYYCAASSRVFYTEVLQTTTGYDYWGQGTQVTVSS >2x1p_A QVQLQESGGGLVQAGGSLRLSCAASGRTFTSFAMGWFRQAPGKEREFVASISRSGTLTRYADSAKGRFTISVDNAKNTVSLQMDNLNPDDTAVYYCAADLHRPYGPGTQRSDEYDSWGQGTQVTVSS >2x1p_C QVQLQESGGGLVQAGGSLRLSCAASGRTFTSFAMGWFRQAPGKEREFVASISRSGTLTRYADSAKGRFTISVDNAKNTVSLQMDNLNPDDTAVYYCAADLHRPYGPGTQRSDEYDSWGQGTQVTVSS >3det_C VRLLESGGGLVQPGGSLKLSCAASGFDYSRYWMSWVRQAPGKGLKWIGEINPVSSTINYTPSLKDKFIISRDNAKDTLYLQISKVRSEDTALYYCARLYYGYGYWYFDVWGAGTTVTVSSAKTTPPSVYPLAPGSAAAAASMVTLGCLVKGYFPEPVTVTWNSGSLAAGVHTFPAVLQAALYTLSSSVTVPSSSWPSETVTCNVAHPASSTKVDKKIVPRA >3det_E VRLLESGGGLVQPGGSLKLSCAASGFDYSRYWMSWVRQAPGKGLKWIGEINPVSSTINYTPSLKDKFIISRDNAKDTLYLQISKVRSEDTALYYCARLYYGYGYWYFDVWGAGTTVTVSSAKTTPPSVYPLAPGSAAAAASMVTLGCLVKGYFPEPVTVTWNSGSLAAGVHTFPAVLQAALYTLSSSVTVPSSSWPSETVTCNVAHPASSTKVDKKIVPRA >1nld_H QVKLQQSGPGLVQPSQSLSITCTVSGFSLTCYGVHWVRQSPGKGLEWLGVIWSGGDTDYNAAFISRLSITKDNSKSQVFFKMNSLQPNDRAIYYCARRGGDFWGQGTTVTVSSASTTAPSVYPLAPVSGDQTNSSVTLGCLVKGYFPEPVTLTWNSGSLSSGVHTFPAVLQSDLYTLSSSVTVTSSPWPSETITCNVAHPASSTKVDKKIEPRGC >1nld_L DVVMTQTPLTLSVTIGQPASISCKSSQSLLDSDGKTYLNWLLQRPGQSPKRLIYLVSKLDSGVPDRFTGSGSGTDFTLKISRVEAEDLGVYYCWQGTHFPRTFGGGTKLEIKRADAAPTVSIFPPSSEQLTSGGASVVCFLNNFYPKDINVKWKIDGSERQNGVLNSWTDQDSKDSTYSMSSTLTLTKDEYERHNSYTCEATHKTSTSPIVKSFNRNEC >4lsu_H EVHLMQSGTEMKKPGASVRVTCQTSGYTFSDYFIHWLRQVPGRGFEWMGWMNPQWGQVNYARTFQGRVTMTRDVYREVAYLDLRSLTFADTAVYFCARRMRSQDREWDFQHWGQGTRIIVSSASTKGPSVFPLAPSSKSTSGGTAALGCLVKDYFPEPVTVSWNSGALTSGVHTFPAVLQSSGLYSLSSVVTVPSSSLGTQTYICNVNHKPSNTKVDKKVEPKSCDK >4lsu_L QSALTQPPSVSGSPGQSITLSCTGASTSVAWYQQYADKAPRLIVFDGNKRPSDISSRFSGSQSGGTASLTISGLQSEDEAYYHCNAFEFFGGGTKLTVLSQPKAAPSVTLFPPSSEELQANKATLVCLISDFYPGAVTVAWKADSSPVKAGVETTTPSKQSNNKYAASSYLSLTPEQWKSHKSYSCQVTHEGSTVEKTVAPTEC >4lst_H QVQLVQSGGQMKKPGESMRISCRASGYEFIDCTLNWIRLAPGKRPEWMGWLKPRGGAVNYARPLQGRVTMTRDVYSDTAFLELRSLTVDDTAVYFCTRGKNCDYNWDFEHWGRGTPVIVSSPSTKGPSVFPLAPSSKSTSGGTAALGCLVKDYFPEPVTVSWNSGALTSGVHTFPAVLQSSGLYSLSSVVTVPSSSLGTQTYICNVNHKPSNTKVDKKVEPKSC >4lst_L EIVLTQSPGTLSLSPGETAIISCRTSQYGSLAWYQQRPGQAPRLVIYSGSTRAAGIPDRFSGSRWGPDYNLTISNLESGDFGVYYCQQYEFFGQGTKVQVDIKRTVAAPSVFIFPPSDEQLKSGTASVVCLLNNFYPREAKVQWKVDNALQSGNSQESVTEQDSKDSTYSLSSTLTLSKADYEKHKVYACEVTHQGLRSPVTKSFNRGEC >2x1o_A QVQLQESGGGLVQAGGSLRLSCAAAGRNLRMYRMGWFRQAPGKEREFVGTMVWSSDTIYYADSVKGRFIISRDNAKNTVYLQMNSLKPEDTAVYYCAAGAGWAGTMTDYNYWGQGTQVTVSS >2x1o_B QVQLQESGGGLVQAGGSLRLSCAAAGRNLRMYRMGWFRQAPGKEREFVGTMVWSSDTIYYADSVKGRFIISRDNAKNTVYLQMNSLKPEDTAVYYCAAGAGWAGTMTDYNYWGQGTQVTVSS >4lsv_H QVQLLQSGAAVTKPGASVRVSCEASGYNIRDYFIHWWRQAPGQGLQWVGWINPKTGQPNNPRQFQGRVSLTRHASWDFDTYSFYMDLKALRSDDTAVYFCARQRSDYWDFDVWGSGTQVTVSSASTKGPSVFPLAPSSKSTSGGTAALGCLVKDYFPEPVTVSWNSGALTSGVHTFPAVLQSSGLYSLSSVVTVPSSSLGTQTYICNVNHKPSNTKVDKKVEPKSC >4lsv_L DIQMTQSPSSLSASVGDTVTITCQANGYLNWYQQRRGKAPKLLIYDGSKLERGVPSRFSGRRWGQEYNLTINNLQPEDIATYFCQVYEFVVPGTRLDLKRTVAAPSVFIFPPSDEQLKSGTASVVCLLNNFYPREAKVQWKVDNALQSGNSQESVTEQDSKDSTYSLSSTLTLSKADYEKHKVYACEVTHQGLSSPVTKSFNRGEC >4lsq_H QVQLVQSGAAVRKPGASVTVSCKFAEDDDYSPYWVNPAPEHFIHFLRQAPGQQLEWLAWMNPTNGAVNYAWYLNGRVTATRDRSMTTAFLEVKSLRSDDTAVYYCARAQKRGRSEWAYAHWGQGTPVVVSSASTKGPSVFPLAPSSKSTSGGTAALGCLVKDYFPEPVTVSWNSGALTSGVHTFPAVLQSSGLYSLSSVVTVPSSSLGTQTYICNVNHKPSNTKVDKKVEPKSCDK >4lsq_L DIQMTQSPSSLSASLGDRVTITCQASRGIGKDLNWYQQKAGKAPKLLVSDASTLEGGVPSRFSGSGFHQDFSLTISSLQAEDVATYFCQQYETFGQGTKVDIKRTVAAPSVFIFPPSDEQLKSGTASVVCLLNNFYPREAKVQWKVDNALQSGNSQESVTEQDSKDSTYSLSSTLTLSKADYEKHKVYACEVTHQGLSSPVTKSFNRGEC >4lsp_H QVQLVQSGAAVRKPGASVTVSCKFAEDDDYSPYWVNPAPEHFIHFLRQAPGQQLEWLAWMNPTNGAVNYAWYLNGRVTATRDRSMTTAFLEVKSLRSDDTAVYYCARAQKRGRSEWAYAHWGQGTPVVVSSASTKGPSVFPLAPSSKSTSGGTAALGCLVKDYFPEPVTVSWNSGALTSGVHTFPAVLQSSGLYSLSSVVTVPSSSLGTQTYICNVNHKPSNTKVDKKVEPKSCDK >4lsp_L DIQMTQSPSSLSASLGDRVTITCQASRGIGKDLNWYQQKAGKAPKLLVSDASTLEGGVPSRFSGSGFHQNFSLTISSLQAEDVATYFCQQYETFGQGTKVDIKRTVAAPSVFIFPPSDEQLKSGTASVVCLLNNFYPREAKVQWKVDNALQSGNSQESVTEQDSKDSTYSLSSTLTLSKADYEKHKVYACEVTHQGLSSPVTKSFNRGEC >4lss_H QVQLVQSGGQMKKPGESMRISCRASGYEFIDCTLNWIRLAPGKRPEWMGWLKPRGGAVNYARPLQGRVTMTRDVYSDTAFLELRSLTVDDTAVYFCTRGKNCDYNWDFEHWGRGTPVIVSSPSTKGPSVFPLAPSSKSTSGGTAALGCLVKDYFPEPVTVSWNSGALTSGVHTFPAVLQSSGLYSLSSVVTVPSSSLGTQTYICNVNHKPSNTKVDKKVEPKSC >4lss_L EIVLTQSPGTLSLSPGETAIISCRTSQYGSLAWYQQRPGQAPRLVIYSGSTRAAGIPDRFSGSRWGPDYTLTISNLESGDFGVYYCQQYEFFGQGTKVQVDIKRTVAAPSVFIFPPSDEQLKSGTASVVCLLNNFYPREAKVQWKVDNALQSGNSQESVTEQDSKDSTYSLSSTLTLSKADYEKHKVYACEVTHQGLRSPVTKSFNRGEC >4lsr_H QVQLVQSGAAVRKPGASVTVSCKFAEDDDYSPYWVNPAPEHFIHFLRQAPGQQLEWLAWMNPTNGAVNYAWYLNGRVTATRDRSMTTAFLEVKSLRSDDTAVYYCARAQKRGRSEWAYAHWGQGTPVVVSSASTKGPSVFPLAPSSKSTSGGTAALGCLVKDYFPEPVTVSWNSGALTSGVHTFPAVLQSSGLYSLSSVVTVPSSSLGTQTYICNVNHKPSNTKVDKKVEPKSCDK >4lsr_L DIQMTQSPSSLSASLGDRVTITCQASRGIGKDLNWYQQKAGKAPKLLVSDASTLEGGVPSRFSGSGFHQDFSLTISSLQAEDVATYFCQQYETFGQGTKVDIKRTVAAPSVFIFPPSDEQLKSGTASVVCLLNNFYPREAKVQWKVDNALQSGNSQESVTEQDSKDSTYSLSSTLTLSKADYEKHKVYACEVTHQGLSSPVTKSFNRGEC >1jpt_H EVQLVESGGGLVQPGGSLRLSCAASGFNIKEYYMHWVRQAPGKGLEWVGLIDPEQGNTIYDPKFQDRATISADNSKNTAYLQMNSLRAEDTAVYYCARDTAAYFDYWGQGTLVTVSSASTKGPSVFPLAPSSKSTSGGTAALGCLVKDYFPEPVTVSWNSGALTSGVHTFPAVLQSSGLYSLSSVVTVPSSSLGTQTYICNVNHKPSNTKVDKKVEPKSCDKTHT >1jpt_L DIQMTQSPSSLSASVGDRVTITCRASRDIKSYLNWYQQKPGKAPKVLIYYATSLAEGVPSRFSGSGSGTDYTLTISSLQPEDFATYYCLQHGESPWTFGQGTKVEIKRTVAAPSVFIFPPSDEQLKSGTASVVCLLNNFYPREAKVQWKVDNALQSGNSQESVTEQDSKDSTYSLSSTLTLSKADYEKHKVYACEVTHQGLSSPVTKSFNRGEC >4k94_H EVQLVESGGGLVQPGGSLRLSCAASGFNISSYSMHWVRQAPGKGLEWVASIYPYSGYTYYADSVKGRFTISADTSKNTAYLQMNSLRAEDTAVYYCARYVYHALDYWGQGTLVTVSSASTKGPSVFPLAPSSKSTSGGTAALGCLVKDYFPEPVTVSWNSGALTSGVHTFPAVLQSSGLYSLSSVVTVPSSSLGTQTYICNVNHKPSNTKVDKKVEPKSC >4k94_L DIQMTQSPSSLSASVGDRVTITCRASQSVSSAVAWYQQKPGKAPKLLIYSASSLYSGVPSRFSGSRSGTDFTLTISSLQPEDFATYYCQQWAVHSLITFGQGTKVEIKRTVAAPSVFIFPPSDSQLKSGTASVVCLLNNFYPREAKVQWKVDNALQSGNSQESVTEQDSKDSTYSLSSTLTLSKADYEKHKVYACEVTHQGLSSPVTKSFNRGECGGSDYKDDDDK >1jps_H EVQLVESGGGLVQPGGSLRLSCAASGFNIKEYYMHWVRQAPGKGLEWVGLIDPEQGNTIYDPKFQDRATISADNSKNTAYLQMNSLRAEDTAVYYCARDTAAYFDYWGQGTLVTVSSASTKGPSVFPLAPSSKSTSGGTAALGCLVKDYFPEPVTVSWNSGALTSGVHTFPAVLQSSGLYSLSSVVTVPSSSLGTQTYICNVNHKPSNTKVDKKVEPKSCDKTHT >1jps_L DIQMTQSPSSLSASVGDRVTITCRASRDIKSYLNWYQQKPGKAPKVLIYYATSLAEGVPSRFSGSGSGTDYTLTISSLQPEDFATYYCLQHGESPWTFGQGTKVEIKRTVAAPSVFIFPPSDEQLKSGTASVVCLLNNFYPREAKVQWKVDNALQSGNSQESVTEQDSKDSTYSLSSTLTLSKADYEKHKVYACEVTHQGLSSPVTKSFNRGEC >2ck0_H QVQLQESGGGLVQPRGSLKLSCAASGFTFNTDAMNWVRQAPGKGLEWVARIRSKGFNFATYYADSVRDRFTISRDDSQSMLYLQMNNLKTEDTGIYYCVRGRDGEAMDYWGQGTTLTVSSAKTTPPSVYPLAPGSAAQTNSMVTLGCLVKGYFPEPVTVTWNSGSLSSGVHTFPAVLQSDLYTLSSSVTVPSSPRPSETVTCNVAHPASSTKVDKKIVN >2ck0_L DIQLTQSPSSLAVSAGEKVTMNCKSSQNLLHSITRKNYLAWYRQKPGQSPKLLIYWASTRGSGVPDRFTGSGSGTDFTLTISSVQAEDLAVYYCKQSYNLYTFGGGTKLEIKRADAAPTVSIFPPSSEQLTSGGASVVCFLNNFYPKDINVKWKIDGSERQNGVLNSWTDQDSKDSTYSMSSTLTLTKDEYERHNSYTCEATHKTSTSPIVKSFNR >43ca_A DVVMTQTPSSLAMSVGQKVTMSCKSSQSLLNISNQKNYLAWYQQKPGQSPKLLVYFASTRESGVPDRFIGSGSGTDFTLTISSVQAEDQADYFCQQHYRAPRTFGGGTKLEIK >43ca_C DVVMTQTPSSLAMSVGQKVTMSCKSSQSLLNISNQKNYLAWYQQKPGQSPKLLVYFASTRESGVPDRFIGSGSGTDFTLTISSVQAEDQADYFCQQHYRAPRTFGGGTKLEIK >4od3_H EVQLVESGGGVVQPGRSLRLSCVGSQFSFNRYGMHWVRQAPGKGLEWVAGISFDGTDRYHADNVWGRFTISRDNSKNTLYLQMSSLRAEDTALYYCAKDLREDECEEWWSDYYDFGKKLPCRKSRGVAGVFDKWGQGTMVTVSSASTKGPSVFPLAPSSKSTSGGTAALGCLVKDYFPEPVTVSWNSGALTSGVHTFPAVLQSSGLYSLSSVVTVPSSSLGTQTYICNVNHKPSNTKVDKKVEPKSCDKGLEVLFQ >4od3_L QAVLTQPPSVSAAPGQNVTISCSGSGSNIGNNFVSWYQQRPGTAPKLLIYESNKRPSGIPDRFSGSKSGTSATLAITGLQTGDEAYYYCATWAARLNSARVFGTGTMVTVLGQPKANPTVTLYPPSSEELQANKATLVCLISDFYPGAVTVAWKADSSPVKAGVETTTPSKQSNNKYAASSYLSLTPEQWKSHRSYSCQVTHEGSTVEKTVAPTECS >4od2_A SELTQDPAVSVALGQTVRITCSGDSLRSYYASWYQQKPGQAPVLVIYGANNRPSGIPDRFSGSSSGNTASLTITGAQAEDEADYYCNSADSSGNHVVFGGGTKLTVLGQPKAAPSVTLFPPSSEELQANKATLVCLISDFYPGAVTVAWKADSSPVKAGVETTTPSKQSNNKYAASSYLSLTPEQWKSHKSYSCQVTHEGSTVEKTVAPTECS >4od2_B EVQLVQSGGGVERPGGSLRLSCAASGFTFDDYAMSWVRQAPGKGLEWVSGINWQGGSTGYADSVKGRVTISRDNAKNSLYLQMNSLRAEDTAVYYCAKILGAGRGWYFDYWGKGTTVTVSSASTKGPSVFPLAPSSKSTSGGTAALGCLVKDYFPEPVTVSWNSGALTSGVHTFPAVLQSSGLYSLSSVVTVPSSSLGTQTYICNVNHKPSNTKVDKKVEPKSCDKTHTAAP >4od1_H VQLVESGGGVVQPGKSLRLSCAASRFSFNRYGMHWVRQAPGKGLEWVAAISYDGTDKYHADKVWGRFTISRDNSKNTLYLQMNSLRAEDTALYYCAKDLREDECEEWWSDYYDFGKQLPCRKSRGVAGIFDGWGQGTMVTVSSASTKGPSVFPLAPSSKSTSGGTAALGCLVKDYFPEPVTVSWNSGALTSGVHTFPAVLQSSGLYSLSSVVTVPSSSLGTQTYICNVNHKPSNTKVDKRVEPKSCDKGLEVLFQ >4od1_L QSVLTQPPSVSAAPGQKVTISCSGSSSNIGNNFVSWYQQRPGTAPKILIYENNKRPSETPDRFSGSKSGTSATLAITGLQTADEAEYYCATWSASLSSARVFGTGTRITVLGQPKANPTVTLFPPSSEELQANKATLVCLISDFYPGAVTVAWKADSSPVKAGVETTTPSKQSNNKYAASSYLSLTPEQWKSHRSYSCQVTHEGSTVEKTVAPTECS >1g6v_K QVQLVESGGGSVQAGGSLRLSCAASGYTVSTYCMGWFRQAPGKEREGVATILGGSTYYGDSVKGRFTISQDNAKNTVYLQMNSLKPEDTAIYYCAGSTVASTGWCSRLRPYDYHYRGQGTQVTVSS >4m3j_A QVQLQESGGGLVQPGGSLRLSCAASGSISSITTMGWYRQDPGKGRELVALINSVGDTTYAGSVKGRFTISRDNAKNTVYLEMSSLKPEDTAVYYCNAFMSTNSGRTGSFWGQGTQVTVSSHHHHHH >4m3j_B QVQLQESGGGLVQPGGSLRLSCAASGSISSITTMGWYRQDPGKGRELVALINSVGDTTYAGSVKGRFTISRDNAKNTVYLEMSSLKPEDTAVYYCNAFMSTNSGRTGSFWGQGTQVTVSSHHHHHH >4m3k_B QVQLQESGGGLVQPGGSLRLSCAASGSISSITTMGWYRQDPGKGRELVALINSVGDTTYAGSVKGRFTISRDNAKNTVYLEMSSLKPEDTAVYYCNAFMSTNSGRTGSFWGQGTQVTVSSHHHHHH >3g5y_A DILMTQSPVSMSLSLGDTVSITCHSSQDISSNIGWLQQAPGKSFKGLIYHGTNLEDGVPGRFSGSGSGADYSLTISSLSSEDFVDYYCVQYGQFPWTFGGGTSLEIKRADAAPTVSIFPPSTEQLTSGGASVVCFLNNFYPKDINVKWKIDGSERQNGVLNSWTDQDSKDSTYSMSSTLTLTKDEYERHNSYTCEATHKTSSTPIVKSFNRNE >3g5y_B DVQLQESGPALVKPSQSLSLTCTVTGYSITSDYAWNWIRQFPGNKLEWMGYISYSANTRYNPSLKSRISITRDTSKNQFFLQLNSVTVEDTATYYCATAGRGFPYWGQGTLVTVSAAKTTAPSVYPLAPVCGDTTGSSVTLGCLVKGYFPEPVTLTWNSGSLSSGVHTFPAVLQSDLYTLSSSVTVTSSTWPSQSITCNVAHPASSTKVDKKIEPR >3g5x_A DILMTQSPSSMSVSLGDTVSITCHSSQDINSNIGWLQQKPGKSFKGLIYHGTNLDDEVPSRFSGSGSGADYSLTISSLESEDFADYYCVQYAQFPWTFGGGTKLEIKRADAAPTVSIFPPSSEQLTSGGASVVCFLNNFYPKDINVKWKIDGSERQNGVLNSWTDQDSKDSTYSMSSTLTLTKDEYERHNSYTCEATHKTSTSPIVKSFNRNEC >3g5x_C DILMTQSPSSMSVSLGDTVSITCHSSQDINSNIGWLQQKPGKSFKGLIYHGTNLDDEVPSRFSGSGSGADYSLTISSLESEDFADYYCVQYAQFPWTFGGGTKLEIKRADAAPTVSIFPPSSEQLTSGGASVVCFLNNFYPKDINVKWKIDGSERQNGVLNSWTDQDSKDSTYSMSSTLTLTKDEYERHNSYTCEATHKTSTSPIVKSFNRNEC >3g5z_A DILMTQSPSSMSVSLGDTVSITCHASQDIISNIGWLQQKPGKSFAGLIYHGTNLSDGVPSRFSGSGSGADYSLTISSLESEDFADYYCVQYAQFPWTFGGGTKLEIARADAAPTVSIFPPSSEQLTSGGASVVCFLNNFYPKDINVKWKIDGSERQNGVLNSWTDQDSKDSTYSMSSTLTLTKDEYERHNSYTCEATHKTSTSPIVKSFNRNE >3g5z_B DVQLQESGPSLVKPSQSLSLTCTVTGYSITSDFAWNWIRQFPGNKLEWMGYISYSGNTRYNPSLKSRISITRDTSSNQFFLQLNSVTPEDTATYYCATAGRGFPYWGQGTLVTVSAAKTTPPSVYPLAPGCGDTTGSSVTLGCLVKGYFPESVTVTWNSGSLSSSVHTFPALLQSDLYTMSSSVTVPSSTWPSETVTCSVAHPASSTTVDKKLEPRA >3g5v_A DILMTQSPSSMSVSLGDTVSITCHSSQDINSNIGWLQQKPGKSFKGLIYHGTNLDDEVPSRFSGSGSGADYSLTISSLESEDFADYYCVQYAQFPWTFGGGTKLEIKRADAAPTVSIFPPSSEQLTSGGASVVCFLNNFYPKDINVKWKIDGSERQNGVLNSWTDQDSKDSTYSMSSTLTLTKDEYERHNSYTCEATHKTSTSPIVKSFNRN >3g5v_B DVQLQESGPSLVKPSQSLSLTCTVTGYSITSDFAWNWIRQFPGNKLEWMGYISYSGNTRYNPSLKSRISITRDTSSNQFFLQLNSVTIEDTATYYCVTAGRGFPYWGQGTLVTVSAAKTTPPSVYPLAPGCGDTTGSSVTLGCLVKGYFPESVTVTANSGSLSSSVHTFPALLQSDLYTMSSSVTVPSSTWPSETVTCSVAHPASSTTVDKKA >1k6q_H EVQLQQSGAELVRPGALVKLSCKASGFNIKDYYMHWVKQRPEQGLELIGWIDPENGNTIYDPKFQDKASITADTSSNTAYLQLSSLTSEDTAVYYCARDTAAYFDYWGQGTTLTVSSAKTTPPSVYPLAPGSAAQTNSMVTLGCLVKGYFPEPVTVTWNSGSLSSGVHTFPAVLQSDLYTLSSSVTVPSSTWPSETVTCNVAHPASSTKVDKKKIP >1k6q_L DIKMTQSPSSMSASLGESVTITCKASRDIKSYLSWYQQKPWKSPKTLIYYATSLADGVPSRFSGSGSGQDYSLTISSLESDDTATYYCLQHGESPFTFGSGTKLELKRADAAPTVSIFPPSSEQLTSGGASVVCFLNNFYPKDINVKWKIDGSERQNGVLNSWTDQDSKDSTYSMSSTLTLTKDEYERHNSYTCEATHKTSTSPIVKSFN >4gft_B EVQLQESGGGTVQPGGSLKLSCSAAPERAFSNYAMGWFRQAPGQEREFVAGITGSGRSQYYADSVKGRFTISRDNAMNAVYLQMNSVKAEDTAVYYCAARVVPVFSDSTKGYVYWGQGTQVTVSSHHHHHHEPEA >4evn_A QVQLVESGAEVKKPGSSVKVSCKASGGPFRSYAISWVRQAPGQGPEWMGGIIPIFGTTKYAPKFQGRVTITADDFAGTVYMELSSLRSEDTAMYYCAKHMGYQVRETMDVWGKGTTVTVSSASTKGPSVFPLAPSSKSTSGGTAALGCLVKDYFPEPVTVSWNSGALTSGVHTFPAVLQSSGLYSLSSVVTVPSSSLGTQTYICNVNHKPSNTKVDKRVEPKSCDKSGRLVPRGSGHHHHHH >4evn_C QVQLVESGAEVKKPGSSVKVSCKASGGPFRSYAISWVRQAPGQGPEWMGGIIPIFGTTKYAPKFQGRVTITADDFAGTVYMELSSLRSEDTAMYYCAKHMGYQVRETMDVWGKGTTVTVSSASTKGPSVFPLAPSSKSTSGGTAALGCLVKDYFPEPVTVSWNSGALTSGVHTFPAVLQSSGLYSLSSVVTVPSSSLGTQTYICNVNHKPSNTKVDKRVEPKSCDKSGRLVPRGSGHHHHHH >1bvk_A DIQMTQSPSSLSASVGDRVTITCRASGNIHNYLAWYQQKPGKAPKLLIYYTTTLADGVPSRFSGSGSGTDYTFTISSLQPEDIATYYCQHFWSTPRTFGQGTKVEIKR >1bvk_B QVQLQESGPGLVRPSQTLSLTCTVSGFSLTGYGVNWVRQPPGRGLEWIGMIWGDGNTDYNSALKSRVTMLKDTSKNQFSLRLSSVTAADTAVYYCARERDYRLDYWGQGSLVTVSSG >4uuj_A QVQLQQPGAELVKPGASVKLSCKASGYTFTSDWIHWVKQRPGHGLEWIGEIIPSYGRANYNEKIQKKATLTADKSSSTAFMQLSSLTSEDSAVYYCARERGDGYFAVWGAGTTVTVSSAKTTPPSVYPLAPGSAAQTNSMVTLGCLVKGYFPEPVTVTWNSGSLSSGVHTFPAVLQSDLYTLSSSVTVPSSSWPSETVTCNVAHPASSTKVDKKIVPRD >4uuj_B DILLTQSPAILSVSPGERVSFSCRASQSIGTDIHWYQQRTNGSPRLLIKYASESISGIPSRFSGSGSGTDFTLSINSVESEDIANYYCQQSNRWPFTFGSGTKLEIKRADAAPTVSIFPPSSEQLTSGGASVVCFLNNFYPKDINVKWKIDGSERQNGVLNSWTDQDSKDSTYSMSSTLTLTKDEYERHNSYTCEATHKTSTSPIVKSFNRN >1bvl_A QVQLQESGPGLVRPSQTLSLTCTVSGFSLTGYGVNWVRQPPGRGLEWIGMIWGDGNTDYNSALKSRVTMLKDTSKNQFSLRLSSVTAADTAVYYCARERDYRLDYWGQGSLVTVSSG >1bvl_C QVQLQESGPGLVRPSQTLSLTCTVSGFSLTGYGVNWVRQPPGRGLEWIGMIWGDGNTDYNSALKSRVTMLKDTSKNQFSLRLSSVTAADTAVYYCARERDYRLDYWGQGSLVTVSSG >4odh_H QVQLVESGGGVVQPGRSLRLSCAASGFTFSSYGMHWVRQAPGKGLEWVAVISYDGSNKYYADSVKGRFTISRDNSKNTLYLQMNSLRAEDTAVYYCAKDLGESENEEWATDYYDFSIGYPGQDPRGVVGAFDIWGQGTMVTVSSASTKGPSVFPLAPSSKSTSGGTAALGCLVKDYFPEPVTVSWNSGALTSGVHTFPAVLQSSGLYSLSSVVTVPSSSLGTQTYICNVNHKPSNTKVDKKVEPKSCDK >4odh_L QSVLTQPPSVSAAPGQKVTISCSGSSSNIGNNYVSWYQQLPGTAPKLLIYENNKRPSGIPDRFSGSKSGTSATLGITGLQTGDEADYYCGTWDSSLSAGGVFGTGTKVTVLGQPKANPTVTLFPPSSEELQANKATLVCLISDFYPGAVTVAWKADSSPVKAGVETTTPSKQSNNKYAASSYLSLTPEQWKSHRSYSCQVTHEGSTVEKTVAPTECS >2oqj_A VVMTQSPSTLSASVGDTITITCRASQSIETWLAWYQQKPGKAPKLLIYKASTLKTGVPSRFSGSGSGTEFTLTISGLQFDDFATYHCQHYAGYSATFGQGTRVEIKRTVAAPSVFIFPPSDEQLKSGTASVVCLLNNFYPREAKVQWKVDNALQSGNSQESVTEQDSKDSTYSLSSTLTLSKADYEKHKVYACEVTHQGLSSPVTKSFNRG >2oqj_B EVQLVESGGGLVKAGGSLILSCGVSNFRISAHTMNWVRRVPGGGLEWVASISTSSTYRDYADAVKGRFTVSRDDLEDFVYLQMHKMRVEDTAIYYCARKGSDRLSDNDPFDAWGPGTVVTVSPASTKGPSVFPLAPSSKSTSGGTAALGCLVKDYFPEPVTVSWNSGALTSGVHTFPAVLQSSGLYSLSSVVTVPSSSLGTQTYICNVNHKPSNTKVDKKVEPK >3sob_H MKKNIAFLLASMFVFSIATNAYAEVQLVESGGGLVQPGGSLRLSCAASGFTFTNSYIHWVRQAPGKGLEWVGWITPYGGYTNYADSVKGRFTISADTSKNTAYLQMNSLRAEDTAVYYCARGSGHVNAVKNYGYVMDYWGQGTLVTVSSASTKGPSVFPLAPSSKSTSGGTAALGCLVKDYFPEPVTVSWNSGALTSGVHTFPAVLQSSGLYSLSSVVTVPSSSLGTQTYICNVNHKPSNTKVDKKVEPKSCDKTH >3sob_L MKKNIAFLLASMFVFSIATNAYADIQMTQSPSSLSASVGDRVTITCRASQDVSTAVAWYQQKPGKAPKLLIYSASFLYSGVPSRFSGSGSGTDFTLTISSLQPEDFATYYCQQSYTTPPTFGQGTKVEIKRTVAAPSVFIFPPSDEQLKSGTASVVCLLNNFYPREAKVQWKVDNALQSGNSQESVTEQDSKDSTYSLSSTLTLSKADYEKHKVYACEVTHQGLSSPVTKSFNRGEC >3dsf_H EVQLVESGGGLVQPKGSLKISCAASGFTFNIYAMNWVRQAPGKGLEWVARIRSQSNNYTTYYADSVKDRFTISRDDSQSMLYLQMNNLKTEDTAMYYCVRQMGDYWGQGTTLTVSSAVKTPPSVYPLAPGGGAISNSMVTLGCLVNGYFPEPVTVTWNAGSLGSGVHTFPAVLQSDLYTLSSSVTVPVSTWPSEAVTCNVAHPASATSVDKAISPV >3dsf_L YIQMTQSPASLSVSVGETVTITCRASENIYSFLAWYQQKQGKSPQLLVYAATNLADGVPSRFSGSGSGTQFSLKINSLQSEDFGTYYCQHFWGTPFTFGSGTKLEIKRSDAAPTVSIFPPSAAQLSSGGGSVVCFLNNFYPKDINVKWKIDGAERGNGVLNSWTSQDSADSTYSMSSTLTSGGDEYERHNSYTCEATHKTSTSPIVKSFNRAA >3oay_H EVQLVESGGGLVKAGGSLILSCGVSNFRISAHTMNWVRRVPGGGLEWVASISTSSTYRDYADAVKGRFTVSRDDLEDFVYLQMHKMRVEDTAIYYCARKGSDRLSDNDPFDAWGPGTVVTVSPASTKGPSVFPLAPSSKSTSGGTAALGCLVKDYFPEPVTVSWNSGALTSGVHTFPAVLQSSGLYSLSSVVTVPSSSLGTQTYICNVNHKPSNTKVDKKVEPK >3oay_K AVVMTQSPSTLSASVGDTITITCRASQSIETWLAWYQQKPGKAPKLLIYKASTLKTGVPSRFSGSGSGTEFTLTISGLQFDDFATYHCQHYAGYSATFGQGTRVEIKRTVAAPSVFIFPPSDEQLKSGTASVVCLLNNFYPREAKVQWKVDNALQSGNSQESVTEQDSKDSTYSLSSTLTLSKADYEKHKVYACEVTHQGLSSPVTKSFNRGE >3pgf_H EISEVQLVESGGGLVQPGGSLRLSCAASGFNFSSSYIHWVRQAPGKGLEWVAYISSYSGYTSYADSVKGRFTISADTSKNTAYLQMNSLRAEDTAVYYCARTPWWYWSGLDYWGQGTLVTVSSASTKGPSVFPLAPSSKSTSGGTAALGCLVKDYFPEPVTVSWNSGALTSGVHTFPAVLQSSGLYSLSSVVTVPSSSLGTQTYICNVNHKPSNTKVDKKVEPKSCDKTHT >3pgf_L SDIQMTQSPSSLSASVGDRVTITCRASQSVSSAVAWYQQKPGKAPKLLIYSASSLYSGVPSRFSGSRSGTDFTLTISSLQPEDFATYYCQQSSYIPVTFGQGTKVEIKRTVAAPSVFIFPPSDSQLKSGTASVVCLLNNFYPREAKVQWKVDNALQSGNSQESVTEQDSKDSTYSLSSTLTLSKADYEKHKVYACEVTHQGLSSPVTKSFNRGEC >3oaz_H EVQLVESGGGLVKAGGSLILSCGVSNFRISAHTMNWVRRVPGGGLEWVASISTSSTYRDYADAVKGRFTVSRDDLEDFVYLQMHKMRVEDTAIYYCARKGSDRLSDNDPFDAWGPGTVVTVSPASTKGPSVFPLAPSSKSTSGGTAALGCLVKDYFPEPVTVSWNSGALTSGVHTFPAVLQSSGLYSLSSVVTVPSSSLGTQTYICNVNHKPSNTKVDKKVEP >3oaz_K AVVMTQSPSTLSASVGDTITITCRASQSIETWLAWYQQKPGKAPKLLIYKASTLKTGVPSRFSGSGSGTEFTLTISGLQFDDFATYHCQHYAGYSATFGQGTRVEIKRTVAAPSVFIFPPSDEQLKSGTASVVCLLNNFYPREAKVQWKVDNALQSGNSQESVTEQDSKDSTYSLSSTLTLSKADYEKHKVYACEVTHQGLSSPVTKSFNRGE >3oau_H EVQLVESGGGLVKAGGSLRLSCGVSNFRISAHTMNWVRRVPGGGLEWVASISTSSTYRDYADAVKGRFTVSRDDLEDFVYLQMHKMRVEDTAIYYCARKGSDRLSDNDPFDAWGPGTVVTVSPASTKGPSVFPLAPSSKSTSGGTAALGCLVKDYFPEPVTVSWNSGALTSGVHTFPAVLQSSGLYSLSSVVTVPSSSLGTQTYICNVNHKPSNTKVDKKVEPKS >3oau_L VVMTQSPSTLSASVGDTITITCRASQSIETWLAWYQQKPGKAPKLLIYKASTLKTGVPSRFSGSGSGTEFTLTISGLQFDDFATYHCQHYAGYSATFGQGTRVEIKRTVAAPSVFIFPPSDEQLKSGTASVVCLLNNFYPREAKVQWKVDNALQSGNSQESVTEQDSKDSTYSLSSTLTLSKADYEKHKVYACEVTHQGLSSPVTKSFNRGE >4g3y_H EVKLEESGGGLVQPGGSMKLSCVASGFIFSNHWMNWVRQSPEKGLEWVAEIRSKSINSATHYAESVKGRFTISRDDSKSAVYLQMTDLRTEDTGVYYCSRNYYGSTYDYWGQGTTLTVSSASTKGPSVFPLAPSSKSTSGGTAALGCLVKDYFPEPVTVSWNSGALTSGVHTFPAVLQSSGLYSLSSVVTVPSSSLGTQTYICNVNHKPSNTKVDKKVEPKSCDKT >4g3y_L DILLTQSPAILSVSPGERVSFSCRASQFVGSSIHWYQQRTNGSPRLLIKYASESMSGIPSRFSGSGSGTDFTLSINTVESEDIADYYCQQSHSWPFTFGSGTNLEVKRTVAAPSVFIFPPSDEQLKSGTASVVCLLNNFYPREAKVQWKVDNALQSGNSQESVTEQDSKDSTYSLSSTLTLSKADYEKHKVYACEVTHQGLSSPVTKSFNRGEC >1f11_A DMVLTQSPASLAVSLGQRATISCKASQSVDYDGDSYMNWYQQKPGQPPKLLIYVASNLKSGIPARFSGSGSGTDFTLNIHPVEEEDAATYYCQQSNEDPFTFGSGTKLEIKRADAAPTVSIFPPSSEQLTSGGASVVCFLNNFYPKDINVKWKIDGSERQNGVLNSWTDQDSKDSTYSMSSTLTLTKDEYERHNSYTCEATHKTSTSPIVKSFNRNEC >1f11_C DMVLTQSPASLAVSLGQRATISCKASQSVDYDGDSYMNWYQQKPGQPPKLLIYVASNLKSGIPARFSGSGSGTDFTLNIHPVEEEDAATYYCQQSNEDPFTFGSGTKLEIKRADAAPTVSIFPPSSEQLTSGGASVVCFLNNFYPKDINVKWKIDGSERQNGVLNSWTDQDSKDSTYSMSSTLTLTKDEYERHNSYTCEATHKTSTSPIVKSFNRNEC >1gc1_H QVQLLESGAEVKKPGSSVKVSCKASGDTFIRYSFTWVRQAPGQGLEWMGRIITILDVAHYAPHLQGRVTITADKSTSTVYLELRNLRSDDTAVYFCAGVYEGEADEGEYDNNGFLKHWGQGTLVTVTSASTKGPSVFPLAPSSKSTSGGTAALGCLVKDYFPQPVTVSWNSGALTSGVHTFPAVLQSSGLYSLSSVVTVPSSSLGTQTYICNVNHKPSNTKVDKKVEPK >1gc1_L ELELTQSPATLSVSPGERATLSCRASESVSSDLAWYQQKPGQAPRLLIYGASTRATGVPARFSGSGSGAEFTLTISSLQSEDFAVYYCQQYNNWPPRYTFGQGTRLEIKRTVAAPSVFIFPPSDEQLKSGTASVVCLLNNFYPREAKVQWKVDNALQSGNSQESVTEQDSKDSTYSLSSTLTLSKADYEKHKVYACEVTHQGLSSPVTKSFNR >1a4k_A ELVMTQTPLSLPVSLGDQASISCRSSQSLLHSNGNTYLHWYLQKPGQSPKLLIYKVSNRFSGVPDRFSGSGSGTDFTLKISRVEAEDLGVYFCSQVTHVPPTFGGGTKLEIKRTVAAPSVFIFPPSDEQLKSGTASVVCLLNNFYPREAKVQWKVDNALQSGNSQESVTEQDSKDSTYSLSSTLTLSKADYEKHKVYACEVTHQGLSSPVTKSFNRG >1a4k_H QVQLLESGPELKKPGETVKISCKASGYTFTNYGMNWVKQAPGKGLKWMGWINTYTGEPTYADDFKGRFAFSLETSASTAYLQINNLKNEDTATYFCVQAERLRRTFDYWGAGTTVTVSSASTKGPSVFPLAPSSKSTSGGTAALGCLVKDYFPEPVTVSWNSGALTSGVHTFPAVLQSSGLYSLSSVVTVPSSSLGTQTYICNVNHKPSNTKVDKKVEP >4ocs_H QAILVESGGGVVQPGRSLRLSCAASQFTFSGHGLHWVRQAPGKGLEWVASISFAGTKMDYADSVKGRFAISRDNSKNTLYLQMNSLRVEDTALYYCAKDMREYECEYWTSDYYDFGRPQPCIDRRGVVGIFDMWGQGTMVTVSTASTKGPSVFPLAPSSKSTSGGTAALGCLVKDYFPEPVTVSWNSGALTSGVHTFPAVLQSSGLYSLSSVVTVPSSSLGTQTYICNVNHKPSNTKVDKRVEPKSCDKGLEVLFQ >4ocs_L QSVLTQPPSVSAAPGQKVTISCSGSSSNIGDNYVSWYQHLPGTAPKLLIYENTRRPSGIPDRFSGSKSGTSATLAITGLQTGDEADYYCGTWDVRPNRGAVFGTGTKVTVLGQPKANPTVTLFPPSSEELQANKATLVCLISDFYPGAVTVAWKADSSPVKAGVETTTPSKQSNNKYAASSYLSLTPEQWKSHRSYSCQVTHEGSTVEKTVAPTECS >2aab_H DVQLVESGGGLVQPGGSRKLSCAASGFTFSSFGMHWVRQAPEKGLEWVAYISSDSSNIYYADTVKGRFTISRDNPKNTLFLQMTSLRSEDTAMYYCARSNYVGYHVRWYFDVWGAGTTVTVSSAKTTPPSVYPLAPGSAAQTNSMVTLGCLVKGYFPEPVTVTWNSGSLSSGVHTFPAVLQSDLYTLSSSVTVPSSTWPSETVTCNVAHPASSTKVDKKIVPRDCGCKPCICTVPEVSSVFIF >2aab_L DIQLTQSPASLAVSLGQRVTISCRASESVEYYGSSLMQWYQQKPGQPPKLLIYAASNVESGVPARFSGSGSGTDFSLNIHPVEEDDIAMYFCQQSRKIPYTFGGGTKLEIKRADAAPTVSIFPPSSEQLTSGGASVVCFLNNFYPKDINVKWKIDGSERQNGVLNSWTDQDSKDSTYSMSSTLTLTKDEYERHNSYTCEATHKTSTSPIVKSFNRGEC >1iqw_H QVQLQQPGAELVKPGASVKLSCKASGYTFTSYWMQWVKQRPGQGLEWIGEIDPSDSYTNYNQKFKGKATLTVDTSSSTAYMQLSSLTSEDSAVYYCARNRDYSNNWYFDVWGTGTTVTVSSAKTTPPSVYPLAPGSAAQTNSMVTLGCLVKGYFPEPVTVTWNSGSLSSGVHTFPAVLQSDLYTLSSSVTVPSSTWPSQTVTCNVAHPASSTKVDKKIVPRDCGCKPCIC >1iqw_L DIVLTQSPASLAVSLGQRATISCKASQSVDYDGDSYMNWYQQKPGQPPKLLIYAASNLESGIPARFSGSGSGTDFTLNIHPVEEEDAATYYCQQSNEDPRTFGGGTKLEIKRADAAPTVSIFPPSSEQLTSGGASVVCFLNNFYPKDINVKWKIDGSERQNGVLNSWTDQDSKDSTYSMSSTLTLTKDEYERHNSYTCEATHKTSTSPIVKSFNRNEC >1e4w_H QVQLQQPGAELVKPGASVKLSCKASGFTFTNYWMHWVKQRPGQGLEWIGEILPSNGRTNYNEKFKTKATLTVDKSSNTAYMQLSSLTSEDSAVYYCARSPSDYWGQGTTLTVSSAKTTAPSVYPLAPVCGDTTGSSVTLGCLVKGYFPEPVTLTWNSGSLSSGVHTFPAVLQSDLYTLSSSVTVTSSTWPSQSITCNVAHPASSTKVDKKIEP >1e4w_L DIQMTQTPSSLSASLGDRVTISCRASQDISHYLNWFQQKPDGTVKLLIYYTSTLHSGVPSRFSGSGSGTDYSLTISNLEEEDIAFYFCQQGGALPFTFGSGTKLAIKRADAAPTVSIFPPSSEQLTSGGASVVCFLNNFYPKDINVKWKIDGSERQNGVLDSWTDQDSKDSTYSMSSTLTLTKDEYERHNSYTCEATHKTSTSPIVKSFNRNEC >2r6p_E DIVLTQSPASLAVSLGQRATISCRASESVVRYGNSFMHWYQQKPGQPPKLLIYRASSLESGIPTRFSGSGSRTDFTLTINPVEADDVATYYCQQTNVDPWAFGGGTKLEIKRADAAPTVSIFPPSSEQLTSGGASVVCFLNNFYPKDINVKWKIDRQNGVLNSWTDQDSTYSMSSTLTLTKDEYERHNSYTCEATSPIVKSFNRNE >2r6p_D EVQLQQSGAELVKPGASVKLSCTASGFNIKDTYMHWVKQRPEQGLEWIGRIDPANGYSKYDPKFQGKATITADTSSNAAYLQLSSLTSEDTAVYFCARDYEGFAYWGQGTLVTVSSAKTTPPSVYPLAPGAAAATSSSVTLGCLVKGYFPEPVTLTWNSGSLSSGVHTFPAVLQSDLYTLSSSVTVTSSTWPSQTITCNVAHPASSTKVDKKIEPR >4at6_A QVQLQQPGPELVTPGASVKMSCTASGYSFSSYNIHWVKQTPGQGLEWIGVIYPGNGDTSYNQKFRDKATLTADKSSSTAYMQLSSLTSEDSAVYHCARGGSGLLAYWGQGTLVTVSSAKTTPPSVYPLAPGSAAQTNSMVTLGCLVKGYFPEPVTVTWNSGSLSSGVHTFPAVLQSDLYTLSSSVTVPSSTWPSETVTCNVAHPASSTKVDKKIVPR >4at6_C QVQLQQPGPELVTPGASVKMSCTASGYSFSSYNIHWVKQTPGQGLEWIGVIYPGNGDTSYNQKFRDKATLTADKSSSTAYMQLSSLTSEDSAVYHCARGGSGLLAYWGQGTLVTVSSAKTTPPSVYPLAPGSAAQTNSMVTLGCLVKGYFPEPVTVTWNSGSLSSGVHTFPAVLQSDLYTLSSSVTVPSSTWPSETVTCNVAHPASSTKVDKKIVPR >2bmk_A DIELTQSPAIMAASPGEKVTITCSATSGVNYMHWFQQKPGTSPKLWIYSTSNLASAVPARFSGSGSGTSYSLTISRMEAEDAATYYCQQRSTYPFTFGGGTKLELKRADAAPTVSIFPPSSEQLTSGGASVVCFLNNFYPKDINVKWKIDGSERQNGVLNSWTDQDSKDSTYSMSSTLTLTKDEYERHNSYTCEATHKTSTSPIVKSFNRNEC >2bmk_H EVKLQESGGGLVQPGHSLRLSCATSGFTFTDYYMSWVRQPPGKALEWLGLIRNKANGYTKEYSASVKGRFTISRDNSQSILYLQMNALRAEDSATYYCVRDKGSYGNYEAWFAYWGQGTTVTVSSAKTTPPSVYPLAPGSAAQTNSMVTLGCLVKGYFPEPVTVTWNSGSLSSGVHTFPAVLQSDLYTLSSSVTVPSSPRPSETVTCNVAHPASSTKVDKKIVPRD >1iqd_A IALTQSPGTLSLSPGERATLSCRASQSFSSSYLAWYQQKPGQAPRLLIYGASTRATGIPDRFSGSGSGTDFTLTISRLEPEDFAVYYCQKYGTSAITFGQGTRLEIKGTVAAPSVFIFPPSDEQLKSGTASVVCLLNNFYPREAKVQWKVDNALQSGNSQESVTEQDSKDSTYSLSSTLTLSKADYEKHKVYACEVTHQGLSSPVTKSFNR >1iqd_B QVQLVQSGAEVKKPGASVKVSCKVSGYTLTELPVHWVRQAPGKGLEWVGSFDPESGESIYAREFQGSVTMTADTSTNIAYMELSSLRSDDTAVYYCAVPDPDAFDIWGQGTMVTVSSASTKGPSVFPLAPCSRSTSESTAALGCLVKDYFPEPVTVSWNSGALTSGVHTFPAVLQSSGLYSLSSVVTVPSSSLGTATYTCNVDHKPSNTKVDKRV >1e4x_I QVQLQQPGAELVKPGPSVKLSCKASGFTFTNYWMHWVKQRPGQGLEWIGEILPSNGRTNYNEKFKTKATLTVDKSSNTAYMQLSSLTSEDSAVYYCARSPSDYWGQGTTLTVSSAKTTAPSVYPLAPVCGDTTGSSVTLGCLVKGYFPEPVTLTWNSGSLSSGVHTFPAVLQSDLYTLSSSVTVTSSTWPSQSITCNVAHPASSTKVDKKIEPRVPI >1e4x_H QVQLQQPGAELVKPGASVKLSCKASGFTFTNYWMHWVKQRPGQGLEWIGEILPSNGRTNYNEKFKTKATLTVDKSSNTAYMQLSSLTSEDSAVYYCARSPSDYWGQGTTLTVSSAKTTAPSVYPLAPVCGDTTGSSVTLGCLVKGYFPEPVTLTWNSGSLSSGVHTFPAVLQSDLYTLSSSVTVTSSTWPSQSITCNVAHPASSTKVDKKIEPRVPI >1ynt_A DIQVTQTTSSLSASLGDRVTISCRASQDISNYLNWYQQKPDGTVKLLIYYTSRLHSGVPSRFSGSGSGTDYSLTISNLEQEDIATYFCQQGNTLPYTFGGGTKLEIKRADAAPTVSIFPPSSEQLTSGGASVVCFLNNFYPKDINVKWKIDGSERQNGVLNSWTDQDSKDSTYSMSSTLTLTKDEYERHNSYTCEATHKTSTSPIVKSFNRNE >1ynt_C DIQVTQTTSSLSASLGDRVTISCRASQDISNYLNWYQQKPDGTVKLLIYYTSRLHSGVPSRFSGSGSGTDYSLTISNLEQEDIATYFCQQGNTLPYTFGGGTKLEIKRADAAPTVSIFPPSSEQLTSGGASVVCFLNNFYPKDINVKWKIDGSERQNGVLNSWTDQDSKDSTYSMSSTLTLTKDEYERHNSYTCEATHKTSTSPIVKSFNRNE >3sm5_I EVQLVQSGAEVKKPGASVKVSCKASGYTFTDYHINWVRQAPGQGLEWMGWIHPNSGDTNYAQKFQGWVTMTRDTAISTAYMEVNGLKSDDTAVYYCARGGLEPRSVDYYYYGMDVWGQGTTVTVSSASTKGPSVFPLAPSSKSTSGGTAALGCLVKDYFPEPVTVSWNSGALTSGVHTFPAVLQSSGLYSLSSVVTVPSSSLGTQTYICNVNHKPSNTKVDKRVEPK >3sm5_H EVQLVQSGAEVKKPGASVKVSCKASGYTFTDYHINWVRQAPGQGLEWMGWIHPNSGDTNYAQKFQGWVTMTRDTAISTAYMEVNGLKSDDTAVYYCARGGLEPRSVDYYYYGMDVWGQGTTVTVSSASTKGPSVFPLAPSSKSTSGGTAALGCLVKDYFPEPVTVSWNSGALTSGVHTFPAVLQSSGLYSLSSVVTVPSSSLGTQTYICNVNHKPSNTKVDKRVEPK >1mim_H QLQQSGTVLARPGASVKMSCKASGYSFTRYWMHWIKQRPGQGLEWIGAIYPGNSDTSYNQKFEGKAKLTAVTSASTAYMELSSLTHEDSAVYYCSRDYGYYFDFWGQGTTLTVSSASTKGPSVFPLAPSSKSTSGGTAALGCLVKDYFPEPVTVSWNSGALTSGVHTFPAVLQSSGLYSLSSVVTVPSSSLGTQTYICNVNHKPSNTKVDKRVEP >1mim_L QIVSTQSPAIMSASPGEKVTMTCSASSSRSYMQWYQQKPGTSPKRWIYDTSKLASGVPARFSGSGSGTSYSLTISSMEAEDAATYYCHQRSSYTFGGGTKLEIKRTVAAPSVFIFPPSDEQLKSGTASVVCLLNNFYPREAKVQWKVDNALQSGNSQESVTEQDSKDSTYSLSSTLTLSKADYEKHKVYACEVTHQGLSSPVTKSFNRGE >4edx_A DIQMTQTTSSLSASLGDRVTISCRASQDISNHLNWYQQKPDGTVKLLIYYISRFHSGVPSRFSGSGSGTDYSLTISNLEQEDIATYFCQQSKTLPYTFGGGTKLEIKRADAAPTVSIFPPSSEQLTSGGASVVCFLNNFYPKDINVKWKIDGSERQNGVLNSWTDQDSKDSTYSMSSTLTLTKDEYERHNSYTCEATHKTSTSPIVKSFNRNEC >4edx_H QVQLKESGPGLVAPSQSLSITCTVSGFSLIGYDINWVRQPPGKGLEWLGMIWGDGTTDYNSALKSRLSISKDNSKSQVFLKMNSLRTDDTATYSCARGGYYYGTSYYFDYWGQGTTLTVSSASTTPPSVYPLAPVCGDTTGSSVTLGCLVKGYFPEPVTLTWNSGSLSSGVHTFPAVLQSDLYTLSSSVTVTSSTWPSQSITCNVAHPASSTKVDKKIEPR >4kph_I EVQLQESGPSLVKPSQTLSLTCSVTGDSITSGYWNWIRKFPGNRLEYMGYINYSGNTFYNPSLKSRISITRDTSKNQYCLQLNSVTTEDTATYYCATYRFNYWGQGTLVTVSAAKTTPPSVYPLAPGCGDTTGSSVTLGCLVKGYFPEPVTVTWNSGSLSSGVHTFPALLQSGLYTMSSSVTVPSSTWPSQTVTCSVAHPASSTTVDKKLEP >4kph_H EVQLQESGPSLVKPSQTLSLTCSVTGDSITSGYWNWIRKFPGNRLEYMGYINYSGNTFYNPSLKSRISITRDTSKNQYCLQLNSVTTEDTATYYCATYRFNYWGQGTLVTVSAAKTTPPSVYPLAPGCGDTTGSSVTLGCLVKGYFPEPVTVTWNSGSLSSGVHTFPALLQSGLYTMSSSVTVPSSTWPSQTVTCSVAHPASSTTVDKKLEP >1mie_H QVQLQQPGAELVKPGASVKLSCKASGYTFTSSWINWVKQRPGQGLEWIGNVYPGSSSTNYNEKFKNKATLTVDTSSSTAYMQLSSLTSDDSAFYYCVRKDYSWFPYWGQGTLVTVSAAKTTAPSVYPLAPVCGDTSGSSVTLGCLVKGYFPEPVTLTWNSGSLSSGVHTFPAVLQSDLYTLSSSVTVTSSTWPSQSITCNVAHPASSTKVDKKIEPRGPTIKPCPPCK >1mie_L EIVMTQAAPSVPVTPGESVSISCRSSKSLLHSNGNTYLNWFLQRPGQSPQLLIYRMSNLASGVPDRFSGSGSETAFTLRTSRVEAEDVGVYYCMQHLEYPFTFGSGTKLELKRADAAPTVSIFPPSSEQLTSGGASVVCFLNNFYPKDINVKWKIDGSERQNGVLNSWTDQDSKDSTYSMSSTLTLTKDEYERHNSYTCEATHKTSTSPIVKSFNRNEC >1rvf_H QGQLQQSGAELVRPGSSVKISCKASGYAFSSFWVNWVKQRPGQGLEWIGQIYPGDGDNKYNGKFKGKATLTADKSSTTAYMQLYSLTSEDSAVYFCARSGNYPYAMDYWGQGTSVTVSS >1rvf_L QIVLTQSPAIMSAFPGEKVTITCSATSSVNYMHWFQQKPGTSPKLWIYSSSNLASGVPARFSGSGSGTSYSLTISRMEAEDAATYYCQQRSSYPITFGSGTKLEIKRADA >4edw_H QVQLQESGPGLVKPSETLSLTCTVSGFSLIGYDLNWIRQPPGKGLEWIGIIWGDGTTDYNSAVKSRVTISKDTSKNQFSLKLSSVTAADTAVYYCARGGYWYATSYYFDYWGQGTLVTVSSASTKGPSVFPLAPCSRSTSESTAALGCLVKDYFPEPVTVSWNSGALTSGVHTFPAVLQSSGLYSLSSVVTVPSSNFGTQTYTCNVDHKPSNTKVDKTVERKTSHHHHHHG >4edw_L DIQMTQSPSSLSASVGDRVTITCRASQSISNNLNWYQQKPGKAPKLLIYYTSRFHSGVPSRFSGSGSGTDFTFTISSLQPEDIATYYCQQEHTLPYTFGQGTKLEIKRTVAAPSVFIFPPSDEQLKSGTASVVCLLNNFYPREAKVQWKVDNALQSGNSQESVTEQDSKDSTYSLSSTLTLSKADYEKHKVYACEVTHQGLSSPVTKSFNRGEC >1ynk_H RVQLLESGAELMKPGASVQISCKATGYTFSEYWIEWVKERPGHGLEWIGEILPGSGRTNYREKFKGKATFTADTSSNTAYMQLSSLTSEDSAVYYCTRGYSSMDYWGQGTSVTVSAAKTTPPSVYPLAPGCGDTTGSSVTLGCLVKGYFPESVTVTWNSGSLSSSVHTFPALLQSGLYTMSSSVTVPSSTWPSQTVTCSVAHPASSTTVDKKLEPSGPI >1ynk_L ELVMTQSPLSLPVSLGDQASISCRPSQSLVHSNGNTYLHWYLQKPGQSPKLLIYRVSNRFSGVPDRFSGSGSGTAFTLKISRVEAEDLGVYFCSQGTHVPYTFGGGTKLELKRADAAPTVSIFPPSSEQLTSGGASVVCFLNNFYPKDINVKWKIDGSERQNGVLNSWTDQDSKDSTYSMSSTLTLTKDEYERHNSYTCEATHKTSTSPIVKSFNRNEC >3n85_H EVQLVESGGGLVQPGGSLRLSCAASGFSIWWSWIHWVRQAPGKGLEWVASISPSSGWTSYADSVKGRFTISADTSKNTAYLQMNSLRAEDTAVYYCARWWSSAMDYWGQGTLVTVSSASTKGPSVFPLAPSSKSTSGGTAALGCLVKDYFPEPVTVSWNSGALTSGVHTFPAVLQSSGLYSLSSVVTVPSSSLGTQTYICNVNHKPSNTKVDKKVEPKSCDKTH >3n85_L DIQMTQSPSSLSASVGDRVTITCRASQSVSSAVAWYQQKPGKAPKLLIYSASSLYSGVPSRFSGSRSGTDFTLTISSLQPEDFATYYCQQWWWWPSTFGQGTKVEIKRTVAAPSVFIFPPSDEQLKSGTASVVCLLNNFYPREAKVQWKVDNALQSGNSQESVTEQDSKDSTYSLSSTLTLSKADYEKHKVYACEVTHQGLSSPVTKSFNRGECEIS >4gxv_I EVQLVQSGGGVVQPRRSLRLSCAASGFTFSSYAMHWVRQAPGKGLEWVAVISYDGRNKYYADSVKGRFTVSRDNSKNTLYLQMNSLRAEDTSVYYCARELLMDYYDHIGYSPGPTWGQGTLVTVSSASTKGPSVFPLAPSSKSTSGGTAALGCLVKDYFPEPVTVSWNSGALTSGVHTFPAVLQSSGLYSLSSVVTVPSSSLGTQTYICNVNHKPSNTKVDKRVEPKSCDK >4gxv_H EVQLVQSGGGVVQPRRSLRLSCAASGFTFSSYAMHWVRQAPGKGLEWVAVISYDGRNKYYADSVKGRFTVSRDNSKNTLYLQMNSLRAEDTSVYYCARELLMDYYDHIGYSPGPTWGQGTLVTVSSASTKGPSVFPLAPSSKSTSGGTAALGCLVKDYFPEPVTVSWNSGALTSGVHTFPAVLQSSGLYSLSSVVTVPSSSLGTQTYICNVNHKPSNTKVDKRVEPKSCDK >4gxu_M EVQLVQSGGGVVQPRRSLRLSCAASGFTFSSYAMHWVRQAPGKGLEWVAVISYDGRNKYYADSVKGRFTVSRDNSKNTLYLQMNSLRAEDTSVYYCARELLMDYYDHIGYSPGPTWGQGTLVTVSSASTKGPSVFPLAPSSKSTSGGTAALGCLVKDYFPEPVTVSWNSGALTSGVHTFPAVLQSSGLYSLSSVVTVPSSSLGTQTYICNVNHKPSNTKVDKRVEPKSCDK >4gxu_O EVQLVQSGGGVVQPRRSLRLSCAASGFTFSSYAMHWVRQAPGKGLEWVAVISYDGRNKYYADSVKGRFTVSRDNSKNTLYLQMNSLRAEDTSVYYCARELLMDYYDHIGYSPGPTWGQGTLVTVSSASTKGPSVFPLAPSSKSTSGGTAALGCLVKDYFPEPVTVSWNSGALTSGVHTFPAVLQSSGLYSLSSVVTVPSSSLGTQTYICNVNHKPSNTKVDKRVEPKSCDK >2r69_H EVQLQQSGAELVKPGASVKLSCTASGFNIKDTYMHWVKQRPEQGLEWIGRIDPANGYSKYDPKFQGKATITADTSSNAAYLQLSSLTSEDTAVYFCARDYEGFAYWGQGTLVTVSSAKTTPPSVYPLAPGAATSSSVTLGCLVKGYFPEPVTLTWNSGSLSSGVHTFPAVLQSDLYTLSSSVTVTSSTWPSQTITCNVAHPASSTKVDKKIEPR >2r69_L DIVLTQSPASLAVSLGQRATISCRASESVVRYGNSFMHWYQQKPGQPPKLLIYRASSLESGIPTRFSGSGSRTDFTLTINPVEADDVATYYCQQTNVDPWAFGGGTKLEIKRADAAPTVSIFPPSSEQLTSGGASVVCFLNNFYPKDINVKWKIDGSERQNGVLNSWTDQDSKDSTYSMSSTLTLTKDEYERHNSYTCEATSPIVKSFNRNE >1om3_H EVQLVESGGGLVKAGGSLILSCGVSNFRISAHTMNWVRRVPGGGLEWVASISTSSTYRDYADAVKGRFTVSRDDLEDFVYLQMHKMRVEDTAIYYCARKGSDRLSDNDPFDAWGPGTVVTVSPASTKGPSVFPLAPSSKSTSGGTAALGCLVKDYFPEPVTVSWNSGALTSGVHTFPAVLQSSGLYSLSSVVTVPSSSLGTQTYICNVNHKPSNTKVDKKVEPKS >1om3_K EVQLVESGGGLVKAGGSLILSCGVSNFRISAHTMNWVRRVPGGGLEWVASISTSSTYRDYADAVKGRFTVSRDDLEDFVYLQMHKMRVEDTAIYYCARKGSDRLSDNDPFDAWGPGTVVTVSPASTKGPSVFPLAPSSKSTSGGTAALGCLVKDYFPEPVTVSWNSGALTSGVHTFPAVLQSSGLYSLSSVVTVPSSSLGTQTYICNVNHKPSNTKVDKKVEPKS >1vfb_A DIVLTQSPASLSASVGETVTITCRASGNIHNYLAWYQQKQGKSPQLLVYYTTTLADGVPSRFSGSGSGTQYSLKINSLQPEDFGSYYCQHFWSTPRTFGGGTKLEIK >1vfb_B QVQLQESGPGLVAPSQSLSITCTVSGFSLTGYGVNWVRQPPGKGLEWLGMIWGDGNTDYNSALKSRLSISKDNSKSQVFLKMNSLHTDDTARYYCARERDYRLDYWGQGTTLTVSS >1vfa_A DIVLTQSPASLSASVGETVTITCRASGNIHNYLAWYQQKQGKSPQLLVYYTTTLADGVPSRFSGSGSGTQYSLKINSLQPEDFGSYYCQHFWSTPRTFGGGTKLEIKR >1vfa_B QVQLQESGPGLVAPSQSLSITCTVSGFSLTGYGVNWVRQPPGKGLEWLGMIWGDGNTDYNSALKSRLSISKDNSKSQVFLKMNSLHTDDTARYYCARERDYRLDYWGQGTTLTVSS >4fz8_H EVQLVESGGGLVKPGGSLRLSCAASGFTFSSYSMNWVRQAPGRGLEWVSSISNTSTYIYYADSVEGRFTLSRDNAKNSLYLQMNSLRAEDTAVYYCARANQHFDWLLSLLGGYHYYGMDVWGQGTTVTVSSASTKGPSVFPLAPSSKSTSGGTAALGCLVKDYFPEPVTVSWNSGALTSGVHTFPAVLQSSGLYSLSSVVTVPSSSLGTQTYICNVNHKPSNTKVDKRVEPKSCDKT >4fz8_L DIVMTQSPLSLPVTPGEPASISCRSSQSLLHSNGYNYLDWYLQKPGQSPQLLIYLGSNRASGVPDRFIGSGSGTDFTLKISRVEAEDVGVFYCMQALQAVGFGPGTKVEIKRTVAAPSVFIFPPSDEQLKSGTASVVCLLNNFYPREAKVQWKVDNALQSGNSQESVTEQDSKDSTYSLSSTLTLSKADYEKHKVYACEVTHQGLSSPVTKSFNRGEC >3klh_C DIQMTQTTSSLSASLGDRVTISCSASQDISSYLNWYQQKPEGTVKLLIYYTSSLHSGVPSRFSGSGSGTDYSLTISNLEPEDIATYYCQQYSKFPWTFGGGTKLEIKRADAAPTVSIFPPSSEQLTSGGASVVCFLNNFYPKDINVKWKIDGSERQNGVLNSWTDQDSKDSTYSMSSTLTLTKDEYERHNSYTCEATHKTSTSPIVKSFNR >3klh_D QITLKESGPGIVQPSQPFRLTCTFSGFSLSTSGIGVTWIRQPSGKGLEWLATIWWDDDNRYNPSLKSRLTVSKDTSNNQAFLNMMTVETADTAIYYCAQSAITSVTDSAMDHWGQGTSVTVSSAKTTPPSVYPLAPGSAAQTNSMVTLGCLVKGYFPEPVTVTWNSGSLSSGVHTFPAVLQSDLYTLSSSVTVPSSTWPSETVTCNVAHPASSTKVDKKIVPADC >3ezj_H QVQLQESGGGLVQAGGSLRLSCAASGSIFSINSMDWDRQAPGKQRELVATITSGGSTNYADSVKGRFTISRDNAKNTVYLQMNSLKPEDTAVYYCNANVKTWAGMTRDYWGQGTQVTVSSHHHHHH >3ezj_B QVQLQESGGGLVQAGGSLRLSCAASGSIFSINSMDWDRQAPGKQRELVATITSGGSTNYADSVKGRFTISRDNAKNTVYLQMNSLKPEDTAVYYCNANVKTWAGMTRDYWGQGTQVTVSSHHHHHH >3qsk_B GSQVQLVESGGGLVQAGGSLRLSCAASGYHHPYIYMGWFRQAPGKEREGVAAMDSGGGGTLYADSVKGRFTISRDKGKNTVYLQMDSLKPEDTATYYCAAGGHHLRDHTYGQWGQGTQVTVSS >2j88_H QVTLKESGPGILQPSQTLSLTCSFSGFSLSTSGMGVSWIRQPSGKGLEWLAHIYWDDDKRYNPSLKSRLTISKDTSRNQVFLKITSVDTADTATYYCTLYYGSVDYWGQGTSVTVSSAKTTPPSVYPLAPGSAAQTNSMVTLGCLVKGYFPEPVTVTWNSGSLSSGVHTFPAVLQSDLYTLSSSVTVPSST >2j88_L DIQMTQSPASLSASVGETVTITCRASENIYSYLTWYQQKQGKSPQLLVYNAKTLAEGVPSRFSGSGSGTQFSLKISSLQPEDFGNYYCQHHYGTRTFGGGTRLEIKRADAAPTVSIFPPSSEQLTSGGASVVCFLNNFYPKDINVKWKIDGSERQNGVLNSWTDQDSKDSTYSMSSTLTLTKDEYERHNSYTCEATHKTSTSPIVKSFNRNEC >4hzl_A EVMLVESGGDLVKPGGSLKLPCAASGFTVSTYAMSWIRQTPEKRLEWVATISSGGSYTYYPDNVKGRFTISRDIAKNTLYLQMSSLRSEDTAMYYCARHPPTVVAGDAMDYWGQGTSVTVSSAKTTPPSVYPLAPGSAAQTNSMVTLGCLVKGYFPEPVTVTWNSGSLSSGVHTFPAVLQSDLYTLSSSVTVPSSTWPSETVTCNVAHPASSTKVDKKIVPR >4hzl_H EVMLVESGGDLVKPGGSLKLPCAASGFTVSTYAMSWIRQTPEKRLEWVATISSGGSYTYYPDNVKGRFTISRDIAKNTLYLQMSSLRSEDTAMYYCARHPPTVVAGDAMDYWGQGTSVTVSSAKTTPPSVYPLAPGSAAQTNSMVTLGCLVKGYFPEPVTVTWNSGSLSSGVHTFPAVLQSDLYTLSSSVTVPSSTWPSETVTCNVAHPASSTKVDKKIVPR >2p46_B GSQVQMVESGGGLVQAGGSLRLSCAASGYAYTYIYMGWFRQAPGKEREGVAAMDSGGGGTLYADSVKGRMTISRDKGKNTVYLQMDSLKPEDTATYYCAAGGYELRDRTYGQWGQGTQVTVSS >2p46_D GSQVQMVESGGGLVQAGGSLRLSCAASGYAYTYIYMGWFRQAPGKEREGVAAMDSGGGGTLYADSVKGRMTISRDKGKNTVYLQMDSLKPEDTATYYCAAGGYELRDRTYGQWGQGTQVTVSS >4hh9_A EVVLTQSPATLSLSPGERATISCRASQSVGGYLTWYQQKPGQAPRLLIYDASNRATGIPARFSGSGSGTDFTLTISGLEPEDFAIYYCQQRGNWPPITFGQGTRLEIKRTVAAPSVFIFPPSDEQLKSGTASVVCLLNNFYPREAKVQWKVDNALQSGNSQESVTEQDSKDSTYSLSSTLTLSKADYEKHKVYACEVTHQGLSSPVTKSFNRGEC >4hh9_C EVVLTQSPATLSLSPGERATISCRASQSVGGYLTWYQQKPGQAPRLLIYDASNRATGIPARFSGSGSGTDFTLTISGLEPEDFAIYYCQQRGNWPPITFGQGTRLEIKRTVAAPSVFIFPPSDEQLKSGTASVVCLLNNFYPREAKVQWKVDNALQSGNSQESVTEQDSKDSTYSLSSTLTLSKADYEKHKVYACEVTHQGLSSPVTKSFNRGEC >2p44_B GSQVQLVESGGGLVQAGGSLRLSCAASGYAYTYIYMGWFRQAPGKEREGVAAMDSGGGGTLYADSVKGRMTISRDKGKNTVYLQMDSMKPEDTATYYCAAGGYELRDRTYGQWGQGTQVTVSS >2p45_B GSQVQMVESGGGLVQAGGSLRLSCAASGYAYTYIYMGWFRQAPGKEREGVAAMDSGGGGTLYADSVKGRMTISRDKGKNTVYLQMDSLKPEDTATYYCAAGGYELRDRTYGQWGQGTQVTVSS >2p42_B GSQVQLVESGGGLVQAGGSLRLSCAASGYAYTYIYMGWFRQAPGKEREGVAAMDSGGGGTLYADSVKGRFTISRDKGKNTVYLQMDSLKPEDTATYYCAAGGYELRDRTYGQWGQGTQVTVSS >2p42_D GSQVQLVESGGGLVQAGGSLRLSCAASGYAYTYIYMGWFRQAPGKEREGVAAMDSGGGGTLYADSVKGRFTISRDKGKNTVYLQMDSLKPEDTATYYCAAGGYELRDRTYGQWGQGTQVTVSS >2p43_B GSQVQLVESGGGLVQAGGSLRLSCAASGYAYTYIYMGWFRQAPGKEREGVAAMDSGGGGTLYADSVKGRFTISRDKGKNTVYLQMDSLKPEDTATYYCAAGGYELRDRTYGQWGQGTQVTVSS >3grw_H EVQLVESGGGLVQPGGSLRLSCAASGFTFTSTGISWVRQAPGKGLEWVGRIYPTNGSTNYADSVKGRFTISADTSKNTAYLQMNSLRAEDTAVYYCARTYGIYDLYVDYTEYVMDYWGQGTLVTVSSASTKGPSVFPLAPSSKSTSGGTAALGCLVKDYFPEPVTVSWNSGALTSGVHTFPAVLQSSGLYSLSSVVTVPSSSLGTQTYICNVNHKPSNTKVDKKVEPKSCDKTHT >3grw_L DIQMTQSPSSLSASVGDRVTITCRASQDVSTAVAWYQQKPGKAPKLLIYSASFLYSGVPSRFSGSGSGTDFTLTISSLQPEDFATYYCQQSYTTPPTFGQGTKVEIKRTVAAPSVFIFPPSDEQLKSGTASVVCLLNNFYPREAKVQWKVDNALQSGNSQESVTEQDSKDSTYSLSSTLTLSKADYEKHKVYACEVTHQGLSSPVTKSFNRGEC >2p48_B GSQVQMVESGGGLVQAGGSLRLSCAASGYAYTYIYMGWFRQAPGKEREGVAAMDSGGGGTLYADSVKGRMTISRDKGKNTVYLQMDSLKPEDTATYYCAAGGYELRDRTYGQWGQGTQVTVSS >2p49_B GSQVQLVESGGGLVQAGGSLRLSCAASGYAYTYIYMGWFRQAPGKEREGVAAMDSGGGGTLYADSVKGRFTISRDKGKNTVYLQMDSLKPEDTATYYCAAGGYELRDRTYGQWGQGTQVTVSS >4ej1_C QVQLQESGGGLVQAGGSLRLSCTASGRTFSSYAMGWFRQTPGKEREFVAAITWGGSTTLYADSVKGRFTMSRDNAKNTVYLQMNSLKPEDTAVYYCAADGSQYRSTYSFRDKPDYGSWGQGTQVTVSSHHHHHH >4ej1_D QVQLQESGGGLVQAGGSLRLSCTASGRTFSSYAMGWFRQTPGKEREFVAAITWGGSTTLYADSVKGRFTMSRDNAKNTVYLQMNSLKPEDTAVYYCAADGSQYRSTYSFRDKPDYGSWGQGTQVTVSSHHHHHH >3qa3_A DIEMTQSPSSLGVSVGEKVTMSCKSSQNLLYSSNQKNYLAWYQQKPGQSPKLLIYWASTRESGVPDRFTGTGSGTDFTLTISSVKAEDLAVYYCQQYYSYPLTFGAGTKLELKRADAAPTVSIFPPSSEQLTSGGASVVCFLNNFYPKDINVKWKIDGSERQNGVLNSWTDQDSKDSTYSMSSTLTLTKDEYERHNSYTCEATHKTSTSPIVKSFNRNEC >3qa3_C DIEMTQSPSSLGVSVGEKVTMSCKSSQNLLYSSNQKNYLAWYQQKPGQSPKLLIYWASTRESGVPDRFTGTGSGTDFTLTISSVKAEDLAVYYCQQYYSYPLTFGAGTKLELKRADAAPTVSIFPPSSEQLTSGGASVVCFLNNFYPKDINVKWKIDGSERQNGVLNSWTDQDSKDSTYSMSSTLTLTKDEYERHNSYTCEATHKTSTSPIVKSFNRNEC >3go1_H EVQLQESGPGLVKPSETLSLTCTVSGGPINNAYWTWIRQPPGKGLEYLGYVYHTGVTNYNPSLKSRLTITIDTSRKQLSLSLKFVTAADSAVYYCAREWAEDGDFGNAFHVWGQGTMVAVSSASTKGPSVFPLAPSSKSTSGGTAALGCLVKDYFPEPVTVSWNSGALTSGVHTFPAVLQSSGLYSLSSVVTVPSSSLGTQTYICNVNHKPSNTKVDKRVEP >3go1_L SYVLTQPPSVSVSPGQTARITCSAEALSNQYAYWYRQRPGQAPLLIIYKDTKRPSGIPERFSGSTSGTTVTLTISGVQAEDEADYYCQSADSSGDYVFGGGTKVTVLGQPKANPTVTLFPPSSEELQANKATLVCLISDFYPGAVTVAWKADGSPVKAGVETTKPSKQSNNKYAASSYLSLTPEQWKSHRSYSCQVTHEGSTVEKTVAP >3u30_C EVQLVESGGGLVQPGGSLRLSCAASGFTFSNTYISWVRQAPGKGLEWVASITPSSGQTDYADSVKGRFTISADTSKNTAYLQMNSLRAEDTAVYYCARTWLLRWVMDLWGQGTLVTVSSASTKGPSVFPLAPSSKSTSGGTAALGCLVKDYFPEPVTVSWNSGALTSGVHTFPAVLQSSGLYSLSSVVTVPSSSLGTQTYICNVNHKPSNTKVDKKVEPKSCDKTHT >3u30_B DIQMTQSPSSLSASVGDRVTITCRASQDVSTAVAWYQQKPGKAPKLLIYSAKFLYSGVPSRFSGSGSGTDFTLTISSLQPEDFATYYCQQSYTTPPTFGQGTKVEIKRTVAAPSVFIFPPSDEQLKSGTASVVCLLNNFYPREAKVQWKVDNALQSGNSQESVTEQDSKDSTYSLSSTLTLSKADYEKHKVYACEVTHQGLSSPVTKSFNRGEC >3u36_A QRLVESGGGVVQPGSSLRLSCAASGFDFSRQGMHWVRQAPGQGLEWVAFIKYDGSEKYHADSVWGRLSISRDNSKDTLYLQMNSLRVEDTATYFCVREAGGPDYRNGYNYYDFYDGYYNYHYMDVWGKGTTVTVSSASTKGPSVFPLAPSSKSTSGGTAALGCLVKDYFPEPVTVSWNSGALTSGVHTFPAVLQSSGLYSLSSVVTVPSSSLGTQTYICNVNHKPSNTKVDKKVEPKSCDKGLEVLFQ >3u36_C QRLVESGGGVVQPGSSLRLSCAASGFDFSRQGMHWVRQAPGQGLEWVAFIKYDGSEKYHADSVWGRLSISRDNSKDTLYLQMNSLRVEDTATYFCVREAGGPDYRNGYNYYDFYDGYYNYHYMDVWGKGTTVTVSSASTKGPSVFPLAPSSKSTSGGTAALGCLVKDYFPEPVTVSWNSGALTSGVHTFPAVLQSSGLYSLSSVVTVPSSSLGTQTYICNVNHKPSNTKVDKKVEPKSCDKGLEVLFQ >4fze_H QVQLVQSGAEVKKPGSSAKVSCKASRGTLSSYFISWVRQAPGQGLEWLGGITPLLGTANYAQKFQGRVTITADKSTNTAFMQLSSLTSDDTAVYYCAGTVYYDILTGLYTNFHYWGQGTLVTVSSASTKGPSVFPLAPSSKSTSGGTAALGCLVKDYFPEPVTVSWNSGALTSGVHTFPAVLQSSGLYSLSSVVTVPSSSLGTQTYICNVNHKPSNTKVDKRVEPKSCDKTH >4fze_L QSVLTQPPSVSVSPGQTASITCSGDNLRDGYASWYQQKPGQSPVLVIYRDDKRPSGIPERFSGSSSGNTAILTLSGAQAMDEADYYCQAWASTTVIFGGGTRLTVLGQPKAAPSVTLFPPSSEELQANKATLVCLISDFYPGAVTVAWKADSSPVKAGVETTTPSKQSNNKYAASSYLSLTPEQWKSHRSYSCQVTHEGSTVEKTVAPTECS >2hvk_A QVQLQQPGAELVKPGASVKLSCKASGYTFTSDWIHWVKQRPGHGLEWIGEIIPSYGRANYNEKIQKKATLTADKSSSTAFMQLSSLTSEDSAVYYCARERGDGYFAVWGAGTTVTVSSAKTTPPSVYPLAPGSAAQTNSMVTLGCLVKGYFPEPVTVTWNSGSLSSGVHTFPAVLQSDLYTLSSSVTVPSSSWPSETVTCNVAHPASSTKVDKKIVPRD >2hvk_B DILLTQSPAILSVSPGERVSFSCRASQSIGTDIHWYQQRTNGSPRLLIKYASESISGIPSRFSGSGSGTDFTLSINSVESEDIANYYCQQSNRWPFTFGSGTKLEIKRADAAPTVSIFPPSSEQLTSGGASVVCFLNNFYPKDINVKWKIDGSERQNGVLNSWTDQDSKDSTYSMSSTLTLTKDEYERHNSYTCEATHKTSTSPIVKSFNRN >3ehb_C EVKLQESGGDLVQPGGSLKLSCAASGFTFSSYTMSWVRQTPEKRLEWVASINNGGGRTYYPDTVKGRFTISRDNAKNTLYLQMSSLKSEDTAMYYCVRHEYYYAMDYWGQGTTVTVSSAWRHPQFGG >3ehb_D DIELTQTPVSLSASVGETVTITCRASENIYSYLAWYQQKQGKSPQFLVYNAKTLGEGVPSRFSGSGSGTQFSLKINSLLPEDFGSYYCQHHYGTPPLTFGGGTKLEIKREQKLISEEDLM >2p4a_B QVQLVESGGGLVQAGGSLRLSCAASGYPWTYIYMGWFRQAPGKEREGVAAMDSGGGGTLYADSVKGRFTISRDKGKNTVYLQMDSLKPEDTATYYCAAGGDALVATRYGRWGQGTQVTVSS >2p4a_D QVQLVESGGGLVQAGGSLRLSCAASGYPWTYIYMGWFRQAPGKEREGVAAMDSGGGGTLYADSVKGRFTISRDKGKNTVYLQMDSLKPEDTATYYCAAGGDALVATRYGRWGQGTQVTVSS >3b2u_C QVQLQESGPGLVKPSQTLSLTCTVSGGSISSGDYYWSWIRQPPGKGLEWIGYIYYSGSTDYNPSLKSRVTMSVDTSKNQFSLKVNSVTAADTAVYYCARVSIFGVGTFDYWGQGTLVTVSSASTKGPSVFPLAPSSKSTSGGTAALGCLVKDYFPEPVTVSWNSGALTSGVHTFPAVLQSSGLYSLSSVVTVPSSSLGTQTYICNVNHKPSNTKVDKKVEPKS >3b2u_D EIVMTQSPATLSLSPGERATLSCRASQSVSSYLAWYQQKPGQAPRLLIYDASNRATGIPARFSGSGSGTDFTLTISSLEPEDFAVYYCHQYGSTPLTFGGGTKAEIKRTVAAPSVFIFPPSDEQLKSGTASVVCLLNNFYPREAKVQWKVDNALQSGNSQESVTEQDSKDSTYSLSSTLTLSKADYEKHKVYACEVTHQGLSSPVTKSFNRGA >4hha_A EVVLTQSPATLSLSPGERATISCRASQSVGGYLTWYQQKPGQAPRLLIYDASNRATGIPARFSGSGSGTDFTLTISGLEPEDFAIYYCQQRGNWPPITFGQGTRLEIKRTVAAPSVFIFPPSDEQLKSGTASVVCLLNNFYPREAKVQWKVDNALQSGNSQESVTEQDSKDSTYSLSSTLTLSKADYEKHKVYACEVTHQGLSSPVTKSFNRGEC >4hha_B QVQLVESGGGVVQPGRSLRLSCAASGFTFSNHGMHWVRQAPGKRLEWVAVISYDGRHEHYADLVKGRFTISRDNSKNTLYLQMNSLRAEDRALYFCAREGLSRDNSGFTGLIDYWGQGTMVTVSSASTKGPSVFPLAPSSKSTSGGTAALGCLVKDYFPEPVTVSWNSGALTSGVHTFPAVLQSSGLYSLSSVVTVPSSSLGTQTYICNVNHKPSNTKVDKKVEPKSCDKTHTGLE >3b2v_H QVQLQESGPGLVKPSQTLSLTCTVSGGSISSGDYYWSWIRQPPGKGLEWIGYIYYSGSTDYNPSLKSRVTMSVDTSKNQFSLKVNSVTAADTAVYYCARVSIFGVGTFDYWGQGTLVTVSSASTKGPSVFPLAPSSKSTSGGTAALGCLVKDYFPEPVTVSWNSGALTSGVHTFPAVLQSSGLYSLSSVVTVPSSSLGTQTYICNVNHKPSNTKVDKKVEPKS >3b2v_L EIVMTQSPATLSLSPGERATLSCRASQSVSSYLAWYQQKPGQAPRLLIYDASNRATGIPARFSGSGSGTDFTLTISSLEPEDFAVYYCHQYGSTPLTFGGGTKAEIKRTVAAPSVFIFPPSDEQLKSGTASVVCLLNNFYPREAKVQWKVDNALQSGNSQESVTEQDSKDSTYSLSSTLTLSKADYEKHKVYACEVTHQGLSSPVTKSFNRGA >3opz_I VKLQQSGVELVRPGTSVKMSCKAVGYTFTYDWIGWVKQRPGHGLEWIGDIYLGGGYINYNEKFKGKVILTADTSSSTAYMQLSSLTSEDSAIYYCARGHYDGSYFDYWGQGTTLTVSSAKTTAPSVYPLAPVCGDTSGSSVTLGCLVKGYFPEPVTLTWNSGSLSSGVHTFPAVLQSDLYTLSSSVTVTSSTWPSQSITCNVAHPASSTKVDKKIEPRGPTI >3opz_H VKLQQSGVELVRPGTSVKMSCKAVGYTFTYDWIGWVKQRPGHGLEWIGDIYLGGGYINYNEKFKGKVILTADTSSSTAYMQLSSLTSEDSAIYYCARGHYDGSYFDYWGQGTTLTVSSAKTTAPSVYPLAPVCGDTSGSSVTLGCLVKGYFPEPVTLTWNSGSLSSGVHTFPAVLQSDLYTLSSSVTVTSSTWPSQSITCNVAHPASSTKVDKKIEPRGPTI >3uzq_A EVKLLEQSGAELVKPGASVRLSCTASGFNIKDTYMSWVKQRPEQGLEWIGRIDPANGDTKYDPKFQGKATITADTSSNTAYLHLSSLTSGDTAVYYCSRGWEGFAYWGQGTLVTVSAGGGGSGGGGSGGGGSELVMTQTPASLAVSLGQRATISCRASENVDRYGNSFMHWYQQKAGQPPKLLIYRASNLESGIPARFSGSGSRTDFTLTINPVEADDVATYFCQRSNEVPWTFGGGTKLEIKRPLEHHHHHH >3uzq_A EVKLLEQSGAELVKPGASVRLSCTASGFNIKDTYMSWVKQRPEQGLEWIGRIDPANGDTKYDPKFQGKATITADTSSNTAYLHLSSLTSGDTAVYYCSRGWEGFAYWGQGTLVTVSAGGGGSGGGGSGGGGSELVMTQTPASLAVSLGQRATISCRASENVDRYGNSFMHWYQQKAGQPPKLLIYRASNLESGIPARFSGSGSRTDFTLTINPVEADDVATYFCQRSNEVPWTFGGGTKLEIKRPLEHHHHHH >3uze_A EVKLLEQSGAELVKPGASVRLSCTASGFNIKDTYMSWVKQRPEQGLEWIGRIDPANGDTKYDPKFQGKATITADTSSNTAYLHLSSLTSGDTAVYYCSRGWEGFAYWGQGTLVTVSAGGGGSGGGGSGGGGSELVMTQTPASLAVSLGQRATISCRASENVDRYGNSFMHWYQQKAGQPPKLLIYRASNLESGIPARFSGSGSRTDFTLTINPVEADDVATYFCQRSNEVPWTFGGGTKLEIKRPLEHHHHHH >3uze_A EVKLLEQSGAELVKPGASVRLSCTASGFNIKDTYMSWVKQRPEQGLEWIGRIDPANGDTKYDPKFQGKATITADTSSNTAYLHLSSLTSGDTAVYYCSRGWEGFAYWGQGTLVTVSAGGGGSGGGGSGGGGSELVMTQTPASLAVSLGQRATISCRASENVDRYGNSFMHWYQQKAGQPPKLLIYRASNLESGIPARFSGSGSRTDFTLTINPVEADDVATYFCQRSNEVPWTFGGGTKLEIKRPLEHHHHHH >3uze_B EVKLLEQSGAELVKPGASVRLSCTASGFNIKDTYMSWVKQRPEQGLEWIGRIDPANGDTKYDPKFQGKATITADTSSNTAYLHLSSLTSGDTAVYYCSRGWEGFAYWGQGTLVTVSAGGGGSGGGGSGGGGSELVMTQTPASLAVSLGQRATISCRASENVDRYGNSFMHWYQQKAGQPPKLLIYRASNLESGIPARFSGSGSRTDFTLTINPVEADDVATYFCQRSNEVPWTFGGGTKLEIKRPLEHHHHHH >3uze_B EVKLLEQSGAELVKPGASVRLSCTASGFNIKDTYMSWVKQRPEQGLEWIGRIDPANGDTKYDPKFQGKATITADTSSNTAYLHLSSLTSGDTAVYYCSRGWEGFAYWGQGTLVTVSAGGGGSGGGGSGGGGSELVMTQTPASLAVSLGQRATISCRASENVDRYGNSFMHWYQQKAGQPPKLLIYRASNLESGIPARFSGSGSRTDFTLTINPVEADDVATYFCQRSNEVPWTFGGGTKLEIKRPLEHHHHHH >3sy0_A DIVMSQSPSSLAVSAGEKVTMSCKSSQSLLNSRTRKNYLAWYQQKPGQSPKLLIYWASTRESGVPDRFTGSGSGTDFTLTITSVQAEDLAVYYCKQSYNLRTFGGGTKLEIKRADAAPTVSIFPPSSEQLTSGGASVVCFLNNFYPKDINVKWKIDGSERQNGVLNSWTDQDSKDSTYSMSSTLTLTKDEYERHNSYTCEATHKTSTSPIVKSFNRNEC >3sy0_B EVKLVESGGGLVQSGGSLRLSCATSGFTFTDYYMSWVRQPPGKALEWLGFIRNKANGYTTEYSPSVKGRFTISRDNSQSILYLQMNTLRAEDSATYYCARDHDGYYERFSYWGQGTLVTVSAAKTTPPSVYPLAPGSAAQTNSMVTLGCLVKGYFPEPVTVTWNSGSLSSGVHTFPAVLQSDLYTLSSSVTVPSSTWPSETVTCNVAHPASSTKVDKKIVPR >3etb_I MADYKDIQMTQTTSSLSASLGDRVTVSCRASQDIRNYLNWYQQKPDGTVKFLIYYTSRLQPGVPSRFSGSGSGTDYSLTINNLEQEDIGTYFCQQGNTPPWTFGGGTKLEIKRGGGGSGGGGSGGGGSGGGGSEVQLQQSGPELVKPGASVKISCKDSGYAFNSSWMNWVKQRPGQGLEWIGRIYPGDGDSNYNGKFEGKAILTADKSSSTAYMQLSSLTSVDSAVYFCARSGLLRYAMDYWGQGTSVTVSS >3etb_I MADYKDIQMTQTTSSLSASLGDRVTVSCRASQDIRNYLNWYQQKPDGTVKFLIYYTSRLQPGVPSRFSGSGSGTDYSLTINNLEQEDIGTYFCQQGNTPPWTFGGGTKLEIKRGGGGSGGGGSGGGGSGGGGSEVQLQQSGPELVKPGASVKISCKDSGYAFNSSWMNWVKQRPGQGLEWIGRIYPGDGDSNYNGKFEGKAILTADKSSSTAYMQLSSLTSVDSAVYFCARSGLLRYAMDYWGQGTSVTVSS >3etb_H MADYKDIQMTQTTSSLSASLGDRVTVSCRASQDIRNYLNWYQQKPDGTVKFLIYYTSRLQPGVPSRFSGSGSGTDYSLTINNLEQEDIGTYFCQQGNTPPWTFGGGTKLEIKRGGGGSGGGGSGGGGSGGGGSEVQLQQSGPELVKPGASVKISCKDSGYAFNSSWMNWVKQRPGQGLEWIGRIYPGDGDSNYNGKFEGKAILTADKSSSTAYMQLSSLTSVDSAVYFCARSGLLRYAMDYWGQGTSVTVSS >3etb_H MADYKDIQMTQTTSSLSASLGDRVTVSCRASQDIRNYLNWYQQKPDGTVKFLIYYTSRLQPGVPSRFSGSGSGTDYSLTINNLEQEDIGTYFCQQGNTPPWTFGGGTKLEIKRGGGGSGGGGSGGGGSGGGGSEVQLQQSGPELVKPGASVKISCKDSGYAFNSSWMNWVKQRPGQGLEWIGRIYPGDGDSNYNGKFEGKAILTADKSSSTAYMQLSSLTSVDSAVYFCARSGLLRYAMDYWGQGTSVTVSS >3chn_A QVKLLEQSGAEVKKPGASVKVSCKASGYSFTSYGLHWVRQAPGQRLEWMGWISAGTGNTKYSQKFRGRVTFTRDTSATTAYMGLSSLRPEDTAVYYCARDPYGGGKSEFDYWGQGTLVTVSSASPTSPKVFPLSLCSTQPDGNVVIACLVQGFFPQEPLSVTWSESGQGVTARNFPPSQDASGDLYTTSSQLTLPATQCLAGKSVTCHVKHYTNPSQDVTVPCPVPSTPPTPSPSTPPTPSPSCCHPRLSLHRPALEDLLLGSEANLTCTLTGLRDASGVTFTWTPSSGKSAVQGPPERDLCGCYSVSSVLPGCAEPWNHGKTFTCTAAYPESKTPLTATLSKSGNTFRPEVHLLPPPSEELALNELVTLTCLARGFSPKDVLVRWLQGSQELPREKYLTWASRQEPSQGTTTFAVTSILRVAAEDWKKGDTFSCMVGHEALPLAFTQKTIDRLAGKPTHVNVSVVMAEVDGTCY >3chn_C QVKLLEQSGAEVKKPGASVKVSCKASGYSFTSYGLHWVRQAPGQRLEWMGWISAGTGNTKYSQKFRGRVTFTRDTSATTAYMGLSSLRPEDTAVYYCARDPYGGGKSEFDYWGQGTLVTVSSASPTSPKVFPLSLCSTQPDGNVVIACLVQGFFPQEPLSVTWSESGQGVTARNFPPSQDASGDLYTTSSQLTLPATQCLAGKSVTCHVKHYTNPSQDVTVPCPVPSTPPTPSPSTPPTPSPSCCHPRLSLHRPALEDLLLGSEANLTCTLTGLRDASGVTFTWTPSSGKSAVQGPPERDLCGCYSVSSVLPGCAEPWNHGKTFTCTAAYPESKTPLTATLSKSGNTFRPEVHLLPPPSEELALNELVTLTCLARGFSPKDVLVRWLQGSQELPREKYLTWASRQEPSQGTTTFAVTSILRVAAEDWKKGDTFSCMVGHEALPLAFTQKTIDRLAGKPTHVNVSVVMAEVDGTCY >1fig_H DVQLQQSGPELEKPGASVKISCKASGFSLPGHNINWIVQRNGKSLEWIGNIDPYYGGTNFNPKFKGKATLTVDKSSSTLYMHLTSLQSEDSAVYYCARRRDGNYGFTYWGQGTLVTVSAAKTTPPSVYPLAPGSAAQTNSMVTLGCLVKGYFPEPVTVTWNSGSLSSGVHTFPAVLQSDLYTLSSSVTVPSSTWPSETVTCNVAHPASSTKVDKKI >1fig_L ENVLTQSPAIMSASPGEKVTMACRASSSVSSTYLHWYQQKSGASPKLLIYSTSNLASGVPARFSGSGSGTSYSLTISSVEAEDAATYYCQQYSGYPLTFGAGTKLELKRADAAPTVSIFPPSSEQLTSGGASVVCFLNNFYPKDINVKWKIDGSERQNGVLNSWTDQDSKDSTYSMSSTLTLTKDEYERHNSYTCEATHKTSTSPIVKSFNRNEC >1ngw_A ELVMTQTPKFMSTTVGDRVSITCKASQNVGTPVAWYQQKPGQSPKLLIYSASNRYTGVPDRFTGSGSGTDFTLTISNMQSEDLADYFCQQYSSYPLTFGGGTKVEIKRTVAAPSVFIFPPSDEQLKSGTASVVCLLNNFYPREAKVQWKVDNALQSGNSQESVTEQDSKDSTYSLSSTLTLSKADYEKHKVYACEVTHQGLSSPVTKSFNRNE >1ngw_H QVQLLESGAELVKPGASVKLSCKASGYTFTSYWMHWVKQRPGRGLEWIGMIDPNSGGTKYNEKFKSKATLTVDKPSNTAYMQLSSLTSEDSAVYYCTRRDMDYWGAGTTVTVSSASTKGPSVFPLAPSSKSTSGGTAALGCLVKDYFPEPVTVSWNSGALTSGVHTFPAVLQSSGLYSLSSVVTVPSSSLGTQTYICNVNHKPSNTKVDKKIVPKS >4jpv_H QVQLLQSGAAVTKPGASVRVSCEASGYNIRDYFIHWWRQAPGQGLQWVGWINPKTGQPNNPRQFQGRVSLTRHASWDFDTYSFYMDLKALRSDDTAVYFCARQRSDYWDFDVWGSGTQVTVSSASTKGPSVFPLAPSSKSTSGGTAALGCLVKDYFPEPVTVSWNSGALTSGVHTFPAVLQSSGLYSLSSVVTVPSSSLGTQTYICNVNHKPSNTKVDKKVEPKSC >4jpv_L DIQMTQSPSSLSASVGDTVTITCQANGYLNWYQQRRGKAPKLLIYDGSKLERGVPSRFSGRRWGQEYNLTINNLQPEDIATYFCQVYEFVVPGTRLDLKRTVAAPSVFIFPPSDEQLKSGTASVVCLLNNFYPREAKVQWKVDNALQSGNSQESVTEQDSKDSTYSLSSTLTLSKADYEKHKVYACEVTHQGLSSPVTKSFNRGEC >4jpw_H SQHLVQSGTQVKKPGASVRVSCQASGYTFTNYILHWWRQAPGQGLEWMGLIKPVFGAVNYARQFQGRIQLTRDIYREIAFLDLSGLRSDDTAVYYCARDESGDDLKWHLHPWGQGTQVIVSPASTKGPSVFPLAPSSKSTSGGTAALGCLVKDYFPEPVTVSWNSGALTSGVHTFPAVLQSSGLYSLSSVVTVPSSSLGTQTYICNVNHKPSNTKVDKKVEPKSC >4jpw_L DIQMTQSPSSLSASVGDRVTINCQAGQGIGSSLNWYQKKPGRAPKLLVHGASNLQRGVPSRFSGSGFHTTFTLTISSLQPDDVATYFCAVFQWFGPGTKVDIKRTVAAPSVFIFPPSDEQLKSGTASVVCLLNNFYPREAKVQWKVDNALQSGNSQESVTEQDSKDSTYSLSSTLTLSKADYEKHKVYACEVTHQGLRSPVTKSFNRGEC >4b5e_A EVQLVESGGGLVQAGGSLRLSCAASGRSFSRDAMGWFRQAPGKERDVVAAINLNGGRTYSADSVKGRFTISRDNDKNTVYLQMSNLKPEDTAVYYCAAREGDVGLVSYKRSSNYPYWGQGTQVTVSS >4b5e_B EVQLVESGGGLVQAGGSLRLSCAASGRSFSRDAMGWFRQAPGKERDVVAAINLNGGRTYSADSVKGRFTISRDNDKNTVYLQMSNLKPEDTAVYYCAAREGDVGLVSYKRSSNYPYWGQGTQVTVSS >1ngy_A ELVMTQTPKFMSTTVGDRVSITCKASQNVGTPVAWYQQKPGQSPKLLIYSASNRYTGVPDRFTGSGSGTDFTLTISNMQSEDLADYFCQQYSSYPLTFGGGTKVEIKRTVAAPSVFIFPPSDEQLKSGTASVVCLLNNFYPREAKVQWKVDNALQSGNSQESVTEQDSKDSTYSLSSTLTLSKADYEKHKVYACEVTHQGLSSPVTKSFNRGE >1ngy_B QVQLLESGAELVKPGASVKLSCKASGYTFTSYWMHWVKQRPGRGLEWIGMIDPNSGGTKYNEKFKSKATLTVDKPSNTAYMQLSSLTSEDSAVYYCTRRDMDYWGAGTTVTVSSASTKGPSVFPLAPSSKSTSGGTAALGCLVKDYFPEPVTVSWNSGALTSGVHTFPAVLQSSGLYSLSSVVTVPSSSLGTQTYICNVNHKPSNTKVDKKVEPKS >1ngz_A ELVMTQTPKFMSTSVGDRVSITCKASQNVGTAVAWYQQKPGQSPKLLIYSASNRYTGVPDRFTGSGSGTDFTLTISNMQSEDLADYFCQQYSSYPLTFGGGTKVEIKRTVAAPSVFIFPPSDEQLKSGTASVVCLLNNFYPREAKVQWKVDNALQSGNSQESVTEQDSKDSTYSLSSTLTLSKADYEKHKVYACEVTHQGLSSPVTKSFNRGE >1ngz_B QVQLLESGAELVKPGASVKLSCKASGYTFTSYWMHWVKQRPGRGLEWIGRIDPNSGGTKYNEKFKSKATLTVDKPSSTAYMQLSSLTSEDSAVYYCTRRDSDYWGAGTTVTVSSASTKGPSVFPLAPSSKSTSGGTAALGCLVKDYFPEPVTVSWNSGALTSGVHTFPAVLQSSGLYSLSSVVTVPSSSLGTQTYICNVNHKPSNTKVDKKVEPKSCDKT >4jpk_H QVQLVQSGAEVKKPGASVKVSCKASGYTFTGYYMHWVRQAPGQGLEWMGWINPNSGGTNYAQKFQGRVTMTRDTSISTAYMELSRLRSDDTAVYYCARGKNSDYNWDFQHWGQGTLVTVSSASTKGPSVFPLAPSSKSTSGGTAALGCLVKDYFPEPVTVSWNSGALTSGVHTFPAVLQSSGLYSLSSVVTVPSSSLGTQTYICNVNHKPSNTKVDKKVEPKSCDKTHTKLGGSGGHHHHHHGGSGHG >4jpk_L EIVLTQSPATLSLSPGERATLSCRASQSVSSYLAWYQQKPGQAPRLLIYDASNRATGIPARFSGSGSGTDFTLTISSLEPEDFAVYYCQQYEFFGQGTKLEIKRSTVAPSVFIFPPSDEQLKSGTASVVCLLNNFYPREAKVQWKVDNALQSGNSQESVTEQDSKDSTYSLSSTLTLSKADYEKHKVYACEVTHQGLSSPVTKSFNRGEC >4jpi_A QVQLVQSGAEVKKPGASVKVSCKASGYTFTGYYMHWVRQAPGQGLEWMGWINPNSGGTNYAQKFQGRVTMTRDTSISTAYMELSRLRSDDTAVYYCARGKNCDYNWDFQHWGQGTLVTVSSASTKGPSVFPLAPSSKSTSGGTAALGCLVKDYFPEPVTVSWNSGALTSGVHTFPAVLQSSGLYSLSSVVTVPSSSLGTQTYICNVNHKPSNTKVDKKVEPKSCDKTHTKLGGSGGHHHHHHGGSGHG >4jpi_H QVQLVQSGAEVKKPGASVKVSCKASGYTFTGYYMHWVRQAPGQGLEWMGWINPNSGGTNYAQKFQGRVTMTRDTSISTAYMELSRLRSDDTAVYYCARGKNCDYNWDFQHWGQGTLVTVSSASTKGPSVFPLAPSSKSTSGGTAALGCLVKDYFPEPVTVSWNSGALTSGVHTFPAVLQSSGLYSLSSVVTVPSSSLGTQTYICNVNHKPSNTKVDKKVEPKSCDKTHTKLGGSGGHHHHHHGGSGHG >1emt_H QVHLQESGPELVRPGASVKISCKTSGYVFSSSWMNWVKQRPGQGLKWIGRIYPGNGNTNYNEKFKGKATLTADKSSNTAYMQLSSLTSVDSAVYFCATSSAYWGQGTLLTVSAAKTTPPSVYPLAPGSAAQTNSMVTLGCLVKGYFPEPVTVTWNSGSLSSGVHTFPAVLQSDLYTLSSSVTVPSSPRPSETVTCNVAHPASSTKVDKKIVPR >1emt_L DIQMTQTTSSLSASLGDRVTFSCSASQDISNYLNWYQQKPDGTIKLLIYYTSSLRSGVPSRFSGSGSGTDYSLTINNLEPEDIATYFCQQYSRLPFTFGSGTKLEIKRADAAPTVSIFPPSSEQLTSGGASVVCFLNNFYPKDINVKWKIDGSERQNGVLNSWTDQDSKDSTYSMSSTLTLTKDEYERHNSYTCEATHKTSTSPIVKSFNRNEC >2c1o_A VQLQQSGAELVRPGTSVKLSCKASGYSFTNYWMNWLRELVMTQSPLTLSVTIGQPASISCKSSQSLLYSNGKTYLNWLLQRPGQSPKRLIYLVSKLDSGDPDRFTGSGSGTDFTLKISRVEAEDLGIYYCVQGSHFPPTFGAGTKLELKRADAAPTVSIFPPSSEQLTSGGASVVCFLNNFYPKDINVKWKIDGSERQNGVLNSWTDQDSKDSTYSMSSTLTLTKDEYERHNSYTCEATHKTSTSPIVKSFNRN >2c1o_H EVQLQQSGAELVRPGTSVKLSCKASGYSFTNYWMNWLRQRPGQGLDWIGMIHPSDSETRLNQKFKDKATLTVDRSSSTAYIQLSSPTSEDSAVYYCARDDYDGAFWGQGTLVTVSAAKTTPPSVYPLAPGSAAQTNSMVTLGCLVKGYFPAPVTVTWNSGSLSSGVHTFPAVLQSDLYTLSSSVTVPSSTWPSETVTCNVAHPASSTKVDKKIVPRDC >4f57_H EVQLVESGGGVVQPGGSLRLSCVASGFSFSDFGMNWVRQAPGKGLEWVAFVPFDRRINYYAESVRGRFTISRDDSKNTVFLQMDSLRPEDTAIYYCAKHRSQWNFWPREGGLDHWGQGTLVTVSSASTKGPSVFPLAPSSKSTSGGTAALGCLVKDYFPEPVTVSWNSGALTSGVHTFPAVLQSSGLYSLSSVVTVPSSSLGTQTYICNVNHKPSNTKVDKKVEPK >4f57_L QSALTQPASVSGSPGQSITISCTGTSSDVGGYNYVSWYRQHPGEAPKAIIFDVTNRPSGISNRFSGSKFGNTASLTISGLQAEDEADYYCAAYTVASTLLFGGGTKVTVLRQPKAAPSVTLFPPSSEELQANKATLVCLISDFYPGAVTVAWKADSSPVKAGVETTTPSKQSNNKYAASSYLSLTPEQWKSHRSYSCQVTHEGSTVEKTVAPT >1w72_I EVQLVESGGGLVQPGRSLRLSCAASGFTFDDYAMHWVRQAPGKGLEWVSGISWNSGSIGYADSVKGRFTISRDNAKNSLYLQMNSLRAEDTAVYYCARGRGFHYYYYGMDIWGQGTTVTVSSASTKGPSVFPLAPSSKSTSGGTAALGCLVKDYFPEPVTVSWNSGALTSGVHTFPAVLQSSGLYSLSSVVTVPSSSLGTQTYICNVNHKPSNTKVDKKVEPK >1w72_H EVQLVESGGGLVQPGRSLRLSCAASGFTFDDYAMHWVRQAPGKGLEWVSGISWNSGSIGYADSVKGRFTISRDNAKNSLYLQMNSLRAEDTAVYYCARGRGFHYYYYGMDIWGQGTTVTVSSASTKGPSVFPLAPSSKSTSGGTAALGCLVKDYFPEPVTVSWNSGALTSGVHTFPAVLQSSGLYSLSSVVTVPSSSLGTQTYICNVNHKPSNTKVDKKVEPK >4f58_I EVQLVESGGGVVQPGGSLRLSCVASGFSFSDFGMNWVRQAPGKGLEWVAFVPFDRRINYYAESVRGRFTISRDDSKNTVFLQMDSLRPEDTAIYYCAKHRSQWNFWPREGGLDHWGQGTLVTVSSASTKGPSVFPLAPSSKSTSGGTAALGCLVKDYFPEPVTVSWNSGALTSGVHTFPAVLQSSGLYSLSSVVTVPSSSLGTQTYICNVNHKPSNTKVDKKVEPK >4f58_H EVQLVESGGGVVQPGGSLRLSCVASGFSFSDFGMNWVRQAPGKGLEWVAFVPFDRRINYYAESVRGRFTISRDDSKNTVFLQMDSLRPEDTAIYYCAKHRSQWNFWPREGGLDHWGQGTLVTVSSASTKGPSVFPLAPSSKSTSGGTAALGCLVKDYFPEPVTVSWNSGALTSGVHTFPAVLQSSGLYSLSSVVTVPSSSLGTQTYICNVNHKPSNTKVDKKVEPK >3ffd_A EVQLVESGGDLVKPGGSLKLSCAASGFTFSSYGMSWIRQTPDKRLEWVATISSGGSYTYYPDSVKGRFTISRDNAKNTLYLQMSSLKSEDTAMFYCARQTTMTYFAYWGQGTLVTVSAAKTTPPSVYPLAPGSAAQTNSMVTLGCLVKGYFPEPVTVTWNSGSLSSGVHTFPAVLQSDLYTLSSSVTVPSSPRPSETVTCNVAHPASSTKVDKKIEPA >3ffd_B QLVLTQSSSASFSLGASAKLTCTLSSQHSTYTIEWYQQQPLKPPKYVMDLKQDGSHSTGDGIPDRFSGSSSGADRYLSISNIQPEDEAMYICGVGDTIKEQFVYVFGGGTKVTVLGEPKSTPTLTVFPPSSEELKENKATLVCLISNFSPSGVTVAWKANGTPITQGVDTSNPTKEGNKFMASSFLHLTSDQWRSHNSFTCQVTHEGDTVEKSLSPAECL >4nzr_H QLQMQESGPGLVKPSETLSLSCTVSGDSIRGGEWGDKDYHWGWVRHSAGKGLEWIGSIHWRGTTHYKESLRRRVSMSIDTSRNWFSLRLASVTAADTAVYFCARHRHHDVFMLVPIAGWFDVWGPGVQVTVSSASTKGPSVFPLAPSSKSTSGGTAALGCLVKDYFPEPVTVSWNSGALTSGVHTFPAVLQSSGLYSLSSVVTVPSSSLGTQTYICNVNHKPSNTKVDKRVEPK >4nzr_L EIVMTQSPDTLSVSPGETVTLSCRASQNINKNLAWYQYKPGQSPRLVIFETYSKIAAFPARFVASGSGTEFTLTINNMQSEDVAVYYCQQYEEWPRTFGQGTKVDIKRTVAAPSVFIFPPSDEQLKSGTASVVCLLNNFYPREAKVQWKVDNALQSGNSQESVTEQDSKDSTYSLSSTLTLSKADYEKHKVYACEVTHQGLSSPVTKSFNRGEC >4nzt_H QVQLVQSGAEVKKPGSSVKVSCKSSGGTSNNYAISWVRQAPGQGLDWMGGISPIFGSTAYAQKFQGRVTISADIFSNTAYMELNSLTSEDTAVYFCARHGNYYYYSGMDVWGQGTTVTVSSASTKGPSVFPLAPSSKSAAGGTAALGCLVKDYFPEPVTVSWNSGALTSGVHTFPAVLQSSGLYSLSSVVTVPSSSLGTQTYICNVNHKPSNTKVDKRVEPKSCHHHHHH >4nzt_L QSALTQPPAVSGTPGQRVTISCSGSDSNIGRRSVNWYQQFPGTAPKLLIYSNDQRPSVVPDRFSGSKSGTSASLAISGLQSEDEAEYYCAAWDDSLKGAVFGGGTQLTVLGQPKAAPSVTLFPPSSEELQANKATLVCLISDFYPGAVTVAWKADSSPVKAGVETTTPSKQSNNKYAASSYLSLTPEQWKSHRSYSCQVTHEGSTVEKTVAPTECS >4nzu_H AVSLVESGGGTVEPGSTLRLSCAASGFTFGSYAFHWVRQAPGDGLEWVAFISYNGSSKYYASFVSGRFTISRDNSSNTLSLQMNSLKASDTAVYYCARAPDCADADCHKGAFGYWGQGTLVTVSSASTKGPSVFPLAPSSKTSSGGTAALGCLVKDYFPEPVTVSWNSGALTSGVHTFPAVLQSSGLYSLSSVVTVPSSSLGTQTYICNVNHKPSNTKVDKKVEP >4nzu_L DIEMTQSPSSLSASTGDKVTITCQASQDIAKFLDWYQQRPGKTPKLLIYDASNLAIGVPSRFTGSGSGTDFTFTISSLQPEDIAVYYCQHYDDFPISFGPGTKLETKRTVAAPSVFIFPPSDEQLKSGTASVVCLLNNFYPREAKVQWKVDNALQSGNSQESVTEQDSKDSTYSLSSTLTLSKADYEKHKVYACEVTHQGLSSPVTKSFNR >4lbe_A QVQLQQPGAELVKPGASVKLSCKASGYTFTSDWIHWVKQRPGHGLEWIGEIIPSYGRANYNEKIQKKATLTADKSSSTAFMQLSSLTSEDSAVYYCARERGDGYFAVWGAGTTVTVSSAKTTPPSVYPLAPGSAAQTNSMVTLGCLVKGYFPEPVTVTWNSGSLSSGVHTFPAVLQSDLYTLSSSVTVPSSSWPSETVTCNVAHPASSTKVDKKIVPRD >4lbe_B DILLTQSPAILSVSPGERVSFSCRASQSIGTDIHWYQQRTNGSPRLLIKYASESISGIPSRFSGSGSGTDFTLSINSVESEDIANYYCQQSNRWPFTFGSGTKLEIKRADAAPTVSIFPPSSEQLTSGGASVVCFLNNFYPKDINVKWKIDGSERQNGVLNSWTDQDSKDSTYSMSSTLTLTKDEYERHNSYTCEATHKTSTSPIVKSFNRN >4c83_A DVQLVESGGGLVQPGGSRKLSCAASGFTFRRFGMHWVRQSPEKGLEWVAYIGGGSSTIYYADTVKGRFTISRDNPKNTLFLQMTSLRSEDTAMYYCTRDETGSWFAYWGQGTLVTVSAAKTTAPSVYPLAPVCGDTTGSSVTLGCLVKGYFPEPVTLTWNSGSLSSGVHTFPAVLQSDLYTLSSSVTVTSSTWPSQSITCNVAHPASSTKVDKKIEPRVP >4c83_C DVQLVESGGGLVQPGGSRKLSCAASGFTFRRFGMHWVRQSPEKGLEWVAYIGGGSSTIYYADTVKGRFTISRDNPKNTLFLQMTSLRSEDTAMYYCTRDETGSWFAYWGQGTLVTVSAAKTTAPSVYPLAPVCGDTTGSSVTLGCLVKGYFPEPVTLTWNSGSLSSGVHTFPAVLQSDLYTLSSSVTVTSSTWPSQSITCNVAHPASSTKVDKKIEPRVP >3et9_F MADYKDIVLIQSTSSLSASLGDRVTISCRASQDIRNYLNWYQQKPDGTVKLLIYYTSRLLPGVPSRFSGSGSGTDYSLTISNLEQEDIGTYFCQQGNTLPWTFGGGTKLEIRRGGGGSGGGGSGGGGSGGGGSEVQLQQSGPELVKPGASVKISCKDSGYAFSSSWMNWVKQRPGQGPEWIGRIYPGDGDTNYNGKFKGKATLTADKSSSTAYMQLSSLTSVDSAVYFCARSGLLRYAMDYWGQGTSVTVSS >3et9_F MADYKDIVLIQSTSSLSASLGDRVTISCRASQDIRNYLNWYQQKPDGTVKLLIYYTSRLLPGVPSRFSGSGSGTDYSLTISNLEQEDIGTYFCQQGNTLPWTFGGGTKLEIRRGGGGSGGGGSGGGGSGGGGSEVQLQQSGPELVKPGASVKISCKDSGYAFSSSWMNWVKQRPGQGPEWIGRIYPGDGDTNYNGKFKGKATLTADKSSSTAYMQLSSLTSVDSAVYFCARSGLLRYAMDYWGQGTSVTVSS >2c1p_A ELVMTQSPLTLSVTIGQPASISCKSSQSLLYSNGKTYLNWLLQRPGQSPKRLIYLVSKLDSGDPDRFTGSGSGTDFTLKISRVEAEDLGIYYCVQGSHFPPTFGAGTKLELKRADAAPTVSIFPPSSEQLTSGGASVVCFLNNFYPKDINVKWKIDGSERQNGVLNSWTDQDSKDSTYSMSSTLTLTKDEYERHNSYTCEATHKTSTSPIVKSFNRNE >2c1p_H VQLQQSGAELVRPGTSVKLSCKASGYSFTNYWMNWLRQRPGQGLDWIGMIHPSDSETRLNQKFKDKATLTVDRSSSTAYIQLSSPTSEDSAVYYCARDDYDGAFWGQGTLVTVSAAKTTPPSVYPLAPGSAAQTNSMVTLGCLVKGYFPAPVTVTWNSGSLSSGVHTFPAVLQSDLYTLSSSVTVPSSTWPSETVTCNVAHPASSTKVDKKIVPRDC >4ogx_H EVQLLESGGGLVQPGGSLRLSCAASGFTFSHYIMMWVRQAPGKGLEWVSGIYSSGGITVYADSVKGRFTISRDNSKNTLYLQMNSLRAEDTAVYYCAYRRIGVPRRDEFDIWGQGTMVTVSSASTKGPSVFPLAPSSKSTSGGTAALGCLVKDYFPEPVTVSWNSGALTSGVHTFPAVLQSSGLYSLSSVVTVPSSSLGTQTYICNVNHKPSNTKVDKRVEPKSC >4ogx_L DIQMTQSPSTLSASVGDRVTITCRASQSISSWLAWYQQKPGKAPKLLIYKASTLESGVPSRFSGSGSGTEFTLTISSLQPDDFATYYCQQYNTYWTFGQGTKVEIKRTVAAPSVFIFPPSDEQLKSGTASVVCLLNNFYPREAKVQWKVDNALQSGNSQESVTEQDSKDSTYSLSSTLTLSKADYEKHKVYACEVTHQGLSSPVTKSFNRGEC >4ogy_H EVQLLESGGGLVQPGGSLRLSCAASGFTFSHYIMMWVRQAPGKGLEWVSGIYSSGGITVYADSVKGRFTISRDNSKNTLYLQMNSLRAEDTAVYYCAYRRIGVPRRDEFDIWGQGTMVTVSSASTKGPSVFPLAPSSKSTSGGTAALGCLVKDYFPEPVTVSWNSGALTSGVHTFPAVLQSSGLYSLSSVVTVPSSSLGTQTYICNVNHKPSNTKVDKRVEPKSC >4ogy_M EVQLLESGGGLVQPGGSLRLSCAASGFTFSHYIMMWVRQAPGKGLEWVSGIYSSGGITVYADSVKGRFTISRDNSKNTLYLQMNSLRAEDTAVYYCAYRRIGVPRRDEFDIWGQGTMVTVSSASTKGPSVFPLAPSSKSTSGGTAALGCLVKDYFPEPVTVSWNSGALTSGVHTFPAVLQSSGLYSLSSVVTVPSSSLGTQTYICNVNHKPSNTKVDKRVEPKSC >1zwi_A QVQLQQPGAELVKPGASVKLSCKASGYTFTSDWIHWVKQRPGHGLEWIGEIIPSYGRANYNEKIQKKATLTADKSSSTAFMQLSSLTSEDSAVYYCARERGDGYFAVWGAGTTVTVSSAKTTPPSVYPLAPGSAAQTNSMVTLGCLVKGYFPEPVTVTWNSGSLSSGVHTFPAVLQSDLYTLSSSVTVPSSSWPSETVTCNVAHPASSTKVDKKIVPRD >1zwi_B DILLTQSPAILSVSPGERVSFSCRASQSIGTDIHWYQQRTNGSPRLLIKYASESISGIPSRFSGSGSGTDFTLSINSVESEDIANYYCQQSNRWPFTFGSGTKLEIKRADAAPTVSIFPPSSEQLTSGGASVVCFLNNFYPKDINVKWKIDGSERQNGVLNSWTDQDSKDSTYSMSSTLTLTKDEYERHNSYTCEATHKTSTSPIVKSFNRN >1m7i_A DVVLTQTPLSLPVRLGDQASISCRSSQSLLHSDGNTYLHWYLQKPGQSPKLLIYKVSNRFSGVPDRFSGSGSGTDFTLKISRVEAEDLGVYFCSQTTHVPTFGGGTKLEIKRADAAPTVSIFPPSSEQLTSGGASVVCFLNNFYPKDINVKWKIDGSERQNGVLNSWTDQDSKDSTYSMSSTLTLTKDEYERHNSYTCEATHKTSTSPIVKSFNR >1m7i_B EVKVEESGGGLVQPGGSMKLSCVASGFTFSNYWMEWVRQSPEKGLEWVAEIRLKSNNYATHYAESVKGRFTISRDDSKSSVYLQMNNLRAEDTGIYYCTRGGAVGAMDYWGQGTSVTVSSATTTAPSVYPLVPGCSDTSGSSVTLGCLVKGYFPEPVTVKWNYGALSSGVRTVSSVLQSGFYSLSSLVTVPSSTWPSQTVICNVAHPASKVDLIKEPSGP >4o02_H QVQLQQSGAELAEPGASVKMSCKASGYTFSSFWMHWVKQRPGQGLEWIGYINPRSGYTECNEIFRDKATMTADTSSSTAYMQLSGLTSEDSAVYYCASFLGRGAMDYWGQGTSVTVSSAKTTAPSVYPLAPVCGDTTGSSVTLGCLVKGYFPEPVTLTWNSGSLSAGVHTFPAVLQSDLYTLSSSVTVTSSTWPSQSITCNVAHPASSTKVDKKIEPR >4o02_L DIQMTQTTSSLSASLGDRVIISCRASQDISNYLSWYQQKPDGTVKLLIFYTSKLHSGVPSRFSGSGSGTDYSLTISNLDQEDIATYFCQQGNTFPYTFGGGTKVEMRRADAAPTVSIFPPSSEQLTSGGASVVCFLNNFYPKDINVKWKIDGSERQNGVLNSWTDQDSKDSTYSMSSTLTLTKDEYERHNSYTCEATHKTSTSPIVKSFNRNEC >4idl_A MAKVQLQQSGGGAVQTGGSLKLTCLASGNTASIRAMGWYRRAPGKQREWVASLTTTGTADYGDFVKGRFTISRDNANNAATLQMDSLKPEDTAVYYCNADGRRFDGARWREYESWGQGTQVTISSAAALEHHHHHH >4aeh_H QVQLQQPGAEVVKPGASVRLSCKASGYSFTSNWINWVKQRPGQGLEWIGNISPGGSNTNHNEKFKSKATLTADTSSSTAYMQLSSLTSDDSAVYYCARYDGDYGSFDYWGQGTTLTVSSAKTTAPSVYPLAPVCGDTTGSSVTLGCLVKGYFPEPVTLTWNSGSLSSGVHTFPAVLQSDLYTLSSSVTVTSSTWPSESITCNVAHPASSTKVDKKIEPRGPTIKPCPPCKC >4aeh_L DVQMTQSPASLSVSVGETVTITCRASENIYRNLAWYQQKQGKSPQLLVYAATNLAAGVPSRFSGSGSGTQYSLKINSLQSEDFGSYYCQHFWNIPFTFGSGTKLEIKRADAAPTVSIFPPSSEQLTSGGASVVCFLNNFYPKDINVKWKIDGSERQNGVLNSWTDQDSKDSTYSMSSTLTLTKDEYERHNSYTCEATHKTSTSPIVKSFNRNEC >4aei_I EVHLVESGGGLVKPGGSLKLSCAASGFTFSGYYMYWVRQTPEKRLEWVASISDGGSFTYYPDSVKGRFTISRDNAKNNLYLQMSSLRSDDTAMYYCSRPDDYSYDGFAYWGQGTLVTVSAAKTTPPSVYPLAPGSAAQTNSMVTLGCLVKGYFPEPVTVTWNSGSLSSGVHTFPAVLQSDLYTLSSSVTVPSSTWPSETVTCNVAHPASSTKVDKKIVPRDCGCKPCIC >4aei_H EVHLVESGGGLVKPGGSLKLSCAASGFTFSGYYMYWVRQTPEKRLEWVASISDGGSFTYYPDSVKGRFTISRDNAKNNLYLQMSSLRSDDTAMYYCSRPDDYSYDGFAYWGQGTLVTVSAAKTTPPSVYPLAPGSAAQTNSMVTLGCLVKGYFPEPVTVTWNSGSLSSGVHTFPAVLQSDLYTLSSSVTVPSSTWPSETVTCNVAHPASSTKVDKKIVPRDCGCKPCIC >4oga_C QVQLKESGPGLVAPSQSLSITCTVSGFPLTAYGVNWVRQPPGKGLEWLGMIWGDGNTDYNSALKSRLSISKDNSKSQVFLKMNSLQTDDTARYYCARDPYGSKPMDYWGQGTSVTVSS >4oga_D DIVMSQSPSSLVVSVGEKVTMSCKSSQSLLYSSNQKNFLAWYQQKPGQSPKLLIYWASTRESGVPDRFTGSGSGTDFTLTISSVKAEDLAVYYCQQYFRYRTFGGGTKLEIKRA >3dro_A ALQLTQSPSSLSASVGDRITITCRASQGVTSALAWYRQKPGSPPQLLIYDASSLESGVPSRFSGSGSGTEFTLTISTLRPEDFATYYCQQLHFYPHTFGGGTRVDVRRTVAAPSVFIFPPSDEQLKSGTASVVCLLNNFYPREAKVQWKVDNALQSGNSQESVTEQDSKDSTYSLSSTLTLSKADYEKHKVYECEVTHQGLSSPVTKSFNRGEC >3dro_B RITLKESGPPLVKPTQTLTLTCSFSGFSLSDFGVGVGWIRQPPGKALEWLAIIYSDDDKRYSPSLNTRLTITKDTSKNQVVLVMTRVSPVDTATYFCAHRRGPTTLFGVPIARGPVNAMDVWGQGITVTISSTSTKGPSVFPLAPSSKSTAGGTAALGCLVKDYFPEPVTVSWNSGALTSGVHTFPAVLQSSGLYSLSSVVTVPSSSLGTQTYTCNVNHKPSNTKVDKRVEPKSC >3p30_H ALQLVQSGAEVKKAGSSVRVSCKASGATFSSYSISWVRQAPGQGPQWMGGIVPSSGAAKYAQQFQGRLTITADTSTNTAYLELSSLRYDDTAVYYCTRDRSRVRYFDRESGWFDPWGQGTLVTVSSASTKGPSVFPLAPSSKSTSGGTAALGCLVKDYFPEPVTVSWNSGALTSGVHTFPAVLQSSGLYSLSSVVTVPSSSLGTQTYICNVNHKPSNTKVDKKVEP >3p30_L QSVLTQPPSVSGTPGQRVTISCSGSSSNIGNNYVYWYQQLPGTAPKLLIYKNNIRPSGVPDRFSGSKSGTSASLAISGLRSEDEADYYCAAWDDSLSGPYVFGAGTKLTVLGQPKAAPSVTLFPPSSEELQANKATLVCLISDFYPGAVTVAWKADSSPIKAGVETTTPSKQSNNKYAASSYLSLTPEQWKSHRSYSCQVTHEGSTVEKTVAP >3utz_A DVLMTQTPLSLPVSLGDQASISCRSSQSIVHSNGNTFLEWYLQKPGQSPKLLIYKVSNRFSGVPDRFSGSGSGTDFTLKISRVEAEDLGVYYCFQASHVPPTFGSGTKLEIKRTVAAPSVFIFPPSDEQLKSGTASVVCLLNNFYPREAKVQWKVDNALQSGNSQESVTEQDSKDSTYSLSSTLTLSKADYEKHKVYACEVTHQGLSSPVTKSFNRGEC >3utz_C EVKLVESGGGLVKPGGSLKLSCAASGFAFSTYDMSWIRQTPEKRLEWVATISSGGSYTYYPDSVKGRFTISKDNARNTLYLQMSSLRSGDTALYYCTRFRYDGWYFDVWGQGTTVTVSSASTKGPSVFPLAPSSKSTSGGTAALGCLVKDYFPEPVTVSWNSGALTSGVHTFPAVLQSSGLYSLSSVVTVPSSSLGTQTYICNVNHKPSNTKVDKRVEPKSCDKT >1za3_A DIQMTQSPSSLSASVGDRVTITCRASQDVNTAVAWYQQKPGKAPKLLIYAASYLYSGVPSRFSGSGSGTDFTLTISSLQPEDFATYYCQSSSSPYTFGQGTKVEIKRTVAAPSVFIFPPSDEQLKSGTASVVCLLNNFYPREAKVQWKVDNALQSGNSQESVTEQDSKDSTYSLSSTLTLSKADYEKHKVYACEVTHQGLSSPVTKSFNRGEC >1za3_H EVQLVESGGGLVQPGGSLRLSCAASGFSIYSYSIHWVRQAPGKGLEWVASISPYSGYTSYADSVKGRFTISADTSKNTAYLQMNSLRAEDTAVYYCSRYSSYYSYYYSSSSYSYAMDYWGQGTLVTVSSASTKGPSVFPLAPSSKSTSGGTAALGCLVKDYFPEPVTVSWNSGALTSGVHTFPAVLQSSGLYSLSSVVTVPSSSLGTQTYICNVNHKPSNTKVDKKVEPKSCDKTH >3drq_A ALQLTQSPSSLSASVGDRITITCRASQGVTSALAWYRQKPGSPPQLLIYDASSLESGVPSRFSGSGSGTEFTLTISTLRPEDFATYYCQQLHFYPHTFGGGTRVDVRRTVAAPSVFIFPPSDEQLKSGTASVVCLLNNFYPREAKVQWKVDNALQSGNSQESVTEQDSKDSTYSLSSTLTLSKADYEKHKVYECEVTHQGLSSPVTKSFNRGEC >3drq_B RITLKESGPPLVKPTQTLTLTCSFSGFSLSDFGVGVGWIRQPPGKALEWLAIIYSDDDKRYSPSLNTRLTITKDTSKNQVVLVMTRVSPVDTATYFCAHRRGPTTLFGVPIARGPVNAMDVWGQGITVTISSTSTKGPSVFPLAPSSKSTAGGTAALGCLVKDYFPEPVTVSWNSGALTSGVHTFPAVLQSSGLYSLSSVVTVPSSSLGTQTYTCNVNHKPSNTKVDKRVEPKSC >1za6_A DIVMSQSPDSLAVSLGERVTLNCKSSQSLLYSGNQKNYLAWYQQKPGQSPKLLIYWASARESGVPDRFSGSGSGTDFTLTISSVQAEDVAVYYCQQYYSYPLTFGAGTKLELKRTVAAPSVFIFPPSDEQLKSGTASVVCLLNNFYPREAKVQWKVDNALQSGNSQESVTEQDSKDSTYSLSSTLTLSKADYEKHKVYACEVTHQGLSSPVTKSFNRGEC >1za6_C DIVMSQSPDSLAVSLGERVTLNCKSSQSLLYSGNQKNYLAWYQQKPGQSPKLLIYWASARESGVPDRFSGSGSGTDFTLTISSVQAEDVAVYYCQQYYSYPLTFGAGTKLELKRTVAAPSVFIFPPSDEQLKSGTASVVCLLNNFYPREAKVQWKVDNALQSGNSQESVTEQDSKDSTYSLSSTLTLSKADYEKHKVYACEVTHQGLSSPVTKSFNRGEC >3drt_A ALQLTQSPSSLSASVGDRITITCRASQGVTSALAWYRQKPGSPPQLLIYDASSLESGVPSRFSGSGSGTEFTLTISTLRPEDFATYYCQQLHFYPHTFGGGTRVDVRRTVAAPSVFIFPPSDEQLKSGTASVVCLLNNFYPREAKVQWKVDNALQSGNSQESVTEQDSKDSTYSLSSTLTLSKADYEKHKVYECEVTHQGLSSPVTKSFNRGEC >3drt_B RITLKESGPPLVKPTQTLTLTCSFSGFSLSDFGVGVGWIRQPPGKALEWLAIIYSDDDKRYSPSLNTRLTITKDTSKNQVVLVMTRVSPVDTATYFCAHRRGPTTLFGVPIARGPVNAMDVWGQGITVTISSTSTKGPSVFPLAPSSKSTAGGTAALGCLVKDYFPEPVTVSWNSGALTSGVHTFPAVLQSSGLYSLSSVVTVPSSSLGTQTYTCNVNHKPSNTKVDKRVEPKSC >1dqq_A DIVLTQSPATLSVTPGDSVSLSCRASQSISNNLHWYQQKSHESPRLLIKYASQSISGIPSRFSGSGSGTDFTLSINSVETEDFGMYFCQQSNSWPYTFGGGTKLEIKRADAAPTVSIFPPSSEQLTSGGASVVCFLNNFYPKDINVKWKIDGSERQNGVLNSWTDQDSKDSTYSMSSTLTLTKDEYERHNSYTCEATHKTSTSPIVKSFNRNEC >1dqq_C DIVLTQSPATLSVTPGDSVSLSCRASQSISNNLHWYQQKSHESPRLLIKYASQSISGIPSRFSGSGSGTDFTLSINSVETEDFGMYFCQQSNSWPYTFGGGTKLEIKRADAAPTVSIFPPSSEQLTSGGASVVCFLNNFYPKDINVKWKIDGSERQNGVLNSWTDQDSKDSTYSMSSTLTLTKDEYERHNSYTCEATHKTSTSPIVKSFNRNEC >3bz4_A DIVMTQAAFSNPVTLGTSASISCRSSKSLLHSDGITYLYWYLQKPGQSPHLLIYHLSNLASGVPDRFSSSGSGTDFTLRISRVEAEDVGIYYCAHNVELPRTFGGGTKLEIKRADAAPTVSIFPPSSEQLTSGGASVVCFLNNFYPKDINVKWKIDGSERQNGVLNSWTDQDSKDSTYSMSSTLTLTKDEYERHNSYTCEATHKTSTSPIVKSFNRNEC >3bz4_C DIVMTQAAFSNPVTLGTSASISCRSSKSLLHSDGITYLYWYLQKPGQSPHLLIYHLSNLASGVPDRFSSSGSGTDFTLRISRVEAEDVGIYYCAHNVELPRTFGGGTKLEIKRADAAPTVSIFPPSSEQLTSGGASVVCFLNNFYPKDINVKWKIDGSERQNGVLNSWTDQDSKDSTYSMSSTLTLTKDEYERHNSYTCEATHKTSTSPIVKSFNRNEC >1m71_A DVVLTQTPLSLPVRLGDQASISCRSSQSLLHSDGNTYLHWYLQKPGQSPKLLIYKVSNRFSGVPDRFSGSGSGTDFTLKISRVEAEDLGVYFCSQTTHVPTFGGGTKLEIKRADAAPTVSIFPPSSEQLTSGGASVVCFLNNFYPKDINVKWKIDGSERQNGVLNSWTDQDSKDSTYSMSSTLTLTKDEYERHNSYTCEATHKTSTSPIVKSFNR >1m71_B EVKVEESGGGLVQPGGSMKLSCVASGFTFSNYWMEWVRQSPEKGLEWVAEIRLKSNNYATHYAESVKGRFTISRDDSKSSVYLQMNNLRAEDTGIYYCTRGGAVGAMDYWGQGTSVTVSSATTTAPSVYPLVPGCSDTSGSSVTLGCLVKGYFPEPVTVKWNYGALSSGVRTVSSVLQSGFYSLSSLVTVPSSTWPSQTVICNVAHPASKVDLIKEPSGP >1dql_H EVQLVESGGGLVQPGGSLRLSCAASGFTFSSYAMHWVRQAPGKGLEWVAVISSDGGNKYYTDSVKGRFTISRNDSKNTLYLQMNSLRTEDTAVFYCARGNPPYSSGWGGGDYWGQGTMVTVSS >1dql_L DIQMTQSPSSLSASVGDRVTITCRASQDIRNDLGWYQQKPGKAPKKLIYAASSLQSGVPSRFSGSGSGTDFTLTISSLQPEDFATYYCLQQNSNWTFGQGTKVDIK >1dqm_H EVQLQESGPSLVKPSQTLSLTCSVTGDSVTSDYWSWIRKFPGNKLEYMGYISYSGSTYYHPSLKSRISITRDTSKNQYYLQLNSVTTEDTATYYCASWGGDVWGAGTTVTVSSAKTTAPSVYPLAPVCGDTTGSSVTLGCLVKGYFPEPVTLTWNSGSLSSGVHTFPAVLQSDLYTLSSSVTVTSSTWPSQSITCNVAHPASSTKVDKKI >1dqm_L DIVLTQSPATLSVTPGDSVSLSCRASQSISNNLHWYQQKSHESPRLLIKYASQSISGIPSRFSGSGSGTDFTLSINSVETEDFGMYFCQQSNSWPYTFGGGTKLEIKRADAAPTVSIFPPSSEQLTSGGASVVCFLNNFYPKDINVKWKIDGSERQNGVLNSWTDQDSKDSTYSMSSTLTLTKDEYERHNSYTCEATHKTSTSPIVKSFNRNEC >1dqd_H EVQLQESGPSLVKPSQTLSLTCSVTGDSITSGYWNWIRKFPGNKLEYMGYISYSGSTYYNPSLKSRLSITRDTSRNQYYLQLKSVTPEDTATYYCASPPGYYGSGPYAMDYWGQGTSVTVSSAKTTPPSVYPLAPGSAAQTNSMVTLGCLVKGYFPEPVTVTWNSGSLSSGVHTFPAVLQSDLYTLSSSVTVPSSTWPSETVTCNVAHPASSTKVDKKISPG >1dqd_L AAQPAMADIVLSQSPAIMSASPGEKVTITCSASSSVSYMHWFQQKPGTSPKLCIYTTSNLASGVPARFSGSGSGTSYSLTISRMEAEDAATYYCQQRSTYPPTFGSGTKLEIKRADAAPTVSIFPPSSEQLTSGGASVVCFLNNFYPRDINVKWKIDGSERQNGVLNSWTDQDSKDSTYSMSSTLTLTKDEYERHNSYTCEATHKTSTSPIVKSFNRNECA >1bgx_H EVQLQESGPGLVKPYQSLSLSCTVTGYSITSDYAWNWIRQFPGNKLEWMGYITYSGTTDYNPSLKSRISITRDTSKNQFFLQLNSVTTEDTATYYCARYYYGYWYFDVWGQGTTLTVSSAKTTAPSVYPLAPVSSVTLGCLVKGYFPEPVTLTWNSGSLSSGVHTFPAVLQSDLYTLSSSVTVTSSTWPSQSITCNVAHPASSTKVDKKIEPR >1bgx_L DIQMTQSPAIMSASPGEKVTMTCSASSSVSYMYWYQQKPGSSPRLLIYDSTNLASGVPVRFSGSGSGTSYSLTISRMEAEDAATYYCQQWSTYPLTFGAGTKLELKRADAAPTVSIFPPSSEQLTSGGASVVCFLNNFYPKDINVKWKIDGSERQNGVLNSWTDQDSKDSTYSMSSTLTLTKDEYERHNSYTCEATHKTSTSPIVKSFNR >4k8r_H EVQLVESGGGLVKPGGSLRLSCAASGFTFSSYSMNWVRQAPGKGLEWVSSISSSSSYISYADSVKGRFTISRDNAKNSLYLQMNSLRAEDTAVYFCARDYDFWSAYYDAFDVWGQGTMVTVSSASTKGPSVFPLAPSSKSTSGGTAALGCLVKDYFPEPVTVSWNSGALTSGVHTFPAVLQSSGLYSLSSVVTVPSSSLGTQTYICNVNHKPSNTKVDKKVEPKSCAADEVDHHHHHH >4k8r_C AIQLTQSPSSLSASVGDRVTITCRASQGISSALAWYQQKPGKAPKLLIYDASSLESGVPSRFSGSGSGTDFTLTISSLQPEDFATYYCQQFNSYLITFGQGTRLEIKRTVAAPSVFIFPPSDEQLKSGTASVVCLLNNFYPREAKVQWKVDNALQSGNSQESVTEQDSKDSTYSLSSTLTLSKADYEKHKVYACEVTHQGLSSPVTKSFNRGEC >1zan_H QVQLKESGPGLVQPSQTLSLTCTVSGFSLTNNNVNWVRQATGRGLEWMGGVWAGGATDYNSALKSRLTITRDTSKSQVFLKMHSLQSEDTATYYCARDGGYSSSTLYAMDAWGQGTTVTVSSASTTAPSVYPLAPGSAAQTNSMVTLGCLVKGYFPEPVTVTWNSGSLASGVHTFPAVLQSGLYTLSSSVTVPASPWASEAVTCNVAHPASSTKVDKKIVPRDC >1zan_L DIQMTQSPASLSASLGETVTIECRASEDIYNALAWYQQKPGKSPQLLIYNTDTLHTGVPSRFSGSGSGTQYSLKINSLQSEDVASYFCQHYFGYPRTFGGGTKLELKRADAAPTVSIFPPSSEQLASGGASVVCLLNNFYPKDISVKWKIDGSERQNGVLDSVTDQDSKDSTYSMSSTLTLTKAEYESHNSYTCEVTHKTSTSPVVKSFNRGEC >2cju_H EVKLVESGGGLVQPGGSLRLSCATSGFTFTNYYMNWVRQPPGKALEWLVSIRNKANGYTTDYSASVKGRFTISRDNSQSILYLEMNNLRAEDSATYYCARGYGYGAWFAYWGQGTLVTVSA >2cju_L QVLMTQTPLSLPVSLGDQASISCRSSQSIVHSNGNTYLEWYLQKPGQSPKLLIYKVSNRFSGVPDRFSGSGSGTDFTLKISRVEAEDLGVYYCFQGSHVPYTFGGGTKLEIKR >1hys_C DIQMTQTTSSLSASLGDRVTISCSASQDISSYLNWYQQKPEGTVKLLIYYTSSLHSGVPSAFSGSGSGTDYSLTISNLEPEDFATYYCQQYSKFPWTFGGGTKLEIKRADAAPTVSIFPPSSEQLTSGGASVVCFLNNFYPKDINVAWAIDGSAAANGVLNSWTDQDSKDSTYSMSSTLTLTADAYEAANSYTCAATHKTSTSPIVKSFNANEC >1hys_D QITLKESGPGIVQPSQPFRLTCTFSGFSLSTSGIGVTWIRQPSGKGLEWLATIWWDDDNRYNPSLKSRLTVSKDTSNNQAFLNMMTVETADTAIYYCAQSAITSVTDSAMDHWGQGTSVTVSSAATTPPSVYPLAPGSAAQTNSMVTLGCLVKGYFPEPVTVTWNSGSLSSGVHTFPAVLQSDLYTLSSSVTVPSSTWPSETVTCNVAHPASSTKVDKKI >4jfx_A DIVLTQSPATLSLSPGERATLSCMTSTDIDDDMNWYQQKPGQAPRLLISEGNTLRPGVPARFSGSGSGTDFTLTISSLEPEDFAVYYCLQSFNVPLTFGQGTKVEIKRTVAAPSVFIFPPSDSQLKSGTASVVCLLNNFYPREAKVQWKVDNALQSGNSQESVTEQDSKDSTYSLSSTLTLSKADYEKHKVYACEVTHQGLSSPVTKSFNRGEC >4jfx_H EISEVQLVESGGGLVQPGGSLRLSCVTSGFTFRKFGMSWVRQAPGKGLEWVASIVTGGRKTYYSDSVKGRFTISRDNSKNTLYLQMNSLRAEDTAVYYCTRGYSSTSYAMDYWGQGTLVTVSSASTKGPSVFPLAPSSKSTSGGTAALGCLVKDYFPEPVTVSWNSGALTSGVHTFPAVLQSSGLYSLSSVVTVPSSSLGTQTYICNVNHKPSNTKVDKKVEPKSCDKSHTATGA >4jfy_A DIVLTQSPATLSLSPGERATLSCMTSTDIDDDMNWYQQKPGQAPRLLISEGNTLRPGVPARFSGSGSGTDFTLTISSLEPEDFAVYYCLQSFNVPLTFGQGTKVEIKRTVAAPSVFIFPPSDSQLKSGTASVVCLLNNFYPREAKVQWKVDNALQSGNSQESVTEQDSKDSTYSLSSTLTLSKADYEKHKVYACEVTHQGLSSPVTKSFNRGEC >4jfy_H EISEVQLVESGGGLVQPGGSLRLSCVTSGFTFRKFGMSWVRQAPGKGLEWVASIVTGGRKTYYSDSVKGRFTISRDNSKNTLYLQMNSLRAEDTAVYYCTRGYSSTSYAMDYWGQGTLVTVSSASTKGPSVFPLAPSSKSTSGGTAALGCLVKDYFPEPVTVSWNSGALTSGVHTFPAVLQSSGLYSLSSVVTVPSSSLGTQTYICNVNHKPSNTKVDKKVEPKSCDKSHTATGA >4jfz_H EISEVQLVESGGGLVQPGGSLRLSCVTSGFTFRKFGMSWVRQAPGKGLEWVASIATGGHTTYYSDSVKGRFTISRDNSKNTLYLQMNSLRAEDTAVYYCTRGYSSTSYAMDYWGQGTLVTVSSASTKGPSVFPLAPSSKSTSGGTAALGCLVKDYFPEPVTVSWNSGALTSGVHTFPAVLQSSGLYSLSSVVTVPSSSLGTQTYICNVNHKPSNTKVDKKVEPKSCDKSHTATGA >4jfz_L DIVLTQSPATLSLSPGERATLSCMTSTDIDDDMNWYQQKPGQAPRLLISEGNTLRPGVPARFSGSGSGTDFTLTISSLEPEDFAVYYCLQSFNVPLTFGQGTKVEIKRTVAAPSVFIFPPSDSQLKSGTASVVCLLNNFYPREAKVQWKVDNALQSGNSQESVTEQDSKDSTYSLSSTLTLSKADYEKHKVYACEVTHQGLSSPVTKSFNRGEC >2p7t_A QVQLQQPGAELVKPGASVKLSCKASGYTFTSDWIHWVKQRPGHGLEWIGEIIPSYGRANYNEKIQKKATLTADKSSSTAFMQLSSLTSEDSAVYYCARERGDGYFAVWGAGTTVTVSSAKTTPPSVYPLAPGSAAQTNSMVTLGCLVKGYFPEPVTVTWNSGSLSSGVHTFPAVLQSDLYTLSSSVTVPSSSWPSETVTCNVAHPASSTKVDKKIVPRD >2p7t_B DILLTQSPAILSVSPGERVSFSCRASQSIGTDIHWYQQRTNGSPRLLIKYASESISGIPSRFSGSGSGTDFTLSINSVESEDIANYYCQQSNRWPFTFGSGTKLEIKRADAAPTVSIFPPSSEQLTSGGASVVCFLNNFYPKDINVKWKIDGSERQNGVLNSWTDQDSKDSTYSMSSTLTLTKDEYERHNSYTCEATHKTSTSPIVKSFNRN >2itc_A QVQLQQPGAELVKPGASVKLSCKASGYTFTSDWIHWVKQRPGHGLEWIGEIIPSYGRANYNEKIQKKATLTADKSSSTAFMQLSSLTSEDSAVYYCARERGDGYFAVWGAGTTVTVSSAKTTPPSVYPLAPGSAAQTNSMVTLGCLVKGYFPEPVTVTWNSGSLSSGVHTFPAVLQSDLYTLSSSVTVPSSSWPSETVTCNVAHPASSTKVDKKIVPRD >2itc_B DILLTQSPAILSVSPGERVSFSCRASQSIGTDIHWYQQRTNGSPRLLIKYASESISGIPSRFSGSGSGTDFTLSINSVESEDIANYYCQQSNRWPFTFGSGTKLEIKRADAAPTVSIFPPSSEQLTSGGASVVCFLNNFYPKDINVKWKIDGSERQNGVLNSWTDQDSKDSTYSMSSTLTLTKDEYERHNSYTCEATHKTSTSPIVKSFNRN >1mnu_H EVNLQQSGTVLARPGASVRMSCKASGYSFTSYWLHWIKQRPGQGLEWIGGIYPGNRDTRYTQRFKDKAKLTAVTSANTAYMELSSLTNEDSAVYYCSIIYFDYADFIMDYWGQGTTVTVSSAKTTAPSVYPLAPVCGDTTGSSVTLGCLVKGYFPEPVTLTWNSGSLSSGVHTFPAVLQSDLYTLSSSVTVTSSTWPSQSITCNVAHPASSTKVDKKIEPRGPTI >1mnu_L DIVMTQTPLSLPVSLGDKASISCRSSQALVHSNGNTYLHWYLQKPGQSPKLLIYKVSNRFSGVPDRFSGSGSGTDFTLKISRVEAEDLGVFFCSQSTHVPRTFGGGTKLEIKRADAAPTVSIFPPSSEQLTSGGASVVCFLNNFYPKDINVKWKIDGSERQNGVLNSWTDQDSKDSTYSMSSTLTLTKDEYERHNSYTCEATHKTSTSPIVKSFNRNEC >4g7y_H EVQLVESGGGLVQPGGSLRLSCAASGFNVSSSSIHWVRQAPGKGLEWVASISSYYGYTSYADSVKGRFTISADTSKNTAYLQMNSLRAEDTAVYYCARSYSWSYAIDYWGQGTLVTVSSASTKGPSVFPLAPSSKSTSGGTAALGCLVKDYFPEPVTVSWNSGALTSGVHTFPAVLQSSGLYSLSSVVTVPSSSLGTQTYICNVNHKPSNTKVDKKVEP >4g7y_L DIQMTQSPSSLSASVGDRVTITCRASQSVSSAVAWYQQKPGKAPKLLIYSASSLYSGVPSRFSGSGSGTDFTLTISSLQPEDFATYYCQQYFYWPITFGQGTKVEIKRTVAAPSVFIFPPSDEQLKSGTASVVCLLNNFYPREAKVQWKVDNALQAGNSQESVTEQDSKDSTYSLSSTLTLSKADYEKHKVYACEVTHQGLSSPVTKSFNR >2wub_Q DIQMTQSPSSLSASVGDRVTITCRASQDVSTAVAWYQQKPGKAPKLLIYSASFLYSGVPSRFSGSGSGTDFTLTISSLQPEDFATYYCQQSNRAPATFGQGTKVEIKRTVAAPSVFIFPPSDEQLKSGTASVVCLLNNFYPREAKVQWKVDNALQSGNSQESVTEQDSKDSTYSLSSTLTLSKADYEKHKVYACEVTHQGLSSPVTKSFNRGEC >2wub_H EVQLVESGGGLVQPGGSLRLSCAASGFTINGTYIHWVRQAPGKGLEWVGGIYPAGGATYYADSVKGRFTISADTSKNTAYLQMNSLRAEDTAVYYCAKWAWPAFDYWGQGTLVTVSSASTKGPSVFPLAPSSKSTSGGTAALGCLVKDYFPEPVTVSWNSGALTSGVHTFPAVLQSSGLYSLSSVVTVPSSSLGTQTYICNVNHKPSNTKVDKKVEPKSCDKTH >2wuc_H EVQLVESGGGLVQPGGSLRLSCAASGFTINGTYIHWVRQAPGKGLEWVGGIYPAGGATYYADSVKGRFTISADTSKNTAYLQMNSLRAEDTAVYYCAKWAWPAFDYWGQGTLVTVSSASTKGPSVFPLAPSSKSTSGGTAALGCLVKDYFPEPVTVSWNSGALTSGVHTFPAVLQSSGLYSLSSVVTVPSSSLGTQTYICNVNHKPSNTKVDKKVEPKSCDKTH >2wuc_L DIQMTQSPSSLSASVGDRVTITCRASQDVSTAVAWYQQKPGKAPKLLIYSASFLYSGVPSRFSGSGSGTDFTLTISSLQPEDFATYYCQQSNRAPATFGQGTKVEIKRTVAAPSVFIFPPSDEQLKSGTASVVCLLNNFYPREAKVQWKVDNALQSGNSQESVTEQDSKDSTYSLSSTLTLSKADYEKHKVYACEVTHQGLSSPVTKSFNRGEC >1g7m_A DIVLTQSPASLSASVGETVTITCRASGNIHNYLAWYQQKQGKSPQLLVYYTTTLADGVPSRFSGSGSGTQYSLKINSLQPEDFGSYYCQHFVSTPRTFGGGTKLEIK >1g7m_B QVQLQESGPGLVAPSQSLSITCTVSGFSLTGYGVNWVRQPPGKGLEWLGMIWGDGNTDYNSALKSRLSISKDNSKSQVFLKMNSLHTDDTARYYCARERDYRLDYWGQGTTLTVSS >1g7l_A DIVLTQSPASLSASVGETVTITCRASGNIHNYLAWYQQKQGKSPQLLVYYTTTLADGVPSRFSGSGSGTQYSLKINSLQPEDFGSYYCQHFSSTPRTFGGGTKLEIK >1g7l_B QVQLQESGPGLVAPSQSLSITCTVSGFSLTGYGVNWVRQPPGKGLEWLGMIWGDGNTDYNSALKSRLSISKDNSKSQVFLKMNSLHTDDTARYYCARERDYRLDYWGQGTTLTVSS >1tqb_C DVVMSQTPLTLSVTIGQPASISCKSSQSLLDSDGKTYLNWLLQRPGQSPKRLIYLVSRLDSGVPDRFTGSGSGTDFTLKISRVEAEDLGIYFCWQGSHFPQTFGGGTKLEIKRADAAPTVSIFPPSSEQLTSGGASVVCFLNNFYPKDINVKWKIDGSERQNGVLNSWTDQDSKDSTYSMSSTLTLTKDEYERHNSYTCEATHKTSTSPIVKSFNRNEC >1tqb_B QIQLVQSGPELKKPGETVKISCKASGYTFTNYGMNLVKQAPGKGFEWMGWINTFTGEPTYADDFKGRFVFSLDTSASTAYLQINNLKNEDTATYFFTRGTDYWGQGTTLTVSSAKTTAPSVYPLAPVCGDTTGSSVTLGCLVKGYFPEPVTLTWNSGSLSSGVHTFPAVLQSDLYTLSSSVTVTSSTWPSQSITCNVAHPASSTKVDKKIEP >1tqc_C DVVMSQTPLTLSVTIGQPASISCKSSQSLLDSDGKTYLNWLLQRPGQSPKRLIYLVSRLDSGVPDRFTGSGSGTDFTLKISRVEAEDLGIYFCWQGSHFPQTFGGGTKLEIKRADAAPTVSIFPPSSEQLTSGGASVVCFLNNFYPKDINVKWKIDGSERQNGVLNSWTDQDSKDSTYSMSSTLTLTKDEYERHNSYTCEATHKTSTSPIVKSFNRNEC >1tqc_B QIQLVQSGPELKKPGETVKISCKASGYTFTNYGMNLVKQAPGKGFEWMGWINTFTGEPTYADDFKGRFVFSLDTSASTAYLQINNLKNEDTATYFFTRGTDYWGQGTTLTVSSAKTTAPSVYPLAPVCGDTTGSSVTLGCLVKGYFPEPVTLTWNSGSLSSGVHTFPAVLQSDLYTLSSSVTVTSSTWPSQSITCNVAHPASSTKVDKKIEP >1g7i_A DIVLTQSPASLSASVGETVTITCRASGNIHNYLAWYQQKQGKSPQLLVYYTTTLADGVPSRFSGSGSGTQYSLKINSLQPEDFGSYYCQHFFSTPRTFGGGTKLEIK >1g7i_B QVQLQESGPGLVAPSQSLSITCTVSGFSLTGYGVNWVRQPPGKGLEWLGMIWGDGNTDYNSALKSRLSISKDNSKSQVFLKMNSLHTDDTARYYCARERDYRLDYWGQGTTLTVSS >1g7h_A DIVLTQSPASLSASVGETVTITCRASGNIHNYLAWYQQKQGKSPQLLVYYTTTLADGVPSRFSGSGSGTQYSLKINSLQPEDFGSYYCQHFASTPRTFGGGTKLEIK >1g7h_B QVQLQESGPGLVAPSQSLSITCTVSGFSLTGYGVNWVRQPPGKGLEWLGMIWGDGNTDYNSALKSRLSISKDNSKSQVFLKMNSLHTDDTARYYCARERDYRLDYWGQGTTLTVSS >1g7j_A DIVLTQSPASLSASVGETVTITCRASGNIHNYLAWYQQKQGKSPQLLVYYTTTLADGVPSRFSGSGSGTQYSLKINSLQPEDFGSYYCQHFHSTPRTFGGGTKLEIK >1g7j_B QVQLQESGPGLVAPSQSLSITCTVSGFSLTGYGVNWVRQPPGKGLEWLGMIWGDGNTDYNSALKSRLSISKDNSKSQVFLKMNSLHTDDTARYYCARERDYRLDYWGQGTTLTVSS >3c2a_I EVQLVESGGGLVKPGGSLRLTCVASGFTFSDVWLNWVRQAPGKGLEWVGRIKSRTDGGTTDYAASVKGRFTISRDDSKNTLYLQMNSLKTEDTAVYSCTTDGFIMIRGVSEDYYYYYMDVWGKGTTVTVSSASTKGPSVFPLAPCSRSTSGGTAALGCLVKDYFPEPVTVSWNSGALTSGVHTFPAVLQSSGLYSLSSVVTVPSSSLGTQTYTCNVNHKPSNTKVDKRVEL >3c2a_H EVQLVESGGGLVKPGGSLRLTCVASGFTFSDVWLNWVRQAPGKGLEWVGRIKSRTDGGTTDYAASVKGRFTISRDDSKNTLYLQMNSLKTEDTAVYSCTTDGFIMIRGVSEDYYYYYMDVWGKGTTVTVSSASTKGPSVFPLAPCSRSTSGGTAALGCLVKDYFPEPVTVSWNSGALTSGVHTFPAVLQSSGLYSLSSVVTVPSSSLGTQTYTCNVNHKPSNTKVDKRVEL >4oii_I QVQLQQPGAELVKPGASVKLSCKASGYTFTSYWMHWVKLRPGQGFEWIGDINPNNGGPSYNEKFKRKATLTVDTSSSTAYMQLSSLTSEDSAVYYCTIDDGYRFGYWGQGTLVTVSAAKTTAPSVYPLAPVCGDTTGSSVTLGCLVKGYFPEPVTLTWNSGSLSSGVHTFPAVLQSDLYTLSSSVTVTSSTWPSQSITCNVAHPASSTKVDKKIEPR >4oii_H QVQLQQPGAELVKPGASVKLSCKASGYTFTSYWMHWVKLRPGQGFEWIGDINPNNGGPSYNEKFKRKATLTVDTSSSTAYMQLSSLTSEDSAVYYCTIDDGYRFGYWGQGTLVTVSAAKTTAPSVYPLAPVCGDTTGSSVTLGCLVKGYFPEPVTLTWNSGSLSSGVHTFPAVLQSDLYTLSSSVTVTSSTWPSQSITCNVAHPASSTKVDKKIEPR >2vc2_H EVQLQQSGAELVKPGASVKLSCTASGFNIKDTYVHWVKQRPEQGLEWIGRIDPANGYTKYDPKFQGKATITADTSSNTAYLQLSSLTSEDTAVYYCVRPLYDYYAMDYWGQGTSVTVSSAKTTAPSVYPLAPVCGDTTGSSVTLGCLVKGYFPEPVTLTWNSGSLSSGVHTFPAVLQSDLYTLSSSVTVTSSTWPSQSITCNVAHPASSTKVDKKIEPRGP >2vc2_L DILMTQSPSSMSVSLGDTVSITCHASQGISSNIGWLQQKPGKSFMGLIYYGTNLVDGVPSRFSGSGSGADYSLTISSLDSEDFADYYCVQYAQLPYTFGGGTKLEIKRADAAPTVSIFPPSSEQLTSGGASVVCFLNNFYPKDINVKWKIDGSERQNGVLNSWTDQDSKDSTYSMSSTLTLTKDEYERHNSYTCEATHKTSTSPIVKSFNRNEC >3hzy_A DIVMTQSPSSLAVSAGEKVTMSCKSSQSLLNSRTRKNYLAWYQQKPGQSPKLLIYWASTRESGVPDRFTGSGSGTDFTLTISSVQAEDLAVYYCKQSYNLRTFGGGTKLELKRADAAPTVSIFPPSSEQLTSGGASVVCFLNNFYPKDIAVKWKIDGSERQNGVLNSWTDQDSKDSTYSMSSTLTLTKDEYERHNSYTCEATHKTSTSPIVKSFNRNEC >3hzy_B EVKLVESGGGLVQPGGSLRLSCATSGFTFTDYYMSWVRQPPGKALKWLAFIRNKAKGYTTEYSASVKGRFTISRDNSQSFLYLQMNTLRAEDSATYYCARDINPGSDGYYDALDYWGQGTSVTVSRAKTTPPSVYPLAPGSAAQTNSMVTLGCLVKGYFPEPVTVTWNSGSLSSGVHTFPAVLQSDLYTLSSSVTVPSSTWPSETVTCNVAHPASSTKVDKKIVPR >3hzv_A DIVMTQSPSSLAVSAGEKVTMSCKSSQSLLNSRTRKNYLAWYQQKPGQSPKLLIYWASTRESGVPDRFTGSGSGTDFTLTISSVQAEDLAVYYCKQSYNLRTFGGGTKLELKRADAAPTVSIFPPSSEQLTSGGASVVCFLNNFYPKSIAVKWKIDGSERQNGVLNSWTDQDKKDSTYSMSSTLTLTKDEYERHNSYTCEATHKTSTSPIVKSFNRNEC >3hzv_B EVKLVESGGGLVQSGGSLRLSCATSGFTFTDYYMSWVRQPPGKALEWLAFIRNKAKGYTTEYSSSVKGRFTISRDNSQSFLYLQMNTLRAEDSATYYCARDINPGSDGYYDALDYWGQGTSVTVSRAKTTPPSVYPLAPGSAAQTNSMVTLGCLVKGYFPEPVTVTWNSGSLSSGVHTFPAVLQSDLYTLSSSVTVPSSTWPSETVTCNVAHPASSTKVDKKIVPR >3hzm_A DIVMTQSPSSLAVSAGEKVTMSCKSSQSLLNSRTRKNYLAWYQQKPGQSPKLLIYWASTRESGVPDRFTGSGSGTDFTLTISSVQAEDLAVYYCKQSYNLRTFGGGTKLELKRADAAPTVSIFPPSSEQLTSGGASVVCFLNNFYPKSIAVKWKIDGSERQNGVLNSWTDQDKKDSTYSMSSTLTLTKDEYERHNSYTCEATHKTSTSPIVKSFNRNEC >3hzm_B EVKLVESGGGLVQSGGSLRLSCATSGFTFTDYYMSWVRQPPGKALEWLAFIRNKAKGYTTEYSSSVKGRFTISRDNSQSFLYLQMNTLRAEDSATYYCARDINPGSDGYYDALDYWGQGTSVTVSRAKTTPPSVYPLAPGSAAQNSMVTLGCLVKGYFPEPVTVTWNSGSLSSGVHTFPAVLQSDLYTLSSSVTVPSSTWPSETVTCNVAHPASSTKVDKKIVPR >3hzk_A DIVMTQSPSSLAVSAGEKVTMSCKSSQSLLNSRTRKNYLAWYQQKPGQSPKLLIYWASTRESGVPDRFTGSGSGTDFTLTISSVQAEDLAVYYCKQSYNLRTFGGGTKLELKRADAAPTVSIFPPSSEQLTSGGASVVCFLNNFYPKSIAVKWKIDGSERQNGVLNSWTDQDKKDSTYSMSSTLTLTKDEYERHNSYTCEATHKTSTSPIVKSFNRNEC >3hzk_B EVKLVESGGGLVQSGGSLRLSCATSGFTFTDYYMSWVRQPPGKALEWLAFIRNKAKGYTTEYSSSVKGRFTISRDNSQSFLYLQMNTLRAEDSATYYCARDINPGSDGYYDALDYWGQGTSVTVSRAKTTPPSVYPLAPGSAAQTNSMVTLGCLVKGYFPEPVTVTWNSGSLSSGVHTFPAVLQSDLYTLSSSVTVPSSTWPSETVTCNVAHPASSTKVDKKIVPR >2uyl_A ELVMTQTPPSLPVSLGDQASISCRSSQSIVHSNGDTYLEWYLQKPGQSPKLLIYKVSNRFSGVPDRFSGSGSGTDFTLEISRVEAEDLGVYYCFQGSHVPRTFGGGTKLEIKRADAAPTVSIFPPSSEQLTSGGASVVCFLNNFYPKDINVKWKIDGSERQNGVLNSWTDQDSKDSTYSMSSTLTLTKDEYERHNSYTCEATHKTSTSPIVKSFNRNEC >2uyl_B QVQLEQPGAELVKPGASVKLSCKASGYTFTSNWINWVKQRPGQGLEWIGHISPGSSSTNYNEKFKSKATLTVDTSSSTAYMQLSSLTSDDSAVYYCGREETVRASFGNWGQGTLVTVSAAKTTPPSVYPLAPGSAAQTNSMVTLGCLVKGYFPEPVTVTWNSGSLSSGVHTFPAVLQSDLYTLSSSVTVPSSTWPSQTVTCNVAHPASSTKVDKKIVPRDC >4dn3_H QVELVQSGAEVKKPGSSVKVSCKASGGTFSSYGISWVRQAPGQGLEWMGGIIPIFGTANYAQKFQGRVTITADESTSTAYMELSSLRSEDTAVYYCARYDGIYGELDFWGQGTLVTVSSASTKGPSVFPLAPSSKSTSGGTAALGCLVKDYFPEPVTVSWNSGALTSGVHTFPAVLQSSGLYSLSSVVTVPSSSLGTQTYICNVNHKPSNTKVDKKVEPKSCDKT >4dn3_L EIVLTQSPATLSLSPGERATLSCRASQSVSDAYLAWYQQKPGQAPRLLIYDASSRATGVPARFSGSGSGTDFTLTISSLEPEDFAVYYCHQYIQLHSFTFGQGTKVEIKRTVAAPSVFIFPPSDEQLKSGTASVVCLLNNFYPREAKVQWKVDNALQSGNSQESVTEQDSKDSTYSLSSTLTLSKADYEKHKVYACEVTHQGLSSPVTKSFNRGEC >2qqk_H EVQLVESGGGLVQPGGSLRLSCAASGFTISGYGIHWVRQAPGKGLEWVAYIYPDSGYTDYADSVKGRFTISADTSKNTAYLQMNSLRAEDTAVYYCAREDFRNRRRLWYVMDYWGQGTLVTVSSASTKGPSVFPLAPSSKSTSGGTAALGCLVKDYFPEPVTVSWNSGALTSGVHTFPAVLQSSGLYSLSSVVTVPSSSLGTQTYICNVNHKPSNTKVDKKVEPKSCDKTH >2qqk_L DIQMTQSPSSLSASVGDRVTITCRASQDVSTAVAWYQQKPGKAPKLLIYSASFLYSGVPSRFSGSGSGTDFTLTISSLQPEDFATYYCQQAWAYLPTFGQGTKVEIKRTVAAPSVFIFPPSDEQLKSGTASVVCLLNNFYPREAKVQWKVDNALQSGNSQESVTEQDSKDSTYSLSSTLTLSKADYEKHKVYACEVTHQGLSSPVTKSFNRGEC >2qql_H EVQLVESGGGLVQPGGSLRLSCAASGFTISGYGIHWVRQAPGKGLEWVAYIYPDSGYTDYADSVKGRFTISADTSKNTAYLQMNSLRAEDTAVYYCAREDFRNRRRLWYVMDYWGQGTLVTVSSASTKGPSVFPLAPSSKSTSGGTAALGCLVKDYFPEPVTVSWNSGALTSGVHTFPAVLQSSGLYSLSSVVTVPSSSLGTQTYICNVNHKPSNTKVDKKVEPKSCDKTH >2qql_L DIQMTQSPSSLSASVGDRVTITCRASQDVSTAVAWYQQKPGKAPKLLIYSASFLYSGVPSRFSGSGSGTDFTLTISSLQPEDFATYYCQQAWAYLPTFGQGTKVEIKRTVAAPSVFIFPPSDEQLKSGTASVVCLLNNFYPREAKVQWKVDNALQSGNSQESVTEQDSKDSTYSLSSTLTLSKADYEKHKVYACEVTHQGLSSPVTKSFNRGEC >2qqn_H EVQLVESGGGLVQPGGSLRLSCAASGFTFSSYAMSWVRQAPGKGLEWVSQISPAGGYTNYADSVKGRFTISADTSKNTAYLQMNSLRAEDTAVYYCARGELPYYRMSKVMDVWGQGTLVTVSSASTKGPSVFPLAPSSKSTSGGTAALGCLVKDYFPEPVTVSWNSGALTSGVHTFPAVLQSSGLYSLSSVVTVPSSSLGTQTYICNVNHKPSNTKVDKKVEPKSCDKTH >2qqn_L DIQMTQSPSSLSASVGDRVTITCRASQYFSSYLAWYQQKPGKAPKLLIYGASSRASGVPSRFSGSGSGTDFTLTISSLQPEDFATYYCQQYLGSPPTFGQGTKVEIKRTVAAPSVFIFPPSDEQLKSGTASVVCLLNNFYPREAKVQWKVDNALQSGNSQESVTEQDSKDSTYSLSSTLTLSKADYEKHKVYACEVTHQGLSSPVTKSFNRGEC >1i7z_A DLVLTQSPASLAVSLGQRATISCRASKSVSTSGYNYMHWYQQKPGQPPKLLIYLASNLASGVPARFSGSGSGTDFTLNIHPVEEEDAATYYCLYSREFPPWTFGGGTKLEIKRTVAAPSVFIFPPSDEQLKSGTASVVCLLNNFYPREAKVQWKVDNALQSGNSQESVTEQDSKDSTYSLSSTLTLSKADYEKHKVYACEVTHQGLSSPVTKSFNRGEC >1i7z_C DLVLTQSPASLAVSLGQRATISCRASKSVSTSGYNYMHWYQQKPGQPPKLLIYLASNLASGVPARFSGSGSGTDFTLNIHPVEEEDAATYYCLYSREFPPWTFGGGTKLEIKRTVAAPSVFIFPPSDEQLKSGTASVVCLLNNFYPREAKVQWKVDNALQSGNSQESVTEQDSKDSTYSLSSTLTLSKADYEKHKVYACEVTHQGLSSPVTKSFNRGEC >1dcl_A PSALTQPPSASGSLGQSVTISCTGTSSNVGGYNYVSWYQQHAGKAPKVIIYEVNKRPSGVPDRFSGSKSGNTASLTVSGLQAEDEADYYCSSYEGSDNFVFGTGTKVTVLGQPKANPTVTLFPPSSEELQANKATLVCLISDFYPGAVTVAWKADGSPVKAGVETTKPSKQSNNKYAASSYLSLTPEQWKSHRSYSCQVTHEGSTVEKTVAPTECS >1dcl_B PSALTQPPSASGSLGQSVTISCTGTSSNVGGYNYVSWYQQHAGKAPKVIIYEVNKRPSGVPDRFSGSKSGNTASLTVSGLQAEDEADYYCSSYEGSDNFVFGTGTKVTVLGQPKANPTVTLFPPSSEELQANKATLVCLISDFYPGAVTVAWKADGSPVKAGVETTKPSKQSNNKYAASSYLSLTPEQWKSHRSYSCQVTHEGSTVEKTVAPTECS >3j30_A DIVLTQSPASLAVSLGQRATISCRASESVDSYGNSFMNWYQQKPGQPPKLLIYRASNLESGIPARFSGSGSRTDFTLTINPVEADDVATYYCQQSNEDPFTFGSGTKLEIKRADAAPTVSIFPPSSKLGTSGGASVVCFLNNFYPKDINVKWKIDGSERQNGVLNSWTDQDSKDSTYSMSSTLTLTKDEYERHNSYTCEATHKTSTSPIVKSFNRNE >3j30_C DIVLTQSPASLAVSLGQRATISCRASESVDSYGNSFMNWYQQKPGQPPKLLIYRASNLESGIPARFSGSGSRTDFTLTINPVEADDVATYYCQQSNEDPFTFGSGTKLEIKRADAAPTVSIFPPSSKLGTSGGASVVCFLNNFYPKDINVKWKIDGSERQNGVLNSWTDQDSKDSTYSMSSTLTLTKDEYERHNSYTCEATHKTSTSPIVKSFNRNE >4hix_H VQLLESGGGLVQPGGSLRLSCAASGFTFSNYGMSWVRQAPGKGLEWVASIRSGGGRTYYSDNVKGRFTISRDNAKNSLYLQMNSLRAEDTALYYCVRYDHYSGSSDYWGQGTLVTVSSASTKGPSVFPLAPSSKSTSGGTAALGCLVKDYFPQPVTVSWNSGALTSGVHTFPAVLQSSGLYSLSSVVTVPSSSLGTQTYICNVNHKPSNTKVDKKVEPKSCHHHHHH >4hix_L EYVVMTQSPLSLPVTPGEPASISCKSSQSLLDSDGKTYLNWLLQKPGQSPQRLIYLVSKLDSGVPDRFSGSGSGTDFTLKISRVEAEDVGVYYCWQGTHFPRTFGQGTKVEIKRTVAAPSVFIFPPSDEQLKSGTASVVCLLNNFYPREAKVQWKVDNALQSGNSQESVTEQDSKDSTYSLSSTLTLSKADYEKHKVYACEVTHQGLSSPVTKSFNRGEC >4eig_B QVQLQESGGGLVQAGGSLRLSCKASGIIFSVYKMTWYRQAPGKERELVALITTNNNTMTVDSVKGRFTISRDNVQNTVYLEMNNLKPEDTAVYYCNANRGLAGPAYWGQGTQVTVSSHHHHHH >4kmt_H EVQLVQSGAEVKKPGESLKISCKGSGYSFTSYWIGWVRQMPGKGLEWMGIIYPGDSDTRYSPSFQGQVTISADKSISTAYLQWSSLKASDTAMYYCARYDGIYGELDFWGQGTLVTVSSASTKGPSVFPLAPSSKSTSGGTAALGCLVKDYFPEPVTVSWNSGALTSGVHTFPAVLQSSGLYSLSSVVTVPSSSLGTQTYICNVNHKPSNTKVDKKVEPKSCHHHHHH >4kmt_L DIQMTQSPSSLSASVGDRVTITCRASQSISSYLNWYQQKPGKAPKLLIYAASSLQSGVPSRFSGSGSGTDFTLTISSLQPEDFATYYCQQSYSTPLTFGQGTKVEVKRTVAAPSVFIFPPSDEQLKSGTASVVCLLNNFYPREAKVQWKVDNALQSGNSQESVTEQDSKDSTYSLSSTLTLSKADYEKHKVYACEVTHQGLSSPVTKSFNRGEC >3b5g_A NFMLTQSHSVSESPGKTVTISCTRSSGSIASNYVQWYQQRPGSSPTTVIYEDNQRPSGVPDRFSGSIDSSSNSASLTISGLKTEDEADYYCQSYDSSNHVVFGGGTKLTVL >3b5g_B NFMLTQSHSVSESPGKTVTISCTRSSGSIASNYVQWYQQRPGSSPTTVIYEDNQRPSGVPDRFSGSIDSSSNSASLTISGLKTEDEADYYCQSYDSSNHVVFGGGTKLTVL >4kml_B AVQLQESGGGLVQPGGSLRLSCAASGRTFSSYNMGWFRQAPGKGREFVASITSSGDKSDYTDSVKGRFTISRDNAKNTMYLQMNNLKPEDTATYYCARGLGIYIIRARGGYDHWGQGTQVTVSSHHHHHH >4hij_A AGQLTQSPATLSLSPGERATLSCRASQSVTNYLAWYQQKPGQAPRLLIYGASNRATGIPARFSGSGSGTDFTLTISSLEPEDFAVYYCQQRDNWPPDATFGQGTKVEIKRTVAAPSVFIFPPSDEQLKSGTASVVCLLNNFYPREAKVQWKVDNALQSGNSQESVTEQDSKDSTYSLSSTLTLSKADYEKHKVYACEVTHQGLRSPVTKSFNRGECAAA >4hij_C AGQLTQSPATLSLSPGERATLSCRASQSVTNYLAWYQQKPGQAPRLLIYGASNRATGIPARFSGSGSGTDFTLTISSLEPEDFAVYYCQQRDNWPPDATFGQGTKVEIKRTVAAPSVFIFPPSDEQLKSGTASVVCLLNNFYPREAKVQWKVDNALQSGNSQESVTEQDSKDSTYSLSSTLTLSKADYEKHKVYACEVTHQGLRSPVTKSFNRGECAAA >4hii_A AGQLTQSPATLSLSPGERATLSCRASQSVTNYLAWYQQKPGQAPRLLIYGASNRATGIPARFSGSGSGTDFTLTISSLEPEDFAVYYCQQRDNWPPDATFGQGTKVEIKRTVAAPSVFIFPPSDEQLKSGTASVVCLLNNFYPREAKVQWKVDNALQSGNSQESVTEQDSKDSTYSLSSTLTLSKADYEKHKVYACEVTHQGLRSPVTKSFNRGECAAA >4hii_C AGQLTQSPATLSLSPGERATLSCRASQSVTNYLAWYQQKPGQAPRLLIYGASNRATGIPARFSGSGSGTDFTLTISSLEPEDFAVYYCQQRDNWPPDATFGQGTKVEIKRTVAAPSVFIFPPSDEQLKSGTASVVCLLNNFYPREAKVQWKVDNALQSGNSQESVTEQDSKDSTYSLSSTLTLSKADYEKHKVYACEVTHQGLRSPVTKSFNRGECAAA >1pkq_A MKQSTIALALLPLLFTPVTKADIELTQSPSSLAVSAGEKVTMSCKSSQSLLNSGNQKNYLAWYQQKPGLPPKLLIYGASTRESGVPDRFTGSGSGTDFTLTISSVQAEDLAVYYCQNDHSYPLTFGAGTKLEIKRTVAAPSVFIFPPSDEQLKSGTASVVCLLNNFYPREAKVQWKVDNALQSGNSQESVTEQDSKDSTYSLSSTLTLSKADYEKHKVYACEVTHQGLSSPVTKSFNRGEC >1pkq_B MKKTAIAIAVALAGFATVAQAEVKLHESGAGLVKPGASVEISCKATGYTFSSFWIEWVKQRPGHGLEWIGEILPGRGRTNYNEKFKGKATFTAETSSNTAYMQLSSLTSEDSAVYYCATGNTMVNMPYWGQGTTVTVSSASTKGPSVFPLAPSSKSTSGGTAALGCLVKDYFPEPVTVSWNSGALTSGVHTFPAVLQSSGLYSLSSVVTVPSSSLGTQTYICNVNHKPSNTKVDKKVEPKSCSAWSHPQFEK >4eiz_C QVQLQESGGGLVQAGGSLRLSCTASGRTFSSYAMGWFRQTPGKEREFVAAITWGGSTTLYADSVKGRFTMSRDNAKNTVYLQMNSLKPEDTAVYYCAADGSQYRSTYSFRDKPDYGSWGQGTQVTVSSHHHHHH >4eiz_D QVQLQESGGGLVQAGGSLRLSCTASGRTFSSYAMGWFRQTPGKEREFVAAITWGGSTTLYADSVKGRFTMSRDNAKNTVYLQMNSLKPEDTAVYYCAADGSQYRSTYSFRDKPDYGSWGQGTQVTVSSHHHHHH >4hie_A QAGQLTQSPATLSLSPGERATLSCRASQSVTNYLAWYQQKPGQAPRLLIYGASNRATGIPARFSGSGSGTDFTLTISSLEPEDFAVYYCQQRDNWPPDATFGQGTKVEIKRTVAAPSVFIFPPSDEQLKSGTASVVCLLNNFYPREAKVQWKVDNALQSGNSQESVTEQDSKDSTYSLSSTLTLSKADYEKHKVYACEVTHQGLRSPVTKSFNRGECAAA >4hie_B LINLVESGGGVVQPGRSLRLSCAASGFTFSRYGMHWVRQAPGKGLEWVAVVSSDGRTTYYADSVKGRFTISRDNSKNTLYLQMNSLRAEDTAVFYCAKEGGDNKFSFDYWGQGTLVTVSSASTKGPSVFPLAPCSRSTSESTAALGCLVKDYFPEPVTVSWNSGALTSGVHTFPAVLQSSGLYSLSSVVTVPSSNFGTQTYTCNVDHKPSNTKVDKTVERKCWARHHHHHH >1ru9_H RVQLQQSGPGLVKPSQSLSLTCTVTGYSITSDFAWNWIRQFPGNKLEWMGYINYSGFTSHNPSLKSRISITRDTSKNQFFLQLNSVTTEDTATYYCAGLLWYDGGAGSWGQGTLVTVSAAKTTAPSVYPLAPVCGDTTGSSVTLGCLVKGYFPEPVTLTWNSGSLSSGVHTFPAVLQSDLYTLSSSVTVTSSTWPSQSITCNVAHPASSTKVDKKIEPRGPT >1ru9_L DVVMTQSPKTISVTIGQPASISCKSSQRLLNSNGKTFLNWLLQRPGQSPKRLIYLGTKLDSGVPDRFTGSGSGTDFTLKISRVEAEDLGVYYCWQGTHFPYTFGGGTKLEIKRADAAPTVSIFPPSSEQLTSGGASVVCFLNNFYPKDINVKWKIDGSERQNGVLNSWTDQDSKDSTYSMSSTLTLTKDEYERHNSYTCEATHKTSTSPIVKSFNRNEC >3j3z_H AVHLQGTELVKPGASAGVKLSCKASGYTFTNYDMNWVRQRPEQGLEWIGWIFPGDGSTRYNEKFKGKATLTTDKSSSTAYQLNRLTSEDSAVYFCARRGFHGSYSFAYWGQGTLVTVSGAKTTAPSVYPLAPAAGAAGAGSSVTLGCLVKGYFPEPVTLTWNSGSLSSGVHTFPAVLADLYTLSSSVTVTSSTWPAESITCNVAHPASSTKVDKKIEPRG >3j3z_L DIVMTQSHKFMSTSVGDRVSITCKASQDVNTALAWYQQIPGQSPKLLIYSASNRYTGVPDRFTASGSGTDFTFTISSVQAEDLALYYCQQHYTTPWTFGGGTKLEIKRADAAPTVSIFPPSSEQLTSGGASVVCFLNNFYPKDINVKWAIDGAERAGGVLNSFTGQDSKDSTYSMSSTLTLTKDEYERHASYTCEATHKTSTAPIVKSFNRGAA >4nm4_I QVQLVQSGAEVKKPGASVKLSCKASGYTFTAYSMHWVRQAPGQSLEWLGWINTAIGNTQYSQKFQDRVTITRDTSARTSYMELSSLRSGDTAVYFCARGASWDARGWSGYWGKGTLVTVSSASTKGPSVFPLAPSSKSTSGGTAALGCLVKDYFPEPVTVSWNSGALTSGVHTFPAVLQSSGLYSLSSVVTVPSSSLGTQTYICNVNHKPSNTKVDKRVEPKSC >4nm4_H QVQLVQSGAEVKKPGASVKLSCKASGYTFTAYSMHWVRQAPGQSLEWLGWINTAIGNTQYSQKFQDRVTITRDTSARTSYMELSSLRSGDTAVYFCARGASWDARGWSGYWGKGTLVTVSSASTKGPSVFPLAPSSKSTSGGTAALGCLVKDYFPEPVTVSWNSGALTSGVHTFPAVLQSSGLYSLSSVVTVPSSSLGTQTYICNVNHKPSNTKVDKRVEPKSC >3j3p_H QVQLQQSGAELVRPGTSVKVSCKASGYAFTNYLIQWIKQRPGQGLEWIGVINPGSGGTDYNANFKGKATLTADKSSSIVYMQLSSLTSDDSAVYFCARDFYDYDVGFDYWGQGTTLTVSSAKTTAPSVYPLAPVCGDTTGSSVTLGCLVKGYFPEPVTLTWNSGSLSSGVHTFPAVLQSDLYTLSSSVTVTSSTWPSQSITCNVAHPASSTKVDKKIEPR >3j3p_L DVVMTQTPLSLPVSLGDQASISCSSSQSLVHSNGKTYLHWYLQKPGQSPKLLIYKVSNRFSGVPDRFSGSGSGTYFTLKISRVEAEDLGVYFCSQSTHVPYTFGGGTKLEIKRADAAPTVSIFPPSSEQLTSGGASVVCFLNNFYPKDINVKWKIDGSEVQNGVLNSWTDQDSKDSTYSMSSTLTLTKDEYERHNSYTCEATHKTSTSPIVKSFNRNEC >1a5f_H EVALQQSGAELVKPGASVKLSCAASGFTIKDAYMHWVKQKPEQGLEWIGRIDSGSSNTNYDPTFKGKATITADDSSNTAYLQMSSLTSEDTAVYYCARVGLSYWYAMDYWGQGTSVTVSSAKTTPPSVYPLAPGSAAQTNSMVTLGCLVKGYFPEPVTVTWNSGSLSSGVHTFPAVLQSDLYTLSSSVSVPTSTETVTCNVAHAPSSTKVDKKIVPR >1a5f_L DIVMTQSPSSLTVTTGEKVTMTCKSSQSLLNSGAQKNYLTWYQQKPGQSPKLLIYWASTRESGVPDRFTGSGSGTDFTLSISGVQAEDLAVYYCQNNYNYPLTFGAGTKLELKRADAAPTVSIFPPSSEQLTSGGASVVCFLNNFYPKDINVKWKIDGSERQNGVLNSWTDQDSKDSTYSMSSTLTLTKDEYERHNSYTCEATHKTSTSPIVKSFNRNEC >4nm8_I QVQLVQSGAEVKKPGASVKLSCKASGYTFTAYSMHWVRQAPGQSLEWLGWINTAIGNTQYSQKFQDRVTITRDTSARTSYMELSSLRSGDTAVYFCARGASWDARGWSGYWGKGTLVTVSSASTKGPSVFPLAPSSKSTSGGTAALGCLVKDYFPEPVTVSWNSGALTSGVHTFPAVLQSSGLYSLSSVVTVPSSSLGTQTYICNVNHKPSNTKVDKRVEPKSCHHHHHH >4nm8_H QVQLVQSGAEVKKPGASVKLSCKASGYTFTAYSMHWVRQAPGQSLEWLGWINTAIGNTQYSQKFQDRVTITRDTSARTSYMELSSLRSGDTAVYFCARGASWDARGWSGYWGKGTLVTVSSASTKGPSVFPLAPSSKSTSGGTAALGCLVKDYFPEPVTVSWNSGALTSGVHTFPAVLQSSGLYSLSSVVTVPSSSLGTQTYICNVNHKPSNTKVDKRVEPKSCHHHHHH >3j3o_H QVQLQQSGAELVRPGTSVKVSCKASGYAFTNYLIQWIKQRPGQGLEWIGVINPGSGGTDYNANFKGKATLTADKSSSIVYMQLSSLTSDDSAVYFCARDFYDYDVGFDYWGQGTTLTVSSAKTTAPSVYPLAPVCGDTTGSSVTLGCLVKGYFPEPVTLTWNSGSLSSGVHTFPAVLQSDLYTLSSSVTVTSSTWPSQSITCNVAHPASSTKVDKKIEPR >3j3o_L DVVMTQTPLSLPVSLGDQASISCSSSQSLVHSNGKTYLHWYLQKPGQSPKLLIYKVSNRFSGVPDRFSGSGSGTYFTLKISRVEAEDLGVYFCSQSTHVPYTFGGGTKLEIKRADAAPTVSIFPPSSEQLTSGGASVVCFLNNFYPKDINVKWKIDGSEVQNGVLNSWTDQDSKDSTYSMSSTLTLTKDEYERHNSYTCEATHKTSTSPIVKSFNRNEC >2bx5_A DIQMTQSPSSLSASVGDRVTITCRASQSISSYLNWYQQKPGKAPKLLIYAASSLQSGVPSRFSGSGSGTDFTLTISSLQPEDFATYYCQQSYSTPNTFGQGTKVEIK >2bx5_C DIQMTQSPSSLSASVGDRVTITCRASQSISSYLNWYQQKPGKAPKLLIYAASSLQSGVPSRFSGSGSGTDFTLTISSLQPEDFATYYCQQSYSTPNTFGQGTKVEIK >4ksd_B QVQLQESGGGLVQAGGSLRLSCAASGRTFNSAVMGWFRQAPGKERQFVATIDWSGEYTYYADSVKGRFTISRDNAKNTVYLQMTSLKPEDTALYYCAARLTLGQFDYWGQGTQVTVSSHHHHHH >1h0d_A DIVLTQSPASLAVSLGQRATISCRASESVDNYGISFMSWFQQKPGQPPKLLIYAASNQGSGVPARFSGSGSGTDFSLNIHPMEEDDTAMYFCQQSKEVPLTFGAGTKLELKRADAAPTVSIFPPSSEQLTSGGASVVCFLNNFYPKDINVRWKIDGSERQNGVLNSWTDQDSKDSTYSMSSTLTLTKDEYERHNSYTCEATHAASPIVKSFNRNEC >1h0d_B EVMLVESGGGLVKPGGSLKLSCAASGFTFSSYTMSWVRQTPEKRLEWVATISSGGGNTYYPDSVKGRFTISRDIAKNTLYLQMSSLRSEDTALYYCTRLGDYGYAYTMDYWGQGTSVTVSSAKTTPPSVYPLAPGGGGGGGAMVTLGCLVKGYFPEPVTVTWNSGSLSSGVHTFPAVLQSDLYTLSSSVTVPSSPWPSETVTCNVAHPASSTKVDKKIVPRDC >1rua_H RVQLQQSGPGLVKPSQSLSLTCTVTGYSITSDFAWNWIRQFPGNKLEWMGYINYSGFTSHNPSLKSRISITRDTSKNQFFLQLNSVTTEDTATYYCAGLLWYDGGAGSWGQGTLVTVSAAKTTAPSVYPLAPVCGDTTGSSVTLGCLVKGYFPEPVTLTWNSGSLSSGVHTFPAVLQSDLYTLSSSVTVTSSTWPSQSITCNVAHPASSTKVDKKIEPRGPT >1rua_L DVVMTQSPKTISVTIGQPASISCKSSQRLLNSNGKTFLNWLLQRPGQSPKRLIYLGTKLDSGVPDRFTGSGSGTDFTLKISRVEAEDLGVYYCWQGTHFPYTFGGGTKLEIKRADAAPTVSIFPPSSEQLTSGGASVVCFLNNFYPKDINVKWKIDGSERQNGVLNSWTDQDSKDSTYSMSSTLTLTKDEYERHNSYTCEATHKTSTSPIVKSFNRNEC >1rul_H RVQLQQSGPGLVKPSQSLSLTCTVTGYSITSDFAWNWIRQFPGNKLEWMGYINYSGFTSHNPSLKSRISITRDTSKNQFFLQLNSVTTEDTATYYCAGLLWYDGGAGSWGQGTLVTVSAAKTTAPSVYPLAPVCGDTTGSSVTLGCLVKGYFPEPVTLTWNSGSLSSGVHTFPAVLQSDLYTLSSSVTVTSSTWPSQSITCNVAHPASSTKVDKKIEPRGPT >1rul_L DVVMTQSPKTISVTIGQPASISCKSSQRLLNSNGKTFLNWLLQRPGQSPKRLIYLGTKLDSGVPDRFTGSGSGTDFTLKISRVEAEDLGVYYCWQGTHFPYTFGGGTKLEIKRADAAPTVSIFPPSSEQLTSGGASVVCFLNNFYPKDINVKWKIDGSERQNGVLNSWTDQDSKDSTYSMSSTLTLTKDEYERHNSYTCEATHKTSTSPIVKSFNRNEC >1rum_H RVQLQQSGPGLVKPSQSLSLTCTVTGYSITSDFAWNWIRQFPGNKLEWMGYINYSGFTSHNPSLKSRISITRDTSKNQFFLQLNSVTTEDTATYYCAGLLWYDGGAGSWGQGTLVTVSAAKTTAPSVYPLAPVCGDTTGSSVTLGCLVKGYFPEPVTLTWNSGSLSSGVHTFPAVLQSDLYTLSSSVTVTSSTWPSQSITCNVAHPASSTKVDKKIEPRGPT >1rum_L DVVMTQSPKTISVTIGQPASISCKSSQRLLNSNGKTFLNWLLQRPGQSPKRLIYLGTKLDSGVPDRFTGSGSGTDFTLKISRVEAEDLGVYYCWQGTHFPYTFGGGTKLEIKRADAAPTVSIFPPSSEQLTSGGASVVCFLNNFYPKDINVKWKIDGSERQNGVLNSWTDQDSKDSTYSMSSTLTLTKDEYERHNSYTCEATHKTSTSPIVKSFNRNEC >1ruk_H RVQLQQSGPGLVKPSQSLSLTCTVTGYSITSDFAWNWIRQFPGNKLEWMGYINYSGFTSHNPSLKSRISITRDTSKNQFFLQLNSVTTEDTATYYCAGLLWYDGGAGSWGQGTLVTVSAAKTTAPSVYPLAPVCGDTTGSSVTLGCLVKGYFPEPVTLTWNSGSLSSGVHTFPAVLQSDLYTLSSSVTVTSSTWPSQSITCNVAHPASSTKVDKKIEPRGPT >1ruk_L DVVMTQSPKTISVTIGQPASISCKSSQRLLNSNGKTFLNWLLQRPGQSPKRLIYLGTKLDSGVPDRFTGSGSGTDFTLKISRVEAEDLGVYYCWQGTHFPYTFGGGTKLEIKRADAAPTVSIFPPSSEQLTSGGASVVCFLNNFYPKDINVKWKIDGSERQNGVLNSWTDQDSKDSTYSMSSTLTLTKDEYERHNSYTCEATHKTSTSPIVKSFNRNEC >3gm0_A DYKDDDDKEVQLQESGPSLVKPSQTLSLTCSVTGDSVTSGYWSWIRQFPGNKLDYMGYISYRGSTYYNPSLKSRISITRDTSKNQVYLQLKSVSSEDTATYYCSYFDSDDYAMEYWGQGTSVTVSGGGGSGGGGSGGGGSQIVLTQSPAIMSASPGEKVTLTCSASSSVSSSHLYWYQQKPGSSPKLWIYSTSNLASGVPARFSGSGSGTSYSLTISSMEAEDAASYFCHQWSSFPFTFGSGTKLEIKRAPHHHHHH >3gm0_A DYKDDDDKEVQLQESGPSLVKPSQTLSLTCSVTGDSVTSGYWSWIRQFPGNKLDYMGYISYRGSTYYNPSLKSRISITRDTSKNQVYLQLKSVSSEDTATYYCSYFDSDDYAMEYWGQGTSVTVSGGGGSGGGGSGGGGSQIVLTQSPAIMSASPGEKVTLTCSASSSVSSSHLYWYQQKPGSSPKLWIYSTSNLASGVPARFSGSGSGTSYSLTISSMEAEDAASYFCHQWSSFPFTFGSGTKLEIKRAPHHHHHH >1rur_H EVQLEESGPELVRPGTSVKISCKASGYTFTNYWLGWVKQRPGHGFEWIGDIYPGGVYTTNNEKFRGKAILTADTSSSTAYMQLSSLTSEDSAVYFCARAGGYYTGGDYWGQGTSVTVSSAKTTPPSVYPLAPGSAAQTNSMVTLGCLVKGYFPEPVTVTWNSGSLSSGVHTFPAVLQSDLYTLSSSVTVPSSTWPSETVTCNVAHPASSTKVDKKIVP >1rur_L DIVLTQAAFSNPVTLGASASISCRSSKSLLNSNGIIHMYWYLQKPGQSPQLLIYQMSKLASGAPDRFSGSGSGTDFTLRISRVEAEDVGVYYCAQNLELPYTFGGGTKLEIKRADAAPTVSIFPPSSEQLTSGGASVVCFLNNFYPKDINVKWKIDGSERQNGVLNSWTDQDTKDSTYSMSSTLTLTKDEYERHNSYTCEATHKTSTSPIVKSFNRN >1rup_H RVQLQQSGPGLVKPSQSLSLTCTVTGYSITSDFAWNWIRQFPGNKLEWMGYINYSGFTSHNPSLKSRISITRDTSKNQFFLQLNSVTTEDTATYYCAGLLWYDGGAGSWGQGTLVTVSAAKTTAPSVYPLAPVCGDTTGSSVTLGCLVKGYFPEPVTLTWNSGSLSSGVHTFPAVLQSDLYTLSSSVTVTSSTWPSQSITCNVAHPASSTKVDKKIEPRGPT >1rup_L DVVMTQSPKTISVTIGQPASISCKSSQRLLNSNGKTFLNWLLQRPGQSPKRLIYLGTKLDSGVPDRFTGSGSGTDFTLKISRVEAEDLGVYYCWQGTHFPYTFGGGTKLEIKRADAAPTVSIFPPSSEQLTSGGASVVCFLNNFYPKDINVKWKIDGSERQNGVLNSWTDQDSKDSTYSMSSTLTLTKDEYERHNSYTCEATHKTSTSPIVKSFNRNEC >1ruq_H EVQLEESGPELVRPGTSVKISCKASGYTFTNYWLGWVKQRPGHGFEWIGDIYPGGVYTTNNEKFRGKAILTADTSSSTAYMQLSSLTSEDSAVYFCARAGGYYTGGDYWGQGTSVTVSSAKTTPPSVYPLAPGSAAQTNSMVTLGCLVKGYFPEPVTVTWNSGSLSSGVHTFPAVLQSDLYTLSSSVTVPSSTWPSETVTCNVAHPASSTKVDKKIVP >1ruq_L DIVLTQAAFSNPVTLGASASISCRSSKSLLNSNGIIHMYWYLQKPGQSPQLLIYQMSKLASGAPDRFSGSGSGTDFTLRISRVEAEDVGVYYCAQNLELPYTFGGGTKLEIKRADAAPTVSIFPPSSEQLTSGGASVVCFLNNFYPKDINVKWKIDGSERQNGVLNSWTDQDTKDSTYSMSSTLTLTKDEYERHNSYTCEATHKTSTSPIVKSFNRN >1lve_A DIVMTQSPDSLAVSLGERATINCKSSQSVLYSSNSKNYLAWYQQKPGQPPKLLIYWASTRESGVPDRFSGSGSGTDFTLTISSLQAEDVAVYYCQQYYSTPYSFGQGTKLEIKRTVAAPSVF >3pp3_I QVQLVQSGAEVKKPGSSVKVSCKASGYAFSYSWINWVRQAPGQGLEWMGRIFPGDGDTDYNGKFKGRVTITADKSTSTAYMELSSLRSEDTAVYYCARNVFDGYWLVYWGQGTLVTVSSASTKGPSVFPLAPSSKSTSGGTAALGCLVKDYFPEPVTVSWNSGALTSGVHTFPAVLQSSGLYSLSSVVTVPSSSLGTQTYICNVNHKPSNTKVDKKVEPKSCDK >3pp3_H QVQLVQSGAEVKKPGSSVKVSCKASGYAFSYSWINWVRQAPGQGLEWMGRIFPGDGDTDYNGKFKGRVTITADKSTSTAYMELSSLRSEDTAVYYCARNVFDGYWLVYWGQGTLVTVSSASTKGPSVFPLAPSSKSTSGGTAALGCLVKDYFPEPVTVSWNSGALTSGVHTFPAVLQSSGLYSLSSVVTVPSSSLGTQTYICNVNHKPSNTKVDKKVEPKSCDK >1nfd_H EVYLVESGGDLVQPGSSLKVSCAASGFTFSDFWMYWVRQAPGKGLEWVGRIKNIPNNYATEYADSVRGRFTISRDDSRNSIYLQMNRLRVDDTAIYYCTRAGRFDHFDYWGQGTMVTVSSATTTAPSVYPLAPACDSTTSTTDTVTLGCLVKGYFPEPVTVSWNSGALTSGVHTFPSVLHSGLYSLSSSVTVPSSTWPKQPITCNVAHPASSTKVDKKIEPR >1nfd_E YELIQPSSASVTVGETVKITCSGDQLPKNFAYWFQQKSDKNILLLIYMDNKRPSGIPERFSGSTSGTTATLTISGAQPEDEAAYYCLSSYGDNNDLVFGSGTQLTVLRGPKSSPKVTVFPPSPEELRTNKATLVCLVNDFYPGSATVTWKANGATINDGVKTTKPSKQGQNYMTSSYLSLTADQWKSHNRVSCQVTHEGETVEKSLSPAECL >4jqi_H EISEVQLVESGGGLVQPGGSLRLSCAASGFNVYSSSIHWVRQAPGKGLEWVASISSYYGYTYYADSVKGRFTISADTSKNTAYLQMNSLRAEDTAVYYCARSRQFWYSGLDYWGQGTLVTVSSASTKGPSVFPLAPSSKSTSGGTAALGCLVKDYFPEPVTVSWNSGALTSGVHTFPAVLQSSGLYSLSSVVTVPSSSLGTQTYICNVNHKPSNTKVDKKVEPKSCDKTHHHHHHHH >4jqi_L SDIQMTQSPSSLSASVGDRVTITCRASQSVSSAVAWYQQKPGKAPKLLIYSASSLYSGVPSRFSGSRSGTDFTLTISSLQPEDFATYYCQQYKYVPVTFGQGTKVEIKRTVAAPSVFIFPPSDSQLKSGTASVVCLLNNFYPREAKVQWKVDNALQSGNSQESVTEQDSKDSTYSLSSTLTLSKADYEKHKVYACEVTHQGLSSPVTKSFNRGEC >1qkz_H DVKLVESGGGLVKPGRSLKLSCAASGFTFSDYYMFWVRQTPEQRLEWVATISDGGAYTYYPDSVKGRFTISRDNAKNNLYLQMNSLKSEDTGMYYCARDPLEYYGMDYWGQGTSVAVSSAKTTAPSVYPLAPVCGDTTGSSVTLGCLVKGYFPEPVTVTWNSGSLSSGVHTFPAVLQSDLYTLSSSVNVTSSTWPSQSITCNVAHPASSTKVDKKIVPR >1qkz_L NIVMTQTPLSLPVSLGDQASISCRSSQSLVHSNGNTYLHWYLQKPGQSPKLLIYTVSNRFSGVPDRFSGSGSGTDFTLKISRVEAEDLGVYFCSQSTHFPTFGGGTKLEIKRADAAPTVSIFPPSSEQLTSGGASVVCFLNNFYPKDINVKWKIDGKERQNGVLNSWTDQDSKDSTYSMSSTLTLTKDEYERHNSYTCEATHKTSTSPIVKSFNRNE >4lcu_A QVQLQQPGAELVKPGASVKLSCKASGYTFTSDWIHWVKQRPGHGLEWIGEIIPSYGRANYNEKIQKKATLTADKSSSTAFMQLSSLTSEDSAVYYCARERGDGYFAVWGAGTTVTVSSAKTTPPSVYPLAPGSAAQTNSMVTLGCLVKGYFPEPVTVTWNSGSLSSGVHTFPAVLQSDLYTLSSSVTVPSSSWPSETVTCNVAHPASSTKVDKKIVPRD >4lcu_B DILLTQSPAILSVSPGERVSFSCRASQSIGTDIHWYQQRTNGSPRLLIKYASESISGIPSRFSGSGSGTDFTLSINSVESEDIANYYCQQSNRWPFTFGSGTKLEIKRADAAPTVSIFPPSSEQLTSGGASVVCFLNNFYPKDINVKWKIDGSERQNGVLNSWTDQDSKDSTYSMSSTLTLTKDEYERHNSYTCEATHKTSTSPIVKSFNRN >4lci_H QIQLVQSGPELKKPGETVKISCKASGYTFTNYGMTWVKQAPRKGLKWMGWINTYTGRPTYADDFKGRFAFSLETSASTAYLQINNLKHEDTATYFCASLGEDFWGQGTTLTVSSHHHHHH >4lci_L MDIVMTQAAPSVPVTPGESVSISCRSTKSLLHSNGNTYLYWFLQRPGQSPQRLIYYMSNLASGVPDRFSGRGSGTDFTLRISRVEAEDAGVYYCMQSLEYPYTFGGGTKLEIKRLVP >3zl4_H QVQLQESGPGLVKPSETLSLTCAVSGYSISSGYYWGWIRQPPGKGLEWIGSIYHSGSTYYNPSLKSRVTISVDTSKNQFSLKLSSVTAADTAVYYCAGLTQSSHNDANWGQGTLVTVSSASTKGPSVFPLAPSSKSTSGGTAALGCLVKDYFPEPVTVSWNSGALTSGVHTFPAVLQSSGLYSLSSVVTVPSSSLGTQTYICNVNHKPSNTKVDKKVEPKSCLAMDYKDHDGDYKDHDIDYKDDDDKVDHHHHHH >3zl4_L QSVLTQPPSVSAAPGQKVTISCSGSSSNIGNNYVSWYQQLPGTAPKLLIYDNNKRPSGIPDRFSGSKSGTSATLGITGLQTGDEADYYCGTWDSSLNPVFGGGTKLTVLGQPKAAPSVTLFPPSSEELQANKATLVCLISDFYPGAVTVAWKADSSPVKAGVETTTPSKQSNNKYAASSYLSLTPEQWKSHRSYSCQVTHEGSTVEKTVAPTECSGIDAAAAASFLEQKLISEEDLNSAVDHHHHHH >3n9g_H EVQLVQSGAEVRKPGASTKVSCKASGYTFTHYYMHWVRQAPGQGLEWMGIINPSGGSTTYAQKLQGRVTMTRDTSTSTVYMELSSLRSEDTAVYYCARDWGSNYVWGSYPKYWGQGTLVTVSSASTKGPSVFPLAPSSKSTSGGTAALGCLVKDYFPEPVTVSWNSGALTSGVHTFPAVLQSSGLYSLSSVVTVPSSSLGTQTYICNVNHKPSNTKVDKRVEPKSCDKTH >3n9g_L QSVLTQPSSVSGTPGQRVTISCSGSSSNIGSNTVNWYQQLPGTAPKLLIYGNNQRPSGVPDRFSGSKSGTSASLAISGLQSEDEADYYCAAWDDSLNGPVFGGGTKLTVLGAAAGQPKAAPSVTLFPPSSEELQANKATLVCLISDFYPGAVTVAWKADSSPVKAGVETTTPSKQSNNKYAASSYLSLTPEQWKSHRSYSCQVTHEGSTVEKTVAPTECS >1fh5_H SGGGLVKPAGSLKLSCAASGFTFSSYYMYWVRQTPDKRLEWVATISDGGSYTYYPDSVKGRFTISRDNAKNNLYLQMSSLKSEDTAMYYCARDAMDYWGQGTLVTVSAAKTTPPSVYPLAVTLGCLVKGYFPEPVTVTWNSGSLSSGVHTFPAVLQSDLYTLSSSVTVTSSTWPSETVTCNVAHPASSTKVDKKIVPR >1fh5_L DIVLTQSPATLSVTPGESVSLSCRASQSISNNLHWYQQKSHESPRLLIKYASQSISGIPSRFSGSGSGTDFTLSINSVETEDFGMYYCQQSNSWPLTFGAGTKLELKRADAAPTVSIFPPSSEQLTSGGASVVCFLNNFYPKDINVKWKIDGSERQNGVLNSWTDQDSKDSTYSMSSTLTLTKDEYERHNSYTCEATHKTSTSPIVKSFNRNE >2fr4_A ELQMTQSPASLSASVGETVTITCRASENIYSYLAWYQQKQGKSPQLLVYNAKTLAEGVPSRFSGSGSGTQFSLKINSLQPEDFGSYYCQHHYGTPLTFGAGTKLELKRADAAPTVSIFPPSSEQLTSGGASVVCFLNNFYPKDINVKWKIDGSERQNGVLNSWTDQDSKDSTYSMSSTLTLTKDEYERHNSYTCEATHKTSTSPIVKSFNRNEC >2fr4_H QVKLLESGPELVKPGASVKMSCKASGYTFTSYVMHWVKQKPGQGLEWIGYINPYNDGTKYNEKFKGKATLTSDKSSSTAYMELSSLTSEDSAVYYCVRGGYRPYYAMDYWGQGTSVTVSSAKTTPPSVYPLAPGSAAQTNSMVTLGCLVKGYFPEPVTVTWNSGSLSSGVHTFPAVLQSDLYTLSSSVTVPSSTWPSETVTCNVAHPASSTKVDKKIVPRDCTSHHHHHH >1kb9_K DIELTQTPVSLAASLGDRVTISCRASQDINNFLNWYQQKPDGTIKLLIYYTSRLHAGVPSRFSGSGSGTDYSLTISNLEPEDIATYFCQHHIKFPWTFGAGTKLEIK >1kb9_J EVKLQESGAGLVQPSQSLSLTCSVTGYSITSGYYWNWIRLFPGNKLEWVGYISNVGDNNYNPSLKDRLSITRDTSKNQFFLKLNSVTTEDTATYYCARSEYYSVTGYAMDYWGQGTTVTVSSAWRHP >1kb5_H EVQLQQSGPELEKPGASVKISCKASGYSFTGYNMNWVKQSNGKSLEWIGNIDPYYGGISYNQKFKGRATLTVDKSSSTAYMQLKSLTSEDSAVYYCARSRTDLYYFDYWGQGTTLTVSSAKTTAPSVYPLAPVCGDTTGSSVTLGCLVKGYFPEPVTLTWNSGSLSSGVHTFPAVLQSDLYTLSSSVTVTSSTWPSQSITCNVAHPASSTKVDKKIEPR >1kb5_L DIQMTQSPASLSASVGETVTITCRASKNIYSYLAWYQQKQGKSPQLLVYNAKTLGEGVPSRFSGSGSGTQFSLKINSLQPEDFGSYYCQHHYGTPYTFGGGTKLEIKRADAAPTVSIFPPSSEQLTSGGASVVCFLNNFYPKDINVKWKIDGSERQNGVLNSWTDQDSKDSTYSMSSTLTLTKDEYERHNSYTCEATHKTSTSPIVKSFNRNEC >3zlq_C QVQLQESGGGLVQPGGSLRLSCAASGFTFSSAIMTWVRQAPGKGREWVSTIGSDGSITTYADSVKGRFTISRDNARNTLYLQMNSLKPEDTAVYYCTSAGRRGPGTQVTVSSHHHHHHEPEA >3zlq_D QVQLQESGGGLVQPGGSLRLSCAASGFTFSSAIMTWVRQAPGKGREWVSTIGSDGSITTYADSVKGRFTISRDNARNTLYLQMNSLKPEDTAVYYCTSAGRRGPGTQVTVSSHHHHHHEPEA >3s37_H EVQLVQSGGGLVKPGGSLRLSCAASGFTFSSYSMNWVRQAPGKGLEWVSSISSSSSYIYYADSVKGRFTISRDNAKNSLYLQMNSLRAEDTAVYYCARVTDAFDIWGQGTMVTVSSASTKGPSVFPLAPSSKSTSGGTAALGCLVKDYFPEPVTVSWNSGALTSGVHTFPAVLQSSGLYSLSSVVTVPSSSLGTQTYICNVNHKPSNTKVDKRVEPKSCAA >3s37_L DIQMTQSPSSVSASIGDRVTITCRASQGIDNWLGWYQQKPGKAPKLLIYDASNLDTGVPSRFSGSGSGTYFTLTISSLQAEDFAVYFCQQAKAFPPTFGGGTKVDIKRTVAAPSVFIFPPSDEQLKSGTASVVCLLNNFYPREAKVQWKVDNALQSGNSQESVTEQDSKDSTYSLSSTLTLSKADYEKHKVYACEVTHQGLSSPVTKSFNRGEC >3s36_H EVQLVQSGGGLVKPGGSLRLSCAASGFTFSSYSMNWVRQAPGKGLEWVSSISSSSSYIYYADSVKGRFTISRDNAKNSLYLQMNSLRAEDTAVYYCARVTDAFDIWGQGTMVTVSSASTKGPSVFPLAPSSKSTSGGTAALGCLVKDYFPEPVTVSWNSGALTSGVHTFPAVLQSSGLYSLSSVVTVPSSSLGTQTYICNVNHKPSNTKVDKRVEPKSCAA >3s36_L DIQMTQSPSSVSASIGDRVTITCRASQGIDNWLGWYQQKPGKAPKLLIYDASNLDTGVPSRFSGSGSGTYFTLTISSLQAEDFAVYFCQQAKAFPPTFGGGTKVDIKRTVAAPSVFIFPPSDEQLKSGTASVVCLLNNFYPREAKVQWKVDNALQSGNSQESVTEQDSKDSTYSLSSTLTLSKADYEKHKVYACEVTHQGLSSPVTKSFNRGEC >3s35_H KVQLQQSGTELVKPGASVKVSCKASGYIFTEYIIHWVKQRSGQGLEWIGWLYPESNIIKYNEKFKDKATLTADKSSSTVYMELSRLTSEDSAVYFCTRHDGTNFDYWGQGTTLTVSSAKTTPPSVYPLAPGSAAQTNSMVTLGCLVKGYFPEPVTVTWNSGSLSSGVHTFPAVLQSDLYTLSSSVTVPSSTWPSETVTCNVAHPASSTKVDKKIVPR >3s35_L DIVLTQSPASLAVSLGQRATISCRASESVDSYGNSFMHWYQQKPGQPPKLLIYRASNLESGIPARFSGSGSRTDFTLTINPVEADDVATYYCQQSNEDPLTFGAGTKLELKRADAAPTVSIFPPSSEQLTSGGASVVCFLNNFYPKDINVKWKIDGSERQNGVLNSWTDQDSKDSTYSMSSTLTLTKDEYERHNSYTCEATHKTSTSPIVKSFNRNE >3s34_H EVQLVQSGGGLVKPGGSLRLSCAASGFTFSSYSMNWVRQAPGKGLEWVSSISSSSSYIYYADSVKGRFTISRDNAKNSLYLQMNSLRAEDTAVYYCARVTDAFDIWGQGTMVTVSSASTKGPSVFPLAPSSKSTSGGTAALGCLVKDYFPEPVTVSWNSGALTSGVHTFPAVLQSSGLYSLSSVVTVPSSSLGTQTYICNVNHKPSNTKVDKRVEPKSCAA >3s34_L DIQMTQSPSSVSASIGDRVTITCRASQGIDNWLGWYQQKPGKAPKLLIYDASNLDTGVPSRFSGSGSGTYFTLTISSLQAEDFAVYFCQQAKAFPPTFGGGTKVDIKRTVAAPSVFIFPPSDEQLKSGTASVVCLLNNFYPREAKVQWKVDNALQSGNSQESVTEQDSKDSTYSLSSTLTLSKADYEKHKVYACEVTHQGLSSPVTKSFNRGEC >1cr9_H KVKLQQSGAELVRSGASVKLSCTASGFNIKDYYIQWVKQRPEQGLEWIGWIDPENGNSEYAPRFQGKATMTADTLSNTAYLQLSSLTSEDTAVYYCNADLHDYWGQGTTLTVSSAKTTAPSVYPLAPVCGDTTGSSVTLGCLVKGYFPEPVTLTWNSGSLSSGVHTFPAVLQSDLYTLSSSVTVTSSTWPSQSITCNVAHPASSTKVDKKIEPRVTS >1cr9_L DVVMTQTPLSLSVTIGQPASISCKSSQSLLDSDGKTYLIWVFQRPGQSPKRLIFLVSKRDSGVPDRFTGSGSGTDFTLKISRVEAEDVGVYYCWQGTHFPHTVGGGTKLEIARADAAPTVSIFPPSSEQLTSGGASVVCFLNNFYPKDINVKWKIDGSERQNGVLNSWTDQDSKDSTYSMSSTLTLTKDEYERHNSYTCEATHKTSTSPIVKSFNRNEC >4lu5_I EVKLVESGGGLVQPGGSLKLSCATSGFTFSDYYIYWVRQTPEKRLEWVAYISNGGYKTYYPDTVKGRFTISRDNAKNILYLQMSRLKSEDTGIYYCARGMDYWGQGTSVTVSSAKTTAPSVYPLAPVCGDTTGSSVTLGCLVKGYFPEPVTLTWNSGSLSSGVHTFPAVLQSDLYTLSSSVTVTSSTWPSQSITCNVAHPASSTKVDKKIEPR >4lu5_H EVKLVESGGGLVQPGGSLKLSCATSGFTFSDYYIYWVRQTPEKRLEWVAYISNGGYKTYYPDTVKGRFTISRDNAKNILYLQMSRLKSEDTGIYYCARGMDYWGQGTSVTVSSAKTTAPSVYPLAPVCGDTTGSSVTLGCLVKGYFPEPVTLTWNSGSLSSGVHTFPAVLQSDLYTLSSSVTVTSSTWPSQSITCNVAHPASSTKVDKKIEPR >3bkj_H VTLKESGPGLLKPSQTLSLTCSFSGFSIRTSKVGVSWIRQPSGKGLEWLAHIYWDDDKRYNPSLESRLTISKDTSRDMVFMKITSVDTADTATYYCARRGFYGRKYEVNHFDYWGQGTTLTVSSAKTTAPSVYPLAPVCGDTTGSSVTLGCLVKGYFPEPVTLTWNSGSLSSGVHTFPAVLQSDLYTLSSSVTVTSSTWPSESITCNVAHPASSTKVDKKIVPR >3bkj_L DQSPQAVSSGCLLKMKLPVRLLVLMFWIPGSSSDVLMTQTPLSLPVNLGEQASISCRSSQSIVHSNGHTYLEWYLQRPGQSPKLLIYQVSTRFSGVPDRFSGSGSGTDFTLRISRVEAEDLGVYYCFQASLVPLTFGAGTKLELKRADAAPTVSIFPPSSEQLTSGGASVVCFLNNFYPKDINVKWKIDGSERQNGVLNSWTDQDSKDSTYSMSSTLTLTKDEYERHNSYTCEATHKTSTSPIVKSFNRNEC >1jv5_A DIQMTQTTSSLSASLGDRVTISCRASQDINNYLNWYQQKPDGTVKLLIHYTSRLHSGVPSRFSGSGSGTDYSLTISNLEQEDIATYFCQQGNTLPWTFGGGTKLEIK >1jv5_B QVQLQQPGAELVKPGTSVKLSCKASGYNFTSYWINWVKLRPGQGLEWIGDIYPGSGITNYNEKFKSKATLTVDTSSSTAYMQLSSLASEDSALYYCAGQYGNLWFAYWGQGTLVTVS >3bkm_H VTLKESGPGLLKPSQTLSLTCSFSGFSIRTSKVGVSWIRQPSGKGLEWLAHIYWDDDKRYNPSLESRLTISKDTSRDMVFMKITSVDTADTATYYCARRGFYGRKYEVNHFDYWGQGTTLTVSSAKTTAPSVYPLAPVCGDTTGSSVTLGCLVKGYFPEPVTLTWNSGSLSSGVHTFPAVLQSDLYTLSSSVTVTSSTWPSESITCNVAHPASSTKVDKKIVPR >3bkm_L DQSPQAVSSGCLLKMKLPVRLLVLMFWIPGSSSDVLMTQTPLSLPVNLGEQASISCRSSQSIVHSNGHTYLEWYLQRPGQSPKLLIYQVSTRFSGVPDRFSGSGSGTDFTLRISRVEAEDLGVYYCFQASLVPLTFGAGTKLELKRADAAPTVSIFPPSSEQLTSGGASVVCFLNNFYPKDINVKWKIDGSERQNGVLNSWTDQDSKDSTYSMSSTLTLTKDEYERHNSYTCEATHKTSTSPIVKSFNRNEC >3bkc_H EVTLKESGPGLLKPSQTLSLTCSFSGFSIRTSKVGVSWIRQPSGKGLEWLAHIYWDDDKRYNPSLESRLTISKDTSRDMVFMKITSVDTADTATYYCARRGFYGRKYEVNHFDYWGQGTTLTVSSAKTTAPSVYPLAPVCGDTTGSSVTLGCLVKGYFPEPVTLTWNSGSLSSGVHTFPAVLQSDLYTLSSSVTVTSSTWPSESITCNVAHPASSTKVDKKIVPRDCG >3bkc_L DQSPQAVSSGCLLKMKLPVRLLVLMFWIPGSSSDVLMTQTPLSLPVNLGEQASISCRSSQSIVHSNGHTYLEWYLQRPGQSPKLLIYQVSTRFSGVPDRFSGSGSGTDFTLRISRVEAEDLGVYYCFQASLVPLTFGAGTKLELKRADAAPTVSIFPPSSEQLTSGGASVVCFLNNFYPKDINVKWKIDGSERQNGVLNSWTDQDSKDSTYSMSSTLTLTKDEYERHNSYTCEATHKTSTSPIVKSFNRNEC >1bfv_H QVQLQESGGGLVNLGGSMTLSCVASGFTFNTYYMSWVRQTPEKTLELVAAINSDGEPIYYPDTLKGRVTISRDNAKKTLYLQMSSLNFEDTALYYCARLNYAVYGMDYWGQGTTVTVSS >1bfv_L DIELTQSPPSLPVSLGDQVSISCRSSQSLVSNNRRNYLHWYLQKPGQSPKLVIYKVSNRFSGVPDRFSGSGSGTDFTLKISRVAAEDLGLYFCSQSSHVPLTFGSGTKLEIKR >3bky_H QAYLQQSGAELVRPGASVKMSCKASGYTFTSYNMHWVKQTPRQGLEWIGAIYPGNGDTSYNQKFKGKATLTVDKSSSTAYMQLSSLTSEDSAVYFCARVVYYSNSYWYFDVWGTGTTVTVSAASTKGPSVFPLAPSSKSTSGGTAALGCLVKDYFPEPVTVSWNSGALTSGVHTFPAVLQSSGLYSLSSVVTVPSSSLGTQTYICNVNHKPSNTKVDKKVEPKSCD >3bky_L QIVLSQSPAILSASPGEKVTMTCRASSSVSYMHWYQQKPGSSPKPWIYAPSNLASGVPARFSGSGSGTSYSLTISRVEAEDAATYYCQQWSFNPPTFGAGTKLELKRTVAAPSVFIFPPSDEQLKSGTASVVCLLNNFYPREAKVQWKVDNALQSGNSQESVTEQDSKDSTYSLSSTLTLSKADYEKHKVYACEVTHQGLSSPVTKSFNRGEC >1bfo_A DIKMTQSPSFLSASVGDRVTLNCKASQNIDKYLNWYQQKLGESPKLLIYNTNNLQTGIPSRFSGSGSGTDFTLTISSLQPEDVATYFCLQHISRPRTFGTGTKLELKRANAAPTVSIFPPSTEQLATGGASVVCLMNKFYPRDISVKWKIDGTERNGVLNSVTDQDSADSTYSMSSTLSLTKADYQSHNLYTCQVVHKTSSSPVVAKNFNRNEC >1bfo_C DIKMTQSPSFLSASVGDRVTLNCKASQNIDKYLNWYQQKLGESPKLLIYNTNNLQTGIPSRFSGSGSGTDFTLTISSLQPEDVATYFCLQHISRPRTFGTGTKLELKRANAAPTVSIFPPSTEQLATGGASVVCLMNKFYPRDISVKWKIDGTERNGVLNSVTDQDSADSTYSMSSTLSLTKADYQSHNLYTCQVVHKTSSSPVVAKNFNRNEC >4pub_H EVQLLESGGGLVQPGGSLRLSCAASGFTFSHYIMMWVRQAPGKGLEWVSGIYSSGGITVYADSVKGRFTISRDNSKNTLYLQMNSLRAEDTAVYYCAYRRIGVPRRDEFDIWGQGTMVTVSSASTKGPSVFPLAPSSKSTSGGTAALGCLVKDYFPEPVTVSWNSGALTSGVHTFPAVLQSSGLYSLSSVVTVPSSSLGTQTYICNVNHKPSNTKVDKRVEPKSC >4pub_L DIQMTQSPSTLSASVGDRVTITCRASQSISSWLAWYQQKPGKAPKLLIYKASTLESGVPSRFSGSGSGTEFTLTISSLQPDDFATYYCQQYNTYWTFGQGTKVEIKRTVAAPSVFIFPPSDEQLKSGTASVVCLLNNFYPREAKVQWKVDNALQSGNSQESVTEQDSKDSTYSLSSTLTLSKADYEKHKVYACEVTHQGLSSPVTKSFNRGEC >1seq_H EVKLVESGGGLVQPGGSLKLSCAASGFTFSTYTMSWARQTPEKKLEWVAYISKGGGSTYYPDTVKGRFTISRDNAKNTLYLQMSSLKSEDTALYYCARGAMFGNDFKYPMDRWGQGTSVTVSSAATTPPSVYPLAPGSAAQTNSMVTLGCLVKGYFPEPVTVTWNSGSLSSGVHTFPAVLKSDLYTLSSSVTVPSSVWPSETVTCNVAHPASSTTVDKKIVPRDC >1seq_L DIVLTQSPAIMSASLGSSVTLTCSASSSVSYMHWYQQKSGTSPVLLIYTTSNLASGVPSRFSGSGSGTFYSLTISSVEASDAADYYCHQWSSYPWTFGGGTKLEIKRADAAPTVSIFPPSSEQLTSGGASVVCFLNNFYPKSINSKWKIDGSERQNGVLNSWTDQDSKDSTYSMSSTLTLTKNEYERHNSYTCEATHKTSTSPIVKSFNRSEC >3iu4_H EVQLKESGPGLVAPSQSLSITCTVSGFSLSRYSVHWVRQPPGKGLEWLGMIWGGGSTDYNSALKSRLSISKDNSKSQVFLKMNSLQTDDTAMYYCARSGVREGRAQAWFAYWGQGTLVTVSAASTKGPSVFPLAPSSKGSTSGTAALGCLVKDYFPEPVTVSWNSGALTSGVHTFPAVLQSSGLYSLSSVVTVPSSSLGTQTYICNVNHKPSNTKVDKKVEPAQGGRVSAGSQAQRSCLDASRLCSPSPGQQGRPRLPLHPEA >3iu4_L DIVMTQSHKFMSTSVGDRVSITCKASQDVSTAVAWYQQKPGQSPKLLIYSASYRYTGVPDRFTGSGSGTDFTFTISSVQAEDLAVYYCQQHYSTPWTFGGGTKLELKRTVAAPSVFIFPPSDEQLKSGTASVVCLLNNFYPREAKVQWKVDNALQSGNSQESVTEQDSKDSTYSLSSTLTLSKADYEKHKVYACEVTHQGLSSPVTKSFNRGE >3lex_A DVQLQESGPGLVKPSQSLSLTCTVTGYSITSDYAWSWIRQFPGNKLEWMGYINYSGYTSYNPSLKSRISITRDTSENQFFLQLHSVTPEDTATYFCAYGNYLPAYWGQGTLVTVSAAKTTAPSVYPLAPVCGDTTGSSVTLGCLVKGYFPEPVTLTWNSGSLSSGVHTFPAVLQSDLYTLSSSVTVTSSTWPSQSITCNVAHPASSTKVDKKIEPRGPTIK >3lex_H DVQLQESGPGLVKPSQSLSLTCTVTGYSITSDYAWSWIRQFPGNKLEWMGYINYSGYTSYNPSLKSRISITRDTSENQFFLQLHSVTPEDTATYFCAYGNYLPAYWGQGTLVTVSAAKTTAPSVYPLAPVCGDTTGSSVTLGCLVKGYFPEPVTLTWNSGSLSSGVHTFPAVLQSDLYTLSSSVTVTSSTWPSQSITCNVAHPASSTKVDKKIEPRGPTIK >3ley_H DVQLQESGPGLVKPSQSLSLTCTVTGYLITTDYAWNWIRQFPGNKLEWMGYISYSGFTSYNPSLKSQISITRDTSKNQFFLQLNSVTTEDTATYYCAFGNYLPAYWGQGTLVTVSAAKTTAPSVYPLAPVCGDTTGSSVTLGCLVKGYFPEPVTLTWNSGSLSSGVHTFPAVLQSDLYTLSSSVTVTSSTWPSQSITCNVAHPASSTKVDKKIEPRGPTIK >3ley_L DVVMTQTPLSLSVTLGQPASISCKSSQSLLDSDGKTYLNWLLQRPGQSPKRLIYLVSKLASGVPDRFTGSGSGTDFTLKINRVEAEDLGIYYCWQGTHFPWTFGGGTKLEIKRADAAPTVSIFPPSSEQLTSGGASVVCFLNNFYPKDINVKWKIDGSERQNGVLNSWTDQDSKDSTYSMSSTLTLTKDEYERHNSYTCEATHKTSTSPIVKSFNRNEC >3iu3_A QLQQSGTVLARPGASVKMSCKASGYSFTRYWMHWIKQRPGQGLEWIGAIYPGNSDTSYNQKFEGKAKLTAVTSASTAYMELSSLTHEDSAVYYCSRDYGYYFDFWGQGTTLTVSSASTKGPSVFPLAPSSKSTSGGTAALGCLVKDYFPEPVTVSWNSGALTSGVHTFPAVLQSSGLYSLSSVVTVPSSSLGTQTYICNVNHKPSNTKVDKRVEP >3iu3_C QLQQSGTVLARPGASVKMSCKASGYSFTRYWMHWIKQRPGQGLEWIGAIYPGNSDTSYNQKFEGKAKLTAVTSASTAYMELSSLTHEDSAVYYCSRDYGYYFDFWGQGTTLTVSSASTKGPSVFPLAPSSKSTSGGTAALGCLVKDYFPEPVTVSWNSGALTSGVHTFPAVLQSSGLYSLSSVVTVPSSSLGTQTYICNVNHKPSNTKVDKRVEP >1fve_A DIQMTQSPSSLSASVGDRVTITCRASQDVNTAVAWYQQKPGKAPKLLIYSASFLESGVPSRFSGSRSGTDFTLTISSLQPEDFATYYCQQHYTTPPTFGQGTKVEIKRTVAAPSVFIFPPSDEQLKSGTASVVCLLNNFYPREAKVQWKVDNALQSGNSQESVTEQDSKDSTYSLSSTLTLSKADYEKHKVYACEVTHQGLSSPVTKSFNRGEC >1fve_C DIQMTQSPSSLSASVGDRVTITCRASQDVNTAVAWYQQKPGKAPKLLIYSASFLESGVPSRFSGSRSGTDFTLTISSLQPEDFATYYCQQHYTTPPTFGQGTKVEIKRTVAAPSVFIFPPSDEQLKSGTASVVCLLNNFYPREAKVQWKVDNALQSGNSQESVTEQDSKDSTYSLSSTLTLSKADYEKHKVYACEVTHQGLSSPVTKSFNRGEC >1fvd_A DIQMTQSPSSLSASVGDRVTITCRASQDVNTAVAWYQQKPGKAPKLLIYSASFLESGVPSRFSGSRSGTDFTLTISSLQPEDFATYYCQQHYTTPPTFGQGTKVEIKRTVAAPSVFIFPPSDEQLKSGTASVVCLLNNFYPREAKVQWKVDNALQSGNSQESVTEQDSKDSTYSLSSTLTLSKADYEKHKVYACEVTHQGLSSPVTKSFNRGEC >1fvd_C DIQMTQSPSSLSASVGDRVTITCRASQDVNTAVAWYQQKPGKAPKLLIYSASFLESGVPSRFSGSRSGTDFTLTISSLQPEDFATYYCQQHYTTPPTFGQGTKVEIKRTVAAPSVFIFPPSDEQLKSGTASVVCLLNNFYPREAKVQWKVDNALQSGNSQESVTEQDSKDSTYSLSSTLTLSKADYEKHKVYACEVTHQGLSSPVTKSFNRGEC >3lev_H RITLKESGPPLVKPTQTLTLTCSFSGFSLSDFGVGVGWIRQPPGKALEWLAIIYSDDDKRYSPSLNTRLTITKDTSKNQVVLVMTRVSPVDTATYFCAHRRGPTTLFGVPIARGPVNAMDVWGQGITVTISSTSTKGPSVFPLAPSSKSTSGGTAALGCLVKDYFPEPVTVSWNSGALTSGVHTFPAVLQSSGLYSLSSVVTVPSSSLGTQTYICNVNHKPSNTKVDKKVEPKSCDK >3lev_L ALQLTQSPSSLSASVGDRITITCRASQGVTSALAWYRQKPGSPPQLLIYDASSLESGVPSRFSGSGSGTEFTLTISTLRPEDFATYYCQQLHFYPHTFGGGTRVDVRRTVAAPSVFIFPPSDEQLKSGTASVVCLLNNFYPREAKVQWKVDNALQSGNSQESVTEQDSKDSTYSLSSTLTLSKADYEKHKVYACEVTHQGLSSPVTKSFNRGEC >2x7l_A QEQLVESGGRLVTPGTALTLTCKVSGFSLSGFWLNWVRQAPGKGLEWVGAIYRGSGSEWYASWAKGRFTISDTSTTVTLKLTSPTTEDTATYFCAADTTDNGYFTIWGPGTLVTVSSASTKGPSVFPLAPSAKSTSGGTAALGCLVKDYFPEPVTVSWNSGALTSGVHTFPAVLQSSGLYSLSSVVTVPSSSLGTQTYICNVNHKPSNTKVDKKAEPKSCDKTRGHHHHHH >2x7l_C QEQLVESGGRLVTPGTALTLTCKVSGFSLSGFWLNWVRQAPGKGLEWVGAIYRGSGSEWYASWAKGRFTISDTSTTVTLKLTSPTTEDTATYFCAADTTDNGYFTIWGPGTLVTVSSASTKGPSVFPLAPSAKSTSGGTAALGCLVKDYFPEPVTVSWNSGALTSGVHTFPAVLQSSGLYSLSSVVTVPSSSLGTQTYICNVNHKPSNTKVDKKAEPKSCDKTRGHHHHHH >1y18_A ELVVTQESALTTSPGETVTLTCRSSSGAVTTSNYATWVQEKPDHLFTGLIGGTNKRAPGVPARFSGSLIGDRAALTITGAQTEDEAIYFCALWNSNHLVFGGGTKLEIKRTVAAPSVFIFPPSDEQLKSGTASVVCLLNNFYPREAKVQWKVDNALQSGNSQESVTEQDSKDSTYSLSSTLTLSKADYEKHKVYACEVTHQGLSSPVTKSFNRGEC >1y18_C ELVVTQESALTTSPGETVTLTCRSSSGAVTTSNYATWVQEKPDHLFTGLIGGTNKRAPGVPARFSGSLIGDRAALTITGAQTEDEAIYFCALWNSNHLVFGGGTKLEIKRTVAAPSVFIFPPSDEQLKSGTASVVCLLNNFYPREAKVQWKVDNALQSGNSQESVTEQDSKDSTYSLSSTLTLSKADYEKHKVYACEVTHQGLSSPVTKSFNRGEC >3ztn_H QVQLVESGGGVVQPGRSLRLSCAASGFTFSTYAMHWVRQAPGKGLEWVAVISYDANYKYYADSVKGRFTISRDNSKNTLYLQMNSLRAEDTAVYYCAKDSQLRSLLYFEWLSQGYFDYWGQGTLVTVSSASTKGPSVFPLAPSSGGTAALGCLVKDYFPEPVTVSWNSGALTSGVHTFPAVLQSSGLYSLSSVVTVPSSSLGTQTYICNVNHKPSNTKVDKRVEPK >3ztn_L DIVMTQSPDSLAVSLGERATINCKSSQSVTFNYKNYLAWYQQKPGQPPKLLIYWASTRESGVPDRFSGSGSGTDFTLTISSLQAEDVAVYYCQQHYRTPPTFGQGTKVEIKRTVAAPSVFIFPPSDEQLKSGTASVVCLLNNFYPREAKVQWKVDNALQSGNSQESVTEQDSKDSTYSLSSTLTLSKADYEKHKVYACEVTHQGLSSPVTKSFNRGEC >2pr4_H RITLKESGPPLVKPTQTLTLTCSFSGFSLSDFGVGVGWIRQPPGKALEWLAIIYSDDDKRYSPSLNTRLTITKDTSKNQVVLVMTRVSPVDTATYFCAHRRGPTTLFGVPIARGPVNAMDVWGQGITVTISSTSTKGPSVFPLAPSSKSTSGGTAALGCLVKDYFPEPVTVSWNSGALTSGVHTFPAVLQSSGLYSLSSVVTVPSSSLGTQTYTCNVNHKPSNTKVDKRVEPKSC >2pr4_L ALQLTQSPSSLSASVGDRITITCRASQGVTSALAWYRQKPGSPPQLLIYDASSLESGVPSRFSGSGSGTEFTLTISTLRPEDFATYYCQQLHFYPHTFGGGTRVDVRRTVAAPSVFIFPPSDEQLKSGTASVVCLLNNFYPREAKVQWKVDNALQSGNSQESVTEQDSKDSTYSLSSTLTLSKADYEKHKVYECEVTHQGLSSPVTKSFNRGEC >1jvk_A ETALTQPASVSGSPGQSITVSCTGVSSIVGSYNLVSWYQQHPGKAPKLLTYEVNKRPSGVSDRFSGSKSGNSASLTISGLQAEDEADYYCSSYDGSSTSVVFGGGTKLTVLGQPKAAPSVTLFPPSSEELQANKATLVCLISDFYPGAVTVAWKADSSPVKAGVETTKPSKQSNNKYAASSYLSLTPEQWKSHRSYSCQVTHEGSTVEKTVAPTAC >1jvk_B ETALTQPASVSGSPGQSITVSCTGVSSIVGSYNLVSWYQQHPGKAPKLLTYEVNKRPSGVSDRFSGSKSGNSASLTISGLQAEDEADYYCSSYDGSSTSVVFGGGTKLTVLGQPKAAPSVTLFPPSSEELQANKATLVCLISDFYPGAVTVAWKADSSPVKAGVETTKPSKQSNNKYAASSYLSLTPEQWKSHRSYSCQVTHEGSTVEKTVAPTAC >4jg1_H EISEVQLVESGGGLVQPGGSLRLSCVTSGFTFRKFGMSWVRQAPGKGLEWVASISTPRGSTTYYSDSVKGRFTISRDNSKNTLYLQMNSLRAEDTAVYYCTRGYSSTSYAMDYWGQGTLVTVSSASTKGPSVFPLAPSSKSTSGGTAALGCLVKDYFPEPVTVSWNSGALTSGVHTFPAVLQSSGLYSLSSVVTVPSSSLGTQTYICNVNHKPSNTKVDKKVEPKSCSHTATGA >4jg1_L DIVLTQSPATLSLSPGERATLSCMTSTDIDDDMNWYQQKPGQAPRLLISEGNTLRPGVPARFSGSGSGTDFTLTISSLEPEDFAVYYCLQSFNVPLTFGQGTKVEIKRTVAAPSVFIFPPSDSQLKSGTASVVCLLNNFYPREAKVQWKVDNALQSGNSQESVTEQDSKDSTYSLSSTLTLSKADYEKHKVYACEVTHQGLSSPVTKSFNRGEC >4jg0_H EISEVQLVESGGGLVQPGGSLRLSCVTSGFTFRKFGMSWVRQAPGKGLEWVASISTPRGSTTYYSDSVKGRFTISRDNSKNTLYLQMNSLRAEDTAVYYCTRGYSSTSYAMDYWGQGTLVTVSSASTKGPSVFPLAPSSKSTSGGTAALGCLVKDYFPEPVTVSWNSGALTSGVHTFPAVLQSSGLYSLSSVVTVPSSSLGTQTYICNVNHKPSNTKVDKKVEPKSCDKSHTATGA >4jg0_L DIVLTQSPATLSLSPGERATLSCMTSTDIDDDMNWYQQKPGQAPRLLISEGNTLRPGVPARFSGSGSGTDFTLTISSLEPEDFAVYYCLQSFNVPLTFGQGTKVEIKRTVAAPSVFIFPPSDSQLKSGTASVVCLLNNFYPREAKVQWKVDNALQSGNSQESVTEQDSKDSTYSLSSTLTLSKADYEKHKVYACEVTHQGLSSPVTKSFNRGEC >4f2m_A QVQLQQSGPELVKPGASVKISCKASGYAFSSSWMNWVKQRPGQGLEWIGRIYPGDGETNYSEKFKGKATLTADKSSSTAYMHLSSLTSVDSAVYFCARGGYRYDPYYAMDYWGQGTSVTVSSAKTTAPSVYPLAPVCGDTTGSSVTLGCLVKGYFPEPVTLTWNSGSLSSGVHTFPAVLQSDLYTLSSSVTVTSSTWPSQSITCNVAHPASSTKVDKKIEP >4f2m_C QVQLQQSGPELVKPGASVKISCKASGYAFSSSWMNWVKQRPGQGLEWIGRIYPGDGETNYSEKFKGKATLTADKSSSTAYMHLSSLTSVDSAVYFCARGGYRYDPYYAMDYWGQGTSVTVSSAKTTAPSVYPLAPVCGDTTGSSVTLGCLVKGYFPEPVTLTWNSGSLSSGVHTFPAVLQSDLYTLSSSVTVTSSTWPSQSITCNVAHPASSTKVDKKIEP >4h20_H EVQLQQSGPVLVKPGASVKMSCKASGYTFTDYYVNWVKQSRGKSLEWLGLIIPSNGGTTYNQKFRGKATLTVDKSSSTAYMELNSLTSEDSAVYYCARRGLTGALFAYWGQGTLVTVSAAKTTAPSVYPLAPVCGDTTGSSVTLGCLVKGYFPEPVTLTWNSGSLSSGVHTFPALLQSDLYTLSSSVTVTSSTWPSQSITCNVAHPASSTKVDKKIVPRV >4h20_L DIVMTQSHKFMSTSVGDRVSITCKASQDVTSAVAWFQQKPGQSPKLLIYSASYRYTGVPDRFTGSGSGTDFTFTISSVQAEDLAVYYCQQHYGTPLTFGAGTKLELKRADAAPTVSIFPPSSEQLTSGGASVVCFLNNFYPKDINVKWKIDGSERQNGVLNSWTDQDSKDSTYSMSSTLTLTKDEYERHNSYTCEATHKTSTSPIVKSFNRNEC >4m1c_C MKKNIAFLLASMFVFSIATNAYAEISEVQLVESGGGLVQPGGSLRLSCAASGFNVSSYSIHWVRQAPGKGLEWVASISSYYGSTSYADSVKGRFTISADTSKNTAYLQMNSLRAEDTAVYYCARDRVMYYWSFSKYGYPYGMDYWGQGTLVTVSSASTKGPSVFPLAPSSKSTSGGTAALGCLVKDYFPEPVTVSWNSGALTSGVHTFPAVLQSSGLYSLSSVVTVPSSSLGTQTYICNVNHKPSNTKVDKKVEPKSCDKTHT >4m1c_E MKKNIAFLLASMFVFSIATNAYAEISEVQLVESGGGLVQPGGSLRLSCAASGFNVSSYSIHWVRQAPGKGLEWVASISSYYGSTSYADSVKGRFTISADTSKNTAYLQMNSLRAEDTAVYYCARDRVMYYWSFSKYGYPYGMDYWGQGTLVTVSSASTKGPSVFPLAPSSKSTSGGTAALGCLVKDYFPEPVTVSWNSGALTSGVHTFPAVLQSSGLYSLSSVVTVPSSSLGTQTYICNVNHKPSNTKVDKKVEPKSCDKTHT >4m1g_H QVQLKESGPGLVAPSQSLSITCTVSGFSLTDYGVSWIRQPPGKGLEWLGVTWGGGTTYYNSALKSRLSISKDNSKSQVFLKMNSLQTDDTAMYYCAKHKASYNGLDYWGQGTTLTVSSAKTTAPSVYPLAPVCGDTTGSSVTLGCLVKGYFPEPVTLTWNSGSLSSGVHTFPAVLQSDLYTLSSSVTVTSSTWPSQSITCNVAHPASSTKVDKKIEPRGP >4m1g_L ELVLTQSPTTMAASPGEKITITCSASSSISSNYLHWYQQKPGFSPKLLIYRTSNLASGVPARFSGSGSGTSYSLTIGTMEAEDVATYYCQQGSSIPFTFGSGTKLEIKRADAAPTVSIFPPSSEQLTSGGASVVCFLNNFYPKDINVKWKIDGSERQNGVLNSWTDQDSKDSTYSMSSTLTLTKDEYERHNSYTCEATHKTSTSPIVKSFNRNEC >4m1d_I EVQLVESGGGLVKPGGSLRLTCVASGFTFSDVWLNWVRQAPGKGLEWVGRIKSRTDGGTTDYAASVKGRFTISRDDSKNTLYLQMNSLKTEDTAVYSCTTDGFIMIRGVSEDYYYYYMDVWGKGTTVTVSSASTKGPSVFPLAPCSRSTSGGTAALGCLVKDYFPEPVTVSWNSGALTSGVHTFPAVLQSSGLYSLSSVVTVPSSSLGTQTYTCNVNHKPSNTKVDKRVEL >4m1d_H EVQLVESGGGLVKPGGSLRLTCVASGFTFSDVWLNWVRQAPGKGLEWVGRIKSRTDGGTTDYAASVKGRFTISRDDSKNTLYLQMNSLKTEDTAVYSCTTDGFIMIRGVSEDYYYYYMDVWGKGTTVTVSSASTKGPSVFPLAPCSRSTSGGTAALGCLVKDYFPEPVTVSWNSGALTSGVHTFPAVLQSSGLYSLSSVVTVPSSSLGTQTYTCNVNHKPSNTKVDKRVEL >1zv5_A DVQLVESGGGSVQAGESLRLSCAASGVTYKNYCIGWFRQAPGKDREGVVFINSDGGITYYADSVKGRFTISQDNAKNTVYLQMNSLKPEDTASYYCAAGYRNYGQCATRYWGQGTQVTVSSRGRHHHHHH >2vdk_H EVQLQQSGAELVKPGASVKLSCTASGFNIKDTYVHWVKQRPEQGLEWIGRIDPANGYTKYDPKFQGKATITADTSSNTAYLQLSSLTSEDTAVYYCVRPLYDYYAMDYWGQGTSVTVSSAKTTAPSVYPLAPVCGDTTGSSVTLGCLVKGYFPEPVTLTWNSGSLSSGVHTFPAVLQSDLYTLSSSVTVTSSTWPSQSITCNVAHPASSTKVDKKIEPRGP >2vdk_L DILMTQSPSSMSVSLGDTVSITCHASQGISSNIGWLQQKPGKSFMGLIYYGTNLVDGVPSRFSGSGSGADYSLTISSLDSEDFADYYCVQYAQLPYTFGGGTKLEIKRADAAPTVSIFPPSSEQLTSGGASVVCFLNNFYPKDINVKWKIDGSERQNGVLNSWTDQDSKDSTYSMSSTLTLTKDEYERHNSYTCEATHKTSTSPIVKSFNRNEC >2vdl_H EVQLQQSGAELVKPGASVKLSCTASGFNIKDTYVHWVKQRPEQGLEWIGRIDPANGYTKYDPKFQGKATITADTSSNTAYLQLSSLTSEDTAVYYCVRPLYDYYAMDYWGQGTSVTVSSAKTTAPSVYPLAPVCGDTTGSSVTLGCLVKGYFPEPVTLTWNSGSLSSGVHTFPAVLQSDLYTLSSSVTVTSSTWPSQSITCNVAHPASSTKVDKKIEPRGP >2vdl_L DILMTQSPSSMSVSLGDTVSITCHASQGISSNIGWLQQKPGKSFMGLIYYGTNLVDGVPSRFSGSGSGADYSLTISSLDSEDFADYYCVQYAQLPYTFGGGTKLEIKRADAAPTVSIFPPSSEQLTSGGASVVCFLNNFYPKDINVKWKIDGSERQNGVLNSWTDQDSKDSTYSMSSTLTLTKDEYERHNSYTCEATHKTSTSPIVKSFNRNEC >2vdm_H EVQLQQSGAELVKPGASVKLSCTASGFNIKDTYVHWVKQRPEQGLEWIGRIDPANGYTKYDPKFQGKATITADTSSNTAYLQLSSLTSEDTAVYYCVRPLYDYYAMDYWGQGTSVTVSSAKTTAPSVYPLAPVCGDTTGSSVTLGCLVKGYFPEPVTLTWNSGSLSSGVHTFPAVLQSDLYTLSSSVTVTSSTWPSQSITCNVAHPASSTKVDKKIEPRGP >2vdm_L DILMTQSPSSMSVSLGDTVSITCHASQGISSNIGWLQQKPGKSFMGLIYYGTNLVDGVPSRFSGSGSGADYSLTISSLDSEDFADYYCVQYAQLPYTFGGGTKLEIKRADAAPTVSIFPPSSEQLTSGGASVVCFLNNFYPKDINVKWKIDGSERQNGVLNSWTDQDSKDSTYSMSSTLTLTKDEYERHNSYTCEATHKTSTSPIVKSFNRNEC >2vdn_H EVQLQQSGAELVKPGASVKLSCTASGFNIKDTYVHWVKQRPEQGLEWIGRIDPANGYTKYDPKFQGKATITADTSSNTAYLQLSSLTSEDTAVYYCVRPLYDYYAMDYWGQGTSVTVSSAKTTAPSVYPLAPVCGDTTGSSVTLGCLVKGYFPEPVTLTWNSGSLSSGVHTFPAVLQSDLYTLSSSVTVTSSTWPSQSITCNVAHPASSTKVDKKIEPRGP >2vdn_L DILMTQSPSSMSVSLGDTVSITCHASQGISSNIGWLQQKPGKSFMGLIYYGTNLVDGVPSRFSGSGSGADYSLTISSLDSEDFADYYCVQYAQLPYTFGGGTKLEIKRADAAPTVSIFPPSSEQLTSGGASVVCFLNNFYPKDINVKWKIDGSERQNGVLNSWTDQDSKDSTYSMSSTLTLTKDEYERHNSYTCEATHKTSTSPIVKSFNRNEC >2vdo_H EVQLQQSGAELVKPGASVKLSCTASGFNIKDTYVHWVKQRPEQGLEWIGRIDPANGYTKYDPKFQGKATITADTSSNTAYLQLSSLTSEDTAVYYCVRPLYDYYAMDYWGQGTSVTVSSAKTTAPSVYPLAPVCGDTTGSSVTLGCLVKGYFPEPVTLTWNSGSLSSGVHTFPAVLQSDLYTLSSSVTVTSSTWPSQSITCNVAHPASSTKVDKKIEPRGP >2vdo_L DILMTQSPSSMSVSLGDTVSITCHASQGISSNIGWLQQKPGKSFMGLIYYGTNLVDGVPSRFSGSGSGADYSLTISSLDSEDFADYYCVQYAQLPYTFGGGTKLEIKRADAAPTVSIFPPSSEQLTSGGASVVCFLNNFYPKDINVKWKIDGSERQNGVLNSWTDQDSKDSTYSMSSTLTLTKDEYERHNSYTCEATHKTSTSPIVKSFNRNEC >4etq_A QVQLQQSGPELVKPGASVKISCKASGYSFNFYWMHWVKQRPGQGLEWIGMIDPSESESRLNQKFKDKATLTVDRSSSTAHMQLSSPTSEDSAVYYCTRSNYRYDYFDVWGAGTTVTVSSAKTTAPSVYPLAPVCGDTTGSSVTLGCLVKGYFPEPVTLTWNSGSLSSGVHTFPAVLQSDLYTLSSSVTVTSSTWPSQSITCNVAHPASSTKVDKKIEPRGG >4etq_H QVQLQQSGPELVKPGASVKISCKASGYSFNFYWMHWVKQRPGQGLEWIGMIDPSESESRLNQKFKDKATLTVDRSSSTAHMQLSSPTSEDSAVYYCTRSNYRYDYFDVWGAGTTVTVSSAKTTAPSVYPLAPVCGDTTGSSVTLGCLVKGYFPEPVTLTWNSGSLSSGVHTFPAVLQSDLYTLSSSVTVTSSTWPSQSITCNVAHPASSTKVDKKIEPRGG >1dba_H QIQLVQSGPELKKPGETVKISCKASGYAFTNYGVNWVKEAPGKELKWMGWINIYTGEPTYVDDFKGRFAFSLETSASTAYLEINNLKNEDTATYFCTRGDYVNWYFDVWGAGTTVTVSSAKTTPPSVYPLAPGSAAQTNSMVTLGCLVKGYFPEPVTVTWNSGSLSSGVHTFPAVLQSDLYTLSSSVTVPSSPRPSETVTCNVAHPASSTKVDKKIVPR >1dba_L DVVMTQIPLSLPVNLGDQASISCRSSQSLIHSNGNTYLHWYLQKPGQSPKLLMYKVSNRFYGVPDRFSGSGSGTDFTLKISRVEAEDLGIYFCSQSSHVPPTFGGGTKLEIKRADAAPTVSIFPPSSEQLTSGGASVVCFLNNFYPKDINVKWKIDGSERQNGVLNSWTDQDSKDSTYSMSSTLTLTKDEYERHNSYTCEATHKTSTSPIVKSFNR >3okm_A DIVMTQSPSSLAVSAGEKVTMNCKSSQSLLNSRTRKNYLAWYQQKPGQSPKLLIYWASTRESGVPDRFTGSGSGTDFALTISSVQAEDLAVYYCKQSYNLRTFGGGTKLEIKRADAAPTVSIFPPSSEQLTSGGASVVCFLNNFYPKDINVKWKIDGSERANGVLNSWTDQDSKDSTYSMTSTLTLTKDEYERHNSYTCEASHKTSTSPIVKSFNRNEC >3okm_B EVKLVESGGGLVQPGGSLRLACATSGFTFTDYYMSWVRQPPGKALEWLGFIRNKAKGYTTEYSASVKGRFTISRDNSQSSLYLQMNTLRAEDSATYYCARDHDGYYERFAYWGQGTLVTVSAAATTPPSVYPLAPGSAAQTNSMVTLGCLVKGYFPEPVTVTWNSGSLSTGVHTFPAVLSSDLYTLTSSVTVPSKTWPSETVTCNVAHPASSTKVDKKIVPR >1dbb_H QIQLVQSGPELKKPGETVKISCKASGYAFTNYGVNWVKEAPGKELKWMGWINIYTGEPTYVDDFKGRFAFSLETSASTAYLEINNLKNEDTATYFCTRGDYVNWYFDVWGAGTTVTVSSAKTTPPSVYPLAPGSAAQTNSMVTLGCLVKGYFPEPVTVTWNSGSLSSGVHTFPAVLQSDLYTLSSSVTVPSSPRPSETVTCNVAHPASSTKVDKKIVPR >1dbb_L DVVMTQIPLSLPVNLGDQASISCRSSQSLIHSNGNTYLHWYLQKPGQSPKLLMYKVSNRFYGVPDRFSGSGSGTDFTLKISRVEAEDLGIYFCSQSSHVPPTFGGGTKLEIKRADAAPTVSIFPPSSEQLTSGGASVVCFLNNFYPKDINVKWKIDGSERQNGVLNSWTDQDSKDSTYSMSSTLTLTKDEYERHNSYTCEATHKTSTSPIVKSFNR >3ls4_H EVKLVESGGGLVKPGGSLKLSCAASGFTFNNYVMVWLRQTPEKRLEWVASISRGGSTYYPDSVKGRFTISRDNARNILYLQMSSLRSEDTAMYYCVRGTTIVAGDVWGAGTTVTVSSAKTTPPSVYPLAPGSAAQTNSMVTLGCLVKGYFPEPVTVTWNSGSLSSGVHTFPAVLQSDLYTLSSSVTVPSSTWPSETVTCNVAHPASSTKVDKKIVPRDC >3ls4_L DIVLTQSPTTMAASPGEKITITCSASSSISSNYLHWYQQKPGFSPKLLIYRTSNLASGVPARFSGSGSGTSYSLTIGTMEAEDVATYYCQQGSSIPLTFGAGTKLELKRADAAPTVSIFPPSSEQLTSGGASVVCFLNNFYPKDINVKWKIDGSERQNGVLNSWTDQDSKDSTYSMSSTLTLTKDEYERHNSYTCEATHKTSTSPIVKSFNRNEC >3ls5_H EVKLVESGGGLVKPGGSLKLSCAASGFTFNNYVMVWLRQTPEKRLEWVASISRGGSTYYPDSVKGRFTISRDNARNILYLQMSSLRSEDTAMYYCVRGTTIVAGDVWGAGTTVTVSSAKTTPPSVYPLAPGSAAQTNSMVTLGCLVKGYFPEPVTVTWNSGSLSSGVHTFPAVLQSDLYTLSSSVTVPSSTWPSETVTCNVAHPASSTKVDKKIVPRDC >3ls5_L DIVLTQSPTTMAASPGEKITITCSASSSISSNYLHWYQQKPGFSPKLLIYRTSNLASGVPARFSGSGSGTSYSLTIGTMEAEDVATYYCQQGSSIPLTFGAGTKLELKRADAAPTVSIFPPSSEQLTSGGASVVCFLNNFYPKDINVKWKIDGSERQNGVLNSWTDQDSKDSTYSMSSTLTLTKDEYERHNSYTCEATHKTSTSPIVKSFNRNEC >2vdp_H EVQLQQSGAELVKPGASVKLSCTASGFNIKDTYVHWVKQRPEQGLEWIGRIDPANGYTKYDPKFQGKATITADTSSNTAYLQLSSLTSEDTAVYYCVRPLYDYYAMDYWGQGTSVTVSSAKTTAPSVYPLAPVCGDTTGSSVTLGCLVKGYFPEPVTLTWNSGSLSSGVHTFPAVLQSDLYTLSSSVTVTSSTWPSQSITCNVAHPASSTKVDKKIEPRGP >2vdp_L DILMTQSPSSMSVSLGDTVSITCHASQGISSNIGWLQQKPGKSFMGLIYYGTNLVDGVPSRFSGSGSGADYSLTISSLDSEDFADYYCVQYAQLPYTFGGGTKLEIKRADAAPTVSIFPPSSEQLTSGGASVVCFLNNFYPKDINVKWKIDGSERQNGVLNSWTDQDSKDSTYSMSSTLTLTKDEYERHNSYTCEATHKTSTSPIVKSFNRNEC >2vdq_H EVQLQQSGAELVKPGASVKLSCTASGFNIKDTYVHWVKQRPEQGLEWIGRIDPANGYTKYDPKFQGKATITADTSSNTAYLQLSSLTSEDTAVYYCVRPLYDYYAMDYWGQGTSVTVSSAKTTAPSVYPLAPVCGDTTGSSVTLGCLVKGYFPEPVTLTWNSGSLSSGVHTFPAVLQSDLYTLSSSVTVTSSTWPSQSITCNVAHPASSTKVDKKIEPRGP >2vdq_L DILMTQSPSSMSVSLGDTVSITCHASQGISSNIGWLQQKPGKSFMGLIYYGTNLVDGVPSRFSGSGSGADYSLTISSLDSEDFADYYCVQYAQLPYTFGGGTKLEIKRADAAPTVSIFPPSSEQLTSGGASVVCFLNNFYPKDINVKWKIDGSERQNGVLNSWTDQDSKDSTYSMSSTLTLTKDEYERHNSYTCEATHKTSTSPIVKSFNRNEC >1dbk_H QIQLVQSGPELKKPGETVKISCKASGYAFTNYGVNWVKEAPGKELKWMGWINIYTGEPTYVDDFKGRFAFSLETSASTAYLEINNLKNEDTATYFCTRGDYVNWYFDVWGAGTTVTVSSAKTTPPSVYPLAPGSAAQTNSMVTLGCLVKGYFPEPVTVTWNSGSLSSGVHTFPAVLQSDLYTLSSSVTVPSSPRPSETVTCNVAHPASSTKVDKKIVPR >1dbk_L DVVMTQIPLSLPVNLGDQASISCRSSQSLIHSNGNTYLHWYLQKPGQSPKLLMYKVSNRFYGVPDRFSGSGSGTDFTLKISRVEAEDLGIYFCSQSSHVPPTFGGGTKLEIKRADAAPTVSIFPPSSEQLTSGGASVVCFLNNFYPKDINVKWKIDGSERQNGVLNSWTDQDSKDSTYSMSSTLTLTKDEYERHNSYTCEATHKTSTSPIVKSFNR >1dbj_H QIQLVQSGPELKKPGETVKISCKASGYAFTNYGVNWVKEAPGKELKWMGWINIYTGEPTYVDDFKGRFAFSLETSASTAYLEINNLKNEDTATYFCTRGDYVNWYFDVWGAGTTVTVSSAKTTPPSVYPLAPGSAAQTNSMVTLGCLVKGYFPEPVTVTWNSGSLSSGVHTFPAVLQSDLYTLSSSVTVPSSPRPSETVTCNVAHPASSTKVDKKIVPR >1dbj_L DVVMTQIPLSLPVNLGDQASISCRSSQSLIHSNGNTYLHWYLQKPGQSPKLLMYKVSNRFYGVPDRFSGSGSGTDFTLKISRVEAEDLGIYFCSQSSHVPPTFGGGTKLEIKRADAAPTVSIFPPSSEQLTSGGASVVCFLNNFYPKDINVKWKIDGSERQNGVLNSWTDQDSKDSTYSMSSTLTLTKDEYERHNSYTCEATHKTSTSPIVKSFNR >1dbm_H QIQLVQSGPELKKPGETVKISCKASGYAFTNYGVNWVKEAPGKELKWMGWINIYTGEPTYVDDFKGRFAFSLETSASTAYLEINNLKNEDTATYFCTRGDYVNWYFDVWGAGTTVTVSSAKTTPPSVYPLAPGSAAQTNSMVTLGCLVKGYFPEPVTVTWNSGSLSSGVHTFPAVLQSDLYTLSSSVTVPSSPRPSETVTCNVAHPASSTKVDKKIVPR >1dbm_L DVVMTQIPLSLPVNLGDQASISCRSSQSLIHSNGNTYLHWYLQKPGQSPKLLMYKVSNRFYGVPDRFSGSGSGTDFTLKISRVEAEDLGIYFCSQSSHVPPTFGGGTKLEIKRADAAPTVSIFPPSSEQLTSGGASVVCFLNNFYPKDINVKWKIDGSERQNGVLNSWTDQDSKDSTYSMSSTLTLTKDEYERHNSYTCEATHKTSTSPIVKSFNR >1zvo_A QSVLTQPPSASGTPGQRVTISCFGSSSNIGRYYVYWYQQLPGTTPKLLIYKDNQRPSGVPDRFSGSKSGTSASLAISGLRSEDEADYYCAAWDDSLWVFGGGTTLTVLSQPKAAPSVTLFPPSSEELQANKATLVCLISDFYPGAVTVAWKADSSPVKAGVETTTPSKQSNNKYAASSYLSLTPEQWKSHRSYSCQVTHEGSTVEKTVAPTECS >1zvo_C RLQLQESGPGLVKPSETLSLTCIVSGGPIRRTGYYWGWIRQPPGKGLEWIGGVYYTGSIYYNPSLRGRVTISVDTSRNQFSLNLRSMSAADTAMYYCARGNPPPYYDIGTGSDDGIDVWGQGTTVHVSSAPTKAPDVFPIISGCRHPKDNSPVVLACLITGYHPTSVTVTWYMGTQSQPQRTFPEIQRRDSYYMTSSQLSTPLQQWRQGEYKCVVQHTASKSKKEIFRWPESPKAQASSVPTAQPQAEGSLAKATTAPATTRNTGRGGEEKKKEKEKEEQEERETKTPECPSHTQPLGVYLLTPAVQDLWLRDKATFTCFVVGSDLKDAHLTWEVAGKVPTGGVEEGLLERHSNGSQSQHSRLTLPRSLWNAGTSVTCTLNHPSLPPQRLMALREPAAQAPVKLSLNLLASSDPPEAASWLLCEVSGFSPPNILLMWLEDQREVNTSGFAPARPPPQPGSTTFWAWSVLRVPAPPSPQPATYTCVVSHEDSRTLLNASRSLEVSYVTDHGPM >1r3l_A DILLTQSPAILSVSPGERVSFSCRASQSIGTDIHWYQQRTNGSPRLLIKYASESISGIPSRFSGSGSGTDFTLSINSVESEDIANYYCQQSNRWPFTFGSGTKLEIKRADAAPTVSIFPPSSEQLTSGGASVVCFLNNFYPKDINVKWKIDGSERQNGVLNSWTDQDSKDSTYSMSSTLTLTKDEYERHNSYTCEATHKTSTSPIVKSFNRN >1r3l_B QVQLQQPGAELVKPGASVKLSCKASGYTFTSDWIHWVKQRPGHGLEWIGEIIPSYGRANYNEKIQKKATLTADKSSSTAFMQLSSLTSEDSAVYYCARERGDGYFAVWGAGTTVTVSSAKTTPPSVYPLAPGSAAQTNSMVTLGCLVKGYFPEPVTVTWNSGSLSSGVHTFPAVLQSDLYTLSSSVTVPSSSWPSETVTCNVAHPASSTKVDKKIVPRD >1zvy_A DVQLVESGGGSVQAGGSLRLSCAASGSTDSIEYMTWFRQAPGKAREGVAALYTHTGNTYYTDSVKGRFTISQDKAKNMAYLRMDSVKSEDTAIYTCGATRKYVPVRFALDQSSYDYWGQGTQVTVSSRGRHHHHHH >1r3i_H QVQLQQPGAELVKPGASVKLSCKASGYTFTSDWIHWVKQRPGHGLEWIGEIIPSYGRANYNEKIQKKATLTADKSSSTAFMQLSSLTSEDSAVYYCARERGDGYFAVWGAGTTVTVSSAKTTPPSVYPLAPGSAAQTNSMVTLGCLVKGYFPEPVTVTWNSGSLSSGVHTFPAVLQSDLYTLSSSVTVPSSSWPSETVTCNVAHPASSTKVDKKIVPRD >1r3i_L DILLTQSPAILSVSPGERVSFSCRASQSIGTDIHWYQQRTNGSPRLLIKYASESISGIPSRFSGSGSGTDFTLSINSVESEDIANYYCQQSNRWPFTFGSGTKLEIKRADAAPTVSIFPPSSEQLTSGGASVVCFLNNFYPKDINVKWKIDGSERQNGVLNSWTDQDSKDSTYSMSSTLTLTKDEYERHNSYTCEATHKTSTSPIVKSFNRN >1r3j_A DILLTQSPAILSVSPGERVSFSCRASQSIGTDIHWYQQRTNGSPRLLIKYASESISGIPSRFSGSGSGTDFTLSINSVESEDIANYYCQQSNRWPFTFGSGTKLEIKRADAAPTVSIFPPSSEQLTSGGASVVCFLNNFYPKDINVKWKIDGSERQNGVLNSWTDQDSKDSTYSMSSTLTLTKDEYERHNSYTCEATHKTSTSPIVKSFNRN >1r3j_B QVQLQQPGAELVKPGASVKLSCKASGYTFTSDWIHWVKQRPGHGLEWIGEIIPSYGRANYNEKIQKKATLTADKSSSTAFMQLSSLTSEDSAVYYCARERGDGYFAVWGAGTTVTVSSAKTTPPSVYPLAPGSAAQTNSMVTLGCLVKGYFPEPVTVTWNSGSLSSGVHTFPAVLQSDLYTLSSSVTVPSSSWPSETVTCNVAHPASSTKVDKKIVPRD >1r3k_A DILLTQSPAILSVSPGERVSFSCRASQSIGTDIHWYQQRTNGSPRLLIKYASESISGIPSRFSGSGSGTDFTLSINSVESEDIANYYCQQSNRWPFTFGSGTKLEIKRADAAPTVSIFPPSSEQLTSGGASVVCFLNNFYPKDINVKWKIDGSERQNGVLNSWTDQDSKDSTYSMSSTLTLTKDEYERHNSYTCEATHKTSTSPIVKSFNRN >1r3k_B QVQLQQPGAELVKPGASVKLSCKASGYTFTSDWIHWVKQRPGHGLEWIGEIIPSYGRANYNEKIQKKATLTADKSSSTAFMQLSSLTSEDSAVYYCARERGDGYFAVWGAGTTVTVSSAKTTPPSVYPLAPGSAAQTNSMVTLGCLVKGYFPEPVTVTWNSGSLSSGVHTFPAVLQSDLYTLSSSVTVPSSSWPSETVTCNVAHPASSTKVDKKIVPRD >3ogo_H MQVQLVESGGALVQPGGSLRLSCAASGFPVNRYSMRWYRQAPGKEREWVAGMSSAGDRSSYEDSVKGRFTISRDDARNTVYLQMNSLKPEDTAVYYCNVNVGFEYWGQGTQVTVSSKHHHHHH >3ogo_E MQVQLVESGGALVQPGGSLRLSCAASGFPVNRYSMRWYRQAPGKEREWVAGMSSAGDRSSYEDSVKGRFTISRDDARNTVYLQMNSLKPEDTAVYYCNVNVGFEYWGQGTQVTVSSKHHHHHH >3ogc_A QVQLQQPGAELVKPGASVKLSCKASGYTFTSDWIHWVKQRPGHGLEWIGEIIPSYGRANYNEKIQKKATLTADKSSSTAFMQLSSLTSEDSAVYYCARERGDGYFAVWGAGTTVTVSSAKTTPPSVYPLAPGSAAQTNSMVTLGCLVKGYFPEPVTVTWNSGSLSSGVHTFPAVLQSDLYTLSSSVTVPSSSWPSETVTCNVAHPASSTKVDKKIVPRD >3ogc_B DILLTQSPAILSVSPGERVSFSCRASQSIGTDIHWYQQRTNGSPRLLIKYASESISGIPSRFSGSGSGTDFTLSINSVESEDIANYYCQQSNRWPFTFGSGTKLEIKRADAAPTVSIFPPSSEQLTSGGASVVCFLNNFYPKDINVKWKIDGSERQNGVLNSWTDQDSKDSTYSMSSTLTLTKDEYERHNSYTCEATHKTSTSPIVKSFNRN >2zjs_H QVQLQQSGAELMKPGASVKISCKATGYTFSSYWIAWVKQRPGHGLEWIGEILPGSGSTNYNEKFKGKATFTADTSSNTAYMQLSSLTSEDSAVYYCARSPYYYGNWDYWGQGTTLTVSSAKTTPPSVYPLAPGSAAQTNSMVTLGCLVKGYFPEPVTVTWNSGSLSSGVHTFPAVLQSDLYTLSSSVTVPSSTWPSETVTCNVAHPASSTKVDKKIVPRDC >2zjs_L DIQMTQTTSSLSASLGDRVTISCRASQDISNYLNWYQQKPDGTVKLLIYYTSRLHSGVPSRFSGSGSGTDYSLTISNLEQEDIATYFCQQGNTLPWTFGGGTKLEIKRADAAPTVSIFPPSSEQLTSGGASVVCFLNNFYPKDINVKWKIDGSERQNGVLNSWTDQDSKDSTYSMSSTLTLTKDEYERHNSYTCEATHKTSTSPIVKSFNRNEC >4g5z_H QVQLVESGGGVVQPGRSLRLSCAASGFTFSVYGMNWVRQAPAKGLEWVAIIWYDGDNQYYADSVKGRFTISRDNSKNTLYLQMNGLRAEDTAVYYCARDLRTGPFDYWGQGTLVTVSSASTKGPSVFPLAPSSKSTSGGTAALGCLVKDYFPEPVTVSWNSGALTSGVHTFPAVLQSSGLYSLSSVVTVPSSSLGTQTYICNVNHKPSNTKVDKRVAP >4g5z_L EIVLTQSPDFQSVTPKEKVTITCRASQSIGSSLHWYQQKPDQSPKLLIKYASQSFSGVPSRFSGSGSGTDFTLTINSLEAEDAAAYYCHQSSSLPFTFGPGTKVDIKRTVAAPSVFIFPPSDEQLKSGTASVVCLLNNFYPREAKVQWKVDNALQSGNSQESVTEQDSKDSTYSLSSTLTLSKADYEKHKVYACEVTHQGLSSPVTKSFNRG >4j8r_A DIVMTQSHKFMSTSVGDRVSITCKASQVGTALAWYQQKPGQSPKLLIYWASTRHTGVPDRFTGSGSGTDFTLTISNVQSEDLSDYFCQQYSSYPTFGGGTKLEIKRADAAPTVSIFPPSSEQLTSGGASVVCFLNNFYPKDINVKWKIDGSERQNGVLNSETDQDSKDSTYSMSSTLTLTKDEYERHNSYTCEATHKTSTSPIVKSFNRA >4j8r_C DIVMTQSHKFMSTSVGDRVSITCKASQVGTALAWYQQKPGQSPKLLIYWASTRHTGVPDRFTGSGSGTDFTLTISNVQSEDLSDYFCQQYSSYPTFGGGTKLEIKRADAAPTVSIFPPSSEQLTSGGASVVCFLNNFYPKDINVKWKIDGSERQNGVLNSETDQDSKDSTYSMSSTLTLTKDEYERHNSYTCEATHKTSTSPIVKSFNRA >1a2y_A DIVLTQSPASLSASVGETVTITCRASGNIHNYLAWYQQKQGKSPQLLVYYTTTLADGVPSRFSGSGSGTQYSLKINSLQPEDFGSYYCQHFWSTPRTFGGGTKLEIK >1a2y_B QVQLQESGPGLVAPSQSLSITCTVSGFSLTGYGVNWVRQPPGKGLEWLGMIWGDGNTDYNSALKSRLSISKDNSKSQVFLKMNSLHTDDTARYYCARERDYRLDYWGQGTTLTVSS >6fab_H EVQLQQSGVELVRAGSSVKMSCKASGYTFTSNGINWVKQRPGQGLEWIGYNNPGNGYIAYNEKFKGKTTLTVDKSSSTAYMQLRSLTSEDSAVYFCARSEYYGGSYKFDYWGQGTTLTVSSAKTTPPSVYPLAPGSAAQTNSMVTLGCLVKGYFPEPVTVTWNSGSLSSGVHTFPAVLQSDLYTLSSSVTVPSSPRPSETVTCNVAHPASSTKVDKKIVPRD >6fab_L DIQMTQIPSSLSASLGDRVSISCRASQDINNFLNWYQQKPDGTIKLLIYFTSRSQSGVPSRFSGSGSGTDYSLTISNLEQEDIATYFCQQGNALPRTFGGGTKLEIKRADAAPTVSIFPPSSEQLTSGGASVVCFLNNFYPKDINVKWKIDGSERQNGVLNSWTDQDSKDSTYSMSSTLTLTKDEYERHNSYTCEATHKTSTSPIVKSFNRNEC >2r0w_H QVTLKESGPGILKPSQTLSLTCSLSGFSLRTSGMGVGWIRQPSGKGLEWLAHIWWDDDKNYNPSLKSQLTISKDTSRNQVFLKITSVDTADTATYYCVRRAHNVVLGDWFAYWGQGTLVTVSAAKTTAPSVYPLAPVCGDTTGSSVTLGCLVKGYFPEPVTLTWNSGSLSSGVHTFPAVLQSDLYTLSSSVTVTSSTWPSQSITCNVAHPASSTKVDKKIEPR >2r0w_L DVLMTQTPLSLPVSLGDQASISCRSSQSIVHSNGNTYLEWYLQKPGQSPKLLIYKVSNRFSGVPDRFSGSGSGTDFTLKISRVEAEDLGVYYCFQGSHVPLTFGAGTKLEIKRADAAPTVSIFPPSSEQLTSGGASVVCFLNNFYPKDINVKWKIDGSERQNGVLNSWTDQDSKDSTYSMSSTLTLTKDEYERHNSYTCEATHKTSTSPIVKSFNRNEC >3vi4_H QVHLQQSGAELMKPGASVKISCKATGYTFTSYWIEWVKQRPGHGLEWLGEILPGSGYIHYNEKFKGKATFTTDTSSNTAYMQLSSLTSEDSAVYYCSRALALYAMDYWGQGTSVTVSSAKTTPPSVYPLAPGSAAQTNSMVTLGCLVKGYFPEPVTVTWNSGSLSSGVHTFPAVLQSDLYTLSSSVTVPSSTWPSETVTCNVAHPASSTKVDKKIVPR >3vi4_E DIVMTQATPSIPVTPGESVSISCRSNKSLLHSNGNTYLYWFLQRPGQSPRLLIFRMSNLASGVPDRFSGSGSGTAFTLRISRVEAADVGIYFCLQHLEYPFTFGAGTKLELKRADAAPTVSIFPPSSEQLTSGGASVVCFLNNFYPKDINVKWKIDGSERQNGVLNSWTDQDSKDSTYSMSSTLTLTKDEYERHNSYTCEATHKTSTSPIVKSFNRNEC >2r0z_H QVTLKESGPGILKPSQTLSLTCSFSGFSLSTSGMGVGWIRQPSGKGLEWLAHIWWDDDRSYNPSLKSQLTISKDTSRNQVFLRITSVDTADTATYYCVRRAHTTVLGDWFAYWGQGTLVTVSAAKTTAPSVYPLAPVCGDTTGSSVTLGCLVKGYFPEPVTLTWNSGSLSSGVHTFPALLQSDLYTLSSSSTVTSSTWPSQSITCNVAHPASSTKVDKKIEPR >2r0z_L DVLMTQTPLSLPVSLGDQASISCRSSQSIVHSNGNTYLEWYLQKPGQSPKLLIYKVSNRFSGVPDRFSGSGSGTDFTLKISRVEAEDLGVYYCFQGSHVPLTFGAGTKLELKRADAAPTVSIFPPSSEQLTSGGASVVCFLNNFYPKDINVKWKIDGSERQNGVLNSWTDQDSKDSTYSMSSTLTLTKDEYERHNSYTCEATHKTSTSPIVKSFNRNEC >4krm_B QVKLEESGGGSVQTGGSLRLTCAASGRTSRSYGMGWFRQAPGKEREFVSGISWRGDSTGYADSVKGRFTISRDNAKNTVDLQMNSLKPEDTAIYYCAAAAGSAWYGTLYEYDYWGQGTQVTVSSALEHHHHHH >4krm_D QVKLEESGGGSVQTGGSLRLTCAASGRTSRSYGMGWFRQAPGKEREFVSGISWRGDSTGYADSVKGRFTISRDNAKNTVDLQMNSLKPEDTAIYYCAAAAGSAWYGTLYEYDYWGQGTQVTVSSALEHHHHHH >4krl_B QVKLEESGGGSVQTGGSLRLTCAASGRTSRSYGMGWFRQAPGKEREFVSGISWRGDSTGYADSVKGRFTISRDNAKNTVDLQMNSLKPEDTAIYYCAAAAGSAWYGTLYEYDYWGQGTQVTVSSALEHHHHHH >4kro_C DILLTQSPVILSVSPGERVSFSCRASQSIGTNIHWYQQRTNGSPRLLIKYASESISGIPSRFSGSGSGTDFTLSINSVESEDIADYYCQQNNNWPTTFGAGTKLELKRTVAAPSVFIFPPSDEQLKSGTASVVCLLNNFYPREAKVQWKVDNALQSGNSQESVTEQDSKDSTYSLSSTLTLSKADYEKHKVYACEVTHQGLSSPVTKSFNR >4kro_B QVQLQESGGGLVQPGGSLRLSCAASGRTFSSYAMGWFRQAPGKQREFVAAIRWSGGYTYYTDSVKGRFTISRDNAKTTVYLQMNSLKPEDTAVYYCAATYLSSDYSRYALPQRPLDYDYWGQGTQVTVSSLEHHHHHH >4krn_A QVQLQESGGGLVQPGGSLRLSCAASGRTFSSYAMGWFRQAPGKQREFVAAIRWSGGYTYYTDSVKGRFTISRDNAKTTVYLQMNSLKPEDTAVYYCAATYLSSDYSRYALPQRPLDYDYWGQGTQVTVSSLEHHHHHH >4krp_C DILLTQSPVILSVSPGERVSFSCRASQSIGTNIHWYQQRTNGSPRLLIKYASESISGIPSRFSGSGSGTDFTLSINSVESEDIADYYCQQNNNWPTTFGAGTKLELKRTVAAPSVFIFPPSDEQLKSGTASVVCLLNNFYPREAKVQWKVDNALQSGNSQESVTEQDSKDSTYSLSSTLTLSKADYEKHKVYACEVTHQGLSSPVTKSFNR >4krp_B EVQLVESGGGLVQAGGSLRLSCAASGRTFSSYAMGWFRQAPGKEREFVVAINWSSGSTYYADSVKGRFTISRDNAKNTMYLQMNSLKPEDTAVYYCAAGYQINSGNYNFKDYEYDYWGQGTQVTVSSALEHHHHHH >1h3p_H EVQLVESGGGLVKPGGSLKLSCAASGFTFSSYAMSWVRQSPEKRLEWVAEVSSDGSYAYYPDTLTGRFTISRDNAKNTLYLEMTSLRSEDTAMYYCASFNWDVAYWGQGTLVTVSAAKTTPPSVYPLAPGSLAQTNSMVTLGCLVKGYFPEPVTVTWNSGSLSSSGVHTFPAVLQSDLYTLSSSVTVPSSPRPSETVTCNVAHPASSTKVDKKIVPRDC >1h3p_L DIVMTQSPSSLAVSVGEKVTMSCRSSQSLLNTRTRKSYLAWFQQKPGQSPKMLIYWASTRESGVPDRFTGSGSGTDFTLTISSVQAEDLAVYYCKQSYSLYTFGGGTKLEIKRADAAPTVSIFPPSSEQLTSGGASVVCFLNNFYPKDINVKWKIDGSERQNGVLNSWTDQDSKDSTYSMSSTLTLTKDEYERHNSYTCEATHKTSTSPIVKSFNRNECEVQLVESGGGLVKPGGSLKLS >2r0k_H EVQLVESGGGLVQPGGSLRLSCAASGFTITGSAIHWVRQAPGKGLEWVAIINPNGGYTYYADSVKGRFTISADTSKNTAYLQMNSLRAEDTAVYYCARSARFSFDYWGQGTLVTVSSASTKGPSVFPLAPSSKSTSGGTAALGCLVKDYFPEPVTVSWNSGALTSGVHTFPAVLQSSGLYSLSSVVTVPSSSLGTQTYICNVNHKPSNTKVDKKVEPKSCDKTHT >2r0k_L DIQMTQSPSSLSASVGDRVTITCRASQDVSTAVAWYQQKPGKAPKLLIYSASFLYSGVPSRFSGSGSGTDFTLTISSLQPEDFATYYCQQSYTTPPTFGQGTKVEIKRTVAAPSVFIFPPSDEQLKSGTASVVCLLNNFYPREAKVQWKVDNALQSGNSQESVTEQDSKDSTYSLSSTLTLSKADYEKHKVYACEVTHQGLSSPVTKSFNRGEC >2r0l_H EVQLVESGGGLVQPGGSLRLSCAASGFTISNSGIHWVRQAPGKGLEWVGWIYPTGGATDYADSVKGRFTISADTSKNTAYLQMNSLRAEDTAVYYCARFWWRSFDYWGQGTLVTVSSASTKGPSVFPLAPSSKSTSGGTAALGCLVKDYFPEPVTVSWNSGALTSGVHTFPAVLQSSGLYSLSSVVTVPSSSLGTQTYICNVNHKPSNTKVDKKVEPKSC >2r0l_L DIQMTQSPSSLSASVGDRVTITCRASQDVSTAVAWYQQKPGKAPKLLIYSASFLYSGVPSRFSGSGSGTDFTLTISSLQPEDFATYYCQQSYTTPPTFGQGTKVEIKRTVAAPSVFIFPPSDEQLKSGTASVVCLLNNFYPREAKVQWKVDNALQSGNSQESVTEQDSKDSTYSLSSTLTLSKADYEKHKVYACEVTHQGLSSPVTKSFNRGEC >2boc_A QVQLQQPGAELVKPGASVKLSCKASGYTFTSDWIHWVKQRPGHGLEWIGEIIPSYGRANYNEKIQKKATLTADKSSSTAFMQLSSLTSEDSAVYYCARERGDGYFAVWGAGTTVTVSSAKTTPPSVYPLAPGSAAQTNSMVTLGCLVKGYFPEPVTVTWNSGSLSSGVHTFPAVLQSDLYTLSSSVTVPSSSWPSETVTCNVAHPASSTKVDKKIVPRD >2boc_B DILLTQSPAILSVSPGERVSFSCRASQSIGTDIHWYQQRTNGSPRLLIKYASESISGIPSRFSGSGSGTDFTLSINSVESEDIANYYCQQSNRWPFTFGSGTKLEIKRADAAPTVSIFPPSSEQLTSGGASVVCFLNNFYPKDINVKWKIDGSERQNGVLNSWTDQDSKDSTYSMSSTLTLTKDEYERHNSYTCEATHKTSTSPIVKSFNRN >2bob_A QVQLQQPGAELVKPGASVKLSCKASGYTFTSDWIHWVKQRPGHGLEWIGEIIPSYGRANYNEKIQKKATLTADKSSSTAFMQLSSLTSEDSAVYYCARERGDGYFAVWGAGTTVTVSSAKTTPPSVYPLAPGSAAQTNSMVTLGCLVKGYFPEPVTVTWNSGSLSSGVHTFPAVLQSDLYTLSSSVTVPSSSWPSETVTCNVAHPASSTKVDKKIVPRD >2bob_B DILLTQSPAILSVSPGERVSFSCRASQSIGTDIHWYQQRTNGSPRLLIKYASESISGIPSRFSGSGSGTDFTLSINSVESEDIANYYCQQSNRWPFTFGSGTKLEIKRADAAPTVSIFPPSSEQLTSGGASVVCFLNNFYPKDINVKWKIDGSERQNGVLNSWTDQDSKDSTYSMSSTLTLTKDEYERHNSYTCEATHKTSTSPIVKSFNRN >1psk_H EVQLQQSGPELVKPGASVKISCKTSGYTFTKYTMHWVKQSHGKSLEWIGDINPNNGGTNYNQKFKGTATLTVHKSSTTAYMELRSLTSEDSAVYYCTSKSFDYWGQGTTLTVSSAKTTAPSVYPLAPVCGDTTGSAVTLGCLVKGYFPEPVTLTWNSGSLSSGVHTFPAVLQSDLYTLSSSVTVTSSTWPSQSITCNVAHPASSTKVDK >1psk_L QIVLTQSPAIMSASPGEKVTITCSASSSVSNIHWFQQKPGTFPKLWIYSTSTLASGVPGRFSGSGSGTSYSLTISRMGAEDAATYYCQQRSGYPFTFGSGTKLEIKRADAAPTVSIFPPSSEQLTSGGASVVCFLNNFYPKDINVKWKIDGSERQNGVLNSWTDQDSKDSTYSMSSTLTLTKDEYERHNSYTCEATHKTSTSPIVKSFNRNEC >4gw5_A DILLTQSPVILSVSPGERVSFSCRASQSIGTNIHWYQQRTNGSPRLLIKYASESISGIPSRFSGSGSGTDFTLSINSVESEDIADYYCQQNNNWPTTFGAGTKLELKRTVAAPSVFIFPPSDEQLKSGTASVVCLLNNFYPREAKVQWKVDNALQSGNSQESVTEQDSKDSTYSLSSTLTLSKADYEKHKVYACEVTHQGLSSPVTKSFNRGEC >4gw5_C DILLTQSPVILSVSPGERVSFSCRASQSIGTNIHWYQQRTNGSPRLLIKYASESISGIPSRFSGSGSGTDFTLSINSVESEDIADYYCQQNNNWPTTFGAGTKLELKRTVAAPSVFIFPPSDEQLKSGTASVVCLLNNFYPREAKVQWKVDNALQSGNSQESVTEQDSKDSTYSLSSTLTLSKADYEKHKVYACEVTHQGLSSPVTKSFNRGEC >1moe_A DIVLTQSPASLAVSLGQRATMSCRAGESVDIFGVGFLHWYQQKPGQPPKLLIYRASNLESGIPVRFSGTGSRTDFTLIIDPVEADDVATYYCQQTNEDPYTFGGGTKLEIKGGGSGGGGEVQLQQSGAELVEPGASVKLSCTASGFNIKDTYMHWVKQRPEQGLEWIGRIDPANGNSKYVPKFQGKATITADTSSNTAYLQLTSLTSEDTAVYYCAPFGYYVSDYAMAYWGQGTSVTVSS >1moe_A DIVLTQSPASLAVSLGQRATMSCRAGESVDIFGVGFLHWYQQKPGQPPKLLIYRASNLESGIPVRFSGTGSRTDFTLIIDPVEADDVATYYCQQTNEDPYTFGGGTKLEIKGGGSGGGGEVQLQQSGAELVEPGASVKLSCTASGFNIKDTYMHWVKQRPEQGLEWIGRIDPANGNSKYVPKFQGKATITADTSSNTAYLQLTSLTSEDTAVYYCAPFGYYVSDYAMAYWGQGTSVTVSS >1moe_B DIVLTQSPASLAVSLGQRATMSCRAGESVDIFGVGFLHWYQQKPGQPPKLLIYRASNLESGIPVRFSGTGSRTDFTLIIDPVEADDVATYYCQQTNEDPYTFGGGTKLEIKGGGSGGGGEVQLQQSGAELVEPGASVKLSCTASGFNIKDTYMHWVKQRPEQGLEWIGRIDPANGNSKYVPKFQGKATITADTSSNTAYLQLTSLTSEDTAVYYCAPFGYYVSDYAMAYWGQGTSVTVSS >1moe_B DIVLTQSPASLAVSLGQRATMSCRAGESVDIFGVGFLHWYQQKPGQPPKLLIYRASNLESGIPVRFSGTGSRTDFTLIIDPVEADDVATYYCQQTNEDPYTFGGGTKLEIKGGGSGGGGEVQLQQSGAELVEPGASVKLSCTASGFNIKDTYMHWVKQRPEQGLEWIGRIDPANGNSKYVPKFQGKATITADTSSNTAYLQLTSLTSEDTAVYYCAPFGYYVSDYAMAYWGQGTSVTVSS >1tpx_C DVVMSQTPLTLSVTIGQPASISCKSSQSLLDSDGKTYLNWLLQRPGQSPKRLIYLVSRLDSGVPDRFTGSGSGTDFTLKISRVEAEDLGIYFCWQGSHFPQTFGGGTKLEIKRADAAPTVSIFPPSSEQLTSGGASVVCFLNNFYPKDINVKWKIDGSERQNGVLNSWTDQDSKDSTYSMSSTLTLTKDEYERHNSYTCEATHKTSTSPIVKSFNRNEC >1tpx_B QIQLVQSGPELKKPGETVKISCKASGYTFTNYGMNLVKQAPGKGFEWMGWINTFTGEPTYADDFKGRFVFSLDTSASTAYLQINNLKNEDTATYFFTRGTDYWGQGTTLTVSSAKTTAPSVYPLAPVCGDTTGSSVTLGCLVKGYFPEPVTLTWNSGSLSSGVHTFPAVLQSDLYTLSSSVTVTSSTWPSQSITCNVAHPASSTKVDKKIEP >2ok0_H EVQLEESGPELVKPGASVKISCKASGYTFTDYYMNWLRQKPGQGLEWIGWVYPGSIKYNEKFKDKATLTADTSSSIVYMHLSSLTSDDNAVYFCTRWTYGSSFDYWGEGTLLTVSSAKTTPPSVYPLAPGSAAQTNSMVTLGCLVKGYFPEPVTVTWNSGSLSSGVHTFPAVLQSDLYTLSSSVTVPSSTWPSETVTCNVAHPASSTKVDKKIVPR >2ok0_L DILMTQTPLSLPVSLGDQASISCRSSQSIVHSNGNTYLEWYLQKPGQSPTLLIYKVSNRFSGVPDRFSGSGSGTDFTLKISRVEAEDLGVYYCFQGSHIPLTFGAGTKLEVKRSDAAPTVSIFPPSSEQLTSGGASVVCFLNNFYPKDINVKWKIDGSERQNGVLNSWTDQDSKDSTYSMSSTLTLTKDEYERHNSYTCEATHKTSTSPIVKSFNRNEC >1ub5_A EVKLLESGGGLVKPGGSLKLSCTASGITFSRYIMSWVRQIPEKRLEWVASISSGGITYYPDSVAGRFTISRDNVRNILYLQMSSLRSEDTALYYCARGQGRPYWGQGTLVTVSSAKTTPPSVYPAAPGCGDTTGSSVTLGCLVKGYFPEPVTVTWNSGGSSVHTFPALLQSGLYTMSSSVTVPSSTWPSTVTCSVAHPASSTTVDKKLE >1ub5_H EVKLLESGGGLVKPGGSLKLSCTASGITFSRYIMSWVRQIPEKRLEWVASISSGGITYYPDSVAGRFTISRDNVRNILYLQMSSLRSEDTALYYCARGQGRPYWGQGTLVTVSSAKTTPPSVYPAAPGCGDTTGSSVTLGCLVKGYFPEPVTVTWNSGGSSVHTFPALLQSGLYTMSSSVTVPSSTWPSTVTCSVAHPASSTTVDKKLE >1ub6_A AALLESGGGLVKPGGSLKLSCTASGITFSRYIMSWVRQIPEKRLEWVASISSGGITYYPDSVAGRFTISRDNVRNILYLQMSSLRSEDTALYYCARGQGRPYWGQGTLVTVSAAKTTPPSVYPAAPGCGDTTGSSVTLGCLVKGYFPESVTVTWNSGGSSVHTFPALLQSGLYTMSSSVTVPSSTWPSTVTCSVAHPASGTTVDKKLE >1ub6_H AALLESGGGLVKPGGSLKLSCTASGITFSRYIMSWVRQIPEKRLEWVASISSGGITYYPDSVAGRFTISRDNVRNILYLQMSSLRSEDTALYYCARGQGRPYWGQGTLVTVSAAKTTPPSVYPAAPGCGDTTGSSVTLGCLVKGYFPESVTVTWNSGGSSVHTFPALLQSGLYTMSSSVTVPSSTWPSTVTCSVAHPASGTTVDKKLE >3raj_H TLVQLKQSGPSLVQPSQRLSITCTVSGFSLISYGVHWVRQSPGKGLEWLGVIWRGGSTDYNAAFMSRLSITKDNSKSQVFFKMNSLQADDTAIYFCAKTLITTGYAMDYWGQGTSVTVSSAKTTPPSVYPLAPGSAAQTNSMVTLGCLVKGYFPEPVTVTWNSGSLSSGVHTFPAVLQSDLYTLSSSVTVPSSTWPSETVTCNVAHPASSTKVDKKIENR >3raj_L IQMTQSSSSFSVSLGDRVTITCKASEDIYNRLAWYQQKPGNAPRLLISGATSLETGVPSRFSGSGSGKDYTLSITSLQTEDVATYYCQQYWSTPTFGGGTKLEIKRADAAPTVSIFPPSSEQLTSGGASVVCFLNNFYPKDINVKWKIDGSERQNGVLNSWTDQDSKDSTYSMSSTLTLTKDEYERHNSYTCEATHKTSTSPIVKSFNRNE >4hj0_Q SYVLTQPPSASGTPGQRVAISCSGSNSNIGSNTVHWYQQLPGAAPKLLIYSNNQRPSGVPDRFSGSNSGTSASLAISRLQSEDEADYYCAAWDDSLNGVVFGGGTKVTVLQPKAAPSVTLFPPSSEELQANKATLVCLISDFYPGAVTVAWKADSSPVKAGVETTTPSKQSNNKYAASSYLSLTPEQWKSHRSYSCQVTHEGSTVEKTVAPTECS >4hj0_P QVQLQQSGAEVKKPGSSVKVSCKASGGTFSSYAISWVRQAPGQGLEWMGGIIPTFGTANYAQKFQGRVTITADESTSTAYMELSSLRSEDTAVYYCAQGPIVGAPTDYWGKGTLVTVSSASTKGPSVFPLAPSSKSTSGGTAALGCLVKDYFPEPVTVSWNSGALTSGVHTFPAVLQSSGLYSLSSVVTVPSSSLGTQTYICNVNHKPSNTKVDKRVEPKSCDKTHT >3h0t_A NFMLTQPHSVSESPGKTVTISCTRSSGSIASYYVQWYQQRPGSSPTTVIYEDSQRPSGVPDRFSGSIDSSSNSASLTISGLKTEDEADYYCQSYDSSNVVFGGGTKLTVLGQPKAAPSVTLFPPSSEELQANKATLVCLISDFYPGAVTVAWKADSSPVKAGVETTTPSKQSNNKYAASSYLSLTPEQWKSHRSYSCQVTHEGSTVEKTVAPTECS >3h0t_B QVQLQQSGPGLVKPSQTLSLTCAISGDSVSSNSAAWNWIRQSPSRGLEWLGRTYYRSKWFNDYAVSVQSRITINPDTSKNQFSLQLNSVTPEDTAVYYCARGIVFSYAMDVWGQGTTVTVSSASTKGPSVFPLAPSSKSTSGGTAALGCLVKDYFPEPVTVSWNSGALTSGVHTFPAVLQSSGLYSLSSVVTVPSSSLGTQTYICNVNHKPSNTKVDKKVEPKSCAADEVDHHHHHH >3u46_A EVQLVESGGGLIRPGGSLRLSCKGSGFIFENFGFGWVRQGPGKGLEWVSGTNWNGGDSRYGDSVKGRFTISRDNSNNFVYLQMNSLRPEDTAIYYCARGTDYTIDDQGIRYQGSGTFWYFDVWGRGTLVTVSSASTKGPSVFPLAPSSKSTSGGTAALGCLVKDYFPEPVTVSWNSGALTSGVHTFPAVLQSSGLYSLSSVVTVPSSSLGTQTYICNVNHKPSNTKVDKKVEPKSCDK >3u46_H EVQLVESGGGLIRPGGSLRLSCKGSGFIFENFGFGWVRQGPGKGLEWVSGTNWNGGDSRYGDSVKGRFTISRDNSNNFVYLQMNSLRPEDTAIYYCARGTDYTIDDQGIRYQGSGTFWYFDVWGRGTLVTVSSASTKGPSVFPLAPSSKSTSGGTAALGCLVKDYFPEPVTVSWNSGALTSGVHTFPAVLQSSGLYSLSSVVTVPSSSLGTQTYICNVNHKPSNTKVDKKVEPKSCDK >1yee_H EVKLQESGAELVRPGASVKLSCKTSGYIFTSYWIHWVKQRAAAGLEWIARIYPGTGSSYYNVKFKGKATLTADKSSSTAYMQLSSLKSDDSAVYFCVRWGFIPVREDYVLDYWGQGTLVTVSSAKTTAPSVYPLAPVCGDTTGSSVTLGCLVKGYFPEPVTLTWNSGSLSSGVHTFPAVLQSDLYTLSSSVTVTSSTWPSQSITCNVAHPASSTKVDKKIEP >1yee_L DIVMTQSPLTLSVTIGQPASISCKSSQSLLYSNGKTYLSWLLQRPGQSPKRLIYLVSKLDSGVPDRFTGSGSGTDFTLKISRVEAADLGLYYCVQGTHFPYTFGGGTKLEILRADAAPTVSIFPPSSEQLTSGGASVVCFLNNFYPKDINVKWKIDGSERQNGVLNSWTDQDSKDSTYSMSSTLTLTKDEYERHNSYTCEATHKTSTSPIVKSFNRNEC >2fat_H GVKLQQSGPEVVKPGASVKISCKASGYSFTNFYIHWVKQRPGQGLEWIGWIFHGSDNTEYNEKFKDKATLTADTSSSTAYMQLSSLTSEDSAVYFCARWGPHWYFDVWGQGTTVTVSSAKTTPPSVYPLAPGNSMVTLGCLVKGYFPEPVTVTWNSGSLSSGVHTFPAVLQSDLYTLSSSVTVPSSTWPSETVTCNVAHPASSTKVDKKIAAAG >2fat_L DIVLTQSPDITAASLGQKVTITCSASSSVSYMHWYQQKSGTSPKPWIFEISKLASGVPARFSGSGSGTSYSLTISSMEAEDAAIYYCQQWNYPFTFGGGTKLEIKRADAAPTVSIFPPSSEQLTSGGASVVCFLNNFYPKDINVKWKIDGSERQNGVLNSWTDQDSKDSTYSMSSTLTLTKDEYERHNSYTCEATHKTSTSPIVKSFNRNEC >1f4w_H EVQLEESGGGLVTPGGSLRLSCAASGYVFSTYDMSWVRQTPEKRLEWVAFISSGGGRTSYPDTVKGRFTISRDDAKNTLYLQMSSLQSEDTAMYYCTRHFYAVLDYWGRGTTLTVSSAKTTPPSVYPLAPGSAAQTNSMVTLGCLVKGYFPEPVTVTWNSGSLSSGVHTFPAVLQSDLYTLSSSVTVPSSTWPSETVTCNVAHPASSTKVDKKIVP >1f4w_L QAVVTQESALTTSPGETVTLTCRSSTGTVTTSNYANWVQEKPDHLFTGLIGATNNRAAGVPVRFSGSLIGGKAALTITGAQTEDEAIYFCALWYSGHWVFGGGTKLTVLGQPKSSPSVTLFPPSSEELETNKATLVCTITDFYPGVVTVDWKVDGTPVTQGMETTNPSKQSNNKYMASSYLTLTARAWERHSSYSCQVTHEGHTVEKSLS >2jb5_H QVQLVQSGAEVKKPGSSVKVSCKASGGTFSNYAINWVRQAPGQGLEWMGNIEPYFGTANYAQKFQGRVTITADESTSTAYMELSSLRSEDTAVYYCARYFMSYKHLSDYWGQGTLVTVSSASTKGPSVFPLAPSSKSTSGGTAALGCLVKDYFPEPVTVSWNSGALTSGVHTFPAVLQSSGLYSLSSVVTVPSSSLGTQTYICNVNHKPSNTKVDKKVEPKSEFEQKLISEEDLNGAPHHHHHH >2jb5_L DIALTQPASVSGSPGQSITISCTGTSSDVGSNNYVSWYQQHPGKAPKLMIYGGSNRPSGVSNRFSGSKSGNTASLTISGLQAEDEADYYCRSWDSNLSYSVFGGGTKLTVLGQPKAAPSVTLFPPSSEELQANKATLVCLISDFYPGAVTVAWKADSSPVKAGVETTTPSKQSNNKYAASSYLSLTPEQWKSHRSYSCQVTHEGSTVEKTVAPTEA >4dtg_H EVQLVESGGGLVKPGGSLRLSCAASGFTFSNYAMSWVRQTPEKRLEWVATISRSGSYSYFPDSVQGRFTISRDNAKNSLYLQMNSLRAEDTAVYYCARLGGYDEGDAMDSWGQGTTVTVSSASTKGPSVFPLAPCSRSTSESTAALGCLVKDYFPEPVTVSWNSGALTSGVHTFPAVLQSSGLYSLSSVVTVPSSSLGTKTYTCNVDHKPSNTKVDKRVESK >4dtg_L DIVMTQTPLSLSVTPGQPASISCKSSQSLLESDGKTYLNWYLQKPGQSPQLLIYLVSILDSGVPDRFSGSGSGTDFTLKISRVEAEDVGVYYCLQATHFPQTFGGGTKVEIKRTVAAPSVFIFPPSDEQLKSGTASVVCLLNNFYPREAKVQWKVDNALQSGNSQESVTEQDSKDSTYSLSSTLTLSKADYEKHKVYACEVTHQGLSSPVTKSFNRGEC >3w9e_A QVTLKQSGAEVKKPGSSVKVSCTASGGTLRTYGVSWVRQAPGQGLEWLGRTIPLFGKTDYAQKFQGRVTITADKSMDTSFMELTSLTSEDTAVYYCARDLTTLTSYNWWDLWGQGTLVTVSSASTKGPSVFPLAPSSKSTSGGTAALGCLVKDYFPEPVTVSWNSGALTSGVHTFPAVLQSSGLYSLSSVVTVPSSSLGTQTYICNVNHKPSNTKVDKKVEP >3w9e_B EIVLTQSPGTLSLSPGERATLSCRASQSVTSSQLAWYQQKPGQAPRLLISGASNRATGIPDRFSGSGSGTDFTLTISRLEPEDFAVYYCQQYGSSPTFGGGTKVEIKRTVAAPSVFIFPPSDEQLKSGTASVVCLLNNFYPREAKVQWKVDNALQSGNSQESVTEQDSKDSTYSLSSTLTLSKADYEKHKLYACEVTHQGLSSPVTKSFNRGEC >3w9d_A QVTLKQSGAEVKKPGSSVKVSCTASGGTLRTYGVSWVRQAPGQGLEWLGRTIPLFGKTDYAQKFQGRVTITADKSMDTSFMELTSLTSEDTAVYYCARDLTTLTSYNWWDLWGQGTLVTVSSASTKGPSVFPLAPSSKSTSGGTAALGCLVKDYFPEPVTVSWNSGALTSGVHTFPAVLQSSGLYSLSSVVTVPSSSLGTQTYICNVNHKPSNTKVDKKVEP >3w9d_C QVTLKQSGAEVKKPGSSVKVSCTASGGTLRTYGVSWVRQAPGQGLEWLGRTIPLFGKTDYAQKFQGRVTITADKSMDTSFMELTSLTSEDTAVYYCARDLTTLTSYNWWDLWGQGTLVTVSSASTKGPSVFPLAPSSKSTSGGTAALGCLVKDYFPEPVTVSWNSGALTSGVHTFPAVLQSSGLYSLSSVVTVPSSSLGTQTYICNVNHKPSNTKVDKKVEP >3gb7_A QVQLQQPGAELVKPGASVKLSCKASGYTFTSDWIHWVKQRPGHGLEWIGEIIPSYGRANYNEKIQKKATLTADKSSSTAFMQLSSLTSEDSAVYYCARERGDGYFAVWGAGTTVTVSSAKTTPPSVYPLAPGSAAQTNSMVTLGCLVKGYFPEPVTVTWNSGSLSSGVHTFPAVLQSDLYTLSSSVTVPSSSWPSETVTCNVAHPASSTKVDKKIVPRD >3gb7_B DILLTQSPAILSVSPGERVSFSCRASQSIGTDIHWYQQRTNGSPRLLIKYASESISGIPSRFSGSGSGTDFTLSINSVESEDIANYYCQQSNRWPFTFGSGTKLEIKRADAAPTVSIFPPSSEQLTSGGASVVCFLNNFYPKDINVKWKIDGSERQNGVLNSWTDQDSKDSTYSMSSTLTLTKDEYERHNSYTCEATHKTSTSPIVKSFNRN >1lgv_A ETALTQPASVSGSPGQSITVSCTGVSSIVGSYNLVSWYQQHPGKAPKLLTYEVNKRPSGVSDRFSGSKSGNSASLTISGLQAEDEADYYCSSYDGSSTSVVFGGGTKLTVLGQPKAAPSVTLFPPSSEELQANKATLVCLISDFYPGAVTVAWKADSSPVKAGVETTKPSKQSNNKYAASSYLSLTPEQWKSHRSYSCQVTHEGSTVEKTVAPTAC >1lgv_B ETALTQPASVSGSPGQSITVSCTGVSSIVGSYNLVSWYQQHPGKAPKLLTYEVNKRPSGVSDRFSGSKSGNSASLTISGLQAEDEADYYCSSYDGSSTSVVFGGGTKLTVLGQPKAAPSVTLFPPSSEELQANKATLVCLISDFYPGAVTVAWKADSSPVKAGVETTKPSKQSNNKYAASSYLSLTPEQWKSHRSYSCQVTHEGSTVEKTVAPTAC >4hjg_A DIQMTQSPILLSASVGDRVTITCRASQDVNTAVAWYQQRTNGSPRLLIYSASFLYSGVPSRFSGSRSGTDFTLTISSLQPEDIADYYCQQHYTTPPTFGAGTKVEIKRTVAAPSVFIFPPSDEQLKSGTASVVCLLNNFYPREAKVQWKVDNALQSGNSQESVTEQDSKDSTYSLSSTLTLSKADYEKHKVYACEVTHQGLSSPVTKSFNRGEC >4hjg_B EVQLVESGGGLVQPGGSLRLSCAASGFNIKDTYIHWVRQSPGKGLEWVARIYPTNGYTRYADSVKGRFTISADTSKNTAYLQMNSLRAEDTAIYYCSRWGGDGFYAMDYWGQGTLVTVSSASTKGPSVFPLAPSSKSTSGGTAALGCLVKDYFPEPVTVSWNSGALTSGVHTFPAVLQSSGLYSLSSVVTVPSSSLGTQTYICNVNHKPSNTKVDKKVEPKSC >3kj4_H QVQLKESGPGLVAPSQSLSISCSVSGFSLSSYGVHWVRQSPGQGLEWLGVIWSGGNTHYNSALMSRLSISKENSKNQVFLKMNSLQTDDTAIYYCARVGIYYEGAWFAYWGQGTLVTVSAAKTTPPSVYPLAPGSAAQTNSMVTLGCLVKGYFPEPVTVTWNSGSLSSGVHTFPAVLQSDLYTLSSSVTVPSSTWPSETVTCNVAHPASSTKVDKKIVPR >3kj4_C QVQLKESGPGLVAPSQSLSISCSVSGFSLSSYGVHWVRQSPGQGLEWLGVIWSGGNTHYNSALMSRLSISKENSKNQVFLKMNSLQTDDTAIYYCARVGIYYEGAWFAYWGQGTLVTVSAAKTTPPSVYPLAPGSAAQTNSMVTLGCLVKGYFPEPVTVTWNSGSLSSGVHTFPAVLQSDLYTLSSSVTVPSSTWPSETVTCNVAHPASSTKVDKKIVPR >3kj6_H EVQLQQSGAELARPGASVKLSCKASGYIFTDYYINWVRQRTGQGFEWIGEIYPGSGNIDYNERFKDKATLTADKSSSTAYMQLSSLTSEDSAVYFCVRGFGYWGQGTTLTVSSAKTTPPSVYPLAPGSAAQTNSAVTLGCLVKGYFPEPVTVTWNSGSLSSGVHTFPAVLQSDLYTLSSSVTVPSSTWPSETVTCNVAHPASSTKVDKKIVPRDCGC >3kj6_L DIKMTQSPSSMYASLGERVTITCKASQDINSYLSWFQQKPGKSPKTLIYRANRLVDGVPSRFIGTGSGQDYSLTISSLDYADMGIYYCLQYDEFPYTFGGGTKLEIKRADAAPTVSIFPPSSEQLTSGGASVVCFLNNFYPKDINVKWKIDGSERQNGVLNSWTDQDSKDSTYSMSSTLTLTKDEYERHNSYTCEATHKTSTSPIVKSFNRNEC >4hjj_H EVTLRESGPALVKPTQTLTLTCTFSGFSLSKSVMGVSWIRQPPGKALEWLAHIYWDDDKYYNPSLSARLTISKDTSKNQVVLTMTNMDPVDTATYYCARRGIRSAMDYWGQGTTVTVSSASTKGPEVQLVQSGTEVKKPGESLKISCKGSGYTVTSYWIGWVRQMPGKGLEWMGFIYPGDSETRYSPTFQGQVTISADKSFNTAFLQWSSLKASDTAMYYCARVGSGWYPYTFDIWGQGTMVTVSSASTKGPSVFPLAPSSSKSTSGGTAALGCLVKDYFPEPVTVSWNSGALTSGVHTFPAVLQSSGLYSLSSVVTVPSSSLGTQTYICNVNHKPSNTKVDKKVEPK >4hjj_L DIVMTQSPDSLAVSLGERATINCKASQSVSNDVAWYQQKPGQPPKLLIYYASNRYTGVPDRFSGSGSGTDFTLTISSLEAEDVAVYYCQQDYNSPWTFGGGTKVEIKRTVAAPEIVMTQSPATLSVSPGERATLSCRASESISSNLAWYQQKPGQAPRLFIYTASTRATDIPARFSGSGSGTEFTLTISSLQSEDFAVYYCQQYNNWPSITFGQGTRLEIKRTVAAPSVFIFPPSDEQLKSGTASVVCLLNNFYPREAKVQWKVDNALQSGNSQESVTEQDSKDSTYSLSSTLTLSKADYEKHKVYACEVTHQGLSSPVTKSFNRGE >4ht1_H QEQLVESGGGLVQPGGSLTLSCKASGFDFSTYYMSWVRQAPGKGLEWIGTVYVRQGTTYYASWLNGRFTISSDNAQNTVDLKMNSLTAADTATYFCAKGGYNYDDAFVIWGPGTLVTVSFASTKGPSVFPLAPSSKSTSGGTAALGCLVKDYFPEPVTVSWNSGALTSGVHTFPAVLQSSGLYSLSSVVTVPSSSLGTQTYICNVNHKPSNTKVDKKVEPKSCDKTH >4ht1_L AIEMTQTPFSVSAAVGGTVTINCQASQNIYSNLAWYQQKPGQPPKLLMYTASYLASGVPSRFKGSGSRTEYTLTISGVQCADAATYYCQTAYYNSRPDTVAFGGGTEVVVKRTVAAPSVFIFPPSDEQLKSGTASVVCLLNNFYPREAKVQWKVDNALQSGNSQESVTEQDSKDSTYSLSSTLTLSKADYEKHKVYACEVTHQGLSSPVTKSFNRGEC >3ra7_I EVQLVESGGGLVKPGGSLKLSCAVSGFTFSDYAMSWIRQTPENRLEWVASINIGATYAYYPDSVKGRFTISRDNAKNTLFLQMSSLGSEDTAMYYCARPGSPYEYDKAYYSMAYWGPGTSVTVSSAKTTPPSVYPLAPGSAAQTNSMVTLGCLVKGYFPEPVTVTWNSGSLSSGVHTFPAVLQSDLYTLSSSVTVPSSPRPSETVTCNVAHPASSTKVDKKIVPRDCG >3ra7_H EVQLVESGGGLVKPGGSLKLSCAVSGFTFSDYAMSWIRQTPENRLEWVASINIGATYAYYPDSVKGRFTISRDNAKNTLFLQMSSLGSEDTAMYYCARPGSPYEYDKAYYSMAYWGPGTSVTVSSAKTTPPSVYPLAPGSAAQTNSMVTLGCLVKGYFPEPVTVTWNSGSLSSGVHTFPAVLQSDLYTLSSSVTVPSSPRPSETVTCNVAHPASSTKVDKKIVPRDCG >3k1k_C MAQVQLVESGGALVQPGGSLRLSCAASGFPVNRYSMRWYRQAPGKEREWVAGMSSAGDRSSYEDSVKGRFTISRDDARNTVYLQMNSLKPEDTAVYYCNVNVGFEYWGQGTQVTVSSHHHHHH >3k1k_D MAQVQLVESGGALVQPGGSLRLSCAASGFPVNRYSMRWYRQAPGKEREWVAGMSSAGDRSSYEDSVKGRFTISRDDARNTVYLQMNSLKPEDTAVYYCNVNVGFEYWGQGTQVTVSSHHHHHH >3mj8_A SYTLTQPPLVSVALGQKATITCSGDKLSDVYVHWYQQKAGQAPVLVIYEDNRRPSGIPDHFSGSNSGNMATLTISKAQAGDEADYYCQSWDGTNSAWVFGSGTKVTVLGQPNAAPSVTLFPPSSEELKTNQATLVCMINGFYPADVAVTWEADGTPITQGVKTTQPSKSDSKYMATSYLTMTADAWKSRNTFICKVTHGGNTVEKSLSPSACS >3mj8_H QVQLKESGPGLLQPSQTLSLTCTVSGISLSDYGVHWVRQAPGKGLEWMGIIGHAGGTDYNSNLKSRVSISRDTSKSQVFLKLNSLQQEDTAMYFCARHFYTYFDVWGQGIQVTVSSATTTAPSVYPLAPACDSTTSTTNTVTLGCLVKGYFPEPVTVSWNSGALTSGVHTFPSVLHSGLYSLSSSVTVPSSTWPSQTVTCNVAHPASSTKVDKKIVPGDGSGC >3mj9_H QVQLKESGPGLLQPSQTLSLTCTVSGISLSDYGVHWVRQAPGKGLEWMGIIGHAGGTDYNSNLKSRVSISRDTSKSQVFLKLNSLQQEDTAMYFCARHFYTYFDVWGQGIQVTVSSATTTAPSVYPLAPACDSTTSTTNTVTLGCLVKGYFPEPVTVSWNSGALTSGVHTFPSVLHSGLYSLSSSVTVPSSTWPSQTVTCNVAHPASSTKVDKKIVPGDGSGC >3mj9_L SYTLTQPPLVSVALGQKATITCSGDKLSDVYVHWYQQKAGQAPVLVIYEDNRRPSGIPDHFSGSNSGNMATLTISKAQAGDEADYYCQSWDGTNSAWVFGSGTKVTVLGQPNAAPSVTLFPPSSEELKTNQATLVCMINGFYPADVAVTWEADGTPITQGVKTTQPSKSDSKYMATSYLTMTADAWKSRNTFICKVTHGGNTVEKSLSPSACS >3qcu_I EVQLVQSGAEVKKPGESLKISCQAFGYGFINYLIEWIRQMPGQGLEWIGLINPGSDYTNYNENFKGQATLSADKSSSTAYLQWSSLKASDTAMYFCARRFGYYGSGNYFDYWGQGTMVTVSSASTKGPSVFPLAPSSKSTSGGTAALGCLVKDYFPEPVTVSWNSGALTSGVHTFPAVLQSSGLYSLSSVVTVPSSSLGTQTYICNVNHKPSNTKVDKRVEPK >3qcu_H EVQLVQSGAEVKKPGESLKISCQAFGYGFINYLIEWIRQMPGQGLEWIGLINPGSDYTNYNENFKGQATLSADKSSSTAYLQWSSLKASDTAMYFCARRFGYYGSGNYFDYWGQGTMVTVSSASTKGPSVFPLAPSSKSTSGGTAALGCLVKDYFPEPVTVSWNSGALTSGVHTFPAVLQSSGLYSLSSVVTVPSSSLGTQTYICNVNHKPSNTKVDKRVEPK >3gbm_I EVQLVESGAEVKKPGSSVKVSCKASGGPFRSYAISWVRQAPGQGPEWMGGIIPIFGTTKYAPKFQGRVTITADDFAGTVYMELSSLRSEDTAMYYCAKHMGYQVRETMDVWGKGTTVTVSSASTKGPSVFPLAPSSKSTSGGTAALGCLVKDYFPEPVTVSWNSGALTSGVHTFPAVLQSSGLYSLSSVVTVPSSSLGTQTYICNVNHKPSNTKVDKRVEPKSCDK >3gbm_H EVQLVESGAEVKKPGSSVKVSCKASGGPFRSYAISWVRQAPGQGPEWMGGIIPIFGTTKYAPKFQGRVTITADDFAGTVYMELSSLRSEDTAMYYCAKHMGYQVRETMDVWGKGTTVTVSSASTKGPSVFPLAPSSKSTSGGTAALGCLVKDYFPEPVTVSWNSGALTSGVHTFPAVLQSSGLYSLSSVVTVPSSSLGTQTYICNVNHKPSNTKVDKRVEPKSCDK >3gbn_H EVQLVESGAEVKKPGSSVKVSCKASGGPFRSYAISWVRQAPGQGPEWMGGIIPIFGTTKYAPKFQGRVTITADDFAGTVYMELSSLRSEDTAMYYCAKHMGYQVRETMDVWGKGTTVTVSSASTKGPSVFPLAPSSKSTSGGTAALGCLVKDYFPEPVTVSWNSGALTSGVHTFPAVLQSSGLYSLSSVVTVPSSSLGTQTYICNVNHKPSNTKVDKRVEPKSCDK >3gbn_L QSVLTQPPSVSAAPGQKVTISCSGSSSNIGNDYVSWYQQLPGTAPKLLIYDNNKRPSGIPDRFSGSKSGTSATLGITGLQTGDEANYYCATWDRRPTAYVVFGGGTKLTVLGAAAGQPKAAPSVTLFPPSSEELQANKATLVCLISDFYPGAVTVAWKADSSPVKAGVETTTPSKQSNNKYAASSYLSLTPEQWKSHRSYSCQVTHEGSTVEKTVAPTECS >3qcv_I EVQLVQSGAEVKKPGESLKISCQAFGYGFINYLIEWIRQMPGQGLEWIGLINPGSDYTNYNENFKGQATLSADKSSSTAYLQWSSLKASDTAMYFCARRFGYYGSGNYFDYWGQGTMVTVSSASTKGPSVFPLAPSSKSTSGGTAALGCLVKDYFPEPVTVSWNSGALTSGVHTFPAVLQSSGLYSLSSVVTVPSSSLGTQTYICNVNHKPSNTKVDKRVEPK >3qcv_H EVQLVQSGAEVKKPGESLKISCQAFGYGFINYLIEWIRQMPGQGLEWIGLINPGSDYTNYNENFKGQATLSADKSSSTAYLQWSSLKASDTAMYFCARRFGYYGSGNYFDYWGQGTMVTVSSASTKGPSVFPLAPSSKSTSGGTAALGCLVKDYFPEPVTVSWNSGALTSGVHTFPAVLQSSGLYSLSSVVTVPSSSLGTQTYICNVNHKPSNTKVDKRVEPK >3ejz_C VRLLESGGGLVQPGGSLKLSCAASGFDYSRYWMSWVRQAPGKGLKWIGEINPVSSTINYTPSLKDKFIISRDNAKDTLYLQISKVRSEDTALYYCARLYYGYGYWYFDVWGAGTTVTVSSAKTTPPSVYPLAPGSAAAAASMVTLGCLVKGYFPEPVTVTWNSGSLAAGVHTFPAVLQAALYTLSSSVTVPSSSWPSETVTCNVAHPASSTKVDKKIVPRA >3ejz_E VRLLESGGGLVQPGGSLKLSCAASGFDYSRYWMSWVRQAPGKGLKWIGEINPVSSTINYTPSLKDKFIISRDNAKDTLYLQISKVRSEDTALYYCARLYYGYGYWYFDVWGAGTTVTVSSAKTTPPSVYPLAPGSAAAAASMVTLGCLVKGYFPEPVTVTWNSGSLAAGVHTFPAVLQAALYTLSSSVTVPSSSWPSETVTCNVAHPASSTKVDKKIVPRA >3ejy_C VRLLESGGGLVQPGGSLKLSCAASGFDYSRYWMSWVRQAPGKGLKWIGEINPVSSTINYTPSLKDKFIISRDNAKDTLYLQISKVRSEDTALYYCARLYYGYGYWYFDVWGAGTTVTVSSAKTTPPSVYPLAPGSAAAAASMVTLGCLVKGYFPEPVTVTWNSGSLAAGVHTFPAVLQAALYTLSSSVTVPSSSWPSETVTCNVAHPASSTKVDKKIVPRA >3ejy_E VRLLESGGGLVQPGGSLKLSCAASGFDYSRYWMSWVRQAPGKGLKWIGEINPVSSTINYTPSLKDKFIISRDNAKDTLYLQISKVRSEDTALYYCARLYYGYGYWYFDVWGAGTTVTVSSAKTTPPSVYPLAPGSAAAAASMVTLGCLVKGYFPEPVTVTWNSGSLAAGVHTFPAVLQAALYTLSSSVTVPSSSWPSETVTCNVAHPASSTKVDKKIVPRA >1yei_H EMQLQQSGAELLRPGTSVKLSCKTSGYIFTSYWIHWVKQRSGQGLEWIARIYPGTGSTYYNEKFKGKATLTADKSSSTAYMQLSTLKSEDSAVYFCTRWGFIPVREDYVMDYWGQGTLVTVSSAKTTAPSVYPLAPVCGDTTGSSVTLGCLVKGYFPEPVTLTWNSGSLSSGVHTFPAVLQSDLYTLSSSVTVTSSTWPSQSITCNVAHPASSTKVDKKIEP >1yei_L DIVMTQSPLTLSVTIGQPASISCKSSQSLLYSNGKTYLNWLLQRPGQSPKRLIHLVSKLDSGVPDRITGSGSGTDFTLKISRVEAADLGVYYCVQGTHFPYTFGGGTKLEILRADAAPTVSIFPPSSEQLTSGGASVVCFLNNFYPKDINVKWKIDGSERQNGVLNSWTDQDSKDSTYSMSSTLTLTKDEYERHNSYTCEATHKTSTSPIVKSFNRNEC >1f4x_H EVQLEESGGGLVTPGGSLRLSCAASGYVFSTYDMSWVRQTPEKRLEWVAFISSGGGRTSYPDTVKGRFTISRDDAKNTLYLQMSSLQSEDTAMYYCTRHFYAVLDYWGRGTTLTVSSAKTTPPSVYPLAPGSAAQTNSMVTLGCLVKGYFPEPVTVTWNSGSLSSGVHTFPAVLQSDLYTLSSSVTVPSSTWPSETVTCNVAHPASSTKVDKKIVP >1f4x_L QAVVTQESALTTSPGETVTLTCRSSTGTVTTSNYANWVQEKPDHLFTGLIGATNNRAAGVPVRFSGSLIGGKAALTITGAQTEDEAIYFCALWYSGHWVFGGGTKLTVLGQPKSSPSVTLFPPSSEELETNKATLVCTITDFYPGVVTVDWKVDGTPVTQGMETTNPSKQSNNKYMASSYLTLTARAWERHSSYSCQVTHEGHTVEKSLS >1yzz_A DVQLVESGGGSVQAGGSLRLSCAVSGSTYSPCTTGWVRQAPGKGLEWVSSISSPGTIYYQDSVKGRFTISRDNAKNTVYLQMNSLQREDTGMYYCQIQCGVRSIREYWGQGTQVTVSSHHHHHH >1yzz_B DVQLVESGGGSVQAGGSLRLSCAVSGSTYSPCTTGWVRQAPGKGLEWVSSISSPGTIYYQDSVKGRFTISRDNAKNTVYLQMNSLQREDTGMYYCQIQCGVRSIREYWGQGTQVTVSSHHHHHH >1rjl_A DIQMNQSPSSLSASLGDTITITCHASQNINVWLNWFQQKPGSIPKLLIYMASNLHTGVPSRFSGSGSGTGFTLTISSLQPEDIATYYCQQGQSFPLTFGGGTKLEIKRADAAPTVSIFPPSSEQLTSGGASVVCFLNNFYPKDINVKWKIDGSERQNGVLNSWTDQDSKDSTYSMSSTLTLTKDEYERHNSYTCEATHKTSTSPIVKSFNRN >1rjl_B QVQLQQPGSVLVRPGASVKLSCKASGFTFTSSWMHWAKQRPGQGLEWIGEIHPNSGNTHYNEKFKGKATLTVDTSSSTAYVDLSSLTSEDSAVYYCARMRYGDYYAMDNWGQGTSVTVSSAKTTAPPVYPLAPVCGDTTGSSVTLGCLVKGYFPESVTLLWNSGSLSSGVHTFPAVLQSDLYTLSSSVTVTSSTWPSQSITCNVAHPASSTKVDKKIEPRG >1wz1_H EVKLEESGGGLVQPGGSMKLSCATSGFTFSDAWMDWVRQSPEKGLEWVAEIRNKANNHATYYAESVKGRFTISRDDSKRRVYLQMNTLRAEDTGIYYCTGIYYHYPWFAYWGQGTLVTVSAEP >1wz1_L DVVMTQTPLSLPVSLGNQASISCRSSQSLVHSNGNTYLHWYLQKPGQSPKLLIYKVSNRFSGVPDRFSGSGSGTDFTLKISRVEAEDLGVYFCSQSTHVPFTFGSGTKLEIKR >2wzp_E QVQLQESGGGLVQAGGSLRLSCTASRRTGSNWCMGWFRQLAGKEPELVVALNFDYDMTYYADSVKGRFTVSRDSGKNTVYLQMNSLKPEDTAIYYCAARSGGFSSNRELYDGWGQGTQVTVSS >2wzp_D QVQLQESGGGLVQAGGSLRLSCTASRRTGSNWCMGWFRQLAGKEPELVVALNFDYDMTYYADSVKGRFTVSRDSGKNTVYLQMNSLKPEDTAIYYCAARSGGFSSNRELYDGWGQGTQVTVSS >3j2y_A QIVLTQSPAIMSASPGEKVTMTCSASSSVTYMYWYQQKPGSSPRLLIYDTSNLASGVPVRFSGSGSGTSYSLTISRMEAEDAATYYCQQRTNYPLTFGAGTKLELKRADAAPTVSIFPPSSEQLTSGGASVVCFLNNFYPKDINVKWKIDGSERQNGVLNSWTDQDSKDSTYSMSSTLTLTKDEYERHNSYTCEATHKTSTSPIVKSFNRNE >3j2y_C QIVLTQSPAIMSASPGEKVTMTCSASSSVTYMYWYQQKPGSSPRLLIYDTSNLASGVPVRFSGSGSGTSYSLTISRMEAEDAATYYCQQRTNYPLTFGAGTKLELKRADAAPTVSIFPPSSEQLTSGGASVVCFLNNFYPKDINVKWKIDGSERQNGVLNSWTDQDSKDSTYSMSSTLTLTKDEYERHNSYTCEATHKTSTSPIVKSFNRNE >3j2x_A DIVLTQSPASLAVSLGQRATISCRASESVDSYGNSFMNWYQQKPGQPPKLLIYRASNLESGIPARFSGSGSRTDFTLTINPVEADDVATYYCQQSNEDPFTFGSGTKLEIKRADAAPTVSIFPPSSKLGTSGGASVVCFLNNFYPKDINVKWKIDGSERQNGVLNSWTDQDSKDSTYSMSSTLTLTKDEYERHNSYTCEATHKTSTSPIVKSFNRNE >3j2x_C DIVLTQSPASLAVSLGQRATISCRASESVDSYGNSFMNWYQQKPGQPPKLLIYRASNLESGIPARFSGSGSRTDFTLTINPVEADDVATYYCQQSNEDPFTFGSGTKLEIKRADAAPTVSIFPPSSKLGTSGGASVVCFLNNFYPKDINVKWKIDGSERQNGVLNSWTDQDSKDSTYSMSSTLTLTKDEYERHNSYTCEATHKTSTSPIVKSFNRNE >3eyv_A DIQMTQSPSSLSASVGDRVTITCRSSQRIVHSNGNTYLEWYQQTPGKAPKLLIYKVSNRFSGVPSRFSGSGSGTDFTFTISSLQPEDIATYYCFQGSHVPFTFGQGTKLQITRTVAAPSVFIFPPSDEQLKSGTASVVCLLNNFYPREAKVQWKVDNALQSGNSQESVTEQDSKDSTYSLSSTLTLSKADYEKHKVYACEVTHQGLSSPVTKSFNRGEC >3eyv_H EVQLVESGGGVVQPGRSLRLSCSTSGFTFSDYYMYWVRQAPGKGLEWVAYMSNVGAITDYPDTVKGRFTISRDNSKNTLFLQMDSLRPEDTGVYFCARGTRDGSWFAYWGQGTPVTVSSASTKGPSVFPLAPSSKSTSGGTAALGCLVKDYFPQPVTVSWNSGALTSGVHTFPAVLQSSGLYSLSSVVTVPSSSLGTQTYICNVNHKPSNTKVDKKVEPKSC >3sn6_N QVQLQESGGGLVQPGGSLRLSCAASGFTFSNYKMNWVRQAPGKGLEWVSDISQSGASISYTGSVKGRFTISRDNAKNTLYLQMNSLKPEDTAVYYCARCPAPFTRDCFDVTSTTYAYRGQGTQVTVSSHHHHHHEPEA >1kc5_H QVKLQQSGPGLVKPSQSLSLTCTVTGYSITSDYAWNWIRQFPGNKLEWMAYISYSGSTTYNPSLKSRISITRDTSKNQFFLQLNSVTTEDTAIYYCARGGTGFDYWGAGTTLTVSAAATTPPSVYPLAPGSATAAASMVTLGCLVKGYFPEPVTVTWNSGALSSGVHTFPAVLQSDLYTLSSSVTVPSSPWPSETVTCNVAHPASSTKVDKKIVPRD >1kc5_L DIVLTQSPKSMSMSVGEKVTLSCKASENVDTYVSWYQQRPEQPPALLIYGASNRYTGVPDRFTGSGSATDFTLTISSVQAEDLADYHCGQSYSYPLTFGGGTKLELKRADAAPTVSIFPPSSEQLTSGGASVVCFLNNFYPKDINVKWKIDGSERQNGVANSWTAQDSKDSTYSMSSTLTLTKDEYERHNSYTCEATHKTSTSPVVKSFNRNEC >4lve_A DIVMTQSPDSLAVSLGERATINCKSSQSVLYSSNSTNYLAWYQQKPGQPPKLLIYWASTRESGVPDRFSGSGSGTDFTLTISSLQAEDVAVYYCQQYYSTPYSFGQGTKLEIKR >4lve_B DIVMTQSPDSLAVSLGERATINCKSSQSVLYSSNSTNYLAWYQQKPGQPPKLLIYWASTRESGVPDRFSGSGSGTDFTLTISSLQAEDVAVYYCQQYYSTPYSFGQGTKLEIKR >3ldb_C QIQLQESGPGLVTPSQSLTLTCSVTGDSITSYHWSWIRQFPGKKLEWMGYIYNSGGTDYNPSLKSRVSITREISRNQLFLQLNSVTTEDTATYYCARRDYGTYYFDYWGQGTMVTVSSATTTAPSVYPLAPACDSTTSTTNTVTLGCLVKGYFPEPVTVSWNSGALTSGVHTFPSVLHSGLYSLSSSVTVPSSTWPSQTVTCNVAHPASSTKVDKKIVPGD >3ldb_B DIVMTQSPSSLAVSAGEKVTMSCRSSQSLYYSGIKKNLLAWYQLKPGQSPKLLIYYASTLFTGVPDRFTGSGSGTDYTLTITSVQAEDMGQYFCQQGISNPYTFGAGTKLEIKRADAKPTVSIFPPSSEQLGTGSATLVCFVNNFYPKDINVKWKVDGSEKRDGVLQSVTDQDSKDSTYSLSSTLSLTKADYERHNLYTCEVTHKTSTAAIVKTLNRNEC >4lvn_C QVQLQESGPDLVKPSSSLKLTCTTTGYSISSGYSWHWIRQEPGKSLEWMGYIHYSGSTDYNDSLKARITITRDTASNMFFLQLSSVTSDDTAVYYCVIYRYDGQWVFDDWGAGTTVTVSSAKTTPPSVFPLAPGSAAQTNSMVTLGCLVKGYFPEPVTVTWNSGSLSSGVHTFPGVLQSGLYTLSSSVTVPSSPWPSETVTCNVAHPASSTKVDKKIVPR >4lvn_B DIVLTQSPATMSASLGQRVSMSCSASSSVSTSYFHWYQQKPGSSPKLWIYSTSNLASGVPGRFSGSGSGTSYSLSISSMEAEDAATYYCHQFHRSPLTFGAGTKLELKRADAAPTVSIFPPSSEQLTSGGASVVCFLNNFYPKDINVKWKIDGSERQNGVLNSWTDQDSKDSTYSMSSTLTLTKDEYERHNSYTCEATHKTSTSPIVKSFNR >4lvo_C QVQLQESGPDLVKPSSSLKLTCTTTGYSISSGYSWHWIRQEPGKSLEWMGYIHYSGSTDYNDSLKARITITRDTASNMFFLQLSSVTSDDTAVYYCVIYRYDGQWVFDDWGAGTTVTVSSAKTTPPSVFPLAPGSAAQTNSMVTLGCLVKGYFPEPVTVTWNSGSLSSGVHTFPGVLQSGLYTLSSSVTVPSSPWPSETVTCNVAHPASSTKVDKKIVPR >4lvo_B DIVLTQSPATMSASLGQRVSMSCSASSSVSTSYFHWYQQKPGSSPKLWIYSTSNLASGVPGRFSGSGSGTSYSLSISSMEAEDAATYYCHQFHRSPLTFGAGTKLELKRADAAPTVSIFPPSSEQLTSGGASVVCFLNNFYPKDINVKWKIDGSERQNGVLNSWTDQDSKDSTYSMSSTLTLTKDEYERHNSYTCEATHKTSTSPIVKSFNR >4lvh_C DIQMTQSPASLAVSPGQRATITCRASESVSNYGINFINWFQQKPGQPPKLLIYTASNKGTGVPARFSGSGSGTDFTLTINPVEAEDTANYFCQQTKEVPYTFGGGTKLEIKRADAAPTVSIFPPSSEQLTSGGASVVCFLNNFYPKINVKWKIDGSERQNGVLNSWTDQDSKDSTYSMSSTLTLDEYERHNSYTCEATHKTSTSPIVKSFN >4lvh_B VKLQQSGGGVVQPGGSLRLSCAASGFTFSDYDMSWIRQAPGKGLEWVSGILGGSERSYYRDSVKGRFTISRDNSRKTLYLQMNSLRAEDTAVYYCARHGSPGYTLYAWDYWGQGTMVTVSSASTKGPSVFPLAPSKSSTSGATAALGCLVKDYFPEPVTVSWNSGALTSSVHTFPAVLQSSGLYSLSSVVTVPSSSLGTQTYICNVNHKPSNTKVDKKSCAA >1hil_A DIVMTQSPSSLTVTAGEKVTMSCTSSQSLFNSGKQKNYLTWYQQKPGQPPKVLIYWASTRESGVPDRFTGSGSGTDFTLTISSVQAEDLAVYYCQNDYSNPLTFGGGTKLELKRADAAPTVSIFPPSSEQLTSGGASVVCFLNNFYPKDINVKWKIDGSERQNGVLNSWTDQDSKDSTYSMSSTLTLTKDEYERHNSYTCEATHKTSTSPIVKSFNR >1hil_C DIVMTQSPSSLTVTAGEKVTMSCTSSQSLFNSGKQKNYLTWYQQKPGQPPKVLIYWASTRESGVPDRFTGSGSGTDFTLTISSVQAEDLAVYYCQNDYSNPLTFGGGTKLELKRADAAPTVSIFPPSSEQLTSGGASVVCFLNNFYPKDINVKWKIDGSERQNGVLNSWTDQDSKDSTYSMSSTLTLTKDEYERHNSYTCEATHKTSTSPIVKSFNR >1him_H DIVMTQSPSSLTVTAGEKVTMSCTSSQSLFNSGKQKNYLTWYQQKPGQPPKVLIYWASTRESGVPDRFTGSGSGTDFTLTISSVQAEDLAVYYCQNDYSNPLTFGGGTKLELKRADAAPTVSIFPPSSEQLTSGGASVVCFLNNFYPKDINVKWKIDGSERQNGVLNSWTDQDSKDSTYSMSSTLTLTKDEYERHNSYTCEATHKTSTSPIVKSFNR >1him_J DIVMTQSPSSLTVTAGEKVTMSCTSSQSLFNSGKQKNYLTWYQQKPGQPPKVLIYWASTRESGVPDRFTGSGSGTDFTLTISSVQAEDLAVYYCQNDYSNPLTFGGGTKLELKRADAAPTVSIFPPSSEQLTSGGASVVCFLNNFYPKDINVKWKIDGSERQNGVLNSWTDQDSKDSTYSMSSTLTLTKDEYERHNSYTCEATHKTSTSPIVKSFNR >1hin_H EVQLVESGGDLVKPGGSLKLSCAASGFSFSSYGMSWVRQTPDKRLEWVATISNGGGYTYYPDSVKGRFTISRDNAKNTLYLQMSSLKSEDSAMYYCARRERYDENGFAYWGQGTLVTVSAAKTTAPSVYPLAPVCGDTTGSSVTLGCLVKGYFPEPVTLTWNSGSLSSGVHTFPAVLQSDLYTLSSSVTVTSSTWPSQSITCNVAHPASSTKVDKKIEPR >1hin_L DIVMTQSPSSLTVTAGEKVTMSCTSSQSLFNSGKQKNYLTWYQQKPGQPPKVLIYWASTRESGVPDRFTGSGSGTDFTLTISSVQAEDLAVYYCQNDYSNPLTFGGGTKLELKRADAAPTVSIFPPSSEQLTSGGASVVCFLNNFYPKDINVKWKIDGSERQNGVLNSWTDQDSKDSTYSMSSTLTLTKDEYERHNSYTCEATHKTSTSPIVKSFNR >3idi_A ALQLTQSPSSLSASVGDRITITCRASQGVTSALAWYRQKPGSPPQLLIYDASSLESGVPSRFSGSGSGTEFTLTISTLRPEDFATYYCQQLHFYPHTFGGGTRVDVRRTVAAPSVFIFPPSDEQLKSGTASVVCLLNNFYPREAKVQWKVDNALQSGNSQESVTEQDSKDSTYSLSSTLTLSKADYEKHKVYECEVTHQGLSSPVTKSFNRGEC >3idi_B RITLKESGPPLVKPTQTLTLTCSFSGFSLSDFGVGVGWIRQPPGKALEWLAIIYSDDDKRYSPSLNTRLTITKDTSKNQVVLVMTRVSPVDTATYFCAHRRGPTTLFGVPIARGPVNAMDVWGQGITVTISSTSTKGPSVFPLAPSSKSTSGGTAALGCLVKDYFPEPVTVSWNSGALTSGVHTFPAVLQSSGLYSLSSVVTVPSSSLGTQTYTCNVNHKPSNTKVDKRVEPKSCDK >3idj_A ALQLTQSPSSLSASVGDRITITCRASQGVTSALAWYRQKPGSPPQLLIYDASSLESGVPSRFSGSGSGTEFTLTISTLRPEDFATYYCQQLHFYPHTFGGGTRVDVRRTVAAPSVFIFPPSDEQLKSGTASVVCLLNNFYPREAKVQWKVDNALQSGNSQESVTEQDSKDSTYSLSSTLTLSKADYEKHKVYECEVTHQGLSSPVTKSFNRGEC >3idj_B RITLKESGPPLVKPTQTLTLTCSFSGFSLSDFGVGVGWIRQPPGKALEWLAIIYSDDDKRYSPSLNTRLTITKDTSKNQVVLVMTRVSPVDTATYFCAHRRGPTTLFGVPIARGPVNAMDVWGQGITVTISSTSTKGPSVFPLAPSSKSTSGGTAALGCLVKDYFPEPVTVSWNSGALTSGVHTFPAVLQSSGLYSLSSVVTVPSSSLGTQTYTCNVNHKPSNTKVDKRVEPKSCDK >3cx5_K DIELTQTPVSLAASLGDRVTISCRASQDINNFLNWYQQKPDGTIKLLIYYTSRLHAGVPSRFSGSGSGTDYSLTISNLEPEDIATYFCQHHIKFPWTFGAGTKLEIK >3cx5_J EVKLQESGAGLVQPSQSLSLTCSVTGYSITSGYYWNWIRLFPGNKLEWVGYISNVGDNNYNPSLKDRLSITRDTSKNQFFLKLNSVTTEDTATYYCARSEYYSVTGYAMDYWGQGTTVTVSSAWRHP >3cfi_I QVQLQESGGGLVQPGGSLRLSCAASGFAFSGYAMSWVRQAPGKGLEWVSGINRDGSTSYTAPVKGRFTISRDNAKNILYLQMNSLRPEDTAVYYCAKWLGGRDWYDRGQGTQVTVS >3cfi_C QVQLQESGGGLVQPGGSLRLSCAASGFAFSGYAMSWVRQAPGKGLEWVSGINRDGSTSYTAPVKGRFTISRDNAKNILYLQMNSLRPEDTAVYYCAKWLGGRDWYDRGQGTQVTVS >3idn_A ALQLTQSPSSLSASVGDRITITCRASQGVTSALAWYRQKPGSPPQLLIYDASSLESGVPSRFSGSGSGTEFTLTISTLRPEDFATYYCQQLHFYPHTFGGGTRVDVRRTVAAPSVFIFPPSDEQLKSGTASVVCLLNNFYPREAKVQWKVDNALQSGNSQESVTEQDSKDSTYSLSSTLTLSKADYEKHKVYECEVTHQGLSSPVTKSFNRGEC >3idn_B RITLKESGPPLVKPTQTLTLTCSFSGFSLSDFGVGVGWIRQPPGKALEWLAIIYSDDDKRYSPSLNTRLTITKDTSKNQVVLVMTRVSPVDTATYFCAHRRGPTTLFGVPIARGPVNAMDVWGQGITVTISSTSTKGPSVFPLAPSSKSTSGGTAALGCLVKDYFPEPVTVSWNSGALTSGVHTFPAVLQSSGLYSLSSVVTVPSSSLGTQTYTCNVNHKPSNTKVDKRVEPKSCDK >3cfk_A ELVVTQESALTTSPGETVTLTCRSSSGAVTTSNYATWVQEKPDHLFTGLIGGTNKRAPGVPARFSGSLIGDRAALTITGAQTEDEAIYFCALWNSNHLVFGGGTKLEIKRTVAAPSVFIFPPSDEQLKSGTASVVCLLNNFYPREAKVQWKVDNALQSGNSQESVTEQDSKDSTYSLSSTLTLSKADYEKHKVYACEVTHQGLSSPVTKSFNRGEC >3cfk_C ELVVTQESALTTSPGETVTLTCRSSSGAVTTSNYATWVQEKPDHLFTGLIGGTNKRAPGVPARFSGSLIGDRAALTITGAQTEDEAIYFCALWNSNHLVFGGGTKLEIKRTVAAPSVFIFPPSDEQLKSGTASVVCLLNNFYPREAKVQWKVDNALQSGNSQESVTEQDSKDSTYSLSSTLTLSKADYEKHKVYACEVTHQGLSSPVTKSFNRGEC >3cfd_A DIQMTQTTSSLSASLGDRVTISCRASQDISNYLNWYQQKPDGTVKLLIYYTSRLHSGVPSRFSGSGSGTDYSLTISNLDQDDIATYFCQQGTTLPPTFGGGTKLEIKRADAAPTVSIFPPSSEQLTSGGASVVCFLNNFYPKDINVKWKIDGSERQNGVLNSWTDQDSKDSTYSMSSTLTLTKDEYERHNSYTCEATHKTSTSPIVKSFNRNEC >3cfd_H EVQLQESGPGLVKPSQSLSLTCTVTGYSITSDYAWNWLRQLPGNKLEWMGYISYSGRIRYNPSLKRRISITRDTSKNQFFLQLNSVTTEDTATYYCARSDYGNYGRGDYWGQGTSVTVSSAKTTPPSVYPLAPGCGDTTGSSVTSGCLVKGYFPESVTVTWNSGSLSSSVHTFPALLQSGLYTMSSSVTVPSSTWPSETVTCSVAHPASSTTVDKKLEPS >3cfe_A DIQMTQTTSSLSASLGDRVTISCRASQDISNYLNWYQQKPDGTVKLLIYYTSRLHSGVPSRFSGSGSGTDYSLTISNLDQDDIATYFCQQGTTLPPTFGGGTKLEIKRADAAPTVSIFPPSSEQLTSGGASVVCFLNNFYPKDINVKWKIDGSERQNGVLNSWTDQDSKDSTYSMSSTLTLTKDEYERHNSYTCEATHKTSTSPIVKSFNRNEC >3cfe_H EVQLQESGPGLVKPSQSLSLTCTVTGYSITSDYAWNWLRQLPGNKLEWMGYISYSGRIRYNPSLKRRISITRDTSKNQFFLQLNSVTTEDTATYYCARSDYGNYGRGDYWGQGTSVTVSSAKTTPPSVYPLAPGCGDTTGSSVTSGCLVKGYFPESVTVTWNSGSLSSSVHTFPALLQSGLYTMSSSVTVPSSTWPSETVTCSVAHPASSTTVDKKLEPS >4nx3_A MESQTQVLMFLLLWVSGACADIVMTQSPSSLAMSVGQKVTMSCKSSQSLLNSNNQKNYLAWYQQKPGQSPKLLVYFASTRESGVPDRFIGSGSGTDFTLTISSVQAEDLADYFCQQHYSTPYTFGGGTKLEIRRADAAPTVSIFPPSSEQLTSGGASVVCFLNNFYPKDINVKWKIDGSERQNGVLNSWTDQDSKDSTYSMSSTLTLTKDEYERHNSYTCEATHKTSTSPIVKSFNRNEC >4nx3_B MKCSWVIFFLMAVVTGVISEVQLQQSGAELVKPGASVKLSCTASGFNIKDTYIHWVNQRPEQGLEWIGRIDPANGHTQYDPKFQGKATITADTSSNTAYLQLSSLTSEDTAVYYCATSDYSYALDSWGQGTSVTVSSAKTTAPSVYPLAPVCGDTTGSSVTLGCLVKGYFPEPVTLTWNSGSLSSGVHTFPAVLQSDLYTLSSSVTVTSSTWPSQSITCNVAHPASSTKVDKKIEPRGPTIKPCPPCKCPAPNLLGGPSVFIFPPKIKDVLMISLSPIVTCVVVDVSEDDPDVQISWFVNNVEVHTAQTQTHREDYNSTLRVVSALPIQHQDWMSGKEFKCKVNNKDLPAPIERTISKPKGSVRAPQVYVLPPPEEEMTKKQVTLTCMVTDFMPEDIYVEWTNNGKTELNYKNTEPVLDSDGSYFMYSKLRVEKKNWVERNSYSCSVVHEGLHNHHTTKSFSRTPGK >3cfb_A DIVMTQAAFSNPVTLGTSASISCRSTKSLLHSNGITYLYWYLQKPGQSPQLLIYQMSNLASGVPDRFSSSGSGTDFTLRISRVEAEDVGVYYCAQNLELPPTFGGGTKLEIKRADAAPTVSIFPPSSEQLTSGGASVVCFLNNFYPKDINVKWKIDGSERQNGVLNSWTDQDSKDSTYSMSSTLTLTKDEYERHNSYTCEATHKTSTSPIVKSFNRNEC >3cfb_H EVKLVESGGGLVKPGGSLKLSCTASGITFSRYIMSWVRQIPEKRLEWVASISSGGITYYPDSVKGRFTISRDNVRNILYLQMSSLRSEDTALYYCARGQGRPYWGQGTLVTVSSAKTTPPSVYPLAPGCGDTTGSSVTLGCLVKGYFPESVTVTWNSGSLSSSVHTFPALLQSGLYTMSSSVTVPSSTWPSETVTCSVAHPASSTTVDKKLEP >4k24_H EVQLQQSGPELVKTGASVKISCKASGYSFTSYYMHWVKQSHGKSLEWIGEINPYNGGASYNQKIKGRATFTVDTSSRTAYMQFNSLTSEDSAVYYCARSIYGHSVLDYWGQGTSVSVSSAKTTPPSVYPLAPGSAAQTNSMVTLGCLVKGYFPEPVTVTWNSGSLSSGVHTFPAVLQSDLYTLSSSVTVPSSTWPSQTVTCNVAHPASSTKVDKKIVPRDCGCKPCIC >4k24_L DVVMTQTPLTLSVTIGQPASISCKSSQSLLDSDGKTYLNWLLQRPGQSPKRLIYLVSKLDSGVPDRFTGSGSGTDFTLKISRVEAEDLGVYYCWQGTHFPLTFGAGTKLELKRADAAPTVSIFPPSSEQLTSGGASVVCFLNNFYPKDINVKWKIDGSERQNGVLNSWTDQDSKDSTYSMSSTLTLTKDEYERHNSYTCEATHKTSTSPIVKSFNRNEC >1fgn_H EIQLQQSGAELVRPGALVKLSCKASGFNIKDYYMHWVKQRPEQGLEWIGLIDPENGNTIYDPKFQGKASITADTSSNTAYLQLSSLTSEDTAVYYCARDNSYYFDYWGQGTTLTVSSAKTTPPSVYPLAPGSAAQTNSMVTLGCLVKGYFPEPVTVTWNSGSLSSGVHTFPAVLQSDLYTLSSSVTVPSSTWPSETVTCNVAHPASSTKVDKKI >1fgn_L DIKMTQSPSSMYASLGERVTITCKASQDIRKYLNWYQQKPWKSPKTLIYYATSLADGVPSRFSGSGSGQDYSLTISSLESDDTATYYCLQHGESPYTFGGGTKLEINRADAAPTVSIFPPSSEQLTSGGASVVCFLNNFYPKDINVKWKIDGSERQNGVLNSWTDQDSKDSTYSMSSTLTLTKDEYERHNSYTCEATHKTSTSPIVKSFNRNEC >3ld8_C QIQLQESGPGLVTPSQSLTLTCSVTGDSITSYHWSWIRQFPGKKLEWMGYIYNSGGTDYNPSLKSRVSITREISRNQLFLQLNSVTTEDTATYYCARRDYGTYYFDYWGQGTMVTVSSATTTAPSVYPLAPACDSTTSTTNTVTLGCLVKGYFPEPVTVSWNSGALTSGVHTFPSVLHSGLYSLSSSVTVPSSTWPSQTVTCNVAHPASSTKVDKKIVPGD >3ld8_B DIVMTQSPSSLAVSAGEKVTMSCRSSQSLYYSGIKKNLLAWYQLKPGQSPKLLIYYASTLFTGVPDRFTGSGSGTDYTLTITSVQAEDMGQYFCQQGISNPYTFGAGTKLEIKRADAKPTVSIFPPSSEQLGTGSATLVCFVNNFYPKDINVKWKVDGSEKRDGVLQSVTDQDSKDSTYSLSSTLSLTKADYERHNLYTCEVTHKTSTAAIVKTLNRNEC >1kcu_H QVKLQQSGPGLVKPSQSLSLTCTVTGYSITSDYAWNWIRQFPGNKLEWMAYISYSGSTTYNPSLKSRISITRDTSKNQFFLQLNSVTTEDTAIYYCARGGTGFDYWGAGTTLTVSAAATTPPSVYPLAPGSATAAASMVTLGCLVKGYFPEPVTVTWNSGALSSGVHTFPAVLQSDLYTLSSSVTVPSSPWPSETVTCNVAHPASSTKVDKKIVPRD >1kcu_L DIVLTQSPKSMSMSVGEKVTLSCKASENVDTYVSWYQQRPEQPPALLIYGASNRYTGVPDRFTGSGSATDFTLTISSVQAEDLADYHCGQSYSYPLTFGGGTKLELKRADAAPTVSIFPPSSEQLTSGGASVVCFLNNFYPKDINVKWKIDGSERQNGVANSWTAQDSKDSTYSMSSTLTLTKDEYERHNSYTCEATHKTSTSPVVKSFNRNEC >1kcv_H QVTLSQSGPGLVKPSQSLSLTCTVTSYSITSDYAWNWIRQFAGQSLEWMGYISYSGSTSYNPSLKSRISITRDTSKNQFFLQLNSVTTDDTATYYCARGGTGFPYWGTGTNVTVSAASTTAPSVFPLVPGSATAAASAVTLGCLVKGYFPEPVTVAWNEGALSSGVLTVSAVLQSGLYTLSSNTTVASGTWPSASVTCLVAHPKSSTAADKKIEPKD >1kcv_L DIVMTQSPKSMGMSVGEAVTLNCKASENVGTYVSWYQQKPGQSPVLLIYGASNRYTGVPDRFTGSGSATDFTLTISSVQADDDADYYCGQSYSSPLTFGGGTKLELKRADAAPTSSIFPPSSEQLSSGGASVVCFLNSFYPKSIAVKWKVDGSKRANGTANSWTDQDSASSTYSMSSTLTLTKDKYERHNSYTCEATHKTSSSPVVKSFNRNEC >1kcs_H QVTLSQSGPGLVKPSQSLSLTCTVTSYSITSDYAWNWIRQFAGQSLEWMGYISYSGSTSYNPSLKSRISITRDTSKNQFFLQLNSVTTDDTATYYCARGGTGFPYWGTGTNVTVSAASTTAPSVFPLVPGSATAAASAVTLGCLVKGYFPEPVTVAWNEGALSSGVLTVSAVLQSGLYTLSSNTTVASGTWPSASVTCLVAHPKSSTAADKKIEPKD >1kcs_L DIVMTQSPKSMGMSVGEAVTLNCKASENVGTYVSWYQQKPGQSPVLLIYGASNRYTGVPDRFTGSGSATDFTLTISSVQADDDADYYCGQSYSSPLTFGGGTKLELKRADAAPTSSIFPPSSEQLSSGGASVVCFLNSFYPKSIAVKWKVDGSKRANGTANSWTDQDSASSTYSMSSTLTLTKDKYERHNSYTCEATHKTSSSPVVKSFNRNEC >1kcr_H QVALQESGPGLVKPSQSLSLTCTVTGYSITSDYAWNWIRQFPGNKLEWMGYIRNGGSTTYNPSLASRISITRDTSKNQFFLQLNSVTTEDTATYYCARGGTGFTYWGAGTLVTVSAAATTPPSVYPLAPGSAAAAAAMVTLGCLVKGYFPEPVTVTWNSGSLSSGVHTFPAVLQSALYTLSSSVTVPSSPRPSATVTCNVAHPASSTKVDKKIVPRDC >1kcr_L DIVLTQSPKSMSMSVGERVTLSCKASENVGTYVSWYQQKPEQSPKLLIYGASNRYTGVPDRFTGSGSATDFTLKISSVQAEDLADYHCGQTYSYPTFGGGTKLAIKRADAAPTVSIFPPSSEQLTAGGASVVCFLNNFYPKDINVKWKIDGSERQNGVANSWTAQDSADSTYSMSSTLTLTKDEYERHNSYTCEATHKTSTSPIVKSFNRNEC >1fgv_H EVQLVESGGGLVQPGGSLRLSCATSGYTFTEYTMHWMRQAPGKGLEWVAGINPKNGGTSYADSVKGRFTISVDKSKNTLYLQMNSLRAEDTAVYYCARWRGLNYGFDVRYFDVWGQGTLVTVSS >1fgv_L DIQMTQSPSSLSASVGDRVTITCRASQDINNYLNWYQQKPGKAPKLLIYYTSTLESGVPSRFSGSGSGTDYTLTISSLQPEDFATYYCQQGNTLPPTFGAGTKVEIKRT >2vdr_H EVQLQQSGAELVKPGASVKLSCTASGFNIKDTYVHWVKQRPEQGLEWIGRIDPANGYTKYDPKFQGKATITADTSSNTAYLQLSSLTSEDTAVYYCVRPLYDYYAMDYWGQGTSVTVSSAKTTAPSVYPLAPVCGDTTGSSVTLGCLVKGYFPEPVTLTWNSGSLSSGVHTFPAVLQSDLYTLSSSVTVTSSTWPSQSITCNVAHPASSTKVDKKIEPRGP >2vdr_L DILMTQSPSSMSVSLGDTVSITCHASQGISSNIGWLQQKPGKSFMGLIYYGTNLVDGVPSRFSGSGSGADYSLTISSLDSEDFADYYCVQYAQLPYTFGGGTKLEIKRADAAPTVSIFPPSSEQLTSGGASVVCFLNNFYPKDINVKWKIDGSERQNGVLNSWTDQDSKDSTYSMSSTLTLTKDEYERHNSYTCEATHKTSTSPIVKSFNRNEC >2i5y_Q DIVMTQSPATLSVSPGERATLSCRASESVSSDLAWYQQKPGQAPRLLIYGASTRATGVPARFSGSGSGAEFTLTISSLQSEDFAVYYCQQYNNWPPRYTFGQGTRLEIKRTVAAPSVFIFPPSDEQLKSGTASVVCLLNNFYPREAKVQWKVDNALQSGNSQESVTEQDSKDSTYSLSSTLTLSKADYEKHKVYACEVTHQGLSSPVTKSFNRG >2i5y_H EVQLVESGAEVKKPGSSVKVSCKASGDTFIRYSFTWVRQAPGQGLEWMGRIITILDVAHYAPHLQGRVTITADKSTSTVYLELRNLRSDDTAVYFCAGVYEGEADEGEYDNNGFLKHWGQGTLVTVSSASTKGPSVFPLAPSSKSTSGGTAALGCLVKDYFPEPVTVSWNSGALTSGVHTFPAVLQSSGLYSLSSVVTVPSSSLGTQTYICNVNHKPSNTKVDKKVEPK >4f33_A DIELTQSPAIMSASPGEKVTMTCSASSSVSYMHWYQQKSGTSPKRWIYDTSKLASGVPGRFSGSGSGNSYSLTISSVEAEDDATYYCQQWSKHPLTFGSGTKVEIKRTVAAPSVFIFPPSDEQLKSGTASVVCLLNNFYPREAKVQWKVDNALQSGNSQESVTEQDSKDSTYSLSSTLTLSKADYEKHKVYACEVTHQGLSSPVTKSFNRGEC >4f33_C DIELTQSPAIMSASPGEKVTMTCSASSSVSYMHWYQQKSGTSPKRWIYDTSKLASGVPGRFSGSGSGNSYSLTISSVEAEDDATYYCQQWSKHPLTFGSGTKVEIKRTVAAPSVFIFPPSDEQLKSGTASVVCLLNNFYPREAKVQWKVDNALQSGNSQESVTEQDSKDSTYSLSSTLTLSKADYEKHKVYACEVTHQGLSSPVTKSFNRGEC >3cxd_H EVQLVESGGGLVQPKGSLKISCAASGFTFNIYAMNWVRQAPGKGLEWVARIRSQSNNYTTYYADSVKDRFTISRDDSQSMLYLQMNNLKTEDTAMYYCVRQMGDYWGQGTTLTVSSAVKTPPSVYPLAPGGGAISNSMVTLGCLVNGYFPEPVTVTWNAGSLGSGVHTFPAVLQSDLYTLSSSVTVPVSTWPSEAVTCNVAHPASATSVDKAISPV >3cxd_L YIQMTQSPASLSVSVGETVTITCRASENIYSFLAWYQQKQGKSPQLLVYAATNLADGVPSRFSGSGSGTQFSLKINSLQSEDFGTYYCQHFWGTPFTFGSGTKLEIKRSDAAPTVSIFPPSAAQLSSGGGSVVCFLNNFYPKDINVKWKIDGAERGNGVLNSWTSQDSADSTYSMSSTLTSGGDEYERHNSYTCEATHKTSTSPIVKSFNRAA >2i9l_A DMVMSQSPSSLAVSAGEKVSMSCKSSQTLLNSRTRKNYLAWYQQKPGQSPKLLIYWASTRESGVPDRFTGSGSGTDFTLTISSVQAEDLAVYYCKQSYNLWTFGGGTKLEIKRADAAPTVSIFPPSSEQLTSGGASVVCFLNNFYPKDINVKWKIDGSERAAGVLNSWTDQDSKDSTYSMSSTLTLTKDEYERHNSYTCEATHKTSTSPIVKSFNRNEC >2i9l_C DMVMSQSPSSLAVSAGEKVSMSCKSSQTLLNSRTRKNYLAWYQQKPGQSPKLLIYWASTRESGVPDRFTGSGSGTDFTLTISSVQAEDLAVYYCKQSYNLWTFGGGTKLEIKRADAAPTVSIFPPSSEQLTSGGASVVCFLNNFYPKDINVKWKIDGSERAAGVLNSWTDQDSKDSTYSMSSTLTLTKDEYERHNSYTCEATHKTSTSPIVKSFNRNEC >4ffy_H QVQLLQPGAELVKPGASMKLSCKASGYTFTNWWMHWVRLRPGRGLEWIGRIDPNSDVNKYNEKFENRASLTVDKHSSTAYMQLSSLTSEDSAIYYCARWFFPWYFDVWGTGTTVTVSSAASGADHHHHHH >4ffy_L NIVLTQSPASLAVSLGQRATISCRASESVDHYGNSFIYWYQQKPGQPPKLLIYLASNLESGVPARFSGSGSETDFTLTIDSVETDDAATYYCQQNNEDPYTFGGGTKLEIKGGGGSGGGGSGGGGS >4ffz_Y NIVLTQSPASLAVSLGQRATISCRASESVDHYGNSFIYWYQQKPGQPPKLLIYLASNLESGVPARFSGSGSETDFTLTIDSVETDDAATYYCQQNNEDPYTFGGGTKLEIKRADAAPTVSIFPPSSEQLTSGGASVVCFLNNFYPKDINVKWKIDGSERQNGVLNSWTDQDSKDSTYSMSSTLTLTKDEYERHNSYTCEATHKTSTSPIVKSFNRN >4ffz_H QVQLLQPGAELVKPGASMKLSCKASGYTFTNWWMHWVRLRPGRGLEWIGRIDPNSDVNKYNEKFENRASLTVDKHSSTAYMQLSSLTSEDSAIYYCARWFFPWYFDVWGTGTTVTVSSAKTTAPSVYPLAPVCGGTTGSSVTLGCLVKGYFPEPVTLTWNSGSLSSGVHTFPALLQSGLYTLSSSVTVTSNTWPSQTITCNVAHPASSTKVDKKIES >4ffv_H EFQLQQSGPELVKPGASVKISCKASGYSFTDYNINWMKQSNGKSLEWIGVVIPKYGTTNYNQKFQGKATLTVDQSSSTAYIQLNSLTSEDSAVYYCTRFRDVFFDVWGTGTTVTVSSAKTTAPSVYPLAPVCGGTTGSSVTLGCLVKGYFPEPVTLTWNSGSLSSGVHTFPALLQSGLYTLSSSVTVTSNTWPSQTITCNVAHPASSTKVDKKIVPR >4ffv_C QIVLSQSPAILSASPGEKVTMTCRASSSVNNMHWYQQKPGSSPKPWLHGTSNLASGVPVRFSGSGSGTSFSLTISRVEAEDAATYFCQQWSNHPPTFGGGTKLEIDRADAAPTVSIFPPSSEQLTSGGASVVCFLNNFYPKDINVKWKIDGSERQNGVLNSWTDQDSKDSTYSMSSTLTLTKDEYERHNSYTCEATHKTSTSPIVKSFNR >2kh2_B DIQMTQSPSSLSASVGDRVTITCRTSGNIHNYLTWYQQKPGKAPQLLIYNAKTLADGVPSRFSGSGSGTQFTLTISSLQPEDFANYYCQHFWSLPFTFGQGTKVEIKRTGGGGSGGGGSGGGGSGGGGSEVQLVESGGGLVQPGGSLRLSCAASGFDFSRYDMSWVRQAPGKRLEWVAYISSGGGSTYFPDTVKGRFTISRDNAKNTLYLQMNSLRAEDTAVYYCARQNKKLTWFDYWGQGTLVTVSSHHHHHH >2kh2_B DIQMTQSPSSLSASVGDRVTITCRTSGNIHNYLTWYQQKPGKAPQLLIYNAKTLADGVPSRFSGSGSGTQFTLTISSLQPEDFANYYCQHFWSLPFTFGQGTKVEIKRTGGGGSGGGGSGGGGSGGGGSEVQLVESGGGLVQPGGSLRLSCAASGFDFSRYDMSWVRQAPGKRLEWVAYISSGGGSTYFPDTVKGRFTISRDNAKNTLYLQMNSLRAEDTAVYYCARQNKKLTWFDYWGQGTLVTVSSHHHHHH >1ikf_H EVKLVESGGGLVQPGGSLKLSCATSGFTFSDYYMYWVRQNSEKRLEWVAFISNGGGSAFYADIVKGRFTISRDNAKNTLYLQMSRLKSEDTAMYYCTRHTLYDTLYGNYPVWFADWGQGTLVTVSAAKTTPPSVYPLAPGSAAQTNSMVTLGCLVKGYFPEPVTVTWNSGSLSSGVHTFPAVLQSDLYTLSSSVTVPSSSRPSETVTCNVAHPASSTKVDKKIVPRDC >1ikf_L DIQMTQTTSSLSASLGDRVTISCRASQDISTYLNWYQQKPDGTVKLLIFYTSRLRSGVPSRFSGSGSGTDYSLTISNLEQEDIATYFCQQGSRIPPTFGGGTKLEILRADAAPTVSIFPPSSEQLTSGGASVVCFLNNFYPKDINVKWKIDGSERQNGVLNSWTDQDSKDSTYSMSSTLTLTKDEYERHNSYTCEATHKTSTSPIVKSFNRAAC >3cxh_K DIELTQTPVSLAASLGDRVTISCRASQDINNFLNWYQQKPDGTIKLLIYYTSRLHAGVPSRFSGSGSGTDYSLTISNLEPEDIATYFCQHHIKFPWTFGAGTKLEIK >3cxh_J EVKLQESGAGLVQPSQSLSLTCSVTGYSITSGYYWNWIRLFPGNKLEWVGYISNVGDNNYNPSLKDRLSITRDTSKNQFFLKLNSVTTEDTATYYCARSEYYSVTGYAMDYWGQGTTVTVSSAWRHP >4ldl_B QVQLQESGGGLVQAGGSLRLSCAASGSIFALNIMGWYRQAPGKQRELVAAIHSGGTTNYANSVKGRFTISRDNAANTVYLQMNSLKPEDTAVYYCNVKDFGAIIYDYDYWGQGTQVTVSS >4ldo_B QVQLQESGGGLVQAGGSLRLSCAASGSIFALNIMGWYRQAPGKQRELVAAIHSGGTTNYANSVKGRFTISRDNAANTVYLQMNSLKPEDTAVYYCNVKDFGAIIYDYDYWGQGTQVTVSS >1hi6_A DIKMTQSPSSMYTSLGERVTITCKASQDINSFLTWFLQKPGKSPKTLIYRANRLMIGVPSRFSGSGSGQTYSLTISSLEYEDMGIYYCLQYDDFPLTFGAGTKLDLKRADAAPTVSIFPPSSEQLTSGGASVVCFLNNFYPKEINVKWKIDGSERQNGVLDSWTEQDSKDSTYSMSSTLTLTKDEYERHNSYTCEATHKTSTSPIVKSFNRNEC >1hi6_B QDQLQQSGAELVRPGASVKLSCKALGYIFTDYEIHWVKQTPVHGLEWIGGIHPGSSGTAYNQKFKGKATLTADKSSTTAFMELSSLTSEDSAVYYCTRKDYWGQGTLVTVSAAKTTAPSVYPLVPVCGGTTGSSVTLGCLVKGYFPEPVTLTWNSGSLSSGVHTFPALLQSGLYTLSSSVTVTSNTWPSQTITCNVAHPASSTKVDKKIEPRV >4lde_B QVQLQESGGGLVQAGGSLRLSCAASGSIFALNIMGWYRQAPGKQRELVAAIHSGGTTNYANSVKGRFTISRDNAANTVYLQMNSLKPEDTAVYYCNVKDFGAIIYDYDYWGQGTQVTVSS >3vrl_H DVKLVESGGGLVKPGGSLKLSCAASGFTFSSYTMSWVRQTPEKRLEWVAIISSGGSYTYYSDSVKGRFTISRDNAKNTLYLQMSSLKSEDTAMYYCTRDEGNGNYVEAMDYWGQGTSVTVSSAKTTPPSVYPLAPGSAAQTNSMVTLGCLVKGYFPEPVTVTWNSGSLSSGVHTFPAVLQSDLYTLSSSVTVPSSTWPSETVTCNVAHPASSTKVDKKIVPRDC >3vrl_E DVKLVESGGGLVKPGGSLKLSCAASGFTFSSYTMSWVRQTPEKRLEWVAIISSGGSYTYYSDSVKGRFTISRDNAKNTLYLQMSSLKSEDTAMYYCTRDEGNGNYVEAMDYWGQGTSVTVSSAKTTPPSVYPLAPGSAAQTNSMVTLGCLVKGYFPEPVTVTWNSGSLSSGVHTFPAVLQSDLYTLSSSVTVPSSTWPSETVTCNVAHPASSTKVDKKIVPRDC >4k4m_I GPAATVWTELVKPGTSVKISCKTSGYTFTENTMHWVKQSHGESLDWVGGINTDNGGTTYSQKFKGKATLTVDKSSSTAYMELRSLTSEDSAVYYCSTGYDAMDYWGQGTSVTVSSAKTTPPSVYPLAPGSAAQTNSMVTLGCLVKGYFPEPVTVTWNSGSLSSGVHTFPAVLQSDLYTLSSSVTVPSSTWPSETVTCNVAHPASSTKVDKKIVPR >4k4m_H GPAATVWTELVKPGTSVKISCKTSGYTFTENTMHWVKQSHGESLDWVGGINTDNGGTTYSQKFKGKATLTVDKSSSTAYMELRSLTSEDSAVYYCSTGYDAMDYWGQGTSVTVSSAKTTPPSVYPLAPGSAAQTNSMVTLGCLVKGYFPEPVTVTWNSGSLSSGVHTFPAVLQSDLYTLSSSVTVPSSTWPSETVTCNVAHPASSTKVDKKIVPR >4hpo_H EVQLVQSGAEVKKPGESLKISCKGSGYRFTSYWIVWVRQMPGKGLEWMGIIYPGDFDTKYSPSFQGQVTISADKSISTAYLQWSSLKASDTAMYYCARLGGRYYHDSSGYYYLDYWGQGTLVTVSSASTKGPSVFPLAPSSKSTSGGTAALGCLVKDYFPEPVTVSWNSGALTSGVHTFPAVLQSSGLYSLSSVVTVPSSSLGTQTYICNVNHKPSNTKVDKRVEPKSCDK >4hpo_L NFMLTQPHSVSESPGKTVTISCTRSSGSVASDYVQWYQQRPGSAPTTVVYEDNQRPSGVPDRFSGSIDSSSNSASLTISGLKTEDEADYYCQSYDNSSWVFGGGTKLTVLGQPKAAPSVTLFPPSSEELQANKATLVCLISDFYPGAVTVAWKADSSPVKAGVETTTPSKQSNNKYAASSYLSLTPEQWKSHRSYSCQVTHEGSTVEKTVAPTECS >1dsf_H QLVESGGGLVKPGGSLKLSCAASGFIFSDNYMYWVRQTPEKCLEWVATISDGGTYIDYSDSVKGRFTISRDNAKNNLYLQMSSLRSEDTGMYYCGRSPIYYDYAPFTYWGQGTLVTVSA >1dsf_L DVVMTQTPLSLPVSLGDQASISCRSSQNLVHSDGKTYLHWFLQKPGQSPTLLIYKVSNRFSGVPDRFSGSGSGTDFILKISRVEAEDLGVYFCSQSTHVPLTFGCGTKLELK >3wfb_H EVQLQQSGTVLARPGASVKMSCKASGYSFTSYWMHWVKQRPGQGLEWIGAVYPGNSDTSYNQKFKGKAKLTAVTSASTAYMELSSLTNEDSAVYYCSRSSLDGYYVKNWCFDVWGQGTTVTVSSAKTTAPSVYPLAPVCGDTTGSSVTLGCLVKGYFPEPVTLTWNSGSLSSGVHTFPAVLQSDLYTLSSSVTVTSSTRPSQSITCNVAHPASSTKVDKKIEPRG >3wfb_L DIQMTQSPPYLAASPGETITINCRASKSIRKYLAWYQEKPGKTNKLLIYSGSTLQFGIPSRFSGSGSGTEFTLTISSLEPEDFAMYYCQQHNEYPLTFGAGTKLELKRADAAPTVSIFPPSSEQLTSGGASVVCFLNNFYPKDINVKWKIDGSERQNGVLNSWTDQDSKDSTYSMSSTLTLTKDEYERHNSYTCEATHKTSTSPIVKSFNRNE >3wfc_H EVQLQQSGTVLARPGASVKMSCKASGYSFTSYWMHWVKQRPGQGLEWIGAVYPGNSDTSYNQKFKGKAKLTAVTSASTAYMELSSLTNEDSAVYYCSRSSLDGYYVKNWCFDVWGQGTTVTVSSAKTTAPSVYPLAPVCGDTTGSSVTLGCLVKGYFPEPVTLTWNSGSLSSGVHTFPAVLQSDLYTLSSSVTVTSSTRPSQSITCNVAHPASSTKVDKKIEPRG >3wfc_L DIQMTQSPPYLAASPGETITINCRASKSIRKYLAWYQEKPGKTNKLLIYSGSTLQFGIPSRFSGSGSGTEFTLTISSLEPEDFAMYYCQQHNEYPLTFGAGTKLELKRADAAPTVSIFPPSSEQLTSGGASVVCFLNNFYPKDINVKWKIDGSERQNGVLNSWTDQDSKDSTYSMSSTLTLTKDEYERHNSYTCEATHKTSTSPIVKSFNRNE >3wfd_H EVQLQQSGTVLARPGASVKMSCKASGYSFTSYWMHWVKQRPGQGLEWIGAVYPGNSDTSYNQKFKGKAKLTAVTSASTAYMELSSLTNEDSAVYYCSRSSLDGYYVKNWCFDVWGQGTTVTVSSAKTTAPSVYPLAPVCGDTTGSSVTLGCLVKGYFPEPVTLTWNSGSLSSGVHTFPAVLQSDLYTLSSSVTVTSSTRPSQSITCNVAHPASSTKVDKKIEPRG >3wfd_L DIQMTQSPPYLAASPGETITINCRASKSIRKYLAWYQEKPGKTNKLLIYSGSTLQFGIPSRFSGSGSGTEFTLTISSLEPEDFAMYYCQQHNEYPLTFGAGTKLELKRADAAPTVSIFPPSSEQLTSGGASVVCFLNNFYPKDINVKWKIDGSERQNGVLNSWTDQDSKDSTYSMSSTLTLTKDEYERHNSYTCEATHKTSTSPIVKSFNRNE >3wfe_H EVQLQQSGTVLARPGASVKMSCKASGYSFTSYWMHWVKQRPGQGLEWIGAVYPGNSDTSYNQKFKGKAKLTAVTSASTAYMELSSLTNEDSAVYYCSRSSLDGYYVKNWCFDVWGQGTTVTVSSAKTTAPSVYPLAPVCGDTTGSSVTLGCLVKGYFPEPVTLTWNSGSLSSGVHTFPAVLQSDLYTLSSSVTVTSSTRPSQSITCNVAHPASSTKVDKKIEPRG >3wfe_L DIQMTQSPPYLAASPGETITINCRASKSIRKYLAWYQEKPGKTNKLLIYSGSTLQFGIPSRFSGSGSGTEFTLTISSLEPEDFAMYYCQQHNEYPLTFGAGTKLELKRADAAPTVSIFPPSSEQLTSGGASVVCFLNNFYPKDINVKWKIDGSERQNGVLNSWTDQDSKDSTYSMSSTLTLTKDEYERHNSYTCEATHKTSTSPIVKSFNRNE >3wfh_A KVQLQQSGAELVKPGASVKLSCKASGYTFTEYFIHWVKQRSGQGLEWIGWFYPGSGSLNYNGKFKDKATFTADKSSSTVYLELSRLTSEDSAVYFCASHAYDKEPYWGQGTLVTVSAAKTTPPSVYPLAPGSAAQTNSMVTLGCLVKGYFPEPVTVTWNSGSLSSGVHTFPAVLQSDLYTLSSSVTVPSSTWPSETVTCNVAHPASSTKVDKKIVPR >3wfh_B DVLMTQTPLSLPVSLGDQASISCRSSQSIVHSNGNTYLEWYLQKPGQSPKLLIYKVSNRFSGVPDRFSGSGSGTDFTLKINRVEAEDLGIYYCLQGSHVPLTFGAGTTLELKRADAAPTVSIFPPSSEQLTSGGASVVCFLNNFYPKDINVKWKIDGSERQNGVLNSWTDQDSKDSTYSMSSTLTLTKDEYERHNSYTCEATHKTSTSPIVKSFNR >3lrh_A MGSQPVLTQSPSVSAAPRQRVTISVSGSNSNIGSNTVNWIQQLPGRAPELLMYDDDLLAPGVSDRFSGSRSGTSASLTISGLQSEDEADYYAATWDDSLNGWVFGGGTKVTVLSAHHHHHH >3lrh_C MGSQPVLTQSPSVSAAPRQRVTISVSGSNSNIGSNTVNWIQQLPGRAPELLMYDDDLLAPGVSDRFSGSRSGTSASLTISGLQSEDEADYYAATWDDSLNGWVFGGGTKVTVLSAHHHHHH >3bj9_1 VLHQPPAMSSALGTTIRLTCTLRNDHDIGVYSVYWYQQRPGHPPRFLLRYFSQSDKSQGPQVPPRFSGSKDVARNRGYLSISELQPEDEAMYYCAMGARSTHVFGSGTQLTVLSAA >3lrs_A QEQLVESGGGVVQPGGSLRLSCLASGFTFHKYGMHWVRQAPGKGLEWVALISDDGMRKYHSDSMWGRVTISRDNSKNTLYLQFSSLKVEDTAMFFCAREAGGPIWHDDVKYYDFNDGYYNYHYMDVWGKGTTVTVSSASTKGPSVFPLAPSSKSTSGGTAALGCLVKDYFPEPVTVSWNSGALTSGVHTFPAVLQSSGLYSLSSVVTVPSSSLGTQTYICNVNHKPSNTKVDKRVEPK >3lrs_C QEQLVESGGGVVQPGGSLRLSCLASGFTFHKYGMHWVRQAPGKGLEWVALISDDGMRKYHSDSMWGRVTISRDNSKNTLYLQFSSLKVEDTAMFFCAREAGGPIWHDDVKYYDFNDGYYNYHYMDVWGKGTTVTVSSASTKGPSVFPLAPSSKSTSGGTAALGCLVKDYFPEPVTVSWNSGALTSGVHTFPAVLQSSGLYSLSSVVTVPSSSLGTQTYICNVNHKPSNTKVDKRVEPK >1r24_A DIQMTQITSSLSVSLGDRVIISCRASQDIGNFLNWYQQKPDGSLKLLIYYTSRLQSGVPSRFSGWGSGTDYSLTISNLEEEDIATFFCQQGKTLPYTFGGGTKLEIKRADAAPTVSIFPPSSEQLTSGGASVVCFLNNFYPKDINVKWKIDGSERQNGVLNSWTDQDSKDSTYSMSSTLTLTKDEYERHNSYTCEATHKTSTSPIV >1r24_C DIQMTQITSSLSVSLGDRVIISCRASQDIGNFLNWYQQKPDGSLKLLIYYTSRLQSGVPSRFSGWGSGTDYSLTISNLEEEDIATFFCQQGKTLPYTFGGGTKLEIKRADAAPTVSIFPPSSEQLTSGGASVVCFLNNFYPKDINVKWKIDGSERQNGVLNSWTDQDSKDSTYSMSSTLTLTKDEYERHNSYTCEATHKTSTSPIV >4hpy_H EVQLVESGGGLVQPGRSLRLSCAASGFTFDDGAMHWVRQAPGKGLEWVSGISWNSNIIAYADSVKGRFTISRDNAKNSLYLEMNSLRVEDTALYYCAKDSPRGELPLNYWGQGTLVTVSSASTKGPSVFPLAPSSKSTSGGTAALGCLVKDYFPEPVTVSWNSGALTSGVHTFPAVLQSSGLYSLSSVVTVPSSSLGTQTYICNVNHKPSNTKVDKRVEPKSCDK >4hpy_L DSYELTQPPSVSVSPGQTARITCSGDALPKNYAYWYQQKSGQAPVLVIYEDSKRPSGIPERFSGSSSGTMATLTISGAQVEDEADYYCYSTDSSGNHRVFGGGTKLTVLGQPKAAPSVTLFPPSSEELQANKATLVCLISDFYPGAVTVAWKADSSPVKAGVETTTPSKQSNNKYAASSYLSLTPEQWKSHRSYSCQVTHEGSTVEKTVAPTECS >2qad_H EVQLVQSGAEVKKPGSSVKVSCKASGGTFSNYAINWVRQAPGQGLEWMGGIIPIFNIAHYAQRFQGRVSITADESTSTAYMELSSLRSEDTAVFYCASPYPNDYNDYAPEEGMSWYFDLWGRGTLVTVSPASTKGPSVFPLAPSSKSTSGGTAALGCLVKDYFPEPVTVSWNSGALTSGVHTFPAVLQSSGLYSLSSVVTVPSSSLGTQTYICNVNHKPSNTKVDKKVEPK >2qad_C DIQMTQSPSTLSASVGDRVTITCRASQSISNWLAWYQQKPGRAPKLLMYKASSLKSGVPSRFSGSGSGTEFTLTISSLQSDDFATYYCQQHDSSPYTFGQGTKLEIKRTVAAPSVFIFPPSDEQLKSGTASVVCLLNNFYPREAKVQWKVDNALQSGNSQESVTEQDSKDSTYSLSSTLTLSKADYEKHKLYACEVTHQGLSSPVTKSFNRGEC >3ivk_A SEVQLVESGGGLVQPGGSLRLSCAASGFYISYSSIHWVRQAPGKGLEWVASISPYSGSTYYADSVKGRFTISADTSKNTAYLQMNSLRAEDTAVYYCARQGYRRRSGRGFDYWGQGTLVTVSSASTKGPSVFPLAPSSKSTSGGTAALGCLVKDYFPEPVTVSWNSGALTSGVHTFPAVLQSSGLYSLSSVVTVPSSSLGTQTYICNVNHKPSNTKVDKKVEPK >3ivk_H SEVQLVESGGGLVQPGGSLRLSCAASGFYISYSSIHWVRQAPGKGLEWVASISPYSGSTYYADSVKGRFTISADTSKNTAYLQMNSLRAEDTAVYYCARQGYRRRSGRGFDYWGQGTLVTVSSASTKGPSVFPLAPSSKSTSGGTAALGCLVKDYFPEPVTVSWNSGALTSGVHTFPAVLQSSGLYSLSSVVTVPSSSLGTQTYICNVNHKPSNTKVDKKVEPK >1bey_H QVQLQESGPGLVRPSQTLSLTCTVSGFTFTDFYMNWVRQPPGRGLEWIGFIRDKAKGYTTEYNPSVKGRVTMLVDTSKNQFSLRLSSVTAADTAVYYCAREGHTAAPFDYWGQGSLVTVSSASTKGPSVFPLAPSSKSTSGGTAALGCLVKDYFPEPVTVSWNSGALTSGVHTFPAVLQSSGLYSLSSVVTVPSSSLGTQTYICNVNHKPSNTKVDKKV >1bey_L DIQMTQSPSSLSASVGDRVTITCKASQNIDKYLNWYQQKPGKAPKLLIYNTNNLQTGVPSRFSGSGSGTDFTFTISSLQPEDIATYYCLQHISRPRTFGQGTKVEIKRTVAAPSVFIFPPSDEQLKSGTASVVCLLNNFYPREAKVQWKVDNALQSGNSQESVTEQDSKDSTYSLSSTLTLSKADYEKHKVYACEVTHQGLSSPVTKSFNRGEC ================================================ FILE: Example_scripts_and_sequences/lysozyme.fasta ================================================ >2LYZ:A|PDBID|CHAIN|SEQUENCE KVFGRCELAAAMKRHGLDNYRGYSLGNWVCAAKFESNFNTQATNRNTDGSTDYGILQINSRWWCNDGRTPGSRNLCNIPC SALLSSDITASVNCAKKIVSDGNGMNAWVAWRNRCKGTDVQAWIRGCRL ================================================ FILE: Example_scripts_and_sequences/run_numbering_benchmark.sh ================================================ # Demo script to run benchmark numbering runs. # ANARCI can be run to generate multiple sequence alignments in csv format according to a chosen numbering scheme. # Parallel processing is enabled by the --ncpu option. OUTDIR='/tmp' NCPU=4 # Expect < 5 minutes per run with 4 processes on a desktop. ~10,000 sequences all of which are numbered. time ANARCI -i pdb_sequences.fa.txt.gz -s i --csv -o $OUTDIR/pdb_imgt --ncpu $NCPU --assign_germline time ANARCI -i pdb_sequences.fa.txt.gz -s k --csv -o $OUTDIR/pdb_kabat --ncpu $NCPU --assign_germline time ANARCI -i pdb_sequences.fa.txt.gz -s c --csv -o $OUTDIR/pdb_chothia --ncpu $NCPU --assign_germline time ANARCI -i pdb_sequences.fa.txt.gz -s m --csv -o $OUTDIR/pdb_martin --ncpu $NCPU --assign_germline time ANARCI -i pdb_sequences.fa.txt.gz -s a --csv -o $OUTDIR/pdb_aho --ncpu $NCPU --assign_germline time ANARCI -i pdb_sequences.fa.txt.gz -s w --csv -o $OUTDIR/pdb_wolfguy --ncpu $NCPU --assign_germline ================================================ FILE: INSTALL ================================================ ######################## # ANARCI INSTALLATION # ######################## Requirements: - HMMER3 version 3.1 or higher - http://hmmer.janelia.org/ - Biopython To install, simply run: python setup.py install During the installation process, germline data will be downloaded from IMGT/GENE-DB and used to build hidden Markov models. For more information about installing python programs see: https://docs.python.org/2/install/#alternate-installation-the-user-scheme For help see README or run: $ ANARCI -h ================================================ FILE: LICENCE ================================================ Copyright 2019 Charlotte Deane, James Dunbar, Alexsandr Kovaltsuk, Claire Marks Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: 1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. 2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. 3. Neither the name of the copyright holder nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. ================================================ FILE: LICENCE_MUSCLE ================================================ MUSCLE is public domain software The MUSCLE software, including object and source code and documentation, is donated to the public domain. You may therefore freely copy it for any legal purpose you wish. Acknowledgement of authorship and citation in publications is appreciated. Disclaimer of warranty THIS SOFTWARE IS PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. ================================================ FILE: README.md ================================================ ``` ANARCI \\ // Antibody Numbering and Antigen Receptor ClassIfication \\ // || (c) Oxford Protein Informatics Group (OPIG). 2015-20 || Author: James Dunbar (dunbar@stats.ox.ac.uk) Charlotte Deane (deane@stats.ox.ac.uk) Contact: opig@stats.ox.ac.uk ``` # Usage: * Numbering a single sequence ```python ANARCI -i EVQLQQSGAEVVRSGASVKLSCTASGFNIKDYYIHWVKQRPEKGLEWIGWIDPEIGDTEYVPKFQGKATMTADTSSNTAYLQLSSLTSEDTAVYYCNAGHDYDRGRFPYWGQGTLVTVSA ``` * Numbering sequences in a FASTA file ```python ANARCI -i myfile.fasta ``` * Please note that while ANARCI uses alignment to species V and J germlines to determine the species of the antibody for purposes of numbering, we do not recommend using ANARCI as your primary species annotation tool # Installation The easiest way to install ANARCI and its dependencies is using conda ```python conda install -c conda-forge biopython -y conda install -c bioconda hmmer=3.3.2 -y cd ANARCI python setup.py install ``` # Further info ## Output files * The numbering file. The numbering file (`--outfile` or stdout) reports the numbering for all sequences given in the sequence file. Each record is separated by "//". Those chains for which no significant alignment was found report the name as in the fasta file. e.g: ``` # 1A14:N|PDBID|CHAIN|SEQUENCE // Those sequences where a significant alignment has been found report as below: # 1A14:H|PDBID|CHAIN|SEQUENCE # ANARCI numbered # Domain 1 of 1 # Most significant HMM hit #|species|chain_type|e-value|score|seqstart_index|seqend_index| #|mouse|H|8.6e-58|184.9|0|119| # Scheme = imgt H 1 Q H 2 V H 3 Q H 4 L H 5 Q . . . // where: species = The species of the most significant aligned HMM chain_type = The chain type of the most significant aligned HMM e-value = The e-value of the alignment to the most significant aligned HMM score = The bit-score of the alignment to the most significant aligned HMM seqstart_index = The index in the sequence of the first numbered residue seqend_index = The index in the sequence of the last numbered residue Scheme = The numbering scheme used to number the sequence Then follows the numbering. Chain type (H, L (for both kappa(K) and lambda(L) chain types) , A (alpha), B (beta)) If the "assign_germline" option has been specified the further following lines are added to the header. e.g. # Most sequence-identical germlines #|species|v_gene|v_identity|j_gene|j_identity| #|mouse|IGHV1-12*01|0.86|IGHJ2*01|0.79| where: species = The species of the most sequence identical germline v_gene = The identifier of the most sequence identical germline over the v-region v_identity = The sequence identity over the v-region to the most sequence identical germline j_gene = The identifier of the most sequence identical germline over the j-region j_identity = The sequence identity over the j-region to the most sequence identical germline ``` * The csv format output file. When the `--csv` option is specified, numbered sequences are output into separate comma separated value files depending on their chain type. This provides a horizontal output format and contains all the properties detailed above. In addition, sequences are aligned according to the numbering scheme. * The hit file. The hit file reports the statistics for all alignments to each HMM in the database even if the sequence was not numbered. Each record is separated by "//". The corresponding hit table for the numbered entry above looks like: ``` """ NAME 1a14_H mol:protein length:120 NC10 FV (HEAVY CHAIN) SEQUENCE QVQLQQSGAELVKPGASVRMSCKASGYTFTNYNMYWVKQSPGQGLEWIGIFYPGNGDTSYNQKFKDKATLT SEQUENCE ADKSSNTAYMQLSSLTSEDSAVYYCARSGGSYRYDGGFDYWGQGTTVTV id description evalue bitscore bias best_dom_evalue best_dom_bitscore best_dom_bias domain_exp_num domain_obs_num mouse_H 1.1e-57 184.5 1.5 1.3e-57 184.4 1.5 1.0 1 human_H 7.8e-53 169.0 1.9 8.7e-53 168.8 1.9 1.0 1 rat_H 4.7e-47 150.2 2.2 5.2e-47 150.0 2.2 1.0 1 rabbit_H 3.7e-37 118.2 0.7 4e-37 118.1 0.7 1.0 1 pig_H 1.5e-35 113.3 2.7 1.6e-35 113.1 2.7 1.0 1 rhesus_H 4.4e-32 101.5 1.8 4.9e-32 101.4 1.8 1.0 1 mouse_B 2.4e-19 60.6 0.7 2.6e-19 60.5 0.7 1.0 1 human_B 4.2e-19 59.7 0.9 4.6e-19 59.5 0.9 1.0 1 mouse_A 8.7e-19 58.5 1.1 9.6e-19 58.4 1.1 1.0 1 human_A 1.7e-18 57.6 0.9 1.9e-18 57.5 0.9 1.0 1 mouse_D 5.1e-17 53.3 0.7 5.9e-17 53.1 0.7 1.1 1 rhesus_L 1.6e-16 51.7 2.7 1.9e-16 51.4 2.7 1.1 1 human_L 1.7e-15 48.3 3.5 2e-15 48.0 3.5 1.1 1 human_D 6.7e-15 46.1 0.2 7.4e-15 45.9 0.2 1.0 1 rhesus_K 3.9e-13 40.6 1.7 5.1e-13 40.2 1.7 1.2 1 mouse_G 4.1e-13 40.3 0.0 4.3e-13 40.2 0.0 1.0 1 rabbit_L 6.1e-13 40.0 2.8 8.1e-13 39.6 2.8 1.2 1 rat_K 3.9e-12 37.4 1.4 4.4e-12 37.2 1.4 1.1 1 pig_L 4.2e-12 37.5 1.0 4.7e-12 37.3 1.0 1.1 1 mouse_K 1.2e-11 35.7 2.6 1.3e-11 35.6 2.6 1.1 1 human_K 2.2e-11 34.8 2.9 3.5e-11 34.2 2.9 1.4 1 mouse_L 1.9e-10 31.8 2.2 3.4e-10 30.9 2.2 1.4 1 rat_L 2.5e-10 31.7 1.2 2.9e-10 31.5 1.2 1.1 1 pig_K 3.2e-10 31.1 1.9 4.5e-10 30.6 1.9 1.3 1 human_G 2.9e-09 27.8 0.8 4.9e-09 27.1 0.8 1.4 1 rabbit_K 2.5e-06 18.4 5.8 4.2e-06 17.7 5.8 1.4 1 // """ ``` We therefore get a ranking of the alignments to each chain type. ## Schemes: * Currently implemented schemes: IMGT Chothia (IGs only) Kabat (IGs only) Martin / Enhanced Chothia (IGs only) AHo Wolfguy (IGs only) * Currently recognisable species (chains): Human (heavy, kappa, lambda, alpha, beta) Mouse (heavy, kappa, lambda, alpha, beta) Rat (heavy, kappa, lambda) Rabbit (heavy, kappa, lambda) Pig (heavy, kappa, lambda) Rhesus Monkey (heavy, kappa) Other species may still be numbered correctly and the chain type recognised but the species be incorrect. e.g. llama VHH. * IMGT - has 128 possible positions for *all* antigen receptor types. These are supposed to be structurally equivalent. In theory these are supposed to account for all possible positions. However, insertions are possible especially at CDR3. ANARCI gives the insertion codes as letters. Insertions at CDR3 are placed symmetrically about imgt positions 111 and 112. e.g. 111-ABCD DCBA-112. * Kabat - is defined for heavy and light chain antibody chains only (in ANARCI). Positions in the two chain types are not equivalent. Insertions occur at specific positions and can occur in both the framework and the CDRs. They are annotated from A->Z. e.g 100ABCDEFGH 101. * Chothia - is defined for heavy and light chain antibody chains only (in ANARCI). Numbering in the two chain types are not equivalent. Insertions occur at specific positions and can occur in both the framework and the CDRs. They are annotated from A->Z. e.g 100ABCDEFGH 101. It differs to the Kabat scheme by the position it places the insertions at CDRH1. * Martin - is defined for heavy and light chain antibody chains only. Numbering in the two chain types are not equivalent. Insertions occur at specific positions and can occur in both the framework and the CDRs. They are annotated from A->Z. e.g 100ABCDEFGH 101. It differs to the Chothia scheme by the position it places the certain insertions in the framework. It is also referred to as the enhanced Chothia scheme. * AHo - has 149 possible for *all* antigen receptor types. These are supposed to be structurally equivalent. The AHo scheme's large number of positions is supposed to account for all possible positions without the need for specifying insertion positions. In ANARCI, extra residues in the framework may be represented by insertions although these are unlikely to occur in natural sequences. * Wolfguy - is defined for heavy and light antibody chains. Numbering in the two chain types are not equivalent. Different regions of the domain are denoted by a range of numbers. Many possible positions in the CDRs mean that insertion codes are not required. In ANARCI, extra residues in the framework may be represented by insertions although these are unlikely to occur in natural sequences. The CDRs are numbered in an 'up' and 'down' direction. The annotations of CDRL1 is defined according to the canonical structure. In ANARCI this is recognised by taking a sequence similarity to hard coded sequence motifs for different lengths. ================================================ FILE: bin/ANARCI ================================================ #! /usr/bin/env python # ANARCI - Antibody Numbering and Antigen Receptor ClassIfication # Copyright (C) 2016 Oxford Protein Informatics Group (OPIG) # # This program is free software: you can redistribute it and/or modify # it under the terms of the BSD 3-Clause License. # # You should have received a copy of the BSD 3-Clause Licence # along with this program. If not, see . description=''' ANARCI \\\ // Antibody Numbering and Antigen Receptor ClassIfication \\\ // || (c) Oxford Protein Informatics Group (OPIG). 2015-17 || Usage: ANARCI -i Requirements: - HMMER3 version 3.1b1 or higher - http://hmmer.janelia.org/ e.g. ANARCI -i Example_sequence_files/12e8.fasta This will number the files in 12e8.fasta with imgt numbering scheme and print to stdout. ANARCI -i Example_sequence_files/sequences.fasta -o Numbered_sequences.anarci -ht hit_tables.txt -s chothia -r ig This will number the files in sequences.fasta with chothia numbering scheme only if they are an antibody chain (ignore TCRs). It will put the numbered sequences in Numbered_sequences.anarci and the alignment statistics in hit_tables.txt ANARCI -i Example_sequence_files/lysozyme.fasta No antigen receptors should be found. The program will just list the names of the sequences. ANARCI -i EVQLQQSGAEVVRSGASVKLSCTASGFNIKDYYIHWVKQRPEKGLEWIGWIDPEIGDTEYVPKFQGKATMTADTSSNTAYLQLSSLTSEDTAVYYCNAGHDYDRGRFPYWGQGTLVTVSA Or just give a single sequence to be numbered. ''' epilogue=''' Author: James Dunbar (dunbar@stats.ox.ac.uk) Charlotte Deane (deane@stats.ox.ac.uk) Contact: opig@stats.ox.ac.uk Copyright (C) 2017 Oxford Protein Informatics Group (OPIG) Freely distributed under the BSD 3-Clause Licence. ''' import os def which(name, flags=os.X_OK): """ Search PATH for executable files with the given name. On newer versions of MS-Windows, the PATHEXT environment variable will be set to the list of file extensions for files considered executable. This will normally include things like ".EXE". This fuction will also find files with the given name ending with any of these extensions. On MS-Windows the only flag that has any meaning is os.F_OK. Any other flags will be ignored. @type name: C{str} @param name: The name for which to search. @type flags: C{int} @param flags: Arguments to L{os.access}. @rtype: C{list} @param: A list of the unique full paths to files found, in the order in which they were found. """ result = [] exts = [_f for _f in os.environ.get('PATHEXT', '').split(os.pathsep) if _f] path = os.environ.get('PATH', None) if path is None: return [] for p in os.environ.get('PATH', '').split(os.pathsep): p = os.path.join(p, name) if os.access(p, flags): result.append(p) for e in exts: pext = p + e if os.access(pext, flags): result.append(pext) return list(set(result)) if __name__ == "__main__": import argparse, sys try: # Import the anarci functions. from anarci import scheme_names, wrap , all_species, run_anarci except ImportError as e: print("Fatal Error:", e, file=sys.stderr) sys.exit(1) parser = argparse.ArgumentParser(prog="ANARCI", description=description, epilog=epilogue,formatter_class=argparse.RawDescriptionHelpFormatter) parser.add_argument( '--sequence','-i', type=str, help="A sequence or an input fasta file", dest="inputsequence") parser.add_argument( '--outfile','-o', type=str, default=False, help="The output file to use. Default is stdout", dest="outfile") parser.add_argument( '--scheme','-s', type=str, choices=scheme_names, default="imgt", help="Which numbering scheme should be used. i, k, c, m, w and a are shorthand for IMGT, Kabat, Chothia, Martin (Extended Chothia), Wolfguy and Aho respectively. Default IMGT", dest="scheme") parser.add_argument( '--restrict','-r', type=str, nargs="+", choices=["ig","tr","heavy", "light", "H", "K", "L", "A", "B"], default=False, help="Restrict ANARCI to only recognise certain types of receptor chains.", dest="restrict") parser.add_argument( '--csv', action='store_true', default=False, help="Write the output in csv format. Outfile must be specified. A csv file is written for each chain type _.csv. Kappa and lambda are considered together.", dest="csv") parser.add_argument( '--outfile_hits','-ht', type=str, default=False, help="Output file for domain hit tables for each sequence. Otherwise not output.", dest="hitfile") parser.add_argument( '--hmmerpath','-hp', type=str, default="", help="The path to the directory containing hmmer programs. (including hmmscan)", dest="hmmerpath") parser.add_argument( '--ncpu','-p', type=int, default=1, help="Number of parallel processes to use. Default is 1.", dest="ncpu") parser.add_argument( '--assign_germline', action = 'store_true', default=False, help="Assign the v and j germlines to the sequence. The most sequence identical germline is assigned.", dest="assign_germline") parser.add_argument( '--use_species', type=str, help="Use a specific species in the germline assignment. If not specified, only human and mouse germlines will be considered.", choices=all_species, dest="use_species") parser.add_argument( '--bit_score_threshold', type=int, default=80, help="Change the bit score threshold used to confirm an alignment should be used.", dest="bit_score_threshold") args = parser.parse_args() ###################### # Input housekeeping # ###################### if len(sys.argv) <2: parser.print_help() sys.exit(0) outfile = False if args.outfile: path, fname = os.path.split(args.outfile) if (not path) or os.path.exists(path): outfile = args.outfile else: print("Error: Output file path does not exist", file=sys.stderr) sys.exit(1) if args.csv and not args.outfile: print("Error: When --csv option is used an ouput file name must be given.", file=sys.stderr) sys.exit(1) hitfile = False if args.hitfile: path, fname = os.path.split(args.hitfile) if (not path) or os.path.exists(path): hitfile = args.hitfile else: print("Error: Hit output file path does not exist", file=sys.stderr) sys.exit(1) # Check that hmmscan can be found in the path if args.hmmerpath: hmmerpath=args.hmmerpath scan_path = os.path.join( hmmerpath, "hmmscan" ) if not ( os.path.exists( scan_path ) and os.access(scan_path, os.X_OK)): print("Error: No hmmscan executable file found in directory: %s"%(hmmerpath), file=sys.stderr) sys.exit(1) elif not which("hmmscan"): print("Error: hmmscan was not found in the path. Either install and add to path or provide path with commandline option.", file=sys.stderr) sys.exit(1) # Check if there should be some restriction as to which chain types should be numbered. # If it is not the imgt scheme they want then restrict to only igs (otherwise you'll hit assertion errors) types_to_chains = {"ig":["H","K","L"], "tr":["A", "B","G","D"], "heavy":["H"], "light":["K","L"] } if args.restrict: allow = [] for r in args.restrict: try: allow += types_to_chains[r] except KeyError: allow.append(r) allow = set(allow) else: allow = set(["H","K","L","A","B","G","D"]) if args.scheme not in ("imgt","i", "aho","a") and allow - set(["H","K","L"]): print("Warning: Non IG chains cannot be numbered with the %s scheme. These will be ignored."%args.scheme, file=sys.stderr) allow = allow - set(["A","B","G","D"]) allowed_species = ['human', 'mouse'] if args.use_species: assert args.use_species in all_species, 'Unknown species' allowed_species = [args.use_species] ########################### # Do numbering and output # ########################### try: sequences, numbered, alignment_details, hit_tables = run_anarci(args.inputsequence, scheme=args.scheme, output=True, outfile=outfile, csv=args.csv, allow=allow, ncpu=args.ncpu, assign_germline=args.assign_germline, allowed_species=allowed_species, bit_score_threshold=args.bit_score_threshold ) if hitfile: with open( hitfile, "w") as outfile: print("# Hit file for ANARCI", file=outfile) for i in range(len(sequences)): name, sequence = sequences[i] print("NAME ", name, file=outfile) print("SEQUENCE "+'\n'.join(['\nSEQUENCE '.join(wrap(block, width=71)) for block in sequence.splitlines()]), file=outfile) pad = max(list(map( len, hit_tables[i][0] )) ) for line in hit_tables[i]: print(" ".join( [ str(_).rjust(pad) for _ in line ]), file=outfile) print("//", file=outfile) except Exception as e: # An error occurred. Report to screen and die gracefully. print("Error: ", e, file=sys.stderr) sys.exit(1) sys.exit(0) ================================================ FILE: build_pipeline/FastaIO.py ================================================ #!/usr/bin/env python """ Custom class to parse FASTA files. @author J. Leem jinwoo.leem [~at~] gmail.com """ def chunkify(fh): """ Divides FASTA files into chunks. """ chunk = "" chunk_start = False description, seq = "", "" for line in fh: line = line.strip() # Skip over empty lines. if not line: continue # FASTA records always start with ">" # Case 1: No chunk has ever been defined # so we start a new one. if line[0] == ">" and not chunk_start: chunk_start = True description = line[1:] continue # Case 2: We have found at least one chunk, # so let's yield a FASTARecord object when we see the next ">" elif line[0] == ">" and chunk_start: yield FASTARecord( description, chunk ) # Now it's a new record, so start a new description # Wipe out the existing sequence. description = line[1:] chunk = "" elif line[0] != ">" and chunk_start: chunk += line yield FASTARecord( description, chunk ) class FASTARecord(object): def __init__(self, description, seq): self.description = description.strip(">") self.seq = seq ================================================ FILE: build_pipeline/FormatAlignments.py ================================================ """ Program to reformat the v and j alignments for each species into a single alignment with combinations of the two genes. v genes will be trimmed to imgt position 107 ( three after the cysteine at 104 ) j genes are a little bit more complicated as they are not aligned. We therefore align them with muscle and *do not allow* gaps to open. Use a high gapopen penalty. -8 seems to be the first integer to work. Set it to -10. muscle -in js.fasta -gapopen -10 We have a reference sequence in the alignment for which the numbering is known. Therefore make the right hand most column imgt 128. Any further are trimmed. Once aligned, all residue before imgt 116 are ignored (101 in Chothia heavy). All before are changed to gaps. The rationale is the alignment in this region is not structurally valid anyway. Want the columns because of the potential imgt states. HMMER needs a single alignment to build a HMM. We therefore make putative germline sequences by combining all the v sequences with all the j sequences. (Each v sequence appears n(j) times). These are chucked into curated alignments and hmmbuild used to create the HMMs. """ import os, sys from subprocess import Popen, PIPE from FastaIO import chunkify amino_acids = sorted(list("QWERTYIPASDFGHKLCVNM")) acid_set = set( amino_acids+["."]) file_path = os.path.split(__file__)[0] fasta_path = os.path.join( file_path, "IMGT_sequence_files", "fastafiles" ) curated_path = os.path.join( file_path, "curated_alignments" ) all_species = ["Homo_sapiens", "Mus", "Rattus_norvegicus", "Oryctolagus_cuniculus", "Macaca_mulatta", "Sus_scrofa", "Vicugna_pacos", "Bos_taurus"] all_tr_species = ["Homo_sapiens", "Mus", ] translations = {"Homo_sapiens":"human", "Mus":"mouse", "Rattus_norvegicus":"rat", "Oryctolagus_cuniculus":"rabbit", "Macaca_mulatta":"rhesus", "Sus_scrofa":"pig", "Vicugna_pacos":"alpaca", "Bos_taurus":"cow"} def read_alignment(input_file, read_all=False, region_name=""): """ """ imgt_fields = ["accession_number", "allele", "species", "functionality", "region", "start_and_end_positions_IMGT/LIGM-DB_accession_number", "number_of_nucleotides", "codon_start", "number_nucleotides_added_in_5'_compared_IMGT/LIGM-DB", "number_nucleotides_added_in_3'_compared_IMGT/LIGM-DB", "number_nucleotides_to_correct_sequencing_errors", "number_of_amino_acids", "number_of_characters", "partial", "reverse"] records = {} try: handle = open(input_file, "r") except IOError: print('Warning file', input_file, 'could not be found') return records region="" for record in chunkify(handle): fields = dict(list(zip( imgt_fields, record.description.split("|"))) ) sequence = record.seq # These are the ones we care about and will be used try: if fields['accession_number'] == 'None':continue if fields["functionality"]=="F" and not fields["partial"].strip() and not fields["reverse"].strip(): if read_all: pass elif fields["allele"].split("*")[-1].strip()!="01": continue if set(list(sequence))- acid_set: # print >> sys.stderr,"Unexpected character in sequence" # print >> sys.stderr,sequence continue if fields["region"] == region_name: records[ (fields["species"], fields[ "allele" ] ) ] = sequence elif region_name.startswith("C"): if len(sequence) < 100: continue # Filter out partial sequences that IMGT have not.... elif region: assert fields["region"]==region, "The region for some the entries is different" region=fields["region"] records[ (fields["species"], fields[ "allele" ] ) ] = sequence except KeyError: print("Something wrong with the file %s"%input_file) continue handle.close() return records def read_fasta(filename): """ Read a sequence file and parse as description, string """ handle = open(filename, "r") records = [ [s.description, s.seq.replace(" ","")] for s in chunkify(handle) ] handle.close() return records def write_fasta( sequences ): """ Write a fasta file containing all sequences """ filename = os.path.join( file_path, "muscle_alignments", "all_js.fasta" ) with open( filename, "w" ) as outfile: for al in sequences: for s in sequences[al]: print(">%s|%s|%s|%s"%tuple( list(al)+list(s) ), file=outfile) print(sequences[al][s], file=outfile) return filename def format_c_genes(calignments, gene_name=""): new_calignments = {} for entry in calignments: if len(calignments[entry]) == 0: continue new_calignments[entry] = {} for seq in calignments[entry]: cspecies, callele = seq sequence = calignments[entry][seq] # IMGT has a different alignment for C-genes than V and J genes. # This condition filters out the two sequeces that are not in the consistent format for C gene. #tttt = sequence[:132].ljust( 132 ).replace(" ",".") tttt = sequence[:149].ljust( 149 ).replace(" ",".") if tttt[104] != "C" or tttt[33] != "C": print("Something wrong with ", entry, gene_name, sequence) continue max_length = 149 new_name = "%s_%s_%s" % (gene_name, cspecies, callele) new_calignments[entry][ new_name ] = sequence[:max_length].ljust( max_length ).replace(" ",".") return new_calignments def format_j_genes(jalignments): reference = ("WFAYWGQGTLVTVSA", 4 , 19 ) # seq start end ffile = write_fasta(jalignments) al_filename = os.path.join( file_path, "muscle_alignments", "all_js_aligned.fasta" ) if sys.platform == "darwin": pr = Popen( [ "muscle_macOS", "-in", ffile, "-gapopen", "-10", "-out", al_filename, ], stdout=PIPE, stderr=PIPE ) else: pr = Popen( [ "muscle", "-in", ffile, "-gapopen", "-10", "-out", al_filename, ], stdout=PIPE, stderr=PIPE ) o, e = pr.communicate() aligned = read_fasta( al_filename ) new_jalignments = {} # Find the reference sequence and what we need to do to map for name, sequence in aligned: if name == "Mus|H|Mus musculus|IGHJ3*01": ref_aligned = sequence break start = ref_aligned.index( reference[0] ) if start > reference[1]: START = start+1-reference[1] else: START = 0 END = start + 15 for name, sequence in aligned: species, chain_type, id1, id2 = name.strip(">").split("|") if (species, chain_type) not in new_jalignments: new_jalignments[(species, chain_type)] = {} # We take the last 13 of the new alignment and pad into 20 long string new_jalignments[(species, chain_type)][ (id1, id2) ] = sequence[START: END][-14:].rjust(20).replace(" ", ".") return new_jalignments def format_v_genes(valignments): """ Take upto and including imgt position 108 in the alignment. Pad with gaps on the right side """ new_valignments = {} for entry in valignments: species, chain_type = entry new_valignments[entry] = {} for seq in valignments[entry]: sequence = valignments[entry][seq] if chain_type == "L" and translations[species] == "rhesus": sequence = rhesus_lambda(sequence) elif chain_type == "A" and translations[species] == "mouse": sequence = mouse_alpha(sequence) elif chain_type == "D" and translations[species] == "mouse": sequence = mouse_delta(sequence) new_valignments[entry][ seq ] = sequence[:108].ljust( 108 ).replace(" ",".") if new_valignments[entry][ seq ][103] != "C" or new_valignments[entry][ seq ][22] != "C": sys.stderr.write("Warning - this alignment doesn't feature CYS at position 23 and/or position 104.\n") sys.stderr.write("%s,%s,%s\n" % (new_valignments[entry][ seq ], entry, seq)) return new_valignments def mouse_delta(sequence): """ Mouse delta chains have insertions. This screws up the alignment to everything else - not really IMGT gapped. This is particularly bad because alignment is not even consistent within the chain and species!!! Remove and return """ # Check in here because not all are bad...recheck again in the format v genes just to make sure. if sequence[103] != "C" or sequence[22] != "C": return sequence[ : 8 ] + sequence[ 9:85 ] + sequence[86:] return sequence def rhesus_lambda(sequence): """ Rhesus lambda chains have insertions. This screws up the alignment to everything else - not really IMGT gapped. Remove and return """ return sequence[:20]+sequence[21:51]+ sequence[53:] def mouse_alpha(sequence): """ Mouse alpha chains have insertions. This screws up the alignment to everything else - not really IMGT gapped. Remove and return """ return sequence[:8]+sequence[9:85]+sequence[86:] def combine_sequences(vsequences, jsequences): """ Do a pairwise combination of the v and j sequences to get putative germline sequences for the species. """ combined_sequences = {} for v in vsequences: vspecies, vallele = v for j in jsequences: _, jallele= j combined_sequences[("%s_%s_%s"%(vspecies, vallele,jallele)).replace(" ", "_")] = vsequences[v] + jsequences[j] return combined_sequences def make_putative_alignments( vsequences, jsequences, calignments = None ): all_sequences = {} for species, chain_type in vsequences: if (species, chain_type) not in jsequences or (species, chain_type) not in vsequences: continue combined_sequences = combine_sequences( vsequences[ (species, chain_type) ], jsequences[ (species, chain_type) ] ) all_sequences[ (species, chain_type) ] = combined_sequences output_stockholm( combined_sequences, "%s_%s"%(translations[species], chain_type) ) # Write just the V and J combinations output_stockholm_all( all_sequences ) # Write the V and J combinations and the c-domains if calignments: output_stockholm_all_and_C(all_sequences, calignments ) def write_germlines(vsequences, jsequences): """ Compile a dictionary containing all the v and j germline sequences. """ all_gene_alignments = {"J":{},"V":{}} for species, chain_type in vsequences: for ((_,gene), seq) in vsequences[ (species, chain_type) ].items(): assert len(seq)==108, species+_+gene+chain_type+_+seq+str(len(seq)) try: all_gene_alignments["V"][ chain_type ][ translations[species] ][ gene ] = seq.replace(".","-") + "-"*20 except KeyError: try: all_gene_alignments["V"][ chain_type ][ translations[species] ]= { gene : seq.replace(".","-") + "-"*20 } except KeyError: try: all_gene_alignments["V"][ chain_type ] = { translations[species] : { gene : seq.replace(".","-") + "-"*20 } } except KeyError: all_gene_alignments["V"] = { chain_type : { translations[species] : { gene : seq.replace(".","-") + "-"*20 } } } for ((_,gene), seq) in jsequences.get((species, chain_type),{} ).items(): assert len(seq)==20 try: all_gene_alignments["J"][ chain_type ][ translations[species] ][ gene ] = "-"*108 + seq.replace(".","-") except KeyError: try: all_gene_alignments["J"][ chain_type ][ translations[species] ]= { gene : "-"*108 + seq.replace(".","-") } except KeyError: try: all_gene_alignments["J"][ chain_type ] = { translations[species] : { gene : "-"*108 + seq.replace(".","-")} } except KeyError: all_gene_alignments["J"] = { chain_type : { translations[species] : { gene : "-"*108 + seq.replace(".","-") } } } output_python_lookup(all_gene_alignments) def output_python_lookup(all_gene_alignments, path=None): """ Format a lookup table for the germline sequences. This can then be used by the final program. """ if path is None: path = curated_path filename = os.path.join( path, "germlines.py") with open(filename,'w') as outfile: print("all_germlines = "+repr(all_gene_alignments), file=outfile) def write_stockholm( sequences, ID, outfile): print("# STOCKHOLM 1.0", file=outfile) print("#=GF ID %s"%ID, file=outfile) pad_length = max(list(map(len, list(sequences.keys()))))+1 for s in sequences: print(s.replace(" ", "_").ljust(pad_length), sequences[s].replace(".","-"), file=outfile) print("#=GC RF".ljust(pad_length), "x"*len(sequences[s]), file=outfile) print("//", file=outfile) def output_C_alignments(alignments, c_name): """ Write a stockholm for all C domains. """ for species, chain_type in alignments: output_stockholm( alignments[(species, chain_type) ], "%s_%s_%s"%(c_name, translations[species], chain_type) ) def output_stockholm_all_and_C(all_sequences, all_C_alignments, path=None): """ Output a minimal stockholm alignment file for all sequences. """ if path is None: path = curated_path filename = os.path.join( path, "ALL_AND_C.stockholm") with open( filename, "w") as outfile: for species, chain_type in all_sequences: sequences = all_sequences[(species, chain_type)] l = len(list(sequences.values())[0]) assert all( [1 if l == len(sequences[s]) else 0 for s in sequences]), "Not all sequences in alignment are the same length" write_stockholm( sequences, "%s_%s"%(translations[species], chain_type), outfile) for c_name in all_C_alignments: for species, chain_type in all_C_alignments[c_name] : write_stockholm( all_C_alignments[c_name][(species, chain_type) ], "%s_%s_%s"%(translations[species], chain_type,c_name), outfile) return filename def output_stockholm_all(all_sequences, path=None): """ Output a minimal stockholm alignment file for all sequences. """ if path is None: path = curated_path filename = os.path.join( path, "ALL.stockholm") with open( filename, "w") as outfile: for species, chain_type in all_sequences: sequences = all_sequences[(species, chain_type)] l = len(list(sequences.values())[0]) assert all( [1 if l == len(sequences[s]) else 0 for s in sequences]), "Not all sequences in alignment are the same length" write_stockholm( sequences, "%s_%s"%(translations[species], chain_type), outfile) return filename def output_stockholm(sequences, name, path=None): """ Output a minimal stockholm alignment file. """ if path is None: path = curated_path filename = os.path.join( path, "%s.stockholm"%name) l = len(list(sequences.values())[0]) assert all( [1 if l == len(sequences[s]) else 0 for s in sequences]), "Not all sequences in alignment are the same length" with open( filename, "w") as outfile: write_stockholm( sequences, name, outfile) return filename def main(): """ Read in the raw v and j alignments Format them and combine the sequences """ print("\nFormatting alignments\n") valignments, jalignments = {},{} all_valignments, all_jalignments = {},{} #ccalignments, c1alignments, c2alignments, c3alignments = {}, {}, {}, {} print("IGs") for species in all_species: for chain_type in "HKL": if not os.path.isfile( os.path.join( fasta_path, "%s_%sV.fasta" % (species,chain_type)) ): continue print(species, chain_type) valignments[ (species, chain_type) ] = read_alignment( os.path.join( fasta_path , "%s_%sV.fasta"%(species, chain_type) ), region_name= "V-REGION" ) jalignments[ (species, chain_type) ] = read_alignment( os.path.join( fasta_path , "%s_%sJ.fasta"%(species, chain_type) ), region_name= "J-REGION") ### Comment out if you want constant regions? #if chain_type == "H": # c1alignments[ (species, chain_type) ] = read_alignment( os.path.join( fasta_path , "%s_%sC.fasta"%(species, chain_type) ), region_name="CH1") # c2alignments[ (species, chain_type) ] = read_alignment( os.path.join( fasta_path , "%s_%sC.fasta"%(species, chain_type) ), region_name="CH2") # c3alignments[ (species, chain_type) ] = read_alignment( os.path.join( fasta_path , "%s_%sC.fasta"%(species, chain_type) ), region_name="CH3") #else: # ccalignments[ (species, chain_type) ] = read_alignment( os.path.join( fasta_path , "%s_%sC.fasta"%(species, chain_type) ), region_name="C-REGION") all_valignments[ (species, chain_type) ] = read_alignment( os.path.join( fasta_path , "%s_%sV.fasta"%(species, chain_type) ), region_name= "V-REGION", read_all=True) all_jalignments[ (species, chain_type) ] = read_alignment( os.path.join( fasta_path , "%s_%sJ.fasta"%(species, chain_type) ), region_name= "J-REGION", read_all=True) print("\nTRs") for species in all_tr_species: for chain_type in "ABGD": if not os.path.isfile( os.path.join( fasta_path, "%s_%sV.fasta" % (species,chain_type)) ): continue print(species, chain_type) valignments[ (species, chain_type) ] = read_alignment( os.path.join( fasta_path , "%s_%sV.fasta"%(species, chain_type) )) jalignments[ (species, chain_type) ] = read_alignment( os.path.join( fasta_path , "%s_%sJ.fasta"%(species, chain_type) )) all_valignments[ (species, chain_type) ] = read_alignment( os.path.join( fasta_path , "%s_%sV.fasta"%(species, chain_type) ), read_all=True) all_jalignments[ (species, chain_type) ] = read_alignment( os.path.join( fasta_path , "%s_%sJ.fasta"%(species, chain_type) ), read_all=True) valignments = format_v_genes(valignments) jalignments = format_j_genes(jalignments) #ccalignments = format_c_genes(ccalignments, 'CC') #c1alignments = format_c_genes(c1alignments, 'C1') #c2alignments = format_c_genes(c2alignments, 'C2') #c3alignments = format_c_genes(c3alignments, 'C3') all_valignments = format_v_genes(all_valignments) all_jalignments = format_j_genes(all_jalignments) #all_C_alignments = { "CC":ccalignments,"C1":c1alignments,"C2":c2alignments,"C2":c2alignments} write_germlines( all_valignments, all_jalignments ) # Combine the alignments to make putative germline alignments (obviously no d gene in there for Hs) # Write them to a stockholm alignment file. combined_sequences = make_putative_alignments( valignments, jalignments ) # Write the constant domains each to file. #output_C_alignments(ccalignments, 'CC') #output_C_alignments(c1alignments, 'C1') #output_C_alignments(c2alignments, 'C2') #output_C_alignments(c3alignments, 'C3') main() ================================================ FILE: build_pipeline/RUN_pipeline.sh ================================================ # Run the pipeline to get the sequences, format them and build the databases DIR="." # Rip the sequences from the imgt website. HTML may change in the future. mkdir -p $DIR/IMGT_sequence_files/htmlfiles mkdir -p $DIR/IMGT_sequence_files/fastafiles python $DIR/RipIMGT.py # Format the alignments and handle imgt oddities to put into a consistent alignment format mkdir -p $DIR/curated_alignments mkdir -p $DIR/muscle_alignments python $DIR/FormatAlignments.py # Build the hmms for each species and chain. # --hand option required otherwise it will delete columns that are mainly gaps. We want 128 columns otherwise ARNACI will fall over. mkdir -p $DIR/HMMs hmmbuild --hand $DIR/HMMs/ALL.hmm $DIR/curated_alignments/ALL.stockholm #hmmbuild --hand $DIR/HMMs/ALL_AND_C.hmm $DIR/curated_alignments/ALL_AND_C.stockholm # Turn the output HMMs file into a binary form. This is required for hmmscan that is used in ARNACI. hmmpress -f $DIR/HMMs/ALL.hmm #hmmpress -f $DIR/HMMs/ALL_AND_C.hmm ================================================ FILE: build_pipeline/RipIMGT.py ================================================ """ A program to rip the sequences from genedb and parse them into fasta files Ripped from here: https://www.imgt.org/vquest/refseqh.html """ from html.parser import HTMLParser from html.entities import name2codepoint import urllib.request, urllib.parse, urllib.error, os, sys # Set globals file_path = os.path.split(__file__)[0] html_outpath = os.path.join( file_path, "IMGT_sequence_files", "htmlfiles" ) fasta_outpath = os.path.join( file_path, "IMGT_sequence_files", "fastafiles" ) # Define where to point the urls to. # We have heavy, kappa, lambda, alpha, beta, gamma and delta chains. # Both the v genes (imgt gapped amino acids) and the j genes (amino acids, are not gapped) # Urls as of 04-12-14 urls = { "HV": "https://www.imgt.org/genedb/GENElect?query=7.3+IGHV&species=%s", "HJ": "https://www.imgt.org/genedb/GENElect?query=7.6+IGHJ&species=%s", "KV": "https://www.imgt.org/genedb/GENElect?query=7.3+IGKV&species=%s", "KJ": "https://www.imgt.org/genedb/GENElect?query=7.6+IGKJ&species=%s", "LV": "https://www.imgt.org/genedb/GENElect?query=7.3+IGLV&species=%s", "LJ": "https://www.imgt.org/genedb/GENElect?query=7.6+IGLJ&species=%s", "AV": "https://www.imgt.org/genedb/GENElect?query=7.3+TRAV&species=%s", "AJ": "https://www.imgt.org/genedb/GENElect?query=7.6+TRAJ&species=%s", "BV": "https://www.imgt.org/genedb/GENElect?query=7.3+TRBV&species=%s", "BJ": "https://www.imgt.org/genedb/GENElect?query=7.6+TRBJ&species=%s", "GV": "https://www.imgt.org/genedb/GENElect?query=7.3+TRGV&species=%s", "GJ": "https://www.imgt.org/genedb/GENElect?query=7.6+TRGJ&species=%s", "DV": "https://www.imgt.org/genedb/GENElect?query=7.3+TRDV&species=%s", "DJ": "https://www.imgt.org/genedb/GENElect?query=7.6+TRDJ&species=%s" #"HC": "https://www.imgt.org/genedb/GENElect?query=7.3+IGHC&species=%s", #"KC": "https://www.imgt.org/genedb/GENElect?query=7.3+IGKC&species=%s", #"LC": "https://www.imgt.org/genedb/GENElect?query=7.3+IGLC&species=%s", } # Species as of 04-12-14 # Species as of 02-06-16 - alpaca added # These are retrieved for all the antibodies all_species = ["Homo+sapiens", "Mus", "Rattus+norvegicus", "Oryctolagus+cuniculus", "Macaca+mulatta", "Sus+scrofa", "Vicugna+pacos", "Bos+taurus"] # These are retrieved for the tcr chains. There are a few more for gamma and delta chains but # they are rare (structurally anyway) that it does not seem worth it. all_tr_species = ["Homo+sapiens", "Mus", ] # These do not have light chain sequences so we ignore (they're fish) # "Oncorhynchus+mykiss", # "Danio+rerio" ] # Html parser class. class GENEDBParser(HTMLParser): currenttag = None currentnamedent = None _data = [] def handle_starttag(self, tag, attrs): self.currenttag=tag def handle_endtag(self, tag): self.currenttag=None def handle_data(self, data): split = data.split("\n") start = sum([ 1 if l[0]==">" else 0 for l in split if len(l)]) if self.currenttag=="pre" and (self.currentnamedent ==">" or start): # Two different ways of parsing the html based on how IMGT have formatted the pages. # For some reason they format gene db differently sometimes (legacy?) if start > 1: # If you encounter more than one line in the data with a fasta ">" symbol, all sequences will be in the same packet name, sequence = None, "" for l in split: if not l: continue if l[0]==">": if sequence: self._data.append( (name, sequence) ) name, sequence = None, "" name = l else: sequence += l.replace(" ", "") if name and sequence: self._data.append( (name, sequence) ) else: # Otherwise it will be done entry by entry print("1") try: name = split[0] except IndexError: return sequence = ("".join( split[1:])).replace(" ", "") self._data.append( (name, sequence) ) def handle_entityref(self, name): self.currentnamedent = chr(name2codepoint[name]) def handle_charref(self, name): if name.startswith('x'): self.currentnamedent = chr(int(name[1:], 16)) else: self.currentnamedent = chr(int(name)) def rip_sequences(self,htmlstring): """ Method for this subclass that automates the return of data """ self.reset() self._data = [] self.currenttag = None self.currentnamedent = None self.feed(htmlstring) self._data return self._data parser = GENEDBParser() def get_html(species, gene_type, force = True): """ Get the html from IMGT """ filename = os.path.join(html_outpath,"%s_%s.html"%(species.replace("+", "_"), gene_type) ) # If html file exists already if os.path.isfile(filename): return filename if urllib.request.urlretrieve( urls[gene_type]%species, filename ): return filename else: return False def write_fasta( sequences, species, gene_type ): """ Write a fasta file containing all sequences """ filename = os.path.join(fasta_outpath,"%s_%s.fasta"%(species.replace("+", "_"), gene_type) ) with open(filename, "w") as outfile: for name, sequence in sequences: print(">%s"%name, file=outfile) print(sequence, file=outfile) def ripfasta(species, gene_type, force = True): """ Rip the fasta sequences for a species and gene type from IMGT """ htmlfile = get_html(species, gene_type, force) if htmlfile: with open(htmlfile) as infile: sequences = parser.rip_sequences(infile.read()) if sequences: write_fasta(sequences, species, gene_type ) else: print("Bad parse", end=' ', file=sys.stderr) return 1 else: print("Bad Url", end=' ', file=sys.stderr) return 1 def main(): """ For all V and J gene types (H,K,L,A,B,G,D) parse IMGT database and extract fasta files """ for gene_type in urls: for species in all_species: if gene_type[0] in "ABGD" and species not in all_tr_species: continue # we don't want TCRs for all organisms if gene_type[0] in "KL" and species == "Vicugna+pacos": continue # alpacas don't have light chains if ripfasta(species, gene_type, force = False): print("Failed to retrieve %s %s"%(species, gene_type), file=sys.stderr) else: print("Parsed and saved %s %s"%(species, gene_type)) main() ================================================ FILE: build_pipeline/__init__.py ================================================ ================================================ FILE: build_pipeline/test.csv_H.csv ================================================ Id,domain_no,hmm_species,chain_type,e-value,score,seqstart_index,seqend_index,identity_species,v_gene,v_identity,j_gene,j_identity,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,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112A,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128 Input sequence,0,human,H,2.2e-56,180.6,0,120,,,0.00,,0.00,Q,V,Q,L,V,E,S,G,G,-,G,V,V,Q,P,G,R,S,L,R,L,S,C,A,A,S,G,F,T,F,-,-,-,-,S,S,Y,G,M,H,W,V,R,Q,A,P,G,K,G,L,A,G,-,G,G,V,K,W,D,E,-,G,S,N,K,Y,D,A,D,S,V,K,-,G,R,F,T,I,S,R,D,N,S,K,N,T,L,Y,L,Q,M,N,S,L,R,A,E,D,T,A,V,Y,Y,C,A,R,A,G,A,W,G,G,S,Y,L,F,D,Y,W,G,Q,G,T,L,V,T,V,S,S ================================================ FILE: lib/python/anarci/__init__.py ================================================ __version__ = "1.b" __all__ = ["anarci", "schemes"] from .anarci import * ================================================ FILE: lib/python/anarci/anarci.py ================================================ # ANARCI - Antibody Numbering and Antigen Receptor ClassIfication # Copyright (C) 2016 Oxford Protein Informatics Group (OPIG) # # This program is free software: you can redistribute it and/or modify # it under the terms of the BSD 3-Clause License. # # You should have received a copy of the BSD 3-Clause Licence # along with this program. If not, see . ''' ANARCI - Antigen Receptor Numbering And ClassIfication Oxford Protein Informatics Group (OPIG). 2015-17 ANARCI performs alignments of sequences to databases of Hidden Markov Models (HMMs). Those that align with a significant score are classified by species and chain type. They are then numbered with a scheme of the user's choosing. Currently implemented schemes: IMGT Chothia (IGs only) Kabat (IGs only) Martin / Enhanced Chothia (IGs only) AHo Wolfguy (IGs only) Currently recognisable species (chains): Human (heavy, kappa, lambda, alpha, beta) Mouse (heavy, kappa, lambda, alpha, beta) Rat (heavy, kappa, lambda) Rabbit (heavy, kappa, lambda) Pig (heavy, kappa, lambda) Rhesus Monkey (heavy, kappa) Notes: o Use assign_germline to get a better species assignment o Each scheme has been implemented to follow the published specification as closely as possible. However, in places some schemes do not specifiy where insertions should be placed (e.g. imgt FW3). In these cases the HMM alignment is used. This can give rise to inserted positions that were not described by the respective paper. o AHo is implemented heuristically based on chain type. If one grafted a foreign CDR1 loop onto, say, a VH domain, it will be numbered as if it is a CDRH1 loop. ''' import os import sys import tempfile import gzip import math from functools import partial from textwrap import wrap from subprocess import Popen, PIPE from itertools import groupby, islice from multiprocessing import Pool from Bio.SearchIO.HmmerIO import Hmmer3TextParser as HMMERParser # Import from the schemes submodule from .schemes import * from .germlines import all_germlines all_species = list(all_germlines['V']['H'].keys()) amino_acids = sorted(list("QWERTYIPASDFGHKLCVNM")) set_amino_acids = set(amino_acids) anarci_path = os.path.split(__file__)[0] scheme_short_to_long = { "m":"martin", "c":"chothia", "k":"kabat","imgt":"imgt", "kabat":"kabat", "chothia":"chothia", "martin":"martin", "i":"imgt", "a":"aho","aho":"aho","wolfguy":"wolfguy", "w":"wolfguy"} scheme_names = list(scheme_short_to_long.keys()) chain_type_to_class = {"H":"H", "K":"L", "L":"L", "A":"A", "B":"B", "G":"G", "D":"D"} HMM_path = os.path.join( anarci_path, "dat", "HMMs" ) all_reference_states = list(range( 1, 129)) # These are the IMGT reference states (matches) class HMMscanError(Exception): def __init__(self, message): # Call the base class constructor with the parameters it needs super(HMMscanError, self).__init__(message) ## Utility functions ## def read_fasta(filename): """ Read a sequence file and parse as description, string """ # return [ r for r in fasta_iter(filename) ] try: return [r for r in fasta_iter(filename)] except StopIteration: pass # Do nothing when the generator stops def fasta_iter(fasta_name): """ Given a fasta file, yield tuples of header, sequence https://www.biostars.org/p/710/ """ if fasta_name.endswith('.gz'): fh = gzip.open(fasta_name, 'rt') # 'rt' for text mode, required for Python 3 else: fh = open(fasta_name, 'r') faiter = (x[1] for x in groupby(fh, lambda line: line[0] == ">")) for header in faiter: try: header = next(header)[1:].strip() seq = "".join(s.strip() for s in next(faiter)) yield header, seq except StopIteration: break def write_fasta(sequences, f): """ Write a list of sequences to file. should be a list of name, sequence tuples f should be an open file """ for name, sequence in sequences: print(">%s"%name, file=f) print('\n'.join(['\n'.join(wrap(block, width=80)) for block in sequence.splitlines()]), file=f) def validate_sequence(sequence): """ Check whether a sequence is a protein sequence or if someone has submitted something nasty. """ assert len(sequence) < 10000, "Sequence too long." assert not (set( sequence.upper() ) - set_amino_acids ), "Unknown amino acid letter found in sequence: %s"% ", ".join(list((set( sequence.upper() ) - set_amino_acids ))) return True def validate_numbering(xxx_todo_changeme, name_seq=[]): """ Wrapper to do some basic validation of the numbering. Further validation could be done but at the moment we just check that the numbering indices are incremental (they should be) """ (numbering, start, end) = xxx_todo_changeme name, seq = name_seq last = -1 nseq="" for (index, _), a in numbering: assert index >= last, "Numbering was found to decrease along the sequence %s. Please report."%name last = index nseq += a.replace("-","") assert nseq in seq.replace("-",""), "The algorithm did not number a contiguous segment for sequence %s. Please report"%name return numbering, start, end def grouper(n, iterable): ''' Group entries of an iterable by n ''' it = iter(iterable) def take(): while 1: yield list( islice(it,n) ) return iter(take().__next__, [] ) def anarci_output(numbered, sequences, alignment_details, outfile, sequence_id=None, domain_id=None): """ Outputs to open file If sequence_id is specified as an integer then only this sequence will be printed. Otherwise all sequences will be printed. If domain_id is specified as an integer then only this domain will be printed. Otherwise all domains will be printed. If domain_id is specified then sequence_id must also be specified. """ assert (sequence_id is not None) or (sequence_id is None and domain_id is None), "If domain_id is specified, sequence_id must also be specified." for i in range(len(numbered)): if sequence_id is None: print("# %s"%sequences[i][0], file=outfile) # print the name if numbered[i] is not None: if sequence_id is not None: if i != sequence_id: continue print("# ANARCI numbered", file=outfile) for j in range( len(numbered[i])): # Iterate over domains if domain_id is not None: if j != domain_id: continue print("# Domain %d of %d"%(j+1, len(numbered[i]) ), file=outfile) print("# Most significant HMM hit", file=outfile) print("#|species|chain_type|e-value|score|seqstart_index|seqend_index|", file=outfile) alignment_details[i][j]["evalue"] = str( alignment_details[i][j]["evalue"] ) print("#|%s|%s|%s|%.1f|%d|%d|"%tuple( [alignment_details[i][j][field] for field in ["species","chain_type","evalue","bitscore"]] +[ numbered[i][j][1], numbered[i][j][2]] ), file=outfile) if 'germlines' in alignment_details[i][j]: print('# Most sequence-identical germlines', file=outfile) print('#|species|v_gene|v_identity|j_gene|j_identity|', file=outfile) (species, vgene), vid =alignment_details[i][j]['germlines'].get('v_gene', [['','unknown'],0]) if vgene is None: vgene, vid = 'unknown', 0 (_,jgene), jid =alignment_details[i][j]['germlines'].get('j_gene', [['','unknown'],0]) if jgene is None: jgene, jid = 'unknown', 0 print('#|%s|%s|%.2f|%s|%.2f|'%(species, vgene, vid, jgene, jid ), file=outfile) chain_type = chain_type_to_class[ alignment_details[i][j]["chain_type"] ] print("# Scheme = %s"%alignment_details[i][j]["scheme"], file=outfile) if len( numbered[i][j][0] ) == 0: print("# Warning: %s scheme could not be applied to this sequence."%alignment_details[i][j]["scheme"], file=outfile) for (index, insertion), aa in numbered[i][j][0]: print(chain_type, ("%d"%index).ljust(5), insertion, aa, file=outfile) print("//", file=outfile) def csv_output(sequences, numbered, details, outfileroot): ''' Write numbered sequences to csv files. A csv file is written for each chain type. Kappa and Lambda chains are written to the same file The sequences will written aligned to the numbering scheme. Gaps in the sequences with respect to the alignment are written as a '-' @param sequences: List of name, sequence tuples @param numbered: Numbered sequences in the same order as the sequences list. @param details: List of alignment details in the same order as the sequences list. @param outfileroot: The file path for csv files to write. _.csv will be appended to this. ''' chain_types = {} pos_ranks = {} all_pos = {} _lc = {'K':'KL','L':'KL'} # Divide the set into chain types and find how to order the numbering for each type. for i in range( len(sequences) ): # Iterate over entries if numbered[i] is None: continue for j in range(len(numbered[i])): # Iterate over domains. # Record the chain type index c = details[i][j]['chain_type'] c = _lc.get(c, c) # Consider lambda and kappa together. chain_types.setdefault( c, [] ).append( (i,j) ) if c not in pos_ranks: pos_ranks[c] = {} all_pos[c] = set() # Update the insertion order for the scheme. i.e. is it A B C or C B A (e.g. imgt 111 and 112 repectively) l = -1 r = 0 for p, _ in numbered[i][j][0]: if p[0] != l: l = p[0] r = 0 else: r +=1 pos_ranks[c][p] = max( r, pos_ranks[c].get( p, r ) ) all_pos[c].add( p ) # Write a new file for each chain type. Kappa and lambda are written together as light chains. for cts in ['H','KL','A','B','G','D']: if cts in chain_types: with open( outfileroot + '_%s.csv'%cts, 'w' ) as out: # Sort the positions by index and insertion order positions = sorted( all_pos[cts], key = lambda p: (p[0], pos_ranks[cts][p]) ) # Header line fields = ['Id','domain_no','hmm_species','chain_type','e-value','score','seqstart_index','seqend_index', 'identity_species','v_gene','v_identity','j_gene','j_identity'] fields += [ ('%d%s'%(p)).strip() for p in positions ] print(','.join( fields ), file=out) # Iterate over the domains identified for i,j in chain_types[cts]: line = [ sequences[i][0].replace(',',' '), str(j), details[i][j].get('species',''), details[i][j].get('chain_type',''), str(details[i][j].get('evalue','')), str(details[i][j].get('bitscore','')), str(numbered[i][j][1]), str(numbered[i][j][2]), details[i][j].get('germlines',{}).get( 'v_gene',[['',''],0] )[0][0], details[i][j].get('germlines',{}).get( 'v_gene',[['',''],0] )[0][1], '%.2f'%details[i][j].get('germlines',{}).get( 'v_gene',[['',''],0] )[1], details[i][j].get('germlines',{}).get( 'j_gene',[['',''],0] )[0][1], '%.2f'%details[i][j].get('germlines',{}).get( 'j_gene',[['',''],0] )[1] ] # Hash the numbering. Insertion order has been preserved in the positions sort. d = dict( numbered[i][j][0] ) line += [ d.get(p,'-') for p in positions ] assert len( line ) == len( fields ) print(','.join( line ), file=out) ## Parsing and recognising domain hits from hmmscan ## def _domains_are_same(dom1, dom2): """ Check to see if the domains are overlapping. @param dom1: @param dom2: @return: True or False """ dom1, dom2 = sorted( [dom1, dom2], key=lambda x: x.query_start ) if dom2.query_start >= dom1.query_end: return False return True def _parse_hmmer_query(query, bit_score_threshold=80, hmmer_species=None): """ @param query: hmmer query object from Biopython @param bit_score_threshold: the threshold for which to consider a hit a hit. The function will identify multiple domains if they have been found and provide the details for the best alignment for each domain. This allows the ability to identify single chain fvs and engineered antibody sequences as well as the capability in the future for identifying constant domains. """ hit_table = [ ['id', 'description', 'evalue', 'bitscore', 'bias', 'query_start', 'query_end' ] ] # Find the best hit for each domain in the sequence. top_descriptions, domains,state_vectors = [], [], [] if query.hsps: # We have some hits # If we have specified a species, check to see we have hits for that species # Otherwise revert back to using any species if hmmer_species: #hit_correct_species = [hsp for hsp in query.hsps if hsp.hit_id.startswith(hmmer_species) and hsp.bitscore >= bit_score_threshold] hit_correct_species = [] for hsp in query.hsps: if hsp.bitscore >= bit_score_threshold: for species in hmmer_species: if hsp.hit_id.startswith(species): hit_correct_species.append(hsp) if hit_correct_species: hsp_list = hit_correct_species else: print("Limiting hmmer search to species %s was requested but hits did not achieve a high enough bitscore. Reverting to using any species" %(hmmer_species)) hsp_list = query.hsps else: hsp_list = query.hsps for hsp in sorted(hsp_list, key=lambda x: x.evalue): # Iterate over the matches of the domains in order of their e-value (most significant first) new=True if hsp.bitscore >= bit_score_threshold: # Only look at those with hits that are over the threshold bit-score. for i in range( len(domains) ): # Check to see if we already have seen the domain if _domains_are_same( domains[i], hsp ): new = False break hit_table.append( [ hsp.hit_id, hsp.hit_description, hsp.evalue, hsp.bitscore, hsp.bias, hsp.query_start, hsp.query_end] ) if new: # It is a new domain and this is the best hit. Add it for further processing. domains.append( hsp ) top_descriptions.append( dict( list(zip(hit_table[0], hit_table[-1])) ) ) # Add the last added to the descriptions list. # Reorder the domains according to the order they appear in the sequence. ordering = sorted( list(range(len(domains))), key=lambda x: domains[x].query_start) domains = [ domains[_] for _ in ordering ] top_descriptions = [ top_descriptions[_] for _ in ordering ] ndomains = len( domains ) for i in range(ndomains): # If any significant hits were identified parse and align them to the reference state. domains[i].order = i species, chain = top_descriptions[i]["id"].split("_") state_vectors.append( _hmm_alignment_to_states(domains[i], ndomains, query.seq_len) ) # Alignment to the reference states. top_descriptions[i][ "species"] = species # Reparse top_descriptions[i][ "chain_type"] = chain top_descriptions[i][ "query_start"] = state_vectors[-1][0][-1] # Make sure the query_start agree if it was changed return hit_table, state_vectors, top_descriptions def _hmm_alignment_to_states(hsp, n, seq_length): """ Take a hit hsp and turn the alignment into a state vector with sequence indices """ # Extract the strings for the reference states and the posterior probability strings reference_string = hsp.aln_annotation["RF"] state_string = hsp.aln_annotation["PP"] assert len(reference_string) == len(state_string), "Aligned reference and state strings had different lengths. Don't know how to handle" # Extract the start an end points of the hmm states and the sequence # These are python indices i.e list[ start:end ] and therefore start will be one less than in the text file _hmm_start = hsp.hit_start _hmm_end = hsp.hit_end _seq_start = hsp.query_start _seq_end = hsp.query_end # Extact the full length of the HMM hit species, ctype = hsp.hit_id.split('_') _hmm_length = get_hmm_length( species, ctype ) # Handle cases where there are n terminal modifications. # In most cases the user is going to want these included in the numbered domain even though they are not 'antibody like' and # not matched to the germline. Only allow up to a maximum of 5 unmatched states at the start of the domain # Adds a bug here if there is a very short linker between a scfv domains with a modified n-term second domain # Thus this is only done for the first identified domain ( hence order attribute on hsp ) if hsp.order == 0 and _hmm_start and _hmm_start < 5: n_extend = _hmm_start if _hmm_start > _seq_start: n_extend = min( _seq_start , _hmm_start - _seq_start ) state_string = '8'*n_extend + state_string reference_string = 'x'*n_extend + reference_string _seq_start = _seq_start - n_extend _hmm_start = _hmm_start - n_extend # Handle cases where the alignment should be extended to the end of the j-element # This occurs when there a c-terminal modifications of the variable domain that are significantly different to germline # Extension is only made when half of framework 4 has been recognised and there is only one domain recognised. if n==1 and _seq_end < seq_length and (123 < _hmm_end < _hmm_length): # Extend forwards n_extend = min( _hmm_length - _hmm_end, seq_length - _seq_end ) state_string = state_string + '8'*n_extend reference_string = reference_string + 'x'*n_extend _seq_end = _seq_end + n_extend _hmm_end = _hmm_end + n_extend # Generate lists for the states and the sequence indices that are included in this alignment hmm_states = all_reference_states[ _hmm_start : _hmm_end ] sequence_indices = list(range(_seq_start, _seq_end)) h, s = 0, 0 # initialise the current index in the hmm and the sequence state_vector = [] # iterate over the state string (or the reference string) for i in range( len(state_string) ): if reference_string[i] == "x": # match state state_type = "m" else: # insert state state_type = "i" if state_string[i] == ".": # overloading if deleted relative to reference. delete_state state_type = "d" sequence_index = None else: sequence_index = sequence_indices[s] # Store the alignment as the state identifier (uncorrected IMGT annotation) and the index of the sequence state_vector.append( ((hmm_states[h], state_type), sequence_index ) ) # Updates to the indices if state_type == "m": h+=1 s+=1 elif state_type == "i": s+=1 else: # delete state h+=1 return state_vector def parse_hmmer_output(filedescriptor="", bit_score_threshold=80, hmmer_species=None): """ Parse the output of HMMscan and return top alignment and the score table for each input sequence. """ results = [] if type(filedescriptor) is str: openfile = open elif type(filedescriptor) is int: openfile = os.fdopen with openfile(filedescriptor) as inputfile: p = HMMERParser( inputfile ) for query in p: results.append(_parse_hmmer_query(query,bit_score_threshold=bit_score_threshold,hmmer_species=hmmer_species )) return results def run_hmmer(sequence_list,hmm_database="ALL",hmmerpath="", ncpu=None, bit_score_threshold=80, hmmer_species=None): """ Run the sequences in sequence list against a precompiled hmm_database. Those sequence that have a significant hit with a bit score over a threshold will be recognised and an alignment given. The alignment will be used to number the sequence. @param sequence_list: a list of (name, sequence) tuples. Both are strings @param hmm_database: The hmm database to use. Currently, all hmms are in the ALL database. The code to develop new models is in build_pipeline in the git repo. @param hmmerpath: The path to hmmer binaries if not in the path @param ncpu: The number of cpu's to allow hmmer to use. """ # Check that hmm_database is available assert hmm_database in ["ALL"], "Unknown HMM database %s"%hmm_database HMM = os.path.join( HMM_path, "%s.hmm"%hmm_database ) # Create a fasta file for all the sequences. Label them with their sequence index # This will go to a temp file fasta_filehandle, fasta_filename = tempfile.mkstemp( ".fasta", text=True ) with os.fdopen(fasta_filehandle,'w') as outfile: write_fasta(sequence_list, outfile) output_filehandle, output_filename = tempfile.mkstemp( ".txt", text=True ) # Run hmmer as a subprocess if hmmerpath: hmmscan = os.path.join(hmmerpath,"hmmscan") else: hmmscan = "hmmscan" try: if ncpu is None: command = [ hmmscan, "-o", output_filename, HMM, fasta_filename] else: command = [ hmmscan, "-o", output_filename, "--cpu", str(ncpu), HMM, fasta_filename] process = Popen( command, stdout=PIPE, stderr=PIPE ) _, pr_stderr = process.communicate() if pr_stderr: _f = os.fdopen(output_filehandle) # This is to remove the filedescriptor from the os. I have had problems with it before. _f.close() raise HMMscanError(pr_stderr) results = parse_hmmer_output(output_filehandle, bit_score_threshold=bit_score_threshold, hmmer_species=hmmer_species) finally: # clear up os.remove(fasta_filename) os.remove(output_filename) return results def get_hmm_length( species, ctype ): ''' Get the length of an hmm given a species and chain type. This tells us how many non-insertion positions there could possibly be in a domain (127 or 128 positions under imgt) ''' try: return len(list(all_germlines['J'][ctype][species].values())[0].rstrip('-')) except KeyError: return 128 def number_sequence_from_alignment(state_vector, sequence, scheme="imgt", chain_type=None): """ Given you have an alignment. Give back the numbering @param state_vector: List of states from the hmm. Effectively these are imgt columns but CDR3 has not been redone. @param sequence: The original sequence string or list. @param scheme: The numbering scheme to apply @param chain_type: The type of chain to apply numbering for. Some schemes do not require this (IMGT). Others (e.g. Chothia/Wolfguy) do. @return: A list of numbering identifier / amino acids tuples over the domain that has been numbered. The indices of the start (inclusive) and end point (exclusive) in the sequence for the numbering """ scheme=scheme.lower() if scheme == "imgt": return number_imgt(state_vector, sequence) elif scheme == "chothia": if chain_type == "H": return number_chothia_heavy(state_vector, sequence) elif chain_type in "KL": return number_chothia_light(state_vector, sequence) else: raise AssertionError("Unimplemented numbering scheme %s for chain %s"%( scheme, chain_type)) elif scheme == "kabat": if chain_type == "H": return number_kabat_heavy(state_vector, sequence) elif chain_type in "KL": return number_kabat_light(state_vector, sequence) else: raise AssertionError("Unimplemented numbering scheme %s for chain %s"%( scheme, chain_type)) elif scheme == "martin": if chain_type == "H": return number_martin_heavy(state_vector, sequence) elif chain_type in "KL": return number_martin_light(state_vector, sequence) else: raise AssertionError("Unimplemented numbering scheme %s for chain %s"%( scheme, chain_type)) elif scheme == "aho": return number_aho(state_vector, sequence, chain_type) # requires the chain type to heuristically put the CDR1 gap in position. elif scheme == "wolfguy": if chain_type == "H": return number_wolfguy_heavy( state_vector, sequence ) elif chain_type in "KL": return number_wolfguy_light( state_vector, sequence ) else: raise AssertionError("Unimplemented numbering scheme %s for chain %s"%( scheme, chain_type)) else: raise AssertionError("Unimplemented numbering scheme %s for chain %s"%( scheme, chain_type)) def number_sequences_from_alignment(sequences, alignments, scheme="imgt", allow=set(["H","K","L","A","B","G","D"]), assign_germline=False, allowed_species=None): ''' Given a list of sequences and a corresponding list of alignments from run_hmmer apply a numbering scheme. ''' # Iteration over the sequence alignments performing the desired numbering numbered = [] alignment_details = [] hit_tables = [] for i in range(len(sequences)): # Unpack hit_table, state_vectors, detailss = alignments[i] # We may have multiple domains per sequence (e.g. single chain fvs). # Iterate over all the domains in the sequence that have been recognised (typcially only 1 with the current hmms available) hit_numbered, hit_details = [], [] for di in range( len( state_vectors ) ): state_vector = state_vectors[di] details = detailss[di] details["scheme"]=scheme details["query_name"]=sequences[i][0] # Only number things that are allowed. We still keep the alignment details and hit_table if state_vector and details["chain_type"] in allow: try: # Do the numbering and validate (for development purposes) hit_numbered.append( validate_numbering(number_sequence_from_alignment(state_vector, sequences[i][1], scheme=scheme, chain_type=details["chain_type"]), sequences[i] ) ) if assign_germline: details["germlines"] = run_germline_assignment( state_vector, sequences[i][1], details["chain_type"], allowed_species=allowed_species) hit_details.append( details ) except AssertionError as e: # Handle errors. Those I have implemented should be assertion. print(str(e), file=sys.stderr) raise e # Validation went wrong. Error message will go to stderr. Want this to be fatal during development. except Exception as e: print("Error: Something really went wrong that has not been handled", file=sys.stderr) print(str(e), file=sys.stderr) raise e if hit_numbered: numbered.append( hit_numbered ) alignment_details.append( hit_details ) else: numbered.append( None ) alignment_details.append( None ) hit_tables.append(hit_table) return numbered, alignment_details, hit_tables def get_identity( state_sequence, germline_sequence ): """ Get the partially matched sequence identity between two aligned sequences. Partial in the sense that gaps can be in the state_sequence. """ # Ensure that the sequences are the expected length assert len( state_sequence) == len(germline_sequence ) == 128 n, m = 0, 0 for i in range( 128 ): if germline_sequence[i] == "-":continue if state_sequence[i].upper() == germline_sequence[i]: m+=1 n+=1 if not n: return 0 return float(m)/n def run_germline_assignment(state_vector, sequence, chain_type, allowed_species=None ): """ Find the closest sequence identity match. """ genes={'v_gene': [None,None], 'j_gene': [None,None], } # Extract the positions that correspond to match (germline) states. state_dict = dict( ((i, 'm'),None) for i in range(1,129)) state_dict.update(dict(state_vector)) state_sequence = "".join([ sequence[state_dict[(i, 'm')]] if state_dict[(i,'m')] is not None else "-" for i in range(1,129) ]) # Iterate over the v-germline sequences of the chain type of interest. # The maximum sequence identity is used to assign the germline if chain_type in all_germlines["V"]: if allowed_species is not None: if not all( [ sp in all_germlines['V'][chain_type] for sp in allowed_species ] ): # Made non-fatal return {} else: allowed_species = all_species seq_ids = {} for species in allowed_species: if species not in all_germlines["V"][ chain_type ]: continue # Previously bug. for gene, germline_sequence in all_germlines["V"][ chain_type ][ species ].items(): seq_ids[ (species, gene) ] = get_identity( state_sequence , germline_sequence ) genes['v_gene' ][0] = max( seq_ids, key=lambda x: seq_ids[x] ) genes['v_gene' ][1] = seq_ids[ genes['v_gene' ][0] ] # Use the assigned species for the v-gene for the j-gene. # This assumption may affect exotically engineered abs but in general is fair. species = genes['v_gene' ][0][0] if chain_type in all_germlines["J"]: if species in all_germlines["J"][chain_type]: seq_ids = {} for gene, germline_sequence in all_germlines["J"][ chain_type ][ species ].items(): seq_ids[ (species, gene) ] = get_identity( state_sequence , germline_sequence ) genes['j_gene' ][0] = max( seq_ids, key=lambda x: seq_ids[x] ) genes['j_gene' ][1] = seq_ids[ genes['j_gene' ][0] ] return genes def check_for_j( sequences, alignments, scheme ): ''' As the length of CDR3 gets long (over 30ish) an alignment that does not include the J region becomes more favourable. This leads to really long CDR3s not being numberable. To overcome this problem, when no J region is detected we try without the v region. ''' for i in range( len( sequences ) ): # Check the alignment for J region if len(alignments[i][1]) ==1: # Only do for single domain chains. # Check whether a J region has been identified. If not check whether there is still a considerable amount of sequence # remaining. ali = alignments[i][1][0] # Find the last match position. last_state = ali[-1][0][0] last_si = ali[-1][1] if last_state < 120: # No or very little J region if last_si + 30 < len( sequences[i][1] ): # Considerable amount of sequence left...suspicious of a long CDR3 # Find the position of the conserved cysteine (imgt 104). cys_si = dict( ali ).get( (104,'m'), None ) if cys_si is not None: # 104 found. # Find the corresponding index in the alignment. cys_ai = ali.index( ((104, 'm'), cys_si) ) # Try to identify a J region in the remaining sequence after the 104. A low bit score threshold is used. _, re_states, re_details = run_hmmer( [(sequences[i][0], sequences[i][1][cys_si+1:])], bit_score_threshold=10 )[0] # Check if a J region was detected in the remaining sequence. if re_states and re_states[0][-1][0][0] >= 126 and re_states[0][0][0][0] <= 117: # Sandwich the presumed CDR3 region between the V and J regions. vRegion = ali[:cys_ai+1] # jRegion = [ (state, index+cys_si+1) for state, index in re_states[0] if state[0] >= 117 ] jRegion = [(state, index+cys_si+1) for state, index in re_states[0] if (state[0] >= 117) and (index is not None)] cdrRegion = [] next = 105 for si in range( cys_si+1, jRegion[0][1] ): if next >= 116: cdrRegion.append( ( (116, 'i'), si ) ) else: cdrRegion.append( ( (next, 'm'), si ) ) next +=1 # Update the alignment entry. alignments[i][1][0] = vRegion + cdrRegion + jRegion alignments[i][2][0]['query_end'] = jRegion[-1][1] + 1 ################################## # High level numbering functions # ################################## # Main function for ANARCI # Name conflict with function, module and package is kept for legacy unless issues are reported in future. def anarci(sequences, scheme="imgt", database="ALL", output=False, outfile=None, csv=False, allow=set(["H","K","L","A","B","G","D"]), hmmerpath="", ncpu=None, assign_germline=False, allowed_species=['human','mouse'], bit_score_threshold=80): """ The main function for anarci. Identify antibody and TCR domains, number them and annotate their germline and species. It is advised to use one of the wrapper functions: o run_anarci - fasta file or sequence list in. Automated multiprocessing for large jobs. Sequences, numbering, details and hit tables out. o number - single sequence in, numbering out @param sequences: A list or tuple of (Id, Sequence) pairs e.g. [ ("seq1","EVQLQQSGAEVVRSG ..."), ("seq2","DIVMTQSQKFMSTSV ...") ] @param scheme: The numbering scheme that should be applied. Choose from imgt, chothia, kabat or martin @param output: Boolean flag to say whether the result should be output. @param outfile: The name of the file to output to. If output is True and outfile is None then output is printed to stdout. @param csv: Boolean flag to say whether the csv output alignment format or the vertical anarci format should be used. @param allow: A set containing the chain types that should be recognised. If chothia, kabat or martin is used as the scheme, anarci will ignore tcr chains. Choose a subset of ["H","K","L","A","B","G","D"] @param assign_germline: Using highest sequence identity assign the germline to the chain. Can be more accurate at identifying species than the best HMM hit alone. (Bool) @param allowed_species: If assign_germline is true, limit the species that can be assigned to a limited set. Useful when the animal species is known or when performing closest germline experiments. Choose a subset of ['human', 'mouse','rat','rabbit','rhesus','pig','alpaca']. @param bit_score_threshold: The threshold score from HMMER at which an alignment should be numbered. Lowering the threshold means domain recognition is more permissive and can be useful for numbering heavily engineered molecules. However, too low and false positive recognition of other ig-like molecules will occur. @param hmmerpath: The path to hmmscan. If left unspecified then the PATH will be searched. @param ncpu: The number of cpu's that hmmer should be allowed to use. If not specified then the hmmscan default is used. N.B. hmmscan must be compiled with multithreading enabled for this option to have effect. Please consider using the run_anarci function for native multiprocessing with anarci. @param database: The HMMER database that should be used. Normally not changed unless a custom db is created. @return: Three lists. Numbered, Alignment_details and Hit_tables. Each list is in the same order as the input sequences list. A description of each entry in the three lists is as followed. o Numbered: will be None if no domain was found for that sequence or a list of domains with their numbering, start and finish indices. o Alignment_details: will be None if no domain was found for that sequence or a dictionary for each domain identified containing the details of the alignment (chain type, e-value, species etc). o Hit_tables: None if no domain was found for that sequence or a nested list for each domain containing the hit table from hmmscan. """ # Validate the input scheme try: scheme = scheme_short_to_long[scheme.lower()] except KeyError: raise AssertionError("Unrecognised or unimplemented scheme: %s"%scheme) # Check we have arguments for output before doing work. if csv: assert outfile, 'If csv output is True then an outfile must be specified' _path, _ = os.path.split(outfile) assert (not _path) or os.path.exists(_path), 'Output directory %s does not exist'%_path # Perform the alignments of the sequences to the hmm database alignments = run_hmmer(sequences,hmm_database=database,hmmerpath=hmmerpath,ncpu=ncpu,bit_score_threshold=bit_score_threshold,hmmer_species=allowed_species ) # Check the numbering for likely very long CDR3s that will have been missed by the first pass. # Modify alignments in-place check_for_j( sequences, alignments, scheme ) # Apply the desired numbering scheme to all sequences numbered, alignment_details, hit_tables = number_sequences_from_alignment(sequences, alignments, scheme=scheme, allow=allow, assign_germline=assign_germline, allowed_species=allowed_species) # Output if necessary if output: if csv: csv_output(sequences, numbered, details, outfile) else: outto, close=sys.stdout, False if outfile: outto, close = open(outfile,'w'), True anarci_output(numbered, sequences, alignment_details, outto) if close: outto.close() return numbered, alignment_details, hit_tables # Wrapper to run anarci using multiple processes and automate fasta file reading. def run_anarci( seq, ncpu=1, **kwargs): ''' Run the anarci numbering protocol for single or multiple sequences. @param sequences: A list or tuple of (Id, Sequence) pairs e.g. [ ("seq1","EVQLQQSGAEVVRSG ..."), ("seq2","DIVMTQSQKFMSTSV ...") ] @param scheme: The numbering scheme that should be applied. Choose from imgt, chothia, kabat or martin @param output: Boolean flag to say whether the result should be output. @param outfile: The name of the file to output to. If output is True and outfile is None then output is printed to stdout. @param allow: A set containing the chain types that should be recognised. If chothia, kabat or martin is used as the scheme, anarci will ignore tcr chains. Choose a subset of ["H","K","L","A","B","G","D"] @param assign_germline: Using highest sequence identity assign the germline to the chain. Can be more accurate at identifying species than the best HMM hit alone. (Bool) @param allowed_species: If assign_germline is true, limit the species that can be assigned to a limited set. Useful when the animal species is known or when performing closest germline experiments. Choose a subset of ['human', 'mouse','rat','rabbit','rhesus','pig','alpaca']. @param bit_score_threshold: The threshold score from HMMER at which an alignment should be numbered. Lowering the threshold means domain recognition is more permissive and can be useful for numbering heavily engineered molecules. However, too low and false positive recognition of other ig-like molecules will occur. @param hmmerpath: The path to hmmscan. If left unspecified then the PATH will be searched. @param ncpu: The number of cpu's that hmmer should be allowed to use. If not specified then the hmmscan default is used. N.B. hmmscan must be compiled with multithreading enabled for this option to have effect. Please consider using the run_anarci function for native multiprocessing with anarci. @param database: The HMMER database that should be used. Normally not changed unless a custom db is created. @return: Four lists. Sequences, Numbered, Alignment_details and Hit_tables. Each list is in the same order. A description of each entry in the four lists is as followed. o Sequences: The list of sequences formatted as [(Id,sequence), ...]. o Numbered: will be None if no domain was found for that sequence or a list of domains with their numbering, start and finish indices. o Alignment_details: will be None if no domain was found for that sequence or a dictionary for each domain identified containing the details of the alignment (chain type, e-value, species etc). o Hit_tables: None if no domain was found for that sequence or a nested list for each domain containing the hit table from hmmscan. ''' # Parse the input sequence or fasta file. if isinstance(seq, list) or isinstance(seq,tuple): # A list (or tuple) of (name,sequence) sequences assert all( len(_) == 2 for _ in seq ), "If list or tuple supplied as input format must be [ ('ID1','seq1'), ('ID2', 'seq2'), ... ]" sequences = seq elif os.path.isfile( seq ): # Fasta file. # Read the sequences. All are read into memory currently... sequences = read_fasta( seq ) ncpu = int(max(1, ncpu )) elif isinstance(seq, str): # Single sequence validate_sequence( seq ) ncpu=1 sequences = [ ["Input sequence", seq ]] # Handle the arguments to anarci. output = kwargs.get('output', False ) outfile = kwargs.get('outfile', False ) csv = kwargs.get( 'csv', False ) if csv: # Check output arguments before doing work. assert outfile, 'If csv output is True then an outfile must be specified' _path, _ = os.path.split(outfile) assert (not _path) or os.path.exists(_path), 'Output directory %s does not exist'%_path kwargs['ncpu'] = 1 # Set hmmscan ncpu to 1. HMMER has to be compiled appropriately for this to have an effect. kwargs['output'] = False # Overide and write the compiled results here. anarci_partial = partial( anarci, **kwargs ) chunksize = math.ceil( float( len(sequences) )/ncpu ) # Run the anarci function using a pool of workers. Using the map_async to get over the KeyboardInterrupt bug in python2.7 if ncpu > 1: pool = Pool( ncpu ) results = pool.map_async( anarci_partial, grouper( chunksize, sequences ) ).get() pool.close() else: results = list(map( anarci_partial, grouper( chunksize, sequences ) )) # Reformat the results to flat lists. numbered = sum( (_[0] for _ in results), [] ) alignment_details = sum( (_[1] for _ in results ), [] ) hit_tables = sum( (_[2] for _ in results), [] ) # Output if necessary if output: if csv: csv_output(sequences, numbered, alignment_details, outfile) else: outto, close=sys.stdout, False if outfile: outto, close = open(outfile,'w'), True anarci_output(numbered, sequences, alignment_details, outto) if close: outto.close() # Return the results return sequences, numbered, alignment_details, hit_tables # Wrapper function for simple sequence in numbering and chain type out behaviour. def number(sequence, scheme="imgt", database="ALL", allow=set(["H","K","L","A","B","G","D"]), allowed_species=['human','mouse']): """ Given a sequence string, use anarci to number it using the scheme of choice. Only the first domain will be recognised and numbered For multiple sequences it is advised to use run_anarci instead of iterative use of this function. @param sequence: An amino acid sequence string @param scheme: The numbering scheme that should be applied. Choose from imgt, chothia, kabat or martin @param database: The HMMER database that should be used. Normally not changed unless a custom db is created. @param allow: A set containing the chain types that should be recognised. If chothia, kabat or martin is used as the scheme, anarci will ignore tcr chains. @return: If the sequence can be numbered, a list containing the numbering and sequence; and the chain type. Otherwise both are False. """ try: validate_sequence( sequence ) scheme = scheme_short_to_long[scheme.lower()] except KeyError: raise AssertionError("Unrecognised to unimplemented scheme: %s"%scheme) if len(sequence) < 70: # Length check. ANARCI can number fragments of chains well. Encourage full domain numbering. return False, False try: if not allowed_species: numbered, alignment_details, _ = anarci( [("sequence_0", sequence)], scheme=scheme, database=database, output=False, allow=allow ) else: numbered, alignment_details, _ = anarci( [("sequence_0", sequence)], scheme=scheme, database=database, output=False, allow=allow, allowed_species = allowed_species ) except AssertionError: # Catch where the user has tried to number a TCR with an antibody scheme return False, False # We return the numbering list and the chain type where kappa and lambda chains are both "L" for light if numbered[0]: return numbered[0][0][0], chain_type_to_class[alignment_details[0][0]["chain_type"]] else: return False, False if __name__ == "__main__": # Test and example useage of the anarci function. sequences = [ ("12e8:H","EVQLQQSGAEVVRSGASVKLSCTASGFNIKDYYIHWVKQRPEKGLEWIGWIDPEIGDTEYVPKFQGKATMTADTSSNTAYLQLSSLTSEDTAVYYCNAGHDYDRGRFPYWGQGTLVTVSAAKTTPPSVYPLAP"), ("12e8:L","DIVMTQSQKFMSTSVGDRVSITCKASQNVGTAVAWYQQKPGQSPKLMIYSASNRYTGVPDRFTGSGSGTDFTLTISNMQSEDLADYFCQQYSSYPLTFGAGTKLELKRADAAPTVSIFPPSSEQLTSGGASV"), ("scfv:A","DIQMTQSPSSLSASVGDRVTITCRTSGNIHNYLTWYQQKPGKAPQLLIYNAKTLADGVPSRFSGSGSGTQFTLTISSLQPEDFANYYCQHFWSLPFTFGQGTKVEIKRTGGGGSGGGGSGGGGSGGGGSEVQLVESGGGLVQPGGSLRLSCAASGFDFSRYDMSWVRQAPGKRLEWVAYISSGGGSTYFPDTVKGRFTISRDNAKNTLYLQMNSLRAEDTAVYYCARQNKKLTWFDYWGQGTLVTVSSHHHHHH"), ("lysozyme:A","KVFGRCELAAAMKRHGLDNYRGYSLGNWVCAAKFESNFNTQATNRNTDGSTDYGILQINSRWWCNDGRTPGSRNLCNIPCSALLSSDITASVNCAKKIVSDGNGMNAWVAWRNRCKGTDVQAWIRGCRL")] results = anarci(sequences, scheme="imgt", output=True) numbering, alignment_details, hit_tables = results expect_one_VH_domain_numbering, expect_one_VL_domain_numbering, expect_VH_then_VL_numbering, expect_None = numbering assert len(expect_one_VH_domain_numbering) == 1 assert len(expect_one_VL_domain_numbering) == 1 assert len(expect_VH_then_VL_numbering) == 2 assert expect_None == None ================================================ FILE: lib/python/anarci/schemes.py ================================================ # ANARCI - Antibody Numbering and Antigen Receptor ClassIfication # Copyright (C) 2016 Oxford Protein Informatics Group (OPIG) # # This program is free software: you can redistribute it and/or modify # it under the terms of the BSD 3-Clause License. # # You should have received a copy of the BSD 3-Clause Licence # along with this program. If not, see . ''' Module containing functions to convert hmm alignment to a numbering scheme. Currently implemented For IG's IMGT Chothia Kabat Martin (Extended Chothia) Aho Wolfguy For TR's IMGT (Aho) --------------------------------------------------------------------------------------------------------------------- Functions are written to a template: There are 128 match states in the HMMs (these are the IMGT states). The alignment to these states must be converted to correspond to the scheme of choice. We define: - a state string consisting of 'X' and 'I' where: X means that for the state there is an equivalent position in the numbering scheme. I means that for the state there is not an equivalent position in the numbering scheme. It should therefore be considered as an insertion in the scheme. - a region string consisting of characters (integers in the currently implemented schemes). Each character corresponds to a contiguous region. Therefore each state can be assigned a region according to the scheme. - a mapping between region characters and region indices as a dictionary. e.g. the first region character maps to 0, second to 1 ... - a dictionary containing the difference between state number (imgt) and scheme number at the *beginning* of each region using the region indices as keys and the difference as values. - the number of regions defined - a list for which delete states should not be included in the numbering (typically those for the cdrs). This will allow the length of the region to be the number of residues found instead of the number of possible states plus insertions. This all goes into the _number_regions function along with the sequence and the state_vector (the alignment from the HMM). _number regions will then divide the aligned part of the sequence into as many regions as defined above. Within each region it will give a numbering according to the input parameters. A list of lists will be returned containing the numbered sequence for each region. Some of the regions will not be numbered correctly according to the scheme. For example the insertions for the CDRs will not necessarily be on the correct residue. For each different scheme these regions are then modified (see code for implementation) Finally the full numbered sequence is compiled and returned to the calling function. --------------------------------------------------------------------------------------------------------------------- Other schemes can be implemented following the template above. ''' # Alphabet used for insertion (last (-1th) is a blank space for no insertion) alphabet = ["A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L", "M", "N", "O", "P", "Q", "R", "S", "T", "U", "V", "W", "X", "Y", "Z", "AA", "BB", "CC", "DD", "EE", "FF", "GG", "HH", "II", "JJ", "KK", "LL", "MM", "NN", "OO", "PP", "QQ", "RR", "SS", "TT", "UU", "VV", "WW", "XX", "YY", "ZZ", " "] # Blosum62 matrix. Used in some annotation methods to recognise pre-defined motifs blosum62 = {('B', 'N'): 3, ('W', 'L'): -2, ('G', 'G'): 6, ('X', 'S'): 0, ('X', 'D'): -1, ('K', 'G'): -2, ('S', 'E'): 0, ('X', 'M'): -1, ('Y', 'E'): -2, ('W', 'R'): -3, ('I', 'R'): -3, ('X', 'Z'): -1, ('H', 'E'): 0, ('V', 'M'): 1, ('N', 'R'): 0, ('I', 'D'): -3, ('F', 'D'): -3, ('W', 'C'): -2, ('N', 'A'): -2, ('W', 'Q'): -2, ('L', 'Q'): -2, ('S', 'N'): 1, ('Z', 'K'): 1, ('V', 'N'): -3, ('Q', 'N'): 0, ('M', 'K'): -1, ('V', 'H'): -3, ('G', 'E'): -2, ('S', 'L'): -2, ('P', 'R'): -2, ('D', 'A'): -2, ('S', 'C'): -1, ('E', 'D'): 2, ('Y', 'G'): -3, ('W', 'P'): -4, ('X', 'X'): -1, ('Z', 'L'): -3, ('Q', 'A'): -1, ('V', 'Y'): -1, ('W', 'A'): -3, ('G', 'D'): -1, ('X', 'P'): -2, ('K', 'D'): -1, ('T', 'N'): 0, ('Y', 'F'): 3, ('W', 'W'): 11, ('Z', 'M'): -1, ('L', 'D'): -4, ('M', 'R'): -1, ('Y', 'K'): -2, ('F', 'E'): -3, ('M', 'E'): -2, ('S', 'S'): 4, ('X', 'C'): -2, ('Y', 'L'): -1, ('H', 'R'): 0, ('P', 'P'): 7, ('K', 'C'): -3, ('S', 'A'): 1, ('P', 'I'): -3, ('Q', 'Q'): 5, ('L', 'I'): 2, ('P', 'F'): -4, ('B', 'A'): -2, ('Z', 'N'): 0, ('M', 'Q'): 0, ('V', 'I'): 3, ('Q', 'C'): -3, ('I', 'H'): -3, ('Z', 'D'): 1, ('Z', 'P'): -1, ('Y', 'W'): 2, ('T', 'G'): -2, ('B', 'P'): -2, ('P', 'A'): -1, ('C', 'D'): -3, ('Y', 'H'): 2, ('X', 'V'): -1, ('B', 'B'): 4, ('Z', 'F'): -3, ('M', 'L'): 2, ('F', 'G'): -3, ('S', 'M'): -1, ('M', 'G'): -3, ('Z', 'Q'): 3, ('S', 'Q'): 0, ('X', 'A'): 0, ('V', 'T'): 0, ('W', 'F'): 1, ('S', 'H'): -1, ('X', 'N'): -1, ('B', 'Q'): 0, ('K', 'A'): -1, ('I', 'Q'): -3, ('X', 'W'): -2, ('N', 'N'): 6, ('W', 'T'): -2, ('P', 'D'): -1, ('B', 'C'): -3, ('I', 'C'): -1, ('V', 'K'): -2, ('X', 'Y'): -1, ('K', 'R'): 2, ('Z', 'R'): 0, ('W', 'E'): -3, ('T', 'E'): -1, ('B', 'R'): -1, ('L', 'R'): -2, ('Q', 'R'): 1, ('X', 'F'): -1, ('T', 'S'): 1, ('B', 'D'): 4, ('Z', 'A'): -1, ('M', 'N'): -2, ('V', 'D'): -3, ('F', 'A'): -2, ('X', 'E'): -1, ('F', 'H'): -1, ('M', 'A'): -1, ('K', 'Q'): 1, ('Z', 'S'): 0, ('X', 'G'): -1, ('V', 'V'): 4, ('W', 'D'): -4, ('X', 'H'): -1, ('S', 'F'): -2, ('X', 'L'): -1, ('B', 'S'): 0, ('S', 'G'): 0, ('P', 'M'): -2, ('Y', 'M'): -1, ('H', 'D'): -1, ('B', 'E'): 1, ('Z', 'B'): 1, ('I', 'E'): -3, ('V', 'E'): -2, ('X', 'T'): 0, ('X', 'R'): -1, ('R', 'R'): 5, ('Z', 'T'): -1, ('Y', 'D'): -3, ('V', 'W'): -3, ('F', 'L'): 0, ('T', 'C'): -1, ('X', 'Q'): -1, ('B', 'T'): -1, ('K', 'N'): 0, ('T', 'H'): -2, ('Y', 'I'): -1, ('F', 'Q'): -3, ('T', 'I'): -1, ('T', 'Q'): -1, ('P', 'L'): -3, ('R', 'A'): -1, ('B', 'F'): -3, ('Z', 'C'): -3, ('M', 'H'): -2, ('V', 'F'): -1, ('F', 'C'): -2, ('L', 'L'): 4, ('M', 'C'): -1, ('C', 'R'): -3, ('D', 'D'): 6, ('E', 'R'): 0, ('V', 'P'): -2, ('S', 'D'): 0, ('E', 'E'): 5, ('W', 'G'): -2, ('P', 'C'): -3, ('F', 'R'): -3, ('B', 'G'): -1, ('C', 'C'): 9, ('I', 'G'): -4, ('V', 'G'): -3, ('W', 'K'): -3, ('G', 'N'): 0, ('I', 'N'): -3, ('Z', 'V'): -2, ('A', 'A'): 4, ('V', 'Q'): -2, ('F', 'K'): -3, ('T', 'A'): 0, ('B', 'V'): -3, ('K', 'L'): -2, ('L', 'N'): -3, ('Y', 'N'): -2, ('F', 'F'): 6, ('L', 'G'): -4, ('B', 'H'): 0, ('Z', 'E'): 4, ('Q', 'D'): 0, ('X', 'B'): -1, ('Z', 'W'): -3, ('S', 'K'): 0, ('X', 'K'): -1, ('V', 'R'): -3, ('K', 'E'): 1, ('I', 'A'): -1, ('P', 'H'): -2, ('B', 'W'): -4, ('K', 'K'): 5, ('H', 'C'): -3, ('E', 'N'): 0, ('Y', 'Q'): -1, ('H', 'H'): 8, ('B', 'I'): -3, ('C', 'A'): 0, ('I', 'I'): 4, ('V', 'A'): 0, ('W', 'I'): -3, ('T', 'F'): -2, ('V', 'S'): -2, ('T', 'T'): 5, ('F', 'M'): 0, ('L', 'E'): -3, ('M', 'M'): 5, ('Z', 'G'): -2, ('D', 'R'): -2, ('M', 'D'): -3, ('W', 'H'): -2, ('G', 'C'): -3, ('S', 'R'): -1, ('S', 'I'): -2, ('P', 'Q'): -1, ('Y', 'A'): -2, ('X', 'I'): -1, ('E', 'A'): -1, ('B', 'Y'): -3, ('K', 'I'): -3, ('H', 'A'): -2, ('P', 'G'): -2, ('F', 'N'): -3, ('H', 'N'): 1, ('B', 'K'): 0, ('V', 'C'): -1, ('T', 'L'): -1, ('P', 'K'): -1, ('W', 'S'): -3, ('T', 'D'): -1, ('T', 'M'): -1, ('P', 'N'): -2, ('K', 'H'): -1, ('T', 'R'): -1, ('Y', 'R'): -2, ('L', 'C'): -1, ('B', 'L'): -4, ('Z', 'Y'): -2, ('W', 'N'): -4, ('G', 'A'): 0, ('S', 'P'): -1, ('E', 'Q'): 2, ('C', 'N'): -3, ('H', 'Q'): 0, ('D', 'N'): 1, ('Y', 'C'): -2, ('L', 'H'): -3, ('E', 'C'): -4, ('Z', 'H'): 0, ('H', 'G'): -2, ('P', 'E'): -1, ('Y', 'S'): -2, ('G', 'R'): -2, ('B', 'M'): -3, ('Z', 'Z'): 4, ('W', 'M'): -1, ('Y', 'T'): -2, ('Y', 'P'): -3, ('Y', 'Y'): 7, ('T', 'K'): -1, ('Z', 'I'): -3, ('T', 'P'): -1, ('V', 'L'): 1, ('F', 'I'): 0, ('G', 'Q'): -2, ('L', 'A'): -1, ('M', 'I'): 1} def smooth_insertions(state_vector): ''' The function aims to correct to the expected imgt alignment. Renumbering functions then translate from the imgt scheme to the appropriate scheme. Handle insertions made by HMMER that we suspect may be in the wrong position. Edge cases include: - Insertions at the C terminal of fw1, fw3 and fw3 regions. Can occur when 'conserved' residues have been mutated and the same amino acid appears in the the following CDR (e.g. mutate cysteine at 104 but the CDR3 has one or more cysteines) - Same as above possible (but not observed in structure seqs) for N terminal of fw2, fw3 and fw4... TODO - Heavily mutated N terminal regions that are partially recognised (e.g. 3gk8 chain H). Insertions should not be allowed before N terminal deletions have been used. Preserve deletion locations that are not N terminal (e.g. 10 in IMGT H) if the gap has been placed by the alignment. ''' # Small overhead doing these corrections but worth it for reducing edge cases. # Enforce insertion patterns as below. The CDRs are renumbered in each case so that insertions are placed accoring to the scheme # '11111111111111111111111111222222222222333333333333333334444444444555555555555555555555555555555555555555666666666666677777777777' # ' mmmi mmmi mmmi ' # ' mmmi immm mmmi immm mmmi immm ' # Enforce any insertions at the end and beginning of framework regions to be moved into the CDR region for renumbering. enforced_patterns = [ [(25,'m'),(26,'m'),( 27,'m'),( 28,'i')], [(38,'i'),(38,'m'),(39,'m'),(40,'m')], [(54,'m'),(55,'m'),(56,'m'),(57,'i')], [(65,'i'),(65,'m'),(66,'m'),(67,'m')], [(103,'m'),(104,'m'),(105,'m'),(106,'i')], [(117,'i'),(117,'m'),(118,'m'),(119,'m')] ] # Insertions in FW1 are only allowed if there are a fewer number of n-terminal deletions made. state_buffer = [] sv = [] for (state_id, state_type ), si in state_vector: if state_id < 23: # Everything before the cysteine at 23. state_buffer.append( ((state_id, state_type ), si) ) reg = -1 elif 25 <= state_id < 28: # Add to the buffer state_buffer.append( ((state_id, state_type ), si) ) reg = 0 elif 37 < state_id <= 40: # Add to the buffer state_buffer.append( ((state_id, state_type ), si) ) reg = 1 elif 54 <= state_id < 57: # Add to the buffer state_buffer.append( ((state_id, state_type ), si) ) reg = 2 elif 64 < state_id <= 67: # Add to the buffer state_buffer.append( ((state_id, state_type ), si) ) reg = 3 elif 103 <= state_id < 106: # Add to the buffer state_buffer.append( ((state_id, state_type ), si) ) reg = 4 elif 116 < state_id <= 119: # Add to the buffer state_buffer.append( ((state_id, state_type ), si) ) reg = 5 elif len(state_buffer) != 0: # Add the buffer and reset # Find the number of insertions in the buffer nins = sum( 1 for s in state_buffer if s[0][1] == 'i' ) # If there are insertions, adjust the alignment if nins > 0: # We have insertions if reg == -1: # FW1, only adjust if there are the same or more N terminal deletions than insertions nt_dels = state_buffer[0][0][0] - 1 # Missing states for (_id, _type ), _si in state_buffer: # Explicit deletion states. if _type == 'd' or _si == None: nt_dels +=1 else: # First residue found break if nt_dels >= nins: # More n terminal deletions than insertions found. Likely misalignment. # Preserve the deleted states structure by using the same match annotations new_states = [ s for s, _ in state_buffer if s[1] == 'm'] _first = new_states[0][0] # Remove the deletions so that only residue positions are included state_buffer = [ s for s in state_buffer if s[0][1] != 'd' ] # Extend N terminal states backwards from the first match states _add = len( state_buffer ) - len( new_states ) assert _add >= 0, 'Implementation logic error' # Should be adding a positive number of positions new_states = [ (_,'m') for _ in range( _first - _add, _first ) ] + new_states assert len(new_states)==len(state_buffer), 'Implementation logic error' # Should have the same length # Assign them preserving the order of the sequence. for i in range( len(state_buffer ) ): sv.append( ( new_states[i], state_buffer[i][1]) ) else: sv += state_buffer # The insertions may be incorrect but unknown what to do. Let the alignment place. else: # Remove any deletions in the buffer. Unlikely to happen but do anyway state_buffer = [ s for s in state_buffer if s[0][1] != 'd' ] # Define the new states defined by the enforced pattern and the length of the buffer if reg % 2: # nterm fw new_states = [enforced_patterns[reg][0]]*max( 0, len(state_buffer)-3) + enforced_patterns[reg][ max( 4-len(state_buffer), 1):] else: # cterm fw new_states = enforced_patterns[reg][:3] + [enforced_patterns[reg][2]]*max( 0, len(state_buffer)-3) # Assign them preserving the order of the sequence. for i in range( len(state_buffer ) ): sv.append( ( new_states[i], state_buffer[i][1]) ) else: # Nothing to do - either all match or deletion states. sv += state_buffer # Add the current state sv.append( ((state_id, state_type ), si) ) # Reset state buffer state_buffer = [] else: # Simply append sv.append( ((state_id, state_type ), si) ) return sv # General function to give annotations for regions that have direct mappings onto the hmm alignment (imgt states) def _number_regions(sequence, state_vector, state_string , region_string, region_index_dict, rels, n_regions, exclude_deletions): """ General function to number a sequence and divide it into different regions @param sequence: The sequence string @param state_vector: The list of states from the aligned hmm @param state_string: A string of states for the scheme relative to IMGT (this is X for a direct equivalence, I if needs to be treated as insertion) @param region_string: A string of characters that indicate which hmm states are in each regions for this scheme (i.e. how should the sequence be divided up) @param region_index_dict: A dictionary converting the characters in region string to an index of the regions. @param rels: The difference of the numbering integer at the *start* of each region @param n_regions: The number of regions @param exclude_deletions: A list of region indices for which deletion states should not be included. Typically the CDRs. These will be reannotated in the scheme function. Also allows the reset of insertions. @return: A list of lists where each region has been numbered according to the scheme. Some regions will need renumbering. This should be taken care of after the function called. """ state_vector = smooth_insertions( state_vector ) _regions = [ [] for _ in range(n_regions) ] # Initialise the insertion index (-1 is a blank space) and the previous state. insertion = -1 previous_state_id = 1 previous_state_type = 'd' start_index, end_index = None, None region = None # Iterate over the aligned state vector for (state_id, state_type ), si in state_vector: # Retrieve the region index if state_type != "i" or region is None: # BUG_FIX - JD 9/4/15 - do not allow a new region to start as an insertion. region = region_index_dict[region_string[state_id-1]] # Check the state_types if state_type == "m": # It is a match # Check whether this position is in the scheme as an independent state if state_string[state_id-1]=="I": # No, it should be treated as an insertion if previous_state_type != 'd': # Unless there was a deletion beforehand in which case this should be a real pos. insertion +=1 # Increment the insertion annotation index rels[region] -= 1 # Update the relative numbering from the imgt states else: # Yes insertion = -1 # Reset the insertions # Add the numbering annotation to the appropriate region list _regions[region].append( ( (state_id + rels[region], alphabet[insertion] ), sequence[si] ) ) previous_state_id = state_id # Record the previous state ID if start_index is None: start_index = si end_index = si previous_state_type = state_type elif state_type == "i": # It is an insertion insertion +=1 # Increment the insertion annotation index # Add the numbering annotation to the appropriate region list _regions[region].append( ( (previous_state_id + rels[region], alphabet[insertion]), sequence[si] ) ) if start_index is None: start_index = si end_index = si previous_state_type = state_type else: # It is a deletion previous_state_type = state_type # Check whether this position is in the scheme as an independent state if state_string[state_id-1]=="I": # No, therefore irrelevant to the scheme. rels[region] -= 1 # Update the relative numbering from the imgt states continue insertion = -1 # Reset the insertions previous_state_id = state_id # Record the previous state ID, should not be needed (no delete to insert state transition) # Reset the inssertion index if necessary and allowed. (Means the insertion code is meaningless and will be reannotated) if insertion >= 25 and region in exclude_deletions: insertion = 0 assert insertion < 25, "Too many insertions for numbering scheme to handle" # We ran out of letters. return _regions, start_index, end_index # Functions to perform the numbering and the corrections for each of the implemented schemes. # These have been written fairly verbosely so that the template of how to generate a function for a new scheme is more clear. # They have two stages: Perform the mapping between imgt and the scheme; Renumber those regions that do not map nicely onto imgt (e.g. CDR insertions) ######## # IMGT # ######## # - Renumbering of the CDR 1 and 2 regions in IMGT has now been implemented to ensure consistency with the gapping rules of the # scheme. Previously gaps were defined using the HMM alignment as the underlying model was already based on the IMGT scheme. This # worked well in original test cases but appears to give inaccurate annotations in a significant number of cases in NGS size # sequence sets. We therefore now explicitly renumber the CDR 1 and 2 as with all the other schemes. def number_imgt(state_vector, sequence): """ Apply the IMGT numbering scheme for heavy or light chains Rules should be implemented using two strings - the state string and the region string. There are 128 states in the HMMs. Treat X as a direct match in IMGT scheme, I is an insertion. (All X's for IMGT) XXXXXXXXXXXXXXXXXXXXXXXXXX XXXXXXXXXXXX XXXXXXXXXXXXXXXXX XXXXXXXXXX XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX XXXXXXXXXXXXX XXXXXXXXXXX 11111111111111111111111111 222222222222 33333333333333333 4444444444 555555555555555555555555555555555555555 6666666666666 77777777777 Regions - (N.B These do not match up with any particular definition of CDR) 1. All positions before CDR1 2. CDR1 positions 3. Positions between CDR1/2 4. CDR2 positions 5. Positions between CDR2/3 6. CDR positions 105 (inc) to 118 (exc) 7. Positions after CDR3 """ # Set up the numbering # State string - 'X' means the imgt position exists in the scheme. 'I' means that it should be treated as an insertion of the previous number state_string = 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX' # Region string - regions that should be treated separately in putting the numbering together region_string = '11111111111111111111111111222222222222333333333333333334444444444555555555555555555555555555555555555555666666666666677777777777' region_index_dict = { "1":0, "2":1, "3":2, "4":3, "5":4, "6":5, "7":6 } # Define how the scheme's numbering differs from IMGT at the start of each region. # This is updated in the loop below rels = {0:0, 1:0, 2:0, 3:0, 4:0, 5:0, 6:0, 7:0 } n_regions = 7 exclude_deletions = [1,3,5] _regions, startindex, endindex = _number_regions(sequence, state_vector, state_string , region_string, region_index_dict, rels, n_regions, exclude_deletions) ############### # Renumbering # ############### _numbering = [ _regions[0], # Fw1 [], # CDR1 _regions[2], # Fw2 [], # CDR2 _regions[4], # Fw3 [], # CDR3 _regions[6], # Fw4 ] # The alignment from HMMER should be correct for CDRs 1 and 2. Testing has shown not always the case and 'manual' renumbering # is required as with the other schemes. # CDR1 # CDR1 has a range from 27 (inc.) to 39 (exc.) and has a theoretical maximum length of 12. cdr1seq = "".join([ x[1] for x in _regions[1] if x[1] != "-" ]) cdr1length = len(cdr1seq) si = 0 prev_state = 26 for ann in get_imgt_cdr(cdr1length, 12, 27, 39): if not ann: _numbering[1].append( ((prev_state+1, ' '), '-') ) prev_state += 1 else: _numbering[1].append( (ann, cdr1seq[si]) ) prev_state = ann[0] si += 1 # CDR2 # CDR2 has a range from 56 (inc.) to 66 (exc.) and has a theoretical length of 10. cdr2seq = "".join([ x[1] for x in _regions[3] if x[1] != "-" ]) cdr2length = len(cdr2seq) si = 0 prev_state = 55 for ann in get_imgt_cdr(cdr2length, 10, 56, 66): if not ann: _numbering[3].append( ((prev_state+1, ' '), '-') ) prev_state += 1 else: _numbering[3].append( (ann, cdr2seq[si]) ) prev_state = ann[0] si += 1 # FW3. We allow the HMM to place insertions. Technically all insertion points are taken care of but in reality insertions can # and do occur. No specification of where the insertions should be placed. # CDR3 # CDR3 has a range from 105 (inc.) to 118 (exc.). Insertions are placed on 112 and 111 symetrically. IMGT has a technical # maximum length of 65 (13 positions, 26*2 insertions) . In practice ANARCI will not recognise CDR3s of this length. cdr3seq = "".join([ x[1] for x in _regions[5] if x[1] != "-" ]) cdr3length = len(cdr3seq) if cdr3length > 117: return [], startindex, endindex # Too many insertions. Do not apply numbering. si = 0 previous_state_id = 104 for ann in get_imgt_cdr(cdr3length, 13, 105, 118): if ann is None: _numbering[5].append( ((previous_state_id+1, " "), "-" ) ) previous_state_id+=1 else: _numbering[5].append( (ann, cdr3seq[si] ) ) previous_state_id = ann[0] si+=1 # Return the full vector and the start and end indices of the numbered region of the sequence return gap_missing( _numbering ), startindex, endindex def get_imgt_cdr(length, maxlength, start, end): """ Symmetrically number a CDR loop (e.g. CDRL1/CDRH2 for IMGT) @param length: Define the length of target CDR @param maxlength: Define the theoretical limit (e.g. L1 = 12 for the IMGT scheme) @param start, end: Start and end position numbers """ annotations = [ None for _ in range(max(length, maxlength)) ] if length == 0: return annotations elif length == 1: annotations[0] = (start, ' ') return annotations front, back = 0, -1 #az = "ABCDEFGHIJKLMNOPQRSTUVWXYZ" #za = "ZYXWVUTSRQPONMLKJIHGFEDCBA" az = alphabet[:-1] za = az[::-1] for i in range(min(length, maxlength)): if i % 2: annotations[back] = (end + back, " ") back -= 1 else: annotations[front] = (start + front, " ") front += 1 # Add insertions around the centre point centrepoint = [ i for i,v in enumerate(annotations) if v == None ] if not centrepoint: return annotations centre_left = annotations[min(centrepoint)-1][0] # Get the index right before the first None centre_right = annotations[max(centrepoint)+1][0] # Get the index right after the first None # For cases with an even max length if not maxlength % 2: frontfactor, backfactor = maxlength//2, maxlength//2 # For cases with an odd max length else: frontfactor, backfactor = (maxlength//2)+1, maxlength//2 for i in range(max(0, length-maxlength)): if not i % 2: annotations[back] = (centre_right, za[back + backfactor]) back -= 1 else: annotations[front] = (centre_left, az[front - frontfactor]) front += 1 return annotations ####### # Aho # ####### # Heuristic regapping based on the AHo specification as detailed on AAAAA website. Gap order depends on the chain type def number_aho(state_vector, sequence, chain_type): """ Apply the Aho numbering scheme Rules should be implemented using two strings - the state string and the region string. There are 128 states in the HMMs. Treat X as a direct match in IMGT scheme, I is an insertion. (All X's for IMGT) XXXXXXX XXX XXXXXXXXXXXXXX XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXX XXXXXXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX XXXXXXXXXXXXX XXXXXXXXXXXXX XXXXXXXXXXX AAAAAAA BBB CCCCCCCCCCCCCC DDDDDDDDDDDDDDDD EEEEEEEEEEEEEEE FFFFFFFFFFFFFFFFFFFF HHHHHHHHHHHHHHHH IIIIIIIIIIIII JJJJJJJJJJJJJ KKKKKKKKKKK Regions - (N.B These do not match up with any particular definition of CDR) A. EMPTY (now included in B) B. 1-10 inclusive. Indel occurs at 8 C. 11-24 inclusive. D. 25-42 inclusive (deletion surround 28) 32-42 inclusive (deletions surround 36) E. 43-57 inclusive F. 58-77 inclusive (deletions surround 63). Alpha chains have deletions at 74,75 G. EMPTY (now included in H) H. 78-93 inclusive gaps on 86 then 85, insertions on 85 linearly I. 94-106 inclusive J. 107-138 inclusive gaps on 123 symetrically. K. 139-149 inclusive. """ # Set up the numbering # State string - 'X' means the imgt position exists in the scheme. 'I' means that it should be treated as an insertion of the previous number state_string = 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX' # Region string - regions that should be treated separately in putting the numbering together region_string = 'BBBBBBBBBBCCCCCCCCCCCCCCDDDDDDDDDDDDDDDDEEEEEEEEEEEEEEEFFFFFFFFFFFFFFFFFFFFHHHHHHHHHHHHHHHHIIIIIIIIIIIIIJJJJJJJJJJJJJKKKKKKKKKKK' # 1 2 3 4 5 7 8 9 10 region_index_dict = dict( list(zip( "ABCDEFGHIJK", list(range(11)) )) ) # Define how the scheme's numbering differs from IMGT at the start of each region. # This is updated in the loop below rels = {0:0, 1:0, 2:0, 3:0, 4:2, 5:2, 6:2, 7:2, 8:2, 9:2, 10:21} n_regions = 11 exclude_deletions = [1,3,4,5,7,9] _regions, startindex, endindex = _number_regions(sequence, state_vector, state_string , region_string, region_index_dict, rels, n_regions, exclude_deletions) ############### # Renumbering # ############### _numbering = [ _regions[0], _regions[1], _regions[2],[], _regions[4], [], _regions[6], [], _regions[8],_regions[9],_regions[10] ] ################################## # Move the indel in fw 1 onto 8 # ################################## # Place indels on 8 # Find the first recognised residue and change the expected length of the stretch given the starting point. # This prevents n terminal deletions being placed at 8 incorrectly. length = len( _regions[1] ) if length > 0: start = _regions[1][0][0][0] stretch_len = 10 - (start -1) if length > stretch_len: # Insertions are present. Place on 8 annotations = [ (_," ") for _ in range(start,9) ] + [ (8,alphabet[_]) for _ in range( length - stretch_len ) ] + [(9," "),(10," ")] else: ordered_deletions = [(8," ")] + [(_," ") for _ in range(start, 11) if _ != 8] annotations = sorted( ordered_deletions[max(stretch_len-length, 0):] ) _numbering[1] = [ (annotations[i], _regions[1][i][1]) for i in range(length) ] ######### # CDR 1 # - divided in two parts in the Aho scheme. ######### - gaps at 28 depending on the chain type. # "VH domains, as well as the majority of the VA domains, have a one-residue gap in position 28, VK and VB domains a two-residue # gap in position 27 and 28." # We use the link below as the reference for the scheme. # https://www.bioc.uzh.ch/plueckthun/antibody/Numbering/Alignment.html # Some of the header lines in these images are offset by one (VH)! The gaps really are centered at 28 and 36 # https://www.bioc.uzh.ch/plueckthun/antibody/Sequences/Rearranged/PDB_VK.html # https://www.bioc.uzh.ch/plueckthun/antibody/Sequences/Rearranged/PDB_VL.html # https://www.bioc.uzh.ch/plueckthun/antibody/Sequences/Rearranged/PDB_VH.html # https://www.bioc.uzh.ch/plueckthun/antibody/Sequences/Rearranged/PDB_VA.html # https://www.bioc.uzh.ch/plueckthun/antibody/Sequences/Rearranged/PDB_VB.html # https://www.bioc.uzh.ch/plueckthun/antibody/Sequences/Rearranged/PDB_VG.html # https://www.bioc.uzh.ch/plueckthun/antibody/Sequences/Rearranged/PDB_VD.html # We gap the CDR1 in a heuristic way using the gaps. # This means that CDR1 gapping will not always be correct. For example if one grafts a Kappa CDR1 loop onto a Lambda framework # the gapping patter might now be incorrect. # Not a fan of being so prescriptive. # The CDR1 region included here ranges from AHo 25 to AHo 42 inclusive # The order in which the two loops are gapped is dependent on the chain type (see alignments in URLs above). # Not all lengths are defined as not all lengths were crystallised in 2001 (or today). Where no example of the length was # available the rule followed is to continue gapping the C terminal 'loop', then the N terminal 'loop', then 31 then the fw. # In all cases I have commented where the gapping is undefined. Note that for alpha chains the gapping rules are inconsistent. _L = 28,36,35,37,34,38,27,29,33,39,32,40,26,30,25,31,41,42 # |-> undefined by AHo. Gapping C terminal loop then N terminal then 31, then fw. _K = 28,27,36,35,37,34,38,33,39,32,40,29,26,30,25,31,41,42 # |-> undefined by AHo. Gapping C terminal loop then N terminal then fw. _H = 28,36,35,37,34,38,27,33,39,32,40,29,26,30,25,31,41,42 # |-> undefined by AHo. Gapping C terminal loop then N terminal then fw. # N.B. The header on the alignment image for PDB_VH is offset by 1! _A = 28,36,35,37,34,38,33,39,27,32,40,29,26,30,25,31,41,42 # |-> undefined by AHo. Gapping C terminal loop then N terminal then fw. # N.B The gapping is inconsistent for alpha chains. I follow the paper's statement that most VA have # one gap at 28 and remove 28 and 27 before removing 40. _B = 28,36,35,37,34,38,33,39,27,32,40,29,26,30,25,31,41,42 # |-> undefined by AHo. Gapping C terminal loop then N terminal then 31, then fw. _D = 28,36,35,37,34,38,27,33,39,32,40,29,26,30,25,31,41,42 # |-> undefined by AHo. Gapping C terminal loop then N terminal then 31, then fw. # N.B only two sequence patterns available. _G = 28,36,35,37,34,38,27,33,39,32,40,29,26,30,25,31,41,42 # |-> undefined by AHo. Gapping C terminal loop then N terminal then 31, then fw. # N.B only one sequence patterns available. Delta copied. ordered_deletions = { 'L':_L,'K':_K, 'H':_H, 'A':_A, 'B':_B, 'D':_D, 'G':_G } length = len( _regions[3] ) annotations = [ (i, ' ') for i in sorted( ordered_deletions[chain_type][ max(18-length, 0): ] ) ] # Insertions are not described in the AHo scheme but must be included as there is a significant number of CDRH1s that are # longer than the number of positions. insertions = max( length-18 , 0 ) if insertions > 26: return [], startindex, endindex # Too many insertions. Do not apply numbering. elif insertions > 0: # They are placed on residue 36 alphabetically. insertat = annotations.index( (36, ' ') )+1 # Always 12 assert insertat == 12, 'AHo numbering failed' annotations = annotations[:insertat] + [ (36, alphabet[a]) for a in range( insertions ) ] + annotations[insertat:] _numbering[3] = [ (annotations[i], _regions[3][i][1]) for i in range(length) ] ######### # CDR 2 # ######### # Gaps are placed symetically at 63. # For VA a second gap is placed at 74 and 75 according to the text in the paper. However, all the reference sequences show a # gap at 73 and 74 see: # https://www.bioc.uzh.ch/plueckthun/antibody/Sequences/Rearranged/PDB_VA.html # and # https://www.bioc.uzh.ch/plueckthun/antibody/Numbering/Alignment.html # Either I am mis-interpreting the text in the paper or there is something a little inconsistent here... # Given that *all* the numbered examples show the VA gap at 73 and 74 on the AAAAA website I have decided to implement this. # # This region describes 58 to 77 inclusive if chain_type == 'A': ordered_deletions = [74,73,63,62,64,61,65,60,66,59,67,58,68,69,70,71,72,75,76,77] else: ordered_deletions = [63,62,64,61,65,60,66,59,67,58,68,69,70,71,72,73,74,75,76,77] length = len(_regions[5]) annotations = [ (i, ' ') for i in sorted( ordered_deletions[ max(20-length, 0): ] ) ] # Insertions are not described in the AHo scheme but must be included. insertions = max( length-20 , 0 ) if insertions > 26: return [], startindex, endindex # Too many insertions. Do not apply numbering. elif insertions > 0: # They are placed on residue 63 alphabetically. insertat = annotations.index( (63, ' ') )+1 # Always 6 assert insertat == 6, 'AHo numbering failed' annotations = annotations[:insertat] + [ (63, alphabet[a]) for a in range( insertions ) ] + annotations[insertat:] _numbering[5] = [ (annotations[i], _regions[5][i][1]) for i in range(length) ] ######### # FW3 ############################################ # Move deletions onto 86 then 85. Insertions on 85 # #################################################### ordered_deletions = [86,85,87,84,88,83,89,82,90,81,91,80,92,79,93,78] length=len( _regions[7] ) annotations = [ (i, ' ') for i in sorted( ordered_deletions[ max(16-length, 0): ] ) ] # Insertions are not described in the AHo scheme but must be included. insertions = max( length-16 , 0 ) if insertions > 26: return [], startindex, endindex # Too many insertions. Do not apply numbering. elif insertions > 0: # They are placed on residue 85 alphabetically. insertat = annotations.index( (85, ' ') )+1 # Always 8 assert insertat == 8, 'AHo numbering failed' annotations = annotations[:insertat] + [ (85, alphabet[a]) for a in range( insertions ) ] + annotations[insertat:] _numbering[7] = [ (annotations[i], _regions[7][i][1]) for i in range(length) ] ######### # CDR 3 # ######### # Deletions on 123. # Point of the Aho scheme is that they have accounted for all possible positions. # Assumption is that no more insertions will occur.... # We'll put insertions on 123 linearly.(i.e.ABCDEF...) if they ever do. ordered_deletions = [123,124,122,125,121,126,120,127,119,128,118,129,117,130,116,131,115,132,114,133,113,134,112,135,111, 136,110,137,109,138,108,107] length=len( _regions[9] ) annotations = [ (i, ' ') for i in sorted( ordered_deletions[ max(32-length, 0): ] ) ] # Insertions are not described in the AHo scheme but must be included. insertions = max( length-32 , 0 ) if insertions > 26: return [], startindex, endindex # Too many insertions. Do not apply numbering. elif insertions > 0: # They are placed on residue 123 alphabetically. insertat = annotations.index( (123, ' ') )+1 # Always 17 assert insertat == 17, 'AHo numbering failed' annotations = annotations[:insertat] + [ (123, alphabet[a]) for a in range( insertions ) ] + annotations[insertat:] _numbering[9] = [ (annotations[i], _regions[9][i][1]) for i in range(length) ] # AHo includes one extra position than IMGT in what it considers the variable domain for light chains. #If the last state is 148 and there is at least one more residue left, then add the residue to the numbering. numbering = gap_missing( _numbering ) if len(numbering) > 0: if numbering[-1][0] == (148, ' ') and numbering[-1][1] != '-' and endindex+1 < len(sequence): numbering.append( ( (149, ' '), sequence[endindex+1]) ) endindex +=1 return numbering, startindex, endindex ########### # Chothia # ########### # Heavy chains def number_chothia_heavy(state_vector, sequence): """ Apply the Chothia numbering scheme for heavy chains Rules should be implemented using two strings - the state string and the region string. There are 128 states in the HMMs. Treat X as a direct match in Chothia scheme, I is an insertion. XXXXXXXXXI XXXXXXXXXXXXX XXXXXXXIIIIXX XXXXXXXXXXXXXXXXXX XXXIXIIXXXX XXXXXXXIXXXXXXXXXXXXXXXXXXIIIXXXXXXXXXX XXXXXXXXIIIXX XXXXXXXXXXX' 1111111111 2222222222222 3333333333333 444444444444444444 55555555555 666666666666666666666666666666666666666 7777777777777 88888888888' Regions - (N.B These do not match up with any particular definition of CDR) 1 - Put the insertions at Chothia position 6 2 - Simple mapping (treat "I" states as inserts and not own match states) 3 - CDRH1 - 30 (inc) to 34 (exc) put insertions on 31 4 - Simple mapping (treat "I" states as inserts and not own match states) 5 - CDRH2 - 52 (inc) 58 (exc) put insertions on 52 6 - Simple mapping (treat "I" states as inserts and not own match states) 7 - CDRH3 93 (inc) to 103 (exc) put insertion on 100 8 - Simple mapping (treat "I" states as inserts and not own match states) Regions 1,3,5 and 7 are renumbered """ # State string - 'X' means the imgt position exists in the scheme. 'I' means that it should be treated as an insertion of the previous number state_string = 'XXXXXXXXXIXXXXXXXXXXXXXXXXXXXXIIIIXXXXXXXXXXXXXXXXXXXXXXXIXIIXXXXXXXXXXXIXXXXXXXXXXXXXXXXXXIIIXXXXXXXXXXXXXXXXXXIIIXXXXXXXXXXXXX' # Region string - regions that should be treated separately in putting the numbering together region_string = '11111111112222222222222333333333333333444444444444444455555555555666666666666666666666666666666666666666777777777777788888888888' region_index_dict = {"1":0,"2":1,"3":2,"4":3,"5":4,"6":5,"7":6,"8":7} # Define how the scheme's numbering differs from IMGT at the start of each region. # This is updated in the loop below rels = {0:0, 1:-1, 2:-1, 3:-5, 4:-5, 5:-8, 6:-12, 7:-15} n_regions = 8 exclude_deletions = [0,2,4,6] # Don't put deletions in these regions _regions, startindex, endindex = _number_regions(sequence, state_vector, state_string , region_string, region_index_dict, rels, n_regions, exclude_deletions) ############### # Renumbering # ############### _numbering = [ [], _regions[1] , [], _regions[3] , [], _regions[5], [], _regions[7] ] # Chothia H region 1 (index 0) # Insertions are placed at Chothia position 6. # Count how many we recognised as insertion by the hmm insertions = len( [ 1 for _ in _regions[0] if _[0][1] != " " ] ) # We will place all insertion in this region at Chothia position 6. if insertions: start = _regions[0][0][0][0] # The starting Chothia number as found by the HMM (could easily start from 2 for example) # I have a feeling this may be a source of a bug in very unusual cases. Can't break for now. Will catch mistakes in a validate function. length = len( _regions[0] ) annotations = [ (_, " ") for _ in range(start, 7) ] + [ (6, alphabet[_]) for _ in range(insertions) ] + [(7," "),(8," "),(9," ")] _numbering[0] = [ (annotations[i], _regions[0][i][1]) for i in range(length) ] else: _numbering[0] = _regions[0] # CDR1 # Chothia H region 3 (index 2) # put insertions onto 31 length = len( _regions[2] ) insertions = max(length - 11, 0) # Pulled back to the cysteine as heavily engineered cdr1's are not playing nicely if insertions: annotations = [(_, " ") for _ in range(23,32)] + [(31, alphabet[i]) for i in range(insertions) ] + [(32," "),(33," ")] else: annotations = [(_, " ") for _ in range(23,32)][:length-2] + [(32," "),(33," ")][:length] _numbering[2] = [ (annotations[i], _regions[2][i][1]) for i in range(length) ] # CDR2 # Chothia H region 5 (index 4) # put insertions onto 52 length = len( _regions[4] ) # 50 to 57 inclusive insertions = max(length - 8, 0) # Eight positions can be accounted for, the remainder are insertions # Delete in the order, 52, 51, 50,53, 54 ,55, 56, 57 annotations = [(50, " "),(51, " "), (52, " ")][:max(0,length-5)] annotations += [(52, alphabet[i]) for i in range(insertions) ] annotations += [(53, " "),(54, " "),(55, " "),(56, " "),(57, " ")][ abs( min(0,length-5) ):] _numbering[4] = [ (annotations[i], _regions[4][i][1]) for i in range(length) ] # FW3 - insertions are annotated on 82. The first three are normal positions and annotated automatically. # Additional insertions do not occur with the kabat or the chothia numbering scheme. # It does not make sense to place more than A, B, C on 82 as Martin and AHo work show that this is not a place that accepts # additional insertions. # The decision here is to allow the alignment to place additional insertions. This is in contrast to Martin where the region # is renumbered to place insertions on 72. # CDR3 # Chothia H region 7 (index 6) # put insertions onto 100 length = len( _regions[6] ) if length > 36: return [], startindex, endindex # Too many insertions. Do not apply numbering. annotations = get_cdr3_annotations(length, scheme="chothia", chain_type="heavy") _numbering[6] = [ (annotations[i], _regions[6][i][1]) for i in range(length) ] # Return the full vector and the start and end indices of the numbered region of the sequence return gap_missing( _numbering ), startindex, endindex # Light chains def number_chothia_light(state_vector, sequence): """ Apply the Chothia numbering scheme for light chains Rules should be implemented using two strings - the state string and the region string. There are 128 states in the HMMs. Treat X as a direct match in Chothia scheme, I is an insertion. XXXXXXXXXXXXXXXXXXXXXXXXXXXXX IIIIIIX XXXXXXXXXXXXXXXXXXXX XIIIIIIIXXX XXXXXIXXXXXXXIIXXXXXXXXXXXXXXXXXXXXXX XXXXXIIIIXX XXXXXXXXXXXXX 11111111111111111111111111111 2222222 33333333333333333333 44444444444 5555555555555555555555555555555555555 66666666666 7777777777777 Regions - (N.B These do not match up with any particular definition of CDR) 1 - Simple mapping (treat "I" states as inserts and not own match states) 2 - CDRL1 - 24 (inc) to 35 (exc) put insertions on 30 3 - Simple mapping (treat "I" states as inserts and not own match states) 4 - CDRL2 - 51 (inc) 55 (exc) put insertions on 52 5 - Simple mapping (treat "I" states as inserts and not own match states) 6 - CDRL3 89 (inc) to 98 (exc) put insertion on 95 7 - Simple mapping (treat "I" states as inserts and not own match states) Region 2, 3 and 5 are renumbered """ # Set up the numbering # State string - 'X' means the imgt position exists in the scheme. 'I' means that it should be treated as an insertion of the previous number state_string = 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXIIIIIIXXXXXXXXXXXXXXXXXXXXXXIIIIIIIXXXXXXXXIXXXXXXXIIXXXXXXXXXXXXXXXXXXXXXXXXXXXIIIIXXXXXXXXXXXXXXX' # Region string - regions that should be treated separately in putting the numbering together region_string = '11111111111111111111111222222222222222223333333333333333444444444445555555555555555555555555555555555555666666666666677777777777' region_index_dict = {"1":0,"2":1,"3":2,"4":3,"5":4,"6":5,"7":6} # Define how the scheme's numbering differs from IMGT at the start of each region. # This is updated in the loop below rels = {0:0, 1: 0, 2:-6, 3:-6, 4:-13, 5:-16, 6:-20, } n_regions = 7 exclude_deletions = [1,3,4,5] _regions, startindex, endindex = _number_regions(sequence, state_vector, state_string , region_string, region_index_dict, rels, n_regions, exclude_deletions) _numbering = [ _regions[0], [], _regions[2], [], _regions[4], [], _regions[6] ] ############### # Renumbering # ############### # CDR1 # Chothia L region 2 (index 1) # put insertions onto 30 length = len( _regions[1] ) insertions = max(length - 11, 0) # Eleven positions can be accounted for, the remainder are insertions # Delete forward from 31 annotations = [(24, " "),(25, " "), (26, " "), (27, " "), (28, " "),(29, " "),(30, " ")][:max(0,length)] annotations += [(30, alphabet[i]) for i in range(insertions) ] annotations += [(31, " "),(32, " "),(33, " "),(34, " ")][ abs( min(0,length-11) ):] _numbering[1] = [ (annotations[i], _regions[1][i][1]) for i in range(length) ] # CDR2 # Chothia L region 4 (index 3) # put insertions onto 52. length = len( _regions[3] ) insertions = max( length - 4, 0 ) if insertions > 0: annotations = [(51, " "),(52, " ")] + [(52, alphabet[i]) for i in range(insertions) ] + [(53, " "),(54, " ")] _numbering[3] = [ (annotations[i], _regions[3][i][1]) for i in range(length) ] else: # How to gap L2 in Chothia/Kabat/Martin is unclear so we let the alignment do it. _numbering[3] = _regions[3] # FW3 # Insertions on 68. First deletion 68. Otherwise default to alignment length = len( _regions[4] ) insertions = max(length - 34, 0) if insertions > 0: # Insertions on 68 annotations = [(i," ") for i in range(55,69)]+[(68, alphabet[i]) for i in range(insertions) ]+[(i," ") for i in range(69,89)] _numbering[4] = [ (annotations[i], _regions[4][i][1]) for i in range(length) ] elif length == 33: # First deletion on 68 annotations = [(i," ") for i in range(55,68)]+[(i," ") for i in range(69,89)] _numbering[4] = [ (annotations[i], _regions[4][i][1]) for i in range(length) ] else: # More deletions - allow alignment to place them _numbering[4] = _regions[4] # CDR3 # Chothia L region 6 (index 5) # put insertions onto 95 length = len( _regions[5] ) if length > 35: return [], startindex, endindex # Too many insertions. Do not apply numbering. annotations = get_cdr3_annotations(length, scheme="chothia", chain_type="light") _numbering[5] = [ (annotations[i], _regions[5][i][1]) for i in range(length) ] # Return the full vector and the start and end indices of the numbered region of the sequence return gap_missing( _numbering ), startindex, endindex ######### # Kabat # ######### # Heavy chains def number_kabat_heavy(state_vector, sequence): """ Apply the Kabat numbering scheme for heavy chains Rules should be implemented using two strings - the state string and the region string. There are 128 states in the HMMs. Treat X as a direct match in Kabat scheme, I is an insertion. XXXXXXXXXI XXXXXXXXXXXXXXXXXXXX IIIIXXXXXX XXXXXXXXXXXXXXXX XIXII XXXXXXXXXXXIXXXXXXXXXXXXXXXXXXIIIXXXXXXXXXXXX XXXXXXIII XXXXXXXXXXXXX 1111111111 22222222222222222222 3333333333 4444444444444444 55555 666666666666666666666666666666666666666666666 777777777 8888888888888 Regions - (N.B These do not match up with any particular definition of CDR) 1 - Put the insertions at Chothia position 6 2 - Simple mapping (treat "I" states as inserts and not own match states) 3 - CDRH1 - 30 (inc) to 36 (exc) put insertions on 35 4 - Simple mapping (treat "I" states as inserts and not own match states) 5 - CDRH2 - 52 (inc) 58 (exc) put insertions on 52 6 - Simple mapping (treat "I" states as inserts and not own match states) 7 - CDRH3 93 (inc) to 103 (exc) put insertion on 100 8 - Simple mapping (treat "I" states as inserts and not own match states) """ # Set up the numbering # State string - 'X' means the imgt position exists in the scheme. 'I' means that it should be treated as an insertion of the previous number state_string = 'XXXXXXXXXIXXXXXXXXXXXXXXXXXXXXIIIIXXXXXXXXXXXXXXXXXXXXXXXIXIIXXXXXXXXXXXIXXXXXXXXXXXXXXXXXXIIIXXXXXXXXXXXXXXXXXXIIIXXXXXXXXXXXXX' # Region string - regions that should be treated separately in putting the numbering together region_string = '11111111112222222222222333333333333333334444444444444455555555555666666666666666666666666666666666666666777777777777788888888888' region_index_dict = {"1":0,"2":1,"3":2,"4":3,"5":4,"6":5,"7":6,"8":7} # Define how the scheme's numbering differs from IMGT at the start of each region. # This is updated in the loop below rels = {0:0, 1:-1, 2:-1, 3:-5, 4:-5, 5:-8, 6:-12, 7:-15} n_regions = 8 exclude_deletions = [2,4,6] _regions, startindex, endindex = _number_regions(sequence, state_vector, state_string , region_string, region_index_dict, rels, n_regions, exclude_deletions) ############### # Renumbering # ############### # Renumbering required for 0, 2, 4, 6 regions in Chothia heavy _numbering = [ [], _regions[1] , [], _regions[3] , [], _regions[5], [], _regions[7] ] # Kabat H region 1 (index 0) # Insertions are placed at Kabat position 6. # Count how many we recognised as insertion by the hmm insertions = len( [ 1 for _ in _regions[0] if _[0][1] != " " ] ) # We will place all insertion in this region at Kabat position 6. if insertions: start = _regions[0][0][0][0] # The starting Kabat number as found by the HMM (could easily start from 2 for example) # I have a feeling this may be a source of a bug in very unusual cases. Can't break for now. Will catch mistakes in a validate function. length = len( _regions[0] ) annotations = [ (_, " ") for _ in range(start, 7) ] + [ (6, alphabet[_]) for _ in range(insertions) ] + [(7," "),(8," "),(9," ")] _numbering[0] = [ (annotations[i], _regions[0][i][1]) for i in range(length) ] else: _numbering[0] = _regions[0] # CDR1 # Kabat H region 3 (index 2) # Put insertions onto 35. Delete from 35 backwards length = len( _regions[2] ) insertions = max(0,length - 13) annotations = [(_,' ') for _ in range(23, 36)][:length] annotations += [(35, alphabet[i]) for i in range(insertions) ] _numbering[2] = [ (annotations[i], _regions[2][i][1]) for i in range(length) ] # CDR2 # Chothia H region 5 (index 4) # put insertions onto 52 length = len( _regions[4] ) # 50 to 57 inclusive insertions = max(length - 8, 0) # Eight positions can be accounted for, the remainder are insertions # Delete in the order, 52, 51, 50,53, 54 ,55, 56, 57 annotations = [(50, " "),(51, " "), (52, " ")][:max(0,length-5)] annotations += [(52, alphabet[i]) for i in range(insertions) ] annotations += [(53, " "),(54, " "),(55, " "),(56, " "),(57, " ")][ abs( min(0,length-5) ):] _numbering[4] = [ (annotations[i], _regions[4][i][1]) for i in range(length) ] # FW3 - insertions are annotated on 82. The first three are normal positions and annotated automatically. # Additional insertions do not occur with the kabat or the chothia numbering scheme. # It does not make sense to place more than A, B, C on 82 as Martin and AHo work show that this is not a place that accepts # additional insertions. # The decision here is to allow the alignment to place additional insertions. This is in contrast to Martin where the region # is renumbered to place insertions on 72. # CDR3 # Chothia H region 7 (index 6) # put insertions onto 100 length = len( _regions[6] ) if length > 36: return [], startindex, endindex # Too many insertions. Do not apply numbering. annotations = get_cdr3_annotations(length, scheme="kabat", chain_type="heavy") # Chothia and Kabat the same here _numbering[6] = [ (annotations[i], _regions[6][i][1]) for i in range(length) ] # Return the full vector and the start and end indices of the numbered region of the sequence return gap_missing( _numbering ), startindex, endindex # Light chains def number_kabat_light(state_vector, sequence): """ Apply the Kabat numbering scheme for light chains Rules should be implemented using two strings - the state string and the region string. There are 128 states in the HMMs. Treat X as a direct match in Kabat scheme, I is an insertion. XXXXXXXXXXXXXXXXXXXXXXXXXXXXX IIIIIIX XXXXXXXXXXXXXXXXXXXX XIIIIIIIXXX XXXXXIXXXXXXXIIXXXXXXXXXXXXXXXXXXXXXX XXXXXIIIIXX XXXXXXXXXXXXX 11111111111111111111111111111 2222222 33333333333333333333 44444444444 5555555555555555555555555555555555555 66666666666 7777777777777 Regions - (N.B These do not match up with any particular definition of CDR) 1 - Simple mapping (treat "I" states as inserts and not own match states) 2 - CDRL1 - 24 (inc) to 35 (exc) put insertions on 27 3 - Simple mapping (treat "I" states as inserts and not own match states) 4 - CDRL2 - 51 (inc) 55 (exc) put insertions on 52 5 - Simple mapping (treat "I" states as inserts and not own match states) 6 - CDRL3 89 (inc) to 96 (exc) put insertion on 95 7 - Simple mapping (treat "I" states as inserts and not own match states) """ # Set up the numbering # State string - 'X' means the imgt position exists in the scheme. 'I' means that it should be treated as an insertion of the previous number state_string = 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXIIIIIIXXXXXXXXXXXXXXXXXXXXXXIIIIIIIXXXXXXXXIXXXXXXXIIXXXXXXXXXXXXXXXXXXXXXXXXXXXIIIIXXXXXXXXXXXXXXX' # Region string - regions that should be treated separately in putting the numbering together region_string = '11111111111111111111111222222222222222223333333333333333444444444445555555555555555555555555555555555555666666666666677777777777' region_index_dict = {"1":0,"2":1,"3":2,"4":3,"5":4,"6":5,"7":6} # Define how the scheme's numbering differs from IMGT at the start of each region. # This is updated in the loop below rels = {0:0, 1: 0, 2:-6, 3:-6, 4:-13, 5:-16, 6:-20, } n_regions = 7 exclude_deletions = [1,3,5] _regions, startindex, endindex = _number_regions(sequence, state_vector, state_string , region_string, region_index_dict, rels, n_regions, exclude_deletions) _numbering = [ _regions[0], [], _regions[2], [], _regions[4], [], _regions[6] ] ############### # Renumbering # ############### # CDR1 # Kabat L region 2 (index 1) # put insertions onto 27 length = len( _regions[1] ) insertions = max(length - 11, 0) # Eleven positions can be accounted for, the remainder are insertions # Delete forward from 28 annotations = [(24, " "),(25, " "), (26, " "), (27, " ")][:max(0,length)] annotations += [(27, alphabet[i]) for i in range(insertions) ] annotations += [(28, " "),(29, " "),(30, " "),(31, " "),(32, " "),(33, " "),(34, " ")][ abs( min(0,length-11) ):] _numbering[1] = [ (annotations[i], _regions[1][i][1]) for i in range(length) ] # CDR2 # Chothia L region 4 (index 3) # put insertions onto 52. length = len( _regions[3] ) insertions = max( length - 4, 0 ) if insertions > 0: annotations = [(51, " "),(52, " ")] + [(52, alphabet[i]) for i in range(insertions) ] + [(53, " "),(54, " ")] _numbering[3] = [ (annotations[i], _regions[3][i][1]) for i in range(length) ] else: # How to gap L2 in Chothia/Kabat/Martin is unclear so we let the alignment do it. _numbering[3] = _regions[3] # FW3 # All insertions are placed by alignment. This is in contrast to Martin (and Chothia) where they are placed on 68. # The kabat scheme was defined using a sequence alignment alone. In keeping with this, insertions in FW3 are also only placed # with respect to the sequence alignment (the HMM). # CDR3 # Chothia L region 6 (index 5) # put insertions onto 95 length = len( _regions[5] ) if length > 35: return [], startindex, endindex # Too many insertions. Do not apply numbering. annotations = get_cdr3_annotations(length, scheme="kabat", chain_type="light") _numbering[5] = [ (annotations[i], _regions[5][i][1]) for i in range(length) ] return gap_missing( _numbering ), startindex, endindex ############################# # Martin (extended Chothia) # ############################# # Heavy chains def number_martin_heavy(state_vector, sequence): """ Apply the Martin (extended Chothia) numbering scheme for heavy chains Rules should be implemented using two strings - the state string and the region string. There are 128 states in the HMMs. Treat X as a direct match in Martin scheme, I is an insertion. XXXXXXXXXI XXXXXXXXXXXXXXXXXXXX IIIIXX XXXXXXXXXXXXXXXXXXXX XIXII XXXXXXXXXXXIXXXXXXXXIIIXXXXXXXXXXXXXXXXXXXXXX XXXXXXIII XXXXXXXXXXXXX 1111111111 22222222222222222222 333333 44444444444444444444 55555 666666666666666666666666666666666666666666666 777777777 8888888888888 Regions - (N.B These do not match up with any particular definition of CDR) 1 - Put the insertions at Chothia position 8 2 - Simple mapping (treat "I" states as inserts and not own match states) 3 - CDRH1 - 30 (inc) to 34 (exc) put insertions on 31 4 - Simple mapping (treat "I" states as inserts and not own match states) 5 - CDRH2 - 52 (inc) 58 (exc) put insertions on 52 6 - Simple mapping (treat "I" states as inserts and not own match states) 7 - CDRH3 93 (inc) to 103 (exc) put insertion on 100 8 - Simple mapping (treat "I" states as inserts and not own match states) Regions 1,3,5 and 7 are renumbered """ # Set up the numbering # State string - 'X' means the imgt position exists in the scheme. 'I' means that it should be treated as an insertion of the previous number state_string = 'XXXXXXXXXIXXXXXXXXXXXXXXXXXXXXIIIIXXXXXXXXXXXXXXXXXXXXXXXIXIIXXXXXXXXXXXIXXXXXXXXIIIXXXXXXXXXXXXXXXXXXXXXXXXXXXXIIIXXXXXXXXXXXXX' # Region string - regions that should be treated separately in putting the numbering together region_string = '11111111112222222222222333333333333333444444444444444455555555555666666666666666666666666666666666666666777777777777788888888888' region_index_dict = {"1":0,"2":1,"3":2,"4":3,"5":4,"6":5,"7":6,"8":7} # Define how the scheme's numbering differs from IMGT at the start of each region. # This is updated in the loop below rels = {0:0, 1:-1, 2:-1, 3:-5, 4:-5, 5:-8, 6:-12, 7:-15} n_regions = 8 exclude_deletions = [2,4,5,6] _regions, startindex, endindex = _number_regions(sequence, state_vector, state_string , region_string, region_index_dict, rels, n_regions, exclude_deletions) ############### # Renumbering # ############### # Renumbering required for 0, 2, 4, 6 regions in Chothia heavy _numbering = [ [], _regions[1] , [], _regions[3] , [], _regions[5], [], _regions[7] ] # Chothia H region 1 (index 0) # Insertions are placed at Chothia position 8. # Count how many we recognised as insertion by the hmm insertions = len( [ 1 for _ in _regions[0] if _[0][1] != " " ] ) # We will place all insertion in this region at Chothia position 8. if insertions: start = _regions[0][0][0][0] # The starting Chothia number as found by the HMM (could easily start from 2 for example) # I have a feeling this may be a source of a bug in very unusual cases. Can't break for now. Will catch mistakes in a validate function. length = len( _regions[0] ) annotations = [ (_, " ") for _ in range(start, 9) ] + [ (8, alphabet[_]) for _ in range(insertions) ] + [(9," ")] _numbering[0] = [ (annotations[i], _regions[0][i][1]) for i in range(length) ] else: _numbering[0] = _regions[0] # CDR1 # Chothia H region 3 (index 2) # put insertions onto 31 length = len( _regions[2] ) insertions = max(length - 11, 0) # Pulled back to the cysteine as heavily engineered cdr1's are not playing nicely if insertions: annotations = [(_, " ") for _ in range(23,32)] + [(31, alphabet[i]) for i in range(insertions) ] + [(32," "),(33," ")] else: annotations = [(_, " ") for _ in range(23,32)][:length-2] + [(32," "),(33," ")][:length] _numbering[2] = [ (annotations[i], _regions[2][i][1]) for i in range(length) ] # CDR2 # Chothia H region 5 (index 4) # put insertions onto 52 length = len( _regions[4] ) # 50 to 57 inclusive insertions = max(length - 8, 0) # Eight positions can be accounted for, the remainder are insertions # Delete in the order, 52, 51, 50,53, 54 ,55, 56, 57 annotations = [(50, " "),(51, " "), (52, " ")][:max(0,length-5)] annotations += [(52, alphabet[i]) for i in range(insertions) ] annotations += [(53, " "),(54, " "),(55, " "),(56, " "),(57, " ")][ abs( min(0,length-5) ):] _numbering[4] = [ (annotations[i], _regions[4][i][1]) for i in range(length) ] # FW3 # Place all insertions on 72 explicitly. # This is in contrast to Chothia implementation where 3 insertions are on 82 and then further insertions are placed by the # alignment # Gaps are placed according to the alignment. length = len( _regions[5] ) insertions = max(length - 35, 0) if insertions > 0: # Insertions on 72 annotations = [(i,' ') for i in range(58,73)]+[(72, alphabet[i]) for i in range(insertions) ]+[(i,' ') for i in range(73,93)] _numbering[5] = [ (annotations[i], _regions[5][i][1]) for i in range(length) ] else: # Deletions - all alignment to place them. _numbering[4] = _regions[4] # CDR3 # Chothia H region 7 (index 6) # put insertions onto 100 length = len( _regions[6] ) if length > 36: return [], startindex, endindex # Too many insertions. Do not apply numbering. annotations = get_cdr3_annotations(length, scheme="chothia", chain_type="heavy") _numbering[6] = [ (annotations[i], _regions[6][i][1]) for i in range(length) ] # Return the full vector and the start and end indices of the numbered region of the sequence return gap_missing( _numbering ), startindex, endindex # Light chains def number_martin_light(state_vector, sequence): """ Apply the Martin numbering scheme for light chains Rules should be implemented using two strings - the state string and the region string. There are 128 states in the HMMs. Treat X as a direct match in Martin scheme, I is an insertion. XXXXXXXXXXXXXXXXXXXXXXXXXXXXX IIIIIIX XXXXXXXXXXXXXXXXXXXX XIIIIIIIXXX XXXXXIXXXXXXXIIXXXXXXXXXXXXXXXXXXXXXX XXXXXIIIIXX XXXXXXXXXXXXX 11111111111111111111111111111 2222222 33333333333333333333 44444444444 5555555555555555555555555555555555555 66666666666 7777777777777 Regions - (N.B These do not match up with any particular definition of CDR) 1 - Simple mapping (treat "I" states as inserts and not own match states) 2 - CDRL1 - 30 (inc) to 31 (exc) put insertions on 30 3 - Simple mapping (treat "I" states as inserts and not own match states) 4 - CDRL2 - 51 (inc) 55 (exc) put insertions on 52 5 - Simple mapping (treat "I" states as inserts and not own match states) 6 - CDRL3 89 (inc) to 96 (exc) put insertion on 95 7 - Simple mapping (treat "I" states as inserts and not own match states) Region 2, 3 and 5 are renumbered """ # The Martin and Chothia specification for light chains are very similar. Martin is more explicit in the location of indels # but unlike the heavy chain these are additional instead of changes to the Chothia scheme. Thus, Chothia light is implemented # as martin light. return number_chothia_light(state_vector,sequence) ########### # Wolfguy # ########### # The Wolfguy numbering scheme is an in-house scheme used at Roche. It has been described publicly in the paper: # Prediction of VH-VL domain orientation for antibody variable domain modeling. Bujotzek A. et al. Protein 2015 83(4) 681-95 # # It is similar in gapping as IMGT and is defined only for heavy and light antibody chains. # Unlike other schemes the numbering denotes both the chain (heavy 101-499, light 501-799) and the region (less than -50 framework # greater than -50 CDR). All CDRs of length less than 50 can be handled without the need for insertion codes. Numbering of the # framework behaves similarly to IMGT in that all positions are assumed to be accounted for. Framework insertions are placed by # the alignment. # # Numbering of all CDRs is performed symmetrically with the exception of CDRL1. In this case the CDR is numbered according to a # pattern specific to the canonical class. This is recognised by length and by sequence similarity to a consensus sequence. If a # length has not been observed it is numbered symmetrically. def number_wolfguy_heavy(state_vector, sequence): """ Apply the wolfguy numbering scheme for heavy chains The scheme numbers the sequence using different segments so that the numbering tells you where in the antibody the sequence is describing. XXXXXXXXXIXXXXXXXXXXXXXXXX XXXXXXXXXXXXXX XXXXXXXXXXXXXX XXXXXXXXXXXXXXXXXXIX XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX XXXXXXXXXXXXX XXXXXXXXXXX 11111111111111111111111111 22222222222222 33333333333333 44444444444444444444 555555555555555555555555555555 6666666666666 77777777777' Regions - (N.B These do not match up with any particular definition of CDR) 1 - Simple mapping (treat "I" states as inserts and not own match states) 2 - CDRH1 - 155-199 (inc). Gap symmetrically about 175-176. 3 - Simple mapping (treat "I" states as inserts and not own match states) 4 - CDRH2 - 251-299 (inc). Gap symmetrically about 271-272, then gap back from 294. 5 - Simple mapping (treat "I" states as inserts and not own match states) 6 - CDRH3 331,332 and 351-399 (inc). Gap according to the 7 - Simple mapping (treat "I" states as inserts and not own match states) Start gaps on rhs each time. """ # Set up the numbering # State string - 'X' means the imgt position exists in the scheme. 'I' means that it should be treated as an insertion of the previous number state_string = 'XXXXXXXXXIXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXIXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX' # Region string - regions that should be treated separately in putting the numbering together region_string = '11111111111111111111111111222222222222223333333333333344444444444444444444555555555555555555555555555555666666666666677777777777' region_index_dict = {"1":0,"2":1,"3":2,"4":3,"5":4,"6":5,"7":6} # Define how the scheme's numbering differs from IMGT at the start of each region. # This is updated in the loop below rels = {0:100, 1:124, 2:160, 3:196, 4:226, 5:244, 6:283} n_regions = 7 exclude_deletions = [1,3,5] _regions, startindex, endindex = _number_regions(sequence, state_vector, state_string , region_string, region_index_dict, rels, n_regions, exclude_deletions) ############### # Renumbering # ############### # Renumbering required for 1, 3, 5 regions in wolfguy heavy _numbering = [ _regions[0], [] , _regions[2], [], _regions[4] , [], _regions[6] ] # CDRH1 # Delete symmetrically about 177. Delete right first. # May have to change this to reflect where the point of symmetry is ordered_deletions = [151] for p1,p2 in zip( list(range(152,176)), list(range(199, 175,-1))): ordered_deletions += [ p1,p2 ] length = len( _regions[1] ) annotations = sorted(ordered_deletions[:length]) _numbering[1] = [ ((annotations[i]," "), _regions[1][i][1]) for i in range(length) ] # CDRH2 # Delete symmetrically about 271. Delete right first. # Then delete right from 288 ordered_deletions = [251] for p1,p2 in zip( list(range(252,271)), list(range(290, 271,-1))): ordered_deletions += [ p1,p2 ] ordered_deletions.append( 271 ) ordered_deletions = list(range( 299, 290, -1)) + ordered_deletions length = len( _regions[3] ) annotations = sorted(ordered_deletions[:length]) _numbering[3] = [ ((annotations[i]," "), _regions[3][i][1]) for i in range(length) ] # CDRH3 # Delete symmetrically about 374. Delete right first. # Scheme changes at length 8 # Scheme changes at length 12 ordered_deletions = [] for p1,p2 in zip( list(range(356,374)), list(range(391, 373,-1))): ordered_deletions += [ p1,p2 ] ordered_deletions = [ 354, 394, 355, 393, 392 ] + ordered_deletions ordered_deletions = [331,332] + [ 399, 398, 351, 352, 397, 353, 396, 395 ] + ordered_deletions length = len( _regions[5] ) if length > len(ordered_deletions): return [], startindex, endindex # Too many insertions. Do not apply numbering. annotations = sorted(ordered_deletions[:length]) _numbering[5] = [ ((annotations[i]," "), _regions[5][i][1]) for i in range(length) ] # Return the full vector and the start and end indices of the numbered region of the sequence return sum( _numbering, [] ), startindex, endindex def number_wolfguy_light(state_vector, sequence): """ Apply the wolfguy numbering scheme for light chains The scheme numbers the sequence using different segments so that the numbering tells you where in the antibody the sequence is describing. XXXXXXX XXX XXXXXXXXXXXXX XXXXXXXXXXXXXXXXX XXXXXXXXXXXXXXX XXXXXXXXXXXXXX XXXIXXXXXXX XXXX XXXXXXXXXXXXXXXXXXXX XXXXXXXXXXXXX XXXXXXXXXXX 1111111 AAA BBBBBBBBBBBBB 22222222222222222 333333333333333 44444444444444 55555555555 6666 77777777777777777777 8888888888888 99999999999 Regions - (N.B These do not match up with any particular definition of CDR) 1 - Simple mapping (treat "I" states as inserts and not own match states) A - Move indels onto 508 B - Simple mapping (treat "I" states as inserts and not own match states) 2 - CDRL1 - 551-599 (inc). Assign via the matching consensus sequence and length. 3 - Simple mapping (treat "I" states as inserts and not own match states) 4 - CDRL2 - 651-699 (inc). Gap about 673 then right from 694 5 - Simple mapping (treat "I" states as inserts and not own match states) 6 - Move indels onto 713 and 714 7 - Simple mapping (treat "I" states as inserts and not own match states) 8 - CDRL3 751-799 (inc). Gap symmetrically about 374-375 9 - Simple mapping (treat "I" states as inserts and not own match states) """ # Set up the numbering # State string - 'X' means the imgt position exists in the scheme. 'I' means that it should be treated as an insertion of the previous number state_string = 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXIXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX' # Region string - regions that should be treated separately in putting the numbering together region_string = '1111111AAABBBBBBBBBBBBB222222222222222223333333333333334444444444444455555555555666677777777777777777777888888888888899999999999' region_index_dict = {"1":0,"A":1,"B":2,"2":3,"3":4,"4":5,"5":6,"6":7,"7":8,"8":9,"9":10} # Define how the scheme's numbering differs from IMGT at the start of each region. # This is updated in the loop below rels = {0:500, 1:500, 2:500, 3:527, 4:560, 5:595, 6:631, 7:630, 8:630, 9:646, 10:683} n_regions = 11 exclude_deletions = [1,3,5,7,9] _regions, startindex, endindex = _number_regions(sequence, state_vector, state_string , region_string, region_index_dict, rels, n_regions, exclude_deletions) ############### # Renumbering # ############### # Renumbering required for 1, 3, 5 regions in wolfguy heavy _numbering = [ _regions[0], [], _regions[2], [] , _regions[4], [], _regions[6], [], _regions[8], [], _regions[10] ] # Gaps in the first section go 508 instead of the imgt 510 equivalent length = len(_regions[1] ) annotations = sorted([ (510,' '), (509, ' '), (508, ' ')][ :length ] + [(508,a) for a in alphabet[:max(0, length-3)]]) _numbering[1] = [ (annotations[i], _regions[1][i][1]) for i in range(length) ] # CDRL1 # Number by predicting the canonical length = len(_regions[3] ) annotations = _get_wolfguy_L1( _regions[3], length) _numbering[3] = [ ((annotations[i]," "), _regions[3][i][1]) for i in range(length) ] # CDRL2 # Delete about 673. Finally delete right from 694. Maintain 651 as the last deletion ordered_deletions = [] for p1,p2 in zip( list(range(652,673)), list(range(694, 672,-1))): ordered_deletions += [ p2,p1 ] ordered_deletions = [651] + list(range( 699, 694, -1)) + ordered_deletions + [673] length = len( _regions[5] ) annotations = sorted(ordered_deletions[:length]) _numbering[5] = [ ((annotations[i]," "), _regions[5][i][1]) for i in range(length) ] # The placement of the indel in wolfguy is different to that in imgt length = len( _regions[7] ) insertions = max( 0, length - 4 ) annotations = [(711, ' '), (712, ' '), (713, ' '), (714, ' ')][:length] + [ (714, a) for a in alphabet[:insertions] ] _numbering[7] = [ (annotations[i], _regions[7][i][1]) for i in range(length) ] # CDRL3 # Delete symmetrically about 775. Delete right first. Finally delete 798 and 799 ordered_deletions = [] for p1,p2 in zip( list(range(751,775)), list(range(799, 775,-1))): ordered_deletions += [ p1,p2 ] ordered_deletions.append( 775 ) length = len( _regions[9] ) if length > len(ordered_deletions): return [], startindex, endindex # Too many insertions. Do not apply numbering. annotations = sorted(ordered_deletions[:length]) _numbering[9] = [ ((annotations[i]," "), _regions[9][i][1]) for i in range(length) ] # Return the full vector and the start and end indices of the numbered region of the sequence return sum( _numbering, [] ), startindex, endindex def _get_wolfguy_L1(seq, length): """ Wolfguy's L1 annotation is based on recognising the length and the sequence pattern defined by a set of rules. If the length has not been characterised, we number symmetrically about the middle of the loop. """ # These are the annotations for different lengths of L1 according to the wolfguy definitions. L1_sequences = { 9: [['9', 'XXXXXXXXX', [551, 552, 554, 556, 563, 572, 597, 598, 599]]], 10: [['10', 'XXXXXXXXXX', [551, 552, 553, 556, 561, 562, 571, 597, 598, 599]]], 11: [['11a', 'RASQDISSYLA', [551, 552, 553, 556, 561, 562, 571, 596, 597, 598, 599]], ['11b', 'GGNNIGSKSVH', [551, 552, 554, 556, 561, 562, 571, 572, 597, 598, 599]], ['11b.2','SGDQLPKKYAY', [551, 552, 554, 556, 561, 562, 571, 572, 597, 598, 599]]], 12: [['12a', 'TLSSQHSTYTIE', [551, 552, 553, 554, 555, 556, 561, 563, 572, 597, 598, 599]], ['12b', 'TASSSVSSSYLH', [551, 552, 553, 556, 561, 562, 571, 595, 596, 597, 598, 599]], ['12c', 'RASQSVxNNYLA', [551, 552, 553, 556, 561, 562, 571, 581, 596, 597, 598, 599]], ['12d', 'rSShSIrSrrVh', [551, 552, 553, 556, 561, 562, 571, 581, 596, 597, 598, 599]]], 13: [['13a', 'SGSSSNIGNNYVS', [551, 552, 554, 555, 556, 557, 561, 562, 571, 572, 597, 598, 599]], ['13b', 'TRSSGSLANYYVQ', [551, 552, 553, 554, 556, 561, 562, 563, 571, 572, 597, 598, 599]]], 14: [['14a', 'RSSTGAVTTSNYAN', [551, 552, 553, 554, 555, 561, 562, 563, 564, 571, 572, 597, 598, 599]], ['14b', 'TGTSSDVGGYNYVS', [551, 552, 554, 555, 556, 557, 561, 562, 571, 572, 596, 597, 598, 599]]], 15: [['15', 'XXXXXXXXXXXXXXX', [551, 552, 553, 556, 561, 562, 563, 581, 582, 594, 595, 596, 597, 598, 599]]], 16: [['16', 'XXXXXXXXXXXXXXXX', [551, 552, 553, 556, 561, 562, 563, 581, 582, 583, 594, 595, 596, 597, 598, 599]]], 17: [['17', 'XXXXXXXXXXXXXXXXX', [551, 552, 553, 556, 561, 562, 563, 581, 582, 583, 584, 594, 595, 596, 597, 598, 599]]] } if length in L1_sequences: # Use the pre-defined motif # Find the maximum scoring canonical form for this length. curr_max = None, -10000 for canonical in L1_sequences[length]: sub_score = 0 for i in range( length ): try: sub_score += blosum62[ (seq[i][1].upper(), canonical[1][i].upper() ) ] except KeyError: sub_score += blosum62[ (canonical[1][i].upper(), seq[i][1].upper() ) ] if sub_score > curr_max[1]: curr_max = canonical, sub_score # return the annotations return curr_max[0][2] else: # Use a symmetric numbering about the anchors. ordered_deletions = [] for p1,p2 in zip( list(range(551,575)), list(range(599, 575,-1))): ordered_deletions += [ p2,p1 ] ordered_deletions.append(575) return sorted( ordered_deletions[:length] ) def gap_missing( numbering ): ''' Place gaps when a number is missing. All except wolfguy are continuously numbered ''' # Gaps placed where a number is not present num = [ ((0,' '),'-') ] for p, a in sum( numbering, [] ): if p[0] > num[-1][0][0]+1: for _i in range( num[-1][0][0]+1, p[0] ): num.append( ((_i, ' '), '-' ) ) num.append( (p,a) ) return num[1:] ###################### # Annotation of CDR3 # ###################### def get_cdr3_annotations(length, scheme="imgt", chain_type=""): """ Given a length of a cdr3 give back a list of the annotations that should be applied to the sequence. This function should be depreciated """ az = "ABCDEFGHIJKLMNOPQRSTUVWXYZ" za = "ZYXWVUTSRQPONMLKJIHGFEDCBA" if scheme=="imgt": start, end = 105, 118 # start (inclusive) end (exclusive) annotations = [None for _ in range(max(length,13))] front = 0 back = -1 assert (length-13) < 50, "Too many insertions for numbering scheme to handle" # We ran out of letters. for i in range(min(length,13)): if i%2: annotations[back] = (end+back, " ") back -= 1 else: annotations[front] = (start+front, " ") front += 1 for i in range(max(0,length-13)): # add insertions onto 111 and 112 in turn if i%2: annotations[back] = (112, za[back+6]) back-=1 else: annotations[front] = (111, az[front-7]) front +=1 return annotations elif scheme in [ "chothia", "kabat"] and chain_type=="heavy": # For chothia and kabat # Number forwards from 93 insertions = max(length - 10, 0) assert insertions < 27, "Too many insertions for numbering scheme to handle" # We ran out of letters. ordered_deletions = [ (100, ' '), (99,' '), (98,' '), (97,' '), (96,' '), (95,' '), (101,' '),(102,' '),(94,' '), (93,' ') ] annotations = sorted( ordered_deletions[ max(0, 10-length): ] + [ (100,a) for a in az[:insertions ] ] ) return annotations elif scheme in [ "chothia", "kabat"] and chain_type=="light": # Number forwards from 89 insertions = max(length - 9, 0) assert insertions < 27, "Too many insertions for numbering scheme to handle" # We ran out of letters. ordered_deletions = [ (95,' '),(94,' '),(93,' '),( 92,' '),(91,' '),(96,' '),(97,' '),(90,' '),(89,' ') ] annotations = sorted( ordered_deletions[ max(0, 9-length): ] + [ (95,a) for a in az[:insertions ] ] ) return annotations else: raise AssertionError("Unimplemented scheme") ================================================ FILE: requirements.txt ================================================ biopython ================================================ FILE: setup.py ================================================ import shutil, os, subprocess import site, sys from importlib import util from distutils.core import setup from setuptools.command.install import install class CustomInstallCommand(install): def run(self): install.run(self) # Post-installation routine ANARCI_LOC = os.path.join(site.getsitepackages()[0], 'anarci') # site-packages/ folder ANARCI_BIN = sys.executable.split('python')[0] # bin/ folder shutil.copy('bin/ANARCI', ANARCI_BIN) # copy ANARCI executable print("INFO: ANARCI lives in: ", ANARCI_LOC) # Build HMMs from IMGT germlines os.chdir("build_pipeline") print('INFO: Downloading germlines from IMGT and building HMMs...') print("INFO: running 'RUN_pipeline.sh', this will take a couple a minutes.") proc = subprocess.Popen(["bash", "RUN_pipeline.sh"], stdout = subprocess.PIPE, stderr = subprocess.PIPE) o, e = proc.communicate() print(o.decode()) print(e.decode()) # Copy HMMs where ANARCI can find them shutil.copy( "curated_alignments/germlines.py", ANARCI_LOC ) os.mkdir(os.path.join(ANARCI_LOC, "dat")) shutil.copytree( "HMMs", os.path.join(ANARCI_LOC, "dat/HMMs/") ) # Remove data from HMMs generation try: shutil.rmtree("curated_alignments/") shutil.rmtree("muscle_alignments/") shutil.rmtree("HMMs/") shutil.rmtree("IMGT_sequence_files/") except OSError: pass setup(name='anarci', version='1.3', description='Antibody Numbering and Receptor ClassIfication', author='James Dunbar', author_email='opig@stats.ox.ac.uk', url='http://opig.stats.ox.ac.uk/webapps/ANARCI', packages=['anarci'], package_dir={'anarci': 'lib/python/anarci'}, data_files = [ ('bin', ['bin/muscle', 'bin/muscle_macOS', 'bin/ANARCI']) ], include_package_data = True, scripts=['bin/ANARCI'], cmdclass={"install": CustomInstallCommand, }, # Run post-installation routine )