abcat
abcat는 ANARCII를 핵심 의존성으로 활용하여 항체 Heavy chain 및 Light chain 서열의 Variable Domain(VH, VL) 및 Constant Domain(CH1, CH2, CH3, CL)을 통합 분석하는 Python CLI/라이브러리 도구입니다.
Variable Domain에 대해서는 ANARCII를 통한 번호 부여(IMGT, Kabat, Chothia 등) 및 CDR1, CDR2, CDR3 루프 분리를 수행하고, Constant Domain에 대해서는 정밀 서열 비교를 통해 Isotype, Subclass, Isoallotype, Allotype을 판정합니다.
Key Features
-
Variable Domain (VH / VL) 분석 (ANARCII 기반):
- ANARCII 통합으로 정확한 Variable Domain 경계 인식 및 IMGT/Kabat/Chothia/AHo 번호 부여.
- CDR1, CDR2, CDR3 및 Framework (FR1, FR2, FR3, FR4) 구간 서열 및 길이 자동 추출.
- Heavy chain(VH), Light chain(VK, VL) 자동 구분 및 confidence score 제공.
-
Constant Domain 분석 (Isotype, Subclass, Isoallotype, Allotype):
- Constant Region (CH1, Hinge, CH2, CH3 / CL) 자동 도출.
- Isotype 판정: Heavy chain (
IgG,IgA,IgM,IgE,IgD), Light chain (Kappa,Lambda). - Subclass 판정:
IgG1,IgG2,IgG3,IgG4,IgA1,IgA2,IGKC,IGLC1~IGLC7. - Allotype 및 Isoallotype 판정: IMGT 다형성 위치(Polymorphic positions) 분석을 통한 알로타입 마커 추출.
- Heavy chain:
G1m1,G1m2,G1m3,G1m17,G1m27,G1m28,G2m..,G2m23,G3m5G3m28,nG1m1,nG1m17,nG3m5,nG3m11,nG3m21,nG4m(a),nG4m(b),IGHE*01IGHE*04등. - Light chain:
Km1,Km1,2,Km3등.
- Heavy chain:
-
CLI 및 Python API 지원:
- 단일 서열 및 FASTA 배치 파일 분석 지원.
- CSV, JSON, 콘솔 테이블 형태의 풍부한 리포팅.
Tech Stack
- Python: 3.14+
- Dependency Management:
uv - V-Domain Analysis:
anarcii(https://github.com/oxpig/ANARCII) - C-Domain Alignment & Sequence Comparison:
biopython - Data Models:
pydantic - CLI Framework:
typer/rich - Testing & Quality:
pytest,ruff,mypy
Architecture & Workflow
[Input Amino Acid Sequence (Full Heavy/Light Chain or V+C)]
│
▼
┌──────────────────────────┐
│ ANARCII Wrapper │ (V-domain Numbering & Classification)
└─────────────┬────────────┘
│
┌───────────┴───────────┐
▼ ▼
┌──────────────────┐ ┌───────────────────────────────────┐
│ V-Domain Engine │ │ Constant Domain Engine │
│ │ │ │
│ - VH / VL Check │ │ - Constant Region Extraction │
│ - IMGT Numbering │ │ - C-Gene Profile Alignment │
│ - CDR1/2/3 Bounds│ │ - Isotype & Subclass Matching │
│ - FR1/2/3/4 │ │ - Allotype/Isoallotype Fingerprint│
└────────┬─────────┘ └─────────────────┬─────────────────┘
│ │
└────────────────┬───────────────┘
▼
┌──────────────────────────┐
│ Unified Result (JSON/CSV)│
└──────────────────────────┘
Key Allotype Fingerprints (Reference)
| Subclass / Chain | Marker / Allotype | IMGT / EU Position | Key Polymorphisms |
|---|---|---|---|
| IgG1 (CH1) | G1m17 vs G1m3 |
CH1 IMGT 103, 120 (EU 199, 214) | K214 = G1m17, I199/R214 = G1m3, R214 = nG1m17 |
| IgG1 (CH3) | G1m1 vs nG1m1 |
CH3 IMGT 12, 14 (EU 356, 358) | D356/L358 = G1m1, E356/M358 = nG1m1 |
| IgG1 (CH3) | G1m2 |
CH3 IMGT 110 (EU 431) | G431 = G1m2 |
| IgG1 (CH3) | G1m27 |
CH3 IMGT 101 (EU 422) | I422 = G1m27 |
| IgG1 (CH3) | G1m28 |
CH3 IMGT 115, 116 (EU 435, 436) | R435/Y436 = G1m28 |
| IgG2 (CH2) | G2m23 vs G2m.. |
CH2 EU 282 | M282 = G2m23, V282 = G2m.. |
| IgG3 (CH3) | G3m5 vs nG3m5 |
CH3 EU 435, 436 | R435/F436 = G3m5, H435/Y436 = nG3m5 |
| IgG3 (CH3) | G3m26 |
CH3 EU 436 | R436 = G3m26 |
| IgG4 (CH2) | nG4m(a) vs nG4m(b) |
CH2 EU 309 | L309 = nG4m(a), V309 = nG4m(b) |
| IgE (CH1, CH2) | IGHE*01~IGHE*04 |
CH1 IMGT 41, CH2 IMGT 41 | C141/W246 (*01), W141/W246 (*02), C141/L246 (*03) |
| Kappa (CL) | Km1 vs Km1,2 vs Km3 |
CL IMGT 45, 83 (EU 153, 191) | V153/L191 = Km1, A153/L191 = Km1,2, A153/V191 = Km3 |
Note on Engineered Antibodies (e.g., Trastuzumab): Trastuzumab의 Heavy Chain Fc는 자연형 G1m1,17 형태가 아닌, CH3 영역이
E356-M358로 엔지니어링되어 G1m1 에피토프가 제거된 비정상(allotypic / engineered) 형태입니다. 따라서 판정 시스템은G1m17알로타입만 감지하며(G1m17 only), CH3의E356/M358서열은nG1m1isoallotype으로 분류됩니다.
Installation
1. From PyPI (Recommended)
PyPI에서 abcat 패키지를 직접 설치하여 바로 사용하실 수 있습니다:
uv pip install abcat
2. Development Setup (using uv)
소스 코드 개발 및 기여를 위한 개발 버전 구축 시 uv를 사용합니다:
# 저장소 클론
git clone https://github.com/user/abcat.git
cd abcat
# 개발 의존성을 포함하여 가상환경 동기화
uv sync --extra dev
# 테스트 실행 및 개발 CLI 실행
uv run pytest
uv run abcat analyze --sequence EVQLVES...
CLI & Python API Usage Example
1. CLI Examples
# 기본 분석 (IMGT scheme)
abcat analyze --sequence EVQLVESGGGLVQPGGSLRLSCAASGFTFSDHYMDWVRQAPGKGLEWVGRIRSKANSYATAYAASVKGRFTISRDDSKNTLYLQMNSLRAEDTAVYYCARFDAYWGQGTLVTVSSASTKGPSVFPLAPSSKSTSGGTAALGCLVKDYFPEPVTVSWNSGALTSGVHTFPAVLQSSGLYSLSSVVTVPSSSLGTQTYICNVNHKPSNTKVDKKVEPKSCDKTHTCPPCPAPELLGGPSVFLFPPKPKDTLMISRTPEVTCVVVDVSHEDPEVKFNWYVDGVEVHNAKTKPREEQYNSTYRVVSVLTVLHQDWLNGKEYKCKVSNKALPAPIEKTISKAKGQPREPQVYTLPPSRDELTKNQVSLTCLVKGFYPSDIAVEWESNGQPENNYKTTPPVLDSDGSFFLYSKLTVDKSRWQQGNVFSCSVMHEALHNHYTQKSLSLSPGK
# 줄바꿈이 포함된 서열 분석 (큰따옴표 "..." 로 감싸서 입력)
abcat analyze --sequence "EVQLLESGGGLVQPGGSLRLSCAASGIDLSTYAMGWVRQAPGKGLEWVGLIHRSGRTYYA
TWAKGRFTISKDSSKNTLYLQMNSLRAEDTAVYYCTRSYPDYSATASIWGQGTTVTVSSA
STKGPSVFPLAPSSKSTSGGTAALGCLVKDYFPEPVTVSWNSGALTSGVHTFPAVLQSSG
LYSLSSVVTVPSSSLGTQTYICNVNHKPSNTKVDKKVEPKSCDKTHTCPPCPAPELLGGP
SVFLFPPKPKDTLMISRTPEVTCVVVDVSHEDPEVKFNWYVDGVEVHNAKTKPREEQYNS
TYRVVSVLTVLHQDWLNGKEYKCKVSNKALPAPIEKTISKAKGQPREPQVYTLPPSREEM
TKNQVSLTCLVKGFYPSDIAVEWESNGQPENNYKTTPPVLDSDGSFFLYSKLTVDKSRWQ
QGNVFSCSVMHEALHNHYTQKSLSLSPGK"
# 넘버링 체계(Scheme) 변경 예제 (imgt, kabat, martin, chothia, aho 지원)
abcat analyze --sequence EVQLVES... --scheme kabat
abcat vdomain --sequence EVQLVES... --scheme martin
abcat vdomain --sequence EVQLVES... --scheme chothia
abcat vdomain --sequence EVQLVES... --scheme aho
# FASTA 배치 파일 분석 및 CSV 저장
abcat batch --input examples/full_antibodies.fasta --output results.csv --format csv --scheme imgt
2. Python API Example
from abcat import analyze_chain, analyze_vdomain
seq = "EVQLVESGGGLVQPGGSLRLSCAASGFTFSDHYMDWVRQAPGKGLEWVGRIRSKANSYATAYAASVKGRFTISRDDSKNTLYLQMNSLRAEDTAVYYCARFDAYWGQGTLVTVSSASTKGPSVFPLAPSSKSTSGGTAALGCLVKDYFPEPVTVSWNSGALTSGVHTFPAVLQSSGLYSLSSVVTVPSSSLGTQTYICNVNHKPSNTKVDKKVEPKSCDKTHTCPPCPAPELLGGPSVFLFPPKPKDTLMISRTPEVTCVVVDVSHEDPEVKFNWYVDGVEVHNAKTKPREEQYNSTYRVVSVLTVLHQDWLNGKEYKCKVSNKALPAPIEKTISKAKGQPREPQVYTLPPSRDELTKNQVSLTCLVKGFYPSDIAVEWESNGQPENNYKTTPPVLDSDGSFFLYSKLTVDKSRWQQGNVFSCSVMHEALHNHYTQKSLSLSPGK"
# Martin scheme으로 분석
result_martin = analyze_chain(seq, scheme="martin")
print("Scheme:", result_martin.v_analysis.scheme)
print("CDR1:", result_martin.v_analysis.cdrs["CDR1"].sequence)
print("CDR2:", result_martin.v_analysis.cdrs["CDR2"].sequence)
print("CDR3:", result_martin.v_analysis.cdrs["CDR3"].sequence)
# Kabat scheme으로 V-Domain만 분석
v_kabat = analyze_vdomain(seq, scheme="kabat")
print("Kabat CDR3:", v_kabat.cdrs["CDR3"].sequence)
PyPI Deployment (GitHub Actions)
본 프로젝트는 GitHub Release 발급 시 uv build를 실행하고, PyPI Trusted Publisher (OIDC)를 통해 최신 버전을 PyPI에 자동 게시하는 GitHub Action 워크플로우를 제공합니다.
License
References
- GM Allotypes Reference: Currently testable (serologically) GM allotypes and amino acid substitutions. J Immunol. 2025 Dec 1;214(12):3181–3187. doi: 10.1093/jimmun/vkaf190.
- Allelic Diversity & Isoallotypes Reference: Warrender AK, Kelton W. Beyond Allotypes: The Influence of Allelic Diversity in Antibody Constant Domains. Front Immunol. 2020 Aug 18;11:2016. doi: 10.3389/fimmu.2020.02016. PMID: 32973808; PMCID: PMC7461860.
- Lefranc MP, Lefranc G. Using IMGT unique numbering for IG allotypes and Fc-engineered variants of effector properties and half-life of therapeutic antibodies. Immunol Rev. 2024 Nov;328(1):473-506. doi: 10.1111/imr.13399. Epub 2024 Oct 4. PMID: 39367563; PMCID: PMC11659927.
Metadata
Release files for abcat 0.1.3
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | Provenance | Actions |
|---|---|---|---|---|
| abcat-0.1.3.tar.gz | 16.1 kB | With provenance | Details for abcat-0.1.3.tar.gz |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Actions Reset |
|---|---|---|---|---|
| abcat-0.1.3-py3-none-any.whl | Python 3 | none | any | Details for abcat-0.1.3-py3-none-any.whl |
Total release size: 34.6 kB
Release files / abcat-0.1.3.tar.gz
| Download URL | abcat-0.1.3.tar.gz |
|---|---|
| Size | 16.1 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
4e16a4304fbb97410c4db1cb9ae78529e2896ff7fc80cded8b9e0d8c735609b9
|
|
BLAKE2b-256 checksum How to use checksums |
c254583c82e702ee057ad704c1fcebd61f13c7b5b8f4369b19a644fb1ba8d679
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Aug 21, 2026.
Transparency logRelease files / abcat-0.1.3-py3-none-any.whl
| Download URL | abcat-0.1.3-py3-none-any.whl |
|---|---|
| Size | 18.5 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
ecc43b512ddf0b4811b4acde5507c083ad8fe3cd2b2224757dcb841b07bcfd90
|
|
BLAKE2b-256 checksum How to use checksums |
31421657b4cea5f019ff6f2543b0665602a73b2593f90ff0d87e43f711a90766
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Aug 21, 2026.
Transparency logSecurity for abcat 0.1.3
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
Full provenance
All 2 files in this release have been uploaded with provenance metadata.
Attestation for abcat-0.1.3.tar.gz
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Aug 21, 2026.
Transparency logA note on package security
PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.
To learn more about protecting yourself from malicious actors, visit our package security documentation.