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
)