From 7862cc8a617a961fca918588de74fd9499acfcbd Mon Sep 17 00:00:00 2001 From: s28ale-maker Date: Wed, 22 Jul 2026 15:40:56 -0400 Subject: [PATCH 1/7] Add batch/lexical CL matching, OR-group scoring, and Milestone 4 candidate mappings (issue #6) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - soulcap-match --batch scores every SOULCAP cell type against all CL terms in one pass; --lexical adds an independent OLS4 name-search candidate and writes a marker/lexical agreement report. - Fix scoring: required-marker conflicts now disqualify a candidate instead of just subtracting points, so shared exclusion markers can no longer outrank a term that outright contradicts a required marker. - Fix scoring: CL's "high"/"low" expression-level axioms are no longer treated as equivalent to "negative" (absent). - Add extract_marker_clauses(): SOULCAP's `(A+|B+|C-)` OR-groups were being flattened into independently-required markers instead of "at least one must hold" — this silently suppressed good matches (e.g. CL:0000043 mature basophil never scored for SOULCAP's Basophil profile). Clauses are now evaluated with proper OR semantics. - Fix OLS4 lexical search: exact label matches were buried by OLS4's default relevance ranking; now promoted to rank 1 when present in a wider pool. - Extend marker_map.py's PRO lookups (cytokines, MR1, TCR V-gene segments) via UniProt-accession-based PRO term fetch, closing most of the marker->gene mapping gaps tracked in issue #1. - Add reports/candidate_cl_mappings.md (Milestone 4 draft mappings with rationale/evidence) and log a new CL gap (missing human-specific "group 1 innate lymphoid cell" term, filed as issue #14). Co-Authored-By: Claude Sonnet 5 --- CLAUDE.md | 2 +- LICENSE | 185 ++++ README.md | 27 + ROADMAP.md | 1 + marker_mappings/marker_protein_gene.csv | 34 +- marker_mappings/pr_uniprot_overrides.csv | 3 + reports/candidate_cl_mappings.md | 262 ++++++ reports/candidate_cl_mappings_agreement.tsv | 128 +++ reports/candidate_cl_mappings_batch.tsv | 380 ++++++++ reports/cl_pro_relationships.tsv | 80 +- reports/cl_term_issues.md | 59 ++ reports/marker_validation.md | 6 +- reports/proposed_marker_fixes.xlsx | Bin 0 -> 13819 bytes src/soulcap_cl_mapping/cl_match.py | 702 +++++++++++++- src/soulcap_cl_mapping/hgnc_map.py | 47 +- src/soulcap_cl_mapping/marker_map.py | 95 +- tests/test_cl_match.py | 953 ++++++++++++++++++++ tests/test_hgnc_map.py | 59 ++ tests/test_marker_map.py | 216 ++++- 19 files changed, 3113 insertions(+), 126 deletions(-) create mode 100644 LICENSE create mode 100644 marker_mappings/pr_uniprot_overrides.csv create mode 100644 reports/candidate_cl_mappings.md create mode 100644 reports/candidate_cl_mappings_agreement.tsv create mode 100644 reports/candidate_cl_mappings_batch.tsv create mode 100644 reports/proposed_marker_fixes.xlsx diff --git a/CLAUDE.md b/CLAUDE.md index 5ef1d93..bca24df 100644 --- a/CLAUDE.md +++ b/CLAUDE.md @@ -45,7 +45,7 @@ See [README.md](README.md) for the full overview and setup. | [ROADMAP.md](ROADMAP.md) | Planned work / milestones and their deliverables and dependencies. | | [Notes.md](Notes.md) | Scratch notes on data sources + a marker-syntax quick reference. | | [MARKER_SYNTAX.md](MARKER_SYNTAX.md) | **Canonical spec** of the marker expression language (human-readable guide + EBNF). Cite this for anything parsing/validating marker strings. | -| [reports/](reports/) | Analysis reports. `marker_string_issues.md` is the curated review; `marker_validation.md` is **auto-generated** by the EBNF validator on each sync. `cl_pro_relationships.md`/`.tsv` are **auto-generated** by `soulcap-cl-pro` from Ubergraph. New reports go here. `reports/citation_traversal/` holds gitignored, regenerable snippet caches + summaries from the `citation-traversal` skill. | +| [reports/](reports/) | Analysis reports. `marker_string_issues.md` is the curated review; `marker_validation.md` is **auto-generated** by the EBNF validator on each sync. `cl_pro_relationships.md`/`.tsv` are **auto-generated** by `soulcap-cl-pro` from Ubergraph. `cl_term_issues.md` tracks proposed CL corrections found during mapping work. `candidate_cl_mappings.md` is the Milestone 4 deliverable — proposed SOULCAP→CL mappings with rationale and evidence. `candidate_cl_mappings_batch.tsv`/`candidate_cl_mappings_agreement.tsv` are **auto-generated** by `soulcap-match --batch [--lexical]` (issue #6) — a marker-axiom-only pass and a marker/lexical agreement pass across every SOULCAP cell type; treat as an unreviewed draft shortlist (conflicts must be checked), not curated output. New reports go here. `reports/citation_traversal/` holds gitignored, regenerable snippet caches + summaries from the `citation-traversal` skill. | | `src/soulcap_cl_mapping/` | All Python code. `sync_sheets.py` → `soulcap-sync`; `marker_syntax.py` → `soulcap-validate` (EBNF validator); `snippet_cache.py` → `soulcap-cache`; `report_validator.py` → `soulcap-validate-report`; `cl_pro.py` → `soulcap-cl-pro` (CL→PR relationships via Ubergraph SPARQL). | | `tests/` | Unit tests (mirror `src/` layout). | | `.claude/skills/` | Project skills — see [citation-traversal](.claude/skills/citation-traversal/SKILL.md) and `ontology-term-lookup`. | diff --git a/LICENSE b/LICENSE new file mode 100644 index 0000000..ceabd93 --- /dev/null +++ b/LICENSE @@ -0,0 +1,185 @@ + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship made available under + the License, as indicated by a copyright notice that is included in + or attached to the work (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other transformations + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean, as defined by the License, any work of + authorship, including the original version of the Work and any + modifications or additions to that Work or Derivative Works of the Work, + that is intentionally submitted to the Licensor for inclusion in the Work + by the copyright owner or by an individual or Legal Entity authorized to + submit on behalf of the copyright owner. For the purposes of this + definition, "submitted" means any form of electronic, verbal, or written + communication sent to the Licensor or its representatives, including but + not limited to communication on electronic mailing lists, source code + control systems, and issue tracking systems that are managed by, or on + behalf of, the Licensor for the purpose of discussing and improving the + Work, but excluding communication that is conspicuously marked or + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any Legal Entity on behalf of + whom a Contribution has been received by the Licensor and included + within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by the combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a cross-claim + or counterclaim in a lawsuit) alleging that the Work or any Contributor + Contribution constitutes patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate as of + the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or Derivative + Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, You must include a readable copy of the + attribution notices contained within such NOTICE file, in + at least one of the following places: within a NOTICE text + file distributed as part of the Derivative Works; within + the Source form or documentation, if provided along with the + Derivative Works; or, within a display generated by the + Derivative Works, if and wherever such third-party notices + normally appear. The contents of the NOTICE file are for + informational purposes only and do not modify the License. + You may add Your own attribution notices within Derivative + Works that You distribute, alongside or in addition to the + NOTICE text from the Work, provided that such additional + attribution notices cannot be construed as modifying the + License. + + You may add Your own license statement for Your modifications and + may provide additional grant of rights to use, copy, modify, merge, + publish, distribute, sublicense, and/or sell copies of the + Derivative Works, as You see fit. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or reproducing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or exemplary damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or all other + commercial damages or losses), even if such Contributor has been + advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may offer, and charge a + fee for, acceptance of support, warranty, indemnity, or other + liability obligations and/or rights consistent with this License. + However, in accepting such obligations, You may offer such + obligations only on your own behalf and on Your sole responsibility, + not on behalf of any other Contributor, and only if You agree to + indemnify, defend, and hold each Contributor harmless for any + liability incurred by, or claims asserted against, such Contributor + by reason of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + Copyright 2026 SOULCAP Foundation + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied. See the License for the specific language governing + permissions and limitations under the License. diff --git a/README.md b/README.md index 22afbc5..c346514 100644 --- a/README.md +++ b/README.md @@ -136,6 +136,33 @@ uv run soulcap-cl-pro --reports-dir other/ # write elsewhere uv run soulcap-cl-pro --endpoint # use a different SPARQL endpoint ``` +## Candidate CL matching (`soulcap-match`) + +Ranks CL terms against a SOULCAP marker profile, scored from +`cl_pro_relationships.tsv`. Single-profile mode (paste the four marker columns +for one cell type): + +```bash +uv run soulcap-match --req-excl "CD14- CD3- CD19-" --req-pheno "CD45+ CD56+/hi" --parent "NK cell" +``` + +Batch mode scores every row of `data/marker_combinations.csv` in one pass: + +```bash +uv run soulcap-match --batch # -> reports/candidate_cl_mappings_batch.tsv +uv run soulcap-match --batch --lexical # + name-based OLS4 CL search and an + # agreement report (reports/candidate_cl_mappings_agreement.tsv) +``` + +Marker-axiom scoring can only rank CL terms that already have a PR axiom in +`cl_pro_relationships.tsv` — many CL terms (including some "obvious" parent +classes) have none and are invisible to it. `--lexical` adds an independent +name-based candidate per row; rows where both approaches agree are a much +stronger signal than either alone. **Treat batch output as an unreviewed draft +shortlist** — check the `contradictions`/`marker_conflict` columns before +trusting a rank-1 pick, since shared exclusion markers can inflate scores for +biologically wrong candidates. + ## Skills & literature workflows This repo ships Claude Code skills under `.claude/skills/`: diff --git a/ROADMAP.md b/ROADMAP.md index 27c3bce..e0101d6 100644 --- a/ROADMAP.md +++ b/ROADMAP.md @@ -132,6 +132,7 @@ upstream to `obophenotype/cell-ontology`. | Issue | Terms | Status | |-------|-------|--------| | [#13 NKT cell naming](https://github.com/Cellular-Semantics/SOULCAP_CL_Mapping/issues/13) | CL:4052055 → "CD56-positive T cell, human"; CL:0000814 → "iNKT cell" | Filed upstream: [CL#3663](https://github.com/obophenotype/cell-ontology/issues/3663), [CL#3664](https://github.com/obophenotype/cell-ontology/issues/3664) | +| [#14 Missing human-specific ILC1 term](https://github.com/Cellular-Semantics/SOULCAP_CL_Mapping/issues/14) | CL:0001067 "group 1 innate lymphoid cell" — no `, human` variant, unlike group 2 (CL:0001081) and group 3 (CL:0001078) | Open — not yet filed upstream | --- diff --git a/marker_mappings/marker_protein_gene.csv b/marker_mappings/marker_protein_gene.csv index 548408f..ab63e87 100644 --- a/marker_mappings/marker_protein_gene.csv +++ b/marker_mappings/marker_protein_gene.csv @@ -44,33 +44,33 @@ CXCR3,CXCR3|CD183,Required phenotypic markers,PR:000001207,C-X-C chemokine recep CXCR5,CXCR5|CD185,Required phenotypic markers,PR:000001209,C-X-C chemokine receptor type 5,P32302,C-X-C chemokine receptor type 5,CXCR5,HGNC:1060,,inferred,high,reports/cl_pro_relationships.tsv, FceR1a,,Ideal phenotypic markers|Required phenotypic markers,PR:000007431,high affinity immunoglobulin epsilon receptor subunit alpha,,high affinity immunoglobulin epsilon receptor subunit alpha,,,,ols4,high,https://www.ebi.ac.uk/ols4/api/search?q=FCER1A&ontology=pr; https://nodenormalization-sri.renci.org/1.3/get_normalized_nodes?curie=PR:000007431,high-affinity IgE receptor alpha chain HLA-DR,,Ideal exclusion|Ideal phenotypic markers|Required phenotypic markers,PR:000002015,MHC class II histocompatibility antigen alpha chain DRA,,MHC class II histocompatibility antigen alpha chain DRA,,,,ols4,high,https://www.ebi.ac.uk/ols4/api/search?q=HLA-DRA&ontology=pr; https://nodenormalization-sri.renci.org/1.3/get_normalized_nodes?curie=PR:000002015,HLA-DR is a heterodimer of HLA-DRA + HLA-DRB1; mapped to HLA-DRA as primary chain -IFNg,,Ideal phenotypic markers,,,P01579,interferon gamma,IFNG,HGNC:5438,,monarch,high,https://rest.genenames.org/fetch/symbol/IFNG,intracellular marker -IL-13,,Ideal phenotypic markers,,,P35225,interleukin 13,IL13,HGNC:5973,,monarch,high,https://rest.genenames.org/fetch/symbol/IL13,intracellular marker -IL-17a,,Ideal phenotypic markers,,,Q16552,interleukin 17A,IL17A,HGNC:5981,,monarch,high,https://rest.genenames.org/fetch/symbol/IL17A,intracellular marker -IL-4,,Ideal phenotypic markers,,,P05112,interleukin 4,IL4,HGNC:6014,,monarch,high,https://rest.genenames.org/fetch/symbol/IL4,intracellular marker -IL-5,,Ideal phenotypic markers,,,P05113,interleukin 5,IL5,HGNC:6016,,monarch,high,https://rest.genenames.org/fetch/symbol/IL5,intracellular marker -IL-9,,Ideal phenotypic markers,,,P15248,interleukin 9,IL9,HGNC:6029,,monarch,high,https://rest.genenames.org/fetch/symbol/IL9,intracellular marker +IFNg,,Ideal phenotypic markers,PR:P01579,interferon gamma (human),P01579,interferon gamma,IFNG,HGNC:5438,,monarch,high,https://rest.genenames.org/fetch/symbol/IFNG; https://www.ebi.ac.uk/ols4/api/ontologies/pr/terms?iri=obo:PR_P01579,intracellular marker +IL-13,,Ideal phenotypic markers,PR:P35225,interleukin-13 (human),P35225,interleukin 13,IL13,HGNC:5973,,monarch,high,https://rest.genenames.org/fetch/symbol/IL13; https://www.ebi.ac.uk/ols4/api/ontologies/pr/terms?iri=obo:PR_P35225,intracellular marker +IL-17a,,Ideal phenotypic markers,PR:Q16552,interleukin-17A (human),Q16552,interleukin 17A,IL17A,HGNC:5981,,monarch,high,https://rest.genenames.org/fetch/symbol/IL17A; https://www.ebi.ac.uk/ols4/api/ontologies/pr/terms?iri=obo:PR_Q16552,intracellular marker +IL-4,,Ideal phenotypic markers,PR:P05112,interleukin-4 (human),P05112,interleukin 4,IL4,HGNC:6014,,monarch,high,https://rest.genenames.org/fetch/symbol/IL4; https://www.ebi.ac.uk/ols4/api/ontologies/pr/terms?iri=obo:PR_P05112,intracellular marker +IL-5,,Ideal phenotypic markers,PR:P05113,interleukin-5 (human),P05113,interleukin 5,IL5,HGNC:6016,,monarch,high,https://rest.genenames.org/fetch/symbol/IL5; https://www.ebi.ac.uk/ols4/api/ontologies/pr/terms?iri=obo:PR_P05113,intracellular marker +IL-9,,Ideal phenotypic markers,PR:P15248,interleukin-9 (human),P15248,interleukin 9,IL9,HGNC:6029,,monarch,high,https://rest.genenames.org/fetch/symbol/IL9; https://www.ebi.ac.uk/ols4/api/ontologies/pr/terms?iri=obo:PR_P15248,intracellular marker IgA,,Required phenotypic markers,,,,,,,,manual,low,,Immunoglobulin heavy-chain class A; encoded by IGHA1 and IGHA2 gene family. No single PR ID or UniProt accession covers all isotypes. IgD,,Required phenotypic markers,,,,,,,,manual,low,,Immunoglobulin heavy-chain class D; encoded by IGHD. No single PR ID or UniProt accession. IgE,,Required phenotypic markers,,,,,,,,manual,low,,Immunoglobulin heavy-chain class E; encoded by IGHE. No single PR ID or UniProt accession. IgG,,Required phenotypic markers,,,,,,,,manual,low,,Immunoglobulin heavy-chain class G; encoded by IGHG1/IGHG2/IGHG3/IGHG4 gene family. No single PR ID or UniProt accession covers all subclasses. IgM,,Required phenotypic markers,,,,,,,,manual,low,,Immunoglobulin heavy-chain class M; encoded by IGHM. No single PR ID or UniProt accession. -MR1,,Required phenotypic markers,,,Q95460,"major histocompatibility complex, class I-related",MR1,HGNC:4975,,manual,high,https://rest.genenames.org/fetch/symbol/MR1,MHC-related protein 1; also used as 'MR1 tetramer' reagent for MAIT cell detection +MR1,,Required phenotypic markers,PR:Q95460,major histocompatibility complex class I-related protein 1 (human),Q95460,"major histocompatibility complex, class I-related",MR1,HGNC:4975,,manual,high,https://rest.genenames.org/fetch/symbol/MR1; https://www.ebi.ac.uk/ols4/api/ontologies/pr/terms?iri=obo:PR_Q95460,MHC-related protein 1; also used as 'MR1 tetramer' reagent for MAIT cell detection TCR,,Ideal phenotypic markers|Required phenotypic markers,,,,,,,,manual,medium,,pan-TCR marker; not specific to a single gene -TCRVa24,,Required phenotypic markers,,,,,TRAV10,HGNC:12103,,manual,medium,https://rest.genenames.org/fetch/symbol/TRAV10,IMGT nomenclature: TRAV10 -TCRVa24-Ja18,,Required phenotypic markers,,,,,TRAV10,HGNC:12103,,manual,medium,https://rest.genenames.org/fetch/symbol/TRAV10,Invariant iNKT TCR chain; two-gene marker TRAV10+TRAJ18; gene_symbol populated with TRAV10 as primary TRAV gene -TCRVa7.2,,Required phenotypic markers,,,,,TRAV1-2,HGNC:12102,,manual,medium,https://rest.genenames.org/fetch/symbol/TRAV1-2,IMGT nomenclature: TRAV1-2 -TCRVb11,,Required phenotypic markers,,,,,TRBV25-1,HGNC:12205,,manual,medium,https://rest.genenames.org/fetch/symbol/TRBV25-1,IMGT nomenclature: TRBV25-1 -TCRVd2,,Required phenotypic markers,,,,,TRDV2,HGNC:12263,,manual,medium,https://rest.genenames.org/fetch/symbol/TRDV2,IMGT nomenclature: TRDV2 -TCRVg9,,Required phenotypic markers,,,,,TRGV9,HGNC:12295,,manual,medium,https://rest.genenames.org/fetch/symbol/TRGV9,IMGT nomenclature: TRGV9 +TCRVa24,,Required phenotypic markers,PR:A0A0B4J240,T cell receptor alpha variable 10 (human),A0A0B4J240,T cell receptor alpha variable 10 (human),TRAV10,HGNC:12103,,manual,medium,https://rest.genenames.org/fetch/symbol/TRAV10; https://www.ebi.ac.uk/ols4/api/ontologies/pr/terms?iri=obo:PR_A0A0B4J240,IMGT nomenclature: TRAV10 +TCRVa24-Ja18,,Required phenotypic markers,PR:A0A0B4J240,T cell receptor alpha variable 10 (human),A0A0B4J240,T cell receptor alpha variable 10 (human),TRAV10,HGNC:12103,,manual,medium,https://rest.genenames.org/fetch/symbol/TRAV10; https://www.ebi.ac.uk/ols4/api/ontologies/pr/terms?iri=obo:PR_A0A0B4J240,Invariant iNKT TCR chain; two-gene marker TRAV10+TRAJ18; gene_symbol populated with TRAV10 as primary TRAV gene +TCRVa7.2,,Required phenotypic markers,PR:A0A0B4J238,T cell receptor alpha variable 1-2 (human),A0A0B4J238,T cell receptor alpha variable 1-2 (human),TRAV1-2,HGNC:12102,,manual,medium,https://rest.genenames.org/fetch/symbol/TRAV1-2; https://www.ebi.ac.uk/ols4/api/ontologies/pr/terms?iri=obo:PR_A0A0B4J238,IMGT nomenclature: TRAV1-2 +TCRVb11,,Required phenotypic markers,PR:A0A075B6N4,T cell receptor beta variable 25-1 (human),A0A075B6N4,T cell receptor beta variable 25-1 (human),TRBV25-1,HGNC:12205,,manual,medium,https://rest.genenames.org/fetch/symbol/TRBV25-1; https://www.ebi.ac.uk/ols4/api/ontologies/pr/terms?iri=obo:PR_A0A075B6N4,IMGT nomenclature: TRBV25-1 +TCRVd2,,Required phenotypic markers,PR:A0JD36,T cell receptor delta variable 2 (human),A0JD36,T cell receptor delta variable 2 (human),TRDV2,HGNC:12263,,manual,medium,https://rest.genenames.org/fetch/symbol/TRDV2; https://www.ebi.ac.uk/ols4/api/ontologies/pr/terms?iri=obo:PR_A0JD36,IMGT nomenclature: TRDV2 +TCRVg9,,Required phenotypic markers,PR:Q99603,T cell receptor gamma variable 9 (human),Q99603,T cell receptor gamma variable 9 (human),TRGV9,HGNC:12295,,manual,medium,https://rest.genenames.org/fetch/symbol/TRGV9; https://www.ebi.ac.uk/ols4/api/ontologies/pr/terms?iri=obo:PR_Q99603,IMGT nomenclature: TRGV9 TCRab,,Required phenotypic markers,,,,,,,,manual,medium,,pan-αβ TCR marker; recognises assembled αβ heterodimer TCRgd,,Required phenotypic markers,,,,,,,,manual,medium,,pan-γδ TCR marker; recognises assembled γδ heterodimer -TCRva24,,Required phenotypic markers,,,,,TRAV10,HGNC:12103,,manual,medium,https://rest.genenames.org/fetch/symbol/TRAV10,Likely duplicate of TCRVa24 (different capitalisation) — data quality issue; mapped identically to TCRVa24 / TRAV10 +TCRva24,,Required phenotypic markers,PR:A0A0B4J240,T cell receptor alpha variable 10 (human),A0A0B4J240,T cell receptor alpha variable 10 (human),TRAV10,HGNC:12103,,manual,medium,https://rest.genenames.org/fetch/symbol/TRAV10; https://www.ebi.ac.uk/ols4/api/ontologies/pr/terms?iri=obo:PR_A0A0B4J240,Likely duplicate of TCRVa24 (different capitalisation) — data quality issue; mapped identically to TCRVa24 / TRAV10 Tetramer,,Required phenotypic markers,,,,,,,,manual,low,,generic reagent term; not a specific protein V,,Ideal phenotypic markers|Required phenotypic markers,,,,,,,,manual,low,,likely parsing artifact from multi-word TCR gene name — data quality issue; see reports/marker_validation.md -VB11,,Required phenotypic markers,,,,,TRBV25-1,HGNC:12205,,manual,medium,https://rest.genenames.org/fetch/symbol/TRBV25-1,Duplicate of TCRVb11 (uppercase) — data quality issue; same mapping as TCRVb11 / TRBV25-1 -Vb11,,Required phenotypic markers,,,,,TRBV25-1,HGNC:12205,,manual,medium,https://rest.genenames.org/fetch/symbol/TRBV25-1,Duplicate of TCRVb11 — data quality issue; same mapping as TCRVb11 / TRBV25-1 -Vd1,,Required phenotypic markers,,,,,TRDV1,HGNC:12262,,manual,medium,https://rest.genenames.org/fetch/symbol/TRDV1,IMGT nomenclature: TRDV1 +VB11,,Required phenotypic markers,PR:A0A075B6N4,T cell receptor beta variable 25-1 (human),A0A075B6N4,T cell receptor beta variable 25-1 (human),TRBV25-1,HGNC:12205,,manual,medium,https://rest.genenames.org/fetch/symbol/TRBV25-1; https://www.ebi.ac.uk/ols4/api/ontologies/pr/terms?iri=obo:PR_A0A075B6N4,Duplicate of TCRVb11 (uppercase) — data quality issue; same mapping as TCRVb11 / TRBV25-1 +Vb11,,Required phenotypic markers,PR:A0A075B6N4,T cell receptor beta variable 25-1 (human),A0A075B6N4,T cell receptor beta variable 25-1 (human),TRBV25-1,HGNC:12205,,manual,medium,https://rest.genenames.org/fetch/symbol/TRBV25-1; https://www.ebi.ac.uk/ols4/api/ontologies/pr/terms?iri=obo:PR_A0A075B6N4,Duplicate of TCRVb11 — data quality issue; same mapping as TCRVb11 / TRBV25-1 +Vd1,,Required phenotypic markers,PR:A0A1B0GX56,T cell receptor delta variable 1 (human),A0A1B0GX56,T cell receptor delta variable 1 (human),TRDV1,HGNC:12262,,manual,medium,https://rest.genenames.org/fetch/symbol/TRDV1; https://www.ebi.ac.uk/ols4/api/ontologies/pr/terms?iri=obo:PR_A0A1B0GX56,IMGT nomenclature: TRDV1 delta,,Ideal phenotypic markers|Required phenotypic markers,,,,,,,,manual,low,,likely parsing artifact from multi-word TCR gene name — data quality issue; see reports/marker_validation.md delta1,,Ideal phenotypic markers,,,,,,,,manual,low,,likely parsing artifact from multi-word TCR gene name — data quality issue; see reports/marker_validation.md gamma,,Ideal phenotypic markers|Required phenotypic markers,,,,,,,,manual,low,,likely parsing artifact from multi-word TCR gene name — data quality issue; see reports/marker_validation.md diff --git a/marker_mappings/pr_uniprot_overrides.csv b/marker_mappings/pr_uniprot_overrides.csv new file mode 100644 index 0000000..20daa93 --- /dev/null +++ b/marker_mappings/pr_uniprot_overrides.csv @@ -0,0 +1,3 @@ +pr,uniprot_human +PR:000001479,UniProtKB:P12318 +PR:000001483,UniProtKB:P08637 \ No newline at end of file diff --git a/reports/candidate_cl_mappings.md b/reports/candidate_cl_mappings.md new file mode 100644 index 0000000..85ae59a --- /dev/null +++ b/reports/candidate_cl_mappings.md @@ -0,0 +1,262 @@ +# Candidate CL Mappings + +Milestone 4 deliverable: proposed SOULCAP → Cell Ontology (CL) mappings, each +with a rationale and supporting evidence from the Milestone 1 marker→gene +table and Milestone 2 literature reports. See [ROADMAP.md](../ROADMAP.md) for +the milestone definition. + +Note: Milestone 3 (audit of the *existing* curated mappings) is blocked on the +Google Sheet gaining broad/exact-match and comment columns, so entries below +are proposed directly from marker + literature evidence rather than from a +formal audit pass. + +Candidates were shortlisted with `uv run soulcap-match` (scores CL terms in +[reports/cl_pro_relationships.tsv](cl_pro_relationships.tsv) against a +SOULCAP marker profile) and reviewed by hand — the tool ranks candidates but +does not pick the mapping automatically. Any CL gap surfaced along the way is +also logged in [cl_term_issues.md](cl_term_issues.md). + +--- + +## NK — Natural Killer Cell + +**SOULCAP definition** ([data/marker_combinations.csv](../data/marker_combinations.csv)): +`(CD14-|CD33-|CD64-) CD34- CD3- CD19-` exclusion; `live/ CD45+ CD56+/hi CD127-` +required phenotypic markers. Currently unmapped (`OLS CL identifier` empty). + +| Field | Value | +|---|---| +| Proposed CL term | natural killer cell | +| Proposed CL ID | `CL:0000623` | +| Match type | Exact | +| `soulcap-match` rank | 33 / 826 (score 13) — low despite being the correct match; see rationale | + +**Rationale:** SOULCAP's plain "NK" row has no subtype-discriminating markers +(no CD16, no CD57), so it corresponds to the general parent concept rather +than a bright/dim/decidual subtype. `CL:0000623` matches on all four +negative-exclusion markers (CD14-, CD3-, CD19-; CD20 is not part of the +SOULCAP profile). Its low `soulcap-match` score is *not* evidence against the +mapping — it reflects a real CL gap (see below), not a poor match. + +**Evidence:** +- Marker → gene: CD56 → `PR:000001024` → UniProt `P13591` → gene `NCAM1` + (`HGNC:7656`) — [marker_mappings/marker_protein_gene.csv](../marker_mappings/marker_protein_gene.csv) +- Literature: "Natural killer cells are prototypic members of the innate + lymphoid cell (ILC) family and characterized in humans by expression of the + phenotypic marker CD56 in the absence of CD3." — Van Acker HH et al. 2017 + (PMID:28791027) — [reports/literature/nk_cell_markers.md](literature/nk_cell_markers.md) + +**CL gap flagged:** `CL:0000623` asserts no positive marker axiom at all +(only CD14-/CD19-/CD3-/CD20- negatives), even though CD56 positivity is the +field-standard defining marker and CL already asserts it on this term's own +children (`CL:0000938`, `CL:0000939`). Logged in +[cl_term_issues.md](cl_term_issues.md#natural-killer-cell-missing-cd56-marker-axiom--cl0000623) — +not yet filed as a repo issue. + +--- + +## NK2 — Natural Killer Cell 2 (CD56-bright) + +**SOULCAP definition:** as NK, plus required `CD56hi CD16-/lo CD57-`. + +| Field | Value | +|---|---| +| Proposed CL term | CD16-negative, CD56-bright natural killer cell, human | +| Proposed CL ID | `CL:0000938` | +| Match type | Exact | +| `soulcap-match` rank | 1 / 826 | + +**Rationale:** CL directly asserts CD56 (high) and matches on the shared +negative-exclusion markers; the CD16-negative axiom aligns with SOULCAP's +`CD16-/lo` requirement. Clean top-ranked match, no conflicts. + +**Evidence:** Marker→gene as above (CD56 → NCAM1); CD16 → FCGR3A (see +[marker_mappings/marker_protein_gene.csv](../marker_mappings/marker_protein_gene.csv)). +Literature distinguishing CD56bright/CD56dim NK subsets: +[reports/literature/nk_cell_markers.md](literature/nk_cell_markers.md). + +--- + +## CTNK / NK1 / NK3 — Cytotoxic Natural Killer Cell (CD16-positive) + +**SOULCAP definition:** as NK, plus required `CD16+` (NK1/NK3 additionally +split on `CD57-`/`CD57+`). + +| Field | Value | +|---|---| +| Proposed CL term | CD16-positive, CD56-dim natural killer cell, human | +| Proposed CL ID | `CL:0000939` | +| Match type | Exact (CTNK, broad parent of NK1/NK3) | +| `soulcap-match` rank | 1 / 826 | + +**Rationale:** CL asserts CD16 positive and CD56 low/dim; the SOULCAP CD16+ +requirement matches directly, and CD56+/hi is compatible with CL's "dim" +(present, lower level) rather than contradicting it. Confirmed only after +fixing a `soulcap-match` scoring bug that had conflated CL's "low/dim" sense +with "negative" — see commit history on +[src/soulcap_cl_mapping/cl_match.py](../src/soulcap_cl_mapping/cl_match.py). + +**Note:** CL:0000939 does not itself distinguish CD57- (NK1) from CD57+ +(NK3) — neither SOULCAP's NK1 nor NK3 has a more specific CL match available +yet based on current `cl_pro_relationships` data. Flagged for follow-up, not +yet logged as a formal CL gap. + +**Evidence:** Marker→gene as above; literature on CD16+CD56dim cytotoxic NK +subset: [reports/literature/nk_cell_markers.md](literature/nk_cell_markers.md). + +--- + +## ILCp — Innate Lymphoid Cell Progenitor + +**SOULCAP definition:** required `live/ CD45+ CD3- CD127+ CD56+ CD117+ +CD294-`. No exclusion columns populated; CD34 status is not tested. + +| Field | Value | +|---|---| +| Proposed CL term | CD34-positive, CD56-positive, CD117-positive common innate lymphoid precursor, human | +| Proposed CL ID | `CL:0001074` | +| Match type | Broad — **tentative, unconfirmed** | + +**Rationale:** Chosen on name match ("precursor" = SOULCAP's "Progenitor") +plus agreement on CD56+/CD117+. **Uncertainty:** SOULCAP's ILCp profile does +not test CD34 at all, so it cannot confirm or rule out `CL:0001074`'s +CD34-**positive** requirement — two other CL candidates are equally +marker-consistent and were not ruled out: +- `CL:0001073` CD34-**negative**, CD56+, CD117+ innate lymphoid cell, human — differs from CL:0001074 only in CD34 sign. +- `CL:0001082` immature innate lymphoid cell — generic "immature" label, no CD34 assertion either way. + +This should be treated as a **draft pick, not a confirmed mapping**, until +either the sheet gains a CD34 column value for this row or literature +resolves which CD34 state defines the SOULCAP-intended progenitor stage. + +--- + +## ILC family — Innate Lymphoid Cells + +**SOULCAP definitions:** ILC (parent, `CD3- CD127+`), ILC1 +(`CD56- CD117- CD294-`), ILC2 (`CD56- CD117lo/- CD294+`), ILC3 +(`CD56+/- CD117+ CD294-`), all sharing the same lineage-exclusion columns. + +| SOULCAP | Proposed CL term | Proposed CL ID | Match type | Source | +|---|---|---|---|---| +| ILC | innate lymphoid cell | `CL:0001065` | Exact | Lexical — marker-based scoring returned an unrelated dendritic cell term | +| ILC1 | group 1 innate lymphoid cell | `CL:0001067` | Exact | Lexical, OLS4-verified | +| ILC2 | group 2 innate lymphoid cell, **human** | `CL:0001081` | Exact | OLS4-verified directly — batch lexical search had picked the **mouse** term (`CL:0002089`) | +| ILC3 | group 3 innate lymphoid cell, **human** | `CL:0001078` | Exact | OLS4-verified directly — batch lexical search had over-specified to an NKp44-positive subtype (`CL:0001079`) SOULCAP's profile doesn't test | + +**Rationale:** For all four rows, marker-axiom scoring failed outright +(top candidates were unrelated dendritic-cell terms — `cl_pro_relationships.tsv` +has effectively no useful axioms for this lineage). The plain-name matches are +textbook-standard ILC group nomenclature and were confirmed by direct OLS4 +lookup rather than trusted from the raw batch lexical output, since that +output was independently wrong for both ILC2 (species) and ILC3 +(over-specific subtype) in ways a naive "top lexical hit" read would have +missed. + +**CL gap flagged — ILC1:** Unlike ILC2 and ILC3, **no human-specific "group 1 +innate lymphoid cell" term exists in CL** — only the species-generic +`CL:0001067`. This is an asymmetry in CL's own authoring (two of three ILC +groups have a human-specific term, one doesn't). Logged in +[cl_term_issues.md](cl_term_issues.md) and being filed as a repo issue (see +Open follow-ups). + +--- + +## DC family — Dendritic Cells + +**SOULCAP definitions:** cDC (parent, `CD11chi HLA-DR+`), cDC1 +(`CD1c- CD141+`), cDC2 (`CD1c+ CD141lo/-`), pDC (`CD123hi CD303+`, low CD33). + +| SOULCAP | Proposed CL term | Proposed CL ID | Match type | Source | +|---|---|---|---|---| +| cDC | conventional dendritic cell | `CL:0000990` | Exact | Lexical | +| cDC1 | CD141-positive myeloid dendritic cell | `CL:0002394` | Exact | OLS4-verified directly — batch lexical search had wrongly assigned cDC1 the *same* term as cDC2 | +| cDC2 | CD1c-positive myeloid dendritic cell | `CL:0002399` | Exact | Lexical, confirmed correct by cross-check against cDC1 | +| pDC | plasmacytoid dendritic cell, human | `CL:0001058` | Exact | OLS4-verified directly — see sheet naming issue below | + +**Rationale (cDC1/cDC2):** SOULCAP defines cDC1 as CD1c-**negative**, +CD141-**positive** (classic BDCA3⁺ cDC1) and cDC2 as CD1c-**positive**, +CD141-low/negative (classic BDCA1⁺ cDC2). The raw batch lexical search +returned `CL:0002399` (CD1c-positive) as the top hit for **both** cDC1 and +cDC2 queries — a false agreement caused by the free-text search not +discriminating "1" vs "2" in the query well. Direct OLS4 search for +"CD141-positive myeloid dendritic cell" resolved cDC1 correctly to +`CL:0002394`. + +**Sheet naming issue — pDC:** the sheet's Full Name for `pDC` is "**Peripheral** +Dendritic Cell," but its required markers (`CD123hi`, `CD303+`, low CD33) are +the textbook definition of *plasmacytoid* dendritic cells, not a generic +"peripheral" category. This typo/wrong word is what broke the batch lexical +search for this row (it searched "Peripheral Dendritic Cell" and found an +unrelated "migratory dendritic cell" hit). Likely should read "Plasmacytoid +Dendritic Cell" — **flagging for sheet correction, not changed here** (the +sheet is the source of truth and this repo cannot edit it directly; see +[README.md](../README.md#input-data)). + +**Sheet naming issue — CTNK:** the sheet's Full Name for `CTNK` is +"**Cytotoxice** Natural Killer Cell" (extra trailing "e"). Likely should read +"Cytotoxic Natural Killer Cell." This typo broke the batch lexical search for +that row entirely (zero OLS4 hits) — the marker-based match (`CL:0000939`, +above) was unaffected since it doesn't depend on the name. **Flagging for +sheet correction, not changed here**, same reasoning as pDC above. + +--- + +## Basophil + +**SOULCAP definition:** two sheet rows share the abbreviation `Basophil` (a +PBMC prep and a WB prep), with slightly different required/ideal columns but +the same intent: `live/ CD45+ (CD33+|CD123+) (CD193+|FceR1a+|HLA-DR-|CD303-)`, +excluding CD3- (and CD15-/CD66b- in the WB version's required columns). + +| Field | Value | +|---|---| +| Proposed CL term | mature basophil | +| Proposed CL ID | `CL:0000043` | +| Match type | Exact | + +**Rationale:** Originally, **neither** marker-axiom scoring nor the batch +lexical search found this match — both were checked and both missed it. It +was found by hand-inspecting [cl_pro_relationships.md](cl_pro_relationships.md) +directly: `CL:0000043` asserts CD193(high)/FceR1a(high)/CD123(high) positive +and CD19-/CD3-/CD8- negative — closely matching SOULCAP's required OR-group +and CD3- exclusion. `soulcap-match` now finds it too (see below). + +**Tooling limitation found and fixed:** SOULCAP's marker syntax uses +OR-groups like `(CD193+|FceR1a+|HLA-DR-|CD303-)`, meaning "at least one of +these true." `soulcap-match`'s scorer used to treat every marker inside such +a group as independently **required** (i.e. AND, not OR) — this is why it +never considered `CL:0000043` a candidate: CL doesn't assert *all four* of +CD193+/FceR1a+/HLA-DR-/CD303-, so the group was scored as mostly gaps/ +contradictions instead of "satisfied by one alternative." **Fixed** by adding +`extract_marker_clauses()`, which preserves `|`-joined groups as true OR +clauses (satisfied by any one alternative; contradicted only if *every* +alternative is actively contradicted) instead of flattening them — see +[src/soulcap_cl_mapping/cl_match.py](../src/soulcap_cl_mapping/cl_match.py). +Re-running `soulcap-match` on this exact profile now ranks `CL:0000043` +top of the field, showing `CD123+ (1 of 2 alt.)` and `CD193+ (1 of 4 alt.)` +as matched. + +--- + +## Open follow-ups + +- File the `CL:0000623` missing-CD56-axiom gap as a repo issue (see + [cl_term_issues.md](cl_term_issues.md)), then upstream to + `obophenotype/cell-ontology` once reviewed, following the pattern of + issues [#12](https://github.com/Cellular-Semantics/SOULCAP_CL_Mapping/issues/12) + and [#13](https://github.com/Cellular-Semantics/SOULCAP_CL_Mapping/issues/13). +- ILC1's missing human-specific CL term gap has been filed as a repo issue — + see [cl_term_issues.md](cl_term_issues.md) for the tracking link. +- NK1 vs. NK3 (CD57-/CD57+) have no CL term distinguishing them yet — worth a + second CL gap entry once confirmed against more literature. +- **Fixed:** the `soulcap-match` scorer's OR-group-as-AND limitation (found + via the Basophil case above) — `extract_marker_clauses()` now models + `|`-groups as true OR. Worth re-running `--batch --lexical` across all + rows and re-checking earlier entries in this report, since other good + matches may have been suppressed the same way, not just Basophil's. +- Two sheet naming typos found (CTNK "Cytotoxice", pDC "Peripheral") need + correcting in the Google Sheet master by whoever has edit access — see the + DC family section above. +- Extend this report to the remaining `Marker Combinations` rows once + Milestone 2 (literature evidence, Dr. Diehl) covers more cell types. diff --git a/reports/candidate_cl_mappings_agreement.tsv b/reports/candidate_cl_mappings_agreement.tsv new file mode 100644 index 0000000..1132d1a --- /dev/null +++ b/reports/candidate_cl_mappings_agreement.tsv @@ -0,0 +1,128 @@ +abbreviation full_name parent type_of_match existing_cl_id marker_cl_id marker_cl_label marker_score marker_conflict marker_note lexical_cl_id lexical_cl_label lexical_note agreement +NK Natural Killer Cell Exact CL:0002338 CD56-positive, CD161-positive immature natural killer cell, human 23 CL:0000623 natural killer cell no +NK2 Natural Killer Cell 2 NK Surface Only (SO) CL:0000938 CD16-negative, CD56-bright natural killer cell, human 23 CL:4052052 uterine natural killer cell 2, human no +CTNK Cytotoxice Natural Killer Cell NK SO and Cytokine CL:0000939 CD16-positive, CD56-dim natural killer cell, human 23 no CL hits no +NK1 Natural Killer Cell 1 CTNK SO and TF CL:0000939 CD16-positive, CD56-dim natural killer cell, human 23 CL:4052051 uterine natural killer cell 1, human no +NK3 Natural Killer Cell 3 CTNK TF ONLY CL:0000939 CD16-positive, CD56-dim natural killer cell, human 23 CL:4052053 uterine natural killer cell 3, human no +ILCp Innate Lymphoid Cell Progenitor Surface Only (SO) CL:0001073 CD34-negative, CD56-positive, CD117-positive innate lymphoid cell, human 15 CL:0001082 immature innate lymphoid cell no +ILC Innate Lymphoid Cell Surface Only (SO) CL:0001057 myeloid dendritic cell, human 25 CL:0001065 innate lymphoid cell no +ILC1 Innate Lymphoid Cell 1 ILC Surface Only (SO) CL:0001057 myeloid dendritic cell, human 29 CL:0001067 group 1 innate lymphoid cell no +ILC2 Innate Lymphoid Cell 2 ILC Surface Only (SO) CL:0001057 myeloid dendritic cell, human 29 CL:0002089 group 2 innate lymphoid cell, mouse no +ILC3 Innate Lymphoid Cell 3 ILC Surface Only (SO) CL:0002338 CD56-positive, CD161-positive immature natural killer cell, human 29 CL:0001079 NKp44-positive group 3 innate lymphoid cell, human no +cDC Conventional Dendritic Cell Exact CL:0002008 CD34-positive, CD38-positive eosinophil progenitor cell 23 CL:0000990 conventional dendritic cell no +cDC1 Conventional Dendritic Cell 1 DCM Exact CL:0002008 CD34-positive, CD38-positive eosinophil progenitor cell 23 CL:0002399 CD1c-positive myeloid dendritic cell no +cDC2 Conventional Dendritic Cell 2 DCM Exact CL:0002008 CD34-positive, CD38-positive eosinophil progenitor cell 23 CL:0002399 CD1c-positive myeloid dendritic cell no +pDC Peripheral Dendritic Cell Exact CL:0000991 CD11c-negative plasmacytoid dendritic cell 22 CL:4047054 migratory dendritic cell no +Basophil Basophil Exact CL:0000614 basophilic myelocyte 18 CD15-/CD66B- (all alt. conflict) CL:0000767 basophil no +Basophil Basophil Exact CL:0000043 mature basophil 17 CL:0000767 basophil no +Mono Monocyte Exact CL:0000614 basophilic myelocyte 24 CL:0000576 monocyte no +CMo Classical Monocyte Mono Exact CL:0000614 basophilic myelocyte 28 CL:0000860 classical monocyte no +NCMo Non-classical Monocyte Mono Exact CL:0000769 basophilic metamyelocyte 28 CL:0000875 non-classical monocyte no +IntMo Intermediate Monocyte Mono Exact CL:0000769 basophilic metamyelocyte 28 CL:0002393 intermediate monocyte no +Neut Neutrophil Exact CL:0000582 neutrophilic metamyelocyte 22 CL:0000775 neutrophil no +Eos Eosinophil Exact CL:0000612 eosinophilic myelocyte 26 CL:0000771 eosinophil no +B cell B cell Exact CL:0000819 B-1 B cell 15 OLS4 search failed: HTTPSConnectionPool(host='www.ebi.ac.uk', port=443): Read timed out. (read timeout=15) no +ASC Antibody Secreting Cell Surface Only (SO) CL:0002115 B220-positive CD38-positive unswitched memory B cell 23 CL:0000946 antibody secreting cell no +PB Plasmablast ASC Surface Only (SO) CL:0002115 B220-positive CD38-positive unswitched memory B cell 26 CL:0000980 plasmablast no +PC Plasma Cell ASC Surface Only (SO) CL:0000962 Bm2 B cell 16 CD20- CL:0000786 plasma cell no +Transitional Transitional B cell Exact no qualified markers found CL:0000818 transitional stage B cell no +T1/T2 B Transitonal B cell 1 and 2 CL:0002109 B220-positive CD38-positive naive B cell 23 no CL hits no +Mature B Mature B cell Exact CL:0000961 Bm1 B cell 19 CL:0000785 mature B cell no +T3 Transitional B cell 3 Mature B Exact CL:0000961 Bm1 B cell 19 CL:0000960 T3 B cell no +Naive Naive B cell Mature B Exact CL:0002102 CD38-negative naive B cell 20 CL:0000788 naive B cell no +BDN Double Negative B cells Mature B Exact CL:0002102 CD38-negative naive B cell 19 CL:0002103 IgG-positive double negative memory B cell no +BDN1 Double Negative B cell 1 BDN Exact CL:0000961 Bm1 B cell 23 CL:0000800 mature gamma-delta T cell no +BDN2 Double Negative B cell 2 BDN Exact CL:0002102 CD38-negative naive B cell 20 CL:0000806 DN2 thymocyte no +BDN3 Double Negative B cell 3 BDN Exact CL:0002102 CD38-negative naive B cell 20 CL:0000807 DN3 thymocyte no +BDN4 Double Negative B cell 4 BDN Exact CL:0000961 Bm1 B cell 23 CL:0000808 DN4 thymocyte no +Bmem Memory B cell Exact CL:0002112 B220-positive CD38-negative unswitched memory B cell 24 CL:0000787 memory B cell no +IgD only IgD only Memory B cell Bmem Exact CL:0002112 B220-positive CD38-negative unswitched memory B cell 24 CL:0001053 IgD-negative memory B cell no +Unswitched Unswitched Memory B cell Bmem Exact CL:0002112 B220-positive CD38-negative unswitched memory B cell 25 CL:0000970 unswitched memory B cell no +IgM only IgM-only Memory B cell Bmem Exact CL:0002112 B220-positive CD38-negative unswitched memory B cell 24 CL:0000971 IgM memory B cell no +Switched Switched Memory B cell Bmem Exact CL:0002112 B220-positive CD38-negative unswitched memory B cell 25 CL:0002117 IgG-negative class switched memory B cell no +IgA IgA-Class Switched B cell Switched Surface Only (SO) CL:0002112 B220-positive CD38-negative unswitched memory B cell 24 CL:0000973 IgA memory B cell no +IgG IgG-Class Switched B cell Switched Surface Only (SO) CL:0002112 B220-positive CD38-negative unswitched memory B cell 24 CL:0002117 IgG-negative class switched memory B cell no +IgE IgE-Class Switched B cell Switched Surface Only (SO) CL:0002112 B220-positive CD38-negative unswitched memory B cell 24 CL:0000948 IgE memory B cell no +T cell T lymphocyte Exact CL:0002468 Gr1-low myeloid suppressor cell 7 CL:0002103 IgG-positive double negative memory B cell no +CD56+ T cell CD56+ T cell T cell Exact CL:0002468 Gr1-low myeloid suppressor cell 7 CL:0000939 CD16-positive, CD56-dim natural killer cell, human no +CD56+ CD4 T cell CD56+ CD4 T cell CD4+ T cell Exact CL:0002039 immature NK T cell stage I, mouse 9 CL:0000037 hematopoietic stem cell no +CD56+ CD8 T cell CD56+ CD8 T cell CD8+ T cell Exact CL:0000900 naive thymus-derived CD8-positive, alpha-beta T cell 14 CL:0000037 hematopoietic stem cell no +CD56+ TCRab CD56+ alpha/beta T cell TCRab Exact CL:0002468 Gr1-low myeloid suppressor cell 7 CL:0000096 mature neutrophil no +CD56+ CD4+ TCRab CD56+ CD4+ alpha/beta T cell CD4+ TCRab T cell Exact CL:0000895 naive thymus-derived CD4-positive, alpha-beta T cell 13 CL:0000096 mature neutrophil no +CD56+ CD8+ TCRab CD56+ CD8+ alpha/beta T cell CD8+ TCRab T cell Exact CL:0000900 naive thymus-derived CD8-positive, alpha-beta T cell 13 CL:0000096 mature neutrophil no +CD56+ CD4+/CD8+ TCRab CD56+ CD4+/CD8+ alpha/beta T cell CD4+/CD8+ TCRab T cell Exact CL:0002039 immature NK T cell stage I, mouse 9 CL:0000096 mature neutrophil no +CD56+ CD4-/CD8- TCRab CD56+ CD4-/CD8- alpha/beta T cell CD4-/CD8- TCRab T cell Exact CL:0000803 CD4-negative CD8-negative gamma-delta intraepithelial T cell 10 CL:0000096 mature neutrophil no +CD56+ TCRgd CD56+ gamma/delta T cell TCRgd Exact CL:0002468 Gr1-low myeloid suppressor cell 7 no CL hits no +CD56+ CD4+ TCRgd CD56+ CD4+ gamma/delta T cell CD4+ TCRgd T cell Exact CL:0000895 naive thymus-derived CD4-positive, alpha-beta T cell 13 no CL hits no +CD56+ CD8+ TCRgd CD56+ CD8+ gamma/delta T cell CD8+ TCRgd T cell Exact CL:0000900 naive thymus-derived CD8-positive, alpha-beta T cell 13 no CL hits no +CD56+ CD4+/CD8+ TCRgd CD56+ CD4+/CD8+ gamma/delta T cell CD4+/CD8+ TCRgd Exact CL:0002039 immature NK T cell stage I, mouse 9 no CL hits no +CD56+ CD8-/CD8- TCRgd CD56+ CD8-/CD8- gamma/delta T cell CD4-/CD8- TCRgd Exact CL:0000803 CD4-negative CD8-negative gamma-delta intraepithelial T cell 11 no CL hits no +iNKT Invariant Natural Killer T cell T cell Exact CL:0002468 Gr1-low myeloid suppressor cell 7 CL:0000814 mature NK T cell no +TCRab alpha/beta T cell T cell Exact CL:0002468 Gr1-low myeloid suppressor cell 7 CL:0000790 immature alpha-beta T cell no +TCRgd gamma/delta T cell T cell Exact CL:0002468 Gr1-low myeloid suppressor cell 7 CL:0000798 gamma-delta T cell no +CD4+ T cell alpha/beta and gamma/delta CD4+ T cells T cell Exact CL:0000895 naive thymus-derived CD4-positive, alpha-beta T cell 13 CL:0000794 CD8-positive, alpha-beta cytotoxic T cell no +CD8+ T cell alpha/beta and gamma/delta CD8+ T cells T cell Exact CL:0000900 naive thymus-derived CD8-positive, alpha-beta T cell 13 CL:0000794 CD8-positive, alpha-beta cytotoxic T cell no +CD4+/CD8+ T cell alpha/beta and gamma/delta CD4+ and CD8+ T cells T cell Exact CL:0002039 immature NK T cell stage I, mouse 9 CL:0000794 CD8-positive, alpha-beta cytotoxic T cell no +CD4-/CD8- T cell alpha/beta and gamma/delta CD4- and CD8- T cells T cell Exact CL:0000803 CD4-negative CD8-negative gamma-delta intraepithelial T cell 11 CL:0000794 CD8-positive, alpha-beta cytotoxic T cell no +CD4+ TCRab T cell CD4+ alpha/beta T cell TCRab Exact CL:0000895 naive thymus-derived CD4-positive, alpha-beta T cell 13 CL:0020033 stem cell memory CD4-positive, alpha-beta T cell no +CD8+ TCRab T cell CD8+ alpha/beta T cell TCRab Exact CL:0000900 naive thymus-derived CD8-positive, alpha-beta T cell 13 CL:0020034 stem cell memory CD8-positive, alpha-beta T cell no +CD4+/CD8+ TCRab T cell CD4+ and CD8+ alpha/beta T cell TCRab Exact CL:0002039 immature NK T cell stage I, mouse 9 CL:0001203 CD8-positive, alpha-beta memory T cell, CD45RO-positive no +CD4-/CD8- TCRab T cell CD4- and CD8- alpha/beta T cell TCRab Exact CL:0000803 CD4-negative CD8-negative gamma-delta intraepithelial T cell 11 CL:0001203 CD8-positive, alpha-beta memory T cell, CD45RO-positive no +CD4+ TCRgd T cell CD4+ gamma/delta T cell TCRgd Exact CL:0000895 naive thymus-derived CD4-positive, alpha-beta T cell 13 CL:0000803 CD4-negative CD8-negative gamma-delta intraepithelial T cell no +CD8+ TCRgd T cell CD8+ gamma/delta T cell TCRgd Exact CL:0000900 naive thymus-derived CD8-positive, alpha-beta T cell 13 CL:0000802 CD8-alpha alpha positive, gamma-delta intraepithelial T cell no +CD4+/CD8+ TCRgd CD4+/CD8+ gamma/delta T cell TCRgd Exact CL:0002039 immature NK T cell stage I, mouse 9 CL:0000803 CD4-negative CD8-negative gamma-delta intraepithelial T cell no +CD4-/CD8- TCRgd CD4-/CD8- gamma/delta T cell TCRgd Exact CL:0000803 CD4-negative CD8-negative gamma-delta intraepithelial T cell 10 CL:0000803 CD4-negative CD8-negative gamma-delta intraepithelial T cell yes +MAIT Mucosal-associated Invariant T cell T Lymph Exact CL:0002468 Gr1-low myeloid suppressor cell 7 CL:0000940 mucosal-associated invariant T cell no +Conv TCRab T Lymph Exact CL:0002468 Gr1-low myeloid suppressor cell 6 no CL hits no +CD4+ Conv TCRab ConT TCRab Exact CL:0000895 naive thymus-derived CD4-positive, alpha-beta T cell 12 no CL hits no +CD8+ Conv TCRab ConT TCRab Exact CL:0000900 naive thymus-derived CD8-positive, alpha-beta T cell 12 no CL hits no +CD4+/CD8+ Conv TCRab ConT TCRab Exact CL:0000809 double-positive, alpha-beta thymocyte 8 no CL hits no +CD4-/CD8- Conv TCRab ConT TCRab Exact CL:0000803 CD4-negative CD8-negative gamma-delta intraepithelial T cell 9 no CL hits no +Tcm Central memory alpha/beta and gamma/delta T cells T cell Exact CL:0001057 myeloid dendritic cell, human 15 no CL hits no +CD4+ Tcm CD4+ central memory alpha/beta and gamma/delta T cells CD4+ T cell Exact CL:0001057 myeloid dendritic cell, human 15 no CL hits no +CD4+ TCRab Tcm CD4+ central memory alpha/beta T cell CD4+ TCRab T cell Exact CL:0001057 myeloid dendritic cell, human 15 CL:0000904 central memory CD4-positive, alpha-beta T cell no +CD4+ TCRgd Tcm CD4+ central memory gamma/delta T cell CD4+ TCRgd T cell CL:0001057 myeloid dendritic cell, human 15 no CL hits no +CD8+ Tcm CD8+ central memory T cell CD8+ T cell Exact CL:0001057 myeloid dendritic cell, human 15 CL:0000907 central memory CD8-positive, alpha-beta T cell no +CD8+ TCRab Tcm CD8+ central memory alpha/beta T cell CD8+ TCRab T cell Exact CL:0001057 myeloid dendritic cell, human 15 CL:0000907 central memory CD8-positive, alpha-beta T cell no +CD8+ TCRgd Tcm CD8+ central memory gamma/delta T cell CD8+ TCRgd T cell CL:0001057 myeloid dendritic cell, human 15 no CL hits no +Tnaive Naive alpha/beta and gamma/delta T cell T cell Exact CL:0001057 myeloid dendritic cell, human 15 no CL hits no +CD4+ Tnaive CD4+ Naive alpha/beta and gamma/delta T cell CD4+ T cell Exact CL:0001057 myeloid dendritic cell, human 15 no CL hits no +CD4+ TCRab Tnaive CD4+ naive alpha/beta T cell CD4 TCRab T cell Exact CL:0001057 myeloid dendritic cell, human 15 CL:0000895 naive thymus-derived CD4-positive, alpha-beta T cell no +CD4+ TCRgd Tnaive CD4+ naive gamma/delta T cell CD4+ TCRgd T cell CL:0001057 myeloid dendritic cell, human 15 no CL hits no +CD8+ Tnaive CD8+ naive alpha/beta and gamma/delta T cell CD8+ T cell Exact CL:0001057 myeloid dendritic cell, human 15 no CL hits no +CD8+ TCRab Tnaive CD8+ naive alpha/beta T cell CD8+ TCRab T cell Exact CL:0001057 myeloid dendritic cell, human 15 CL:0000900 naive thymus-derived CD8-positive, alpha-beta T cell no +CD8+ TCRgd Tnaive CD8+ naive gamma/delta T cell CD8+ TCRgd T cell CL:0001057 myeloid dendritic cell, human 15 no CL hits no +Tem Effector memory T cell T cell Exact CL:0001057 myeloid dendritic cell, human 15 CL:0000905 effector memory CD4-positive, alpha-beta T cell no +CD4+ Tem CD4+ effector memory alpha/beta and gamma/delta T cells CD4+ T cell Exact CL:0001057 myeloid dendritic cell, human 15 no CL hits no +CD4+ TCRab Tem CD4+ effector memory alpha/beta T cell CD4+ TCRab T cell Exact CL:0001057 myeloid dendritic cell, human 15 CL:0000905 effector memory CD4-positive, alpha-beta T cell no +CD4+ TCRgd Tem CD4+ effector memory gamma/delta T cell CD4+ TCRgd T cell CL:0001057 myeloid dendritic cell, human 15 no CL hits no +CD8+ Tem CD8+ effector memory T cell CD8+ T cell Exact CL:0001057 myeloid dendritic cell, human 15 CL:0000913 effector memory CD8-positive, alpha-beta T cell no +CD8+ TCRab Tem CD8+ effector memory alpha/beta T cell CD8+ TCRab T cell Exact CL:0001057 myeloid dendritic cell, human 15 CL:0000913 effector memory CD8-positive, alpha-beta T cell no +CD8+ TCRgd Tem CD8+ effector memory gamma/delta T cell CD8+ TCRgd T cell CL:0001057 myeloid dendritic cell, human 15 no CL hits no +Temra CD45RA+ effector memory alpha/beta and gamma/delta T cell T cell Exact CL:0001057 myeloid dendritic cell, human 15 no CL hits no +CD4+ Temra CD4+ CD45RA+ effector memory alpha/beta and gamma/delta T cell CD4+ T cell Exact CL:0001057 myeloid dendritic cell, human 15 no CL hits no +CD4+ TCRab Temra CD4+ CD45RA+ effector memory alpha/beta T cell CD4 TCRab T cell Exact CL:0001057 myeloid dendritic cell, human 15 CL:4030002 effector memory CD45RA-positive, alpha-beta T cell, terminally differentiated no +CD4+ TCRgd Temra CD4+ CD45RA+ effector memory gamma/delta T cell CD4+ TCRgd T cell CL:0001057 myeloid dendritic cell, human 15 no CL hits no +CD8+ Temra CD8+ CD45RA+ effector memory alpha/beta and gamma/delta T cell CD8+ T cell Exact CL:0001057 myeloid dendritic cell, human 15 no CL hits no +CD8+ TCRab Temra CD8+ CD45RA+ effector memory alpha/beta T cell CD8+ TCRab T cell Exact CL:0001057 myeloid dendritic cell, human 15 CL:0000913 effector memory CD8-positive, alpha-beta T cell no +T helper TCRab CL:0002468 Gr1-low myeloid suppressor cell 6 CL:0000492 CD4-positive helper T cell no +T cytotoxic TCRab CL:0001057 myeloid dendritic cell, human 14 CL:0000794 CD8-positive, alpha-beta cytotoxic T cell no +ConT Treg-like CD4 ConT CL:0000896 activated CD4-positive, alpha-beta T cell 13 CL:0000815 regulatory T cell no +ConT Tfh-like CD4 ConT CL:0000896 activated CD4-positive, alpha-beta T cell 13 CL:0000492 CD4-positive helper T cell no +Th1-like CD4 ConT CL:0000896 activated CD4-positive, alpha-beta T cell 13 CL:0000492 CD4-positive helper T cell no +Th2-like CD4 ConT CL:0000896 activated CD4-positive, alpha-beta T cell 13 CL:0000546 T-helper 2 cell no +Th9-like CL:0000546 T-helper 2 cell 12 no CL hits no +Th17-like CD4 ConT CL:0000896 activated CD4-positive, alpha-beta T cell 13 CL:0000492 CD4-positive helper T cell no +CD4 PanT helper CD4/CD8 PanT CL:0000895 naive thymus-derived CD4-positive, alpha-beta T cell 13 no CL hits no +Th1-like Surface Only CL:0000545 T-helper 1 cell 16 CL:0000492 CD4-positive helper T cell no +Th2-like CL:0000546 T-helper 2 cell 16 CL:0000546 T-helper 2 cell yes +Th9-like CL:0000546 T-helper 2 cell 16 no CL hits no +Th17-like CL:0000899 T-helper 17 cell 16 CL:0000492 CD4-positive helper T cell no +Tfh CL:0001057 myeloid dendritic cell, human 14 CL:0000917 Tc1 cell no +CD4 PanT Treg CD4/CD8 PanT CL:0000896 activated CD4-positive, alpha-beta T cell 17 no CL hits no +Vg9 Vd2 TCRgd CL:0002468 Gr1-low myeloid suppressor cell 6 no CL hits no +Vd2 TCRgd CL:0002468 Gr1-low myeloid suppressor cell 6 no CL hits no +Vd3 TCRgd CL:0002468 Gr1-low myeloid suppressor cell 6 no CL hits no +Vg9 Vd1 CL:0002468 Gr1-low myeloid suppressor cell 6 no CL hits no +Vd1 TCRgd CL:0002468 Gr1-low myeloid suppressor cell 6 no CL hits no +Vg9 TCRgd CL:0002468 Gr1-low myeloid suppressor cell 6 no CL hits no diff --git a/reports/candidate_cl_mappings_batch.tsv b/reports/candidate_cl_mappings_batch.tsv new file mode 100644 index 0000000..c29653c --- /dev/null +++ b/reports/candidate_cl_mappings_batch.tsv @@ -0,0 +1,380 @@ +abbreviation full_name parent type_of_match existing_cl_id rank cl_id cl_label score hint_bonus matched contradictions gaps disqualified note +NK Natural Killer Cell Exact 1 CL:0002338 CD56-positive, CD161-positive immature natural killer cell, human 23 3 CD14- (1 of 3 alt.), CD34-, CD3-, CD19-, CD56+ CD45+, CD127-, HLA-DR+, CD11C+, CD15-/CD66B- (no axiom on any alt.), CD123-, CD33-/CD64- (no axiom on any alt.) no +NK Natural Killer Cell Exact 2 CL:0000938 CD16-negative, CD56-bright natural killer cell, human 19 3 CD14- (1 of 3 alt.), CD3-, CD19-, CD56+ (hi) CD34-, CD45+, CD127-, HLA-DR+, CD11C+, CD15-/CD66B- (no axiom on any alt.), CD123-, CD33-/CD64- (no axiom on any alt.) no +NK Natural Killer Cell Exact 3 CL:0000939 CD16-positive, CD56-dim natural killer cell, human 19 3 CD14- (1 of 3 alt.), CD3-, CD19-, CD56+ (dim) CD34-, CD45+, CD127-, HLA-DR+, CD11C+, CD15-/CD66B- (no axiom on any alt.), CD123-, CD33-/CD64- (no axiom on any alt.) no +NK2 Natural Killer Cell 2 NK Surface Only (SO) 1 CL:0000938 CD16-negative, CD56-bright natural killer cell, human 23 3 CD14- (1 of 3 alt.), CD3-, CD19-, CD56+ (hi), CD16- CD34-, CD45+, CD127-, CD57-, HLA-DR+, CD11C+, CD15-/CD66B- (no axiom on any alt.), CD123- no +NK2 Natural Killer Cell 2 NK Surface Only (SO) 2 CL:0002338 CD56-positive, CD161-positive immature natural killer cell, human 23 3 CD14- (1 of 3 alt.), CD34-, CD3-, CD19-, CD56+ CD45+, CD127-, CD16-, CD57-, HLA-DR+, CD11C+, CD15-/CD66B- (no axiom on any alt.), CD123- no +NK2 Natural Killer Cell 2 NK Surface Only (SO) 3 CL:0002343 decidual natural killer cell, human 23 3 CD14- (1 of 3 alt.), CD3-, CD19-, CD56+ (hi), CD16- CD34-, CD45+, CD127-, CD57-, HLA-DR+, CD11C+, CD15-/CD66B- (no axiom on any alt.), CD123- no +CTNK Cytotoxice Natural Killer Cell NK SO and Cytokine 1 CL:0000939 CD16-positive, CD56-dim natural killer cell, human 23 3 CD14- (1 of 3 alt.), CD3-, CD19-, CD56+ (dim), CD16+ CD34-, CD45+, CD127-, HLA-DR+, CD11C+, CD15-/CD66B- (no axiom on any alt.), CD123- no +CTNK Cytotoxice Natural Killer Cell NK SO and Cytokine 2 CL:0002338 CD56-positive, CD161-positive immature natural killer cell, human 23 3 CD14- (1 of 3 alt.), CD34-, CD3-, CD19-, CD56+ CD45+, CD127-, CD16+, HLA-DR+, CD11C+, CD15-/CD66B- (no axiom on any alt.), CD123- no +CTNK Cytotoxice Natural Killer Cell NK SO and Cytokine 3 CL:0001073 CD34-negative, CD56-positive, CD117-positive innate lymphoid cell, human 17 1 CD34-, CD3-, CD19-, CD56+ CD14-/CD33-/CD64- (no axiom on any alt.), CD45+, CD127-, CD16+, HLA-DR+, CD11C+, CD15-/CD66B- (no axiom on any alt.), CD123- no +NK1 Natural Killer Cell 1 CTNK SO and TF 1 CL:0000939 CD16-positive, CD56-dim natural killer cell, human 23 3 CD14- (1 of 3 alt.), CD3-, CD19-, CD56+ (dim), CD16+ CD34-, CD45+, CD127-, CD57-, HLA-DR+, CD11C+, CD15-/CD66B- (no axiom on any alt.), CD123- no +NK1 Natural Killer Cell 1 CTNK SO and TF 2 CL:0002338 CD56-positive, CD161-positive immature natural killer cell, human 23 3 CD14- (1 of 3 alt.), CD34-, CD3-, CD19-, CD56+ CD45+, CD127-, CD16+, CD57-, HLA-DR+, CD11C+, CD15-/CD66B- (no axiom on any alt.), CD123- no +NK1 Natural Killer Cell 1 CTNK SO and TF 3 CL:0001073 CD34-negative, CD56-positive, CD117-positive innate lymphoid cell, human 17 1 CD34-, CD3-, CD19-, CD56+ CD14-/CD33-/CD64- (no axiom on any alt.), CD45+, CD127-, CD16+, CD57-, HLA-DR+, CD11C+, CD15-/CD66B- (no axiom on any alt.), CD123- no +NK3 Natural Killer Cell 3 CTNK TF ONLY 1 CL:0000939 CD16-positive, CD56-dim natural killer cell, human 23 3 CD14- (1 of 3 alt.), CD3-, CD19-, CD56+ (dim), CD16+ CD34-, CD45+, CD127-, CD57+, HLA-DR+, CD11C+, CD15-/CD66B- (no axiom on any alt.), CD123- no +NK3 Natural Killer Cell 3 CTNK TF ONLY 2 CL:0002338 CD56-positive, CD161-positive immature natural killer cell, human 23 3 CD14- (1 of 3 alt.), CD34-, CD3-, CD19-, CD56+ CD45+, CD127-, CD16+, CD57+, HLA-DR+, CD11C+, CD15-/CD66B- (no axiom on any alt.), CD123- no +NK3 Natural Killer Cell 3 CTNK TF ONLY 3 CL:0001073 CD34-negative, CD56-positive, CD117-positive innate lymphoid cell, human 17 1 CD34-, CD3-, CD19-, CD56+ CD14-/CD33-/CD64- (no axiom on any alt.), CD45+, CD127-, CD16+, CD57+, HLA-DR+, CD11C+, CD15-/CD66B- (no axiom on any alt.), CD123- no +ILCp Innate Lymphoid Cell Progenitor Surface Only (SO) 1 CL:0001073 CD34-negative, CD56-positive, CD117-positive innate lymphoid cell, human 15 3 CD3-, CD56+, CD117+ CD45+, CD127+, CD294- no +ILCp Innate Lymphoid Cell Progenitor Surface Only (SO) 2 CL:0001076 NKp46-positive innate lymphoid cell, human 15 3 CD3-, CD56+, CD117+ CD45+, CD127+, CD294- no +ILCp Innate Lymphoid Cell Progenitor Surface Only (SO) 3 CL:0001074 CD34-positive, CD56-positive, CD117-positive common innate lymphoid precursor, human 14 2 CD3-, CD56+, CD117+ CD45+, CD127+, CD294- no +ILC Innate Lymphoid Cell Surface Only (SO) 1 CL:0001057 myeloid dendritic cell, human 25 1 CD14- (1 of 3 alt.), CD34-, CD3-, CD19-, CD3-, CD11C+ (hi), CD123- CD45+, CD127+, HLA-DR+, CD15-/CD66B- (no axiom on any alt.) no +ILC Innate Lymphoid Cell Surface Only (SO) 2 CL:0000989 CD11c-low plasmacytoid dendritic cell 23 1 CD34-, CD3-, CD19-, CD45+, CD3-, CD11C+ (dim) CD14-/CD33-/CD64- (no axiom on any alt.), CD127+, HLA-DR+, CD15-/CD66B- (no axiom on any alt.), CD123- no +ILC Innate Lymphoid Cell Surface Only (SO) 3 CL:0000992 immature CD11c-low plasmacytoid dendritic cell 23 1 CD34-, CD3-, CD19-, CD45+, CD3-, CD11C+ (dim) CD14-/CD33-/CD64- (no axiom on any alt.), CD127+, HLA-DR+, CD15-/CD66B- (no axiom on any alt.), CD123- no +ILC1 Innate Lymphoid Cell 1 ILC Surface Only (SO) 1 CL:0001057 myeloid dendritic cell, human 29 1 CD14- (1 of 3 alt.), CD34-, CD3-, CD19-, CD3-, CD56-, CD11C+ (hi), CD123- CD45+, CD127+, CD117-, CD294-, HLA-DR+, CD15-/CD66B- (no axiom on any alt.) no +ILC1 Innate Lymphoid Cell 1 ILC Surface Only (SO) 2 CL:0000989 CD11c-low plasmacytoid dendritic cell 27 1 CD34-, CD3-, CD19-, CD45+, CD3-, CD56-, CD11C+ (dim) CD14-/CD33-/CD64- (no axiom on any alt.), CD127+, CD117-, CD294-, HLA-DR+, CD15-/CD66B- (no axiom on any alt.), CD123- no +ILC1 Innate Lymphoid Cell 1 ILC Surface Only (SO) 3 CL:0000992 immature CD11c-low plasmacytoid dendritic cell 27 1 CD34-, CD3-, CD19-, CD45+, CD3-, CD56-, CD11C+ (dim) CD14-/CD33-/CD64- (no axiom on any alt.), CD127+, CD117-, CD294-, HLA-DR+, CD15-/CD66B- (no axiom on any alt.), CD123- no +ILC2 Innate Lymphoid Cell 2 ILC Surface Only (SO) 1 CL:0001057 myeloid dendritic cell, human 29 1 CD14- (1 of 3 alt.), CD34-, CD3-, CD19-, CD3-, CD56-, CD11C+ (hi), CD123- CD45+, CD127+, CD117-, CD294+, HLA-DR+, CD15-/CD66B- (no axiom on any alt.) no +ILC2 Innate Lymphoid Cell 2 ILC Surface Only (SO) 2 CL:0000989 CD11c-low plasmacytoid dendritic cell 27 1 CD34-, CD3-, CD19-, CD45+, CD3-, CD56-, CD11C+ (dim) CD14-/CD33-/CD64- (no axiom on any alt.), CD127+, CD117-, CD294+, HLA-DR+, CD15-/CD66B- (no axiom on any alt.), CD123- no +ILC2 Innate Lymphoid Cell 2 ILC Surface Only (SO) 3 CL:0000992 immature CD11c-low plasmacytoid dendritic cell 27 1 CD34-, CD3-, CD19-, CD45+, CD3-, CD56-, CD11C+ (dim) CD14-/CD33-/CD64- (no axiom on any alt.), CD127+, CD117-, CD294+, HLA-DR+, CD15-/CD66B- (no axiom on any alt.), CD123- no +ILC3 Innate Lymphoid Cell 3 ILC Surface Only (SO) 1 CL:0002338 CD56-positive, CD161-positive immature natural killer cell, human 29 1 CD14- (1 of 3 alt.), CD34-, CD3-, CD19-, CD3-, CD56+, CD117+ CD45+, CD127+, CD294-, HLA-DR+, CD11C+, CD15-/CD66B- (no axiom on any alt.), CD123- no +ILC3 Innate Lymphoid Cell 3 ILC Surface Only (SO) 2 CL:0001073 CD34-negative, CD56-positive, CD117-positive innate lymphoid cell, human 27 3 CD34-, CD3-, CD19-, CD3-, CD56+, CD117+ CD14-/CD33-/CD64- (no axiom on any alt.), CD45+, CD127+, CD294-, HLA-DR+, CD11C+, CD15-/CD66B- (no axiom on any alt.), CD123- no +ILC3 Innate Lymphoid Cell 3 ILC Surface Only (SO) 3 CL:0001072 CD34-negative, CD117-positive innate lymphoid cell, human 23 3 CD34-, CD3-, CD19-, CD3-, CD117+ CD14-/CD33-/CD64- (no axiom on any alt.), CD45+, CD127+, CD56+, CD294-, HLA-DR+, CD11C+, CD15-/CD66B- (no axiom on any alt.), CD123- no +cDC Conventional Dendritic Cell Exact 1 CL:0002008 CD34-positive, CD38-positive eosinophil progenitor cell 23 1 CD123+ (1 of 2 alt.), CD123+ (1 of 2 alt.), CD14-, CD45+, CD3-, CD19-, CD56- CD16-, CD33+/CD64+ (no axiom on any alt.), CD11C+, HLA-DR+, CD127- no +cDC Conventional Dendritic Cell Exact 2 CL:0000614 basophilic myelocyte 22 0 CD123+ (hi) (1 of 2 alt.), CD123+ (hi) (1 of 2 alt.), CD16-, CD33+ (1 of 2 alt.), CD3-, CD19-, CD56- CD14-, CD45+, CD11C+, HLA-DR+, CD127- no +cDC Conventional Dendritic Cell Exact 3 CL:0000942 thymic plasmacytoid dendritic cell 20 2 CD123+ (1 of 2 alt.), CD123+ (1 of 2 alt.), CD45+, CD3-, CD19-, CD56- CD14-, CD16-, CD33+/CD64+ (no axiom on any alt.), CD11C+, HLA-DR+, CD127- no +cDC1 Conventional Dendritic Cell 1 DCM Exact 1 CL:0002008 CD34-positive, CD38-positive eosinophil progenitor cell 23 1 CD123+ (1 of 2 alt.), CD123+ (1 of 2 alt.), CD14-, CD45+, CD3-, CD19-, CD56- CD16-, CD33+/CD64+ (no axiom on any alt.), CD11C+, HLA-DR+, CD1C-, CD141+, CD127-, CD172A-, FCER1A- no +cDC1 Conventional Dendritic Cell 1 DCM Exact 2 CL:0000614 basophilic myelocyte 22 0 CD123+ (hi) (1 of 2 alt.), CD123+ (hi) (1 of 2 alt.), CD16-, CD33+ (1 of 2 alt.), CD3-, CD19-, CD56- CD14-, CD45+, CD11C+, HLA-DR+, CD1C-, CD141+, CD127-, CD172A-, FCER1A- no +cDC1 Conventional Dendritic Cell 1 DCM Exact 3 CL:0000942 thymic plasmacytoid dendritic cell 20 2 CD123+ (1 of 2 alt.), CD123+ (1 of 2 alt.), CD45+, CD3-, CD19-, CD56- CD14-, CD16-, CD33+/CD64+ (no axiom on any alt.), CD11C+, HLA-DR+, CD1C-, CD141+, CD127-, CD172A-, FCER1A- no +cDC2 Conventional Dendritic Cell 2 DCM Exact 1 CL:0002008 CD34-positive, CD38-positive eosinophil progenitor cell 23 1 CD123+ (1 of 2 alt.), CD123+ (1 of 2 alt.), CD14-, CD45+, CD3-, CD19-, CD56- CD16-, CD33+/CD64+ (no axiom on any alt.), CD11C+, HLA-DR+, CD1C+, CD141-, CD127-, CD172A+, FCER1A+ no +cDC2 Conventional Dendritic Cell 2 DCM Exact 2 CL:0000614 basophilic myelocyte 22 0 CD123+ (hi) (1 of 2 alt.), CD123+ (hi) (1 of 2 alt.), CD16-, CD33+ (1 of 2 alt.), CD3-, CD19-, CD56- CD14-, CD45+, CD11C+, HLA-DR+, CD1C+, CD141-, CD127-, CD172A+, FCER1A+ no +cDC2 Conventional Dendritic Cell 2 DCM Exact 3 CL:0000942 thymic plasmacytoid dendritic cell 20 2 CD123+ (1 of 2 alt.), CD123+ (1 of 2 alt.), CD45+, CD3-, CD19-, CD56- CD14-, CD16-, CD33+/CD64+ (no axiom on any alt.), CD11C+, HLA-DR+, CD1C+, CD141-, CD127-, CD172A+, FCER1A+ no +pDC Peripheral Dendritic Cell Exact 1 CL:0000991 CD11c-negative plasmacytoid dendritic cell 22 2 CD3-, CD45+, CD123+ (1 of 2 alt.), CD303+ (1 of 3 alt.), CD56-, CD19- CD127-, CD15-/CD66B- (no axiom on any alt.), CD14-, CD16- no +pDC Peripheral Dendritic Cell Exact 2 CL:0000994 immature CD11c-negative plasmacytoid dendritic cell 22 2 CD3-, CD45+, CD123+ (1 of 2 alt.), CD303+ (1 of 3 alt.), CD56-, CD19- CD127-, CD15-/CD66B- (no axiom on any alt.), CD14-, CD16- no +pDC Peripheral Dendritic Cell Exact 3 CL:0000996 mature CD11c-negative plasmacytoid dendritic cell 22 2 CD3-, CD45+, CD123+ (1 of 2 alt.), CD303+ (1 of 3 alt.), CD56-, CD19- CD127-, CD15-/CD66B- (no axiom on any alt.), CD14-, CD16- no +Basophil Basophil Exact 1 CL:0000614 basophilic myelocyte 18 1 CD3-, CD33+ (1 of 2 alt.), CD193+ (hi) (1 of 4 alt.), CD56-, CD19-, CD16- CD15-/CD66B- (all alt. conflict) CD45+, CD127-, CD14-, FCER1A+, HLA-DR- no +Basophil Basophil Exact 2 CL:0002008 CD34-positive, CD38-positive eosinophil progenitor cell 18 0 CD3-, CD45+, CD123+ (1 of 2 alt.), CD56-, CD19-, CD14- CD193+/FCER1A+/HLA-DR-/CD303- (no axiom on any alt.), CD127-, CD15-/CD66B- (no axiom on any alt.), CD16-, FCER1A+, HLA-DR- no +Basophil Basophil Exact 3 CL:0000043 mature basophil 17 1 CD3-, CD123+ (hi) (1 of 2 alt.), CD193+ (hi) (1 of 4 alt.), CD56-, CD19- CD45+, CD127-, CD15-/CD66B- (no axiom on any alt.), CD14-, CD16-, FCER1A+, HLA-DR- no +Basophil Basophil Exact 1 CL:0000043 mature basophil 17 1 CD3-, CD193+ (hi), CD123+ (hi), CD56-, CD19- CD15-/CD66B- (no axiom on any alt.), CD45+, CD127- no +Basophil Basophil Exact 2 CL:0000767 basophil 17 1 CD3-, CD193+ (hi), CD123+ (hi), CD56-, CD19- CD15-/CD66B- (no axiom on any alt.), CD45+, CD127- no +Basophil Basophil Exact 3 CL:0000768 immature basophil 17 1 CD3-, CD193+ (hi), CD123+ (hi), CD56-, CD19- CD15-/CD66B- (no axiom on any alt.), CD45+, CD127- no +Mono Monocyte Exact 1 CL:0000614 basophilic myelocyte 24 0 CD56-, CD19-, CD123+ (hi), CD123+ (hi) (1 of 2 alt.), CD15+, CD66B+, CD3-, CD33+ (1 of 2 alt.) CD303-, CD45+, CD14+, CD11C+ no +Mono Monocyte Exact 2 CL:0000769 basophilic metamyelocyte 24 0 CD56-, CD19-, CD123+ (hi), CD123+ (hi) (1 of 2 alt.), CD15+, CD66B+, CD3-, CD33+ (1 of 2 alt.) CD303-, CD45+, CD14+, CD11C+ no +Mono Monocyte Exact 3 CL:0000942 thymic plasmacytoid dendritic cell 22 0 CD56-, CD19-, CD123+, CD123+ (1 of 2 alt.), CD45+, CD3- CD303-, CD14+, CD11C+, CD15+, CD66B+, CD64+/CD33+ (no axiom on any alt.) no +CMo Classical Monocyte Mono Exact 1 CL:0000614 basophilic myelocyte 28 0 CD56-, CD19-, CD123+ (hi), CD123+ (hi) (1 of 2 alt.), CD16-, CD15+, CD66B+, CD3-, CD33+ (1 of 2 alt.) CD303-, CD45+, CD14+ no +CMo Classical Monocyte Mono Exact 2 CL:0000942 thymic plasmacytoid dendritic cell 22 0 CD56-, CD19-, CD123+, CD123+ (1 of 2 alt.), CD45+, CD3- CD303-, CD14+, CD16-, CD15+, CD66B+, CD64+/CD33+ (no axiom on any alt.) no +CMo Classical Monocyte Mono Exact 3 CL:0000043 mature basophil 20 0 CD56-, CD19-, CD123+ (hi), CD123+ (hi) (1 of 2 alt.), CD66B+, CD3- CD303-, CD45+, CD14+, CD16-, CD15+, CD64+/CD33+ (no axiom on any alt.) no +NCMo Non-classical Monocyte Mono Exact 1 CL:0000769 basophilic metamyelocyte 28 0 CD56-, CD19-, CD123+ (hi), CD123+ (hi) (1 of 2 alt.), CD16+, CD15+, CD66B+, CD3-, CD33+ (1 of 2 alt.) CD303-, CD45+, CD14- no +NCMo Non-classical Monocyte Mono Exact 2 CL:0002008 CD34-positive, CD38-positive eosinophil progenitor cell 26 0 CD56-, CD19-, CD123+, CD123+ (1 of 2 alt.), CD45+, CD14-, CD3- CD303-, CD16+, CD15+, CD66B+, CD64+/CD33+ (no axiom on any alt.) no +NCMo Non-classical Monocyte Mono Exact 3 CL:0000557 granulocyte monocyte progenitor cell 24 2 CD56-, CD19-, CD123+, CD123+ (1 of 2 alt.), CD14-, CD3- CD303-, CD45+, CD16+, CD15+, CD66B+, CD64+/CD33+ (no axiom on any alt.) no +IntMo Intermediate Monocyte Mono Exact 1 CL:0000769 basophilic metamyelocyte 28 0 CD56-, CD19-, CD123+ (hi), CD123+ (hi) (1 of 2 alt.), CD16+, CD15+, CD66B+, CD3-, CD33+ (1 of 2 alt.) CD303-, CD45+, CD14+ no +IntMo Intermediate Monocyte Mono Exact 2 CL:0000942 thymic plasmacytoid dendritic cell 22 0 CD56-, CD19-, CD123+, CD123+ (1 of 2 alt.), CD45+, CD3- CD303-, CD14+, CD16+, CD15+, CD66B+, CD64+/CD33+ (no axiom on any alt.) no +IntMo Intermediate Monocyte Mono Exact 3 CL:0000043 mature basophil 20 0 CD56-, CD19-, CD123+ (hi), CD123+ (hi) (1 of 2 alt.), CD66B+, CD3- CD303-, CD45+, CD14+, CD16+, CD15+, CD64+/CD33+ (no axiom on any alt.) no +Neut Neutrophil Exact 1 CL:0000582 neutrophilic metamyelocyte 22 2 CD3-, CD56-, CD15+ (1 of 2 alt.), CD16+, CD19-, CD33+ (1 of 2 alt.) CD14-, CD123-, CD45+, CD193-, HLA-DR+, CD11C+ no +Neut Neutrophil Exact 2 CL:0000096 mature neutrophil 20 2 CD3-, CD56-, CD15+ (1 of 2 alt.), CD16+, CD19- CD14-, CD123-, CD45+, CD193-, HLA-DR+, CD11C+, CD64-/CD33+ (no axiom on any alt.) no +Neut Neutrophil Exact 3 CL:0000560 band form neutrophil 20 2 CD3-, CD56-, CD15+ (1 of 2 alt.), CD16+, CD19- CD14-, CD123-, CD45+, CD193-, HLA-DR+, CD11C+, CD64-/CD33+ (no axiom on any alt.) no +Eos Eosinophil Exact 1 CL:0000612 eosinophilic myelocyte 26 2 CD3-, CD56-, CD15+ (1 of 2 alt.), CD193+, CD16-, CD19-, CD33+ (1 of 2 alt.) CD14-, CD123-, CD45+, HLA-DR+, CD11C+ no +Eos Eosinophil Exact 2 CL:0000041 mature eosinophil 20 2 CD3-, CD56-, CD66B+ (1 of 2 alt.), CD193+, CD19- CD14-, CD123-, CD45+, CD16-, HLA-DR+, CD11C+, CD64-/CD33+ (no axiom on any alt.) no +Eos Eosinophil Exact 3 CL:0000580 neutrophilic myelocyte 20 0 CD3-, CD56-, CD15+ (1 of 2 alt.), CD16-, CD19-, CD33+ (1 of 2 alt.) CD14-, CD123-, CD45+, CD193+, HLA-DR+, CD11C+ no +B cell B cell Exact 1 CL:0000819 B-1 B cell 15 1 CD3-, CD45+, CD20+ (1 of 2 alt.), CD20+ CD14-/CD33-/CD64- (no axiom on any alt.), CD56-, CD127-, CD16-, CD15-/CD66B- (no axiom on any alt.), HLA-DR+, CD11C+, CD123- no +B cell B cell Exact 2 CL:0000820 B-1a B cell 15 1 CD3-, CD45+, CD20+ (1 of 2 alt.), CD20+ CD14-/CD33-/CD64- (no axiom on any alt.), CD56-, CD127-, CD16-, CD15-/CD66B- (no axiom on any alt.), HLA-DR+, CD11C+, CD123- no +B cell B cell Exact 3 CL:0000821 B-1b B cell 15 1 CD3-, CD45+, CD20+ (1 of 2 alt.), CD20+ CD14-/CD33-/CD64- (no axiom on any alt.), CD56-, CD127-, CD16-, CD15-/CD66B- (no axiom on any alt.), HLA-DR+, CD11C+, CD123- no +ASC Antibody Secreting Cell Surface Only (SO) 1 CL:0002115 B220-positive CD38-positive unswitched memory B cell 23 1 CD3-, CD45+, CD19+, CD27+, CD38+, CD20+ CD14-/CD33-/CD64- (no axiom on any alt.), CD56-, CD127-, CD16-, CD15-/CD66B- (no axiom on any alt.), HLA-DR+, CD11C+, CD123- no +ASC Antibody Secreting Cell Surface Only (SO) 2 CL:0002116 B220-low CD38-positive unswitched memory B cell 23 1 CD3-, CD45+ (dim), CD19+, CD27+, CD38+, CD20+ CD14-/CD33-/CD64- (no axiom on any alt.), CD56-, CD127-, CD16-, CD15-/CD66B- (no axiom on any alt.), HLA-DR+, CD11C+, CD123- no +ASC Antibody Secreting Cell Surface Only (SO) 3 CL:0002122 B220-positive CD38-positive IgG-negative class switched memory B cell 23 1 CD3-, CD45+, CD19+, CD27+, CD38+, CD20+ CD14-/CD33-/CD64- (no axiom on any alt.), CD56-, CD127-, CD16-, CD15-/CD66B- (no axiom on any alt.), HLA-DR+, CD11C+, CD123- no +PB Plasmablast ASC Surface Only (SO) 1 CL:0002115 B220-positive CD38-positive unswitched memory B cell 26 0 CD3-, CD45+, CD19+, CD27+, CD38+, CD138-, CD20+ CD14-/CD33-/CD64- (no axiom on any alt.), CD56-, CD127-, CD16-, CD15-/CD66B- (no axiom on any alt.), HLA-DR+, CD11C+, CD123- no +PB Plasmablast ASC Surface Only (SO) 2 CL:0002116 B220-low CD38-positive unswitched memory B cell 26 0 CD3-, CD45+ (dim), CD19+, CD27+, CD38+, CD138-, CD20+ CD14-/CD33-/CD64- (no axiom on any alt.), CD56-, CD127-, CD16-, CD15-/CD66B- (no axiom on any alt.), HLA-DR+, CD11C+, CD123- no +PB Plasmablast ASC Surface Only (SO) 3 CL:0002122 B220-positive CD38-positive IgG-negative class switched memory B cell 26 0 CD3-, CD45+, CD19+, CD27+, CD38+, CD138-, CD20+ CD14-/CD33-/CD64- (no axiom on any alt.), CD56-, CD127-, CD16-, CD15-/CD66B- (no axiom on any alt.), HLA-DR+, CD11C+, CD123- no +PC Plasma Cell ASC Surface Only (SO) 1 CL:0000962 Bm2 B cell 16 1 CD3-, CD45+, CD19+, CD38+ CD20- CD14-/CD33-/CD64- (no axiom on any alt.), CD56-, CD27+, CD138+, CD127-, CD16-, CD15-/CD66B- (no axiom on any alt.), HLA-DR+, CD11C+, CD123- no +PC Plasma Cell ASC Surface Only (SO) 2 CL:0002047 fraction B precursor B cell 13 1 CD3-, CD45+, CD19+ CD14-/CD33-/CD64- (no axiom on any alt.), CD56-, CD27+, CD38+, CD138+, CD127-, CD16-, CD15-/CD66B- (no axiom on any alt.), HLA-DR+, CD11C+, CD123-, CD20- no +PC Plasma Cell ASC Surface Only (SO) 3 CL:0002048 late pro-B cell 13 1 CD3-, CD19+ (dim), CD38+ CD14-/CD33-/CD64- (no axiom on any alt.), CD56-, CD45+, CD27+, CD138+, CD127-, CD16-, CD15-/CD66B- (no axiom on any alt.), HLA-DR+, CD11C+, CD123-, CD20- no +Transitional Transitional B cell Exact no qualified markers found +T1/T2 B Transitonal B cell 1 and 2 1 CL:0002109 B220-positive CD38-positive naive B cell 23 1 CD3-, CD45+, CD20+ (1 of 2 alt.), CD27-, CD38+ (1 of 2 alt.), CD20+ CD14-/CD33-/CD64- (no axiom on any alt.), CD56-, CD24+, CD127-, CD16-, CD15-/CD66B- (no axiom on any alt.), HLA-DR+, CD11C+, CD123- no +T1/T2 B Transitonal B cell 1 and 2 2 CL:0002110 B220-low CD38-positive naive B cell 23 1 CD3-, CD45+ (dim), CD20+ (1 of 2 alt.), CD27-, CD38+ (1 of 2 alt.), CD20+ CD14-/CD33-/CD64- (no axiom on any alt.), CD56-, CD24+, CD127-, CD16-, CD15-/CD66B- (no axiom on any alt.), HLA-DR+, CD11C+, CD123- no +T1/T2 B Transitonal B cell 1 and 2 3 CL:0002047 fraction B precursor B cell 21 1 CD3-, CD45+, CD19+ (1 of 2 alt.), CD10+ (1 of 2 alt.), CD24+ CD14-/CD33-/CD64- (no axiom on any alt.), CD56-, CD27-, CD127-, CD16-, CD15-/CD66B- (no axiom on any alt.), HLA-DR+, CD11C+, CD123-, CD20+ no +Mature B Mature B cell Exact 1 CL:0000961 Bm1 B cell 19 1 CD3-, CD45+, CD20+ (1 of 2 alt.), CD38-, CD20+ CD14-/CD33-/CD64- (no axiom on any alt.), CD56-, CD27-, CD127-, CD16-, CD15-/CD66B- (no axiom on any alt.), HLA-DR+, CD11C+, CD123- no +Mature B Mature B cell Exact 2 CL:0002102 CD38-negative naive B cell 19 1 CD3-, CD20+ (1 of 2 alt.), CD27-, CD38-, CD20+ CD14-/CD33-/CD64- (no axiom on any alt.), CD56-, CD45+, CD127-, CD16-, CD15-/CD66B- (no axiom on any alt.), HLA-DR+, CD11C+, CD123- no +Mature B Mature B cell Exact 3 CL:0002055 CD38-negative immature B cell 16 2 CD3-, CD20+ (1 of 2 alt.), CD38-, CD20+ CD14-/CD33-/CD64- (no axiom on any alt.), CD56-, CD45+, CD27-, CD127-, CD16-, CD15-/CD66B- (no axiom on any alt.), HLA-DR+, CD11C+, CD123- no +T3 Transitional B cell 3 Mature B Exact 1 CL:0000961 Bm1 B cell 19 1 CD3-, CD45+, CD20+ (1 of 2 alt.), CD38- (1 of 2 alt.), CD20+ CD14-/CD33-/CD64- (no axiom on any alt.), CD56-, CD27-, CD24+, IGD+, CD127-, CD16-, CD15-/CD66B- (no axiom on any alt.), HLA-DR+, CD11C+, CD123- no +T3 Transitional B cell 3 Mature B Exact 2 CL:0002102 CD38-negative naive B cell 19 1 CD3-, CD20+ (1 of 2 alt.), CD27-, CD38- (1 of 2 alt.), CD20+ CD14-/CD33-/CD64- (no axiom on any alt.), CD56-, CD45+, CD24+, IGD+, CD127-, CD16-, CD15-/CD66B- (no axiom on any alt.), HLA-DR+, CD11C+, CD123- no +T3 Transitional B cell 3 Mature B Exact 3 CL:0002109 B220-positive CD38-positive naive B cell 19 1 CD3-, CD45+, CD20+ (1 of 2 alt.), CD27-, CD20+ CD14-/CD33-/CD64- (no axiom on any alt.), CD56-, CD38-/CD10- (no axiom on any alt.), CD24+, IGD+, CD127-, CD16-, CD15-/CD66B- (no axiom on any alt.), HLA-DR+, CD11C+, CD123- no +Naive Naive B cell Mature B Exact 1 CL:0002102 CD38-negative naive B cell 20 2 CD3-, CD20+ (1 of 2 alt.), CD27-, CD38- (1 of 2 alt.), CD20+ CD14-/CD33-/CD64- (no axiom on any alt.), CD56-, CD45+, CD24-, IGD+, CD127-, CD16-, CD15-/CD66B- (no axiom on any alt.), HLA-DR+, CD11C+, CD123- no +Naive Naive B cell Mature B Exact 2 CL:0002109 B220-positive CD38-positive naive B cell 20 2 CD3-, CD45+, CD20+ (1 of 2 alt.), CD27-, CD20+ CD14-/CD33-/CD64- (no axiom on any alt.), CD56-, CD38-/CD10- (no axiom on any alt.), CD24-, IGD+, CD127-, CD16-, CD15-/CD66B- (no axiom on any alt.), HLA-DR+, CD11C+, CD123- no +Naive Naive B cell Mature B Exact 3 CL:0002110 B220-low CD38-positive naive B cell 20 2 CD3-, CD45+ (dim), CD20+ (1 of 2 alt.), CD27-, CD20+ CD14-/CD33-/CD64- (no axiom on any alt.), CD56-, CD38-/CD10- (no axiom on any alt.), CD24-, IGD+, CD127-, CD16-, CD15-/CD66B- (no axiom on any alt.), HLA-DR+, CD11C+, CD123- no +BDN Double Negative B cells Mature B Exact 1 CL:0002102 CD38-negative naive B cell 19 1 CD3-, CD20+ (1 of 2 alt.), CD27-, CD38- (1 of 2 alt.), CD20+ CD14-/CD33-/CD64- (no axiom on any alt.), CD56-, CD45+, CD24-, IGD-, CD127-, CD16-, CD15-/CD66B- (no axiom on any alt.), HLA-DR+, CD11C+, CD123- no +BDN Double Negative B cells Mature B Exact 2 CL:0000961 Bm1 B cell 18 0 CD3-, CD45+, CD20+ (1 of 2 alt.), CD38- (1 of 2 alt.), CD20+ CD14-/CD33-/CD64- (no axiom on any alt.), CD56-, CD27-, CD24-, IGD-, CD127-, CD16-, CD15-/CD66B- (no axiom on any alt.), HLA-DR+, CD11C+, CD123- no +BDN Double Negative B cells Mature B Exact 3 CL:0002109 B220-positive CD38-positive naive B cell 18 0 CD3-, CD45+, CD20+ (1 of 2 alt.), CD27-, CD20+ CD14-/CD33-/CD64- (no axiom on any alt.), CD56-, CD38-/CD10- (no axiom on any alt.), CD24-, IGD-, CD127-, CD16-, CD15-/CD66B- (no axiom on any alt.), HLA-DR+, CD11C+, CD123- no +BDN1 Double Negative B cell 1 BDN Exact 1 CL:0000961 Bm1 B cell 23 1 CD3-, CD45+, CD20+ (1 of 2 alt.), CD38- (1 of 2 alt.), CD21+, CD20+ CD14-/CD33-/CD64- (no axiom on any alt.), CD56-, CD27-, CD24+, IGD-, CD11C-, CD185+, IGE-, CD127-, CD16-, CD15-/CD66B- (no axiom on any alt.), HLA-DR+, CD11C+, CD123- no +BDN1 Double Negative B cell 1 BDN Exact 2 CL:0002055 CD38-negative immature B cell 20 2 CD3-, CD20+ (1 of 2 alt.), CD38- (1 of 2 alt.), CD21+ (dim), CD20+ CD14-/CD33-/CD64- (no axiom on any alt.), CD56-, CD45+, CD27-, CD24+, IGD-, CD11C-, CD185+, IGE-, CD127-, CD16-, CD15-/CD66B- (no axiom on any alt.), HLA-DR+, CD11C+, CD123- no +BDN1 Double Negative B cell 1 BDN Exact 3 CL:0002102 CD38-negative naive B cell 20 2 CD3-, CD20+ (1 of 2 alt.), CD27-, CD38- (1 of 2 alt.), CD20+ CD14-/CD33-/CD64- (no axiom on any alt.), CD56-, CD45+, CD24+, IGD-, CD21+, CD11C-, CD185+, IGE-, CD127-, CD16-, CD15-/CD66B- (no axiom on any alt.), HLA-DR+, CD11C+, CD123- no +BDN2 Double Negative B cell 2 BDN Exact 1 CL:0002102 CD38-negative naive B cell 20 2 CD3-, CD20+ (1 of 2 alt.), CD27-, CD38- (1 of 2 alt.), CD20+ CD14-/CD33-/CD64- (no axiom on any alt.), CD56-, CD45+, CD24-, IGD-, CD21-, CD11C+, CD185-, CD127-, CD16-, CD15-/CD66B- (no axiom on any alt.), HLA-DR+, CD11C+, CD123- no +BDN2 Double Negative B cell 2 BDN Exact 2 CL:0002109 B220-positive CD38-positive naive B cell 19 1 CD3-, CD45+, CD20+ (1 of 2 alt.), CD27-, CD20+ CD14-/CD33-/CD64- (no axiom on any alt.), CD56-, CD38-/CD10- (no axiom on any alt.), CD24-, IGD-, CD21-, CD11C+, CD185-, CD127-, CD16-, CD15-/CD66B- (no axiom on any alt.), HLA-DR+, CD11C+, CD123- no +BDN2 Double Negative B cell 2 BDN Exact 3 CL:0002110 B220-low CD38-positive naive B cell 19 1 CD3-, CD45+ (dim), CD20+ (1 of 2 alt.), CD27-, CD20+ CD14-/CD33-/CD64- (no axiom on any alt.), CD56-, CD38-/CD10- (no axiom on any alt.), CD24-, IGD-, CD21-, CD11C+, CD185-, CD127-, CD16-, CD15-/CD66B- (no axiom on any alt.), HLA-DR+, CD11C+, CD123- no +BDN3 Double Negative B cell 3 BDN Exact 1 CL:0002102 CD38-negative naive B cell 20 2 CD3-, CD20+ (1 of 2 alt.), CD27-, CD38- (1 of 2 alt.), CD20+ CD14-/CD33-/CD64- (no axiom on any alt.), CD56-, CD45+, CD24+, IGD-, CD21-, CD11C-, CD185-, CD127-, CD16-, CD15-/CD66B- (no axiom on any alt.), HLA-DR+, CD11C+, CD123- no +BDN3 Double Negative B cell 3 BDN Exact 2 CL:0000958 T1 B cell 19 1 CD3-, CD20+ (1 of 2 alt.), CD24+ (hi), CD21-, CD20+ CD14-/CD33-/CD64- (no axiom on any alt.), CD56-, CD45+, CD27-, CD38- (hi)/CD10- (no axiom on any alt.), IGD-, CD11C-, CD185-, CD127-, CD16-, CD15-/CD66B- (no axiom on any alt.), HLA-DR+, CD11C+, CD123- no +BDN3 Double Negative B cell 3 BDN Exact 3 CL:0002109 B220-positive CD38-positive naive B cell 19 1 CD3-, CD45+, CD20+ (1 of 2 alt.), CD27-, CD20+ CD14-/CD33-/CD64- (no axiom on any alt.), CD56-, CD38-/CD10- (no axiom on any alt.), CD24+, IGD-, CD21-, CD11C-, CD185-, CD127-, CD16-, CD15-/CD66B- (no axiom on any alt.), HLA-DR+, CD11C+, CD123- no +BDN4 Double Negative B cell 4 BDN Exact 1 CL:0000961 Bm1 B cell 23 1 CD3-, CD45+, CD20+ (1 of 2 alt.), CD38- (1 of 2 alt.), CD21+, CD20+ CD14-/CD33-/CD64- (no axiom on any alt.), CD56-, CD27-, CD24+, IGD-, CD11C-, CD185+, IGE+, CD127-, CD16-, CD15-/CD66B- (no axiom on any alt.), HLA-DR+, CD11C+, CD123- no +BDN4 Double Negative B cell 4 BDN Exact 2 CL:0002055 CD38-negative immature B cell 20 2 CD3-, CD20+ (1 of 2 alt.), CD38- (1 of 2 alt.), CD21+ (dim), CD20+ CD14-/CD33-/CD64- (no axiom on any alt.), CD56-, CD45+, CD27-, CD24+, IGD-, CD11C-, CD185+, IGE+, CD127-, CD16-, CD15-/CD66B- (no axiom on any alt.), HLA-DR+, CD11C+, CD123- no +BDN4 Double Negative B cell 4 BDN Exact 3 CL:0002102 CD38-negative naive B cell 20 2 CD3-, CD20+ (1 of 2 alt.), CD27-, CD38- (1 of 2 alt.), CD20+ CD14-/CD33-/CD64- (no axiom on any alt.), CD56-, CD45+, CD24+, IGD-, CD21+, CD11C-, CD185+, IGE+, CD127-, CD16-, CD15-/CD66B- (no axiom on any alt.), HLA-DR+, CD11C+, CD123- no +Bmem Memory B cell Exact 1 CL:0002112 B220-positive CD38-negative unswitched memory B cell 24 2 CD3-, CD45+, CD20+ (1 of 2 alt.), CD27+, CD38-, CD20+ CD14-/CD33-/CD64- (no axiom on any alt.), CD56-, CD127-, CD16-, CD15-/CD66B- (no axiom on any alt.), HLA-DR+, CD11C+, CD123- no +Bmem Memory B cell Exact 2 CL:0002113 B220-low CD38-negative unswitched memory B cell 24 2 CD3-, CD45+ (dim), CD20+ (1 of 2 alt.), CD27+, CD38-, CD20+ CD14-/CD33-/CD64- (no axiom on any alt.), CD56-, CD127-, CD16-, CD15-/CD66B- (no axiom on any alt.), HLA-DR+, CD11C+, CD123- no +Bmem Memory B cell Exact 3 CL:0002108 CD38-negative IgG memory B cell 20 2 CD3-, CD20+ (1 of 2 alt.), CD27+, CD38-, CD20+ CD14-/CD33-/CD64- (no axiom on any alt.), CD56-, CD45+, CD127-, CD16-, CD15-/CD66B- (no axiom on any alt.), HLA-DR+, CD11C+, CD123- no +IgD only IgD only Memory B cell Bmem Exact 1 CL:0002112 B220-positive CD38-negative unswitched memory B cell 24 2 CD3-, CD45+, CD20+ (1 of 2 alt.), CD27+, CD38-, CD20+ CD14-/CD33-/CD64- (no axiom on any alt.), CD56-, IGD+, IGM-, CD127-, CD16-, CD15-/CD66B- (no axiom on any alt.), HLA-DR+, CD11C+, CD123- no +IgD only IgD only Memory B cell Bmem Exact 2 CL:0002113 B220-low CD38-negative unswitched memory B cell 24 2 CD3-, CD45+ (dim), CD20+ (1 of 2 alt.), CD27+, CD38-, CD20+ CD14-/CD33-/CD64- (no axiom on any alt.), CD56-, IGD+, IGM-, CD127-, CD16-, CD15-/CD66B- (no axiom on any alt.), HLA-DR+, CD11C+, CD123- no +IgD only IgD only Memory B cell Bmem Exact 3 CL:0002108 CD38-negative IgG memory B cell 20 2 CD3-, CD20+ (1 of 2 alt.), CD27+, CD38-, CD20+ CD14-/CD33-/CD64- (no axiom on any alt.), CD56-, CD45+, IGD+, IGM-, CD127-, CD16-, CD15-/CD66B- (no axiom on any alt.), HLA-DR+, CD11C+, CD123- no +Unswitched Unswitched Memory B cell Bmem Exact 1 CL:0002112 B220-positive CD38-negative unswitched memory B cell 25 3 CD3-, CD45+, CD20+ (1 of 2 alt.), CD27+, CD38-, CD20+ CD14-/CD33-/CD64- (no axiom on any alt.), CD56-, IGD+, IGM+, CD127-, CD16-, CD15-/CD66B- (no axiom on any alt.), HLA-DR+, CD11C+, CD123- no +Unswitched Unswitched Memory B cell Bmem Exact 2 CL:0002113 B220-low CD38-negative unswitched memory B cell 25 3 CD3-, CD45+ (dim), CD20+ (1 of 2 alt.), CD27+, CD38-, CD20+ CD14-/CD33-/CD64- (no axiom on any alt.), CD56-, IGD+, IGM+, CD127-, CD16-, CD15-/CD66B- (no axiom on any alt.), HLA-DR+, CD11C+, CD123- no +Unswitched Unswitched Memory B cell Bmem Exact 3 CL:0002111 CD38-negative unswitched memory B cell 21 3 CD3-, CD20+ (1 of 2 alt.), CD27+, CD38-, CD20+ CD14-/CD33-/CD64- (no axiom on any alt.), CD56-, CD45+, IGD+, IGM+, CD127-, CD16-, CD15-/CD66B- (no axiom on any alt.), HLA-DR+, CD11C+, CD123- no +IgM only IgM-only Memory B cell Bmem Exact 1 CL:0002112 B220-positive CD38-negative unswitched memory B cell 24 2 CD3-, CD45+, CD20+ (1 of 2 alt.), CD27+, CD38-, CD20+ CD14-/CD33-/CD64- (no axiom on any alt.), CD56-, IGD-, IGM+, CD127-, CD16-, CD15-/CD66B- (no axiom on any alt.), HLA-DR+, CD11C+, CD123- no +IgM only IgM-only Memory B cell Bmem Exact 2 CL:0002113 B220-low CD38-negative unswitched memory B cell 24 2 CD3-, CD45+ (dim), CD20+ (1 of 2 alt.), CD27+, CD38-, CD20+ CD14-/CD33-/CD64- (no axiom on any alt.), CD56-, IGD-, IGM+, CD127-, CD16-, CD15-/CD66B- (no axiom on any alt.), HLA-DR+, CD11C+, CD123- no +IgM only IgM-only Memory B cell Bmem Exact 3 CL:0002108 CD38-negative IgG memory B cell 20 2 CD3-, CD20+ (1 of 2 alt.), CD27+, CD38-, CD20+ CD14-/CD33-/CD64- (no axiom on any alt.), CD56-, CD45+, IGD-, IGM+, CD127-, CD16-, CD15-/CD66B- (no axiom on any alt.), HLA-DR+, CD11C+, CD123- no +Switched Switched Memory B cell Bmem Exact 1 CL:0002112 B220-positive CD38-negative unswitched memory B cell 25 3 CD3-, CD45+, CD20+ (1 of 2 alt.), CD27+, CD38-, CD20+ CD14-/CD33-/CD64- (no axiom on any alt.), CD56-, IGD-, IGM-, CD127-, CD16-, CD15-/CD66B- (no axiom on any alt.), HLA-DR+, CD11C+, CD123- no +Switched Switched Memory B cell Bmem Exact 2 CL:0002113 B220-low CD38-negative unswitched memory B cell 25 3 CD3-, CD45+ (dim), CD20+ (1 of 2 alt.), CD27+, CD38-, CD20+ CD14-/CD33-/CD64- (no axiom on any alt.), CD56-, IGD-, IGM-, CD127-, CD16-, CD15-/CD66B- (no axiom on any alt.), HLA-DR+, CD11C+, CD123- no +Switched Switched Memory B cell Bmem Exact 3 CL:0002111 CD38-negative unswitched memory B cell 21 3 CD3-, CD20+ (1 of 2 alt.), CD27+, CD38-, CD20+ CD14-/CD33-/CD64- (no axiom on any alt.), CD56-, CD45+, IGD-, IGM-, CD127-, CD16-, CD15-/CD66B- (no axiom on any alt.), HLA-DR+, CD11C+, CD123- no +IgA IgA-Class Switched B cell Switched Surface Only (SO) 1 CL:0002112 B220-positive CD38-negative unswitched memory B cell 24 2 CD3-, CD45+, CD20+ (1 of 2 alt.), CD27+, CD38-, CD20+ CD14-/CD33-/CD64- (no axiom on any alt.), CD56-, IGD-, IGM-, IGA+, IGG-, IGE-, CD127-, CD16-, CD15-/CD66B- (no axiom on any alt.), HLA-DR+, CD11C+, CD123- no +IgA IgA-Class Switched B cell Switched Surface Only (SO) 2 CL:0002113 B220-low CD38-negative unswitched memory B cell 24 2 CD3-, CD45+ (dim), CD20+ (1 of 2 alt.), CD27+, CD38-, CD20+ CD14-/CD33-/CD64- (no axiom on any alt.), CD56-, IGD-, IGM-, IGA+, IGG-, IGE-, CD127-, CD16-, CD15-/CD66B- (no axiom on any alt.), HLA-DR+, CD11C+, CD123- no +IgA IgA-Class Switched B cell Switched Surface Only (SO) 3 CL:0002118 CD38-negative IgG-negative class switched memory B cell 21 3 CD3-, CD20+ (1 of 2 alt.), CD27+, CD38-, CD20+ CD14-/CD33-/CD64- (no axiom on any alt.), CD56-, CD45+, IGD-, IGM-, IGA+, IGG-, IGE-, CD127-, CD16-, CD15-/CD66B- (no axiom on any alt.), HLA-DR+, CD11C+, CD123- no +IgG IgG-Class Switched B cell Switched Surface Only (SO) 1 CL:0002112 B220-positive CD38-negative unswitched memory B cell 24 2 CD3-, CD45+, CD20+ (1 of 2 alt.), CD27+, CD38-, CD20+ CD14-/CD33-/CD64- (no axiom on any alt.), CD56-, IGD-, IGM-, IGA-, IGG+, IGE-, CD127-, CD16-, CD15-/CD66B- (no axiom on any alt.), HLA-DR+, CD11C+, CD123- no +IgG IgG-Class Switched B cell Switched Surface Only (SO) 2 CL:0002113 B220-low CD38-negative unswitched memory B cell 24 2 CD3-, CD45+ (dim), CD20+ (1 of 2 alt.), CD27+, CD38-, CD20+ CD14-/CD33-/CD64- (no axiom on any alt.), CD56-, IGD-, IGM-, IGA-, IGG+, IGE-, CD127-, CD16-, CD15-/CD66B- (no axiom on any alt.), HLA-DR+, CD11C+, CD123- no +IgG IgG-Class Switched B cell Switched Surface Only (SO) 3 CL:0002118 CD38-negative IgG-negative class switched memory B cell 22 4 CD3-, CD20+ (1 of 2 alt.), CD27+, CD38-, CD20+ CD14-/CD33-/CD64- (no axiom on any alt.), CD56-, CD45+, IGD-, IGM-, IGA-, IGG+, IGE-, CD127-, CD16-, CD15-/CD66B- (no axiom on any alt.), HLA-DR+, CD11C+, CD123- no +IgE IgE-Class Switched B cell Switched Surface Only (SO) 1 CL:0002112 B220-positive CD38-negative unswitched memory B cell 24 2 CD3-, CD45+, CD20+ (1 of 2 alt.), CD27+, CD38-, CD20+ CD14-/CD33-/CD64- (no axiom on any alt.), CD56-, IGD-, IGM-, IGA-, IGG-, IGE+, CD127-, CD16-, CD15-/CD66B- (no axiom on any alt.), HLA-DR+, CD11C+, CD123- no +IgE IgE-Class Switched B cell Switched Surface Only (SO) 2 CL:0002113 B220-low CD38-negative unswitched memory B cell 24 2 CD3-, CD45+ (dim), CD20+ (1 of 2 alt.), CD27+, CD38-, CD20+ CD14-/CD33-/CD64- (no axiom on any alt.), CD56-, IGD-, IGM-, IGA-, IGG-, IGE+, CD127-, CD16-, CD15-/CD66B- (no axiom on any alt.), HLA-DR+, CD11C+, CD123- no +IgE IgE-Class Switched B cell Switched Surface Only (SO) 3 CL:0002118 CD38-negative IgG-negative class switched memory B cell 21 3 CD3-, CD20+ (1 of 2 alt.), CD27+, CD38-, CD20+ CD14-/CD33-/CD64- (no axiom on any alt.), CD56-, CD45+, IGD-, IGM-, IGA-, IGG-, IGE+, CD127-, CD16-, CD15-/CD66B- (no axiom on any alt.), HLA-DR+, CD11C+, CD123- no +T cell T lymphocyte Exact 1 CL:0002468 Gr1-low myeloid suppressor cell 7 1 CD45+, CD11C+ CD14-/CD33-/CD64- (no axiom on any alt.), CD19-/CD20- (no axiom on any alt.), CD123-, CD3+, HLA-DR+, CD15-/CD66B- (no axiom on any alt.), CD16- no +T cell T lymphocyte Exact 2 CL:0002477 adipose macrophage 6 0 CD45+, CD11C+ CD14-/CD33-/CD64- (no axiom on any alt.), CD19-/CD20- (no axiom on any alt.), CD123-, CD3+, HLA-DR+, CD15-/CD66B- (no axiom on any alt.), CD16- no +T cell T lymphocyte Exact 3 CL:0002478 F4/80-negative adipose macrophage 6 0 CD45+, CD11C+ CD14-/CD33-/CD64- (no axiom on any alt.), CD19-/CD20- (no axiom on any alt.), CD123-, CD3+, HLA-DR+, CD15-/CD66B- (no axiom on any alt.), CD16- no +CD56+ T cell CD56+ T cell T cell Exact 1 CL:0002468 Gr1-low myeloid suppressor cell 7 1 CD45+, CD11C+ CD14-/CD33-/CD64- (no axiom on any alt.), CD19-/CD20- (no axiom on any alt.), CD123-, CD3+, CD56+, HLA-DR+, CD15-/CD66B- (no axiom on any alt.), CD16- no +CD56+ T cell CD56+ T cell T cell Exact 2 CL:0002477 adipose macrophage 6 0 CD45+, CD11C+ CD14-/CD33-/CD64- (no axiom on any alt.), CD19-/CD20- (no axiom on any alt.), CD123-, CD3+, CD56+, HLA-DR+, CD15-/CD66B- (no axiom on any alt.), CD16- no +CD56+ T cell CD56+ T cell T cell Exact 3 CL:0002478 F4/80-negative adipose macrophage 6 0 CD45+, CD11C+ CD14-/CD33-/CD64- (no axiom on any alt.), CD19-/CD20- (no axiom on any alt.), CD123-, CD3+, CD56+, HLA-DR+, CD15-/CD66B- (no axiom on any alt.), CD16- no +CD56+ CD4 T cell CD56+ CD4 T cell CD4+ T cell Exact 1 CL:0002039 immature NK T cell stage I, mouse 9 1 CD4+ (dim), CD8+ (dim) CD14-/CD33-/CD64- (no axiom on any alt.), CD19-/CD20- (no axiom on any alt.), CD123-, CD45+, CD3+, CD56+, HLA-DR+, CD11C+, CD15-/CD66B- (no axiom on any alt.), CD16- no +CD56+ CD4 T cell CD56+ CD4 T cell CD4+ T cell Exact 2 CL:0002430 CD4-intermediate, CD8-positive double-positive thymocyte 9 1 CD4+ (dim), CD8+ CD14-/CD33-/CD64- (no axiom on any alt.), CD19-/CD20- (no axiom on any alt.), CD123-, CD45+, CD3+, CD56+, HLA-DR+, CD11C+, CD15-/CD66B- (no axiom on any alt.), CD16- no +CD56+ CD4 T cell CD56+ CD4 T cell CD4+ T cell Exact 3 CL:0002431 CD4-positive, CD8-intermediate double-positive thymocyte 9 1 CD4+, CD8+ (dim) CD14-/CD33-/CD64- (no axiom on any alt.), CD19-/CD20- (no axiom on any alt.), CD123-, CD45+, CD3+, CD56+, HLA-DR+, CD11C+, CD15-/CD66B- (no axiom on any alt.), CD16- no +CD56+ CD8 T cell CD56+ CD8 T cell CD8+ T cell Exact 1 CL:0000900 naive thymus-derived CD8-positive, alpha-beta T cell 14 2 CD45+, CD4-, CD8+ CD14-/CD33-/CD64- (no axiom on any alt.), CD19-/CD20- (no axiom on any alt.), CD123-, CD3+, CD56+, HLA-DR+, CD11C+, CD15-/CD66B- (no axiom on any alt.), CD16- no +CD56+ CD8 T cell CD56+ CD8 T cell CD8+ T cell Exact 2 CL:0000907 central memory CD8-positive, alpha-beta T cell 14 2 CD45+, CD4-, CD8+ CD14-/CD33-/CD64- (no axiom on any alt.), CD19-/CD20- (no axiom on any alt.), CD123-, CD3+, CD56+, HLA-DR+, CD11C+, CD15-/CD66B- (no axiom on any alt.), CD16- no +CD56+ CD8 T cell CD56+ CD8 T cell CD8+ T cell Exact 3 CL:0000913 effector memory CD8-positive, alpha-beta T cell 14 2 CD45+, CD4-, CD8+ CD14-/CD33-/CD64- (no axiom on any alt.), CD19-/CD20- (no axiom on any alt.), CD123-, CD3+, CD56+, HLA-DR+, CD11C+, CD15-/CD66B- (no axiom on any alt.), CD16- no +CD56+ TCRab CD56+ alpha/beta T cell TCRab Exact 1 CL:0002468 Gr1-low myeloid suppressor cell 7 1 CD45+, CD11C+ CD14-/CD33-/CD64- (no axiom on any alt.), CD19-/CD20- (no axiom on any alt.), CD123-, CD3+, TCRAB+/TCRGD- (no axiom on any alt.), CD56+, HLA-DR+, CD15-/CD66B- (no axiom on any alt.), CD16- no +CD56+ TCRab CD56+ alpha/beta T cell TCRab Exact 2 CL:0002477 adipose macrophage 6 0 CD45+, CD11C+ CD14-/CD33-/CD64- (no axiom on any alt.), CD19-/CD20- (no axiom on any alt.), CD123-, CD3+, TCRAB+/TCRGD- (no axiom on any alt.), CD56+, HLA-DR+, CD15-/CD66B- (no axiom on any alt.), CD16- no +CD56+ TCRab CD56+ alpha/beta T cell TCRab Exact 3 CL:0002478 F4/80-negative adipose macrophage 6 0 CD45+, CD11C+ CD14-/CD33-/CD64- (no axiom on any alt.), CD19-/CD20- (no axiom on any alt.), CD123-, CD3+, TCRAB+/TCRGD- (no axiom on any alt.), CD56+, HLA-DR+, CD15-/CD66B- (no axiom on any alt.), CD16- no +CD56+ CD4+ TCRab CD56+ CD4+ alpha/beta T cell CD4+ TCRab T cell Exact 1 CL:0000895 naive thymus-derived CD4-positive, alpha-beta T cell 13 1 CD45+, CD4+, CD8- CD14-/CD33-/CD64- (no axiom on any alt.), CD19-/CD20- (no axiom on any alt.), CD123-, CD3+, TCRAB+/TCRGD- (no axiom on any alt.), CD56+, HLA-DR+, CD11C+, CD15-/CD66B- (no axiom on any alt.), CD16- no +CD56+ CD4+ TCRab CD56+ CD4+ alpha/beta T cell CD4+ TCRab T cell Exact 2 CL:0000904 central memory CD4-positive, alpha-beta T cell 13 1 CD45+, CD4+, CD8- CD14-/CD33-/CD64- (no axiom on any alt.), CD19-/CD20- (no axiom on any alt.), CD123-, CD3+, TCRAB+/TCRGD- (no axiom on any alt.), CD56+, HLA-DR+, CD11C+, CD15-/CD66B- (no axiom on any alt.), CD16- no +CD56+ CD4+ TCRab CD56+ CD4+ alpha/beta T cell CD4+ TCRab T cell Exact 3 CL:0000905 effector memory CD4-positive, alpha-beta T cell 13 1 CD45+, CD4+, CD8- CD14-/CD33-/CD64- (no axiom on any alt.), CD19-/CD20- (no axiom on any alt.), CD123-, CD3+, TCRAB+/TCRGD- (no axiom on any alt.), CD56+, HLA-DR+, CD11C+, CD15-/CD66B- (no axiom on any alt.), CD16- no +CD56+ CD8+ TCRab CD56+ CD8+ alpha/beta T cell CD8+ TCRab T cell Exact 1 CL:0000900 naive thymus-derived CD8-positive, alpha-beta T cell 13 1 CD45+, CD4-, CD8+ CD14-/CD33-/CD64- (no axiom on any alt.), CD19-/CD20- (no axiom on any alt.), CD123-, CD3+, TCRAB+/TCRGD- (no axiom on any alt.), CD56+, HLA-DR+, CD11C+, CD15-/CD66B- (no axiom on any alt.), CD16- no +CD56+ CD8+ TCRab CD56+ CD8+ alpha/beta T cell CD8+ TCRab T cell Exact 2 CL:0000907 central memory CD8-positive, alpha-beta T cell 13 1 CD45+, CD4-, CD8+ CD14-/CD33-/CD64- (no axiom on any alt.), CD19-/CD20- (no axiom on any alt.), CD123-, CD3+, TCRAB+/TCRGD- (no axiom on any alt.), CD56+, HLA-DR+, CD11C+, CD15-/CD66B- (no axiom on any alt.), CD16- no +CD56+ CD8+ TCRab CD56+ CD8+ alpha/beta T cell CD8+ TCRab T cell Exact 3 CL:0000913 effector memory CD8-positive, alpha-beta T cell 13 1 CD45+, CD4-, CD8+ CD14-/CD33-/CD64- (no axiom on any alt.), CD19-/CD20- (no axiom on any alt.), CD123-, CD3+, TCRAB+/TCRGD- (no axiom on any alt.), CD56+, HLA-DR+, CD11C+, CD15-/CD66B- (no axiom on any alt.), CD16- no +CD56+ CD4+/CD8+ TCRab CD56+ CD4+/CD8+ alpha/beta T cell CD4+/CD8+ TCRab T cell Exact 1 CL:0002039 immature NK T cell stage I, mouse 9 1 CD4+ (dim), CD8+ (dim) CD14-/CD33-/CD64- (no axiom on any alt.), CD19-/CD20- (no axiom on any alt.), CD123-, CD45+, CD3+, TCRAB+/TCRGD- (no axiom on any alt.), CD56+, HLA-DR+, CD11C+, CD15-/CD66B- (no axiom on any alt.), CD16- no +CD56+ CD4+/CD8+ TCRab CD56+ CD4+/CD8+ alpha/beta T cell CD4+/CD8+ TCRab T cell Exact 2 CL:0000809 double-positive, alpha-beta thymocyte 8 0 CD4+, CD8+ CD14-/CD33-/CD64- (no axiom on any alt.), CD19-/CD20- (no axiom on any alt.), CD123-, CD45+, CD3+, TCRAB+/TCRGD- (no axiom on any alt.), CD56+, HLA-DR+, CD11C+, CD15-/CD66B- (no axiom on any alt.), CD16- no +CD56+ CD4+/CD8+ TCRab CD56+ CD4+/CD8+ alpha/beta T cell CD4+/CD8+ TCRab T cell Exact 3 CL:0002427 resting double-positive thymocyte 8 0 CD4+, CD8+ CD14-/CD33-/CD64- (no axiom on any alt.), CD19-/CD20- (no axiom on any alt.), CD123-, CD45+, CD3+, TCRAB+/TCRGD- (no axiom on any alt.), CD56+, HLA-DR+, CD11C+, CD15-/CD66B- (no axiom on any alt.), CD16- no +CD56+ CD4-/CD8- TCRab CD56+ CD4-/CD8- alpha/beta T cell CD4-/CD8- TCRab T cell Exact 1 CL:0000803 CD4-negative CD8-negative gamma-delta intraepithelial T cell 10 2 CD4-, CD8- CD14-/CD33-/CD64- (no axiom on any alt.), CD19-/CD20- (no axiom on any alt.), CD123-, CD45+, CD3+, TCRAB+/TCRGD- (no axiom on any alt.), CD56+, HLA-DR+, CD11C+, CD15-/CD66B- (no axiom on any alt.), CD16- no +CD56+ CD4-/CD8- TCRab CD56+ CD4-/CD8- alpha/beta T cell CD4-/CD8- TCRab T cell Exact 2 CL:0000924 CD4-negative, CD8-negative type I NK T cell 10 2 CD4-, CD8- CD14-/CD33-/CD64- (no axiom on any alt.), CD19-/CD20- (no axiom on any alt.), CD123-, CD45+, CD3+, TCRAB+/TCRGD- (no axiom on any alt.), CD56+, HLA-DR+, CD11C+, CD15-/CD66B- (no axiom on any alt.), CD16- no +CD56+ CD4-/CD8- TCRab CD56+ CD4-/CD8- alpha/beta T cell CD4-/CD8- TCRab T cell Exact 3 CL:0000928 activated CD4-negative, CD8-negative type I NK T cell 10 2 CD4-, CD8- CD14-/CD33-/CD64- (no axiom on any alt.), CD19-/CD20- (no axiom on any alt.), CD123-, CD45+, CD3+, TCRAB+/TCRGD- (no axiom on any alt.), CD56+, HLA-DR+, CD11C+, CD15-/CD66B- (no axiom on any alt.), CD16- no +CD56+ TCRgd CD56+ gamma/delta T cell TCRgd Exact 1 CL:0002468 Gr1-low myeloid suppressor cell 7 1 CD45+, CD11C+ CD14-/CD33-/CD64- (no axiom on any alt.), CD19-/CD20- (no axiom on any alt.), CD123-, CD3+, TCRAB-/TCRGD+ (no axiom on any alt.), CD56+, HLA-DR+, CD15-/CD66B- (no axiom on any alt.), CD16- no +CD56+ TCRgd CD56+ gamma/delta T cell TCRgd Exact 2 CL:0002477 adipose macrophage 6 0 CD45+, CD11C+ CD14-/CD33-/CD64- (no axiom on any alt.), CD19-/CD20- (no axiom on any alt.), CD123-, CD3+, TCRAB-/TCRGD+ (no axiom on any alt.), CD56+, HLA-DR+, CD15-/CD66B- (no axiom on any alt.), CD16- no +CD56+ TCRgd CD56+ gamma/delta T cell TCRgd Exact 3 CL:0002478 F4/80-negative adipose macrophage 6 0 CD45+, CD11C+ CD14-/CD33-/CD64- (no axiom on any alt.), CD19-/CD20- (no axiom on any alt.), CD123-, CD3+, TCRAB-/TCRGD+ (no axiom on any alt.), CD56+, HLA-DR+, CD15-/CD66B- (no axiom on any alt.), CD16- no +CD56+ CD4+ TCRgd CD56+ CD4+ gamma/delta T cell CD4+ TCRgd T cell Exact 1 CL:0000895 naive thymus-derived CD4-positive, alpha-beta T cell 13 1 CD45+, CD4+, CD8- CD14-/CD33-/CD64- (no axiom on any alt.), CD19-/CD20- (no axiom on any alt.), CD123-, CD3+, TCRAB-/TCRGD+ (no axiom on any alt.), CD56+, HLA-DR+, CD11C+, CD15-/CD66B- (no axiom on any alt.), CD16- no +CD56+ CD4+ TCRgd CD56+ CD4+ gamma/delta T cell CD4+ TCRgd T cell Exact 2 CL:0000904 central memory CD4-positive, alpha-beta T cell 13 1 CD45+, CD4+, CD8- CD14-/CD33-/CD64- (no axiom on any alt.), CD19-/CD20- (no axiom on any alt.), CD123-, CD3+, TCRAB-/TCRGD+ (no axiom on any alt.), CD56+, HLA-DR+, CD11C+, CD15-/CD66B- (no axiom on any alt.), CD16- no +CD56+ CD4+ TCRgd CD56+ CD4+ gamma/delta T cell CD4+ TCRgd T cell Exact 3 CL:0000905 effector memory CD4-positive, alpha-beta T cell 13 1 CD45+, CD4+, CD8- CD14-/CD33-/CD64- (no axiom on any alt.), CD19-/CD20- (no axiom on any alt.), CD123-, CD3+, TCRAB-/TCRGD+ (no axiom on any alt.), CD56+, HLA-DR+, CD11C+, CD15-/CD66B- (no axiom on any alt.), CD16- no +CD56+ CD8+ TCRgd CD56+ CD8+ gamma/delta T cell CD8+ TCRgd T cell Exact 1 CL:0000900 naive thymus-derived CD8-positive, alpha-beta T cell 13 1 CD45+, CD4-, CD8+ CD14-/CD33-/CD64- (no axiom on any alt.), CD19-/CD20- (no axiom on any alt.), CD123-, CD3+, TCRAB-/TCRGD+ (no axiom on any alt.), CD56+, HLA-DR+, CD11C+, CD15-/CD66B- (no axiom on any alt.), CD16- no +CD56+ CD8+ TCRgd CD56+ CD8+ gamma/delta T cell CD8+ TCRgd T cell Exact 2 CL:0000907 central memory CD8-positive, alpha-beta T cell 13 1 CD45+, CD4-, CD8+ CD14-/CD33-/CD64- (no axiom on any alt.), CD19-/CD20- (no axiom on any alt.), CD123-, CD3+, TCRAB-/TCRGD+ (no axiom on any alt.), CD56+, HLA-DR+, CD11C+, CD15-/CD66B- (no axiom on any alt.), CD16- no +CD56+ CD8+ TCRgd CD56+ CD8+ gamma/delta T cell CD8+ TCRgd T cell Exact 3 CL:0000913 effector memory CD8-positive, alpha-beta T cell 13 1 CD45+, CD4-, CD8+ CD14-/CD33-/CD64- (no axiom on any alt.), CD19-/CD20- (no axiom on any alt.), CD123-, CD3+, TCRAB-/TCRGD+ (no axiom on any alt.), CD56+, HLA-DR+, CD11C+, CD15-/CD66B- (no axiom on any alt.), CD16- no +CD56+ CD4+/CD8+ TCRgd CD56+ CD4+/CD8+ gamma/delta T cell CD4+/CD8+ TCRgd Exact 1 CL:0002039 immature NK T cell stage I, mouse 9 1 CD4+ (dim), CD8+ (dim) CD14-/CD33-/CD64- (no axiom on any alt.), CD19-/CD20- (no axiom on any alt.), CD123-, CD45+, CD3+, TCRAB-/TCRGD+ (no axiom on any alt.), CD56+, HLA-DR+, CD11C+, CD15-/CD66B- (no axiom on any alt.), CD16- no +CD56+ CD4+/CD8+ TCRgd CD56+ CD4+/CD8+ gamma/delta T cell CD4+/CD8+ TCRgd Exact 2 CL:0000809 double-positive, alpha-beta thymocyte 8 0 CD4+, CD8+ CD14-/CD33-/CD64- (no axiom on any alt.), CD19-/CD20- (no axiom on any alt.), CD123-, CD45+, CD3+, TCRAB-/TCRGD+ (no axiom on any alt.), CD56+, HLA-DR+, CD11C+, CD15-/CD66B- (no axiom on any alt.), CD16- no +CD56+ CD4+/CD8+ TCRgd CD56+ CD4+/CD8+ gamma/delta T cell CD4+/CD8+ TCRgd Exact 3 CL:0002427 resting double-positive thymocyte 8 0 CD4+, CD8+ CD14-/CD33-/CD64- (no axiom on any alt.), CD19-/CD20- (no axiom on any alt.), CD123-, CD45+, CD3+, TCRAB-/TCRGD+ (no axiom on any alt.), CD56+, HLA-DR+, CD11C+, CD15-/CD66B- (no axiom on any alt.), CD16- no +CD56+ CD8-/CD8- TCRgd CD56+ CD8-/CD8- gamma/delta T cell CD4-/CD8- TCRgd Exact 1 CL:0000803 CD4-negative CD8-negative gamma-delta intraepithelial T cell 11 3 CD4-, CD8- CD14-/CD33-/CD64- (no axiom on any alt.), CD19-/CD20- (no axiom on any alt.), CD123-, CD45+, CD3+, TCRAB-/TCRGD+ (no axiom on any alt.), CD56+, HLA-DR+, CD11C+, CD15-/CD66B- (no axiom on any alt.), CD16- no +CD56+ CD8-/CD8- TCRgd CD56+ CD8-/CD8- gamma/delta T cell CD4-/CD8- TCRgd Exact 2 CL:0000924 CD4-negative, CD8-negative type I NK T cell 11 3 CD4-, CD8- CD14-/CD33-/CD64- (no axiom on any alt.), CD19-/CD20- (no axiom on any alt.), CD123-, CD45+, CD3+, TCRAB-/TCRGD+ (no axiom on any alt.), CD56+, HLA-DR+, CD11C+, CD15-/CD66B- (no axiom on any alt.), CD16- no +CD56+ CD8-/CD8- TCRgd CD56+ CD8-/CD8- gamma/delta T cell CD4-/CD8- TCRgd Exact 3 CL:0000928 activated CD4-negative, CD8-negative type I NK T cell 11 3 CD4-, CD8- CD14-/CD33-/CD64- (no axiom on any alt.), CD19-/CD20- (no axiom on any alt.), CD123-, CD45+, CD3+, TCRAB-/TCRGD+ (no axiom on any alt.), CD56+, HLA-DR+, CD11C+, CD15-/CD66B- (no axiom on any alt.), CD16- no +iNKT Invariant Natural Killer T cell T cell Exact 1 CL:0002468 Gr1-low myeloid suppressor cell 7 1 CD45+, CD11C+ CD14-/CD33-/CD64- (no axiom on any alt.), CD19-/CD20- (no axiom on any alt.), CD123-, CD3+, TCRAB+/TCRGD- (no axiom on any alt.), TCRVA24-JA18+/TCRVA24+/TETRAMER+ (no axiom on any alt.), VB11+, HLA-DR+, CD15-/CD66B- (no axiom on any alt.), CD16- no +iNKT Invariant Natural Killer T cell T cell Exact 2 CL:0002477 adipose macrophage 6 0 CD45+, CD11C+ CD14-/CD33-/CD64- (no axiom on any alt.), CD19-/CD20- (no axiom on any alt.), CD123-, CD3+, TCRAB+/TCRGD- (no axiom on any alt.), TCRVA24-JA18+/TCRVA24+/TETRAMER+ (no axiom on any alt.), VB11+, HLA-DR+, CD15-/CD66B- (no axiom on any alt.), CD16- no +iNKT Invariant Natural Killer T cell T cell Exact 3 CL:0002478 F4/80-negative adipose macrophage 6 0 CD45+, CD11C+ CD14-/CD33-/CD64- (no axiom on any alt.), CD19-/CD20- (no axiom on any alt.), CD123-, CD3+, TCRAB+/TCRGD- (no axiom on any alt.), TCRVA24-JA18+/TCRVA24+/TETRAMER+ (no axiom on any alt.), VB11+, HLA-DR+, CD15-/CD66B- (no axiom on any alt.), CD16- no +TCRab alpha/beta T cell T cell Exact 1 CL:0002468 Gr1-low myeloid suppressor cell 7 1 CD45+, CD11C+ CD14-/CD33-/CD64- (no axiom on any alt.), CD19-/CD20- (no axiom on any alt.), CD123-, CD3+, TCRAB+/TCRGD- (no axiom on any alt.), HLA-DR+, CD15-/CD66B- (no axiom on any alt.), CD16- no +TCRab alpha/beta T cell T cell Exact 2 CL:0002477 adipose macrophage 6 0 CD45+, CD11C+ CD14-/CD33-/CD64- (no axiom on any alt.), CD19-/CD20- (no axiom on any alt.), CD123-, CD3+, TCRAB+/TCRGD- (no axiom on any alt.), HLA-DR+, CD15-/CD66B- (no axiom on any alt.), CD16- no +TCRab alpha/beta T cell T cell Exact 3 CL:0002478 F4/80-negative adipose macrophage 6 0 CD45+, CD11C+ CD14-/CD33-/CD64- (no axiom on any alt.), CD19-/CD20- (no axiom on any alt.), CD123-, CD3+, TCRAB+/TCRGD- (no axiom on any alt.), HLA-DR+, CD15-/CD66B- (no axiom on any alt.), CD16- no +TCRgd gamma/delta T cell T cell Exact 1 CL:0002468 Gr1-low myeloid suppressor cell 7 1 CD45+, CD11C+ CD14-/CD33-/CD64- (no axiom on any alt.), CD19-/CD20- (no axiom on any alt.), CD123-, CD3+, TCRAB-/TCRGD+ (no axiom on any alt.), HLA-DR+, CD15-/CD66B- (no axiom on any alt.), CD16- no +TCRgd gamma/delta T cell T cell Exact 2 CL:0002477 adipose macrophage 6 0 CD45+, CD11C+ CD14-/CD33-/CD64- (no axiom on any alt.), CD19-/CD20- (no axiom on any alt.), CD123-, CD3+, TCRAB-/TCRGD+ (no axiom on any alt.), HLA-DR+, CD15-/CD66B- (no axiom on any alt.), CD16- no +TCRgd gamma/delta T cell T cell Exact 3 CL:0002478 F4/80-negative adipose macrophage 6 0 CD45+, CD11C+ CD14-/CD33-/CD64- (no axiom on any alt.), CD19-/CD20- (no axiom on any alt.), CD123-, CD3+, TCRAB-/TCRGD+ (no axiom on any alt.), HLA-DR+, CD15-/CD66B- (no axiom on any alt.), CD16- no +CD4+ T cell alpha/beta and gamma/delta CD4+ T cells T cell Exact 1 CL:0000895 naive thymus-derived CD4-positive, alpha-beta T cell 13 1 CD45+, CD4+, CD8- CD14-/CD33-/CD64- (no axiom on any alt.), CD19-/CD20- (no axiom on any alt.), CD123-, CD3+, HLA-DR+, CD11C+, CD15-/CD66B- (no axiom on any alt.), CD16- no +CD4+ T cell alpha/beta and gamma/delta CD4+ T cells T cell Exact 2 CL:0000904 central memory CD4-positive, alpha-beta T cell 13 1 CD45+, CD4+, CD8- CD14-/CD33-/CD64- (no axiom on any alt.), CD19-/CD20- (no axiom on any alt.), CD123-, CD3+, HLA-DR+, CD11C+, CD15-/CD66B- (no axiom on any alt.), CD16- no +CD4+ T cell alpha/beta and gamma/delta CD4+ T cells T cell Exact 3 CL:0000905 effector memory CD4-positive, alpha-beta T cell 13 1 CD45+, CD4+, CD8- CD14-/CD33-/CD64- (no axiom on any alt.), CD19-/CD20- (no axiom on any alt.), CD123-, CD3+, HLA-DR+, CD11C+, CD15-/CD66B- (no axiom on any alt.), CD16- no +CD8+ T cell alpha/beta and gamma/delta CD8+ T cells T cell Exact 1 CL:0000900 naive thymus-derived CD8-positive, alpha-beta T cell 13 1 CD45+, CD4-, CD8+ CD14-/CD33-/CD64- (no axiom on any alt.), CD19-/CD20- (no axiom on any alt.), CD123-, CD3+, HLA-DR+, CD11C+, CD15-/CD66B- (no axiom on any alt.), CD16- no +CD8+ T cell alpha/beta and gamma/delta CD8+ T cells T cell Exact 2 CL:0000907 central memory CD8-positive, alpha-beta T cell 13 1 CD45+, CD4-, CD8+ CD14-/CD33-/CD64- (no axiom on any alt.), CD19-/CD20- (no axiom on any alt.), CD123-, CD3+, HLA-DR+, CD11C+, CD15-/CD66B- (no axiom on any alt.), CD16- no +CD8+ T cell alpha/beta and gamma/delta CD8+ T cells T cell Exact 3 CL:0000913 effector memory CD8-positive, alpha-beta T cell 13 1 CD45+, CD4-, CD8+ CD14-/CD33-/CD64- (no axiom on any alt.), CD19-/CD20- (no axiom on any alt.), CD123-, CD3+, HLA-DR+, CD11C+, CD15-/CD66B- (no axiom on any alt.), CD16- no +CD4+/CD8+ T cell alpha/beta and gamma/delta CD4+ and CD8+ T cells T cell Exact 1 CL:0002039 immature NK T cell stage I, mouse 9 1 CD4+ (dim), CD8+ (dim) CD14-/CD33-/CD64- (no axiom on any alt.), CD19-/CD20- (no axiom on any alt.), CD123-, CD45+, CD3+, HLA-DR+, CD11C+, CD15-/CD66B- (no axiom on any alt.), CD16- no +CD4+/CD8+ T cell alpha/beta and gamma/delta CD4+ and CD8+ T cells T cell Exact 2 CL:0000809 double-positive, alpha-beta thymocyte 8 0 CD4+, CD8+ CD14-/CD33-/CD64- (no axiom on any alt.), CD19-/CD20- (no axiom on any alt.), CD123-, CD45+, CD3+, HLA-DR+, CD11C+, CD15-/CD66B- (no axiom on any alt.), CD16- no +CD4+/CD8+ T cell alpha/beta and gamma/delta CD4+ and CD8+ T cells T cell Exact 3 CL:0002427 resting double-positive thymocyte 8 0 CD4+, CD8+ CD14-/CD33-/CD64- (no axiom on any alt.), CD19-/CD20- (no axiom on any alt.), CD123-, CD45+, CD3+, HLA-DR+, CD11C+, CD15-/CD66B- (no axiom on any alt.), CD16- no +CD4-/CD8- T cell alpha/beta and gamma/delta CD4- and CD8- T cells T cell Exact 1 CL:0000803 CD4-negative CD8-negative gamma-delta intraepithelial T cell 11 3 CD4-, CD8- CD14-/CD33-/CD64- (no axiom on any alt.), CD19-/CD20- (no axiom on any alt.), CD123-, CD45+, CD3+, HLA-DR+, CD11C+, CD15-/CD66B- (no axiom on any alt.), CD16- no +CD4-/CD8- T cell alpha/beta and gamma/delta CD4- and CD8- T cells T cell Exact 2 CL:0000924 CD4-negative, CD8-negative type I NK T cell 11 3 CD4-, CD8- CD14-/CD33-/CD64- (no axiom on any alt.), CD19-/CD20- (no axiom on any alt.), CD123-, CD45+, CD3+, HLA-DR+, CD11C+, CD15-/CD66B- (no axiom on any alt.), CD16- no +CD4-/CD8- T cell alpha/beta and gamma/delta CD4- and CD8- T cells T cell Exact 3 CL:0000928 activated CD4-negative, CD8-negative type I NK T cell 11 3 CD4-, CD8- CD14-/CD33-/CD64- (no axiom on any alt.), CD19-/CD20- (no axiom on any alt.), CD123-, CD45+, CD3+, HLA-DR+, CD11C+, CD15-/CD66B- (no axiom on any alt.), CD16- no +CD4+ TCRab T cell CD4+ alpha/beta T cell TCRab Exact 1 CL:0000895 naive thymus-derived CD4-positive, alpha-beta T cell 13 1 CD45+, CD4+, CD8- CD14-/CD33-/CD64- (no axiom on any alt.), CD19-/CD20- (no axiom on any alt.), CD123-, CD3+, TCRAB+/TCRGD- (no axiom on any alt.), HLA-DR+, CD11C+, CD15-/CD66B- (no axiom on any alt.), CD16- no +CD4+ TCRab T cell CD4+ alpha/beta T cell TCRab Exact 2 CL:0000904 central memory CD4-positive, alpha-beta T cell 13 1 CD45+, CD4+, CD8- CD14-/CD33-/CD64- (no axiom on any alt.), CD19-/CD20- (no axiom on any alt.), CD123-, CD3+, TCRAB+/TCRGD- (no axiom on any alt.), HLA-DR+, CD11C+, CD15-/CD66B- (no axiom on any alt.), CD16- no +CD4+ TCRab T cell CD4+ alpha/beta T cell TCRab Exact 3 CL:0000905 effector memory CD4-positive, alpha-beta T cell 13 1 CD45+, CD4+, CD8- CD14-/CD33-/CD64- (no axiom on any alt.), CD19-/CD20- (no axiom on any alt.), CD123-, CD3+, TCRAB+/TCRGD- (no axiom on any alt.), HLA-DR+, CD11C+, CD15-/CD66B- (no axiom on any alt.), CD16- no +CD8+ TCRab T cell CD8+ alpha/beta T cell TCRab Exact 1 CL:0000900 naive thymus-derived CD8-positive, alpha-beta T cell 13 1 CD45+, CD4-, CD8+ CD14-/CD33-/CD64- (no axiom on any alt.), CD19-/CD20- (no axiom on any alt.), CD123-, CD3+, TCRAB+/TCRGD- (no axiom on any alt.), HLA-DR+, CD11C+, CD15-/CD66B- (no axiom on any alt.), CD16- no +CD8+ TCRab T cell CD8+ alpha/beta T cell TCRab Exact 2 CL:0000907 central memory CD8-positive, alpha-beta T cell 13 1 CD45+, CD4-, CD8+ CD14-/CD33-/CD64- (no axiom on any alt.), CD19-/CD20- (no axiom on any alt.), CD123-, CD3+, TCRAB+/TCRGD- (no axiom on any alt.), HLA-DR+, CD11C+, CD15-/CD66B- (no axiom on any alt.), CD16- no +CD8+ TCRab T cell CD8+ alpha/beta T cell TCRab Exact 3 CL:0000913 effector memory CD8-positive, alpha-beta T cell 13 1 CD45+, CD4-, CD8+ CD14-/CD33-/CD64- (no axiom on any alt.), CD19-/CD20- (no axiom on any alt.), CD123-, CD3+, TCRAB+/TCRGD- (no axiom on any alt.), HLA-DR+, CD11C+, CD15-/CD66B- (no axiom on any alt.), CD16- no +CD4+/CD8+ TCRab T cell CD4+ and CD8+ alpha/beta T cell TCRab Exact 1 CL:0002039 immature NK T cell stage I, mouse 9 1 CD4+ (dim), CD8+ (dim) CD14-/CD33-/CD64- (no axiom on any alt.), CD19-/CD20- (no axiom on any alt.), CD123-, CD45+, CD3+, TCRAB+/TCRGD- (no axiom on any alt.), HLA-DR+, CD11C+, CD15-/CD66B- (no axiom on any alt.), CD16- no +CD4+/CD8+ TCRab T cell CD4+ and CD8+ alpha/beta T cell TCRab Exact 2 CL:0000809 double-positive, alpha-beta thymocyte 8 0 CD4+, CD8+ CD14-/CD33-/CD64- (no axiom on any alt.), CD19-/CD20- (no axiom on any alt.), CD123-, CD45+, CD3+, TCRAB+/TCRGD- (no axiom on any alt.), HLA-DR+, CD11C+, CD15-/CD66B- (no axiom on any alt.), CD16- no +CD4+/CD8+ TCRab T cell CD4+ and CD8+ alpha/beta T cell TCRab Exact 3 CL:0002427 resting double-positive thymocyte 8 0 CD4+, CD8+ CD14-/CD33-/CD64- (no axiom on any alt.), CD19-/CD20- (no axiom on any alt.), CD123-, CD45+, CD3+, TCRAB+/TCRGD- (no axiom on any alt.), HLA-DR+, CD11C+, CD15-/CD66B- (no axiom on any alt.), CD16- no +CD4-/CD8- TCRab T cell CD4- and CD8- alpha/beta T cell TCRab Exact 1 CL:0000803 CD4-negative CD8-negative gamma-delta intraepithelial T cell 11 3 CD4-, CD8- CD14-/CD33-/CD64- (no axiom on any alt.), CD19-/CD20- (no axiom on any alt.), CD123-, CD45+, CD3+, TCRAB+/TCRGD- (no axiom on any alt.), HLA-DR+, CD11C+, CD15-/CD66B- (no axiom on any alt.), CD16- no +CD4-/CD8- TCRab T cell CD4- and CD8- alpha/beta T cell TCRab Exact 2 CL:0000924 CD4-negative, CD8-negative type I NK T cell 11 3 CD4-, CD8- CD14-/CD33-/CD64- (no axiom on any alt.), CD19-/CD20- (no axiom on any alt.), CD123-, CD45+, CD3+, TCRAB+/TCRGD- (no axiom on any alt.), HLA-DR+, CD11C+, CD15-/CD66B- (no axiom on any alt.), CD16- no +CD4-/CD8- TCRab T cell CD4- and CD8- alpha/beta T cell TCRab Exact 3 CL:0000928 activated CD4-negative, CD8-negative type I NK T cell 11 3 CD4-, CD8- CD14-/CD33-/CD64- (no axiom on any alt.), CD19-/CD20- (no axiom on any alt.), CD123-, CD45+, CD3+, TCRAB+/TCRGD- (no axiom on any alt.), HLA-DR+, CD11C+, CD15-/CD66B- (no axiom on any alt.), CD16- no +CD4+ TCRgd T cell CD4+ gamma/delta T cell TCRgd Exact 1 CL:0000895 naive thymus-derived CD4-positive, alpha-beta T cell 13 1 CD45+, CD4+, CD8- CD14-/CD33-/CD64- (no axiom on any alt.), CD19-/CD20- (no axiom on any alt.), CD123-, CD3+, TCRAB-/TCRGD+ (no axiom on any alt.), HLA-DR+, CD11C+, CD15-/CD66B- (no axiom on any alt.), CD16- no +CD4+ TCRgd T cell CD4+ gamma/delta T cell TCRgd Exact 2 CL:0000904 central memory CD4-positive, alpha-beta T cell 13 1 CD45+, CD4+, CD8- CD14-/CD33-/CD64- (no axiom on any alt.), CD19-/CD20- (no axiom on any alt.), CD123-, CD3+, TCRAB-/TCRGD+ (no axiom on any alt.), HLA-DR+, CD11C+, CD15-/CD66B- (no axiom on any alt.), CD16- no +CD4+ TCRgd T cell CD4+ gamma/delta T cell TCRgd Exact 3 CL:0000905 effector memory CD4-positive, alpha-beta T cell 13 1 CD45+, CD4+, CD8- CD14-/CD33-/CD64- (no axiom on any alt.), CD19-/CD20- (no axiom on any alt.), CD123-, CD3+, TCRAB-/TCRGD+ (no axiom on any alt.), HLA-DR+, CD11C+, CD15-/CD66B- (no axiom on any alt.), CD16- no +CD8+ TCRgd T cell CD8+ gamma/delta T cell TCRgd Exact 1 CL:0000900 naive thymus-derived CD8-positive, alpha-beta T cell 13 1 CD45+, CD4-, CD8+ CD14-/CD33-/CD64- (no axiom on any alt.), CD19-/CD20- (no axiom on any alt.), CD123-, CD3+, TCRAB-/TCRGD+ (no axiom on any alt.), HLA-DR+, CD11C+, CD15-/CD66B- (no axiom on any alt.), CD16- no +CD8+ TCRgd T cell CD8+ gamma/delta T cell TCRgd Exact 2 CL:0000907 central memory CD8-positive, alpha-beta T cell 13 1 CD45+, CD4-, CD8+ CD14-/CD33-/CD64- (no axiom on any alt.), CD19-/CD20- (no axiom on any alt.), CD123-, CD3+, TCRAB-/TCRGD+ (no axiom on any alt.), HLA-DR+, CD11C+, CD15-/CD66B- (no axiom on any alt.), CD16- no +CD8+ TCRgd T cell CD8+ gamma/delta T cell TCRgd Exact 3 CL:0000913 effector memory CD8-positive, alpha-beta T cell 13 1 CD45+, CD4-, CD8+ CD14-/CD33-/CD64- (no axiom on any alt.), CD19-/CD20- (no axiom on any alt.), CD123-, CD3+, TCRAB-/TCRGD+ (no axiom on any alt.), HLA-DR+, CD11C+, CD15-/CD66B- (no axiom on any alt.), CD16- no +CD4+/CD8+ TCRgd CD4+/CD8+ gamma/delta T cell TCRgd Exact 1 CL:0002039 immature NK T cell stage I, mouse 9 1 CD4+ (dim), CD8+ (dim) CD14-/CD33-/CD64- (no axiom on any alt.), CD19-/CD20- (no axiom on any alt.), CD123-, CD45+, CD3+, TCRAB-/TCRGD+ (no axiom on any alt.), HLA-DR+, CD11C+, CD15-/CD66B- (no axiom on any alt.), CD16- no +CD4+/CD8+ TCRgd CD4+/CD8+ gamma/delta T cell TCRgd Exact 2 CL:0000809 double-positive, alpha-beta thymocyte 8 0 CD4+, CD8+ CD14-/CD33-/CD64- (no axiom on any alt.), CD19-/CD20- (no axiom on any alt.), CD123-, CD45+, CD3+, TCRAB-/TCRGD+ (no axiom on any alt.), HLA-DR+, CD11C+, CD15-/CD66B- (no axiom on any alt.), CD16- no +CD4+/CD8+ TCRgd CD4+/CD8+ gamma/delta T cell TCRgd Exact 3 CL:0002427 resting double-positive thymocyte 8 0 CD4+, CD8+ CD14-/CD33-/CD64- (no axiom on any alt.), CD19-/CD20- (no axiom on any alt.), CD123-, CD45+, CD3+, TCRAB-/TCRGD+ (no axiom on any alt.), HLA-DR+, CD11C+, CD15-/CD66B- (no axiom on any alt.), CD16- no +CD4-/CD8- TCRgd CD4-/CD8- gamma/delta T cell TCRgd Exact 1 CL:0000803 CD4-negative CD8-negative gamma-delta intraepithelial T cell 10 2 CD4-, CD8- CD14-/CD33-/CD64- (no axiom on any alt.), CD19-/CD20- (no axiom on any alt.), CD123-, CD45+, CD3+, TCRAB-/TCRGD+ (no axiom on any alt.), HLA-DR+, CD11C+, CD15-/CD66B- (no axiom on any alt.), CD16- no +CD4-/CD8- TCRgd CD4-/CD8- gamma/delta T cell TCRgd Exact 2 CL:0000924 CD4-negative, CD8-negative type I NK T cell 10 2 CD4-, CD8- CD14-/CD33-/CD64- (no axiom on any alt.), CD19-/CD20- (no axiom on any alt.), CD123-, CD45+, CD3+, TCRAB-/TCRGD+ (no axiom on any alt.), HLA-DR+, CD11C+, CD15-/CD66B- (no axiom on any alt.), CD16- no +CD4-/CD8- TCRgd CD4-/CD8- gamma/delta T cell TCRgd Exact 3 CL:0000928 activated CD4-negative, CD8-negative type I NK T cell 10 2 CD4-, CD8- CD14-/CD33-/CD64- (no axiom on any alt.), CD19-/CD20- (no axiom on any alt.), CD123-, CD45+, CD3+, TCRAB-/TCRGD+ (no axiom on any alt.), HLA-DR+, CD11C+, CD15-/CD66B- (no axiom on any alt.), CD16- no +MAIT Mucosal-associated Invariant T cell T Lymph Exact 1 CL:0002468 Gr1-low myeloid suppressor cell 7 1 CD45+, CD11C+ CD14-/CD33-/CD64- (no axiom on any alt.), CD19-/CD20- (no axiom on any alt.), CD123-, CD3+, TCRAB+/TCRGD- (no axiom on any alt.), TCRVA7.2+/TETRAMER+ (no axiom on any alt.), CD161+, HLA-DR+, CD15-/CD66B- (no axiom on any alt.), CD16- no +MAIT Mucosal-associated Invariant T cell T Lymph Exact 2 CL:0000485 mucosal type mast cell 6 2 CD123- CD14-/CD33-/CD64- (no axiom on any alt.), CD19-/CD20- (no axiom on any alt.), CD45+, CD3+, TCRAB+/TCRGD- (no axiom on any alt.), TCRVA7.2+/TETRAMER+ (no axiom on any alt.), CD161+, HLA-DR+, CD11C+, CD15-/CD66B- (no axiom on any alt.), CD16- no +MAIT Mucosal-associated Invariant T cell T Lymph Exact 3 CL:0002477 adipose macrophage 6 0 CD45+, CD11C+ CD14-/CD33-/CD64- (no axiom on any alt.), CD19-/CD20- (no axiom on any alt.), CD123-, CD3+, TCRAB+/TCRGD- (no axiom on any alt.), TCRVA7.2+/TETRAMER+ (no axiom on any alt.), CD161+, HLA-DR+, CD15-/CD66B- (no axiom on any alt.), CD16- no +Conv TCRab T Lymph Exact 1 CL:0002468 Gr1-low myeloid suppressor cell 6 0 CD45+, CD11C+ CD14-/CD33-/CD64- (no axiom on any alt.), CD19-/CD20- (no axiom on any alt.), CD123-, CD3+, TCRAB+/TCRGD- (no axiom on any alt.), TCRVA7.2+/TETRAMER+ (no axiom on any alt.), CD161+, TCRVA24-JA18+/TCRVA24+/TETRAMER+ (no axiom on any alt.), VB11+, HLA-DR+, CD15-/CD66B- (no axiom on any alt.), CD16- no +Conv TCRab T Lymph Exact 2 CL:0002477 adipose macrophage 6 0 CD45+, CD11C+ CD14-/CD33-/CD64- (no axiom on any alt.), CD19-/CD20- (no axiom on any alt.), CD123-, CD3+, TCRAB+/TCRGD- (no axiom on any alt.), TCRVA7.2+/TETRAMER+ (no axiom on any alt.), CD161+, TCRVA24-JA18+/TCRVA24+/TETRAMER+ (no axiom on any alt.), VB11+, HLA-DR+, CD15-/CD66B- (no axiom on any alt.), CD16- no +Conv TCRab T Lymph Exact 3 CL:0002478 F4/80-negative adipose macrophage 6 0 CD45+, CD11C+ CD14-/CD33-/CD64- (no axiom on any alt.), CD19-/CD20- (no axiom on any alt.), CD123-, CD3+, TCRAB+/TCRGD- (no axiom on any alt.), TCRVA7.2+/TETRAMER+ (no axiom on any alt.), CD161+, TCRVA24-JA18+/TCRVA24+/TETRAMER+ (no axiom on any alt.), VB11+, HLA-DR+, CD15-/CD66B- (no axiom on any alt.), CD16- no +CD4+ Conv TCRab ConT TCRab Exact 1 CL:0000895 naive thymus-derived CD4-positive, alpha-beta T cell 12 0 CD45+, CD4+, CD8- CD14-/CD33-/CD64- (no axiom on any alt.), CD19-/CD20- (no axiom on any alt.), CD123-, CD3+, TCRAB+/TCRGD- (no axiom on any alt.), TCRVA7.2+/TETRAMER+ (no axiom on any alt.), CD161+, TCRVA24-JA18+/TCRVA24+/TETRAMER+ (no axiom on any alt.), VB11+, HLA-DR+, CD11C+, CD15-/CD66B- (no axiom on any alt.), CD16- no +CD4+ Conv TCRab ConT TCRab Exact 2 CL:0000904 central memory CD4-positive, alpha-beta T cell 12 0 CD45+, CD4+, CD8- CD14-/CD33-/CD64- (no axiom on any alt.), CD19-/CD20- (no axiom on any alt.), CD123-, CD3+, TCRAB+/TCRGD- (no axiom on any alt.), TCRVA7.2+/TETRAMER+ (no axiom on any alt.), CD161+, TCRVA24-JA18+/TCRVA24+/TETRAMER+ (no axiom on any alt.), VB11+, HLA-DR+, CD11C+, CD15-/CD66B- (no axiom on any alt.), CD16- no +CD4+ Conv TCRab ConT TCRab Exact 3 CL:0000905 effector memory CD4-positive, alpha-beta T cell 12 0 CD45+, CD4+, CD8- CD14-/CD33-/CD64- (no axiom on any alt.), CD19-/CD20- (no axiom on any alt.), CD123-, CD3+, TCRAB+/TCRGD- (no axiom on any alt.), TCRVA7.2+/TETRAMER+ (no axiom on any alt.), CD161+, TCRVA24-JA18+/TCRVA24+/TETRAMER+ (no axiom on any alt.), VB11+, HLA-DR+, CD11C+, CD15-/CD66B- (no axiom on any alt.), CD16- no +CD8+ Conv TCRab ConT TCRab Exact 1 CL:0000900 naive thymus-derived CD8-positive, alpha-beta T cell 12 0 CD45+, CD4-, CD8+ CD14-/CD33-/CD64- (no axiom on any alt.), CD19-/CD20- (no axiom on any alt.), CD123-, CD3+, TCRAB+/TCRGD- (no axiom on any alt.), TCRVA7.2+/TETRAMER+ (no axiom on any alt.), CD161+, TCRVA24-JA18+/TCRVA24+/TETRAMER+ (no axiom on any alt.), VB11+, HLA-DR+, CD11C+, CD15-/CD66B- (no axiom on any alt.), CD16- no +CD8+ Conv TCRab ConT TCRab Exact 2 CL:0000907 central memory CD8-positive, alpha-beta T cell 12 0 CD45+, CD4-, CD8+ CD14-/CD33-/CD64- (no axiom on any alt.), CD19-/CD20- (no axiom on any alt.), CD123-, CD3+, TCRAB+/TCRGD- (no axiom on any alt.), TCRVA7.2+/TETRAMER+ (no axiom on any alt.), CD161+, TCRVA24-JA18+/TCRVA24+/TETRAMER+ (no axiom on any alt.), VB11+, HLA-DR+, CD11C+, CD15-/CD66B- (no axiom on any alt.), CD16- no +CD8+ Conv TCRab ConT TCRab Exact 3 CL:0000913 effector memory CD8-positive, alpha-beta T cell 12 0 CD45+, CD4-, CD8+ CD14-/CD33-/CD64- (no axiom on any alt.), CD19-/CD20- (no axiom on any alt.), CD123-, CD3+, TCRAB+/TCRGD- (no axiom on any alt.), TCRVA7.2+/TETRAMER+ (no axiom on any alt.), CD161+, TCRVA24-JA18+/TCRVA24+/TETRAMER+ (no axiom on any alt.), VB11+, HLA-DR+, CD11C+, CD15-/CD66B- (no axiom on any alt.), CD16- no +CD4+/CD8+ Conv TCRab ConT TCRab Exact 1 CL:0000809 double-positive, alpha-beta thymocyte 8 0 CD4+, CD8+ CD14-/CD33-/CD64- (no axiom on any alt.), CD19-/CD20- (no axiom on any alt.), CD123-, CD45+, CD3+, TCRAB+/TCRGD- (no axiom on any alt.), TCRVA7.2+/TETRAMER+ (no axiom on any alt.), CD161+, TCRVA24-JA18+/TCRVA24+/TETRAMER+ (no axiom on any alt.), VB11+, HLA-DR+, CD11C+, CD15-/CD66B- (no axiom on any alt.), CD16- no +CD4+/CD8+ Conv TCRab ConT TCRab Exact 2 CL:0002039 immature NK T cell stage I, mouse 8 0 CD4+ (dim), CD8+ (dim) CD14-/CD33-/CD64- (no axiom on any alt.), CD19-/CD20- (no axiom on any alt.), CD123-, CD45+, CD3+, TCRAB+/TCRGD- (no axiom on any alt.), TCRVA7.2+/TETRAMER+ (no axiom on any alt.), CD161+, TCRVA24-JA18+/TCRVA24+/TETRAMER+ (no axiom on any alt.), VB11+, HLA-DR+, CD11C+, CD15-/CD66B- (no axiom on any alt.), CD16- no +CD4+/CD8+ Conv TCRab ConT TCRab Exact 3 CL:0002427 resting double-positive thymocyte 8 0 CD4+, CD8+ CD14-/CD33-/CD64- (no axiom on any alt.), CD19-/CD20- (no axiom on any alt.), CD123-, CD45+, CD3+, TCRAB+/TCRGD- (no axiom on any alt.), TCRVA7.2+/TETRAMER+ (no axiom on any alt.), CD161+, TCRVA24-JA18+/TCRVA24+/TETRAMER+ (no axiom on any alt.), VB11+, HLA-DR+, CD11C+, CD15-/CD66B- (no axiom on any alt.), CD16- no +CD4-/CD8- Conv TCRab ConT TCRab Exact 1 CL:0000803 CD4-negative CD8-negative gamma-delta intraepithelial T cell 9 1 CD4-, CD8- CD14-/CD33-/CD64- (no axiom on any alt.), CD19-/CD20- (no axiom on any alt.), CD123-, CD45+, CD3+, TCRAB+/TCRGD- (no axiom on any alt.), TCRVA7.2+/TETRAMER+ (no axiom on any alt.), CD161+, TCRVA24-JA18+/TCRVA24+/TETRAMER+ (no axiom on any alt.), VB11+, HLA-DR+, CD11C+, CD15-/CD66B- (no axiom on any alt.), CD16- no +CD4-/CD8- Conv TCRab ConT TCRab Exact 2 CL:0000924 CD4-negative, CD8-negative type I NK T cell 9 1 CD4-, CD8- CD14-/CD33-/CD64- (no axiom on any alt.), CD19-/CD20- (no axiom on any alt.), CD123-, CD45+, CD3+, TCRAB+/TCRGD- (no axiom on any alt.), TCRVA7.2+/TETRAMER+ (no axiom on any alt.), CD161+, TCRVA24-JA18+/TCRVA24+/TETRAMER+ (no axiom on any alt.), VB11+, HLA-DR+, CD11C+, CD15-/CD66B- (no axiom on any alt.), CD16- no +CD4-/CD8- Conv TCRab ConT TCRab Exact 3 CL:0000928 activated CD4-negative, CD8-negative type I NK T cell 9 1 CD4-, CD8- CD14-/CD33-/CD64- (no axiom on any alt.), CD19-/CD20- (no axiom on any alt.), CD123-, CD45+, CD3+, TCRAB+/TCRGD- (no axiom on any alt.), TCRVA7.2+/TETRAMER+ (no axiom on any alt.), CD161+, TCRVA24-JA18+/TCRVA24+/TETRAMER+ (no axiom on any alt.), VB11+, HLA-DR+, CD11C+, CD15-/CD66B- (no axiom on any alt.), CD16- no +Tcm Central memory alpha/beta and gamma/delta T cells T cell Exact 1 CL:0001057 myeloid dendritic cell, human 15 1 CD14- (1 of 3 alt.), CD19- (1 of 2 alt.), CD123-, CD11C+ (hi) HLA-DR+, CD15-/CD66B- (no axiom on any alt.), CD16- no +Tcm Central memory alpha/beta and gamma/delta T cells T cell Exact 2 CL:0002000 Kit-positive erythroid progenitor cell 13 1 CD14- (1 of 3 alt.), CD19- (1 of 2 alt.), CD123- HLA-DR+, CD11C+, CD15-/CD66B- (no axiom on any alt.), CD16- no +Tcm Central memory alpha/beta and gamma/delta T cells T cell Exact 3 CL:0000782 myeloid dendritic cell 11 1 CD19- (1 of 2 alt.), CD123-, CD11C+ (hi) CD14-/CD33-/CD64- (no axiom on any alt.), HLA-DR+, CD15-/CD66B- (no axiom on any alt.), CD16- no +CD4+ Tcm CD4+ central memory alpha/beta and gamma/delta T cells CD4+ T cell Exact 1 CL:0001057 myeloid dendritic cell, human 15 1 CD14- (1 of 3 alt.), CD19- (1 of 2 alt.), CD123-, CD11C+ (hi) HLA-DR+, CD15-/CD66B- (no axiom on any alt.), CD16- no +CD4+ Tcm CD4+ central memory alpha/beta and gamma/delta T cells CD4+ T cell Exact 2 CL:0002000 Kit-positive erythroid progenitor cell 13 1 CD14- (1 of 3 alt.), CD19- (1 of 2 alt.), CD123- HLA-DR+, CD11C+, CD15-/CD66B- (no axiom on any alt.), CD16- no +CD4+ Tcm CD4+ central memory alpha/beta and gamma/delta T cells CD4+ T cell Exact 3 CL:0000782 myeloid dendritic cell 11 1 CD19- (1 of 2 alt.), CD123-, CD11C+ (hi) CD14-/CD33-/CD64- (no axiom on any alt.), HLA-DR+, CD15-/CD66B- (no axiom on any alt.), CD16- no +CD4+ TCRab Tcm CD4+ central memory alpha/beta T cell CD4+ TCRab T cell Exact 1 CL:0001057 myeloid dendritic cell, human 15 1 CD14- (1 of 3 alt.), CD19- (1 of 2 alt.), CD123-, CD11C+ (hi) HLA-DR+, CD15-/CD66B- (no axiom on any alt.), CD16- no +CD4+ TCRab Tcm CD4+ central memory alpha/beta T cell CD4+ TCRab T cell Exact 2 CL:0002000 Kit-positive erythroid progenitor cell 13 1 CD14- (1 of 3 alt.), CD19- (1 of 2 alt.), CD123- HLA-DR+, CD11C+, CD15-/CD66B- (no axiom on any alt.), CD16- no +CD4+ TCRab Tcm CD4+ central memory alpha/beta T cell CD4+ TCRab T cell Exact 3 CL:0000782 myeloid dendritic cell 11 1 CD19- (1 of 2 alt.), CD123-, CD11C+ (hi) CD14-/CD33-/CD64- (no axiom on any alt.), HLA-DR+, CD15-/CD66B- (no axiom on any alt.), CD16- no +CD4+ TCRgd Tcm CD4+ central memory gamma/delta T cell CD4+ TCRgd T cell 1 CL:0001057 myeloid dendritic cell, human 15 1 CD14- (1 of 3 alt.), CD19- (1 of 2 alt.), CD123-, CD11C+ (hi) HLA-DR+, CD15-/CD66B- (no axiom on any alt.), CD16- no +CD4+ TCRgd Tcm CD4+ central memory gamma/delta T cell CD4+ TCRgd T cell 2 CL:0002000 Kit-positive erythroid progenitor cell 13 1 CD14- (1 of 3 alt.), CD19- (1 of 2 alt.), CD123- HLA-DR+, CD11C+, CD15-/CD66B- (no axiom on any alt.), CD16- no +CD4+ TCRgd Tcm CD4+ central memory gamma/delta T cell CD4+ TCRgd T cell 3 CL:0000782 myeloid dendritic cell 11 1 CD19- (1 of 2 alt.), CD123-, CD11C+ (hi) CD14-/CD33-/CD64- (no axiom on any alt.), HLA-DR+, CD15-/CD66B- (no axiom on any alt.), CD16- no +CD8+ Tcm CD8+ central memory T cell CD8+ T cell Exact 1 CL:0001057 myeloid dendritic cell, human 15 1 CD14- (1 of 3 alt.), CD19- (1 of 2 alt.), CD123-, CD11C+ (hi) HLA-DR+, CD15-/CD66B- (no axiom on any alt.), CD16- no +CD8+ Tcm CD8+ central memory T cell CD8+ T cell Exact 2 CL:0002000 Kit-positive erythroid progenitor cell 13 1 CD14- (1 of 3 alt.), CD19- (1 of 2 alt.), CD123- HLA-DR+, CD11C+, CD15-/CD66B- (no axiom on any alt.), CD16- no +CD8+ Tcm CD8+ central memory T cell CD8+ T cell Exact 3 CL:0000782 myeloid dendritic cell 11 1 CD19- (1 of 2 alt.), CD123-, CD11C+ (hi) CD14-/CD33-/CD64- (no axiom on any alt.), HLA-DR+, CD15-/CD66B- (no axiom on any alt.), CD16- no +CD8+ TCRab Tcm CD8+ central memory alpha/beta T cell CD8+ TCRab T cell Exact 1 CL:0001057 myeloid dendritic cell, human 15 1 CD14- (1 of 3 alt.), CD19- (1 of 2 alt.), CD123-, CD11C+ (hi) HLA-DR+, CD15-/CD66B- (no axiom on any alt.), CD16- no +CD8+ TCRab Tcm CD8+ central memory alpha/beta T cell CD8+ TCRab T cell Exact 2 CL:0002000 Kit-positive erythroid progenitor cell 13 1 CD14- (1 of 3 alt.), CD19- (1 of 2 alt.), CD123- HLA-DR+, CD11C+, CD15-/CD66B- (no axiom on any alt.), CD16- no +CD8+ TCRab Tcm CD8+ central memory alpha/beta T cell CD8+ TCRab T cell Exact 3 CL:0000782 myeloid dendritic cell 11 1 CD19- (1 of 2 alt.), CD123-, CD11C+ (hi) CD14-/CD33-/CD64- (no axiom on any alt.), HLA-DR+, CD15-/CD66B- (no axiom on any alt.), CD16- no +CD8+ TCRgd Tcm CD8+ central memory gamma/delta T cell CD8+ TCRgd T cell 1 CL:0001057 myeloid dendritic cell, human 15 1 CD14- (1 of 3 alt.), CD19- (1 of 2 alt.), CD123-, CD11C+ (hi) HLA-DR+, CD15-/CD66B- (no axiom on any alt.), CD16- no +CD8+ TCRgd Tcm CD8+ central memory gamma/delta T cell CD8+ TCRgd T cell 2 CL:0002000 Kit-positive erythroid progenitor cell 13 1 CD14- (1 of 3 alt.), CD19- (1 of 2 alt.), CD123- HLA-DR+, CD11C+, CD15-/CD66B- (no axiom on any alt.), CD16- no +CD8+ TCRgd Tcm CD8+ central memory gamma/delta T cell CD8+ TCRgd T cell 3 CL:0000782 myeloid dendritic cell 11 1 CD19- (1 of 2 alt.), CD123-, CD11C+ (hi) CD14-/CD33-/CD64- (no axiom on any alt.), HLA-DR+, CD15-/CD66B- (no axiom on any alt.), CD16- no +Tnaive Naive alpha/beta and gamma/delta T cell T cell Exact 1 CL:0001057 myeloid dendritic cell, human 15 1 CD14- (1 of 3 alt.), CD19- (1 of 2 alt.), CD123-, CD11C+ (hi) HLA-DR+, CD15-/CD66B- (no axiom on any alt.), CD16- no +Tnaive Naive alpha/beta and gamma/delta T cell T cell Exact 2 CL:0002000 Kit-positive erythroid progenitor cell 13 1 CD14- (1 of 3 alt.), CD19- (1 of 2 alt.), CD123- HLA-DR+, CD11C+, CD15-/CD66B- (no axiom on any alt.), CD16- no +Tnaive Naive alpha/beta and gamma/delta T cell T cell Exact 3 CL:0000782 myeloid dendritic cell 11 1 CD19- (1 of 2 alt.), CD123-, CD11C+ (hi) CD14-/CD33-/CD64- (no axiom on any alt.), HLA-DR+, CD15-/CD66B- (no axiom on any alt.), CD16- no +CD4+ Tnaive CD4+ Naive alpha/beta and gamma/delta T cell CD4+ T cell Exact 1 CL:0001057 myeloid dendritic cell, human 15 1 CD14- (1 of 3 alt.), CD19- (1 of 2 alt.), CD123-, CD11C+ (hi) HLA-DR+, CD15-/CD66B- (no axiom on any alt.), CD16- no +CD4+ Tnaive CD4+ Naive alpha/beta and gamma/delta T cell CD4+ T cell Exact 2 CL:0002000 Kit-positive erythroid progenitor cell 13 1 CD14- (1 of 3 alt.), CD19- (1 of 2 alt.), CD123- HLA-DR+, CD11C+, CD15-/CD66B- (no axiom on any alt.), CD16- no +CD4+ Tnaive CD4+ Naive alpha/beta and gamma/delta T cell CD4+ T cell Exact 3 CL:0000782 myeloid dendritic cell 11 1 CD19- (1 of 2 alt.), CD123-, CD11C+ (hi) CD14-/CD33-/CD64- (no axiom on any alt.), HLA-DR+, CD15-/CD66B- (no axiom on any alt.), CD16- no +CD4+ TCRab Tnaive CD4+ naive alpha/beta T cell CD4 TCRab T cell Exact 1 CL:0001057 myeloid dendritic cell, human 15 1 CD14- (1 of 3 alt.), CD19- (1 of 2 alt.), CD123-, CD11C+ (hi) HLA-DR+, CD15-/CD66B- (no axiom on any alt.), CD16- no +CD4+ TCRab Tnaive CD4+ naive alpha/beta T cell CD4 TCRab T cell Exact 2 CL:0002000 Kit-positive erythroid progenitor cell 13 1 CD14- (1 of 3 alt.), CD19- (1 of 2 alt.), CD123- HLA-DR+, CD11C+, CD15-/CD66B- (no axiom on any alt.), CD16- no +CD4+ TCRab Tnaive CD4+ naive alpha/beta T cell CD4 TCRab T cell Exact 3 CL:0000782 myeloid dendritic cell 11 1 CD19- (1 of 2 alt.), CD123-, CD11C+ (hi) CD14-/CD33-/CD64- (no axiom on any alt.), HLA-DR+, CD15-/CD66B- (no axiom on any alt.), CD16- no +CD4+ TCRgd Tnaive CD4+ naive gamma/delta T cell CD4+ TCRgd T cell 1 CL:0001057 myeloid dendritic cell, human 15 1 CD14- (1 of 3 alt.), CD19- (1 of 2 alt.), CD123-, CD11C+ (hi) HLA-DR+, CD15-/CD66B- (no axiom on any alt.), CD16- no +CD4+ TCRgd Tnaive CD4+ naive gamma/delta T cell CD4+ TCRgd T cell 2 CL:0002000 Kit-positive erythroid progenitor cell 13 1 CD14- (1 of 3 alt.), CD19- (1 of 2 alt.), CD123- HLA-DR+, CD11C+, CD15-/CD66B- (no axiom on any alt.), CD16- no +CD4+ TCRgd Tnaive CD4+ naive gamma/delta T cell CD4+ TCRgd T cell 3 CL:0000782 myeloid dendritic cell 11 1 CD19- (1 of 2 alt.), CD123-, CD11C+ (hi) CD14-/CD33-/CD64- (no axiom on any alt.), HLA-DR+, CD15-/CD66B- (no axiom on any alt.), CD16- no +CD8+ Tnaive CD8+ naive alpha/beta and gamma/delta T cell CD8+ T cell Exact 1 CL:0001057 myeloid dendritic cell, human 15 1 CD14- (1 of 3 alt.), CD19- (1 of 2 alt.), CD123-, CD11C+ (hi) HLA-DR+, CD15-/CD66B- (no axiom on any alt.), CD16- no +CD8+ Tnaive CD8+ naive alpha/beta and gamma/delta T cell CD8+ T cell Exact 2 CL:0002000 Kit-positive erythroid progenitor cell 13 1 CD14- (1 of 3 alt.), CD19- (1 of 2 alt.), CD123- HLA-DR+, CD11C+, CD15-/CD66B- (no axiom on any alt.), CD16- no +CD8+ Tnaive CD8+ naive alpha/beta and gamma/delta T cell CD8+ T cell Exact 3 CL:0000782 myeloid dendritic cell 11 1 CD19- (1 of 2 alt.), CD123-, CD11C+ (hi) CD14-/CD33-/CD64- (no axiom on any alt.), HLA-DR+, CD15-/CD66B- (no axiom on any alt.), CD16- no +CD8+ TCRab Tnaive CD8+ naive alpha/beta T cell CD8+ TCRab T cell Exact 1 CL:0001057 myeloid dendritic cell, human 15 1 CD14- (1 of 3 alt.), CD19- (1 of 2 alt.), CD123-, CD11C+ (hi) HLA-DR+, CD15-/CD66B- (no axiom on any alt.), CD16- no +CD8+ TCRab Tnaive CD8+ naive alpha/beta T cell CD8+ TCRab T cell Exact 2 CL:0002000 Kit-positive erythroid progenitor cell 13 1 CD14- (1 of 3 alt.), CD19- (1 of 2 alt.), CD123- HLA-DR+, CD11C+, CD15-/CD66B- (no axiom on any alt.), CD16- no +CD8+ TCRab Tnaive CD8+ naive alpha/beta T cell CD8+ TCRab T cell Exact 3 CL:0000782 myeloid dendritic cell 11 1 CD19- (1 of 2 alt.), CD123-, CD11C+ (hi) CD14-/CD33-/CD64- (no axiom on any alt.), HLA-DR+, CD15-/CD66B- (no axiom on any alt.), CD16- no +CD8+ TCRgd Tnaive CD8+ naive gamma/delta T cell CD8+ TCRgd T cell 1 CL:0001057 myeloid dendritic cell, human 15 1 CD14- (1 of 3 alt.), CD19- (1 of 2 alt.), CD123-, CD11C+ (hi) HLA-DR+, CD15-/CD66B- (no axiom on any alt.), CD16- no +CD8+ TCRgd Tnaive CD8+ naive gamma/delta T cell CD8+ TCRgd T cell 2 CL:0002000 Kit-positive erythroid progenitor cell 13 1 CD14- (1 of 3 alt.), CD19- (1 of 2 alt.), CD123- HLA-DR+, CD11C+, CD15-/CD66B- (no axiom on any alt.), CD16- no +CD8+ TCRgd Tnaive CD8+ naive gamma/delta T cell CD8+ TCRgd T cell 3 CL:0000782 myeloid dendritic cell 11 1 CD19- (1 of 2 alt.), CD123-, CD11C+ (hi) CD14-/CD33-/CD64- (no axiom on any alt.), HLA-DR+, CD15-/CD66B- (no axiom on any alt.), CD16- no +Tem Effector memory T cell T cell Exact 1 CL:0001057 myeloid dendritic cell, human 15 1 CD14- (1 of 3 alt.), CD19- (1 of 2 alt.), CD123-, CD11C+ (hi) HLA-DR+, CD15-/CD66B- (no axiom on any alt.), CD16- no +Tem Effector memory T cell T cell Exact 2 CL:0002000 Kit-positive erythroid progenitor cell 13 1 CD14- (1 of 3 alt.), CD19- (1 of 2 alt.), CD123- HLA-DR+, CD11C+, CD15-/CD66B- (no axiom on any alt.), CD16- no +Tem Effector memory T cell T cell Exact 3 CL:0001024 CD34-positive, CD38-negative hematopoietic stem cell 12 2 CD14- (1 of 3 alt.), CD19- (1 of 2 alt.), CD16- CD123-, HLA-DR+, CD11C+, CD15-/CD66B- (no axiom on any alt.) no +CD4+ Tem CD4+ effector memory alpha/beta and gamma/delta T cells CD4+ T cell Exact 1 CL:0001057 myeloid dendritic cell, human 15 1 CD14- (1 of 3 alt.), CD19- (1 of 2 alt.), CD123-, CD11C+ (hi) HLA-DR+, CD15-/CD66B- (no axiom on any alt.), CD16- no +CD4+ Tem CD4+ effector memory alpha/beta and gamma/delta T cells CD4+ T cell Exact 2 CL:0002000 Kit-positive erythroid progenitor cell 13 1 CD14- (1 of 3 alt.), CD19- (1 of 2 alt.), CD123- HLA-DR+, CD11C+, CD15-/CD66B- (no axiom on any alt.), CD16- no +CD4+ Tem CD4+ effector memory alpha/beta and gamma/delta T cells CD4+ T cell Exact 3 CL:0001024 CD34-positive, CD38-negative hematopoietic stem cell 12 2 CD14- (1 of 3 alt.), CD19- (1 of 2 alt.), CD16- CD123-, HLA-DR+, CD11C+, CD15-/CD66B- (no axiom on any alt.) no +CD4+ TCRab Tem CD4+ effector memory alpha/beta T cell CD4+ TCRab T cell Exact 1 CL:0001057 myeloid dendritic cell, human 15 1 CD14- (1 of 3 alt.), CD19- (1 of 2 alt.), CD123-, CD11C+ (hi) HLA-DR+, CD15-/CD66B- (no axiom on any alt.), CD16- no +CD4+ TCRab Tem CD4+ effector memory alpha/beta T cell CD4+ TCRab T cell Exact 2 CL:0002000 Kit-positive erythroid progenitor cell 13 1 CD14- (1 of 3 alt.), CD19- (1 of 2 alt.), CD123- HLA-DR+, CD11C+, CD15-/CD66B- (no axiom on any alt.), CD16- no +CD4+ TCRab Tem CD4+ effector memory alpha/beta T cell CD4+ TCRab T cell Exact 3 CL:0001024 CD34-positive, CD38-negative hematopoietic stem cell 12 2 CD14- (1 of 3 alt.), CD19- (1 of 2 alt.), CD16- CD123-, HLA-DR+, CD11C+, CD15-/CD66B- (no axiom on any alt.) no +CD4+ TCRgd Tem CD4+ effector memory gamma/delta T cell CD4+ TCRgd T cell 1 CL:0001057 myeloid dendritic cell, human 15 1 CD14- (1 of 3 alt.), CD19- (1 of 2 alt.), CD123-, CD11C+ (hi) HLA-DR+, CD15-/CD66B- (no axiom on any alt.), CD16- no +CD4+ TCRgd Tem CD4+ effector memory gamma/delta T cell CD4+ TCRgd T cell 2 CL:0002000 Kit-positive erythroid progenitor cell 13 1 CD14- (1 of 3 alt.), CD19- (1 of 2 alt.), CD123- HLA-DR+, CD11C+, CD15-/CD66B- (no axiom on any alt.), CD16- no +CD4+ TCRgd Tem CD4+ effector memory gamma/delta T cell CD4+ TCRgd T cell 3 CL:0001024 CD34-positive, CD38-negative hematopoietic stem cell 12 2 CD14- (1 of 3 alt.), CD19- (1 of 2 alt.), CD16- CD123-, HLA-DR+, CD11C+, CD15-/CD66B- (no axiom on any alt.) no +CD8+ Tem CD8+ effector memory T cell CD8+ T cell Exact 1 CL:0001057 myeloid dendritic cell, human 15 1 CD14- (1 of 3 alt.), CD19- (1 of 2 alt.), CD123-, CD11C+ (hi) HLA-DR+, CD15-/CD66B- (no axiom on any alt.), CD16- no +CD8+ Tem CD8+ effector memory T cell CD8+ T cell Exact 2 CL:0002000 Kit-positive erythroid progenitor cell 13 1 CD14- (1 of 3 alt.), CD19- (1 of 2 alt.), CD123- HLA-DR+, CD11C+, CD15-/CD66B- (no axiom on any alt.), CD16- no +CD8+ Tem CD8+ effector memory T cell CD8+ T cell Exact 3 CL:0001024 CD34-positive, CD38-negative hematopoietic stem cell 12 2 CD14- (1 of 3 alt.), CD19- (1 of 2 alt.), CD16- CD123-, HLA-DR+, CD11C+, CD15-/CD66B- (no axiom on any alt.) no +CD8+ TCRab Tem CD8+ effector memory alpha/beta T cell CD8+ TCRab T cell Exact 1 CL:0001057 myeloid dendritic cell, human 15 1 CD14- (1 of 3 alt.), CD19- (1 of 2 alt.), CD123-, CD11C+ (hi) HLA-DR+, CD15-/CD66B- (no axiom on any alt.), CD16- no +CD8+ TCRab Tem CD8+ effector memory alpha/beta T cell CD8+ TCRab T cell Exact 2 CL:0002000 Kit-positive erythroid progenitor cell 13 1 CD14- (1 of 3 alt.), CD19- (1 of 2 alt.), CD123- HLA-DR+, CD11C+, CD15-/CD66B- (no axiom on any alt.), CD16- no +CD8+ TCRab Tem CD8+ effector memory alpha/beta T cell CD8+ TCRab T cell Exact 3 CL:0001024 CD34-positive, CD38-negative hematopoietic stem cell 12 2 CD14- (1 of 3 alt.), CD19- (1 of 2 alt.), CD16- CD123-, HLA-DR+, CD11C+, CD15-/CD66B- (no axiom on any alt.) no +CD8+ TCRgd Tem CD8+ effector memory gamma/delta T cell CD8+ TCRgd T cell 1 CL:0001057 myeloid dendritic cell, human 15 1 CD14- (1 of 3 alt.), CD19- (1 of 2 alt.), CD123-, CD11C+ (hi) HLA-DR+, CD15-/CD66B- (no axiom on any alt.), CD16- no +CD8+ TCRgd Tem CD8+ effector memory gamma/delta T cell CD8+ TCRgd T cell 2 CL:0002000 Kit-positive erythroid progenitor cell 13 1 CD14- (1 of 3 alt.), CD19- (1 of 2 alt.), CD123- HLA-DR+, CD11C+, CD15-/CD66B- (no axiom on any alt.), CD16- no +CD8+ TCRgd Tem CD8+ effector memory gamma/delta T cell CD8+ TCRgd T cell 3 CL:0001024 CD34-positive, CD38-negative hematopoietic stem cell 12 2 CD14- (1 of 3 alt.), CD19- (1 of 2 alt.), CD16- CD123-, HLA-DR+, CD11C+, CD15-/CD66B- (no axiom on any alt.) no +Temra CD45RA+ effector memory alpha/beta and gamma/delta T cell T cell Exact 1 CL:0001057 myeloid dendritic cell, human 15 1 CD14- (1 of 3 alt.), CD19- (1 of 2 alt.), CD123-, CD11C+ (hi) HLA-DR+, CD15-/CD66B- (no axiom on any alt.), CD16- no +Temra CD45RA+ effector memory alpha/beta and gamma/delta T cell T cell Exact 2 CL:0002000 Kit-positive erythroid progenitor cell 13 1 CD14- (1 of 3 alt.), CD19- (1 of 2 alt.), CD123- HLA-DR+, CD11C+, CD15-/CD66B- (no axiom on any alt.), CD16- no +Temra CD45RA+ effector memory alpha/beta and gamma/delta T cell T cell Exact 3 CL:0000782 myeloid dendritic cell 11 1 CD19- (1 of 2 alt.), CD123-, CD11C+ (hi) CD14-/CD33-/CD64- (no axiom on any alt.), HLA-DR+, CD15-/CD66B- (no axiom on any alt.), CD16- no +CD4+ Temra CD4+ CD45RA+ effector memory alpha/beta and gamma/delta T cell CD4+ T cell Exact 1 CL:0001057 myeloid dendritic cell, human 15 1 CD14- (1 of 3 alt.), CD19- (1 of 2 alt.), CD123-, CD11C+ (hi) HLA-DR+, CD15-/CD66B- (no axiom on any alt.), CD16- no +CD4+ Temra CD4+ CD45RA+ effector memory alpha/beta and gamma/delta T cell CD4+ T cell Exact 2 CL:0002000 Kit-positive erythroid progenitor cell 13 1 CD14- (1 of 3 alt.), CD19- (1 of 2 alt.), CD123- HLA-DR+, CD11C+, CD15-/CD66B- (no axiom on any alt.), CD16- no +CD4+ Temra CD4+ CD45RA+ effector memory alpha/beta and gamma/delta T cell CD4+ T cell Exact 3 CL:0000782 myeloid dendritic cell 11 1 CD19- (1 of 2 alt.), CD123-, CD11C+ (hi) CD14-/CD33-/CD64- (no axiom on any alt.), HLA-DR+, CD15-/CD66B- (no axiom on any alt.), CD16- no +CD4+ TCRab Temra CD4+ CD45RA+ effector memory alpha/beta T cell CD4 TCRab T cell Exact 1 CL:0001057 myeloid dendritic cell, human 15 1 CD14- (1 of 3 alt.), CD19- (1 of 2 alt.), CD123-, CD11C+ (hi) HLA-DR+, CD15-/CD66B- (no axiom on any alt.), CD16- no +CD4+ TCRab Temra CD4+ CD45RA+ effector memory alpha/beta T cell CD4 TCRab T cell Exact 2 CL:0002000 Kit-positive erythroid progenitor cell 13 1 CD14- (1 of 3 alt.), CD19- (1 of 2 alt.), CD123- HLA-DR+, CD11C+, CD15-/CD66B- (no axiom on any alt.), CD16- no +CD4+ TCRab Temra CD4+ CD45RA+ effector memory alpha/beta T cell CD4 TCRab T cell Exact 3 CL:0000782 myeloid dendritic cell 11 1 CD19- (1 of 2 alt.), CD123-, CD11C+ (hi) CD14-/CD33-/CD64- (no axiom on any alt.), HLA-DR+, CD15-/CD66B- (no axiom on any alt.), CD16- no +CD4+ TCRgd Temra CD4+ CD45RA+ effector memory gamma/delta T cell CD4+ TCRgd T cell 1 CL:0001057 myeloid dendritic cell, human 15 1 CD14- (1 of 3 alt.), CD19- (1 of 2 alt.), CD123-, CD11C+ (hi) HLA-DR+, CD15-/CD66B- (no axiom on any alt.), CD16- no +CD4+ TCRgd Temra CD4+ CD45RA+ effector memory gamma/delta T cell CD4+ TCRgd T cell 2 CL:0002000 Kit-positive erythroid progenitor cell 13 1 CD14- (1 of 3 alt.), CD19- (1 of 2 alt.), CD123- HLA-DR+, CD11C+, CD15-/CD66B- (no axiom on any alt.), CD16- no +CD4+ TCRgd Temra CD4+ CD45RA+ effector memory gamma/delta T cell CD4+ TCRgd T cell 3 CL:0000782 myeloid dendritic cell 11 1 CD19- (1 of 2 alt.), CD123-, CD11C+ (hi) CD14-/CD33-/CD64- (no axiom on any alt.), HLA-DR+, CD15-/CD66B- (no axiom on any alt.), CD16- no +CD8+ Temra CD8+ CD45RA+ effector memory alpha/beta and gamma/delta T cell CD8+ T cell Exact 1 CL:0001057 myeloid dendritic cell, human 15 1 CD14- (1 of 3 alt.), CD19- (1 of 2 alt.), CD123-, CD11C+ (hi) HLA-DR+, CD15-/CD66B- (no axiom on any alt.), CD16- no +CD8+ Temra CD8+ CD45RA+ effector memory alpha/beta and gamma/delta T cell CD8+ T cell Exact 2 CL:0002000 Kit-positive erythroid progenitor cell 13 1 CD14- (1 of 3 alt.), CD19- (1 of 2 alt.), CD123- HLA-DR+, CD11C+, CD15-/CD66B- (no axiom on any alt.), CD16- no +CD8+ Temra CD8+ CD45RA+ effector memory alpha/beta and gamma/delta T cell CD8+ T cell Exact 3 CL:0000782 myeloid dendritic cell 11 1 CD19- (1 of 2 alt.), CD123-, CD11C+ (hi) CD14-/CD33-/CD64- (no axiom on any alt.), HLA-DR+, CD15-/CD66B- (no axiom on any alt.), CD16- no +CD8+ TCRab Temra CD8+ CD45RA+ effector memory alpha/beta T cell CD8+ TCRab T cell Exact 1 CL:0001057 myeloid dendritic cell, human 15 1 CD14- (1 of 3 alt.), CD19- (1 of 2 alt.), CD123-, CD11C+ (hi) HLA-DR+, CD15-/CD66B- (no axiom on any alt.), CD16- no +CD8+ TCRab Temra CD8+ CD45RA+ effector memory alpha/beta T cell CD8+ TCRab T cell Exact 2 CL:0002000 Kit-positive erythroid progenitor cell 13 1 CD14- (1 of 3 alt.), CD19- (1 of 2 alt.), CD123- HLA-DR+, CD11C+, CD15-/CD66B- (no axiom on any alt.), CD16- no +CD8+ TCRab Temra CD8+ CD45RA+ effector memory alpha/beta T cell CD8+ TCRab T cell Exact 3 CL:0000782 myeloid dendritic cell 11 1 CD19- (1 of 2 alt.), CD123-, CD11C+ (hi) CD14-/CD33-/CD64- (no axiom on any alt.), HLA-DR+, CD15-/CD66B- (no axiom on any alt.), CD16- no +T helper TCRab 1 CL:0002468 Gr1-low myeloid suppressor cell 6 0 CD45+, CD11C+ CD14-/CD33-/CD64- (no axiom on any alt.), CD19-/CD20- (no axiom on any alt.), CD123-, CD3+, TCRAB+/TCRGD- (no axiom on any alt.), HLA-DR+, CD15-/CD66B- (no axiom on any alt.), CD16- no +T helper TCRab 2 CL:0002477 adipose macrophage 6 0 CD45+, CD11C+ CD14-/CD33-/CD64- (no axiom on any alt.), CD19-/CD20- (no axiom on any alt.), CD123-, CD3+, TCRAB+/TCRGD- (no axiom on any alt.), HLA-DR+, CD15-/CD66B- (no axiom on any alt.), CD16- no +T helper TCRab 3 CL:0002478 F4/80-negative adipose macrophage 6 0 CD45+, CD11C+ CD14-/CD33-/CD64- (no axiom on any alt.), CD19-/CD20- (no axiom on any alt.), CD123-, CD3+, TCRAB+/TCRGD- (no axiom on any alt.), HLA-DR+, CD15-/CD66B- (no axiom on any alt.), CD16- no +T cytotoxic TCRab 1 CL:0001057 myeloid dendritic cell, human 14 0 CD14- (1 of 3 alt.), CD19- (1 of 2 alt.), CD123-, CD11C+ (hi) HLA-DR+, CD15-/CD66B- (no axiom on any alt.), CD16- no +T cytotoxic TCRab 2 CL:0002000 Kit-positive erythroid progenitor cell 12 0 CD14- (1 of 3 alt.), CD19- (1 of 2 alt.), CD123- HLA-DR+, CD11C+, CD15-/CD66B- (no axiom on any alt.), CD16- no +T cytotoxic TCRab 3 CL:0000782 myeloid dendritic cell 10 0 CD19- (1 of 2 alt.), CD123-, CD11C+ (hi) CD14-/CD33-/CD64- (no axiom on any alt.), HLA-DR+, CD15-/CD66B- (no axiom on any alt.), CD16- no +ConT Treg-like CD4 ConT 1 CL:0000896 activated CD4-positive, alpha-beta T cell 13 1 CD4+, CD25+, CD127- CD14-/CD33-/CD64- (no axiom on any alt.), CD19-/CD20- (no axiom on any alt.), CD123-, CD45+, CD3+, TCRAB+/TCRGD- (no axiom on any alt.), TCRVA24-JA18+/TCRVA24+/TETRAMER+ (no axiom on any alt.), TCRVB11+, TCRVA7.2+/TETRAMER+ (no axiom on any alt.), CD161+, HLA-DR+, CD11C+, CD15-/CD66B- (no axiom on any alt.), CD16- no +ConT Treg-like CD4 ConT 2 CL:0001043 activated CD4-positive, alpha-beta T cell, human 13 1 CD4+, CD25+, CD127- CD14-/CD33-/CD64- (no axiom on any alt.), CD19-/CD20- (no axiom on any alt.), CD123-, CD45+, CD3+, TCRAB+/TCRGD- (no axiom on any alt.), TCRVA24-JA18+/TCRVA24+/TETRAMER+ (no axiom on any alt.), TCRVB11+, TCRVA7.2+/TETRAMER+ (no axiom on any alt.), CD161+, HLA-DR+, CD11C+, CD15-/CD66B- (no axiom on any alt.), CD16- no +ConT Treg-like CD4 ConT 3 CL:0001044 effector CD4-positive, alpha-beta T cell 9 1 CD45+, CD4+ CD14-/CD33-/CD64- (no axiom on any alt.), CD19-/CD20- (no axiom on any alt.), CD123-, CD3+, TCRAB+/TCRGD- (no axiom on any alt.), TCRVA24-JA18+/TCRVA24+/TETRAMER+ (no axiom on any alt.), TCRVB11+, TCRVA7.2+/TETRAMER+ (no axiom on any alt.), CD161+, CD25+, CD127-, HLA-DR+, CD11C+, CD15-/CD66B- (no axiom on any alt.), CD16- no +ConT Tfh-like CD4 ConT 1 CL:0000896 activated CD4-positive, alpha-beta T cell 13 1 CD4+, CD25+, CD127- CD14-/CD33-/CD64- (no axiom on any alt.), CD19-/CD20- (no axiom on any alt.), CD123-, CD45+, CD3+, TCRAB+/TCRGD- (no axiom on any alt.), TCRVA24-JA18+/TCRVA24+/TETRAMER+ (no axiom on any alt.), TCRVB11+, TCRVA7.2+/TETRAMER+ (no axiom on any alt.), CD161+, CD185+, HLA-DR+, CD11C+, CD15-/CD66B- (no axiom on any alt.), CD16- no +ConT Tfh-like CD4 ConT 2 CL:0001043 activated CD4-positive, alpha-beta T cell, human 13 1 CD4+, CD25+, CD127- CD14-/CD33-/CD64- (no axiom on any alt.), CD19-/CD20- (no axiom on any alt.), CD123-, CD45+, CD3+, TCRAB+/TCRGD- (no axiom on any alt.), TCRVA24-JA18+/TCRVA24+/TETRAMER+ (no axiom on any alt.), TCRVB11+, TCRVA7.2+/TETRAMER+ (no axiom on any alt.), CD161+, CD185+, HLA-DR+, CD11C+, CD15-/CD66B- (no axiom on any alt.), CD16- no +ConT Tfh-like CD4 ConT 3 CL:0001044 effector CD4-positive, alpha-beta T cell 9 1 CD45+, CD4+ CD14-/CD33-/CD64- (no axiom on any alt.), CD19-/CD20- (no axiom on any alt.), CD123-, CD3+, TCRAB+/TCRGD- (no axiom on any alt.), TCRVA24-JA18+/TCRVA24+/TETRAMER+ (no axiom on any alt.), TCRVB11+, TCRVA7.2+/TETRAMER+ (no axiom on any alt.), CD161+, CD25+, CD127-, CD185+, HLA-DR+, CD11C+, CD15-/CD66B- (no axiom on any alt.), CD16- no +Th1-like CD4 ConT 1 CL:0000896 activated CD4-positive, alpha-beta T cell 13 1 CD4+, CD25+, CD127- CD14-/CD33-/CD64- (no axiom on any alt.), CD19-/CD20- (no axiom on any alt.), CD123-, CD45+, CD3+, TCRAB+/TCRGD- (no axiom on any alt.), TCRVA24-JA18+/TCRVA24+/TETRAMER+ (no axiom on any alt.), TCRVB11+, TCRVA7.2+/TETRAMER+ (no axiom on any alt.), CD161+, CD185-, CD183+, CD196-, CD194-, HLA-DR+, CD11C+, CD15-/CD66B- (no axiom on any alt.), CD16- no +Th1-like CD4 ConT 2 CL:0001043 activated CD4-positive, alpha-beta T cell, human 13 1 CD4+, CD25+, CD127- CD14-/CD33-/CD64- (no axiom on any alt.), CD19-/CD20- (no axiom on any alt.), CD123-, CD45+, CD3+, TCRAB+/TCRGD- (no axiom on any alt.), TCRVA24-JA18+/TCRVA24+/TETRAMER+ (no axiom on any alt.), TCRVB11+, TCRVA7.2+/TETRAMER+ (no axiom on any alt.), CD161+, CD185-, CD183+, CD196-, CD194-, HLA-DR+, CD11C+, CD15-/CD66B- (no axiom on any alt.), CD16- no +Th1-like CD4 ConT 3 CL:0000545 T-helper 1 cell 12 0 CD4+, CD183+, CD196- CD14-/CD33-/CD64- (no axiom on any alt.), CD19-/CD20- (no axiom on any alt.), CD123-, CD45+, CD3+, TCRAB+/TCRGD- (no axiom on any alt.), TCRVA24-JA18+/TCRVA24+/TETRAMER+ (no axiom on any alt.), TCRVB11+, TCRVA7.2+/TETRAMER+ (no axiom on any alt.), CD161+, CD25+, CD127-, CD185-, CD194-, HLA-DR+, CD11C+, CD15-/CD66B- (no axiom on any alt.), CD16- no +Th2-like CD4 ConT 1 CL:0000896 activated CD4-positive, alpha-beta T cell 13 1 CD4+, CD25+, CD127- CD14-/CD33-/CD64- (no axiom on any alt.), CD19-/CD20- (no axiom on any alt.), CD123-, CD45+, CD3+, TCRAB+/TCRGD- (no axiom on any alt.), TCRVA24-JA18+/TCRVA24+/TETRAMER+ (no axiom on any alt.), TCRVB11+, TCRVA7.2+/TETRAMER+ (no axiom on any alt.), CD161+, CD185-, CD183-, CD196-, CD194+, CD294+, HLA-DR+, CD11C+, CD15-/CD66B- (no axiom on any alt.), CD16-, CD294+, IL-4+/IL-5+/IL-13+ (no axiom on any alt.) no +Th2-like CD4 ConT 2 CL:0001043 activated CD4-positive, alpha-beta T cell, human 13 1 CD4+, CD25+, CD127- CD14-/CD33-/CD64- (no axiom on any alt.), CD19-/CD20- (no axiom on any alt.), CD123-, CD45+, CD3+, TCRAB+/TCRGD- (no axiom on any alt.), TCRVA24-JA18+/TCRVA24+/TETRAMER+ (no axiom on any alt.), TCRVB11+, TCRVA7.2+/TETRAMER+ (no axiom on any alt.), CD161+, CD185-, CD183-, CD196-, CD194+, CD294+, HLA-DR+, CD11C+, CD15-/CD66B- (no axiom on any alt.), CD16-, CD294+, IL-4+/IL-5+/IL-13+ (no axiom on any alt.) no +Th2-like CD4 ConT 3 CL:0001051 CD4-positive, CXCR3-negative, CCR6-negative, alpha-beta T cell 13 1 CD4+, CD183-, CD196- CD14-/CD33-/CD64- (no axiom on any alt.), CD19-/CD20- (no axiom on any alt.), CD123-, CD45+, CD3+, TCRAB+/TCRGD- (no axiom on any alt.), TCRVA24-JA18+/TCRVA24+/TETRAMER+ (no axiom on any alt.), TCRVB11+, TCRVA7.2+/TETRAMER+ (no axiom on any alt.), CD161+, CD25+, CD127-, CD185-, CD194+, CD294+, HLA-DR+, CD11C+, CD15-/CD66B- (no axiom on any alt.), CD16-, CD294+, IL-4+/IL-5+/IL-13+ (no axiom on any alt.) no +Th9-like 1 CL:0000546 T-helper 2 cell 12 0 CD4+, CD183-, CD196- CD14-/CD33-/CD64- (no axiom on any alt.), CD19-/CD20- (no axiom on any alt.), CD123-, CD45+, CD3+, TCRAB+/TCRGD- (no axiom on any alt.), TCRVA24-JA18+/TCRVA24+/TETRAMER+ (no axiom on any alt.), TCRVB11+, TCRVA7.2+/TETRAMER+ (no axiom on any alt.), CD161+, CD25+, CD127-, CD185-, CD194+, HLA-DR+, CD11C+, CD15-/CD66B- (no axiom on any alt.), CD16-, CD198+, IL-9+ no +Th9-like 2 CL:0000896 activated CD4-positive, alpha-beta T cell 12 0 CD4+, CD25+, CD127- CD14-/CD33-/CD64- (no axiom on any alt.), CD19-/CD20- (no axiom on any alt.), CD123-, CD45+, CD3+, TCRAB+/TCRGD- (no axiom on any alt.), TCRVA24-JA18+/TCRVA24+/TETRAMER+ (no axiom on any alt.), TCRVB11+, TCRVA7.2+/TETRAMER+ (no axiom on any alt.), CD161+, CD185-, CD183-, CD196-, CD194+, HLA-DR+, CD11C+, CD15-/CD66B- (no axiom on any alt.), CD16-, CD198+, IL-9+ no +Th9-like 3 CL:0001043 activated CD4-positive, alpha-beta T cell, human 12 0 CD4+, CD25+, CD127- CD14-/CD33-/CD64- (no axiom on any alt.), CD19-/CD20- (no axiom on any alt.), CD123-, CD45+, CD3+, TCRAB+/TCRGD- (no axiom on any alt.), TCRVA24-JA18+/TCRVA24+/TETRAMER+ (no axiom on any alt.), TCRVB11+, TCRVA7.2+/TETRAMER+ (no axiom on any alt.), CD161+, CD185-, CD183-, CD196-, CD194+, HLA-DR+, CD11C+, CD15-/CD66B- (no axiom on any alt.), CD16-, CD198+, IL-9+ no +Th17-like CD4 ConT 1 CL:0000896 activated CD4-positive, alpha-beta T cell 13 1 CD4+, CD25+, CD127- CD14-/CD33-/CD64- (no axiom on any alt.), CD19-/CD20- (no axiom on any alt.), CD123-, CD45+, CD3+, TCRAB+/TCRGD- (no axiom on any alt.), TCRVA24-JA18+/TCRVA24+/TETRAMER+ (no axiom on any alt.), TCRVB11+, TCRVA7.2+/TETRAMER+ (no axiom on any alt.), CD161+, CD185-, CD183-, CD196+, CD194+, HLA-DR+, CD11C+, CD15-/CD66B- (no axiom on any alt.), CD16-, CD161+, IL-17A+ no +Th17-like CD4 ConT 2 CL:0001043 activated CD4-positive, alpha-beta T cell, human 13 1 CD4+, CD25+, CD127- CD14-/CD33-/CD64- (no axiom on any alt.), CD19-/CD20- (no axiom on any alt.), CD123-, CD45+, CD3+, TCRAB+/TCRGD- (no axiom on any alt.), TCRVA24-JA18+/TCRVA24+/TETRAMER+ (no axiom on any alt.), TCRVB11+, TCRVA7.2+/TETRAMER+ (no axiom on any alt.), CD161+, CD185-, CD183-, CD196+, CD194+, HLA-DR+, CD11C+, CD15-/CD66B- (no axiom on any alt.), CD16-, CD161+, IL-17A+ no +Th17-like CD4 ConT 3 CL:0000899 T-helper 17 cell 12 0 CD4+, CD183-, CD196+ CD14-/CD33-/CD64- (no axiom on any alt.), CD19-/CD20- (no axiom on any alt.), CD123-, CD45+, CD3+, TCRAB+/TCRGD- (no axiom on any alt.), TCRVA24-JA18+/TCRVA24+/TETRAMER+ (no axiom on any alt.), TCRVB11+, TCRVA7.2+/TETRAMER+ (no axiom on any alt.), CD161+, CD25+, CD127-, CD185-, CD194+, HLA-DR+, CD11C+, CD15-/CD66B- (no axiom on any alt.), CD16-, CD161+, IL-17A+ no +CD4 PanT helper CD4/CD8 PanT 1 CL:0000895 naive thymus-derived CD4-positive, alpha-beta T cell 13 1 CD45+, CD4+, CD8- CD14-/CD33-/CD64- (no axiom on any alt.), CD19-/CD20- (no axiom on any alt.), CD123-, CD3+, HLA-DR+, CD11C+, CD15-/CD66B- (no axiom on any alt.), CD16- no +CD4 PanT helper CD4/CD8 PanT 2 CL:0000904 central memory CD4-positive, alpha-beta T cell 13 1 CD45+, CD4+, CD8- CD14-/CD33-/CD64- (no axiom on any alt.), CD19-/CD20- (no axiom on any alt.), CD123-, CD3+, HLA-DR+, CD11C+, CD15-/CD66B- (no axiom on any alt.), CD16- no +CD4 PanT helper CD4/CD8 PanT 3 CL:0000905 effector memory CD4-positive, alpha-beta T cell 13 1 CD45+, CD4+, CD8- CD14-/CD33-/CD64- (no axiom on any alt.), CD19-/CD20- (no axiom on any alt.), CD123-, CD3+, HLA-DR+, CD11C+, CD15-/CD66B- (no axiom on any alt.), CD16- no +Th1-like Surface Only 1 CL:0000545 T-helper 1 cell 16 0 CD4+, CD8-, CD183+, CD196- CD14-/CD33-/CD64- (no axiom on any alt.), CD19-/CD20- (no axiom on any alt.), CD123-, CD45+, CD3+, CD185-, CD194-, HLA-DR+, CD11C+, CD15-/CD66B- (no axiom on any alt.), CD16-, IFNG+, IL-4-, IL-5-, IL-13- no +Th1-like Surface Only 2 CL:0000895 naive thymus-derived CD4-positive, alpha-beta T cell 12 0 CD45+, CD4+, CD8- CD14-/CD33-/CD64- (no axiom on any alt.), CD19-/CD20- (no axiom on any alt.), CD123-, CD3+, CD183+, CD185-, CD194-, CD196-, HLA-DR+, CD11C+, CD15-/CD66B- (no axiom on any alt.), CD16-, IFNG+, IL-4-, IL-5-, IL-13- no +Th1-like Surface Only 3 CL:0000904 central memory CD4-positive, alpha-beta T cell 12 0 CD45+, CD4+, CD8- CD14-/CD33-/CD64- (no axiom on any alt.), CD19-/CD20- (no axiom on any alt.), CD123-, CD3+, CD183+, CD185-, CD194-, CD196-, HLA-DR+, CD11C+, CD15-/CD66B- (no axiom on any alt.), CD16-, IFNG+, IL-4-, IL-5-, IL-13- no +Th2-like 1 CL:0000546 T-helper 2 cell 16 0 CD4+, CD8-, CD183-, CD196- CD14-/CD33-/CD64- (no axiom on any alt.), CD19-/CD20- (no axiom on any alt.), CD123-, CD45+, CD3+, CD185-, CD194+, HLA-DR+, CD11C+, CD15-/CD66B- (no axiom on any alt.), CD16-, CD294+, IL-4+/IL-5+/IL-13+ (no axiom on any alt.) no +Th2-like 2 CL:0001045 naive CCR4-positive regulatory T cell 16 0 CD45+, CD4+, CD8-, CD194+ CD14-/CD33-/CD64- (no axiom on any alt.), CD19-/CD20- (no axiom on any alt.), CD123-, CD3+, CD183-, CD185-, CD196-, HLA-DR+, CD11C+, CD15-/CD66B- (no axiom on any alt.), CD16-, CD294+, IL-4+/IL-5+/IL-13+ (no axiom on any alt.) no +Th2-like 3 CL:0001046 memory CCR4-positive regulatory T cell 16 0 CD45+, CD4+, CD8-, CD194+ CD14-/CD33-/CD64- (no axiom on any alt.), CD19-/CD20- (no axiom on any alt.), CD123-, CD3+, CD183-, CD185-, CD196-, HLA-DR+, CD11C+, CD15-/CD66B- (no axiom on any alt.), CD16-, CD294+, IL-4+/IL-5+/IL-13+ (no axiom on any alt.) no +Th9-like 1 CL:0000546 T-helper 2 cell 16 0 CD4+, CD8-, CD183-, CD196- CD14-/CD33-/CD64- (no axiom on any alt.), CD19-/CD20- (no axiom on any alt.), CD123-, CD45+, CD3+, CD185-, CD194+, HLA-DR+, CD11C+, CD15-/CD66B- (no axiom on any alt.), CD16-, CD198+, IL-9+ no +Th9-like 2 CL:0001045 naive CCR4-positive regulatory T cell 16 0 CD45+, CD4+, CD8-, CD194+ CD14-/CD33-/CD64- (no axiom on any alt.), CD19-/CD20- (no axiom on any alt.), CD123-, CD3+, CD183-, CD185-, CD196-, HLA-DR+, CD11C+, CD15-/CD66B- (no axiom on any alt.), CD16-, CD198+, IL-9+ no +Th9-like 3 CL:0001046 memory CCR4-positive regulatory T cell 16 0 CD45+, CD4+, CD8-, CD194+ CD14-/CD33-/CD64- (no axiom on any alt.), CD19-/CD20- (no axiom on any alt.), CD123-, CD3+, CD183-, CD185-, CD196-, HLA-DR+, CD11C+, CD15-/CD66B- (no axiom on any alt.), CD16-, CD198+, IL-9+ no +Th17-like 1 CL:0000899 T-helper 17 cell 16 0 CD4+, CD8-, CD183-, CD196+ CD14-/CD33-/CD64- (no axiom on any alt.), CD19-/CD20- (no axiom on any alt.), CD123-, CD45+, CD3+, CD185-, CD194+, HLA-DR+, CD11C+, CD15-/CD66B- (no axiom on any alt.), CD16-, IL-17A+ no +Th17-like 2 CL:0001045 naive CCR4-positive regulatory T cell 16 0 CD45+, CD4+, CD8-, CD194+ CD14-/CD33-/CD64- (no axiom on any alt.), CD19-/CD20- (no axiom on any alt.), CD123-, CD3+, CD183-, CD185-, CD196+, HLA-DR+, CD11C+, CD15-/CD66B- (no axiom on any alt.), CD16-, IL-17A+ no +Th17-like 3 CL:0001046 memory CCR4-positive regulatory T cell 16 0 CD45+, CD4+, CD8-, CD194+ CD14-/CD33-/CD64- (no axiom on any alt.), CD19-/CD20- (no axiom on any alt.), CD123-, CD3+, CD183-, CD185-, CD196+, HLA-DR+, CD11C+, CD15-/CD66B- (no axiom on any alt.), CD16-, IL-17A+ no +Tfh 1 CL:0001057 myeloid dendritic cell, human 14 0 CD14- (1 of 3 alt.), CD19- (1 of 2 alt.), CD123-, CD11C+ (hi) HLA-DR+, CD15-/CD66B- (no axiom on any alt.), CD16- no +Tfh 2 CL:0002000 Kit-positive erythroid progenitor cell 12 0 CD14- (1 of 3 alt.), CD19- (1 of 2 alt.), CD123- HLA-DR+, CD11C+, CD15-/CD66B- (no axiom on any alt.), CD16- no +Tfh 3 CL:0000782 myeloid dendritic cell 10 0 CD19- (1 of 2 alt.), CD123-, CD11C+ (hi) CD14-/CD33-/CD64- (no axiom on any alt.), HLA-DR+, CD15-/CD66B- (no axiom on any alt.), CD16- no +CD4 PanT Treg CD4/CD8 PanT 1 CL:0000896 activated CD4-positive, alpha-beta T cell 17 1 CD4+, CD8-, CD127-, CD25+ CD14-/CD33-/CD64- (no axiom on any alt.), CD19-/CD20- (no axiom on any alt.), CD123-, CD45+, CD3+, HLA-DR+, CD11C+, CD15-/CD66B- (no axiom on any alt.), CD16- no +CD4 PanT Treg CD4/CD8 PanT 2 CL:0001043 activated CD4-positive, alpha-beta T cell, human 17 1 CD4+, CD8-, CD127-, CD25+ CD14-/CD33-/CD64- (no axiom on any alt.), CD19-/CD20- (no axiom on any alt.), CD123-, CD45+, CD3+, HLA-DR+, CD11C+, CD15-/CD66B- (no axiom on any alt.), CD16- no +CD4 PanT Treg CD4/CD8 PanT 3 CL:0001044 effector CD4-positive, alpha-beta T cell 13 1 CD45+, CD4+, CD8- CD14-/CD33-/CD64- (no axiom on any alt.), CD19-/CD20- (no axiom on any alt.), CD123-, CD3+, CD127-, CD25+, HLA-DR+, CD11C+, CD15-/CD66B- (no axiom on any alt.), CD16- no +Vg9 Vd2 TCRgd 1 CL:0002468 Gr1-low myeloid suppressor cell 6 0 CD45+, CD11C+ CD14-/CD33-/CD64- (no axiom on any alt.), CD19-/CD20- (no axiom on any alt.), CD123-, CD3+, TCRAB-/TCRGD+ (no axiom on any alt.), TCRVD2+, TCRVG9+, HLA-DR+, CD15-/CD66B- (no axiom on any alt.), CD16-, DELTA1- no +Vg9 Vd2 TCRgd 2 CL:0002477 adipose macrophage 6 0 CD45+, CD11C+ CD14-/CD33-/CD64- (no axiom on any alt.), CD19-/CD20- (no axiom on any alt.), CD123-, CD3+, TCRAB-/TCRGD+ (no axiom on any alt.), TCRVD2+, TCRVG9+, HLA-DR+, CD15-/CD66B- (no axiom on any alt.), CD16-, DELTA1- no +Vg9 Vd2 TCRgd 3 CL:0002478 F4/80-negative adipose macrophage 6 0 CD45+, CD11C+ CD14-/CD33-/CD64- (no axiom on any alt.), CD19-/CD20- (no axiom on any alt.), CD123-, CD3+, TCRAB-/TCRGD+ (no axiom on any alt.), TCRVD2+, TCRVG9+, HLA-DR+, CD15-/CD66B- (no axiom on any alt.), CD16-, DELTA1- no +Vd2 TCRgd 1 CL:0002468 Gr1-low myeloid suppressor cell 6 0 CD45+, CD11C+ CD14-/CD33-/CD64- (no axiom on any alt.), CD19-/CD20- (no axiom on any alt.), CD123-, CD3+, TCRAB-/TCRGD+ (no axiom on any alt.), VD1-, HLA-DR+, CD15-/CD66B- (no axiom on any alt.), CD16-, DELTA1- no +Vd2 TCRgd 2 CL:0002477 adipose macrophage 6 0 CD45+, CD11C+ CD14-/CD33-/CD64- (no axiom on any alt.), CD19-/CD20- (no axiom on any alt.), CD123-, CD3+, TCRAB-/TCRGD+ (no axiom on any alt.), VD1-, HLA-DR+, CD15-/CD66B- (no axiom on any alt.), CD16-, DELTA1- no +Vd2 TCRgd 3 CL:0002478 F4/80-negative adipose macrophage 6 0 CD45+, CD11C+ CD14-/CD33-/CD64- (no axiom on any alt.), CD19-/CD20- (no axiom on any alt.), CD123-, CD3+, TCRAB-/TCRGD+ (no axiom on any alt.), VD1-, HLA-DR+, CD15-/CD66B- (no axiom on any alt.), CD16-, DELTA1- no +Vd3 TCRgd 1 CL:0002468 Gr1-low myeloid suppressor cell 6 0 CD45+, CD11C+ CD14-/CD33-/CD64- (no axiom on any alt.), CD19-/CD20- (no axiom on any alt.), CD123-, CD3+, TCRAB-/TCRGD+ (no axiom on any alt.), HLA-DR+, CD15-/CD66B- (no axiom on any alt.), CD16- no +Vd3 TCRgd 2 CL:0002477 adipose macrophage 6 0 CD45+, CD11C+ CD14-/CD33-/CD64- (no axiom on any alt.), CD19-/CD20- (no axiom on any alt.), CD123-, CD3+, TCRAB-/TCRGD+ (no axiom on any alt.), HLA-DR+, CD15-/CD66B- (no axiom on any alt.), CD16- no +Vd3 TCRgd 3 CL:0002478 F4/80-negative adipose macrophage 6 0 CD45+, CD11C+ CD14-/CD33-/CD64- (no axiom on any alt.), CD19-/CD20- (no axiom on any alt.), CD123-, CD3+, TCRAB-/TCRGD+ (no axiom on any alt.), HLA-DR+, CD15-/CD66B- (no axiom on any alt.), CD16- no +Vg9 Vd1 1 CL:0002468 Gr1-low myeloid suppressor cell 6 0 CD45+, CD11C+ CD14-/CD33-/CD64- (no axiom on any alt.), CD19-/CD20- (no axiom on any alt.), CD123-, CD3+, TCRAB-/TCRGD+ (no axiom on any alt.), HLA-DR+, CD15-/CD66B- (no axiom on any alt.), CD16- no +Vg9 Vd1 2 CL:0002477 adipose macrophage 6 0 CD45+, CD11C+ CD14-/CD33-/CD64- (no axiom on any alt.), CD19-/CD20- (no axiom on any alt.), CD123-, CD3+, TCRAB-/TCRGD+ (no axiom on any alt.), HLA-DR+, CD15-/CD66B- (no axiom on any alt.), CD16- no +Vg9 Vd1 3 CL:0002478 F4/80-negative adipose macrophage 6 0 CD45+, CD11C+ CD14-/CD33-/CD64- (no axiom on any alt.), CD19-/CD20- (no axiom on any alt.), CD123-, CD3+, TCRAB-/TCRGD+ (no axiom on any alt.), HLA-DR+, CD15-/CD66B- (no axiom on any alt.), CD16- no +Vd1 TCRgd 1 CL:0002468 Gr1-low myeloid suppressor cell 6 0 CD45+, CD11C+ CD14-/CD33-/CD64- (no axiom on any alt.), CD19-/CD20- (no axiom on any alt.), CD123-, CD3+, TCRAB-/TCRGD+ (no axiom on any alt.), HLA-DR+, CD15-/CD66B- (no axiom on any alt.), CD16- no +Vd1 TCRgd 2 CL:0002477 adipose macrophage 6 0 CD45+, CD11C+ CD14-/CD33-/CD64- (no axiom on any alt.), CD19-/CD20- (no axiom on any alt.), CD123-, CD3+, TCRAB-/TCRGD+ (no axiom on any alt.), HLA-DR+, CD15-/CD66B- (no axiom on any alt.), CD16- no +Vd1 TCRgd 3 CL:0002478 F4/80-negative adipose macrophage 6 0 CD45+, CD11C+ CD14-/CD33-/CD64- (no axiom on any alt.), CD19-/CD20- (no axiom on any alt.), CD123-, CD3+, TCRAB-/TCRGD+ (no axiom on any alt.), HLA-DR+, CD15-/CD66B- (no axiom on any alt.), CD16- no +Vg9 TCRgd 1 CL:0002468 Gr1-low myeloid suppressor cell 6 0 CD45+, CD11C+ CD14-/CD33-/CD64- (no axiom on any alt.), CD19-/CD20- (no axiom on any alt.), CD123-, CD3+, TCRAB-/TCRGD+ (no axiom on any alt.), HLA-DR+, CD15-/CD66B- (no axiom on any alt.), CD16- no +Vg9 TCRgd 2 CL:0002477 adipose macrophage 6 0 CD45+, CD11C+ CD14-/CD33-/CD64- (no axiom on any alt.), CD19-/CD20- (no axiom on any alt.), CD123-, CD3+, TCRAB-/TCRGD+ (no axiom on any alt.), HLA-DR+, CD15-/CD66B- (no axiom on any alt.), CD16- no +Vg9 TCRgd 3 CL:0002478 F4/80-negative adipose macrophage 6 0 CD45+, CD11C+ CD14-/CD33-/CD64- (no axiom on any alt.), CD19-/CD20- (no axiom on any alt.), CD123-, CD3+, TCRAB-/TCRGD+ (no axiom on any alt.), HLA-DR+, CD15-/CD66B- (no axiom on any alt.), CD16- no diff --git a/reports/cl_pro_relationships.tsv b/reports/cl_pro_relationships.tsv index 472f331..c11fd95 100644 --- a/reports/cl_pro_relationships.tsv +++ b/reports/cl_pro_relationships.tsv @@ -78,8 +78,8 @@ CL:0000096 mature neutrophil RO:0002104 has plasma membrane part positive True P CL:0000096 mature neutrophil RO:0002104 has plasma membrane part positive True PR:000001257 C-X-C chemokine receptor type 2 CD182 (exact); CDw128b (exact) UniProtKB:P25025 UniProtKB:P35343 IUPHARobj:69 HGNC:6027 CXCR2 CL:0000096 mature neutrophil RO:0002104 has plasma membrane part positive False PR:000001332 cell adhesion molecule CEACAM8 CD66b (exact); CD67 (exact) UniProtKB:P31997 HGNC:1820 CEACAM8 CL:0000096 mature neutrophil RO:0002104 has plasma membrane part positive True PR:000001456 alpha-(1,3)-fucosyltransferase 4 CD15 (exact) UniProtKB:P22083 UniProtKB:Q11127 HGNC:4015 FUT4 -CL:0000096 mature neutrophil RO:0002104 has plasma membrane part positive False PR:000001479 low affinity immunoglobulin gamma Fc region receptor II CD32 (broad) UniProtKB:P08101 -CL:0000096 mature neutrophil RO:0002104 has plasma membrane part positive True PR:000001483 low affinity immunoglobulin gamma Fc region receptor III CD16 (exact) UniProtKB:P08508 +CL:0000096 mature neutrophil RO:0002104 has plasma membrane part positive False PR:000001479 low affinity immunoglobulin gamma Fc region receptor II CD32 (broad) UniProtKB:P08101 HGNC:3616 FCGR2A +CL:0000096 mature neutrophil RO:0002104 has plasma membrane part positive True PR:000001483 low affinity immunoglobulin gamma Fc region receptor III CD16 (exact) UniProtKB:P08508 HGNC:3619 FCGR3A CL:0000096 mature neutrophil RO:0002104 has plasma membrane part positive False PR:000001879 leukosialin CD43 (related) UniProtKB:P16150 UniProtKB:P15702 PIRSF:PIRSF001994 HGNC:11249 SPN CL:0000096 mature neutrophil RO:0002104 has plasma membrane part positive True PR:000001944 transcription factor PU.1 UniProtKB:P17947 UniProtKB:P17433 HGNC:11241 SPI1 CL:0000096 mature neutrophil RO:0002104 has plasma membrane part positive False PR:000001969 urokinase plasminogen activator surface receptor CD87 (exact) UniProtKB:Q03405 UniProtKB:P35456 PIRSF:PIRSF002022 HGNC:9053 PLAUR @@ -236,8 +236,8 @@ CL:0000560 band form neutrophil RO:0002104 has plasma membrane part positive Fal CL:0000560 band form neutrophil RO:0002104 has plasma membrane part positive False PR:000001332 cell adhesion molecule CEACAM8 CD66b (exact); CD67 (exact) UniProtKB:P31997 HGNC:1820 CEACAM8 CL:0000560 band form neutrophil RO:0002104 has plasma membrane part positive True PR:000001337 complement receptor type 1 CD35 (exact) UniProtKB:P17927 HGNC:2334 CR1 CL:0000560 band form neutrophil RO:0002104 has plasma membrane part positive False PR:000001456 alpha-(1,3)-fucosyltransferase 4 CD15 (exact) UniProtKB:P22083 UniProtKB:Q11127 HGNC:4015 FUT4 -CL:0000560 band form neutrophil RO:0002104 has plasma membrane part positive False PR:000001479 low affinity immunoglobulin gamma Fc region receptor II CD32 (broad) UniProtKB:P08101 -CL:0000560 band form neutrophil RO:0002104 has plasma membrane part positive False PR:000001483 low affinity immunoglobulin gamma Fc region receptor III CD16 (exact) UniProtKB:P08508 +CL:0000560 band form neutrophil RO:0002104 has plasma membrane part positive False PR:000001479 low affinity immunoglobulin gamma Fc region receptor II CD32 (broad) UniProtKB:P08101 HGNC:3616 FCGR2A +CL:0000560 band form neutrophil RO:0002104 has plasma membrane part positive False PR:000001483 low affinity immunoglobulin gamma Fc region receptor III CD16 (exact) UniProtKB:P08508 HGNC:3619 FCGR3A CL:0000560 band form neutrophil RO:0002104 has plasma membrane part positive True PR:000001580 fMet-Leu-Phe receptor UniProtKB:P21462 UniProtKB:P33766 IUPHARobj:222 HGNC:3826 FPR1 CL:0000560 band form neutrophil RO:0002104 has plasma membrane part positive False PR:000001879 leukosialin CD43 (related) UniProtKB:P16150 UniProtKB:P15702 PIRSF:PIRSF001994 HGNC:11249 SPN CL:0000560 band form neutrophil RO:0002104 has plasma membrane part positive False PR:000001944 transcription factor PU.1 UniProtKB:P17947 UniProtKB:P17433 HGNC:11241 SPI1 @@ -246,7 +246,7 @@ CL:0000560 band form neutrophil BFO:0000051 has part positive True PR:000005307 CL:0000560 band form neutrophil RO:0002104 has plasma membrane part positive False PR:000007597 protein c-Fos UniProtKB:P01100 UniProtKB:P01101 HGNC:3796 FOS CL:0000562 nucleate erythrocyte CL:4030046 lacks_plasma_membrane_part negative False PR:000001945 transferrin receptor protein 1 CD71 (exact) UniProtKB:P02786 UniProtKB:Q62351 HGNC:11763 TFRC CL:0000564 neutrophilic promyelocyte CL:4030046 lacks_plasma_membrane_part negative False PR:000001012 integrin alpha-M CD11 (exact); CD11B (related); CD11b (exact) UniProtKB:P11215 UniProtKB:P05555 IUPHARobj:2452 HGNC:6149 ITGAM -CL:0000564 neutrophilic promyelocyte CL:4030046 lacks_plasma_membrane_part negative False PR:000001483 low affinity immunoglobulin gamma Fc region receptor III CD16 (exact) UniProtKB:P08508 +CL:0000564 neutrophilic promyelocyte CL:4030046 lacks_plasma_membrane_part negative False PR:000001483 low affinity immunoglobulin gamma Fc region receptor III CD16 (exact) UniProtKB:P08508 HGNC:3619 FCGR3A CL:0000564 neutrophilic promyelocyte CL:4030046 lacks_plasma_membrane_part negative False PR:000001932 signal transducer CD24 CD24 (label); CD24A (related) UniProtKB:P25063 UniProtKB:P24807 HGNC:1645 CD24 CL:0000564 neutrophilic promyelocyte CL:4030045 lacks_part negative True PR:000009978 lactotransferrin UniProtKB:P02788 UniProtKB:P08071 HGNC:6720 LTF CL:0000564 neutrophilic promyelocyte RO:0002104 has plasma membrane part positive False PR:000001456 alpha-(1,3)-fucosyltransferase 4 CD15 (exact) UniProtKB:P22083 UniProtKB:Q11127 HGNC:4015 FUT4 @@ -264,11 +264,11 @@ CL:0000580 neutrophilic myelocyte CL:4030046 lacks_plasma_membrane_part negative CL:0000580 neutrophilic myelocyte CL:4030046 lacks_plasma_membrane_part negative False PR:000001020 CD3 epsilon CD3 (label); CD3E (exact); CD3e (exact) UniProtKB:P07766 UniProtKB:P22646 IUPHARobj:2742 HGNC:1674 CD3E CL:0000580 neutrophilic myelocyte CL:4030046 lacks_plasma_membrane_part negative False PR:000001024 neural cell adhesion molecule 1 CD56 (exact) UniProtKB:P13591 UniProtKB:P13595 IUPHARobj:2769 HGNC:7656 NCAM1 CL:0000580 neutrophilic myelocyte CL:4030046 lacks_plasma_membrane_part negative False PR:000001084 T-cell surface glycoprotein CD8 alpha chain CD8 (label); CD8A (exact); CD8a (exact) UniProtKB:P01732 UniProtKB:P01731 HGNC:1706 CD8A -CL:0000580 neutrophilic myelocyte CL:4030046 lacks_plasma_membrane_part negative True PR:000001483 low affinity immunoglobulin gamma Fc region receptor III CD16 (exact) UniProtKB:P08508 +CL:0000580 neutrophilic myelocyte CL:4030046 lacks_plasma_membrane_part negative True PR:000001483 low affinity immunoglobulin gamma Fc region receptor III CD16 (exact) UniProtKB:P08508 HGNC:3619 FCGR3A CL:0000580 neutrophilic myelocyte RO:0002104 has plasma membrane part positive False PR:000001012 integrin alpha-M CD11 (exact); CD11B (related); CD11b (exact) UniProtKB:P11215 UniProtKB:P05555 IUPHARobj:2452 HGNC:6149 ITGAM CL:0000580 neutrophilic myelocyte RO:0002104 has plasma membrane part positive False PR:000001332 cell adhesion molecule CEACAM8 CD66b (exact); CD67 (exact) UniProtKB:P31997 HGNC:1820 CEACAM8 CL:0000580 neutrophilic myelocyte RO:0002104 has plasma membrane part positive True PR:000001456 alpha-(1,3)-fucosyltransferase 4 CD15 (exact) UniProtKB:P22083 UniProtKB:Q11127 HGNC:4015 FUT4 -CL:0000580 neutrophilic myelocyte RO:0002104 has plasma membrane part positive False PR:000001479 low affinity immunoglobulin gamma Fc region receptor II CD32 (broad) UniProtKB:P08101 +CL:0000580 neutrophilic myelocyte RO:0002104 has plasma membrane part positive False PR:000001479 low affinity immunoglobulin gamma Fc region receptor II CD32 (broad) UniProtKB:P08101 HGNC:3616 FCGR2A CL:0000580 neutrophilic myelocyte RO:0002104 has plasma membrane part positive False PR:000001879 leukosialin CD43 (related) UniProtKB:P16150 UniProtKB:P15702 PIRSF:PIRSF001994 HGNC:11249 SPN CL:0000580 neutrophilic myelocyte RO:0002104 has plasma membrane part positive True PR:000001892 CD33 molecule CD33 (label) UniProtKB:P20138 UniProtKB:Q63994 IUPHARobj:2601 HGNC:1659 CD33 CL:0000580 neutrophilic myelocyte RO:0002104 has plasma membrane part positive True PR:000001932 signal transducer CD24 CD24 (label); CD24A (related) UniProtKB:P25063 UniProtKB:P24807 HGNC:1645 CD24 @@ -294,8 +294,8 @@ CL:0000582 neutrophilic metamyelocyte CL:4030046 lacks_plasma_membrane_part nega CL:0000582 neutrophilic metamyelocyte RO:0002104 has plasma membrane part positive False PR:000001012 integrin alpha-M CD11 (exact); CD11B (related); CD11b (exact) UniProtKB:P11215 UniProtKB:P05555 IUPHARobj:2452 HGNC:6149 ITGAM CL:0000582 neutrophilic metamyelocyte RO:0002104 has plasma membrane part positive False PR:000001332 cell adhesion molecule CEACAM8 CD66b (exact); CD67 (exact) UniProtKB:P31997 HGNC:1820 CEACAM8 CL:0000582 neutrophilic metamyelocyte RO:0002104 has plasma membrane part positive True PR:000001456 alpha-(1,3)-fucosyltransferase 4 CD15 (exact) UniProtKB:P22083 UniProtKB:Q11127 HGNC:4015 FUT4 -CL:0000582 neutrophilic metamyelocyte RO:0002104 has plasma membrane part positive False PR:000001479 low affinity immunoglobulin gamma Fc region receptor II CD32 (broad) UniProtKB:P08101 -CL:0000582 neutrophilic metamyelocyte RO:0002104 has plasma membrane part positive True PR:000001483 low affinity immunoglobulin gamma Fc region receptor III CD16 (exact) UniProtKB:P08508 +CL:0000582 neutrophilic metamyelocyte RO:0002104 has plasma membrane part positive False PR:000001479 low affinity immunoglobulin gamma Fc region receptor II CD32 (broad) UniProtKB:P08101 HGNC:3616 FCGR2A +CL:0000582 neutrophilic metamyelocyte RO:0002104 has plasma membrane part positive True PR:000001483 low affinity immunoglobulin gamma Fc region receptor III CD16 (exact) UniProtKB:P08508 HGNC:3619 FCGR3A CL:0000582 neutrophilic metamyelocyte RO:0002104 has plasma membrane part positive False PR:000001879 leukosialin CD43 (related) UniProtKB:P16150 UniProtKB:P15702 PIRSF:PIRSF001994 HGNC:11249 SPN CL:0000582 neutrophilic metamyelocyte RO:0002104 has plasma membrane part positive True PR:000001892 CD33 molecule CD33 (label) UniProtKB:P20138 UniProtKB:Q63994 IUPHARobj:2601 HGNC:1659 CD33 CL:0000582 neutrophilic metamyelocyte RO:0002104 has plasma membrane part positive True PR:000001932 signal transducer CD24 CD24 (label); CD24A (related) UniProtKB:P25063 UniProtKB:P24807 HGNC:1645 CD24 @@ -347,7 +347,7 @@ CL:0000612 eosinophilic myelocyte CL:4030046 lacks_plasma_membrane_part negative CL:0000612 eosinophilic myelocyte CL:4030046 lacks_plasma_membrane_part negative False PR:000001020 CD3 epsilon CD3 (label); CD3E (exact); CD3e (exact) UniProtKB:P07766 UniProtKB:P22646 IUPHARobj:2742 HGNC:1674 CD3E CL:0000612 eosinophilic myelocyte CL:4030046 lacks_plasma_membrane_part negative False PR:000001024 neural cell adhesion molecule 1 CD56 (exact) UniProtKB:P13591 UniProtKB:P13595 IUPHARobj:2769 HGNC:7656 NCAM1 CL:0000612 eosinophilic myelocyte CL:4030046 lacks_plasma_membrane_part negative False PR:000001084 T-cell surface glycoprotein CD8 alpha chain CD8 (label); CD8A (exact); CD8a (exact) UniProtKB:P01732 UniProtKB:P01731 HGNC:1706 CD8A -CL:0000612 eosinophilic myelocyte CL:4030046 lacks_plasma_membrane_part negative True PR:000001483 low affinity immunoglobulin gamma Fc region receptor III CD16 (exact) UniProtKB:P08508 +CL:0000612 eosinophilic myelocyte CL:4030046 lacks_plasma_membrane_part negative True PR:000001483 low affinity immunoglobulin gamma Fc region receptor III CD16 (exact) UniProtKB:P08508 HGNC:3619 FCGR3A CL:0000612 eosinophilic myelocyte RO:0002104 has plasma membrane part positive False PR:000001012 integrin alpha-M CD11 (exact); CD11B (related); CD11b (exact) UniProtKB:P11215 UniProtKB:P05555 IUPHARobj:2452 HGNC:6149 ITGAM CL:0000612 eosinophilic myelocyte RO:0002104 has plasma membrane part positive False PR:000001254 C-C chemokine receptor type 1 CD191 (exact) UniProtKB:P32246 UniProtKB:P51675 IUPHARobj:58 HGNC:1602 CCR1 CL:0000612 eosinophilic myelocyte RO:0002104 has plasma membrane part positive False PR:000001255 C-C chemokine receptor type 3 CD193 (exact) UniProtKB:P51677 UniProtKB:P51678 IUPHARobj:60 HGNC:1604 CCR3 @@ -385,7 +385,7 @@ CL:0000614 basophilic myelocyte CL:4030046 lacks_plasma_membrane_part negative F CL:0000614 basophilic myelocyte CL:4030046 lacks_plasma_membrane_part negative False PR:000001020 CD3 epsilon CD3 (label); CD3E (exact); CD3e (exact) UniProtKB:P07766 UniProtKB:P22646 IUPHARobj:2742 HGNC:1674 CD3E CL:0000614 basophilic myelocyte CL:4030046 lacks_plasma_membrane_part negative False PR:000001024 neural cell adhesion molecule 1 CD56 (exact) UniProtKB:P13591 UniProtKB:P13595 IUPHARobj:2769 HGNC:7656 NCAM1 CL:0000614 basophilic myelocyte CL:4030046 lacks_plasma_membrane_part negative False PR:000001084 T-cell surface glycoprotein CD8 alpha chain CD8 (label); CD8A (exact); CD8a (exact) UniProtKB:P01732 UniProtKB:P01731 HGNC:1706 CD8A -CL:0000614 basophilic myelocyte CL:4030046 lacks_plasma_membrane_part negative True PR:000001483 low affinity immunoglobulin gamma Fc region receptor III CD16 (exact) UniProtKB:P08508 +CL:0000614 basophilic myelocyte CL:4030046 lacks_plasma_membrane_part negative True PR:000001483 low affinity immunoglobulin gamma Fc region receptor III CD16 (exact) UniProtKB:P08508 HGNC:3619 FCGR3A CL:0000614 basophilic myelocyte RO:0002104 has plasma membrane part positive False PR:000001012 integrin alpha-M CD11 (exact); CD11B (related); CD11b (exact) UniProtKB:P11215 UniProtKB:P05555 IUPHARobj:2452 HGNC:6149 ITGAM CL:0000614 basophilic myelocyte RO:0002104 has plasma membrane part positive False PR:000001332 cell adhesion molecule CEACAM8 CD66b (exact); CD67 (exact) UniProtKB:P31997 HGNC:1820 CEACAM8 CL:0000614 basophilic myelocyte RO:0002104 has plasma membrane part positive False PR:000001344 ectonucleotide pyrophosphatase/phosphodiesterase family member 3 CD203c (exact) UniProtKB:O14638 UniProtKB:Q6DYE8 HGNC:3358 ENPP3 @@ -456,7 +456,7 @@ CL:0000769 basophilic metamyelocyte RO:0002104 has plasma membrane part positive CL:0000769 basophilic metamyelocyte RO:0002104 has plasma membrane part positive False PR:000001332 cell adhesion molecule CEACAM8 CD66b (exact); CD67 (exact) UniProtKB:P31997 HGNC:1820 CEACAM8 CL:0000769 basophilic metamyelocyte RO:0002104 has plasma membrane part positive False PR:000001344 ectonucleotide pyrophosphatase/phosphodiesterase family member 3 CD203c (exact) UniProtKB:O14638 UniProtKB:Q6DYE8 HGNC:3358 ENPP3 CL:0000769 basophilic metamyelocyte RO:0002104 has plasma membrane part positive True PR:000001456 alpha-(1,3)-fucosyltransferase 4 CD15 (exact) UniProtKB:P22083 UniProtKB:Q11127 HGNC:4015 FUT4 -CL:0000769 basophilic metamyelocyte RO:0002104 has plasma membrane part positive True PR:000001483 low affinity immunoglobulin gamma Fc region receptor III CD16 (exact) UniProtKB:P08508 +CL:0000769 basophilic metamyelocyte RO:0002104 has plasma membrane part positive True PR:000001483 low affinity immunoglobulin gamma Fc region receptor III CD16 (exact) UniProtKB:P08508 HGNC:3619 FCGR3A CL:0000769 basophilic metamyelocyte RO:0002104 has plasma membrane part positive True PR:000001892 CD33 molecule CD33 (label) UniProtKB:P20138 UniProtKB:Q63994 IUPHARobj:2601 HGNC:1659 CD33 CL:0000769 basophilic metamyelocyte RO:0002104 has plasma membrane part positive True PR:000001932 signal transducer CD24 CD24 (label); CD24A (related) UniProtKB:P25063 UniProtKB:P24807 HGNC:1645 CD24 CL:0000769 basophilic metamyelocyte RO:0002104 has plasma membrane part positive False PR:000001950 tumor necrosis factor ligand superfamily member 5 CD154 (exact); CD40 (exact); CD40L (related); CD40LG (exact) UniProtKB:P29965 UniProtKB:P27548 PIRSF:PIRSF016527 HGNC:11935 CD40LG @@ -509,7 +509,7 @@ CL:0000773 eosinophilic metamyelocyte RO:0002104 has plasma membrane part positi CL:0000773 eosinophilic metamyelocyte RO:0002104 has plasma membrane part positive False PR:000001332 cell adhesion molecule CEACAM8 CD66b (exact); CD67 (exact) UniProtKB:P31997 HGNC:1820 CEACAM8 CL:0000773 eosinophilic metamyelocyte RO:0002104 has plasma membrane part positive False PR:000001343 CD69 molecule CD69 (label) UniProtKB:Q07108 UniProtKB:P37217 HGNC:1694 CD69 CL:0000773 eosinophilic metamyelocyte RO:0002104 has plasma membrane part positive True PR:000001456 alpha-(1,3)-fucosyltransferase 4 CD15 (exact) UniProtKB:P22083 UniProtKB:Q11127 HGNC:4015 FUT4 -CL:0000773 eosinophilic metamyelocyte RO:0002104 has plasma membrane part positive True PR:000001483 low affinity immunoglobulin gamma Fc region receptor III CD16 (exact) UniProtKB:P08508 +CL:0000773 eosinophilic metamyelocyte RO:0002104 has plasma membrane part positive True PR:000001483 low affinity immunoglobulin gamma Fc region receptor III CD16 (exact) UniProtKB:P08508 HGNC:3619 FCGR3A CL:0000773 eosinophilic metamyelocyte RO:0002104 has plasma membrane part positive True PR:000001892 CD33 molecule CD33 (label) UniProtKB:P20138 UniProtKB:Q63994 IUPHARobj:2601 HGNC:1659 CD33 CL:0000773 eosinophilic metamyelocyte RO:0002104 has plasma membrane part positive True PR:000001932 signal transducer CD24 CD24 (label); CD24A (related) UniProtKB:P25063 UniProtKB:P24807 HGNC:1645 CD24 CL:0000773 eosinophilic metamyelocyte RO:0002104 has plasma membrane part positive False PR:000001969 urokinase plasminogen activator surface receptor CD87 (exact) UniProtKB:Q03405 UniProtKB:P35456 PIRSF:PIRSF002022 HGNC:9053 PLAUR @@ -533,7 +533,7 @@ CL:0000775 neutrophil CL:4030046 lacks_plasma_membrane_part negative False PR:00 CL:0000775 neutrophil CL:4030046 lacks_plasma_membrane_part negative False PR:000001084 T-cell surface glycoprotein CD8 alpha chain CD8 (label); CD8A (exact); CD8a (exact) UniProtKB:P01732 UniProtKB:P01731 HGNC:1706 CD8A CL:0000775 neutrophil RO:0002104 has plasma membrane part positive False PR:000001012 integrin alpha-M CD11 (exact); CD11B (related); CD11b (exact) UniProtKB:P11215 UniProtKB:P05555 IUPHARobj:2452 HGNC:6149 ITGAM CL:0000775 neutrophil RO:0002104 has plasma membrane part positive False PR:000001332 cell adhesion molecule CEACAM8 CD66b (exact); CD67 (exact) UniProtKB:P31997 HGNC:1820 CEACAM8 -CL:0000775 neutrophil RO:0002104 has plasma membrane part positive True PR:000001479 low affinity immunoglobulin gamma Fc region receptor II CD32 (broad) UniProtKB:P08101 +CL:0000775 neutrophil RO:0002104 has plasma membrane part positive True PR:000001479 low affinity immunoglobulin gamma Fc region receptor II CD32 (broad) UniProtKB:P08101 HGNC:3616 FCGR2A CL:0000775 neutrophil RO:0002104 has plasma membrane part positive True PR:000001879 leukosialin CD43 (related) UniProtKB:P16150 UniProtKB:P15702 PIRSF:PIRSF001994 HGNC:11249 SPN CL:0000775 neutrophil RO:0002104 has plasma membrane part positive False PR:000001969 urokinase plasminogen activator surface receptor CD87 (exact) UniProtKB:Q03405 UniProtKB:P35456 PIRSF:PIRSF002022 HGNC:9053 PLAUR CL:0000776 immature neutrophil CL:4030046 lacks_plasma_membrane_part negative False PR:000001002 CD19 molecule CD19 (label) UniProtKB:P15391 UniProtKB:P25918 IUPHARobj:2764; PIRSF:PIRSF016630 HGNC:1633 CD19 @@ -542,7 +542,7 @@ CL:0000776 immature neutrophil CL:4030046 lacks_plasma_membrane_part negative Fa CL:0000776 immature neutrophil CL:4030046 lacks_plasma_membrane_part negative False PR:000001084 T-cell surface glycoprotein CD8 alpha chain CD8 (label); CD8A (exact); CD8a (exact) UniProtKB:P01732 UniProtKB:P01731 HGNC:1706 CD8A CL:0000776 immature neutrophil RO:0002104 has plasma membrane part positive False PR:000001012 integrin alpha-M CD11 (exact); CD11B (related); CD11b (exact) UniProtKB:P11215 UniProtKB:P05555 IUPHARobj:2452 HGNC:6149 ITGAM CL:0000776 immature neutrophil RO:0002104 has plasma membrane part positive False PR:000001332 cell adhesion molecule CEACAM8 CD66b (exact); CD67 (exact) UniProtKB:P31997 HGNC:1820 CEACAM8 -CL:0000776 immature neutrophil RO:0002104 has plasma membrane part positive False PR:000001479 low affinity immunoglobulin gamma Fc region receptor II CD32 (broad) UniProtKB:P08101 +CL:0000776 immature neutrophil RO:0002104 has plasma membrane part positive False PR:000001479 low affinity immunoglobulin gamma Fc region receptor II CD32 (broad) UniProtKB:P08101 HGNC:3616 FCGR2A CL:0000776 immature neutrophil RO:0002104 has plasma membrane part positive False PR:000001879 leukosialin CD43 (related) UniProtKB:P16150 UniProtKB:P15702 PIRSF:PIRSF001994 HGNC:11249 SPN CL:0000776 immature neutrophil RO:0002104 has plasma membrane part positive False PR:000001969 urokinase plasminogen activator surface receptor CD87 (exact) UniProtKB:Q03405 UniProtKB:P35456 PIRSF:PIRSF002022 HGNC:9053 PLAUR CL:0000778 mononuclear osteoclast BFO:0000051 has part positive False PR:000001850 cathepsin K UniProtKB:P43235 UniProtKB:P55097 IUPHARobj:2350 HGNC:2536 CTSK @@ -702,7 +702,7 @@ CL:0000825 pro-NK cell RO:0002104 has plasma membrane part positive True PR:0000 CL:0000826 pro-B cell BFO:0000051 has part positive True PR:000001903 paired box protein PAX-5 UniProtKB:Q02548 UniProtKB:Q02650 HGNC:8619 PAX5 CL:0000826 pro-B cell BFO:0000051 has part positive True PR:000006611 DNA nucleotidylexotransferase UniProtKB:P04053 UniProtKB:P09838 HGNC:2983 DNTT CL:0000830 basophilic promyelocyte CL:4030046 lacks_plasma_membrane_part negative False PR:000001012 integrin alpha-M CD11 (exact); CD11B (related); CD11b (exact) UniProtKB:P11215 UniProtKB:P05555 IUPHARobj:2452 HGNC:6149 ITGAM -CL:0000830 basophilic promyelocyte CL:4030046 lacks_plasma_membrane_part negative False PR:000001483 low affinity immunoglobulin gamma Fc region receptor III CD16 (exact) UniProtKB:P08508 +CL:0000830 basophilic promyelocyte CL:4030046 lacks_plasma_membrane_part negative False PR:000001483 low affinity immunoglobulin gamma Fc region receptor III CD16 (exact) UniProtKB:P08508 HGNC:3619 FCGR3A CL:0000830 basophilic promyelocyte CL:4030046 lacks_plasma_membrane_part negative False PR:000001932 signal transducer CD24 CD24 (label); CD24A (related) UniProtKB:P25063 UniProtKB:P24807 HGNC:1645 CD24 CL:0000830 basophilic promyelocyte RO:0002104 has plasma membrane part positive False PR:000001456 alpha-(1,3)-fucosyltransferase 4 CD15 (exact) UniProtKB:P22083 UniProtKB:Q11127 HGNC:4015 FUT4 CL:0000830 basophilic promyelocyte RO:0002104 has plasma membrane part positive False PR:000001892 CD33 molecule CD33 (label) UniProtKB:P20138 UniProtKB:Q63994 IUPHARobj:2601 HGNC:1659 CD33 @@ -730,12 +730,12 @@ CL:0000831 mast cell progenitor BFO:0000051 has part positive True PR:000007857 CL:0000831 mast cell progenitor BFO:0000051 has part positive True PR:000007858 endothelial transcription factor GATA-2 UniProtKB:P23769 UniProtKB:O09100 HGNC:4171 GATA2 CL:0000831 mast cell progenitor RO:0002104 has plasma membrane part positive True PR:000016401 transmembrane emp24 domain-containing protein 1 UniProtKB:Q13445 UniProtKB:Q3V009 HGNC:17291 TMED1 CL:0000833 eosinophilic promyelocyte CL:4030046 lacks_plasma_membrane_part negative False PR:000001012 integrin alpha-M CD11 (exact); CD11B (related); CD11b (exact) UniProtKB:P11215 UniProtKB:P05555 IUPHARobj:2452 HGNC:6149 ITGAM -CL:0000833 eosinophilic promyelocyte CL:4030046 lacks_plasma_membrane_part negative False PR:000001483 low affinity immunoglobulin gamma Fc region receptor III CD16 (exact) UniProtKB:P08508 +CL:0000833 eosinophilic promyelocyte CL:4030046 lacks_plasma_membrane_part negative False PR:000001483 low affinity immunoglobulin gamma Fc region receptor III CD16 (exact) UniProtKB:P08508 HGNC:3619 FCGR3A CL:0000833 eosinophilic promyelocyte CL:4030046 lacks_plasma_membrane_part negative False PR:000001932 signal transducer CD24 CD24 (label); CD24A (related) UniProtKB:P25063 UniProtKB:P24807 HGNC:1645 CD24 CL:0000833 eosinophilic promyelocyte RO:0002104 has plasma membrane part positive False PR:000001456 alpha-(1,3)-fucosyltransferase 4 CD15 (exact) UniProtKB:P22083 UniProtKB:Q11127 HGNC:4015 FUT4 CL:0000833 eosinophilic promyelocyte RO:0002104 has plasma membrane part positive False PR:000001892 CD33 molecule CD33 (label) UniProtKB:P20138 UniProtKB:Q63994 IUPHARobj:2601 HGNC:1659 CD33 CL:0000836 promyelocyte CL:4030046 lacks_plasma_membrane_part negative True PR:000001012 integrin alpha-M CD11 (exact); CD11B (related); CD11b (exact) UniProtKB:P11215 UniProtKB:P05555 IUPHARobj:2452 HGNC:6149 ITGAM -CL:0000836 promyelocyte CL:4030046 lacks_plasma_membrane_part negative True PR:000001483 low affinity immunoglobulin gamma Fc region receptor III CD16 (exact) UniProtKB:P08508 +CL:0000836 promyelocyte CL:4030046 lacks_plasma_membrane_part negative True PR:000001483 low affinity immunoglobulin gamma Fc region receptor III CD16 (exact) UniProtKB:P08508 HGNC:3619 FCGR3A CL:0000836 promyelocyte CL:4030046 lacks_plasma_membrane_part negative True PR:000001932 signal transducer CD24 CD24 (label); CD24A (related) UniProtKB:P25063 UniProtKB:P24807 HGNC:1645 CD24 CL:0000836 promyelocyte RO:0002104 has plasma membrane part positive True PR:000001456 alpha-(1,3)-fucosyltransferase 4 CD15 (exact) UniProtKB:P22083 UniProtKB:Q11127 HGNC:4015 FUT4 CL:0000836 promyelocyte RO:0002104 has plasma membrane part positive True PR:000001892 CD33 molecule CD33 (label) UniProtKB:P20138 UniProtKB:Q63994 IUPHARobj:2601 HGNC:1659 CD33 @@ -828,7 +828,7 @@ CL:0000876 splenic white pulp macrophage RO:0002104 has plasma membrane part pos CL:0000877 splenic tingible body macrophage CL:4030046 lacks_plasma_membrane_part negative False PR:000001813 adhesion G protein-coupled receptor E1 UniProtKB:Q14246 UniProtKB:Q61549 IUPHARobj:182; PIRSF:PIRSF038685 HGNC:3336 ADGRE1 CL:0000877 splenic tingible body macrophage RO:0002104 has plasma membrane part positive False PR:000002064 macrosialin CD68 (exact) UniProtKB:P34810 UniProtKB:P31996 HGNC:1693 CD68 CL:0000877 splenic tingible body macrophage RO:0002104 has plasma membrane part positive True PR:000010329 tyrosine-protein kinase Mer UniProtKB:Q12866 UniProtKB:Q60805 IUPHARobj:1837 HGNC:7027 MERTK -CL:0000881 perivascular macrophage RO:0002104 has plasma membrane part positive True PR:000001483 low affinity immunoglobulin gamma Fc region receptor III CD16 (exact) UniProtKB:P08508 +CL:0000881 perivascular macrophage RO:0002104 has plasma membrane part positive True PR:000001483 low affinity immunoglobulin gamma Fc region receptor III CD16 (exact) UniProtKB:P08508 HGNC:3619 FCGR3A CL:0000881 perivascular macrophage RO:0002104 has plasma membrane part positive True PR:000001889 CD14 molecule CD14 (label) UniProtKB:P08571 UniProtKB:P10810 PIRSF:PIRSF002017 HGNC:1628 CD14 CL:0000881 perivascular macrophage RO:0002104 has plasma membrane part positive True PR:000001925 scavenger receptor cysteine-rich type 1 protein M130 CD163 (exact) UniProtKB:Q86VB7 UniProtKB:Q2VLH6 HGNC:1631 CD163 CL:0000887 lymph node subcapsular sinus macrophage RO:0015015 has high plasma membrane amount high False PR:000001931 sialoadhesin CD169 (exact) UniProtKB:Q9BZZ2 UniProtKB:Q62230 HGNC:11127 SIGLEC1 @@ -1065,7 +1065,7 @@ CL:0000938 CD16-negative, CD56-bright natural killer cell, human RO:0015015 has CL:0000938 CD16-negative, CD56-bright natural killer cell, human CL:4030046 lacks_plasma_membrane_part negative False PR:000001002 CD19 molecule CD19 (label) UniProtKB:P15391 UniProtKB:P25918 IUPHARobj:2764; PIRSF:PIRSF016630 HGNC:1633 CD19 CL:0000938 CD16-negative, CD56-bright natural killer cell, human CL:4030046 lacks_plasma_membrane_part negative False PR:000001020 CD3 epsilon CD3 (label); CD3E (exact); CD3e (exact) UniProtKB:P07766 UniProtKB:P22646 IUPHARobj:2742 HGNC:1674 CD3E CL:0000938 CD16-negative, CD56-bright natural killer cell, human CL:4030046 lacks_plasma_membrane_part negative False PR:000001289 membrane-spanning 4-domains subfamily A member 1 CD20 (exact) UniProtKB:P11836 UniProtKB:P19437 PIRSF:PIRSF001995; IUPHARobj:2628 HGNC:7315 MS4A1 -CL:0000938 CD16-negative, CD56-bright natural killer cell, human CL:4030046 lacks_plasma_membrane_part negative True PR:000001483 low affinity immunoglobulin gamma Fc region receptor III CD16 (exact) UniProtKB:P08508 +CL:0000938 CD16-negative, CD56-bright natural killer cell, human CL:4030046 lacks_plasma_membrane_part negative True PR:000001483 low affinity immunoglobulin gamma Fc region receptor III CD16 (exact) UniProtKB:P08508 HGNC:3619 FCGR3A CL:0000938 CD16-negative, CD56-bright natural killer cell, human CL:4030046 lacks_plasma_membrane_part negative False PR:000001889 CD14 molecule CD14 (label) UniProtKB:P08571 UniProtKB:P10810 PIRSF:PIRSF002017 HGNC:1628 CD14 CL:0000938 CD16-negative, CD56-bright natural killer cell, human CL:4030046 lacks_plasma_membrane_part negative True PR:000002015 MHC class II histocompatibility antigen alpha chain DRA UniProtKB:P01903 HGNC:4947 HLA-DRA CL:0000938 CD16-negative, CD56-bright natural killer cell, human RO:0002104 has plasma membrane part positive True PR:000001319 SLAM family member 5 CD84 (exact) UniProtKB:Q9UIB8 UniProtKB:Q18PI6 HGNC:1704 CD84 @@ -1075,7 +1075,7 @@ CL:0000939 CD16-positive, CD56-dim natural killer cell, human CL:4030046 lacks_p CL:0000939 CD16-positive, CD56-dim natural killer cell, human CL:4030046 lacks_plasma_membrane_part negative False PR:000001289 membrane-spanning 4-domains subfamily A member 1 CD20 (exact) UniProtKB:P11836 UniProtKB:P19437 PIRSF:PIRSF001995; IUPHARobj:2628 HGNC:7315 MS4A1 CL:0000939 CD16-positive, CD56-dim natural killer cell, human CL:4030046 lacks_plasma_membrane_part negative False PR:000001889 CD14 molecule CD14 (label) UniProtKB:P08571 UniProtKB:P10810 PIRSF:PIRSF002017 HGNC:1628 CD14 CL:0000939 CD16-positive, CD56-dim natural killer cell, human CL:4030046 lacks_plasma_membrane_part negative True PR:000002015 MHC class II histocompatibility antigen alpha chain DRA UniProtKB:P01903 HGNC:4947 HLA-DRA -CL:0000939 CD16-positive, CD56-dim natural killer cell, human RO:0002104 has plasma membrane part positive True PR:000001483 low affinity immunoglobulin gamma Fc region receptor III CD16 (exact) UniProtKB:P08508 +CL:0000939 CD16-positive, CD56-dim natural killer cell, human RO:0002104 has plasma membrane part positive True PR:000001483 low affinity immunoglobulin gamma Fc region receptor III CD16 (exact) UniProtKB:P08508 HGNC:3619 FCGR3A CL:0000941 thymic conventional dendritic cell RO:0015015 has high plasma membrane amount high False PR:000001013 integrin alpha-X CD11 (exact); CD11C (related); CD11c (exact) UniProtKB:P20702 UniProtKB:Q9QXH4 IUPHARobj:2454 HGNC:6152 ITGAX CL:0000941 thymic conventional dendritic cell CL:4030046 lacks_plasma_membrane_part negative False PR:000001002 CD19 molecule CD19 (label) UniProtKB:P15391 UniProtKB:P25918 IUPHARobj:2764; PIRSF:PIRSF016630 HGNC:1633 CD19 CL:0000941 thymic conventional dendritic cell CL:4030046 lacks_plasma_membrane_part negative False PR:000001003 CD34 molecule CD34 (label) UniProtKB:P28906 UniProtKB:Q64314 PIRSF:PIRSF028749 HGNC:1662 CD34 @@ -1745,7 +1745,7 @@ CL:0001024 CD34-positive, CD38-negative hematopoietic stem cell CL:4030046 lacks CL:0001024 CD34-positive, CD38-negative hematopoietic stem cell CL:4030046 lacks_plasma_membrane_part negative False PR:000001084 T-cell surface glycoprotein CD8 alpha chain CD8 (label); CD8A (exact); CD8a (exact) UniProtKB:P01732 UniProtKB:P01731 HGNC:1706 CD8A CL:0001024 CD34-positive, CD38-negative hematopoietic stem cell CL:4030046 lacks_plasma_membrane_part negative False PR:000001289 membrane-spanning 4-domains subfamily A member 1 CD20 (exact) UniProtKB:P11836 UniProtKB:P19437 PIRSF:PIRSF001995; IUPHARobj:2628 HGNC:7315 MS4A1 CL:0001024 CD34-positive, CD38-negative hematopoietic stem cell CL:4030046 lacks_plasma_membrane_part negative True PR:000001408 ADP-ribosyl cyclase/cyclic ADP-ribose hydrolase 1 CD38 (exact) UniProtKB:P28907 UniProtKB:P56528 IUPHARobj:2766 HGNC:1667 CD38 -CL:0001024 CD34-positive, CD38-negative hematopoietic stem cell CL:4030046 lacks_plasma_membrane_part negative True PR:000001483 low affinity immunoglobulin gamma Fc region receptor III CD16 (exact) UniProtKB:P08508 +CL:0001024 CD34-positive, CD38-negative hematopoietic stem cell CL:4030046 lacks_plasma_membrane_part negative True PR:000001483 low affinity immunoglobulin gamma Fc region receptor III CD16 (exact) UniProtKB:P08508 HGNC:3619 FCGR3A CL:0001024 CD34-positive, CD38-negative hematopoietic stem cell CL:4030046 lacks_plasma_membrane_part negative False PR:000001839 T-cell surface glycoprotein CD5 CD5 (label) UniProtKB:P06127 UniProtKB:P13379 HGNC:1685 CD5 CL:0001024 CD34-positive, CD38-negative hematopoietic stem cell CL:4030046 lacks_plasma_membrane_part negative False PR:000001889 CD14 molecule CD14 (label) UniProtKB:P08571 UniProtKB:P10810 PIRSF:PIRSF002017 HGNC:1628 CD14 CL:0001024 CD34-positive, CD38-negative hematopoietic stem cell CL:4030046 lacks_plasma_membrane_part negative True PR:000001892 CD33 molecule CD33 (label) UniProtKB:P20138 UniProtKB:Q63994 IUPHARobj:2601 HGNC:1659 CD33 @@ -1934,7 +1934,7 @@ CL:0001054 CD14-positive monocyte CL:4030046 lacks_plasma_membrane_part negative CL:0001054 CD14-positive monocyte CL:4030046 lacks_plasma_membrane_part negative True PR:000001020 CD3 epsilon CD3 (label); CD3E (exact); CD3e (exact) UniProtKB:P07766 UniProtKB:P22646 IUPHARobj:2742 HGNC:1674 CD3E CL:0001054 CD14-positive monocyte CL:4030046 lacks_plasma_membrane_part negative True PR:000001289 membrane-spanning 4-domains subfamily A member 1 CD20 (exact) UniProtKB:P11836 UniProtKB:P19437 PIRSF:PIRSF001995; IUPHARobj:2628 HGNC:7315 MS4A1 CL:0001054 CD14-positive monocyte RO:0002104 has plasma membrane part positive True PR:000001889 CD14 molecule CD14 (label) UniProtKB:P08571 UniProtKB:P10810 PIRSF:PIRSF002017 HGNC:1628 CD14 -CL:0001055 CD14-positive, CD16-low monocyte RO:0015016 has low plasma membrane amount low True PR:000001483 low affinity immunoglobulin gamma Fc region receptor III CD16 (exact) UniProtKB:P08508 +CL:0001055 CD14-positive, CD16-low monocyte RO:0015016 has low plasma membrane amount low True PR:000001483 low affinity immunoglobulin gamma Fc region receptor III CD16 (exact) UniProtKB:P08508 HGNC:3619 FCGR3A CL:0001055 CD14-positive, CD16-low monocyte CL:4030046 lacks_plasma_membrane_part negative False PR:000001002 CD19 molecule CD19 (label) UniProtKB:P15391 UniProtKB:P25918 IUPHARobj:2764; PIRSF:PIRSF016630 HGNC:1633 CD19 CL:0001055 CD14-positive, CD16-low monocyte CL:4030046 lacks_plasma_membrane_part negative False PR:000001020 CD3 epsilon CD3 (label); CD3E (exact); CD3e (exact) UniProtKB:P07766 UniProtKB:P22646 IUPHARobj:2742 HGNC:1674 CD3E CL:0001055 CD14-positive, CD16-low monocyte CL:4030046 lacks_plasma_membrane_part negative False PR:000001199 C-C chemokine receptor type 2 CD192 (exact) UniProtKB:P41597 UniProtKB:P51683 IUPHARobj:59 HGNC:1603 CCR2 @@ -2158,7 +2158,7 @@ CL:0002001 CD34-positive, CD38-positive granulocyte monocyte progenitor RO:00021 CL:0002001 CD34-positive, CD38-positive granulocyte monocyte progenitor RO:0002104 has plasma membrane part positive False PR:000001865 interleukin-3 receptor class 2 alpha chain CD123 (exact) UniProtKB:P26951 UniProtKB:P26952 IUPHARobj:1705 HGNC:6012 IL3RA CL:0002001 CD34-positive, CD38-positive granulocyte monocyte progenitor BFO:0000051 has part positive False PR:000001944 transcription factor PU.1 UniProtKB:P17947 UniProtKB:P17433 HGNC:11241 SPI1 CL:0002001 CD34-positive, CD38-positive granulocyte monocyte progenitor BFO:0000051 has part positive False PR:000005307 CCAAT/enhancer-binding protein alpha UniProtKB:P49715 UniProtKB:P53566 HGNC:1833 CEBPA -CL:0002002 Kit-positive granulocyte monocyte progenitor RO:0015015 has high plasma membrane amount high True PR:000001479 low affinity immunoglobulin gamma Fc region receptor II CD32 (broad) UniProtKB:P08101 +CL:0002002 Kit-positive granulocyte monocyte progenitor RO:0015015 has high plasma membrane amount high True PR:000001479 low affinity immunoglobulin gamma Fc region receptor II CD32 (broad) UniProtKB:P08101 HGNC:3616 FCGR2A CL:0002002 Kit-positive granulocyte monocyte progenitor CL:4030046 lacks_plasma_membrane_part negative False PR:000001002 CD19 molecule CD19 (label) UniProtKB:P15391 UniProtKB:P25918 IUPHARobj:2764; PIRSF:PIRSF016630 HGNC:1633 CD19 CL:0002002 Kit-positive granulocyte monocyte progenitor CL:4030046 lacks_plasma_membrane_part negative False PR:000001004 CD4 molecule CD4 (label) UniProtKB:P01730 UniProtKB:P06332 PIRSF:PIRSF001977 HGNC:1678 CD4 CL:0002002 Kit-positive granulocyte monocyte progenitor CL:4030046 lacks_plasma_membrane_part negative False PR:000001012 integrin alpha-M CD11 (exact); CD11B (related); CD11b (exact) UniProtKB:P11215 UniProtKB:P05555 IUPHARobj:2452 HGNC:6149 ITGAM @@ -2216,7 +2216,7 @@ CL:0002005 CD34-positive, CD38-positive megakaryocyte erythroid progenitor cell CL:0002005 CD34-positive, CD38-positive megakaryocyte erythroid progenitor cell RO:0002104 has plasma membrane part positive True PR:000001003 CD34 molecule CD34 (label) UniProtKB:P28906 UniProtKB:Q64314 PIRSF:PIRSF028749 HGNC:1662 CD34 CL:0002005 CD34-positive, CD38-positive megakaryocyte erythroid progenitor cell RO:0002104 has plasma membrane part positive True PR:000001408 ADP-ribosyl cyclase/cyclic ADP-ribose hydrolase 1 CD38 (exact) UniProtKB:P28907 UniProtKB:P56528 IUPHARobj:2766 HGNC:1667 CD38 CL:0002006 Kit-positive, CD34-negative megakaryocyte erythroid progenitor cell CL:4030046 lacks_plasma_membrane_part negative True PR:000001003 CD34 molecule CD34 (label) UniProtKB:P28906 UniProtKB:Q64314 PIRSF:PIRSF028749 HGNC:1662 CD34 -CL:0002006 Kit-positive, CD34-negative megakaryocyte erythroid progenitor cell CL:4030046 lacks_plasma_membrane_part negative True PR:000001479 low affinity immunoglobulin gamma Fc region receptor II CD32 (broad) UniProtKB:P08101 +CL:0002006 Kit-positive, CD34-negative megakaryocyte erythroid progenitor cell CL:4030046 lacks_plasma_membrane_part negative True PR:000001479 low affinity immunoglobulin gamma Fc region receptor II CD32 (broad) UniProtKB:P08101 HGNC:3616 FCGR2A CL:0002006 Kit-positive, CD34-negative megakaryocyte erythroid progenitor cell CL:4030046 lacks_plasma_membrane_part negative True PR:000001843 Thy-1 membrane glycoprotein CD90 (exact); CDw90 (exact) UniProtKB:P04216 UniProtKB:P01831 PIRSF:PIRSF038777 HGNC:11801 THY1 CL:0002006 Kit-positive, CD34-negative megakaryocyte erythroid progenitor cell CL:4030046 lacks_plasma_membrane_part negative True PR:000001869 interleukin-7 receptor subunit alpha CD127 (exact); CDw127 (exact) UniProtKB:P16871 UniProtKB:P16872 IUPHARobj:1698; PIRSF:PIRSF001960 HGNC:6024 IL7R CL:0002006 Kit-positive, CD34-negative megakaryocyte erythroid progenitor cell CL:4030046 lacks_plasma_membrane_part negative True PR:000002979 lymphocyte antigen 6A-2/6E-1 UniProtKB:P05533 @@ -2432,8 +2432,8 @@ CL:0002023 CD34-positive, CD41-positive, CD42-positive megakaryocyte progenitor CL:0002023 CD34-positive, CD41-positive, CD42-positive megakaryocyte progenitor cell RO:0002104 has plasma membrane part positive True PR:000001003 CD34 molecule CD34 (label) UniProtKB:P28906 UniProtKB:Q64314 PIRSF:PIRSF028749 HGNC:1662 CD34 CL:0002023 CD34-positive, CD41-positive, CD42-positive megakaryocyte progenitor cell RO:0002104 has plasma membrane part positive True PR:000001907 platelet glycoprotein Ib alpha chain CD42b (exact) UniProtKB:P07359 UniProtKB:O35930 PIRSF:PIRSF002493 HGNC:4439 GP1BA CL:0002023 CD34-positive, CD41-positive, CD42-positive megakaryocyte progenitor cell RO:0002104 has plasma membrane part positive True PR:000009127 integrin alpha-IIb CD41 (exact) UniProtKB:P08514 UniProtKB:Q9QUM0 IUPHARobj:2441 HGNC:6138 ITGA2B -CL:0002024 Kit-positive megakaryocyte progenitor cell RO:0015016 has low plasma membrane amount low True PR:000001479 low affinity immunoglobulin gamma Fc region receptor II CD32 (broad) UniProtKB:P08101 -CL:0002024 Kit-positive megakaryocyte progenitor cell RO:0015016 has low plasma membrane amount low True PR:000001483 low affinity immunoglobulin gamma Fc region receptor III CD16 (exact) UniProtKB:P08508 +CL:0002024 Kit-positive megakaryocyte progenitor cell RO:0015016 has low plasma membrane amount low True PR:000001479 low affinity immunoglobulin gamma Fc region receptor II CD32 (broad) UniProtKB:P08101 HGNC:3616 FCGR2A +CL:0002024 Kit-positive megakaryocyte progenitor cell RO:0015016 has low plasma membrane amount low True PR:000001483 low affinity immunoglobulin gamma Fc region receptor III CD16 (exact) UniProtKB:P08508 HGNC:3619 FCGR3A CL:0002024 Kit-positive megakaryocyte progenitor cell CL:4030046 lacks_plasma_membrane_part negative False PR:000001002 CD19 molecule CD19 (label) UniProtKB:P15391 UniProtKB:P25918 IUPHARobj:2764; PIRSF:PIRSF016630 HGNC:1633 CD19 CL:0002024 Kit-positive megakaryocyte progenitor cell CL:4030046 lacks_plasma_membrane_part negative False PR:000001004 CD4 molecule CD4 (label) UniProtKB:P01730 UniProtKB:P06332 PIRSF:PIRSF001977 HGNC:1678 CD4 CL:0002024 Kit-positive megakaryocyte progenitor cell CL:4030046 lacks_plasma_membrane_part negative False PR:000001012 integrin alpha-M CD11 (exact); CD11B (related); CD11b (exact) UniProtKB:P11215 UniProtKB:P05555 IUPHARobj:2452 HGNC:6149 ITGAM @@ -2662,8 +2662,8 @@ CL:0002044 Kit-positive, integrin beta7-high basophil mast progenitor cell CL:40 CL:0002044 Kit-positive, integrin beta7-high basophil mast progenitor cell CL:4030046 lacks_plasma_membrane_part negative True PR:000002979 lymphocyte antigen 6A-2/6E-1 UniProtKB:P05533 CL:0002044 Kit-positive, integrin beta7-high basophil mast progenitor cell CL:4030046 lacks_plasma_membrane_part negative False PR:000007431 high affinity immunoglobulin epsilon receptor subunit alpha UniProtKB:P12319 UniProtKB:P20489 IUPHARobj:2933 HGNC:3609 FCER1A CL:0002044 Kit-positive, integrin beta7-high basophil mast progenitor cell CL:4030046 lacks_plasma_membrane_part negative False PR:000016401 transmembrane emp24 domain-containing protein 1 UniProtKB:Q13445 UniProtKB:Q3V009 HGNC:17291 TMED1 -CL:0002044 Kit-positive, integrin beta7-high basophil mast progenitor cell RO:0002104 has plasma membrane part positive True PR:000001479 low affinity immunoglobulin gamma Fc region receptor II CD32 (broad) UniProtKB:P08101 -CL:0002044 Kit-positive, integrin beta7-high basophil mast progenitor cell RO:0002104 has plasma membrane part positive True PR:000001483 low affinity immunoglobulin gamma Fc region receptor III CD16 (exact) UniProtKB:P08508 +CL:0002044 Kit-positive, integrin beta7-high basophil mast progenitor cell RO:0002104 has plasma membrane part positive True PR:000001479 low affinity immunoglobulin gamma Fc region receptor II CD32 (broad) UniProtKB:P08101 HGNC:3616 FCGR2A +CL:0002044 Kit-positive, integrin beta7-high basophil mast progenitor cell RO:0002104 has plasma membrane part positive True PR:000001483 low affinity immunoglobulin gamma Fc region receptor III CD16 (exact) UniProtKB:P08508 HGNC:3619 FCGR3A CL:0002044 Kit-positive, integrin beta7-high basophil mast progenitor cell RO:0002104 has plasma membrane part positive False PR:000001867 interleukin-5 receptor subunit alpha CD125 (exact); CDw125 (exact) UniProtKB:Q01344 UniProtKB:P21183 IUPHARobj:1706; PIRSF:PIRSF018419 HGNC:6017 IL5RA CL:0002044 Kit-positive, integrin beta7-high basophil mast progenitor cell BFO:0000051 has part positive False PR:000005307 CCAAT/enhancer-binding protein alpha UniProtKB:P49715 UniProtKB:P53566 HGNC:1833 CEBPA CL:0002044 Kit-positive, integrin beta7-high basophil mast progenitor cell BFO:0000051 has part positive False PR:000007857 erythroid transcription factor UniProtKB:P15976 UniProtKB:P17679 HGNC:4170 GATA1 @@ -2782,7 +2782,7 @@ CL:0002057 CD14-positive, CD16-negative classical monocyte RO:0015015 has high p CL:0002057 CD14-positive, CD16-negative classical monocyte CL:4030046 lacks_plasma_membrane_part negative False PR:000001002 CD19 molecule CD19 (label) UniProtKB:P15391 UniProtKB:P25918 IUPHARobj:2764; PIRSF:PIRSF016630 HGNC:1633 CD19 CL:0002057 CD14-positive, CD16-negative classical monocyte CL:4030046 lacks_plasma_membrane_part negative False PR:000001020 CD3 epsilon CD3 (label); CD3E (exact); CD3e (exact) UniProtKB:P07766 UniProtKB:P22646 IUPHARobj:2742 HGNC:1674 CD3E CL:0002057 CD14-positive, CD16-negative classical monocyte CL:4030046 lacks_plasma_membrane_part negative False PR:000001289 membrane-spanning 4-domains subfamily A member 1 CD20 (exact) UniProtKB:P11836 UniProtKB:P19437 PIRSF:PIRSF001995; IUPHARobj:2628 HGNC:7315 MS4A1 -CL:0002057 CD14-positive, CD16-negative classical monocyte CL:4030046 lacks_plasma_membrane_part negative True PR:000001483 low affinity immunoglobulin gamma Fc region receptor III CD16 (exact) UniProtKB:P08508 +CL:0002057 CD14-positive, CD16-negative classical monocyte CL:4030046 lacks_plasma_membrane_part negative True PR:000001483 low affinity immunoglobulin gamma Fc region receptor III CD16 (exact) UniProtKB:P08508 HGNC:3619 FCGR3A CL:0002057 CD14-positive, CD16-negative classical monocyte RO:0002104 has plasma membrane part positive True PR:000001465 high affinity immunoglobulin gamma Fc receptor I CD64 (exact) UniProtKB:P12314 UniProtKB:P26151 HGNC:3613 FCGR1A CL:0002057 CD14-positive, CD16-negative classical monocyte RO:0002104 has plasma membrane part positive False PR:000001889 CD14 molecule CD14 (label) UniProtKB:P08571 UniProtKB:P10810 PIRSF:PIRSF002017 HGNC:1628 CD14 CL:0002057 CD14-positive, CD16-negative classical monocyte RO:0002104 has plasma membrane part positive True PR:000001925 scavenger receptor cysteine-rich type 1 protein M130 CD163 (exact) UniProtKB:Q86VB7 UniProtKB:Q2VLH6 HGNC:1631 CD163 @@ -2999,12 +2999,12 @@ CL:0002128 Tc17 cell RO:0002104 has plasma membrane part positive False PR:00000 CL:0002128 Tc17 cell RO:0002104 has plasma membrane part positive False PR:000025402 T cell receptor co-receptor CD8 CD8 (label) CL:0002128 Tc17 cell BFO:0000051 has part positive False PR:000025403 T-cell surface glycoprotein CD8 alpha chain isoform 1 CD8 (label); CD8A (exact) UniProtKB:P01732-1 HGNC:1706 CD8A CL:0002151 late promyelocyte CL:4030046 lacks_plasma_membrane_part negative False PR:000001012 integrin alpha-M CD11 (exact); CD11B (related); CD11b (exact) UniProtKB:P11215 UniProtKB:P05555 IUPHARobj:2452 HGNC:6149 ITGAM -CL:0002151 late promyelocyte CL:4030046 lacks_plasma_membrane_part negative False PR:000001483 low affinity immunoglobulin gamma Fc region receptor III CD16 (exact) UniProtKB:P08508 +CL:0002151 late promyelocyte CL:4030046 lacks_plasma_membrane_part negative False PR:000001483 low affinity immunoglobulin gamma Fc region receptor III CD16 (exact) UniProtKB:P08508 HGNC:3619 FCGR3A CL:0002151 late promyelocyte CL:4030046 lacks_plasma_membrane_part negative False PR:000001932 signal transducer CD24 CD24 (label); CD24A (related) UniProtKB:P25063 UniProtKB:P24807 HGNC:1645 CD24 CL:0002151 late promyelocyte RO:0002104 has plasma membrane part positive False PR:000001456 alpha-(1,3)-fucosyltransferase 4 CD15 (exact) UniProtKB:P22083 UniProtKB:Q11127 HGNC:4015 FUT4 CL:0002151 late promyelocyte RO:0002104 has plasma membrane part positive False PR:000001892 CD33 molecule CD33 (label) UniProtKB:P20138 UniProtKB:Q63994 IUPHARobj:2601 HGNC:1659 CD33 CL:0002154 early promyelocyte CL:4030046 lacks_plasma_membrane_part negative False PR:000001012 integrin alpha-M CD11 (exact); CD11B (related); CD11b (exact) UniProtKB:P11215 UniProtKB:P05555 IUPHARobj:2452 HGNC:6149 ITGAM -CL:0002154 early promyelocyte CL:4030046 lacks_plasma_membrane_part negative False PR:000001483 low affinity immunoglobulin gamma Fc region receptor III CD16 (exact) UniProtKB:P08508 +CL:0002154 early promyelocyte CL:4030046 lacks_plasma_membrane_part negative False PR:000001483 low affinity immunoglobulin gamma Fc region receptor III CD16 (exact) UniProtKB:P08508 HGNC:3619 FCGR3A CL:0002154 early promyelocyte CL:4030046 lacks_plasma_membrane_part negative False PR:000001932 signal transducer CD24 CD24 (label); CD24A (related) UniProtKB:P25063 UniProtKB:P24807 HGNC:1645 CD24 CL:0002154 early promyelocyte RO:0002104 has plasma membrane part positive False PR:000001456 alpha-(1,3)-fucosyltransferase 4 CD15 (exact) UniProtKB:P22083 UniProtKB:Q11127 HGNC:4015 FUT4 CL:0002154 early promyelocyte RO:0002104 has plasma membrane part positive False PR:000001892 CD33 molecule CD33 (label) UniProtKB:P20138 UniProtKB:Q63994 IUPHARobj:2601 HGNC:1659 CD33 @@ -3034,7 +3034,7 @@ CL:0002343 decidual natural killer cell, human RO:0015015 has high plasma membra CL:0002343 decidual natural killer cell, human CL:4030046 lacks_plasma_membrane_part negative False PR:000001002 CD19 molecule CD19 (label) UniProtKB:P15391 UniProtKB:P25918 IUPHARobj:2764; PIRSF:PIRSF016630 HGNC:1633 CD19 CL:0002343 decidual natural killer cell, human CL:4030046 lacks_plasma_membrane_part negative False PR:000001020 CD3 epsilon CD3 (label); CD3E (exact); CD3e (exact) UniProtKB:P07766 UniProtKB:P22646 IUPHARobj:2742 HGNC:1674 CD3E CL:0002343 decidual natural killer cell, human CL:4030046 lacks_plasma_membrane_part negative False PR:000001289 membrane-spanning 4-domains subfamily A member 1 CD20 (exact) UniProtKB:P11836 UniProtKB:P19437 PIRSF:PIRSF001995; IUPHARobj:2628 HGNC:7315 MS4A1 -CL:0002343 decidual natural killer cell, human CL:4030046 lacks_plasma_membrane_part negative True PR:000001483 low affinity immunoglobulin gamma Fc region receptor III CD16 (exact) UniProtKB:P08508 +CL:0002343 decidual natural killer cell, human CL:4030046 lacks_plasma_membrane_part negative True PR:000001483 low affinity immunoglobulin gamma Fc region receptor III CD16 (exact) UniProtKB:P08508 HGNC:3619 FCGR3A CL:0002343 decidual natural killer cell, human CL:4030046 lacks_plasma_membrane_part negative False PR:000001889 CD14 molecule CD14 (label) UniProtKB:P08571 UniProtKB:P10810 PIRSF:PIRSF002017 HGNC:1628 CD14 CL:0002343 decidual natural killer cell, human RO:0002104 has plasma membrane part positive True PR:000009766 galectin-1 UniProtKB:P09382 UniProtKB:P16045 HGNC:6561 LGALS1 CL:0002344 CD56-negative, CD161-positive immature natural killer cell, human CL:4030046 lacks_plasma_membrane_part negative False PR:000001002 CD19 molecule CD19 (label) UniProtKB:P15391 UniProtKB:P25918 IUPHARobj:2764; PIRSF:PIRSF016630 HGNC:1633 CD19 @@ -3186,12 +3186,12 @@ CL:0002396 CD14-low, CD16-positive monocyte RO:0015016 has low plasma membrane a CL:0002396 CD14-low, CD16-positive monocyte CL:4030046 lacks_plasma_membrane_part negative False PR:000001002 CD19 molecule CD19 (label) UniProtKB:P15391 UniProtKB:P25918 IUPHARobj:2764; PIRSF:PIRSF016630 HGNC:1633 CD19 CL:0002396 CD14-low, CD16-positive monocyte CL:4030046 lacks_plasma_membrane_part negative False PR:000001020 CD3 epsilon CD3 (label); CD3E (exact); CD3e (exact) UniProtKB:P07766 UniProtKB:P22646 IUPHARobj:2742 HGNC:1674 CD3E CL:0002396 CD14-low, CD16-positive monocyte CL:4030046 lacks_plasma_membrane_part negative False PR:000001289 membrane-spanning 4-domains subfamily A member 1 CD20 (exact) UniProtKB:P11836 UniProtKB:P19437 PIRSF:PIRSF001995; IUPHARobj:2628 HGNC:7315 MS4A1 -CL:0002396 CD14-low, CD16-positive monocyte RO:0002104 has plasma membrane part positive True PR:000001483 low affinity immunoglobulin gamma Fc region receptor III CD16 (exact) UniProtKB:P08508 +CL:0002396 CD14-low, CD16-positive monocyte RO:0002104 has plasma membrane part positive True PR:000001483 low affinity immunoglobulin gamma Fc region receptor III CD16 (exact) UniProtKB:P08508 HGNC:3619 FCGR3A CL:0002397 CD14-positive, CD16-positive monocyte CL:4030046 lacks_plasma_membrane_part negative False PR:000001002 CD19 molecule CD19 (label) UniProtKB:P15391 UniProtKB:P25918 IUPHARobj:2764; PIRSF:PIRSF016630 HGNC:1633 CD19 CL:0002397 CD14-positive, CD16-positive monocyte CL:4030046 lacks_plasma_membrane_part negative False PR:000001020 CD3 epsilon CD3 (label); CD3E (exact); CD3e (exact) UniProtKB:P07766 UniProtKB:P22646 IUPHARobj:2742 HGNC:1674 CD3E CL:0002397 CD14-positive, CD16-positive monocyte CL:4030046 lacks_plasma_membrane_part negative True PR:000001199 C-C chemokine receptor type 2 CD192 (exact) UniProtKB:P41597 UniProtKB:P51683 IUPHARobj:59 HGNC:1603 CCR2 CL:0002397 CD14-positive, CD16-positive monocyte CL:4030046 lacks_plasma_membrane_part negative False PR:000001289 membrane-spanning 4-domains subfamily A member 1 CD20 (exact) UniProtKB:P11836 UniProtKB:P19437 PIRSF:PIRSF001995; IUPHARobj:2628 HGNC:7315 MS4A1 -CL:0002397 CD14-positive, CD16-positive monocyte RO:0002104 has plasma membrane part positive True PR:000001483 low affinity immunoglobulin gamma Fc region receptor III CD16 (exact) UniProtKB:P08508 +CL:0002397 CD14-positive, CD16-positive monocyte RO:0002104 has plasma membrane part positive True PR:000001483 low affinity immunoglobulin gamma Fc region receptor III CD16 (exact) UniProtKB:P08508 HGNC:3619 FCGR3A CL:0002397 CD14-positive, CD16-positive monocyte RO:0002104 has plasma membrane part positive False PR:000001889 CD14 molecule CD14 (label) UniProtKB:P08571 UniProtKB:P10810 PIRSF:PIRSF002017 HGNC:1628 CD14 CL:0002398 Gr1-positive, CD43-positive monocyte CL:4030046 lacks_plasma_membrane_part negative False PR:000001002 CD19 molecule CD19 (label) UniProtKB:P15391 UniProtKB:P25918 IUPHARobj:2764; PIRSF:PIRSF016630 HGNC:1633 CD19 CL:0002398 Gr1-positive, CD43-positive monocyte CL:4030046 lacks_plasma_membrane_part negative False PR:000001020 CD3 epsilon CD3 (label); CD3E (exact); CD3e (exact) UniProtKB:P07766 UniProtKB:P22646 IUPHARobj:2742 HGNC:1674 CD3E @@ -3821,7 +3821,7 @@ CL:0002532 CD16-positive myeloid dendritic cell CL:4030046 lacks_plasma_membrane CL:0002532 CD16-positive myeloid dendritic cell CL:4030046 lacks_plasma_membrane_part negative False PR:000001024 neural cell adhesion molecule 1 CD56 (exact) UniProtKB:P13591 UniProtKB:P13595 IUPHARobj:2769 HGNC:7656 NCAM1 CL:0002532 CD16-positive myeloid dendritic cell CL:4030046 lacks_plasma_membrane_part negative False PR:000001289 membrane-spanning 4-domains subfamily A member 1 CD20 (exact) UniProtKB:P11836 UniProtKB:P19437 PIRSF:PIRSF001995; IUPHARobj:2628 HGNC:7315 MS4A1 CL:0002532 CD16-positive myeloid dendritic cell CL:4030046 lacks_plasma_membrane_part negative False PR:000001865 interleukin-3 receptor class 2 alpha chain CD123 (exact) UniProtKB:P26951 UniProtKB:P26952 IUPHARobj:1705 HGNC:6012 IL3RA -CL:0002532 CD16-positive myeloid dendritic cell RO:0002104 has plasma membrane part positive True PR:000001483 low affinity immunoglobulin gamma Fc region receptor III CD16 (exact) UniProtKB:P08508 +CL:0002532 CD16-positive myeloid dendritic cell RO:0002104 has plasma membrane part positive True PR:000001483 low affinity immunoglobulin gamma Fc region receptor III CD16 (exact) UniProtKB:P08508 HGNC:3619 FCGR3A CL:0002533 immature CD16-positive myeloid dendritic cell RO:0015015 has high plasma membrane amount high False PR:000001013 integrin alpha-X CD11 (exact); CD11C (related); CD11c (exact) UniProtKB:P20702 UniProtKB:Q9QXH4 IUPHARobj:2454 HGNC:6152 ITGAX CL:0002533 immature CD16-positive myeloid dendritic cell RO:0015016 has low plasma membrane amount low False PR:000001412 CD86 molecule CD28LG2 (related); CD86 (label) UniProtKB:P42081 UniProtKB:P42082 IUPHARobj:2745 HGNC:1705 CD86 CL:0002533 immature CD16-positive myeloid dendritic cell RO:0015016 has low plasma membrane amount low False PR:000001438 CD80 molecule CD28LG (related); CD28LG1 (related); CD80 (label) UniProtKB:P33681 UniProtKB:Q00609 IUPHARobj:2744 HGNC:1700 CD80 @@ -3831,7 +3831,7 @@ CL:0002533 immature CD16-positive myeloid dendritic cell CL:4030046 lacks_plasma CL:0002533 immature CD16-positive myeloid dendritic cell CL:4030046 lacks_plasma_membrane_part negative False PR:000001024 neural cell adhesion molecule 1 CD56 (exact) UniProtKB:P13591 UniProtKB:P13595 IUPHARobj:2769 HGNC:7656 NCAM1 CL:0002533 immature CD16-positive myeloid dendritic cell CL:4030046 lacks_plasma_membrane_part negative False PR:000001289 membrane-spanning 4-domains subfamily A member 1 CD20 (exact) UniProtKB:P11836 UniProtKB:P19437 PIRSF:PIRSF001995; IUPHARobj:2628 HGNC:7315 MS4A1 CL:0002533 immature CD16-positive myeloid dendritic cell CL:4030046 lacks_plasma_membrane_part negative False PR:000001865 interleukin-3 receptor class 2 alpha chain CD123 (exact) UniProtKB:P26951 UniProtKB:P26952 IUPHARobj:1705 HGNC:6012 IL3RA -CL:0002533 immature CD16-positive myeloid dendritic cell RO:0002104 has plasma membrane part positive False PR:000001483 low affinity immunoglobulin gamma Fc region receptor III CD16 (exact) UniProtKB:P08508 +CL:0002533 immature CD16-positive myeloid dendritic cell RO:0002104 has plasma membrane part positive False PR:000001483 low affinity immunoglobulin gamma Fc region receptor III CD16 (exact) UniProtKB:P08508 HGNC:3619 FCGR3A CL:0002534 mature CD16-positive myeloid dendritic cell RO:0015015 has high plasma membrane amount high False PR:000001013 integrin alpha-X CD11 (exact); CD11C (related); CD11c (exact) UniProtKB:P20702 UniProtKB:Q9QXH4 IUPHARobj:2454 HGNC:6152 ITGAX CL:0002534 mature CD16-positive myeloid dendritic cell RO:0015015 has high plasma membrane amount high False PR:000001412 CD86 molecule CD28LG2 (related); CD86 (label) UniProtKB:P42081 UniProtKB:P42082 IUPHARobj:2745 HGNC:1705 CD86 CL:0002534 mature CD16-positive myeloid dendritic cell RO:0015015 has high plasma membrane amount high False PR:000001438 CD80 molecule CD28LG (related); CD28LG1 (related); CD80 (label) UniProtKB:P33681 UniProtKB:Q00609 IUPHARobj:2744 HGNC:1700 CD80 @@ -3842,7 +3842,7 @@ CL:0002534 mature CD16-positive myeloid dendritic cell CL:4030046 lacks_plasma_m CL:0002534 mature CD16-positive myeloid dendritic cell CL:4030046 lacks_plasma_membrane_part negative False PR:000001289 membrane-spanning 4-domains subfamily A member 1 CD20 (exact) UniProtKB:P11836 UniProtKB:P19437 PIRSF:PIRSF001995; IUPHARobj:2628 HGNC:7315 MS4A1 CL:0002534 mature CD16-positive myeloid dendritic cell CL:4030046 lacks_plasma_membrane_part negative False PR:000001865 interleukin-3 receptor class 2 alpha chain CD123 (exact) UniProtKB:P26951 UniProtKB:P26952 IUPHARobj:1705 HGNC:6012 IL3RA CL:0002534 mature CD16-positive myeloid dendritic cell RO:0002104 has plasma membrane part positive False PR:000001310 CD83 molecule CD83 (label) UniProtKB:Q01151 UniProtKB:O88324 HGNC:1703 CD83 -CL:0002534 mature CD16-positive myeloid dendritic cell RO:0002104 has plasma membrane part positive False PR:000001483 low affinity immunoglobulin gamma Fc region receptor III CD16 (exact) UniProtKB:P08508 +CL:0002534 mature CD16-positive myeloid dendritic cell RO:0002104 has plasma membrane part positive False PR:000001483 low affinity immunoglobulin gamma Fc region receptor III CD16 (exact) UniProtKB:P08508 HGNC:3619 FCGR3A CL:0002619 adult endothelial progenitor cell RO:0002104 has plasma membrane part positive False PR:000001444 cadherin-5 CD144 (exact) UniProtKB:P33151 UniProtKB:P55284 HGNC:1764 CDH5 CL:0002619 adult endothelial progenitor cell RO:0002104 has plasma membrane part positive False PR:000002112 vascular endothelial growth factor receptor 2 CD309 (exact) UniProtKB:P35968 UniProtKB:P35918 IUPHARobj:1813 HGNC:6307 KDR CL:0002619 adult endothelial progenitor cell RO:0002104 has plasma membrane part positive False PR:000016043 T-cell acute lymphocytic leukemia protein 1 UniProtKB:P17542 UniProtKB:P22091 HGNC:11556 TAL1 @@ -3951,8 +3951,8 @@ CL:0011114 segmented neutrophil of bone marrow RO:0002104 has plasma membrane pa CL:0011114 segmented neutrophil of bone marrow RO:0002104 has plasma membrane part positive False PR:000001257 C-X-C chemokine receptor type 2 CD182 (exact); CDw128b (exact) UniProtKB:P25025 UniProtKB:P35343 IUPHARobj:69 HGNC:6027 CXCR2 CL:0011114 segmented neutrophil of bone marrow RO:0002104 has plasma membrane part positive False PR:000001332 cell adhesion molecule CEACAM8 CD66b (exact); CD67 (exact) UniProtKB:P31997 HGNC:1820 CEACAM8 CL:0011114 segmented neutrophil of bone marrow RO:0002104 has plasma membrane part positive False PR:000001456 alpha-(1,3)-fucosyltransferase 4 CD15 (exact) UniProtKB:P22083 UniProtKB:Q11127 HGNC:4015 FUT4 -CL:0011114 segmented neutrophil of bone marrow RO:0002104 has plasma membrane part positive False PR:000001479 low affinity immunoglobulin gamma Fc region receptor II CD32 (broad) UniProtKB:P08101 -CL:0011114 segmented neutrophil of bone marrow RO:0002104 has plasma membrane part positive False PR:000001483 low affinity immunoglobulin gamma Fc region receptor III CD16 (exact) UniProtKB:P08508 +CL:0011114 segmented neutrophil of bone marrow RO:0002104 has plasma membrane part positive False PR:000001479 low affinity immunoglobulin gamma Fc region receptor II CD32 (broad) UniProtKB:P08101 HGNC:3616 FCGR2A +CL:0011114 segmented neutrophil of bone marrow RO:0002104 has plasma membrane part positive False PR:000001483 low affinity immunoglobulin gamma Fc region receptor III CD16 (exact) UniProtKB:P08508 HGNC:3619 FCGR3A CL:0011114 segmented neutrophil of bone marrow RO:0002104 has plasma membrane part positive False PR:000001879 leukosialin CD43 (related) UniProtKB:P16150 UniProtKB:P15702 PIRSF:PIRSF001994 HGNC:11249 SPN CL:0011114 segmented neutrophil of bone marrow RO:0002104 has plasma membrane part positive False PR:000001944 transcription factor PU.1 UniProtKB:P17947 UniProtKB:P17433 HGNC:11241 SPI1 CL:0011114 segmented neutrophil of bone marrow RO:0002104 has plasma membrane part positive False PR:000001969 urokinase plasminogen activator surface receptor CD87 (exact) UniProtKB:Q03405 UniProtKB:P35456 PIRSF:PIRSF002022 HGNC:9053 PLAUR diff --git a/reports/cl_term_issues.md b/reports/cl_term_issues.md index e80205a..1a3ec3f 100644 --- a/reports/cl_term_issues.md +++ b/reports/cl_term_issues.md @@ -77,6 +77,65 @@ cells. | Intermediate monocyte | CL:0002393 | CD14^hi/+ CD16^+/hi CD11c^hi HLA-DR^hi | | Non-classical monocyte | CL:0000875 | CD14^lo/− CD16^hi CD11c^hi HLA-DR^+ | +### Natural killer cell missing CD56 marker axiom — CL:0000623 + +**Repo issue:** not yet filed +**Reference:** SOULCAP `NK` row ([data/marker_combinations.csv](../data/marker_combinations.csv), regenerate via `uv run soulcap-sync`); literature in [reports/literature/nk_cell_markers.md](literature/nk_cell_markers.md) +**Status:** Drafted during Milestone 4 candidate mapping work — not yet filed as a repo issue + +#### CL:0000623 — "natural killer cell" + +| Field | Current | Proposed | +|-------|---------|----------| +| Marker axioms | Negative only: CD14, CD19, CD3, CD20 (no positive marker asserted) | Add positive axiom: CD56 (`PR:000001024`, neural cell adhesion molecule 1 / NCAM1) | + +**Rationale:** SOULCAP defines its parent "NK" cell type by required phenotypic +markers `CD45+ CD56+/hi CD127-`, combined with exclusion of CD14/CD33/CD64/ +CD34/CD3/CD19. CD56 positivity is the field-standard defining marker for NK +cells, not just an incidental one: + +> "Natural killer cells are prototypic members of the innate lymphoid cell +> (ILC) family and characterized in humans by expression of the phenotypic +> marker CD56 in the absence of CD3." +> — Van Acker HH et al. 2017 (PMID:28791027; DOI:10.3389/fimmu.2017.00892) + +CL already captures this CD56 axiom on **child** terms of natural killer cell +— `CL:0000938` (CD16-negative, CD56-bright NK cell) and `CL:0000939` +(CD16-positive, CD56-dim NK cell) both assert a CD56 marker — but the parent +class `CL:0000623` itself asserts no positive marker at all. This is an +asymmetry: the defining marker of the general class is only captured on its +subtypes, not on the class itself. + +### Missing human-specific "group 1 innate lymphoid cell" term + +**Repo issue:** [#14 Missing human-specific 'group 1 innate lymphoid cell' term (CL)](https://github.com/Cellular-Semantics/SOULCAP_CL_Mapping/issues/14) +**Reference:** SOULCAP `ILC1` row ([data/marker_combinations.csv](../data/marker_combinations.csv)); [reports/candidate_cl_mappings.md](candidate_cl_mappings.md#ilc-family--innate-lymphoid-cells) +**Status:** Filed as a repo issue — not yet filed upstream to `obophenotype/cell-ontology` + +**Rationale:** CL distinguishes species-specific variants for two of the +three canonical ILC groups: + +- `CL:0001081` — "group 2 innate lymphoid cell, **human**" +- `CL:0001078` — "group 3 innate lymphoid cell, **human**" + +...but ILC1 only has the species-generic `CL:0001067` "group 1 innate +lymphoid cell," with no `, human`-suffixed counterpart. Confirmed by direct +OLS4 search — querying "group 1 innate lymphoid cell, human" returns zero +results, while the equivalent queries for group 2 and group 3 both return +their human-specific term. This is an asymmetry in CL's own authoring +(ILC1/ILC2/ILC3 are described in parallel throughout the literature and +in CL's own group-3 subtyping, e.g. NKp44-positive/negative human variants +of group 3), not an intentional omission specific to group 1. + +**Proposed fix:** add a "group 1 innate lymphoid cell, human" term to CL, +following the same pattern as the existing group 2 and group 3 human terms. + +**How this was found:** running `soulcap-match` against the SOULCAP `NK` +marker profile ranks `CL:0000623` only 33rd of 826 CL terms — well below its +own CD56-bright/dim children — specifically because of this missing axiom, +despite `CL:0000623` being the conceptually correct parent-level match for +SOULCAP's unqualified "NK" cell type. + --- ## Resolved issues diff --git a/reports/marker_validation.md b/reports/marker_validation.md index 77aa1f4..8b37dbd 100644 --- a/reports/marker_validation.md +++ b/reports/marker_validation.md @@ -1,11 +1,11 @@ -# Marker Syntax Validation +# Marker Syntax Validation -> **Auto-generated** on each `soulcap-sync` by the EBNF validator (`soulcap_cl_mapping.marker_syntax`). Do not edit by hand — edit the Google Sheet master and re-sync. +> **Auto-generated** on each `soulcap-sync` by the EBNF validator (`soulcap_cl_mapping.marker_syntax`). Do not edit by hand — edit the Google Sheet master and re-sync. - Source: `marker_combinations.csv` - Cells checked: **390** - Invalid cells: **26** -- Grammar: [../MARKER_SYNTAX.md](../MARKER_SYNTAX.md) §2 +- Grammar: [../MARKER_SYNTAX.md](../MARKER_SYNTAX.md) §2 ## Invalid cells diff --git a/reports/proposed_marker_fixes.xlsx b/reports/proposed_marker_fixes.xlsx new file mode 100644 index 0000000000000000000000000000000000000000..4d6dc520b55ffb5bc059df57e1c96a1f101c2191 GIT binary patch literal 13819 zcmZ{L1yr2NvNak4!QBb&PH-o<1$TGX;2PZBVMx$m!QI`N;4VQ!a2p){A?Mt4-pzYI ztQpp<#jft!wX3T8o9+*?&@h+~5D>2+W+Jb2B?jfCQox_a!7o(s%hbW-gR_I93$u}< zBa?@ntvpcvO%Ds=tBp=&x5kV};sWIN0+E0=Ak)W?23ot|yOSdrA$w2HA%Z-n2r{aM zbn!E$Z98_hK_uZh@;kxNkuQ;7w!Ocxt_DU|XNb zAqYfJhkkJK{`d^l{4^rr$~BcMl7Y-J1cu z7b~~rx{Tl>1(Fan%@|ux(}ZCEPDxJG(Nv_PMERC1ei(-R`w4N$y`S8k7spJ-KSRTl z&piwmnV08U8=2QOG}tK6L|E{OD^I%+3gz_cwXGm}xqXK*(0f-tMZK2wz#N^^-O#~j zCZGFNx4fzzY-RfeSJKqbSD(RB_`9l-wu8ajx*Zbs8>~^)7_)px3=I*g=J2}nTigDJ zr8Pk_;65)ATcAA)f#zHP35Vis1?})3sy%&O))qqQHiMH>QURZaeUo8Zq(S-9Sg+ZT z_;_jznu*$6Q@iqkgktJAR&0~OyrkUGv3!+O6(43vF$J+Pvpe*9)ru#asi zDzSCog^pFfBRu^ULetT0ZfpuVRiF0mV>13CQR}LR?y2T6PXyZ2KtIf!)f8SThlF!Z zJS;KfhcCv1}a zt;!&ak6N>UNe?bRw{we==H*2v9NQS+&+f@}jKZkx`7oS$2`xl@fFMvpAtf8|?2;2rlJCnDrf;4?Wijwx^^CexiWb?@q6ymu#QQ1p9lkeJo(KlkD)bT_KY1yPC;Gyrr|fCr z(`06fJDG$yt6K76SE})!?D*Xhl>{HdET{Oro?vgY-yskt5D-CG5Y$SL23xhB5?4~h zW>)l|(TfTi<8k6U*JB4ZIF$q&YNHQKdMHfQp*?7oze^G{96B6N_&70_fQ*)?&jtS9 ziKuwAPU28*nara+Cry|~fPSxZ_s>tG=8sK&p|k9^46)aeGdMEaC{)El`)nL=`I%bq z?ZN8Sxuszof?tW*5Ma-mi3NAOJP^222iiV-`{WJzJh{ZxQ+D&Ii^reI7g%`Gd@1l{ zs*#J_*P?qmN@q>NUZ?N=8|%_M2NR8nhV%H)plW3j?E+73*Wsh3AmHriZjmCmGE<9@ z96Me%uvUbk=^<+5l&%l{r>PDl{HW@*8CN7aK$O6KU*$?BWqzl!nWl+fXM4Z$i>n|5 z@Rr|TuWtMeyI7;M?5~F8j(RF?nak=iM+M?hL_Q1tM4|@w&qVL;L3(c6Ci(1^=^AWJCT=Yknbq4@(z@f>kty@^SfyiFl#Q&JRd=fq0o8QQt2(R&>aY}m zPg)g2xrk^A*l*CKOp(9>|+wsr@d6jYkf-5OA!*qU2; zO1#WiEsD<984=+bbi%dJH|6z?X7{qPzj=|l-KDvA8=gNp4ojl!@a-8~>WO{x1Fde| z*(dQy$z^-?qd~fgLy@NtzQV>~+x~Ez82<_bay)tX{VCKZ(;~uv^t(6h=ZMX;SQ8b3 zJpSSgL7@uzQa-2&{+VhgI27vGks z-h?b~s*bnfcTgG1_IlapFj7A+>(2<(;Rr}v*tn$n{Q$-?=N zB)&3<*16;`h{H6lD5|a)SYk!=4A8tl{9?|%9wwfN&psPf&J%;+ATlewBeXn&WC=pz zAWVSOXU%Bf%->c(;9q$OIGzcd^ko~9hk>eP<+as420w0C42pp0VKLZAT-1{!;*SSv}9?`qi&aIk)!DTmtJ9_u~PIw_)R^NNeSAFk6b&seDdk$-zvd<^e z=Z~%Z7uK9PlDVl9(-*yBO+L-h=27dN-qW5JcO<#R?$>3PLQ5y>0-^4cX_i;OLGHIt z)$QXh?7rcVNJv}K*FwaH6h zjpq&1Nuv+=KVo0yFER{c#qAhm)j8DICk;Jx8cd^1lcS=X^7=&HMJ*~$XU#skJ8X8Z zyl?z*VSD9yc2Bc3_KSjG^Q~^k$vPuWC*P=P%gMTYqCbV+08;VAHjA$oH74PR!%)RT|S+XqJIj-yu4&H7&9OaMokm#=-`)_*ql4-o!!=dO{iq()0XqJ zkg?VWXX?cllPX#@NV41sC?5Se5b=~g2FTquxeyTd=2GHT5ff5(d+;C`$06sI6XOi)<6Qo_)*Vc+W zCJJw~`;HYm0Oo#+;0L@9INg#FezrM;DL1eEvnR|ar=(NgmLNOgGEsKik?YS;jIpM` zl_VNKJbQQ{Qcr?O#CoFDe!_0|e3tkBzF+@zh!Pu@B&6tF;gE9^rcZy%ew*(y=}a+a z)g=@+K%yN4l$5r#a29$j+@bKzE?88ooW9ICc9Nxo8sUl3xN;+$=aZfSWE0n)6kBDo z(~jeYrDp9gqu+YSK}*xJc(<8>7Gf7yckybIr6^pwDq7Kp7TOSN$SH9*oAhKJcRW1_ zruQCLa@)DreQtl~z}v_jh%7;y$Olyh)z1#OYpo{&9zHHv1F?twb0hLewk9u>;3*0N z+#I6ZfXGK+yGzMZ5?R{Uog+~k4gOk;>QO>PtU;j%?+$pmgDG4@ltVV-aTX^P%=?F1~rk?^4pEa+Z2SpW`qH}0 zFP4Um)-oe_Ct8&=P5kFZ6yIc5ZE+AAK^WhN3-se+xXqVq%N0IQ>3 z>qlW;m)OqlsBBLxkEwdv^gEY$zG63r%B%-%-o8VQ_rL~Lot^59*}vzY2GN`aW(=Io z2jVB;e-O~A<1&o8Hxx7$lntc8TAaWOHO+=tZXI{A&4-7vr9bL-a3_3Q&FI&;^`kX? zHQG+@P-#=FR(`9pzhQP^HpZ*ftV(UK_vhBbC-IsJo({Jn7YjB$1%O3K!~+*~TeEbi zlTYT|TG{^ebgio~2Pz-qoUA#L8$)}y^1W_%6<>I}+^fx4lI6kH&UN%HPgWF*iMN^S z48>*pFpB&p0Fm|QtgX)XwFMoKo`9!a{_uQfR)Ur&A1Qu0&^VB`6Mn&;YR8EXL+_z; zt8vg~#G8Oitek}YnN1^ld8duOm7K(B`_}80iuB4aGxcGzv9kV`t+hru7Qgy$ca4Dj z{jr55n%22NIm-Q}5uHR|eRUx>C5WMu(c`%;)AvP=m--=gvmYho+-N2$Y(?lNthRTv zsf84$6ugM=ydIL_a%$}toI{g-x=<&ZA76-|yf4wj${<>-z9g4Da#0g0`AP>iiFJMr z$w8S?8sCZip$M+o1_!!{ZXvJFG^`YX9%ZJKPL5wDsFYhh$2frB#E8aU%xb29#kXMiM1M43}<3;pUb@>(N6i+h%yjxyr-RMfqY+fE*&KfsQgw&Jb=Bp z*2Lduu~G7 zz2n1R;~Lk_5ARh9)<>|he&V1Ni(mogD5NSCVTSMRIhC{!-j_%j@8-KP#LOt)uQX&< zs2=tkgj?`e&IAmP%5`w%Cv9SSda3&?XPaFv?KUCOt7w66qa5BSSsoZU*j%2R#+?t+ug)D*4M*1?!= z!zlpL*I*ZC8Q4=?yic*VQ%X_W9+8n@%J~jse_gmH#hq@Gk-5fv!hDR&50=Oz_T7?A zm09`XE@t7T9&-k8k&-&<*xM){Lj`RP7ZqZjuqwTgO2YQyMsI9_YoMw%Lu$NMUaY}L zCwQ6ZjOmOZioJPFF^?FfZt~LvoB(Pe*=@#~r9xonkOcvz3hAw_%{K^NN-}N1_gvF` z$ZEqDB$!F;w}-w|Q=Nf6^l4K*YK^1x%vaYcc;37eDNzC>N5aXGLlzR|^HW28AR)aX zoRewzIAz^qVksHC_ds+j4eKuS&gU~!-Lav%TJeZs&b=tEDu=Z9i>}Z5(n**yi$I*k zcN|16g{Mb%HikC672%ATRr`eq_zkwwk;-VxV~K~_+KCJLf(A;~fP5^yj*yv)lsP|M z3(Z?($%*i)8esS^gOM5{kBjDYhnf<_O*rr-#;I)3NsORJKkayp=+zPPKuyydcVcg|p3W#*q5=K#)!I(F|$ z8>^F)rM>S(s%)Lmw$IW_;kr&2S~r)d`h)&5Q9t7)4~=Em`xbY5`@G*y#Qyk#%GIi+ zl*jY5zU6W|Ny2Yyo=L>7M8}rHmNoto^H;J zf^pK#vHU5_cxh$}x=4If5zpYF@3sYTPjUJx z#fhw+DloRj!rTE>~*lIoKRr9|g4tl-)d7e!+$-T&+%DdL;p$P z-iGUmTO8A}i2&1?f;;DuA;ZIpGH%w)sxL8YYsutH^#0T^Ds6T!aQ(|v3L}wp%{R*D zTh8V-hNpF6yZ4^fmq<}DoJw?prS$Aev5YYd%J;dN!8ID@IpX1_jMm=XYo>__x59y?#x=gLjr z;FY$AH@Y1$@zfi}&JsCC>~alozYe>J5U$!+*>ndn=B8788Z;}nC1c&W;$uwBJ_QT$ zS>>tr3As$gGUn7N-xEG1%k-1zRkH{V8N+@>Tfzq_;P0BAE=u>BdIwZCS;0Y(cyYtr zRJ^-p4Dkk#I04nOX|S4s0!}lag!~b9N!pYV0a!g`s06PzSf?`|fvD`aEpIgNo~H;y z`QdP;T_9-`iPUWAmZ3fnwm@SE6WvebK^U(0UgSf40LW?j5kgC0`+uLFY-uv=9iwes>%M;pw?=0_4Ty8YCe(?D36J zKC0gpKbj=MgEyqEF5C18eyxIa(Rcf)2C zss-AUQ7s2O4y?XE{BpdxPRH=Xc3-+rQv*!R2lsyB z4rQf7`5|#G*zXT{jcWuJ99BN|5#ul1gd-QSiPJ&2(TJC5LS%?}+Im(Rm-v2z0QWY1 zCK9s!9dQlZ4M~)!ohUcsFnMXYk$_s-h+z-}VXlW4OPBnyHUqR@oq!^<=x8sM<)SWD zAz58UvzM*sJlG1dwhXK(GRs>gFALV(_Hb?uSe{wk+WN@F3>!CH)-nYT>50F`GfX#eP}pl0~oy9T_3?6OaF$Z%gKiBp3SDE2G)u3x3_P zxMUYLl%z$K*b-z39+07Y^Fsr!O=}8@Em)%??5*_{R*m2)MN_OQ#k1z+vA4zh4Yq!4 z4!nhoTFh|#J$&%*;W>jF(;aOj{{r@~OM(af3I@Ig1G!;+Ce_bM-$M5+YWE+?aqE<& z+oJRkG^$s_+4S`1M6yAWWw)y+(V+u8iv?s)>ShEbxjSy+1Bndd-LFMpbgkB9aw#@# zl{9cIu9Gc{oJqN;K`dv)ZCu9%#weh+L4O}9H)i`cG2~`~!9wEE#yuKuEOxz<{N49yZEU&PGBp7Kir{TQ>+Xgo6<=6KJ8fw6@rUna>ECuQSeXep{ z0b)uxVJ(?_BhyEB7tYhjOqyV{gCkdi8Lpf#GDdc!rCm@6;-RC(%H!&azv9EdGQUP7 zJO?-3Vapn^$YJX*($WW?hb7Ok#xEO#5NU+$u`awWhK-w}uNTiw8l<_i`a1=J;tX_Z z_bU@>HL0Glxt3BIESPHryi*%2zz$kBbbBFKKvUX3a()L$xW{aeDh~9wfn!>bJoezL zgbq5VU$kkzM{m*)T!_BE+_&7*hCLlGTIdB}ec1m3VnYGz;tN<8bOClXF7;5{_DE;V z>X7d~h4JIzTsXs4WylO?ehtvBYz{`)Fv+eAP*;OJwPCCd6QKV*Wg;-lKZhY3S3e_I z1|fG<|IE{tx-b|%4uaYIMz`6sxaGUh5v%@1R7kO}|58eb`hrFa`f{tu=6faKFUH69 z0+N}@+%p4rE-SXLkb-i8pjrc@Z~-ivw=RZ?3`F1<=pt1O&n-h#JTQI8<08PXph5gJ zP8T$;br?hsewUehZ#LtVMWq^gu2hy%y~-RxO?(@0%K)3Fx-D>FqR8<062=qT<{X04 ziOH;^sDW0ID!dchS!0qhKArmHa`-i?m5<;I(i^|`a;G?tg&VV=1+Q~XGWfiW_b0%d zcv!?$xX*9~0aV(UkdF|~<=NAJ0GXKF`fh4nWQQ}matHL_{CASLbdJp)&i)#?Pv}Ag zJTiD`NceOZd8G~SQepkT(|@3yAWO07klBss57Mh9AINQ2mzjfk;yC8Lq0enw{Kb6Y zcKW{!B-7Z|p~$Q(zj zsw;4SX<}X>Y8}<8%jR$LF%dMpPzWQ)ZmY{1X6rJL4>I%(WW6a)FUYkQ zWP|%}q~Xa6GLqTBY2nxm95bk!;*5{p)>fED$r25q190Ixa(CEm6v`0@Z zMT~+wksUXEBl}(1D64qWm}`jhw;pZ5daUv-?I=lJ6N}w*NzC;}Y;B*rHrnHVJlQV3 zbl%ERUvTc#64GwykSH^|L1o@_Mq`vu4rs70o^43k6 z;p-TjVEtv_OQQ@yq1^q{gUX8*i6%iU=y}ORwTo|@g_AVf+=r1gSAy*=rm>xgr2Dcs z`jm;+RGj+C9-PyvGKB$=q;<93uWNG4RKp%04qJz_I>gT;m2URxQSG0v6SJ6pQN- zW2dNbxbEL#@5uP*Wo?xMmdI(LDniF$vsD_Vfl+qkNpmdoa=`-8)+i?}RauAwbm-Uf zAIZ#bu+Pj6k_y2~`5W`Oy^_K!E$iG~oC?JOjk8&OMJTpjOx=1I>Srx@c7pr`=H9UZ z8mcl_7iesno$`ms^wm33|3MS3Fnx)zXD;;Y*FrlD=!a6a(`%wq9vr=-vZ3=YC`U@vTCW$D>ox}q0Y zI*f+#PEOBBFpEP^niXw;ADc!g_2o#Wc)-p)9k&rt41~2h+KxNR&XiIn;$qwd_MeMXtQN!cvz%T>6iG% z8tF*d2cS{S*Xi$1h9cIMgzaY-abB@#F@_SbTqOsUvX1eY3DW$2BN{jw)u zS@IsLnru(6A-6-d31?mQT7WYdYaj+I!3nwn;AUEuYK&*naH|R442L_JU*u>l`GC7z z^yIEsbj)!HOmvwE605m4%DrLq;##k1J&S$U+H|b#tTn?4&BC$COO+kSSamnIx(4rL zSj<};5P{`{hSAU67?rPg0``VCX|wCWyWDnX%3YU(0uu$K~D8vFkMcK-& z5Z)z0D(ZjW>d48FWHlY`pTM;Qor0P8OmKRdm<`wV`F0OsY%Afh?OGhzIdsCc7xz0y zjEPK{HZuyNz(&fTT|Z-AR1RGR^iJgf^ijAoNoAQpLswm|NU6%yP>^tgr6(S-Z;B@8 zf#0f-hQUuT`tgTshuCEaYGwpApe>E|-+gY0zSd_-j#Nq6 z{)?g?CQhoJUj_>i zvst+_BLi@}KekzPfw|BWX@x0z>zfJ}cP*>zUyta<9=^L=7BFf3N-N020|xwZ5-!2# z;CWqY8)bYFO}Cr}?zyT2EV7>Fe{Tr$G8X}RKl$`(W|*Zp=QU7h@D;u6R1}B{;&x<6 zkbB4W);*7z+y)M7aID>FepN3Ah>frl)Na2dN5bmZ0Y9~gO$TaYkL^ces(d&|eDPj3 z+bbG1_`P#u2H!g|K-=h4I3>`2`)bIp3v(wUM(h0d(;Itp2S9$e>#%Ys1y-f2vEUW= zTNR|Gzz)KUoB}C6J>st4 z4F4glcAY6eUiL8NhuQShvF1!rBP4y21*iG&@8a5)A?~4Ij(G^RK-woKp(yz-GPHi~ zmvsIVlx@o!!})|lG+Dsv&_Tj-!2Zxbeyxlx@JYICCl>livvG%nkX|_6WnC7n(<8zs zhW}!RBJ(}GHga#vu348H&J3u5#EJiBxa5p!w^)gOO4-LmQ?Fy0I1~QaCf?{8tT11; zeA|Ad8Y*17uFqTlp`q)ixcMi&&tZ-)JnW>Gtb9{;yy7WKHgXzlk({_?S{z~a7Q|#C zMtGl*OUiE7Qg4AryKt8$ z@e0mf{pgikUWVzrmWL<<9h=1lWAI}INfR3=;452tz+yUO?n^uIFmITJT~_}se0X}~ zh(3(33s1j5oSEg=qt^M6)Emxjx+IHV!IOhn2vGWGa%f#+Ut0|GBY(TYqlN}YQz|lv z9Cxp$)$j7L+S@$EmlnLpD?_?b{)aWKai5YmuJA7zLQzIvM$>Y~phl5Zdgq9lnG%vJ zK=UFbn~}eSWE1&MWZN>{eH7_S;Cp~PP@%fA|F_D2UVXRg z>iUO=aC>t@y{f=|aBwpKIa6B@^6xCuM9pZ;Y7tsD3X{j_z*CDuN>}@5Y95De<13}x z>+cKlu0}Iw7ikbHJ9-c}p|PNs9QZyHLZ^6Xl4W#g7M!)B`N!Y#ub1hhi$yl#r*ROSFW-@KEy@9I*f;!@`@n1s?= zCT-3l&#+?yk2U5V$mMkLXKGu>V=Ue}{Kz3jZjCH@ZjHn0TD#is$#O5Re>LlBYOymsh}z2&9tWiFY+H-22GAGD*_T^( z;k?aIMkj>WZ7+tZOe3TL zHz^OUek;e%?#~xacPB}g>(s-Y%w9)+&o0c5dsgQ_m9ydQ5y}1EQ8sfIlqA1e;s1vaGL4+<{COopfw?;~M*mmj zo`-qi*ph`P*18hz6^oY|XUe)}9AbaZI<9^q35&;uD3!YDMimmCxSD*A zCOvbGJ&a#J8F7b)vTb%kA!6{$WhcsO(L|yc)hr<}1v!7ew z?`(wl1|>URNBAftQ^nhqF0mhN^H0ZaX4K4S)QM<~((Q?s5RP&G&GH$|ftmsar)lEl z^EmOF5osn0&>SDmo}_~AD;#CKn-OY~p(TZgZNdfQ^_<@ffo$L$l-f?RX=j6=@#r$k zUbO3xepOlw-&>pCv3bI*A%NZQQb!ADcp!ck(^XJg;KOS{iiz6q{NXJ|t%?>8NmKq! z7uY@RZ#9WrA>6s5rA(A;F;i`D#8V$8b;Sv2GY5kzG)&}iYjV6Ch*mlfj!=mqNR)pk zdLWktggYj5dVNP8(n#i_yR#qB=e*{X<+QyWy9Xm4p)m{QJfu-AfeG!nB`QP>xe-g^ zow*-TYX?*kyYV%}2H{ElT(OEB&;|Z(eG&H~Uyx1h!WOcdmzBo!=I$anX>82b6R~j8 z-u)IJm>Sl_V1p>>jA8Y_Ve%B|3H#e|RaO;oJGjy8j3uQp)xR+YB3Prz|6q(3gLxvQ zQGzHfD(?Wr>6Llv+f`ZY2Cb2|BiaU&ugt~|mkEmr|6#6PxUc-9a9_c|+XjP9fe0F7 zzoSufl4apJH<~feJiUGlvx-W~pqhrlQ*|%-`;pRRfe7Vu1Y3$MiZ^ z=el}9o)(^2&uMw)_i=H&523TZT^!<)Pi$k7oZ!l;?J}T|Rt{UB=G4oQAxaB2r@uXI( zMbpmxB@O8EFguI^)oav&8RXF%q~6uJR4Y95`jhLdE1fp}8I4$fus7U$44;{r(V7tH zJ5X()k1gBzeh!_|#iIPpgUDP^Bm7`-8L!}MHt~@of;VjcsL@L^KycAlNK=?44~gs! z8ctSA5k-~jKQ|gzt4ql9&8JMa^C$m5P8zA3seW*Uf`Gt&0|9~b*GVH6S5I3rmzP7T ztLn><%PgpmSX(Gx6Vo%BDEz*Xey|+vITkb6k#d7+X{u?Xc)YWwpjL2WU$eVc&)CS| z;dPmQZ86=Nv>gXGq35ise7$_Rp?e(>@8`b}2_lgjte3<$!TP9Q&$!PwN_!AkK%vEm z&7-9Hvu@?5$Wih^QafJVa#0iq=}r-=7aQZW<*9ec<}iE8a$TPCjC$X=D!gYTNUiEH zhJ({dkO0}0<*IWtbmyyRX+AS$U3IsNar)`6b`#Pa$|#1IQ0Hl-y{1{d%J<4u9Rm`# z`!lx;+OmqHvxAq9(Q8uOZ!L8~oNaaPK@4twjK*o!n4}u|%x68LX=((cP3=|=94Q3D z1aLm|OJb+@9d39)DZk7B1L`ql?cW}x6>YQePVfZawrec8FdzlJSCvlWyd?b&W#a7$J9#v zxyost!aqb>Yj?W-qC439VMyy;sUN??F2}bn5BQ@V(YMK1A}~;>F(E~PHDo9;S3-03 z0|$|BGk@F()(vRcWMg@{f1%^IWC&Kf2}#z))Jom6^e+45hmWw?fm6&b}@|0m^0O`h;uhy;!r#E^}i31Lh8_}2(#S`YCZH-Ll- z_gJ~-;L-K}J_y$+c@WtJmL)b=qF{wW7&x2Rx-c`nyyqm!+C#A-3Rj|=8OW9NL9v!E zREdSZX^Pm(&*)1q>AM8QEOfoKM3a3602nJ#I6k`(x-1vk4zTp;E~>w)fT*#dH3T^2 zY0|xu6=wXx5&!*a0hM9*f^vwl*M6>1&gDV+5+UKB#ih>79Rc$S^5$D_Cb^85_M%e& zyX^D$3J_r?GpDlr@S*tKY0=ol)!X2elf&Om)Nm}l}o)a?Z21Be>QOCVLwJ&AMzN(noidJqjlzwnREK{wPMwI&7RDWiBCzcnP#=g-IgNG9o=(ffgqAp z2Rzpu0*GpJVXYViMx6Xw4TY)ESeTI;71jJ2G49*-kOeBqOU=(Bw_|G0oS)I7kQo7A zM%0SX*T3%v;sUqdXW0##%6+5iHH2f(d`f7X+-+s@sSIaYGv3u5uYo8}Xul*7Fn~*v zd_5{Q55M{aZKEE$$>Nu`>pd}saRCm`ol5jOrzO#E01lFXB&+|#1F-MH@v)~+7};7a3yP^%HIV+yI|D;=mBNo6d?=q#C!6I`#hocYhr-~2bt z><3#d6<~Vr!Bpe_Me|>h`k!R~mREg(0CEtR@k;a^2;8qTU!aPZ%CT_5Ki#4QzOOFp zIU?wWkRobf(E_G+UYlAlb3}UcDb4etUszI&m<=8hLlp24Vu{cFz@&<~%HMqJ`$l13 zr2e%P;d(a-Ud>RfoDw7QGwD*%{yV`6zc}tQ6c(RylCNT>v~)W<+qylrAkJ>>M4I?Q zngiXt8ij&@QFJusS5|Sg`$_&@g+gI^D@Pj5?|_m`6{H)N2b+I5nH4G;OaOLp9{R8A z2RdR7_O533t_G@}j%F@;FM6s-0>0>Jz@YHgM{9O&N8tmeX!^shH^F^+`MbHs4z3Py z%QZ5etC3P<^9MlJE)SGtjV3T-ycPoLo?@6JA;Pl(Nt&Ur0puU06wsfGa>AACo#8h9 zntf2|JfIX|ukdfZ>I1cp8O?x14*BpMBN&=vwZ*K}7HZAWllYVoTbmnKC^Bc_G|kRK z-2?A+9Yp~Vwc(_f^gmQ@yaJM=Lv86X+NB1q@@k>>Eg?ro@hw^qKiXmb{0xefm5GKg z7Zf_XhEVVsjhk&+N597a=W4m7#H6$88q|37%YFY16* z^ZO?N%<%udw(}?Y&pR@IVId#_AbbBO`ad^j{)GQ|ljL9c3V8Vc<6g<12L3!r{2v1i zfkdx=8~8uZ75{1F&sD;ItOP)YG5ogj@0#IH=${q*Unmvxf7SCpfqz!Se}O10|IGY9 z_3=;epLzZ-*p2l!`2Umjf7 set[str]: def build_cl_index(rows: list[dict]) -> dict[str, dict]: - """Return ``{cl_id: {label, positive: set, negative: set}}`` from TSV rows.""" + """Return ``{cl_id: {label, positive, negative, high, low}}`` from TSV rows. + + ``high``/``low`` track "has high/low plasma membrane amount" axioms + separately from plain ``positive``/``negative`` — both still mean the + marker is *expressed* (just at a given level), so they are never treated + as equivalent to ``negative`` (marker absent) during scoring. + """ index: dict[str, dict] = {} for row in rows: cl_id = row["cell"] @@ -67,13 +112,13 @@ def build_cl_index(rows: list[dict]) -> dict[str, dict]: "label": row["cell_label"], "positive": set(), "negative": set(), + "high": set(), + "low": set(), } sense = row.get("sense", "") cd_tokens = _parse_cd_synonyms(row.get("cd_synonym", "")) - if sense in ("positive", "high"): - index[cl_id]["positive"].update(cd_tokens) - elif sense in ("negative", "low"): - index[cl_id]["negative"].update(cd_tokens) + if sense in ("positive", "negative", "high", "low"): + index[cl_id][sense].update(cd_tokens) return index @@ -163,19 +208,183 @@ def extract_signed_markers(expr: str) -> list[tuple[str, str]]: return results +# A required/ideal marker "clause" for score_cl_terms: either a plain +# (MARKER, sense) tuple (a single required condition) or a list of such +# tuples — an OR-group satisfied by *any one* alternative, not all. +Clause = tuple[str, str] | list[tuple[str, str]] + + +def extract_marker_clauses(expr: str) -> list[Clause]: + """Tokenize *expr* into AND-joined clauses, modelling ``|`` as true OR. + + :func:`extract_signed_markers` flattens a ``|``-joined OR-group like + ``(CD193+|FceR1a+|HLA-DR-|CD303-)`` into four independently-**required** + markers — i.e. it silently turns "at least one of these" into "all of + these", which is wrong per MARKER_SYNTAX.md §1.4. That mistranslation + made scoring reject candidates that only need to satisfy one + alternative: ``CL:0000043`` (mature basophil) never scored as a match + for SOULCAP's Basophil profile, because CL doesn't assert *all four* + alternatives simultaneously — only some. + + This function fixes that for the common case: a bracket directly + containing ``|``-joined atoms that **each already carry their own + qualifier** (every real example in the current sheet looks like this) + is returned as one clause — a list of alternatives — instead of being + flattened. :func:`score_cl_terms` treats such a clause as satisfied if + *any* alternative matches, and contradicted only if *every* alternative + is actively contradicted. + + Scope: anything more complex — an unqualified member relying on a + group-level qualifier, a nested group, or a trailing qualifier negating + a compound AND-group (``[HLA-DR+ CD11chi]-``, MARKER_SYNTAX.md §1.6, + which needs De Morgan expansion) — falls back to flattening every leaf + as independently required, i.e. :func:`extract_signed_markers`'s + existing (imperfect but non-regressed) behaviour. + """ + try: + tokens = _tokenize(expr) + except Exception: # noqa: BLE001 + return [] + + # frames[d] holds items collected directly at nesting depth d (index 0 + # = top level). An item is ("leaf", marker, sense) or ("clause", alts). + frames: list[list[tuple]] = [[]] + saw_pipe: list[bool] = [False] + + i = 0 + n = len(tokens) + while i < n: + kind, text = tokens[i] + if kind == "WS": + i += 1 + elif kind == "|": + saw_pipe[-1] = True + i += 1 + elif kind in ("(", "["): + frames.append([]) + saw_pipe.append(False) + i += 1 + elif kind in (")", "]"): + if len(frames) <= 1: + # Unbalanced closing bracket with no matching open — nothing + # to pop; skip it (and any trailing qualifier) and keep the + # top-level frame intact, matching extract_signed_markers's + # leniency toward malformed input. + i += 1 + if i < n and tokens[i][0] == "WORD" and _is_qualifier(tokens[i][1]): + i += 1 + continue + items = frames.pop() + had_pipe = saw_pipe.pop() + i += 1 + group_qual = None + if i < n and tokens[i][0] == "WORD" and _is_qualifier(tokens[i][1]): + group_qual = tokens[i][1] + i += 1 + parent = frames[-1] + all_leaves = bool(items) and all(kind_ == "leaf" for kind_, *_ in items) + simple_group = group_qual is None or _qual_sense(group_qual) == "variable" + if had_pipe and all_leaves and simple_group: + parent.append(("clause", [(m, s) for _, m, s in items])) + else: + parent.extend(items) + elif kind == "WORD": + if text == GATE: + i += 1 + continue + try: + marker, qual = _split_word(text) + except Exception: # noqa: BLE001 + i += 1 + continue + if qual: + sense = _qual_sense(qual) + if sense != "variable": + frames[-1].append(("leaf", marker.upper(), sense)) + # else: truly unqualified — skip (matches extract_signed_markers) + i += 1 + else: + i += 1 + + # Unbalanced open brackets: flatten remaining frames into the top level. + while len(frames) > 1: + items = frames.pop() + frames[-1].extend(items) + + clauses: list[Clause] = [] + for kind_, *rest in frames[0]: + if kind_ == "leaf": + marker, sense = rest + clauses.append((marker, sense)) + else: + clauses.append(rest[0]) + return clauses + + +def _eval_alternative( + marker: str, + sense: str, + expressed: set[str], + absent: set[str], + high: set[str], + low: set[str], +) -> tuple[str, str]: + """Evaluate one (marker, sense) alternative against a CL term's axioms. + + Returns ``(status, display)`` where status is ``"matched"``, + ``"contradicted"``, or ``"gap"``. + """ + in_expressed = marker in expressed + in_absent = marker in absent + symbol = "+" if sense == "positive" else "-" + tag = " (hi)" if marker in high else " (dim)" if marker in low else "" + display = f"{marker}{symbol}{tag}" + if sense == "positive": + if in_expressed: + return "matched", display + if in_absent: + return "contradicted", display + return "gap", display + if in_absent: + return "matched", display + if in_expressed: + return "contradicted", display + return "gap", display + + # --------------------------------------------------------------------------- # # Scoring # --------------------------------------------------------------------------- # def score_cl_terms( cl_index: dict[str, dict], - required: list[tuple[str, str]], - ideal: list[tuple[str, str]], + required: list[Clause], + ideal: list[Clause], name_hints: set[str] | None = None, ) -> list[dict]: """Score every CL term and return a list of result dicts, best first. Each result dict has keys: ``cl_id``, ``label``, ``score``, - ``matched``, ``gaps``, ``contradictions``, ``hint_bonus``. + ``matched``, ``gaps``, ``contradictions``, ``hint_bonus``, + ``disqualified``. + + *required*/*ideal* are lists of :data:`Clause` — each a plain + ``(marker, sense)`` tuple (a single required condition) or a ``list`` of + such tuples (an OR-group from :func:`extract_marker_clauses`, satisfied + by *any one* alternative). A single-alternative clause behaves exactly + as a plain tuple always has. + + A contradiction on a *required* clause sets ``disqualified`` — that + candidate is sorted below every non-disqualified one regardless of raw + score, so shared negative-exclusion markers (common across many + unrelated lineages) can no longer pile up enough points to outrank a + candidate that outright conflicts with a required marker. For an + OR-group clause, "contradiction" only fires when *every* alternative is + actively contradicted — if even one alternative is unknown (a gap) or + matched, the group as a whole isn't disqualifying. A contradiction on an + *ideal* clause is never disqualifying — it still just subtracts + ``_IDEAL_WEIGHT`` — since ideal markers are soft signals. Disqualified + candidates are kept (not dropped) so a plausible-but-imperfect answer + still surfaces when nothing clean exists. *name_hints* is a set of lowercase words derived from ``--parent`` / ``--subset``; each word found in the CL label adds ``_HINT_BONUS`` to @@ -185,36 +394,51 @@ def score_cl_terms( results = [] for cl_id, entry in cl_index.items(): pos = entry["positive"] - neg = entry["negative"] + high = entry.get("high", set()) + low = entry.get("low", set()) + expressed = pos | high | low + absent = entry["negative"] score = 0 matched: list[str] = [] gaps: list[str] = [] contradictions: list[str] = [] - - for markers, weight in ((required, _REQUIRED_WEIGHT), (ideal, _IDEAL_WEIGHT)): - for marker, sense in markers: - in_pos = marker in pos - in_neg = marker in neg - symbol = "+" if sense == "positive" else "-" - display = f"{marker}{symbol}" - if sense == "positive": - if in_pos: - score += weight * 2 - matched.append(display) - elif in_neg: - score -= weight - contradictions.append(display) - else: - gaps.append(display) - else: # negative - if in_neg: - score += weight * 2 - matched.append(display) - elif in_pos: - score -= weight - contradictions.append(display) - else: - gaps.append(display) + disqualified = False + + for markers, weight, is_required in ( + (required, _REQUIRED_WEIGHT, True), + (ideal, _IDEAL_WEIGHT, False), + ): + for clause in markers: + alternatives = [clause] if isinstance(clause, tuple) else clause + statuses = [ + _eval_alternative(m, s, expressed, absent, high, low) + for m, s in alternatives + ] + matched_display = next( + (d for st, d in statuses if st == "matched"), None + ) + multi = len(alternatives) > 1 + if matched_display is not None: + score += weight * 2 + matched.append( + f"{matched_display} (1 of {len(alternatives)} alt.)" + if multi + else matched_display + ) + elif all(st == "contradicted" for st, _ in statuses): + score -= weight + disqualified = disqualified or is_required + contradictions.append( + "/".join(d for _, d in statuses) + " (all alt. conflict)" + if multi + else statuses[0][1] + ) + else: + gaps.append( + "/".join(d for _, d in statuses) + " (no axiom on any alt.)" + if multi + else statuses[0][1] + ) hint_bonus = 0 if hints: @@ -233,19 +457,326 @@ def score_cl_terms( "gaps": gaps, "contradictions": contradictions, "hint_bonus": hint_bonus, + "disqualified": disqualified, } ) - results.sort(key=lambda r: r["score"], reverse=True) + results.sort(key=lambda r: (r["disqualified"], -r["score"])) + return results + + +# --------------------------------------------------------------------------- # +# Batch mode — score every row of marker_combinations.csv in one pass +# --------------------------------------------------------------------------- # +def load_marker_combinations(path: Path) -> list[dict]: + """Load the synced SOULCAP ``Marker Combinations`` tab (sheet columns).""" + with path.open(encoding="utf-8", newline="") as fh: + return list(csv.DictReader(fh)) + + +def score_marker_combinations_row( + row: dict, + cl_index: dict[str, dict], + top_n: int = DEFAULT_BATCH_TOP, +) -> dict: + """Score one ``marker_combinations.csv`` row against every CL term. + + Returns a dict with the row's identity columns plus ``candidates`` — the + top *top_n* :func:`score_cl_terms` results — or an empty ``candidates`` + list and a ``note`` explaining why (e.g. no qualified markers found). + """ + abbreviation = row.get("Abbreviation", "").strip() + full_name = row.get("Full Name", "").strip() + parent = row.get("Parent", "").strip() + type_of_match = row.get("Type of Match", "").strip() + existing_cl_id = row.get("OLS CL identifier", "").strip() + + identity = { + "abbreviation": abbreviation, + "full_name": full_name, + "parent": parent, + "type_of_match": type_of_match, + "existing_cl_id": existing_cl_id, + } + + required = extract_marker_clauses( + row.get("Required exclusion", "") + ) + extract_marker_clauses(row.get("Required phenotypic markers", "")) + ideal = extract_marker_clauses( + row.get("Ideal exclusion", "") + ) + extract_marker_clauses(row.get("Ideal phenotypic markers", "")) + + if not required and not ideal: + return {**identity, "candidates": [], "note": "no qualified markers found"} + + hints = _hint_words(full_name, parent, abbreviation) + scored = score_cl_terms(cl_index, required, ideal, hints) + return {**identity, "candidates": scored[:top_n], "note": ""} + + +def run_batch( + rows: list[dict], + cl_index: dict[str, dict], + top_n: int = DEFAULT_BATCH_TOP, + ready_only: bool = False, +) -> list[dict]: + """Score every row (optionally filtered to ``Ready for OLS == yes``). + + Rows with no ``Abbreviation``/``Full Name`` at all are skipped (blank + sheet rows); every other row is scored, even if no marker could be + extracted, so gaps are visible in the output rather than silently + dropped. + """ + results = [] + for row in rows: + if ready_only and row.get("Ready for OLS", "").strip().lower() != "yes": + continue + if ( + not row.get("Abbreviation", "").strip() + and not row.get("Full Name", "").strip() + ): + continue + results.append(score_marker_combinations_row(row, cl_index, top_n)) + return results + + +def batch_results_to_tsv_rows(results: list[dict]) -> list[dict]: + """Flatten batch results into one output row per (cell type, candidate).""" + tsv_rows: list[dict] = [] + for r in results: + identity = { + k: r[k] + for k in ( + "abbreviation", + "full_name", + "parent", + "type_of_match", + "existing_cl_id", + ) + } + if not r["candidates"]: + tsv_rows.append( + { + **identity, + "rank": "", + "cl_id": "", + "cl_label": "", + "score": "", + "hint_bonus": "", + "matched": "", + "contradictions": "", + "gaps": "", + "disqualified": "", + "note": r["note"], + } + ) + continue + for rank, cand in enumerate(r["candidates"], 1): + tsv_rows.append( + { + **identity, + "rank": rank, + "cl_id": cand["cl_id"], + "cl_label": cand["label"], + "score": cand["score"], + "hint_bonus": cand["hint_bonus"], + "matched": ", ".join(cand["matched"]), + "contradictions": ", ".join(cand["contradictions"]), + "gaps": ", ".join(cand["gaps"]), + "disqualified": "yes" if cand.get("disqualified") else "no", + "note": "", + } + ) + return tsv_rows + + +def write_batch_tsv(path: Path, results: list[dict]) -> None: + """Write batch results to *path* as a TSV, one line per candidate.""" + path.parent.mkdir(parents=True, exist_ok=True) + with path.open("w", encoding="utf-8", newline="") as fh: + writer = csv.DictWriter( + fh, fieldnames=BATCH_TSV_FIELDS, delimiter="\t", lineterminator="\n" + ) + writer.writeheader() + writer.writerows(batch_results_to_tsv_rows(results)) + + +# --------------------------------------------------------------------------- # +# Lexical batch mode — name-based CL search via OLS4, as a complement to +# marker-axiom scoring (which can only rank CL terms already present in +# cl_pro_relationships.tsv — many CL terms, including "obvious" parent +# classes, have no marker axiom at all and are invisible to it). +# --------------------------------------------------------------------------- # +def _lexical_query_for_row(row: dict) -> str: + """Pick the best available search text for a row: Full Name, else Abbreviation.""" + full_name = row.get("Full Name", "").strip() + return full_name or row.get("Abbreviation", "").strip() + + +# OLS4's free-text relevance ranking does not reliably put an exact label +# match first — searching the literal label "Natural Killer Cell" ranks its +# own exact match (CL:0000623) 23rd, behind dozens of qualified subtype +# variants that merely share more words. Fetch a wider pool so an exact hit +# is likely present, then promote it. +_LEXICAL_FETCH_ROWS = 25 + + +def run_lexical_batch( + rows: list[dict], + top_n: int = DEFAULT_BATCH_TOP, + ready_only: bool = False, + sleep_between: float = 0.2, +) -> list[dict]: + """Search CL by name (OLS4) for every ``marker_combinations.csv`` row. + + Pure lexical similarity — no marker-conflict checking at all — so it + trades the false-positive risk of :func:`run_batch` for a different + failure mode (name collisions / no ranking by biological plausibility). + Meant to be read alongside marker-based results, not instead of them. + + An exact (case-insensitive) label match is promoted to rank 1 when + present in the fetched pool, since OLS4's own relevance order does not + do this (see :data:`_LEXICAL_FETCH_ROWS`). + """ + results = [] + for row in rows: + if ready_only and row.get("Ready for OLS", "").strip().lower() != "yes": + continue + abbreviation = row.get("Abbreviation", "").strip() + full_name = row.get("Full Name", "").strip() + if not abbreviation and not full_name: + continue + + identity = { + "abbreviation": abbreviation, + "full_name": full_name, + "parent": row.get("Parent", "").strip(), + "type_of_match": row.get("Type of Match", "").strip(), + "existing_cl_id": row.get("OLS CL identifier", "").strip(), + } + + query = _lexical_query_for_row(row) + if not query: + results.append({**identity, "candidates": [], "note": "no name to search"}) + continue + + if sleep_between > 0: + time.sleep(sleep_between) + try: + hits = ols4_lookup.search( + query, ontology="cl", rows=max(top_n, _LEXICAL_FETCH_ROWS) + ) + except Exception as exc: # noqa: BLE001 + results.append( + {**identity, "candidates": [], "note": f"OLS4 search failed: {exc}"} + ) + continue + + candidates = [ + {"cl_id": h["obo_id"], "label": h["label"]} + for h in hits + if h.get("obo_id", "").startswith("CL:") + ] + query_lower = query.strip().lower() + candidates.sort(key=lambda c: c["label"].strip().lower() != query_lower) + candidates = candidates[:top_n] + note = "" if candidates else "no CL hits" + results.append({**identity, "candidates": candidates, "note": note}) return results +def merge_marker_and_lexical( + marker_results: list[dict], + lexical_results: list[dict], +) -> list[dict]: + """Combine marker-based and lexical-based top-1 picks into an agreement report. + + ``agreement == "yes"`` (both approaches converge on the same CL ID) is a + much stronger signal than either approach alone — it means the pick + survives both a marker-axiom check and an independent name-similarity + check. + """ + lexical_by_key = {r["abbreviation"]: r for r in lexical_results} + merged = [] + for m in marker_results: + lex = lexical_by_key.get(m["abbreviation"], {"candidates": [], "note": ""}) + marker_top = m["candidates"][0] if m["candidates"] else None + lexical_top = lex["candidates"][0] if lex["candidates"] else None + agreement = bool( + marker_top and lexical_top and marker_top["cl_id"] == lexical_top["cl_id"] + ) + merged.append( + { + "abbreviation": m["abbreviation"], + "full_name": m["full_name"], + "parent": m["parent"], + "type_of_match": m["type_of_match"], + "existing_cl_id": m["existing_cl_id"], + "marker_cl_id": marker_top["cl_id"] if marker_top else "", + "marker_cl_label": marker_top["label"] if marker_top else "", + "marker_score": marker_top["score"] if marker_top else "", + "marker_conflict": ( + ", ".join(marker_top["contradictions"]) if marker_top else "" + ), + "marker_note": m["note"], + "lexical_cl_id": lexical_top["cl_id"] if lexical_top else "", + "lexical_cl_label": lexical_top["label"] if lexical_top else "", + "lexical_note": lex["note"], + "agreement": "yes" if agreement else "no", + } + ) + return merged + + +AGREEMENT_TSV_FIELDS = [ + "abbreviation", + "full_name", + "parent", + "type_of_match", + "existing_cl_id", + "marker_cl_id", + "marker_cl_label", + "marker_score", + "marker_conflict", + "marker_note", + "lexical_cl_id", + "lexical_cl_label", + "lexical_note", + "agreement", +] + + +def write_agreement_tsv(path: Path, merged_rows: list[dict]) -> None: + """Write the marker/lexical agreement report to *path* as a TSV.""" + path.parent.mkdir(parents=True, exist_ok=True) + with path.open("w", encoding="utf-8", newline="") as fh: + writer = csv.DictWriter( + fh, fieldnames=AGREEMENT_TSV_FIELDS, delimiter="\t", lineterminator="\n" + ) + writer.writeheader() + writer.writerows(merged_rows) + + # --------------------------------------------------------------------------- # # Formatting # --------------------------------------------------------------------------- # +def _format_clause(clause: Clause) -> str: + """Render a Clause for CLI display: ``MARKER+``/``-``, or ``(A+|B-)`` for + an OR-group.""" + if isinstance(clause, tuple): + marker, sense = clause + return f"{marker}{'+' if sense == 'positive' else '-'}" + return "(" + "|".join(_format_clause(alt) for alt in clause) + ")" + + def format_result(rank: int, r: dict) -> str: hint_tag = f" +{r['hint_bonus']} name" if r.get("hint_bonus") else "" - lines = [f" {rank}. {r['cl_id']} {r['label']} [score: {r['score']}{hint_tag}]"] + dq_tag = ( + " [DISQUALIFIED: required-marker conflict]" if r.get("disqualified") else "" + ) + lines = [ + f" {rank}. {r['cl_id']} {r['label']} [score: {r['score']}{hint_tag}]{dq_tag}" + ] if r["matched"]: lines.append(f" Matched: {', '.join(r['matched'])}") if r["contradictions"]: @@ -302,8 +833,9 @@ def main(argv: list[str] | None = None) -> int: parser.add_argument( "--top", type=int, - default=DEFAULT_TOP, - help=f"Number of top results to show (default: {DEFAULT_TOP}).", + default=None, + help=f"Number of top results per cell type " + f"(default: {DEFAULT_TOP}, or {DEFAULT_BATCH_TOP} in --batch mode).", ) parser.add_argument( "--tsv", @@ -311,9 +843,45 @@ def main(argv: list[str] | None = None) -> int: default=DEFAULT_TSV, help="Path to cl_pro_relationships.tsv.", ) + parser.add_argument( + "--batch", + nargs="?", + const=str(DEFAULT_MARKER_COMBINATIONS), + default=None, + metavar="PATH", + help="Score every row of marker_combinations.csv instead of a single " + f"profile (default path: {DEFAULT_MARKER_COMBINATIONS}).", + ) + parser.add_argument( + "--batch-out", + type=Path, + default=DEFAULT_BATCH_OUT, + metavar="PATH", + help=f"Batch-mode output TSV path (default: {DEFAULT_BATCH_OUT}).", + ) + parser.add_argument( + "--ready-only", + action="store_true", + help="Batch mode: only score rows with 'Ready for OLS' == yes.", + ) + parser.add_argument( + "--lexical", + action="store_true", + help="Batch mode: also run a name-based OLS4 CL search per row and " + "write a marker/lexical agreement report (see --agreement-out).", + ) + parser.add_argument( + "--agreement-out", + type=Path, + default=DEFAULT_AGREEMENT_OUT, + metavar="PATH", + help=f"--lexical output TSV path (default: {DEFAULT_AGREEMENT_OUT}).", + ) args = parser.parse_args(argv) - if not any([args.req_excl, args.ideal_excl, args.req_pheno, args.ideal_pheno]): + if args.batch is None and not any( + [args.req_excl, args.ideal_excl, args.req_pheno, args.ideal_pheno] + ): parser.print_help() return 2 @@ -324,14 +892,58 @@ def main(argv: list[str] | None = None) -> int: ) return 1 + if args.batch is not None: + combos_path = Path(args.batch) + if not combos_path.exists(): + print( + f"error: {combos_path} not found — run `soulcap-sync` to regenerate it.", + file=sys.stderr, + ) + return 1 + top_n = args.top if args.top is not None else DEFAULT_BATCH_TOP + try: + rows = load_tsv(args.tsv) + cl_index = build_cl_index(rows) + combo_rows = load_marker_combinations(combos_path) + results = run_batch( + combo_rows, cl_index, top_n=top_n, ready_only=args.ready_only + ) + write_batch_tsv(args.batch_out, results) + unscored = sum(1 for r in results if not r["candidates"]) + print( + f"Scored {len(results)} SOULCAP cell types against " + f"{len(cl_index)} CL terms ({unscored} had no qualified markers)." + ) + print(f"Wrote {args.batch_out}") + + if args.lexical: + print("Running lexical OLS4 search per cell type (rate-limited)...") + lexical_results = run_lexical_batch( + combo_rows, top_n=top_n, ready_only=args.ready_only + ) + merged = merge_marker_and_lexical(results, lexical_results) + write_agreement_tsv(args.agreement_out, merged) + agree = sum(1 for m in merged if m["agreement"] == "yes") + print( + f"Marker/lexical agreement: {agree}/{len(merged)} cell types " + "converge on the same CL term." + ) + print(f"Wrote {args.agreement_out}") + except Exception as exc: # noqa: BLE001 + print(f"error: {exc}", file=sys.stderr) + return 1 + return 0 + + top_n = args.top if args.top is not None else DEFAULT_TOP + try: rows = load_tsv(args.tsv) cl_index = build_cl_index(rows) - required = extract_signed_markers(args.req_excl) + extract_signed_markers( + required = extract_marker_clauses(args.req_excl) + extract_marker_clauses( args.req_pheno ) - ideal = extract_signed_markers(args.ideal_excl) + extract_signed_markers( + ideal = extract_marker_clauses(args.ideal_excl) + extract_marker_clauses( args.ideal_pheno ) @@ -348,10 +960,8 @@ def main(argv: list[str] | None = None) -> int: header_parts.append(f"subset={args.subset!r}") header_tag = f" [{', '.join(header_parts)}]" if header_parts else "" - req_str = ", ".join( - f"{m}{'+' if s == 'positive' else '-'}" for m, s in required - ) - ideal_str = ", ".join(f"{m}{'+' if s == 'positive' else '-'}" for m, s in ideal) + req_str = ", ".join(_format_clause(c) for c in required) + ideal_str = ", ".join(_format_clause(c) for c in ideal) print(f"Scoring {len(cl_index)} CL terms{header_tag}:") if req_str: print(f" Required : {req_str}") @@ -362,7 +972,7 @@ def main(argv: list[str] | None = None) -> int: print() scored = score_cl_terms(cl_index, required, ideal, hints) - for i, result in enumerate(scored[: args.top], 1): + for i, result in enumerate(scored[:top_n], 1): print(format_result(i, result)) print() diff --git a/src/soulcap_cl_mapping/hgnc_map.py b/src/soulcap_cl_mapping/hgnc_map.py index 54586e9..fa2f6ca 100644 --- a/src/soulcap_cl_mapping/hgnc_map.py +++ b/src/soulcap_cl_mapping/hgnc_map.py @@ -36,6 +36,7 @@ REPO_ROOT = Path(__file__).resolve().parents[2] DEFAULT_TSV = REPO_ROOT / "reports" / "cl_pro_relationships.tsv" +DEFAULT_OVERRIDES = REPO_ROOT / "marker_mappings" / "pr_uniprot_overrides.csv" # Monarch Node Normalizer — accepts repeated ``?curie=`` query parameters and # returns a JSON object keyed by input CURIE. @@ -130,7 +131,32 @@ def strip_isoform_suffix(curie: str) -> str: return f"{prefix}:{base}" -def collect_pr_mappings(rows: list[dict[str, str]]) -> dict[str, str]: +def load_overrides(path: Path = DEFAULT_OVERRIDES) -> dict[str, str]: + """Load manual PR → UniProt overrides from a CSV file. + + The file must have ``pr`` and ``uniprot_human`` columns. Missing or + non-existent files are silently ignored (returns empty dict). + + Returns + ------- + dict[str, str] + ``{"PR:000001479": "UniProtKB:P12318", ...}`` + """ + if not path.exists(): + return {} + with open(path, encoding="utf-8", newline="") as fh: + reader = csv.DictReader(fh) + return { + row["pr"]: strip_isoform_suffix(row["uniprot_human"]) + for row in reader + if row.get("pr") and row.get("uniprot_human") + } + + +def collect_pr_mappings( + rows: list[dict[str, str]], + overrides: dict[str, str] | None = None, +) -> dict[str, str]: """Collect unique PR CURIE → first human UniProt CURIE (or "") from the rows. De-duplicates by PR: the first occurrence wins. If ``uniprot_human`` @@ -138,6 +164,10 @@ def collect_pr_mappings(rows: list[dict[str, str]]) -> dict[str, str]: Isoform suffixes (e.g. ``-1``, ``-2``) are stripped before returning so that the Monarch Node Normalizer receives canonical accessions. + Manual *overrides* (from ``marker_mappings/pr_uniprot_overrides.csv``) are + applied after the TSV scan: any PR whose UniProt slot is still empty gets + filled from the override table. + Returns ------- dict[str, str] @@ -151,6 +181,12 @@ def collect_pr_mappings(rows: list[dict[str, str]]) -> dict[str, str]: uniprot_human = row.get("uniprot_human", "") first_up = uniprot_human.split(";")[0].strip() if uniprot_human else "" pr_to_uniprot[pr] = strip_isoform_suffix(first_up) if first_up else "" + + if overrides: + for pr, uniprot in overrides.items(): + if pr in pr_to_uniprot and not pr_to_uniprot[pr]: + pr_to_uniprot[pr] = uniprot + return pr_to_uniprot @@ -313,6 +349,7 @@ def write_tsv(path: Path, headers: list[str], rows: list[dict[str, str]]) -> Non def run( tsv_path: Path = DEFAULT_TSV, + overrides_path: Path = DEFAULT_OVERRIDES, dry_run: bool = False, session: requests.Session | None = None, url: str = MONARCH_URL, @@ -326,7 +363,13 @@ def run( print(f"Reading {tsv_path} ...") headers, rows = load_tsv(tsv_path) - pr_to_uniprot = collect_pr_mappings(rows) + overrides = load_overrides(overrides_path) + if overrides: + print( + f"Loaded {len(overrides)} manual UniProt override(s) from {overrides_path}." + ) + + pr_to_uniprot = collect_pr_mappings(rows, overrides=overrides) unique_prs = len(pr_to_uniprot) n_with_uniprot = sum(1 for v in pr_to_uniprot.values() if v) n_without_uniprot = unique_prs - n_with_uniprot diff --git a/src/soulcap_cl_mapping/marker_map.py b/src/soulcap_cl_mapping/marker_map.py index 2117869..6b48550 100644 --- a/src/soulcap_cl_mapping/marker_map.py +++ b/src/soulcap_cl_mapping/marker_map.py @@ -324,6 +324,36 @@ def search_ols4_pr( return None +def fetch_pr_by_uniprot( + uniprot_id: str, + session: requests.Session, + ols4_url: str = OLS4_BASE, +) -> dict[str, str] | None: + """Fetch the PRO term for a human UniProt accession (``PR:``). + + PRO mints organism-specific protein terms as ``PR:``. + This is far more reliable than a free-text gene-symbol search against the + PR ontology, which tends to surface isoform/receptor noise instead of the + plain gene product (e.g. searching "IL4" or "interleukin-4" never + surfaces ``PR:P05112`` itself). Returns ``None`` if PRO has no term for + this accession, or if *uniprot_id* is empty. + """ + if not uniprot_id: + return None + iri = f"http://purl.obolibrary.org/obo/PR_{uniprot_id}" + resp = session.get( + f"{ols4_url}/ontologies/pr/terms", params={"iri": iri}, timeout=30 + ) + if resp.status_code == 404: + return None + resp.raise_for_status() + terms = resp.json().get("_embedded", {}).get("terms", []) + if not terms: + return None + term = terms[0] + return {"pr_id": term.get("obo_id", ""), "pr_label": term.get("label", "")} + + def fetch_hgnc_by_symbol( symbol: str, session: requests.Session, @@ -547,9 +577,10 @@ def resolve_group4( gene_symbol: str, session: requests.Session, hgnc_url: str = HGNC_REST_URL, + ols4_url: str = OLS4_BASE, sleep_between: float = 0.2, ) -> dict[str, str]: - """Resolve a Group 4 cytokine token via the HGNC REST API.""" + """Resolve a Group 4 cytokine token via the HGNC REST API, then PRO.""" hgnc_data = fetch_hgnc_by_symbol(gene_symbol, session, hgnc_url=hgnc_url) if sleep_between > 0: @@ -561,12 +592,22 @@ def resolve_group4( protein_name = hgnc_data["name"] if hgnc_data else "" evidence = f"{hgnc_url}/fetch/symbol/{gene_symbol}" + pr_id = pr_label = "" + if uniprot_id: + if sleep_between > 0: + time.sleep(sleep_between) + pr_result = fetch_pr_by_uniprot(uniprot_id, session, ols4_url=ols4_url) + if pr_result: + pr_id = pr_result["pr_id"] + pr_label = pr_result["pr_label"] + evidence += f"; {ols4_url}/ontologies/pr/terms?iri=obo:PR_{uniprot_id}" + return { "marker_token": token, "marker_synonyms": "", "source_columns": source_columns, - "pro_id": "", - "pro_label": "", + "pro_id": pr_id, + "pro_label": pr_label, "uniprot_id": uniprot_id, "uniprot_label": protein_name, "gene_symbol": approved_symbol, @@ -586,9 +627,16 @@ def resolve_group6_gene_token( extra_notes: str, session: requests.Session, hgnc_url: str = HGNC_REST_URL, + ols4_url: str = OLS4_BASE, sleep_between: float = 0.2, ) -> dict[str, str]: - """Resolve a Group 6 TCR gene token via the HGNC REST API.""" + """Resolve a Group 6 TCR gene token via the HGNC REST API, then PRO. + + Germline TCR V/D/J gene segments don't all have a PRO entry (PRO tends to + catalog the rearranged/assembled chain, not every germline segment), so a + PRO hit here is a bonus, not a requirement — a miss keeps confidence at + the pre-existing "medium" level established by the gene mapping alone. + """ hgnc_data = fetch_hgnc_by_symbol(imgt_gene, session, hgnc_url=hgnc_url) if sleep_between > 0: @@ -596,8 +644,19 @@ def resolve_group6_gene_token( hgnc_id = hgnc_data["hgnc_id"] if hgnc_data else "" approved_symbol = hgnc_data["gene_symbol"] if hgnc_data else imgt_gene + uniprot_id = hgnc_data["uniprot_id"] if hgnc_data else "" evidence = f"{hgnc_url}/fetch/symbol/{imgt_gene}" + pr_id = pr_label = "" + if uniprot_id: + if sleep_between > 0: + time.sleep(sleep_between) + pr_result = fetch_pr_by_uniprot(uniprot_id, session, ols4_url=ols4_url) + if pr_result: + pr_id = pr_result["pr_id"] + pr_label = pr_result["pr_label"] + evidence += f"; {ols4_url}/ontologies/pr/terms?iri=obo:PR_{uniprot_id}" + base_note = f"IMGT nomenclature: {imgt_gene}" notes = f"{base_note}; {extra_notes}" if extra_notes else base_note @@ -605,10 +664,10 @@ def resolve_group6_gene_token( "marker_token": token, "marker_synonyms": "", "source_columns": source_columns, - "pro_id": "", - "pro_label": "", - "uniprot_id": "", - "uniprot_label": "", + "pro_id": pr_id, + "pro_label": pr_label, + "uniprot_id": uniprot_id, + "uniprot_label": pr_label, "gene_symbol": approved_symbol, "hgnc_id": hgnc_id, "ncbi_gene_id": "", @@ -624,9 +683,10 @@ def resolve_group7_mr1( source_columns: str, session: requests.Session, hgnc_url: str = HGNC_REST_URL, + ols4_url: str = OLS4_BASE, sleep_between: float = 0.2, ) -> dict[str, str]: - """Resolve MR1 (MHC-related protein 1) via the HGNC REST API.""" + """Resolve MR1 (MHC-related protein 1) via the HGNC REST API, then PRO.""" hgnc_data = fetch_hgnc_by_symbol("MR1", session, hgnc_url=hgnc_url) if sleep_between > 0: @@ -638,12 +698,22 @@ def resolve_group7_mr1( protein_name = hgnc_data["name"] if hgnc_data else "" evidence = f"{hgnc_url}/fetch/symbol/MR1" + pr_id = pr_label = "" + if uniprot_id: + if sleep_between > 0: + time.sleep(sleep_between) + pr_result = fetch_pr_by_uniprot(uniprot_id, session, ols4_url=ols4_url) + if pr_result: + pr_id = pr_result["pr_id"] + pr_label = pr_result["pr_label"] + evidence += f"; {ols4_url}/ontologies/pr/terms?iri=obo:PR_{uniprot_id}" + return { "marker_token": token, "marker_synonyms": "", "source_columns": source_columns, - "pro_id": "", - "pro_label": "", + "pro_id": pr_id, + "pro_label": pr_label, "uniprot_id": uniprot_id, "uniprot_label": protein_name, "gene_symbol": approved_symbol, @@ -776,6 +846,7 @@ def run( gene_sym, sess, hgnc_url=hgnc_url, + ols4_url=ols4_url, sleep_between=sleep_between, ) output_rows.append(row) @@ -801,6 +872,7 @@ def run( extra, sess, hgnc_url=hgnc_url, + ols4_url=ols4_url, sleep_between=sleep_between, ) output_rows.append(row) @@ -854,6 +926,7 @@ def run( sc, sess, hgnc_url=hgnc_url, + ols4_url=ols4_url, sleep_between=sleep_between, ) else: diff --git a/tests/test_cl_match.py b/tests/test_cl_match.py index a9da592..d72d3b2 100644 --- a/tests/test_cl_match.py +++ b/tests/test_cl_match.py @@ -4,6 +4,7 @@ import csv from pathlib import Path +from unittest.mock import patch from soulcap_cl_mapping import cl_match as cm @@ -129,6 +130,96 @@ def test_extract_invalid_expr(): assert cm.extract_signed_markers("((((") == [] +# --------------------------------------------------------------------------- # +# extract_marker_clauses +# --------------------------------------------------------------------------- # +def test_clauses_single_markers_stay_plain_tuples(): + result = cm.extract_marker_clauses("CD14- CD3- CD19-") + assert result == [("CD14", "negative"), ("CD3", "negative"), ("CD19", "negative")] + for clause in result: + assert isinstance(clause, tuple) + + +def test_clauses_or_group_of_qualified_atoms_becomes_one_clause(): + # Regression: this must NOT flatten to 4 independently-required markers. + result = cm.extract_marker_clauses("(CD193+|FceR1a+|HLA-DR-|CD303-)") + assert len(result) == 1 + clause = result[0] + assert isinstance(clause, list) + assert set(clause) == { + ("CD193", "positive"), + ("FCER1A", "positive"), + ("HLA-DR", "negative"), + ("CD303", "negative"), + } + + +def test_clauses_and_of_plain_and_or_group(): + result = cm.extract_marker_clauses("CD45+ (CD33+|CD123+) CD3-") + assert ("CD45", "positive") in result + assert ("CD3", "negative") in result + or_clauses = [c for c in result if isinstance(c, list)] + assert len(or_clauses) == 1 + assert set(or_clauses[0]) == {("CD33", "positive"), ("CD123", "positive")} + + +def test_clauses_multiple_or_groups_stay_separate(): + result = cm.extract_marker_clauses("(CD33+|CD123+) (CD193+|FceR1a+)") + or_clauses = [c for c in result if isinstance(c, list)] + assert len(or_clauses) == 2 + + +def test_clauses_group_without_pipe_flattens_like_old_behaviour(): + # No "|" seen directly in the bracket -> not an OR-group, falls back to + # flattening (matches extract_signed_markers's existing behaviour). + result = cm.extract_marker_clauses("(CD14- CD33-)") + assert ("CD14", "negative") in result + assert ("CD33", "negative") in result + assert not any(isinstance(c, list) for c in result) + + +def test_clauses_bracket_group_qualifier_falls_back_no_regression(): + # [HLA-DR+ CD11chi]- (De Morgan negation of a compound group) is out of + # scope — must fall back to flattening each leaf with its own qualifier, + # same as extract_signed_markers, not crash or misbehave. + result = cm.extract_marker_clauses("[HLA-DR+ CD11chi]-") + assert ("HLA-DR", "positive") in result + assert ("CD11C", "positive") in result + assert not any(isinstance(c, list) for c in result) + + +def test_clauses_skips_gate(): + result = cm.extract_marker_clauses("live/ CD45+ CD56+") + plain = {c for c in result if isinstance(c, tuple)} + assert ("CD45", "positive") in plain + assert ("CD56", "positive") in plain + + +def test_clauses_empty_expr(): + assert cm.extract_marker_clauses("") == [] + + +def test_clauses_invalid_expr_does_not_raise(): + assert cm.extract_marker_clauses("((((") == [] + + +def test_clauses_unbalanced_closing_bracket_does_not_raise(): + assert cm.extract_marker_clauses("CD45+)") is not None + + +def test_clauses_nested_or_degrades_gracefully_no_crash(): + # Nested OR-in-OR is beyond the modelled scope; must not crash or lose + # data silently — some reasonable clause set should still come back. + result = cm.extract_marker_clauses("((CD14+|CD33+)|CD3-)") + all_markers = set() + for c in result: + if isinstance(c, tuple): + all_markers.add(c[0]) + else: + all_markers.update(m for m, _ in c) + assert {"CD14", "CD33", "CD3"} <= all_markers + + # --------------------------------------------------------------------------- # # build_cl_index # --------------------------------------------------------------------------- # @@ -158,6 +249,18 @@ def test_build_cl_index_ignores_other_senses(tmp_path): assert index["CL:1"]["negative"] == set() +def test_build_cl_index_tracks_high_and_low_separately(tmp_path): + rows = [ + _row("CL:0000939", "CD56-dim NK cell", "low", "CD56 (exact)"), + _row("CL:0000938", "CD56-bright NK cell", "high", "CD56 (exact)"), + ] + index = cm.build_cl_index(rows) + assert index["CL:0000939"]["low"] == {"CD56"} + assert index["CL:0000939"]["negative"] == set() + assert index["CL:0000938"]["high"] == {"CD56"} + assert index["CL:0000938"]["negative"] == set() + + # --------------------------------------------------------------------------- # # _hint_words # --------------------------------------------------------------------------- # @@ -258,6 +361,274 @@ def test_score_sorted_best_first(): assert results[0]["cl_id"] == "CL:0000623" +def test_score_required_contradiction_disqualifies_despite_higher_raw_score(): + # Regression: a candidate with a required-marker conflict (e.g. "T cell" + # scored against a term that actually says CD3-negative) must not outrank + # a clean candidate just because it also matches several shared + # exclusion markers. Mirrors the real "T cell" -> hematopoietic stem + # cell / "Basophil" -> basophilic myelocyte false positives. + index = { + "CL:CONFLICTED": { + # Matches CD14-/CD19- (shared negatives) but explicitly says CD3+ + # while the query wants CD3- -> contradiction on a required marker. + "label": "conflicted term", + "positive": {"CD3"}, + "negative": {"CD14", "CD19"}, + }, + "CL:CLEAN": { + # Matches only one required marker, no conflicts at all. + "label": "clean term", + "positive": set(), + "negative": {"CD14"}, + }, + } + required = [("CD14", "negative"), ("CD19", "negative"), ("CD3", "negative")] + results = cm.score_cl_terms(index, required, []) + + conflicted = next(r for r in results if r["cl_id"] == "CL:CONFLICTED") + clean = next(r for r in results if r["cl_id"] == "CL:CLEAN") + + # Raw score check: conflicted term still scores higher on paper... + assert conflicted["score"] > clean["score"] + assert conflicted["disqualified"] is True + assert clean["disqualified"] is False + # ...but disqualification must place it below the clean candidate anyway. + assert results.index(clean) < results.index(conflicted) + assert results[0]["cl_id"] == "CL:CLEAN" + + +def test_score_ideal_contradiction_not_disqualifying(): + index = { + "CL:A": { + "label": "a term", + "positive": {"CD57"}, # conflicts with an ideal CD57- request + "negative": set(), + } + } + ideal = [("CD57", "negative")] + results = cm.score_cl_terms(index, [], ideal) + assert results[0]["contradictions"] == ["CD57-"] + assert results[0]["disqualified"] is False + + +def test_score_all_disqualified_still_returns_best_available(): + index = { + "CL:WORSE": { + "label": "worse conflicted", + "positive": {"CD3"}, + "negative": set(), + }, + "CL:BETTER": { + "label": "better conflicted", + "positive": {"CD3"}, + "negative": {"CD14"}, + }, + } + required = [("CD3", "negative"), ("CD14", "negative")] + results = cm.score_cl_terms(index, required, []) + assert all(r["disqualified"] for r in results) + assert results[0]["cl_id"] == "CL:BETTER" # best among the disqualified + + +def test_format_result_shows_disqualified_tag(): + r = { + "cl_id": "CL:1", + "label": "foo", + "score": 5, + "matched": [], + "gaps": [], + "contradictions": ["CD3-"], + "hint_bonus": 0, + "disqualified": True, + } + out = cm.format_result(1, r) + assert "DISQUALIFIED" in out + + +# --------------------------------------------------------------------------- # +# score_cl_terms — OR-group clauses +# --------------------------------------------------------------------------- # +def test_score_or_group_matches_via_any_alternative(): + # CL only asserts one of the four alternatives (CD193 high) — the group + # must still be satisfied, not scored as three gaps and no credit. + index = { + "CL:X": { + "label": "x", + "positive": set(), + "negative": set(), + "high": {"CD193"}, + "low": set(), + } + } + or_group = [ + ("CD193", "positive"), + ("FCER1A", "positive"), + ("HLA-DR", "negative"), + ("CD303", "negative"), + ] + results = cm.score_cl_terms(index, [or_group], []) + r = results[0] + assert r["disqualified"] is False + assert r["contradictions"] == [] + assert any("CD193+" in m for m in r["matched"]) + assert r["score"] > 0 + + +def test_score_or_group_all_contradicted_disqualifies(): + index = { + "CL:X": { + "label": "x", + "positive": {"HLA-DR", "CD303"}, # contradicts the negative alts + "negative": {"CD193", "FCER1A"}, # contradicts the positive alts + "high": set(), + "low": set(), + } + } + or_group = [ + ("CD193", "positive"), + ("FCER1A", "positive"), + ("HLA-DR", "negative"), + ("CD303", "negative"), + ] + results = cm.score_cl_terms(index, [or_group], []) + r = results[0] + assert r["disqualified"] is True + assert r["matched"] == [] + assert r["contradictions"] != [] + + +def test_score_or_group_gap_when_no_info_on_any_alternative(): + index = {"CL:X": {"label": "x", "positive": set(), "negative": set()}} + or_group = [("CD193", "positive"), ("FCER1A", "positive")] + results = cm.score_cl_terms(index, [or_group], []) + r = results[0] + assert r["disqualified"] is False + assert r["matched"] == [] + assert r["contradictions"] == [] + assert len(r["gaps"]) == 1 + + +def test_score_or_group_not_disqualified_when_one_alt_is_unknown(): + # One alternative contradicted, one alternative unknown (gap), none + # matched -> not a confirmed "all contradicted", so not disqualifying. + index = { + "CL:X": { + "label": "x", + "positive": set(), + "negative": {"CD193"}, # contradicts CD193+ + "high": set(), + "low": set(), + } + } + or_group = [("CD193", "positive"), ("FCER1A", "positive")] # FCER1A unknown + results = cm.score_cl_terms(index, [or_group], []) + r = results[0] + assert r["disqualified"] is False + + +def test_score_or_group_single_alternative_behaves_like_plain_tuple(): + index = { + "CL:A": {"label": "a", "positive": set(), "negative": {"CD3"}}, + } + from_list = cm.score_cl_terms(index, [[("CD3", "negative")]], [])[0] + from_tuple = cm.score_cl_terms(index, [("CD3", "negative")], [])[0] + assert from_list["score"] == from_tuple["score"] + assert from_list["matched"] == from_tuple["matched"] + assert from_list["disqualified"] == from_tuple["disqualified"] + + +def test_score_basophil_or_group_matches_mature_basophil_end_to_end(): + # Reproduces the real bug: CL:0000043 mature basophil was never a + # candidate for SOULCAP's Basophil profile because the OR-group + # (CD193+|FceR1a+|HLA-DR-|CD303-) was flattened into four required + # markers. With clause-aware extraction + scoring it must now match. + index = { + "CL:0000043": { + "label": "mature basophil", + "positive": set(), + "negative": {"CD19", "CD3", "CD8"}, + "high": {"CD193", "FCER1A", "CD123"}, + "low": set(), + } + } + required = ( + cm.extract_marker_clauses("CD3-") + + cm.extract_marker_clauses("(CD33+|CD123+)") + + cm.extract_marker_clauses("(CD193+|FceR1a+|HLA-DR-|CD303-)") + ) + results = cm.score_cl_terms(index, required, []) + r = results[0] + assert r["disqualified"] is False + assert r["score"] > 0 + # CD3- and the CD123+ alternative and the CD193+ alternative all matched + assert any("CD3-" in m for m in r["matched"]) + assert any("CD123+" in m for m in r["matched"]) + assert any("CD193+" in m for m in r["matched"]) + + +def test_score_low_marker_matches_positive_query(): + # Regression: CD56 "dim" (low) means the marker IS expressed, just at a + # low level — it must NOT be treated as a contradiction of a plain "+" + # query (CL:0000939 CD16+CD56dim NK cells vs SOULCAP CD56+ profiles). + index = { + "CL:0000939": { + "label": "CD16-positive, CD56-dim natural killer cell, human", + "positive": set(), + "negative": set(), + "high": set(), + "low": {"CD56"}, + } + } + required = [("CD56", "positive")] + results = cm.score_cl_terms(index, required, []) + r = results[0] + assert r["contradictions"] == [] + assert any(m.startswith("CD56+") for m in r["matched"]) + assert r["score"] > 0 + + +def test_score_high_marker_matches_positive_query(): + index = { + "CL:0000938": { + "label": "CD16-negative, CD56-bright natural killer cell, human", + "positive": set(), + "negative": set(), + "high": {"CD56"}, + "low": set(), + } + } + required = [("CD56", "positive")] + results = cm.score_cl_terms(index, required, []) + r = results[0] + assert r["contradictions"] == [] + assert any(m.startswith("CD56+") for m in r["matched"]) + + +def test_score_low_marker_conflicts_with_negative_query(): + # A marker expressed at a low level still contradicts a "-" (absent) query. + index = { + "CL:0000939": { + "label": "CD56-dim NK cell", + "positive": set(), + "negative": set(), + "high": set(), + "low": {"CD56"}, + } + } + required = [("CD56", "negative")] + results = cm.score_cl_terms(index, required, []) + r = results[0] + assert "CD56-" in r["contradictions"][0] or r["contradictions"] != [] + + +def test_score_missing_high_low_keys_defaults_empty(): + # Index entries built without high/low keys (e.g. hand-built in older + # code/tests) must not raise. + index = _simple_index() + results = cm.score_cl_terms(index, [("CD56", "positive")], []) + assert results # no KeyError + + def test_score_hint_bonus_applied(): index = _simple_index() # "killer" appears in "natural killer cell" but not in "CD4+ T cell" @@ -374,3 +745,585 @@ def test_main_all_columns(tmp_path, capsys): out = capsys.readouterr().out assert "Required" in out assert "Ideal" in out + + +# --------------------------------------------------------------------------- # +# Batch mode +# --------------------------------------------------------------------------- # +_COMBOS_FIELDS = [ + "Ready for OLS", + "WB or PBMC", + "Parent", + "Abbreviation", + "Full Name", + "synonym", + "Type of Match", + "OLS CL identifier", + "Required exclusion", + "Ideal exclusion", + "Required phenotypic markers", + "Ideal phenotypic markers", + "Nomenclature Notes", + "CL Mapping Notes", +] + + +def _combos_row(**overrides: str) -> dict: + row = dict.fromkeys(_COMBOS_FIELDS, "") + row.update(overrides) + return row + + +def _make_combos_csv(rows: list[dict], tmp_path: Path) -> Path: + path = tmp_path / "marker_combinations.csv" + with path.open("w", encoding="utf-8", newline="") as fh: + writer = csv.DictWriter(fh, fieldnames=_COMBOS_FIELDS) + writer.writeheader() + writer.writerows(rows) + return path + + +def _simple_batch_index(): + return { + "CL:0000623": { + "label": "natural killer cell", + "positive": {"CD56"}, + "negative": {"CD3"}, + "high": set(), + "low": set(), + }, + "CL:0000624": { + "label": "CD4-positive T cell", + "positive": {"CD4"}, + "negative": set(), + "high": set(), + "low": set(), + }, + } + + +def test_load_marker_combinations(tmp_path): + path = _make_combos_csv( + [ + _combos_row( + **{ + "Ready for OLS": "yes", + "Abbreviation": "NK", + "Full Name": "Natural Killer Cell", + "Type of Match": "Exact", + "Required exclusion": "CD3-", + "Required phenotypic markers": "CD56+", + } + ) + ], + tmp_path, + ) + rows = cm.load_marker_combinations(path) + assert len(rows) == 1 + assert rows[0]["Abbreviation"] == "NK" + + +def test_score_marker_combinations_row_scores_candidates(): + row = { + "Abbreviation": "NK", + "Full Name": "Natural Killer Cell", + "Parent": "", + "Type of Match": "Exact", + "OLS CL identifier": "", + "Required exclusion": "CD3-", + "Ideal exclusion": "", + "Required phenotypic markers": "CD56+", + "Ideal phenotypic markers": "", + } + result = cm.score_marker_combinations_row(row, _simple_batch_index(), top_n=2) + assert result["abbreviation"] == "NK" + assert result["note"] == "" + assert result["candidates"][0]["cl_id"] == "CL:0000623" + + +def test_score_marker_combinations_row_no_markers(): + row = { + "Abbreviation": "X", + "Full Name": "Unqualified thing", + "Parent": "", + "Type of Match": "", + "OLS CL identifier": "", + "Required exclusion": "", + "Ideal exclusion": "", + "Required phenotypic markers": "", + "Ideal phenotypic markers": "", + } + result = cm.score_marker_combinations_row(row, _simple_batch_index()) + assert result["candidates"] == [] + assert "no qualified markers" in result["note"] + + +def test_run_batch_skips_blank_rows(): + rows = [ + {"Abbreviation": "", "Full Name": "", "Required phenotypic markers": ""}, + { + "Abbreviation": "NK", + "Full Name": "Natural Killer Cell", + "Parent": "", + "Type of Match": "", + "OLS CL identifier": "", + "Required exclusion": "", + "Ideal exclusion": "", + "Required phenotypic markers": "CD56+", + "Ideal phenotypic markers": "", + }, + ] + results = cm.run_batch(rows, _simple_batch_index()) + assert len(results) == 1 + assert results[0]["abbreviation"] == "NK" + + +def test_run_batch_ready_only_filters(): + rows = [ + { + "Ready for OLS": "no", + "Abbreviation": "A", + "Full Name": "A cell", + "Required phenotypic markers": "CD56+", + }, + { + "Ready for OLS": "yes", + "Abbreviation": "B", + "Full Name": "B cell", + "Required phenotypic markers": "CD4+", + }, + ] + results = cm.run_batch(rows, _simple_batch_index(), ready_only=True) + assert len(results) == 1 + assert results[0]["abbreviation"] == "B" + + +def test_batch_results_to_tsv_rows_flattens_candidates(): + row = { + "Abbreviation": "NK", + "Full Name": "Natural Killer Cell", + "Parent": "", + "Type of Match": "Exact", + "OLS CL identifier": "", + "Required exclusion": "CD3-", + "Ideal exclusion": "", + "Required phenotypic markers": "CD56+", + "Ideal phenotypic markers": "", + } + result = cm.score_marker_combinations_row(row, _simple_batch_index(), top_n=2) + tsv_rows = cm.batch_results_to_tsv_rows([result]) + assert len(tsv_rows) == 2 + assert tsv_rows[0]["rank"] == 1 + assert tsv_rows[0]["cl_id"] == "CL:0000623" + assert "CD56+" in tsv_rows[0]["matched"] + + +def test_batch_results_to_tsv_rows_no_candidates_writes_note(): + result = { + "abbreviation": "X", + "full_name": "Unscored", + "parent": "", + "type_of_match": "", + "existing_cl_id": "", + "candidates": [], + "note": "no qualified markers found", + } + tsv_rows = cm.batch_results_to_tsv_rows([result]) + assert len(tsv_rows) == 1 + assert tsv_rows[0]["rank"] == "" + assert tsv_rows[0]["note"] == "no qualified markers found" + + +def test_write_batch_tsv(tmp_path): + row = { + "Abbreviation": "NK", + "Full Name": "Natural Killer Cell", + "Parent": "", + "Type of Match": "Exact", + "OLS CL identifier": "", + "Required exclusion": "CD3-", + "Ideal exclusion": "", + "Required phenotypic markers": "CD56+", + "Ideal phenotypic markers": "", + } + result = cm.score_marker_combinations_row(row, _simple_batch_index()) + out_path = tmp_path / "nested" / "out.tsv" + cm.write_batch_tsv(out_path, [result]) + assert out_path.exists() + content = out_path.read_text(encoding="utf-8") + assert "CL:0000623" in content + assert content.startswith("abbreviation\t") + + +def test_main_batch_writes_tsv(tmp_path, capsys): + tsv_rows = [ + _row("CL:0000623", "natural killer cell", "negative", "CD3 (label)"), + _row("CL:0000623", "natural killer cell", "positive", "CD56 (exact)"), + ] + tsv = _make_tsv(tsv_rows, tmp_path) + combos = _make_combos_csv( + [ + _combos_row( + **{ + "Ready for OLS": "yes", + "Abbreviation": "NK", + "Full Name": "Natural Killer Cell", + "Type of Match": "Exact", + "Required exclusion": "CD3-", + "Required phenotypic markers": "CD56+", + } + ) + ], + tmp_path, + ) + out_path = tmp_path / "batch_out.tsv" + + rc = cm.main( + [ + "--batch", + str(combos), + "--batch-out", + str(out_path), + "--tsv", + str(tsv), + "--top", + "2", + ] + ) + assert rc == 0 + out = capsys.readouterr().out + assert "Scored 1 SOULCAP cell types" in out + assert out_path.exists() + content = out_path.read_text(encoding="utf-8") + assert "CL:0000623" in content + + +def test_main_batch_missing_combinations_file(tmp_path, capsys): + tsv = _make_tsv([_row("CL:1", "foo", "positive", "CD56 (exact)")], tmp_path) + rc = cm.main( + [ + "--batch", + str(tmp_path / "missing.csv"), + "--tsv", + str(tsv), + ] + ) + assert rc == 1 + assert "not found" in capsys.readouterr().err + + +def test_main_batch_ready_only_flag(tmp_path, capsys): + tsv_rows = [_row("CL:0000623", "NK", "positive", "CD56 (exact)")] + tsv = _make_tsv(tsv_rows, tmp_path) + combos = _make_combos_csv( + [ + _combos_row( + **{ + "Ready for OLS": "no", + "Abbreviation": "A", + "Full Name": "A cell", + "Required phenotypic markers": "CD4+", + } + ), + _combos_row( + **{ + "Ready for OLS": "yes", + "Abbreviation": "NK", + "Full Name": "Natural Killer Cell", + "Required phenotypic markers": "CD56+", + } + ), + ], + tmp_path, + ) + out_path = tmp_path / "batch_out.tsv" + rc = cm.main( + [ + "--batch", + str(combos), + "--batch-out", + str(out_path), + "--tsv", + str(tsv), + "--ready-only", + ] + ) + assert rc == 0 + content = out_path.read_text(encoding="utf-8") + assert "NK" in content + assert "\nA\t" not in content + + +# --------------------------------------------------------------------------- # +# Lexical batch mode +# --------------------------------------------------------------------------- # +def test_lexical_query_for_row_prefers_full_name(): + row = _combos_row(**{"Full Name": "Natural Killer Cell", "Abbreviation": "NK"}) + assert cm._lexical_query_for_row(row) == "Natural Killer Cell" + + +def test_lexical_query_for_row_falls_back_to_abbreviation(): + row = _combos_row(**{"Full Name": "", "Abbreviation": "NK"}) + assert cm._lexical_query_for_row(row) == "NK" + + +def test_run_lexical_batch_success(): + row = _combos_row(**{"Abbreviation": "NK", "Full Name": "Natural Killer Cell"}) + with patch.object(cm.ols4_lookup, "search") as mock_search: + mock_search.return_value = [ + {"obo_id": "CL:0000623", "label": "natural killer cell"}, + {"obo_id": "CL:0000938", "label": "CD56-bright natural killer cell"}, + ] + results = cm.run_lexical_batch([row], top_n=2, sleep_between=0) + assert len(results) == 1 + assert results[0]["candidates"][0]["cl_id"] == "CL:0000623" + assert results[0]["note"] == "" + mock_search.assert_called_once_with( + "Natural Killer Cell", ontology="cl", rows=cm._LEXICAL_FETCH_ROWS + ) + + +def test_run_lexical_batch_promotes_exact_label_match(): + # Regression: OLS4's relevance order buries the exact label match behind + # more-specific subtype variants (e.g. rank 23 for "Natural Killer Cell"). + # A wider fetch + exact-match promotion must still surface it as rank 1. + row = _combos_row(**{"Abbreviation": "NK", "Full Name": "Natural Killer Cell"}) + with patch.object(cm.ols4_lookup, "search") as mock_search: + mock_search.return_value = [ + {"obo_id": "CL:4047101", "label": "liver-resident natural killer cell"}, + { + "obo_id": "CL:0000939", + "label": "CD16-positive, CD56-dim natural killer cell, human", + }, + {"obo_id": "CL:0000623", "label": "natural killer cell"}, # exact, buried + {"obo_id": "CL:4052028", "label": "uterine natural killer cell"}, + ] + results = cm.run_lexical_batch([row], top_n=2, sleep_between=0) + candidates = results[0]["candidates"] + assert len(candidates) == 2 + assert candidates[0]["cl_id"] == "CL:0000623" # promoted to rank 1 + assert candidates[1]["cl_id"] == "CL:4047101" # original order preserved otherwise + + +def test_run_lexical_batch_filters_non_cl_hits(): + row = _combos_row(**{"Abbreviation": "NK", "Full Name": "Natural Killer Cell"}) + with patch.object(cm.ols4_lookup, "search") as mock_search: + mock_search.return_value = [ + {"obo_id": "GO:0001234", "label": "something unrelated"}, + {"obo_id": "CL:0000623", "label": "natural killer cell"}, + ] + results = cm.run_lexical_batch([row], top_n=2, sleep_between=0) + assert len(results[0]["candidates"]) == 1 + assert results[0]["candidates"][0]["cl_id"] == "CL:0000623" + + +def test_run_lexical_batch_no_hits(): + row = _combos_row(**{"Abbreviation": "X", "Full Name": "Nonexistent Cell"}) + with patch.object(cm.ols4_lookup, "search") as mock_search: + mock_search.return_value = [] + results = cm.run_lexical_batch([row], sleep_between=0) + assert results[0]["candidates"] == [] + assert results[0]["note"] == "no CL hits" + + +def test_run_lexical_batch_handles_search_exception(): + row = _combos_row(**{"Abbreviation": "X", "Full Name": "X cell"}) + with patch.object(cm.ols4_lookup, "search") as mock_search: + mock_search.side_effect = RuntimeError("network error") + results = cm.run_lexical_batch([row], sleep_between=0) + assert results[0]["candidates"] == [] + assert "OLS4 search failed" in results[0]["note"] + + +def test_run_lexical_batch_skips_blank_rows(): + rows = [ + _combos_row(), + _combos_row(**{"Abbreviation": "NK", "Full Name": "NK cell"}), + ] + with patch.object(cm.ols4_lookup, "search") as mock_search: + mock_search.return_value = [ + {"obo_id": "CL:0000623", "label": "natural killer cell"} + ] + results = cm.run_lexical_batch(rows, sleep_between=0) + assert len(results) == 1 + assert results[0]["abbreviation"] == "NK" + + +def test_run_lexical_batch_ready_only_filters(): + rows = [ + _combos_row( + **{"Ready for OLS": "no", "Abbreviation": "A", "Full Name": "A cell"} + ), + _combos_row( + **{"Ready for OLS": "yes", "Abbreviation": "B", "Full Name": "B cell"} + ), + ] + with patch.object(cm.ols4_lookup, "search") as mock_search: + mock_search.return_value = [] + results = cm.run_lexical_batch(rows, ready_only=True, sleep_between=0) + assert len(results) == 1 + assert results[0]["abbreviation"] == "B" + + +def test_merge_marker_and_lexical_agreement_yes(): + marker_results = [ + { + "abbreviation": "NK", + "full_name": "Natural Killer Cell", + "parent": "", + "type_of_match": "Exact", + "existing_cl_id": "", + "candidates": [ + { + "cl_id": "CL:0000623", + "label": "natural killer cell", + "score": 13, + "matched": [], + "contradictions": [], + "gaps": [], + "hint_bonus": 0, + } + ], + "note": "", + } + ] + lexical_results = [ + { + "abbreviation": "NK", + "candidates": [{"cl_id": "CL:0000623", "label": "natural killer cell"}], + "note": "", + } + ] + merged = cm.merge_marker_and_lexical(marker_results, lexical_results) + assert merged[0]["agreement"] == "yes" + assert merged[0]["marker_cl_id"] == "CL:0000623" + assert merged[0]["lexical_cl_id"] == "CL:0000623" + + +def test_merge_marker_and_lexical_agreement_no(): + marker_results = [ + { + "abbreviation": "T cell", + "full_name": "T lymphocyte", + "parent": "", + "type_of_match": "Exact", + "existing_cl_id": "", + "candidates": [ + { + "cl_id": "CL:0001024", + "label": "CD34+ CD38- hematopoietic stem cell", + "score": 17, + "matched": [], + "contradictions": ["CD3+"], + "gaps": [], + "hint_bonus": 0, + } + ], + "note": "", + } + ] + lexical_results = [ + { + "abbreviation": "T cell", + "candidates": [{"cl_id": "CL:0000084", "label": "T cell"}], + "note": "", + } + ] + merged = cm.merge_marker_and_lexical(marker_results, lexical_results) + assert merged[0]["agreement"] == "no" + assert merged[0]["marker_conflict"] == "CD3+" + assert merged[0]["lexical_cl_id"] == "CL:0000084" + + +def test_merge_marker_and_lexical_missing_lexical_row(): + marker_results = [ + { + "abbreviation": "NK", + "full_name": "Natural Killer Cell", + "parent": "", + "type_of_match": "", + "existing_cl_id": "", + "candidates": [], + "note": "no qualified markers found", + } + ] + merged = cm.merge_marker_and_lexical(marker_results, []) + assert merged[0]["agreement"] == "no" + assert merged[0]["marker_cl_id"] == "" + assert merged[0]["lexical_cl_id"] == "" + + +def test_write_agreement_tsv(tmp_path): + merged = [ + { + "abbreviation": "NK", + "full_name": "Natural Killer Cell", + "parent": "", + "type_of_match": "Exact", + "existing_cl_id": "", + "marker_cl_id": "CL:0000623", + "marker_cl_label": "natural killer cell", + "marker_score": 13, + "marker_conflict": "", + "marker_note": "", + "lexical_cl_id": "CL:0000623", + "lexical_cl_label": "natural killer cell", + "lexical_note": "", + "agreement": "yes", + } + ] + out_path = tmp_path / "nested" / "agreement.tsv" + cm.write_agreement_tsv(out_path, merged) + content = out_path.read_text(encoding="utf-8") + assert content.startswith("abbreviation\t") + assert "CL:0000623" in content + assert "yes" in content + + +def test_main_batch_lexical_flag(tmp_path, capsys): + tsv_rows = [ + _row("CL:0000623", "natural killer cell", "negative", "CD3 (label)"), + _row("CL:0000623", "natural killer cell", "positive", "CD56 (exact)"), + ] + tsv = _make_tsv(tsv_rows, tmp_path) + combos = _make_combos_csv( + [ + _combos_row( + **{ + "Ready for OLS": "yes", + "Abbreviation": "NK", + "Full Name": "Natural Killer Cell", + "Type of Match": "Exact", + "Required exclusion": "CD3-", + "Required phenotypic markers": "CD56+", + } + ) + ], + tmp_path, + ) + batch_out = tmp_path / "batch.tsv" + agreement_out = tmp_path / "agreement.tsv" + + with patch.object(cm.ols4_lookup, "search") as mock_search: + mock_search.return_value = [ + {"obo_id": "CL:0000623", "label": "natural killer cell"} + ] + rc = cm.main( + [ + "--batch", + str(combos), + "--batch-out", + str(batch_out), + "--tsv", + str(tsv), + "--lexical", + "--agreement-out", + str(agreement_out), + ] + ) + assert rc == 0 + out = capsys.readouterr().out + assert "agreement" in out.lower() + assert agreement_out.exists() + content = agreement_out.read_text(encoding="utf-8") + assert "yes" in content diff --git a/tests/test_hgnc_map.py b/tests/test_hgnc_map.py index c3cf1e1..dc440ca 100644 --- a/tests/test_hgnc_map.py +++ b/tests/test_hgnc_map.py @@ -185,6 +185,65 @@ def test_collect_pr_mappings_skips_empty_pr() -> None: assert result == {} +def test_collect_pr_mappings_override_fills_empty() -> None: + """Overrides supply UniProt for PRs with no uniprot_human in the TSV.""" + rows = [{"pr": "PR:000001479", "uniprot_human": ""}] + overrides = {"PR:000001479": "UniProtKB:P12318"} + result = hgnc_map.collect_pr_mappings(rows, overrides=overrides) + assert result == {"PR:000001479": "UniProtKB:P12318"} + + +def test_collect_pr_mappings_override_does_not_clobber_existing() -> None: + """Overrides must not replace a UniProt entry already in the TSV.""" + rows = [{"pr": "PR:000001479", "uniprot_human": "UniProtKB:P15391"}] + overrides = {"PR:000001479": "UniProtKB:P12318"} + result = hgnc_map.collect_pr_mappings(rows, overrides=overrides) + assert result == {"PR:000001479": "UniProtKB:P15391"} + + +def test_collect_pr_mappings_no_overrides_unchanged() -> None: + """Passing no overrides leaves the result identical to the original behaviour.""" + rows = [{"pr": "PR:000001479", "uniprot_human": ""}] + assert hgnc_map.collect_pr_mappings(rows) == {"PR:000001479": ""} + + +# --------------------------------------------------------------------------- # +# load_overrides +# --------------------------------------------------------------------------- # + + +def test_load_overrides_reads_csv(tmp_path: Path) -> None: + csv_file = tmp_path / "overrides.csv" + csv_file.write_text( + "pr,uniprot_human\nPR:000001479,UniProtKB:P12318\n", encoding="utf-8" + ) + result = hgnc_map.load_overrides(csv_file) + assert result == {"PR:000001479": "UniProtKB:P12318"} + + +def test_load_overrides_strips_isoform_suffix(tmp_path: Path) -> None: + csv_file = tmp_path / "overrides.csv" + csv_file.write_text( + "pr,uniprot_human\nPR:000001479,UniProtKB:P12318-2\n", encoding="utf-8" + ) + result = hgnc_map.load_overrides(csv_file) + assert result == {"PR:000001479": "UniProtKB:P12318"} + + +def test_load_overrides_missing_file_returns_empty(tmp_path: Path) -> None: + result = hgnc_map.load_overrides(tmp_path / "nonexistent.csv") + assert result == {} + + +def test_load_overrides_skips_blank_rows(tmp_path: Path) -> None: + csv_file = tmp_path / "overrides.csv" + csv_file.write_text( + "pr,uniprot_human\nPR:000001479,UniProtKB:P12318\n,\n", encoding="utf-8" + ) + result = hgnc_map.load_overrides(csv_file) + assert result == {"PR:000001479": "UniProtKB:P12318"} + + # --------------------------------------------------------------------------- # # fetch_normalized_nodes # --------------------------------------------------------------------------- # diff --git a/tests/test_marker_map.py b/tests/test_marker_map.py index 38a96ac..88b98b9 100644 --- a/tests/test_marker_map.py +++ b/tests/test_marker_map.py @@ -444,6 +444,44 @@ def test_resolve_group4_not_found() -> None: assert result["gene_symbol"] == "IFNG" # falls back to provided symbol +def test_resolve_group4_fetches_pro_term_via_uniprot() -> None: + session = _make_session(HGNC_IFNG_RESPONSE, OLS4_PR_TERM_RESPONSE) + result = marker_map.resolve_group4( + "IFNg", + "col", + "IFNG", + session, + hgnc_url="http://hgnc", + ols4_url="http://ols4", + sleep_between=0, + ) + assert result["pro_id"] == "PR:P05112" + assert result["pro_label"] == "interleukin-4 (human)" + assert "ols4" in result["evidence"] + + +def test_resolve_group4_no_uniprot_skips_pro_lookup() -> None: + session = _make_session( + { + "response": { + "numFound": 1, + "docs": [{"hgnc_id": "HGNC:1", "symbol": "X", "name": "x"}], + } + } + ) + result = marker_map.resolve_group4( + "IFNg", + "col", + "IFNG", + session, + hgnc_url="http://hgnc", + ols4_url="http://ols4", + sleep_between=0, + ) + assert result["pro_id"] == "" + session.get.assert_called_once() # only the HGNC call, no PRO lookup + + def test_resolve_group4_hgnc_id_already_prefixed() -> None: """hgnc_id in HGNC API already has 'HGNC:' prefix — should not double-prefix.""" session = _make_session( @@ -510,6 +548,74 @@ def test_resolve_group6_gene_token() -> None: assert "TRAV10" in result["notes"] +def test_resolve_group6_gene_token_fetches_pro_term_via_uniprot() -> None: + hgnc_with_uniprot = { + "response": { + "numFound": 1, + "docs": [ + { + "hgnc_id": "HGNC:12124", + "symbol": "TRAV10", + "name": "T cell receptor alpha variable 10", + "uniprot_ids": ["A0A0B4J240"], + } + ], + } + } + pro_response = { + "_embedded": { + "terms": [ + { + "obo_id": "PR:A0A0B4J240", + "label": "T cell receptor alpha variable 10 (human)", + } + ] + } + } + session = _make_session(hgnc_with_uniprot, pro_response) + result = marker_map.resolve_group6_gene_token( + "TCRVa24", + "col", + "TRAV10", + "", + session, + hgnc_url="http://hgnc", + ols4_url="http://ols4", + sleep_between=0, + ) + assert result["pro_id"] == "PR:A0A0B4J240" + assert result["uniprot_id"] == "A0A0B4J240" + + +def test_resolve_group6_gene_token_no_pro_hit_keeps_medium_confidence() -> None: + hgnc_with_uniprot = { + "response": { + "numFound": 1, + "docs": [ + { + "hgnc_id": "HGNC:1", + "symbol": "TRBV25-1", + "name": "TCR beta variable 25-1", + "uniprot_ids": ["A0A075B6N4"], + } + ], + } + } + session = _make_session(hgnc_with_uniprot, {"_embedded": {"terms": []}}) + result = marker_map.resolve_group6_gene_token( + "TCRVb11", + "col", + "TRBV25-1", + "", + session, + hgnc_url="http://hgnc", + ols4_url="http://ols4", + sleep_between=0, + ) + assert result["pro_id"] == "" + assert result["confidence"] == "medium" + + def test_resolve_group6_gene_token_not_found() -> None: session = _make_session({"response": {"numFound": 0, "docs": []}}) result = marker_map.resolve_group6_gene_token( @@ -560,6 +666,30 @@ def test_resolve_group7_mr1() -> None: assert "MR1 tetramer" in result["notes"] +def test_resolve_group7_mr1_fetches_pro_term_via_uniprot() -> None: + pro_response = { + "_embedded": { + "terms": [ + { + "obo_id": "PR:Q95460", + "label": "major histocompatibility complex class I-related protein 1 (human)", + } + ] + } + } + session = _make_session(HGNC_MR1_RESPONSE, pro_response) + result = marker_map.resolve_group7_mr1( + "MR1", + "col", + session, + hgnc_url="http://hgnc", + ols4_url="http://ols4", + sleep_between=0, + ) + assert result["pro_id"] == "PR:Q95460" + assert "class I-related" in result["pro_label"] + + # --------------------------------------------------------------------------- # # fetch_hgnc_by_symbol # --------------------------------------------------------------------------- # @@ -646,6 +776,54 @@ def test_search_ols4_pr_skips_non_pr_docs() -> None: assert result["pr_id"] == "PR:000001" +# --------------------------------------------------------------------------- # +# fetch_pr_by_uniprot +# --------------------------------------------------------------------------- # + +OLS4_PR_TERM_RESPONSE = { + "_embedded": { + "terms": [ + {"obo_id": "PR:P05112", "label": "interleukin-4 (human)"}, + ] + } +} + + +def test_fetch_pr_by_uniprot_found() -> None: + session = _make_session(OLS4_PR_TERM_RESPONSE) + result = marker_map.fetch_pr_by_uniprot("P05112", session, ols4_url="http://ols4") + assert result is not None + assert result["pr_id"] == "PR:P05112" + assert result["pr_label"] == "interleukin-4 (human)" + + +def test_fetch_pr_by_uniprot_empty_id_returns_none() -> None: + session = MagicMock() + result = marker_map.fetch_pr_by_uniprot("", session, ols4_url="http://ols4") + assert result is None + session.get.assert_not_called() + + +def test_fetch_pr_by_uniprot_no_terms_embedded() -> None: + session = _make_session({"_embedded": {"terms": []}}) + result = marker_map.fetch_pr_by_uniprot( + "ZZZNOTREAL", session, ols4_url="http://ols4" + ) + assert result is None + + +def test_fetch_pr_by_uniprot_404_returns_none() -> None: + session = MagicMock() + resp = MagicMock() + resp.status_code = 404 + session.get.return_value = resp + result = marker_map.fetch_pr_by_uniprot( + "ZZZNOTREAL", session, ols4_url="http://ols4" + ) + assert result is None + resp.raise_for_status.assert_not_called() + + # --------------------------------------------------------------------------- # # extract_monarch_identifiers # --------------------------------------------------------------------------- # @@ -750,20 +928,31 @@ def test_write_csv(tmp_path: Path) -> None: def _build_mock_session_for_run() -> MagicMock: """Build a session that responds to the API calls made during run() for the minimal test token set in MARKER_TOKENS_TSV_CONTENT.""" - # Calls made: + # Calls made, in token-iteration order: # 1. OLS4 search for "CD57" (Group 3) # 2. Monarch lookup for PR:000015709 (Group 3) # 3. HGNC lookup for IFNG (Group 4) - # 4. HGNC lookup for TRAV10 (Group 6 — TCRVa24) - # 5. HGNC lookup for TRAV10 again for TCRva24 duplicate (no call — copy) - # 6. HGNC lookup for TRBV25-1 (Vb11 / VB11 / TCRVb11 not in our minimal token list) - # 7. HGNC lookup for TRDV1 (Vd1 — Group 6) - # 8. HGNC lookup for MR1 (Group 7) + # 4. PRO term fetch for IFNG's UniProt P01579 (Group 4 — has a uniprot hit) + # 5. HGNC lookup for TRAV10 (Group 6 — TCRVa24; no uniprot -> no PRO call) + # 6. HGNC lookup for TRAV10 again for TCRva24 duplicate (no call — copy) + # 7. HGNC lookup for TRBV25-1 (Vb11 / VB11 / TCRVb11 not in our minimal token list) + # 8. HGNC lookup for TRDV1 (Vd1 — Group 6; no uniprot -> no PRO call) + # 9. HGNC lookup for MR1 (Group 7) + # 10. PRO term fetch for MR1's UniProt Q95460 (Group 7 — has a uniprot hit) session = MagicMock() session.get.side_effect = [ _make_mock_response(OLS4_CD57_RESPONSE), # CD57 OLS4 _make_mock_response(MONARCH_PR_000015709), # CD57 Monarch _make_mock_response(HGNC_IFNG_RESPONSE), # IFNg + _make_mock_response( # IFNg PRO term (P01579) + { + "_embedded": { + "terms": [ + {"obo_id": "PR:P01579", "label": "interferon gamma (human)"} + ] + } + } + ), _make_mock_response(HGNC_TRAV10_RESPONSE), # TCRVa24 _make_mock_response( { # Vd1 → TRDV1 @@ -781,6 +970,21 @@ def _build_mock_session_for_run() -> MagicMock: } ), _make_mock_response(HGNC_MR1_RESPONSE), # MR1 + _make_mock_response( # MR1 PRO term (Q95460) + { + "_embedded": { + "terms": [ + { + "obo_id": "PR:Q95460", + "label": ( + "major histocompatibility complex class " + "I-related protein 1 (human)" + ), + } + ] + } + } + ), ] return session From 93bf6d0988207707ca4abcd049f3285d13f58ffa Mon Sep 17 00:00:00 2001 From: s28ale-maker Date: Fri, 24 Jul 2026 12:29:56 -0400 Subject: [PATCH 2/7] Add OAK matching, SSSOM export, gap tracking, and ROBOT ontology QC CI MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - soulcap-oak-match: lexical/synonym CL search via OAK's sqlite:obo:cl adapter, an independent second opinion to soulcap-match --lexical (OLS4). Verified live: ranks exact label/synonym matches cleanly where OLS4's relevance ranking buries them behind subtype noise. - soulcap-sssom: exports the curated Milestone 4 mapping decisions as SSSOM TSV instead of writing OWL axioms directly. confidence/comment are derived automatically from whether CL directly asserts the matched marker axiom(s), only has them by inference, or has none at all — not hand-typed. - write_robot_template(): converts SSSOM rows into true logical OWL axioms (equivalentClass/subClassOf) for reasoner QC, since SSSOM's own OWL writer only emits skos:exactMatch as a non-logical annotation a reasoner ignores. - reports/gaps.tsv + .github/ISSUE_TEMPLATE/mapping_gap.yml (gap label): tracks cases with no reasonable CL match, CL/marker conflicts, CL axiom gaps, and sheet data issues, separate from the mapping table. - .github/workflows/robot-qc.yml: runs on every PR. One job audits upstream CL (cl-base.owl) standalone with robot report + robot reason (ELK); a second merges our SSSOM-derived mapping axioms into CL and re-checks, to catch problems our own proposed mappings would introduce. - New skill: soulcap-cl-matching, encoding the cross-check workflow (never trust either method's rank-1 blindly, verify via direct OLS4 lookup when uncertain). - Fix a pre-existing mypy gap in cl_match.py (_lexical_query_for_row typing). Co-Authored-By: Claude Sonnet 5 --- .claude/skills/soulcap-cl-matching/SKILL.md | 172 ++ .github/ISSUE_TEMPLATE/mapping_gap.yml | 48 + .github/workflows/robot-qc.yml | 110 + CLAUDE.md | 20 +- README.md | 50 + pyproject.toml | 8 + reports/candidate_cl_mappings.sssom.tsv | 24 + reports/gaps.tsv | 7 + src/soulcap_cl_mapping/cl_match.py | 2 +- src/soulcap_cl_mapping/oak_match.py | 183 ++ src/soulcap_cl_mapping/sssom_export.py | 428 ++++ tests/test_oak_match.py | 203 ++ tests/test_sssom_export.py | 380 +++ uv.lock | 2470 +++++++++++++++++-- 14 files changed, 3907 insertions(+), 198 deletions(-) create mode 100644 .claude/skills/soulcap-cl-matching/SKILL.md create mode 100644 .github/ISSUE_TEMPLATE/mapping_gap.yml create mode 100644 .github/workflows/robot-qc.yml create mode 100644 reports/candidate_cl_mappings.sssom.tsv create mode 100644 reports/gaps.tsv create mode 100644 src/soulcap_cl_mapping/oak_match.py create mode 100644 src/soulcap_cl_mapping/sssom_export.py create mode 100644 tests/test_oak_match.py create mode 100644 tests/test_sssom_export.py diff --git a/.claude/skills/soulcap-cl-matching/SKILL.md b/.claude/skills/soulcap-cl-matching/SKILL.md new file mode 100644 index 0000000..c6b819b --- /dev/null +++ b/.claude/skills/soulcap-cl-matching/SKILL.md @@ -0,0 +1,172 @@ +--- +name: soulcap-cl-matching +description: Propose a Cell Ontology (CL) match for a SOULCAP cell type (one, several, or all of them) using both marker-axiom scoring and name-based lexical search, cross-checking the two before trusting either, and writing the result into reports/candidate_cl_mappings.md with rationale and evidence. Invoke when asked to map/match a SOULCAP cell type to CL, propose a CL ID, or extend Milestone 4 candidate mappings. +--- + +You propose SOULCAP → Cell Ontology (CL) mappings the way they were actually +worked out by hand across many cell types: run both matching methods, never +trust either one blindly, verify anything uncertain directly against CL, and +write up the result with enough evidence that someone else can check your +reasoning. See [ROADMAP.md](../../../ROADMAP.md) Milestone 4 for the +deliverable this feeds, and [CLAUDE.md](../../../CLAUDE.md) for repo +conventions. + +## When to invoke + +The user asks to map/match one or more SOULCAP cell types to CL, propose a CL +ID, review/extend the candidate mappings report, or investigate why a +particular SOULCAP row has no good CL match. + +## Tools + +- `uv run soulcap-match --req-excl ... --req-pheno ... --parent "..."` — + single-profile marker-axiom scoring (paste the sheet's four marker columns + directly). +- `uv run soulcap-match --batch [--lexical] [--ready-only]` — scores every row + of `data/marker_combinations.csv` in one pass; `--lexical` adds an + independent OLS4 name search and writes an agreement report. +- `uv run soulcap-lookup "" --ontology cl` (or the `ontology-term-lookup` + skill) — direct OLS4 verification when the batch output is ambiguous or + suspicious. +- `reports/cl_pro_relationships.md` — CL's own marker axioms, human-readable; + worth reading directly for a specific CL ID when you need to see *why* it + scored the way it did. + +## Step 1 — get candidates + +For one cell type, pull its four marker columns from +`data/marker_combinations.csv` (Required exclusion, Ideal exclusion, Required +phenotypic markers, Ideal phenotypic markers) and run: + +```bash +uv run soulcap-match \ + --req-excl "" \ + --ideal-excl "" \ + --req-pheno "" \ + --ideal-pheno "" \ + --parent "" --subset "" --top 5 +``` + +For several/all cell types at once, use batch mode instead: + +```bash +uv run soulcap-match --batch --lexical --ready-only +``` + +This writes `reports/candidate_cl_mappings_batch.tsv` (marker-based, top-N +per row, with `contradictions`/`disqualified` columns) and +`reports/candidate_cl_mappings_agreement.tsv` (marker top-1 vs. lexical top-1 +side by side, with an `agreement` column). + +## Step 2 — never trust rank 1 blindly + +Both methods fail in different, uncorrelated ways — this was learned the hard +way across NK, ILC, DC, and Basophil rows: + +- **Marker-based top-1 can be a real match that's too specific**, because CL + frequently has no marker axioms on the general parent class, only on its + subtypes (e.g. plain "natural killer cell" has zero marker axioms; only its + CD56-bright/CD56-dim children do). A broad, unqualified SOULCAP row (no + subset markers) usually wants the *general* CL term even if it scores worse + than a subtype. +- **Lexical top-1 can pick a wrong-species or wrong-specificity term** free-text + ranking doesn't understand biology — it has picked a *mouse*-only term over + an available human one, and an overly-specific subtype over the general term + the query text actually named. Always check the label for `, mouse` and for + extra qualifiers the SOULCAP profile doesn't test. +- **A `disqualified` or non-empty `contradictions` candidate is a hard no** + for that required marker — skip it even if it has the highest score. +- **If marker and lexical disagree, that's a signal to look closer, not + noise** — cross-check both by hand rather than picking either automatically. +- **A clean top-1 with no conflicts still isn't proof of correctness** — it + just means nothing actively contradicts it. Sanity-check the label makes + biological sense for the SOULCAP row's intent. + +## Step 3 — verify anything uncertain directly against CL + +When the batch output disagrees with itself, or a candidate label looks +suspicious (unexpected species, unexpected specificity, or a real match seems +to be missing from both lists), search CL directly instead of trusting either +list: + +```bash +uv run soulcap-lookup "" --ontology cl --rows 10 +``` + +Or fetch a specific candidate's own axioms to see why it scored the way it +did: + +```bash +uv run soulcap-lookup --id CL:XXXXXXX --ontology cl +grep -n "## CL:XXXXXXX" -A 20 reports/cl_pro_relationships.md +``` + +This is how several real mismatches were caught: a lexical pick for one +numbered subtype (e.g. "cDC1") turning out to be the *other* subtype's term +because free-text search didn't discriminate "1" vs "2"; a match hiding +because it needed an OR-group marker check +(`(CD193+|FceR1a+|HLA-DR-|CD303-)`) rather than a single positive marker. + +## Step 4 — write the result + +Append an entry to `reports/candidate_cl_mappings.md` following the existing +format (one `##` section per cell type or closely related family): + +```markdown +## — + +**SOULCAP definition:** + +| Field | Value | +|---|---| +| Proposed CL term |