genosecretor 0.1.0__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- genosecretor-0.1.0/.cache/.gitignore +1 -0
- genosecretor-0.1.0/.cache/1229514038324329839 +133 -0
- genosecretor-0.1.0/.cache/12783978247058528628 +4 -0
- genosecretor-0.1.0/.cache/12842651320362419197 +4 -0
- genosecretor-0.1.0/.cache/13584948190430787628 +4 -0
- genosecretor-0.1.0/.cache/13625217525854986006 +4 -0
- genosecretor-0.1.0/.cache/13851241699707876079 +58 -0
- genosecretor-0.1.0/.cache/14615590517864436371 +103 -0
- genosecretor-0.1.0/.cache/15213489598760314030 +88 -0
- genosecretor-0.1.0/.cache/15636505288923159592 +58 -0
- genosecretor-0.1.0/.cache/16003983905945208527 +4 -0
- genosecretor-0.1.0/.cache/16321784369307183124 +88 -0
- genosecretor-0.1.0/.cache/17875049309037889150 +148 -0
- genosecretor-0.1.0/.cache/1820337782702487552 +27 -0
- genosecretor-0.1.0/.cache/18233859623445031844 +118 -0
- genosecretor-0.1.0/.cache/2058500822554624752 +4 -0
- genosecretor-0.1.0/.cache/2171408121865226266 +4 -0
- genosecretor-0.1.0/.cache/3476900567878811119 +4 -0
- genosecretor-0.1.0/.cache/399105207347641323 +58 -0
- genosecretor-0.1.0/.cache/4011154816802108884 +4 -0
- genosecretor-0.1.0/.cache/6753937490399537953 +4 -0
- genosecretor-0.1.0/.cache/7486542183099209473 +4 -0
- genosecretor-0.1.0/.cache/7958863989227223840 +43 -0
- genosecretor-0.1.0/.cache/8835648535965947858 +4 -0
- genosecretor-0.1.0/.cache/9086284442860398061 +178 -0
- genosecretor-0.1.0/.github/workflows/ci.yml +44 -0
- genosecretor-0.1.0/.github/workflows/deploy-docs.yml +41 -0
- genosecretor-0.1.0/.gitignore +36 -0
- genosecretor-0.1.0/CITATION.cff +17 -0
- genosecretor-0.1.0/LICENSE +21 -0
- genosecretor-0.1.0/PKG-INFO +167 -0
- genosecretor-0.1.0/README.md +128 -0
- genosecretor-0.1.0/TODO.md +7 -0
- genosecretor-0.1.0/docs/assets/figures/secretor-diplotype-phenotype.svg +77 -0
- genosecretor-0.1.0/docs/assets/figures/secretor-haplotype-rules.svg +49 -0
- genosecretor-0.1.0/docs/assets/figures/secretor-markers-af.svg +80 -0
- genosecretor-0.1.0/docs/assets/figures/secretor-markers-ld.svg +164 -0
- genosecretor-0.1.0/docs/assets/figures/secretor-markers-locus.svg +79 -0
- genosecretor-0.1.0/docs/assets/figures/secretor-unphased-double-het.svg +81 -0
- genosecretor-0.1.0/docs/assets/figures/secretor-vcf-to-state.svg +48 -0
- genosecretor-0.1.0/docs/assumptions.md +40 -0
- genosecretor-0.1.0/docs/examples/1kg-assume-trans.md +51 -0
- genosecretor-0.1.0/docs/examples/1kg.md +142 -0
- genosecretor-0.1.0/docs/examples/index.md +39 -0
- genosecretor-0.1.0/docs/examples/report.md +33 -0
- genosecretor-0.1.0/docs/examples/reports/1kg_afr.report.html +294 -0
- genosecretor-0.1.0/docs/examples/reports/1kg_eas.report.html +294 -0
- genosecretor-0.1.0/docs/examples/reports/1kg_eur.report.html +294 -0
- genosecretor-0.1.0/docs/examples/reports/synthetic_hg38.report.html +294 -0
- genosecretor-0.1.0/docs/examples/synthetic.md +22 -0
- genosecretor-0.1.0/docs/index.md +49 -0
- genosecretor-0.1.0/docs/markers.md +137 -0
- genosecretor-0.1.0/docs/methods.md +76 -0
- genosecretor-0.1.0/docs/updatelog.md +18 -0
- genosecretor-0.1.0/docs/usage.md +149 -0
- genosecretor-0.1.0/docs/workflow.md +80 -0
- genosecretor-0.1.0/examples/README.md +88 -0
- genosecretor-0.1.0/examples/_1kg_input.sh +19 -0
- genosecretor-0.1.0/examples/compute_ld_1kg.py +624 -0
- genosecretor-0.1.0/examples/data/1kg/README.txt +33 -0
- genosecretor-0.1.0/examples/data/1kg/afr_hg19.vcf.gz +0 -0
- genosecretor-0.1.0/examples/data/1kg/afr_hg19.vcf.gz.tbi +0 -0
- genosecretor-0.1.0/examples/data/1kg/afr_hg38.vcf.gz +0 -0
- genosecretor-0.1.0/examples/data/1kg/afr_hg38.vcf.gz.tbi +0 -0
- genosecretor-0.1.0/examples/data/1kg/eas_hg19.vcf.gz +0 -0
- genosecretor-0.1.0/examples/data/1kg/eas_hg19.vcf.gz.tbi +0 -0
- genosecretor-0.1.0/examples/data/1kg/eas_hg38.vcf.gz +0 -0
- genosecretor-0.1.0/examples/data/1kg/eas_hg38.vcf.gz.tbi +0 -0
- genosecretor-0.1.0/examples/data/1kg/eur_hg19.vcf.gz +0 -0
- genosecretor-0.1.0/examples/data/1kg/eur_hg19.vcf.gz.tbi +0 -0
- genosecretor-0.1.0/examples/data/1kg/eur_hg38.vcf.gz +0 -0
- genosecretor-0.1.0/examples/data/1kg/eur_hg38.vcf.gz.tbi +0 -0
- genosecretor-0.1.0/examples/data/1kg_ld/secretor_markers_ld.tsv +13 -0
- genosecretor-0.1.0/examples/data/chm13/cohort.bed +0 -0
- genosecretor-0.1.0/examples/data/chm13/cohort.bim +3 -0
- genosecretor-0.1.0/examples/data/chm13/cohort.fam +14 -0
- genosecretor-0.1.0/examples/data/chm13/cohort.pgen +0 -0
- genosecretor-0.1.0/examples/data/chm13/cohort.psam +15 -0
- genosecretor-0.1.0/examples/data/chm13/cohort.pvar +4 -0
- genosecretor-0.1.0/examples/data/chm13/cohort.vcf +8 -0
- genosecretor-0.1.0/examples/data/chm13/cohort_phased.vcf +8 -0
- genosecretor-0.1.0/examples/data/expected_calls.txt +18 -0
- genosecretor-0.1.0/examples/data/hg19/cohort.bed +0 -0
- genosecretor-0.1.0/examples/data/hg19/cohort.bim +3 -0
- genosecretor-0.1.0/examples/data/hg19/cohort.fam +14 -0
- genosecretor-0.1.0/examples/data/hg19/cohort.pgen +0 -0
- genosecretor-0.1.0/examples/data/hg19/cohort.psam +15 -0
- genosecretor-0.1.0/examples/data/hg19/cohort.pvar +4 -0
- genosecretor-0.1.0/examples/data/hg19/cohort.vcf +8 -0
- genosecretor-0.1.0/examples/data/hg19/cohort_phased.vcf +8 -0
- genosecretor-0.1.0/examples/data/hg38/cohort.bed +0 -0
- genosecretor-0.1.0/examples/data/hg38/cohort.bim +3 -0
- genosecretor-0.1.0/examples/data/hg38/cohort.fam +14 -0
- genosecretor-0.1.0/examples/data/hg38/cohort.pgen +0 -0
- genosecretor-0.1.0/examples/data/hg38/cohort.psam +15 -0
- genosecretor-0.1.0/examples/data/hg38/cohort.pvar +4 -0
- genosecretor-0.1.0/examples/data/hg38/cohort.vcf +8 -0
- genosecretor-0.1.0/examples/data/hg38/cohort_chr.vcf +8 -0
- genosecretor-0.1.0/examples/data/hg38/cohort_chrpos.vcf +8 -0
- genosecretor-0.1.0/examples/data/hg38/cohort_nc.vcf +8 -0
- genosecretor-0.1.0/examples/data/hg38/cohort_phased.vcf +8 -0
- genosecretor-0.1.0/examples/data/hg38/cohort_phased_chr.vcf +8 -0
- genosecretor-0.1.0/examples/export_docs_reports.sh +59 -0
- genosecretor-0.1.0/examples/extract_1kg.py +100 -0
- genosecretor-0.1.0/examples/generate_cohort.py +251 -0
- genosecretor-0.1.0/examples/run_1kg.sh +18 -0
- genosecretor-0.1.0/examples/run_1kg_afr.sh +17 -0
- genosecretor-0.1.0/examples/run_1kg_assume_trans.sh +9 -0
- genosecretor-0.1.0/examples/run_1kg_eas.sh +17 -0
- genosecretor-0.1.0/examples/run_1kg_eas_unphased.sh +17 -0
- genosecretor-0.1.0/examples/run_1kg_eur.sh +17 -0
- genosecretor-0.1.0/examples/run_1kg_ld.sh +9 -0
- genosecretor-0.1.0/examples/run_all.sh +9 -0
- genosecretor-0.1.0/examples/run_synthetic.sh +10 -0
- genosecretor-0.1.0/examples/verify_assume_trans_1kg.py +347 -0
- genosecretor-0.1.0/pyproject.toml +75 -0
- genosecretor-0.1.0/serve.sh +5 -0
- genosecretor-0.1.0/src/genosecretor/__init__.py +16 -0
- genosecretor-0.1.0/src/genosecretor/cli/__init__.py +24 -0
- genosecretor-0.1.0/src/genosecretor/cli/cli_citations.py +136 -0
- genosecretor-0.1.0/src/genosecretor/cli/cli_main.py +153 -0
- genosecretor-0.1.0/src/genosecretor/cli/cli_qc.py +144 -0
- genosecretor-0.1.0/src/genosecretor/core/__init__.py +96 -0
- genosecretor-0.1.0/src/genosecretor/core/core_build.py +120 -0
- genosecretor-0.1.0/src/genosecretor/core/core_genotype.py +91 -0
- genosecretor-0.1.0/src/genosecretor/core/core_haplotype.py +227 -0
- genosecretor-0.1.0/src/genosecretor/core/core_marker_lookup.py +303 -0
- genosecretor-0.1.0/src/genosecretor/core/core_normalize.py +227 -0
- genosecretor-0.1.0/src/genosecretor/core/core_registry.py +76 -0
- genosecretor-0.1.0/src/genosecretor/core/core_types.py +140 -0
- genosecretor-0.1.0/src/genosecretor/data/__init__.py +1 -0
- genosecretor-0.1.0/src/genosecretor/data/assemblies.yaml +67 -0
- genosecretor-0.1.0/src/genosecretor/data/citations.yaml +117 -0
- genosecretor-0.1.0/src/genosecretor/data/markers.yaml +80 -0
- genosecretor-0.1.0/src/genosecretor/data/methods.yaml +72 -0
- genosecretor-0.1.0/src/genosecretor/data/report.yaml +147 -0
- genosecretor-0.1.0/src/genosecretor/methods/__init__.py +23 -0
- genosecretor-0.1.0/src/genosecretor/methods/methods_caller.py +364 -0
- genosecretor-0.1.0/src/genosecretor/methods/methods_infer.py +334 -0
- genosecretor-0.1.0/src/genosecretor/readers/__init__.py +5 -0
- genosecretor-0.1.0/src/genosecretor/readers/readers_base.py +75 -0
- genosecretor-0.1.0/src/genosecretor/readers/readers_bgen.py +85 -0
- genosecretor-0.1.0/src/genosecretor/readers/readers_pgen.py +105 -0
- genosecretor-0.1.0/src/genosecretor/readers/readers_plink1.py +104 -0
- genosecretor-0.1.0/src/genosecretor/readers/readers_vcf.py +184 -0
- genosecretor-0.1.0/src/genosecretor/visualize/__init__.py +5 -0
- genosecretor-0.1.0/src/genosecretor/visualize/visualize_report.py +1006 -0
- genosecretor-0.1.0/tests/conftest.py +32 -0
- genosecretor-0.1.0/tests/fixtures/generate_synthetic.py +155 -0
- genosecretor-0.1.0/tests/test_1kg_ld_table.py +34 -0
- genosecretor-0.1.0/tests/test_assume_trans_1kg.py +64 -0
- genosecretor-0.1.0/tests/test_bgen.py +10 -0
- genosecretor-0.1.0/tests/test_build_detection.py +40 -0
- genosecretor-0.1.0/tests/test_citations.py +76 -0
- genosecretor-0.1.0/tests/test_common_method.py +154 -0
- genosecretor-0.1.0/tests/test_dosage.py +9 -0
- genosecretor-0.1.0/tests/test_examples_1kg.py +61 -0
- genosecretor-0.1.0/tests/test_examples_cohort.py +23 -0
- genosecretor-0.1.0/tests/test_marker_lookup.py +55 -0
- genosecretor-0.1.0/tests/test_normalization.py +74 -0
- genosecretor-0.1.0/tests/test_pgen.py +75 -0
- genosecretor-0.1.0/tests/test_phase.py +13 -0
- genosecretor-0.1.0/tests/test_plink1.py +14 -0
- genosecretor-0.1.0/tests/test_proxy_method.py +68 -0
- genosecretor-0.1.0/tests/test_vcf.py +70 -0
- genosecretor-0.1.0/tests/test_visualize.py +117 -0
- genosecretor-0.1.0/zensical.toml +83 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
*
|
|
@@ -0,0 +1,133 @@
|
|
|
1
|
+
{
|
|
2
|
+
"data": {
|
|
3
|
+
"meta": {},
|
|
4
|
+
"content": "<h1 id=\"inference-methods\">Inference methods<a class=\"headerlink\" href=\"#inference-methods\" title=\"Permanent link\">¶</a></h1>\n<p>genoSecretor maps FUT2 tag SNPs to haplotype alleles <strong>Se</strong> (functional), <strong>se</strong> (complete LoF, se428 / W143X), and <strong>Se^w</strong> (reduced activity, se385 / I129F), then to a recessive phenotype.</p>\n<blockquote>\n<p><strong>Research use only.</strong> These methods type common alleles, not the full FUT2 allelic series. FUT3/Lewis typing is out of scope.</p>\n</blockquote>\n<h2 id=\"haplotype-rules\">Haplotype rules<a class=\"headerlink\" href=\"#haplotype-rules\" title=\"Permanent link\">¶</a></h2>\n<p>For each chromosome copy:</p>\n<ol>\n<li>If rs601338 = <code>LOF</code> → haplotype = <strong>se</strong> (epistatic: truncated FUT2 is null even if rs1047781 is also <code>WEAK</code>)</li>\n<li>Else if rs1047781 = <code>WEAK</code> → haplotype = <strong>Se^w</strong></li>\n<li>Else if either marker is <code>FUNCTIONAL</code> → haplotype = <strong>Se</strong></li>\n<li>Else → haplotype = <strong>unknown</strong></li>\n</ol>\n<p><img alt=\"Per-haplotype FUT2 calling rules\" src=\"../assets/figures/secretor-haplotype-rules.svg\" width=\"100%\" /></p>\n<p><em>Figure. One chromosome copy: <code>LOF</code> yields </em><em>se</em><em>; otherwise <code>WEAK</code> yields </em><em>Se^w</em><em> and <code>FUNCTIONAL</code> yields </em><em>Se</em><em>. Under <code>proxy</code>, rs601338 / rs602662 copy-count disagreement is CONFLICT, not a forced haplotype.</em></p>\n<h2 id=\"phenotype-table\">Phenotype table<a class=\"headerlink\" href=\"#phenotype-table\" title=\"Permanent link\">¶</a></h2>\n<table>\n<thead>\n<tr>\n<th>Diplotype</th>\n<th><code>secretor_status</code></th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td>Se/Se, Se/se, Se/Se^w</td>\n<td>secretor</td>\n</tr>\n<tr>\n<td>Se^w/Se^w, Se^w/se</td>\n<td>weak-secretor</td>\n</tr>\n<tr>\n<td>se/se</td>\n<td>non-secretor</td>\n</tr>\n</tbody>\n</table>\n<p><code>--phenotype-coding biochemical</code> (default) uses this table. <code>--phenotype-coding gwas</code> recodes <code>Se^w/Se^w</code> and <code>Se^w/se</code> as <strong>non-secretor</strong> (Smyth 2011 / BBJ-style binary trait). <code>fut2_genotype</code> still keeps <code>Se^w</code>.</p>\n<table>\n<thead>\n<tr>\n<th>Diplotype</th>\n<th>biochemical</th>\n<th>gwas</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td>Se/Se, Se/se, Se/Se^w</td>\n<td>secretor</td>\n<td>secretor</td>\n</tr>\n<tr>\n<td>Se^w/Se^w, Se^w/se</td>\n<td>weak-secretor</td>\n<td>non-secretor</td>\n</tr>\n<tr>\n<td>se/se</td>\n<td>non-secretor</td>\n<td>non-secretor</td>\n</tr>\n</tbody>\n</table>\n<p><img alt=\"Diplotype to secretor phenotype\" src=\"../assets/figures/secretor-diplotype-phenotype.svg\" width=\"100%\" /></p>\n<p><em>Figure. Sorted haplotypes (Se < Se^w < se) map to phenotype: any Se copy → secretor; Se^w/Se^w and Se^w/se → weak-secretor; se/se → non-secretor.</em></p>\n<h2 id=\"two-marker-default-when-both-snps-are-present\">two-marker (default when both SNPs are present)<a class=\"headerlink\" href=\"#two-marker-default-when-both-snps-are-present\" title=\"Permanent link\">¶</a></h2>\n<p>Uses rs601338 and rs1047781.</p>\n<p>Unphased double heterozygotes (het at both SNPs) are assigned <strong>Se^w/se</strong> under <code>--assume-trans</code> (default), because se428 and se385 typically sit on different continental haplotypes. <code>--no-assume-trans</code> leaves those samples ambiguous (<code>Se^w/se</code> vs cis <code>Se/se</code>).</p>\n<p><img alt=\"Unphased double heterozygote is Se^w/se or Se/se\" src=\"../assets/figures/secretor-unphased-double-het.svg\" width=\"100%\" /></p>\n<p><em>Figure. Unphased <code>LOF</code>/<code>FUNCTIONAL</code> × <code>FUNCTIONAL</code>/<code>WEAK</code> is compatible with trans Se^w/se or cis Se/se (the double-mutant copy is still </em><em>se</em><em>). Default <code>--assume-trans</code> assigns </em><em>Se^w/se</em><em>; <code>--no-assume-trans</code> leaves the call ambiguous. Phased GT does not use this assumption.</em></p>\n<h2 id=\"common\">common<a class=\"headerlink\" href=\"#common\" title=\"Permanent link\">¶</a></h2>\n<p>rs601338 only. Homozygous LOF → se/se (non-secretor); otherwise secretor. Never emits weak-secretor. Poor choice as the sole method in East Asian cohorts.</p>\n<h2 id=\"eas\">eas<a class=\"headerlink\" href=\"#eas\" title=\"Permanent link\">¶</a></h2>\n<p>rs1047781 only. Homozygous WEAK → Se^w/Se^w (weak-secretor); otherwise secretor. Never emits se/se from W143X. Poor choice as the sole method in European/African cohorts.</p>\n<h2 id=\"proxy\">proxy<a class=\"headerlink\" href=\"#proxy\" title=\"Permanent link\">¶</a></h2>\n<p>If rs601338 is usable, same as <code>common</code>. If it is missing, rs602662 SE_PROXY (A) is mapped to an LOF-like state and confidence is <strong>low</strong>. If both markers are present and copy counts disagree, QC status is CONFLICT.</p>\n<h2 id=\"auto-selection\">Auto-selection<a class=\"headerlink\" href=\"#auto-selection\" title=\"Permanent link\">¶</a></h2>\n<ol>\n<li>two-marker if rs601338 and rs1047781 are present</li>\n<li>common if rs601338 is present</li>\n<li>eas if rs1047781 is present</li>\n<li>proxy if rs602662 is present (low confidence)</li>\n</ol>\n<p><code>--strict-method</code> disables fallback when a requested method's minimum markers are missing.</p>\n<p>List methods:</p>\n<div class=\"language-bash highlight\"><pre><span></span><code><span id=\"__span-0-1\"><a id=\"__codelineno-0-1\" name=\"__codelineno-0-1\" href=\"#__codelineno-0-1\"></a>genosecretor<span class=\"w\"> </span>--methods\n</span><span id=\"__span-0-2\"><a id=\"__codelineno-0-2\" name=\"__codelineno-0-2\" href=\"#__codelineno-0-2\"></a>genosecretor<span class=\"w\"> </span>--method-info<span class=\"w\"> </span>two-marker\n</span></code></pre></div>",
|
|
5
|
+
"search": [
|
|
6
|
+
{
|
|
7
|
+
"location": null,
|
|
8
|
+
"level": 1,
|
|
9
|
+
"title": "Inference methods",
|
|
10
|
+
"text": "<p>genoSecretor maps FUT2 tag SNPs to haplotype alleles Se (functional), se (complete LoF, se428 / W143X), and Se^w (reduced activity, se385 / I129F), then to a recessive phenotype.</p> <p>Research use only. These methods type common alleles, not the full FUT2 allelic series. FUT3/Lewis typing is out of scope.</p>",
|
|
11
|
+
"path": [],
|
|
12
|
+
"tags": []
|
|
13
|
+
},
|
|
14
|
+
{
|
|
15
|
+
"location": "haplotype-rules",
|
|
16
|
+
"level": 2,
|
|
17
|
+
"title": "Haplotype rules",
|
|
18
|
+
"text": "<p>For each chromosome copy:</p> <ol> <li>If rs601338 = <code>LOF</code> → haplotype = se (epistatic: truncated FUT2 is null even if rs1047781 is also <code>WEAK</code>)</li> <li>Else if rs1047781 = <code>WEAK</code> → haplotype = Se^w</li> <li>Else if either marker is <code>FUNCTIONAL</code> → haplotype = Se</li> <li>Else → haplotype = unknown</li> </ol> <p></p> <p>Figure. One chromosome copy: <code>LOF</code> yields se; otherwise <code>WEAK</code> yields Se^w and <code>FUNCTIONAL</code> yields Se. Under <code>proxy</code>, rs601338 / rs602662 copy-count disagreement is CONFLICT, not a forced haplotype.</p>",
|
|
19
|
+
"path": [],
|
|
20
|
+
"tags": []
|
|
21
|
+
},
|
|
22
|
+
{
|
|
23
|
+
"location": "phenotype-table",
|
|
24
|
+
"level": 2,
|
|
25
|
+
"title": "Phenotype table",
|
|
26
|
+
"text": "Diplotype <code>secretor_status</code> Se/Se, Se/se, Se/Se^w secretor Se^w/Se^w, Se^w/se weak-secretor se/se non-secretor <p><code>--phenotype-coding biochemical</code> (default) uses this table. <code>--phenotype-coding gwas</code> recodes <code>Se^w/Se^w</code> and <code>Se^w/se</code> as non-secretor (Smyth 2011 / BBJ-style binary trait). <code>fut2_genotype</code> still keeps <code>Se^w</code>.</p> Diplotype biochemical gwas Se/Se, Se/se, Se/Se^w secretor secretor Se^w/Se^w, Se^w/se weak-secretor non-secretor se/se non-secretor non-secretor <p></p> <p>Figure. Sorted haplotypes (Se < Se^w < se) map to phenotype: any Se copy → secretor; Se^w/Se^w and Se^w/se → weak-secretor; se/se → non-secretor.</p>",
|
|
27
|
+
"path": [],
|
|
28
|
+
"tags": []
|
|
29
|
+
},
|
|
30
|
+
{
|
|
31
|
+
"location": "two-marker-default-when-both-snps-are-present",
|
|
32
|
+
"level": 2,
|
|
33
|
+
"title": "two-marker (default when both SNPs are present)",
|
|
34
|
+
"text": "<p>Uses rs601338 and rs1047781.</p> <p>Unphased double heterozygotes (het at both SNPs) are assigned Se^w/se under <code>--assume-trans</code> (default), because se428 and se385 typically sit on different continental haplotypes. <code>--no-assume-trans</code> leaves those samples ambiguous (<code>Se^w/se</code> vs cis <code>Se/se</code>).</p> <p></p> <p>Figure. Unphased <code>LOF</code>/<code>FUNCTIONAL</code> × <code>FUNCTIONAL</code>/<code>WEAK</code> is compatible with trans Se^w/se or cis Se/se (the double-mutant copy is still se). Default <code>--assume-trans</code> assigns Se^w/se; <code>--no-assume-trans</code> leaves the call ambiguous. Phased GT does not use this assumption.</p>",
|
|
35
|
+
"path": [],
|
|
36
|
+
"tags": []
|
|
37
|
+
},
|
|
38
|
+
{
|
|
39
|
+
"location": "common",
|
|
40
|
+
"level": 2,
|
|
41
|
+
"title": "common",
|
|
42
|
+
"text": "<p>rs601338 only. Homozygous LOF → se/se (non-secretor); otherwise secretor. Never emits weak-secretor. Poor choice as the sole method in East Asian cohorts.</p>",
|
|
43
|
+
"path": [],
|
|
44
|
+
"tags": []
|
|
45
|
+
},
|
|
46
|
+
{
|
|
47
|
+
"location": "eas",
|
|
48
|
+
"level": 2,
|
|
49
|
+
"title": "eas",
|
|
50
|
+
"text": "<p>rs1047781 only. Homozygous WEAK → Se^w/Se^w (weak-secretor); otherwise secretor. Never emits se/se from W143X. Poor choice as the sole method in European/African cohorts.</p>",
|
|
51
|
+
"path": [],
|
|
52
|
+
"tags": []
|
|
53
|
+
},
|
|
54
|
+
{
|
|
55
|
+
"location": "proxy",
|
|
56
|
+
"level": 2,
|
|
57
|
+
"title": "proxy",
|
|
58
|
+
"text": "<p>If rs601338 is usable, same as <code>common</code>. If it is missing, rs602662 SE_PROXY (A) is mapped to an LOF-like state and confidence is low. If both markers are present and copy counts disagree, QC status is CONFLICT.</p>",
|
|
59
|
+
"path": [],
|
|
60
|
+
"tags": []
|
|
61
|
+
},
|
|
62
|
+
{
|
|
63
|
+
"location": "auto-selection",
|
|
64
|
+
"level": 2,
|
|
65
|
+
"title": "Auto-selection",
|
|
66
|
+
"text": "<ol> <li>two-marker if rs601338 and rs1047781 are present</li> <li>common if rs601338 is present</li> <li>eas if rs1047781 is present</li> <li>proxy if rs602662 is present (low confidence)</li> </ol> <p><code>--strict-method</code> disables fallback when a requested method's minimum markers are missing.</p> <p>List methods:</p> <pre><code>genosecretor --methods\ngenosecretor --method-info two-marker\n</code></pre>",
|
|
67
|
+
"path": [],
|
|
68
|
+
"tags": []
|
|
69
|
+
}
|
|
70
|
+
],
|
|
71
|
+
"title": "Inference methods",
|
|
72
|
+
"toc": [
|
|
73
|
+
{
|
|
74
|
+
"title": "Inference methods",
|
|
75
|
+
"id": "inference-methods",
|
|
76
|
+
"url": "#inference-methods",
|
|
77
|
+
"children": [
|
|
78
|
+
{
|
|
79
|
+
"title": "Haplotype rules",
|
|
80
|
+
"id": "haplotype-rules",
|
|
81
|
+
"url": "#haplotype-rules",
|
|
82
|
+
"children": [],
|
|
83
|
+
"level": 2
|
|
84
|
+
},
|
|
85
|
+
{
|
|
86
|
+
"title": "Phenotype table",
|
|
87
|
+
"id": "phenotype-table",
|
|
88
|
+
"url": "#phenotype-table",
|
|
89
|
+
"children": [],
|
|
90
|
+
"level": 2
|
|
91
|
+
},
|
|
92
|
+
{
|
|
93
|
+
"title": "two-marker (default when both SNPs are present)",
|
|
94
|
+
"id": "two-marker-default-when-both-snps-are-present",
|
|
95
|
+
"url": "#two-marker-default-when-both-snps-are-present",
|
|
96
|
+
"children": [],
|
|
97
|
+
"level": 2
|
|
98
|
+
},
|
|
99
|
+
{
|
|
100
|
+
"title": "common",
|
|
101
|
+
"id": "common",
|
|
102
|
+
"url": "#common",
|
|
103
|
+
"children": [],
|
|
104
|
+
"level": 2
|
|
105
|
+
},
|
|
106
|
+
{
|
|
107
|
+
"title": "eas",
|
|
108
|
+
"id": "eas",
|
|
109
|
+
"url": "#eas",
|
|
110
|
+
"children": [],
|
|
111
|
+
"level": 2
|
|
112
|
+
},
|
|
113
|
+
{
|
|
114
|
+
"title": "proxy",
|
|
115
|
+
"id": "proxy",
|
|
116
|
+
"url": "#proxy",
|
|
117
|
+
"children": [],
|
|
118
|
+
"level": 2
|
|
119
|
+
},
|
|
120
|
+
{
|
|
121
|
+
"title": "Auto-selection",
|
|
122
|
+
"id": "auto-selection",
|
|
123
|
+
"url": "#auto-selection",
|
|
124
|
+
"children": [],
|
|
125
|
+
"level": 2
|
|
126
|
+
}
|
|
127
|
+
],
|
|
128
|
+
"level": 1
|
|
129
|
+
}
|
|
130
|
+
]
|
|
131
|
+
},
|
|
132
|
+
"hash": 10971299751445454698
|
|
133
|
+
}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
{
|
|
2
|
+
"data": "\n<!doctype html>\n<html lang=\"en\" class=\"no-js\">\n <head>\n \n <meta charset=\"utf-8\">\n <meta name=\"viewport\" content=\"width=device-width,initial-scale=1\">\n \n <meta name=\"description\" content=\"Genetically determined FUT2 secretor status inference from genotype datasets\">\n \n \n <meta name=\"author\" content=\"Yunye He\">\n \n \n <link rel=\"canonical\" href=\"https://cloufield.github.io/genoSecretor/assumptions/\">\n \n \n <link rel=\"prev\" href=\"../markers/\">\n \n \n <link rel=\"next\" href=\"../examples/\">\n \n \n \n \n \n <link rel=\"icon\" href=\"../assets/images/favicon.png\">\n <meta name=\"generator\" content=\"zensical-0.0.15\">\n \n \n \n <title>Assumptions and limitations - genoSecretor</title>\n \n \n \n \n \n \n <link rel=\"stylesheet\" href=\"../assets/stylesheets/modern/main.f1b6466b.min.css\">\n \n \n \n \n <link rel=\"stylesheet\" href=\"../assets/stylesheets/modern/palette.dfe2e883.min.css\">\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n <style>:root{}</style>\n\n\n\n \n \n \n \n \n \n \n \n <link rel=\"preconnect\" href=\"https://fonts.gstatic.com\" crossorigin>\n <link rel=\"stylesheet\" href=\"https://fonts.googleapis.com/css?family=Inter:300,300i,400,400i,500,500i,700,700i%7CJetBrains+Mono:400,400i,700,700i&display=fallback\">\n <style>:root{--md-text-font:\"Inter\";--md-code-font:\"JetBrains Mono\"}</style>\n \n \n \n <script>__md_scope=new URL(\"..\",location),__md_hash=e=>[...e].reduce(((e,t)=>(e<<5)-e+t.charCodeAt(0)),0),__md_get=(e,t=localStorage,a=__md_scope)=>JSON.parse(t.getItem(a.pathname+\".\"+e)),__md_set=(e,t,a=localStorage,_=__md_scope)=>{try{a.setItem(_.pathname+\".\"+e,JSON.stringify(t))}catch(e){}},document.documentElement.setAttribute(\"data-platform\",navigator.platform)</script>\n \n \n\n \n \n </head>\n \n \n \n \n \n \n \n \n \n <body dir=\"ltr\" data-md-color-scheme=\"default\" data-md-color-primary=\"indigo\" data-md-color-accent=\"indigo\">\n \n \n <input class=\"md-toggle\" data-md-toggle=\"drawer\" type=\"checkbox\" id=\"__drawer\" autocomplete=\"off\">\n <input class=\"md-toggle\" data-md-toggle=\"search\" type=\"checkbox\" id=\"__search\" autocomplete=\"off\">\n <label class=\"md-overlay\" for=\"__drawer\"></label>\n <div data-md-component=\"skip\">\n \n \n <a href=\"#assumptions-and-limitations\" class=\"md-skip\">\n Skip to content\n </a>\n \n </div>\n <div data-md-component=\"announce\">\n \n </div>\n \n \n \n\n \n\n<header class=\"md-header md-header--shadow\" data-md-component=\"header\">\n <nav class=\"md-header__inner md-grid\" aria-label=\"Header\">\n <a href=\"..\" title=\"genoSecretor\" class=\"md-header__button md-logo\" aria-label=\"genoSecretor\" data-md-component=\"logo\">\n \n \n <svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\" class=\"lucide lucide-book-open\" viewBox=\"0 0 24 24\"><path d=\"M12 7v14M3 18a1 1 0 0 1-1-1V4a1 1 0 0 1 1-1h5a4 4 0 0 1 4 4 4 4 0 0 1 4-4h5a1 1 0 0 1 1 1v13a1 1 0 0 1-1 1h-6a3 3 0 0 0-3 3 3 3 0 0 0-3-3z\"/></svg>\n\n </a>\n <label class=\"md-header__button md-icon\" for=\"__drawer\">\n \n <svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\" class=\"lucide lucide-menu\" viewBox=\"0 0 24 24\"><path d=\"M4 5h16M4 12h16M4 19h16\"/></svg>\n </label>\n <div class=\"md-header__title\" data-md-component=\"header-title\">\n <div class=\"md-header__ellipsis\">\n <div class=\"md-header__topic\">\n <span class=\"md-ellipsis\">\n genoSecretor\n </span>\n </div>\n <div class=\"md-header__topic\" data-md-component=\"header-topic\">\n <span class=\"md-ellipsis\">\n \n Assumptions and limitations\n \n </span>\n </div>\n </div>\n </div>\n \n \n <form class=\"md-header__option\" data-md-component=\"palette\">\n \n \n \n \n <input class=\"md-option\" data-md-color-media=\"(prefers-color-scheme)\" data-md-color-scheme=\"default\" data-md-color-primary=\"indigo\" data-md-color-accent=\"indigo\" aria-label=\"Switch to light mode\" type=\"radio\" name=\"__palette\" id=\"__palette_0\">\n \n <label class=\"md-header__button md-icon\" title=\"Switch to light mode\" for=\"__palette_1\" hidden>\n <svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\" class=\"lucide lucide-sun-moon\" viewBox=\"0 0 24 24\"><path d=\"M12 2v2M14.837 16.385a6 6 0 1 1-7.223-7.222c.624-.147.97.66.715 1.248a4 4 0 0 0 5.26 5.259c.589-.255 1.396.09 1.248.715M16 12a4 4 0 0 0-4-4M19 5l-1.256 1.256M20 12h2\"/></svg>\n </label>\n \n \n \n \n \n <input class=\"md-option\" data-md-color-media=\"(prefers-color-scheme: light)\" data-md-color-scheme=\"default\" data-md-color-primary=\"indigo\" data-md-color-accent=\"indigo\" aria-label=\"Switch to dark mode\" type=\"radio\" name=\"__palette\" id=\"__palette_1\">\n \n <label class=\"md-header__button md-icon\" title=\"Switch to dark mode\" for=\"__palette_2\" hidden>\n <svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\" class=\"lucide lucide-sun\" viewBox=\"0 0 24 24\"><circle cx=\"12\" cy=\"12\" r=\"4\"/><path d=\"M12 2v2M12 20v2M4.93 4.93l1.41 1.41M17.66 17.66l1.41 1.41M2 12h2M20 12h2M6.34 17.66l-1.41 1.41M19.07 4.93l-1.41 1.41\"/></svg>\n </label>\n \n \n \n \n \n <input class=\"md-option\" data-md-color-media=\"(prefers-color-scheme: dark)\" data-md-color-scheme=\"slate\" data-md-color-primary=\"indigo\" data-md-color-accent=\"indigo\" aria-label=\"Switch to system preference\" type=\"radio\" name=\"__palette\" id=\"__palette_2\">\n \n <label class=\"md-header__button md-icon\" title=\"Switch to system preference\" for=\"__palette_0\" hidden>\n <svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\" class=\"lucide lucide-moon\" viewBox=\"0 0 24 24\"><path d=\"M20.985 12.486a9 9 0 1 1-9.473-9.472c.405-.022.617.46.402.803a6 6 0 0 0 8.268 8.268c.344-.215.825-.004.803.401\"/></svg>\n </label>\n \n \n</form>\n \n \n \n <script>var palette=__md_get(\"__palette\");if(palette&&palette.color){if(\"(prefers-color-scheme)\"===palette.color.media){var media=matchMedia(\"(prefers-color-scheme: light)\"),input=document.querySelector(media.matches?\"[data-md-color-media='(prefers-color-scheme: light)']\":\"[data-md-color-media='(prefers-color-scheme: dark)']\");palette.color.media=input.getAttribute(\"data-md-color-media\"),palette.color.scheme=input.getAttribute(\"data-md-color-scheme\"),palette.color.primary=input.getAttribute(\"data-md-color-primary\"),palette.color.accent=input.getAttribute(\"data-md-color-accent\")}for(var[key,value]of Object.entries(palette.color))document.body.setAttribute(\"data-md-color-\"+key,value)}</script>\n \n \n \n \n \n <label class=\"md-header__button md-icon\" for=\"__search\">\n \n <svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\" class=\"lucide lucide-search\" viewBox=\"0 0 24 24\"><path d=\"m21 21-4.34-4.34\"/><circle cx=\"11\" cy=\"11\" r=\"8\"/></svg>\n </label>\n <div class=\"md-search\" data-md-component=\"search\" role=\"dialog\" aria-label=\"Search\">\n <button type=\"button\" class=\"md-search__button\">\n Search\n </button>\n</div>\n \n \n <div class=\"md-header__source\">\n \n <a href=\"https://github.com/cloufield/genoSecretor\" title=\"Go to repository\" class=\"md-source\" data-md-component=\"source\">\n <div class=\"md-source__icon md-icon\">\n \n <svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 448 512\"><!--! Font Awesome Free 7.1.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2025 Fonticons, Inc.--><path fill=\"currentColor\" d=\"M439.6 236.1 244 40.5c-5.4-5.5-12.8-8.5-20.4-8.5s-15 3-20.4 8.4L162.5 81l51.5 51.5c27.1-9.1 52.7 16.8 43.4 43.7l49.7 49.7c34.2-11.8 61.2 31 35.5 56.7-26.5 26.5-70.2-2.9-56-37.3L240.3 199v121.9c25.3 12.5 22.3 41.8 9.1 55-6.4 6.4-15.2 10.1-24.3 10.1s-17.8-3.6-24.3-10.1c-17.6-17.6-11.1-46.9 11.2-56v-123c-20.8-8.5-24.6-30.7-18.6-45L142.6 101 8.5 235.1C3 240.6 0 247.9 0 255.5s3 15 8.5 20.4l195.6 195.7c5.4 5.4 12.7 8.4 20.4 8.4s15-3 20.4-8.4l194.7-194.7c5.4-5.4 8.4-12.8 8.4-20.4s-3-15-8.4-20.4\"/></svg>\n </div>\n <div class=\"md-source__repository\">\n cloufield/genoSecretor\n </div>\n</a>\n \n </div>\n </nav>\n \n</header>\n \n <div class=\"md-container\" data-md-component=\"container\">\n \n \n \n \n \n \n <main class=\"md-main\" data-md-component=\"main\">\n <div class=\"md-main__inner md-grid\">\n \n \n \n <div class=\"md-sidebar md-sidebar--primary\" data-md-component=\"sidebar\" data-md-type=\"navigation\" >\n <div class=\"md-sidebar__scrollwrap\">\n <div class=\"md-sidebar__inner\">\n \n\n\n\n<nav class=\"md-nav md-nav--primary\" aria-label=\"Navigation\" data-md-level=\"0\">\n <label class=\"md-nav__title\" for=\"__drawer\">\n <a href=\"..\" title=\"genoSecretor\" class=\"md-nav__button md-logo\" aria-label=\"genoSecretor\" data-md-component=\"logo\">\n \n \n <svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\" class=\"lucide lucide-book-open\" viewBox=\"0 0 24 24\"><path d=\"M12 7v14M3 18a1 1 0 0 1-1-1V4a1 1 0 0 1 1-1h5a4 4 0 0 1 4 4 4 4 0 0 1 4-4h5a1 1 0 0 1 1 1v13a1 1 0 0 1-1 1h-6a3 3 0 0 0-3 3 3 3 0 0 0-3-3z\"/></svg>\n\n </a>\n genoSecretor\n </label>\n \n <div class=\"md-nav__source\">\n <a href=\"https://github.com/cloufield/genoSecretor\" title=\"Go to repository\" class=\"md-source\" data-md-component=\"source\">\n <div class=\"md-source__icon md-icon\">\n \n <svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 448 512\"><!--! Font Awesome Free 7.1.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2025 Fonticons, Inc.--><path fill=\"currentColor\" d=\"M439.6 236.1 244 40.5c-5.4-5.5-12.8-8.5-20.4-8.5s-15 3-20.4 8.4L162.5 81l51.5 51.5c27.1-9.1 52.7 16.8 43.4 43.7l49.7 49.7c34.2-11.8 61.2 31 35.5 56.7-26.5 26.5-70.2-2.9-56-37.3L240.3 199v121.9c25.3 12.5 22.3 41.8 9.1 55-6.4 6.4-15.2 10.1-24.3 10.1s-17.8-3.6-24.3-10.1c-17.6-17.6-11.1-46.9 11.2-56v-123c-20.8-8.5-24.6-30.7-18.6-45L142.6 101 8.5 235.1C3 240.6 0 247.9 0 255.5s3 15 8.5 20.4l195.6 195.7c5.4 5.4 12.7 8.4 20.4 8.4s15-3 20.4-8.4l194.7-194.7c5.4-5.4 8.4-12.8 8.4-20.4s-3-15-8.4-20.4\"/></svg>\n </div>\n <div class=\"md-source__repository\">\n cloufield/genoSecretor\n </div>\n</a>\n </div>\n \n <ul class=\"md-nav__list\" data-md-scrollfix>\n \n \n \n \n \n \n \n <li class=\"md-nav__item\">\n <a href=\"..\" class=\"md-nav__link\">\n \n \n \n <span class=\"md-ellipsis\">\n \n \n Home\n \n\n \n </span>\n \n \n\n </a>\n </li>\n \n\n \n \n \n \n \n \n \n <li class=\"md-nav__item\">\n <a href=\"../usage/\" class=\"md-nav__link\">\n \n \n \n <span class=\"md-ellipsis\">\n \n \n Usage\n \n\n \n </span>\n \n \n\n </a>\n </li>\n \n\n \n \n \n \n \n \n \n <li class=\"md-nav__item\">\n <a href=\"../workflow/\" class=\"md-nav__link\">\n \n \n \n <span class=\"md-ellipsis\">\n \n \n Workflow\n \n\n \n </span>\n \n \n\n </a>\n </li>\n \n\n \n \n \n \n \n \n \n <li class=\"md-nav__item\">\n <a href=\"../methods/\" class=\"md-nav__link\">\n \n \n \n <span class=\"md-ellipsis\">\n \n \n Methods\n \n\n \n </span>\n \n \n\n </a>\n </li>\n \n\n \n \n \n \n \n \n \n <li class=\"md-nav__item\">\n <a href=\"../markers/\" class=\"md-nav__link\">\n \n \n \n <span class=\"md-ellipsis\">\n \n \n Markers\n \n\n \n </span>\n \n \n\n </a>\n </li>\n \n\n \n \n \n \n \n \n \n \n \n <li class=\"md-nav__item md-nav__item--active\">\n \n <input class=\"md-nav__toggle md-toggle\" type=\"checkbox\" id=\"__toc\">\n \n \n \n \n \n <label class=\"md-nav__link md-nav__link--active\" for=\"__toc\">\n \n \n \n <span class=\"md-ellipsis\">\n \n \n Assumptions\n \n\n \n </span>\n \n \n\n <span class=\"md-nav__icon md-icon\"></span>\n </label>\n \n <a href=\"./\" class=\"md-nav__link md-nav__link--active\">\n \n \n \n <span class=\"md-ellipsis\">\n \n \n Assumptions\n \n\n \n </span>\n \n \n\n </a>\n \n \n\n\n<nav class=\"md-nav md-nav--secondary\" aria-label=\"On this page\">\n \n \n \n \n \n \n <label class=\"md-nav__title\" for=\"__toc\">\n <span class=\"md-nav__icon md-icon\"></span>\n On this page\n </label>\n <ul class=\"md-nav__list\" data-md-component=\"toc\" data-md-scrollfix>\n \n <li class=\"md-nav__item\">\n <a href=\"#what-is-modelled\" class=\"md-nav__link\">\n <span class=\"md-ellipsis\">\n \n What is modelled\n \n </span>\n </a>\n \n</li>\n \n <li class=\"md-nav__item\">\n <a href=\"#what-is-not-modelled\" class=\"md-nav__link\">\n <span class=\"md-ellipsis\">\n \n What is not modelled\n \n </span>\n </a>\n \n</li>\n \n <li class=\"md-nav__item\">\n <a href=\"#weak-secretor-vs-gwas-binary-coding\" class=\"md-nav__link\">\n <span class=\"md-ellipsis\">\n \n Weak-secretor vs GWAS binary coding\n \n </span>\n </a>\n \n</li>\n \n <li class=\"md-nav__item\">\n <a href=\"#-assume-trans\" class=\"md-nav__link\">\n <span class=\"md-ellipsis\">\n \n --assume-trans\n \n </span>\n </a>\n \n</li>\n \n <li class=\"md-nav__item\">\n <a href=\"#proxy-ld\" class=\"md-nav__link\">\n <span class=\"md-ellipsis\">\n \n Proxy LD\n \n </span>\n </a>\n \n</li>\n \n <li class=\"md-nav__item\">\n <a href=\"#validation\" class=\"md-nav__link\">\n <span class=\"md-ellipsis\">\n \n Validation\n \n </span>\n </a>\n \n</li>\n \n </ul>\n \n</nav>\n \n </li>\n \n\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n <li class=\"md-nav__item md-nav__item--section md-nav__item--nested\">\n \n \n \n <input class=\"md-nav__toggle md-toggle \" type=\"checkbox\" id=\"__nav_7\" >\n \n \n <div class=\"md-nav__link md-nav__container\">\n <a href=\"../examples/\" class=\"md-nav__link \">\n \n \n \n <span class=\"md-ellipsis\">\n \n \n Examples\n \n\n \n </span>\n \n \n\n </a>\n \n \n <label class=\"md-nav__link \" for=\"__nav_7\" id=\"__nav_7_label\" tabindex=\"\">\n <span class=\"md-nav__icon md-icon\"></span>\n </label>\n \n </div>\n \n <nav class=\"md-nav\" data-md-level=\"1\" aria-labelledby=\"__nav_7_label\" aria-expanded=\"false\">\n <label class=\"md-nav__title\" for=\"__nav_7\">\n <span class=\"md-nav__icon md-icon\"></span>\n \n \n Examples\n \n\n </label>\n <ul class=\"md-nav__list\" data-md-scrollfix>\n \n \n \n \n \n \n \n \n \n <li class=\"md-nav__item\">\n <a href=\"../examples/synthetic/\" class=\"md-nav__link\">\n \n \n \n <span class=\"md-ellipsis\">\n \n \n Synthetic cohort\n \n\n \n </span>\n \n \n\n </a>\n </li>\n \n\n \n \n \n \n \n \n \n \n <li class=\"md-nav__item\">\n <a href=\"../examples/1kg/\" class=\"md-nav__link\">\n \n \n \n <span class=\"md-ellipsis\">\n \n \n 1000 Genomes\n \n\n \n </span>\n \n \n\n </a>\n </li>\n \n\n \n \n \n \n \n \n \n \n <li class=\"md-nav__item\">\n <a href=\"../examples/1kg-assume-trans/\" class=\"md-nav__link\">\n \n \n \n <span class=\"md-ellipsis\">\n \n \n 1000 Genomes assume-trans\n \n\n \n </span>\n \n \n\n </a>\n </li>\n \n\n \n \n \n \n \n \n \n \n <li class=\"md-nav__item\">\n <a href=\"../examples/report/\" class=\"md-nav__link\">\n \n \n \n <span class=\"md-ellipsis\">\n \n \n Example reports\n \n\n \n </span>\n \n \n\n </a>\n </li>\n \n\n \n \n </ul>\n </nav>\n \n </li>\n \n\n \n \n \n \n \n \n \n <li class=\"md-nav__item\">\n <a href=\"../updatelog/\" class=\"md-nav__link\">\n \n \n \n <span class=\"md-ellipsis\">\n \n \n Update Log\n \n\n \n </span>\n \n \n\n </a>\n </li>\n \n\n \n </ul>\n</nav>\n </div>\n </div>\n </div>\n \n \n \n <div class=\"md-sidebar md-sidebar--secondary\" data-md-component=\"sidebar\" data-md-type=\"toc\" >\n <div class=\"md-sidebar__scrollwrap\">\n <div class=\"md-sidebar__inner\">\n \n\n\n<nav class=\"md-nav md-nav--secondary\" aria-label=\"On this page\">\n \n \n \n \n \n \n <label class=\"md-nav__title\" for=\"__toc\">\n <span class=\"md-nav__icon md-icon\"></span>\n On this page\n </label>\n <ul class=\"md-nav__list\" data-md-component=\"toc\" data-md-scrollfix>\n \n <li class=\"md-nav__item\">\n <a href=\"#what-is-modelled\" class=\"md-nav__link\">\n <span class=\"md-ellipsis\">\n \n What is modelled\n \n </span>\n </a>\n \n</li>\n \n <li class=\"md-nav__item\">\n <a href=\"#what-is-not-modelled\" class=\"md-nav__link\">\n <span class=\"md-ellipsis\">\n \n What is not modelled\n \n </span>\n </a>\n \n</li>\n \n <li class=\"md-nav__item\">\n <a href=\"#weak-secretor-vs-gwas-binary-coding\" class=\"md-nav__link\">\n <span class=\"md-ellipsis\">\n \n Weak-secretor vs GWAS binary coding\n \n </span>\n </a>\n \n</li>\n \n <li class=\"md-nav__item\">\n <a href=\"#-assume-trans\" class=\"md-nav__link\">\n <span class=\"md-ellipsis\">\n \n --assume-trans\n \n </span>\n </a>\n \n</li>\n \n <li class=\"md-nav__item\">\n <a href=\"#proxy-ld\" class=\"md-nav__link\">\n <span class=\"md-ellipsis\">\n \n Proxy LD\n \n </span>\n </a>\n \n</li>\n \n <li class=\"md-nav__item\">\n <a href=\"#validation\" class=\"md-nav__link\">\n <span class=\"md-ellipsis\">\n \n Validation\n \n </span>\n </a>\n \n</li>\n \n </ul>\n \n</nav>\n </div>\n </div>\n </div>\n \n \n \n <div class=\"md-content\" data-md-component=\"content\">\n \n <article class=\"md-content__inner md-typeset\">\n \n \n \n \n\n\n<h1 id=\"assumptions-and-limitations\">Assumptions and limitations<a class=\"headerlink\" href=\"#assumptions-and-limitations\" title=\"Permanent link\">¶</a></h1>\n<blockquote>\n<p><strong>Research use only.</strong> genoSecretor infers FUT2 secretor status from a small set of tag SNPs. It is not a serological or clinical test.</p>\n</blockquote>\n<h2 id=\"what-is-modelled\">What is modelled<a class=\"headerlink\" href=\"#what-is-modelled\" title=\"Permanent link\">¶</a></h2>\n<ul>\n<li>Recessive FUT2: two loss-of-function / weak haplotypes are required for non-secretor or weak-secretor phenotypes.</li>\n<li>se428 (rs601338 W143X) as a complete null.</li>\n<li>se385 (rs1047781 I129F) as a reduced-activity (weak) allele. Under default <code>--phenotype-coding biochemical</code>, homozygous or compound-with-se genotypes are <strong>weak-secretor</strong>. <code>--phenotype-coding gwas</code> recodes those calls as <strong>non-secretor</strong>.</li>\n<li>rs602662 as an LD proxy for se428 only.</li>\n</ul>\n<h2 id=\"what-is-not-modelled\">What is not modelled<a class=\"headerlink\" href=\"#what-is-not-modelled\" title=\"Permanent link\">¶</a></h2>\n<ul>\n<li>Rare FUT2 nulls, fusions, and regulatory alleles.</li>\n<li>FUT3 / Lewis (Le^a / Le^b) phenotypes.</li>\n<li>Salivary ABH serology or norovirus binding assays.</li>\n<li>Calibrated probabilities (confidence is ordinal: high / medium / low / none).</li>\n</ul>\n<h2 id=\"weak-secretor-vs-gwas-binary-coding\">Weak-secretor vs GWAS binary coding<a class=\"headerlink\" href=\"#weak-secretor-vs-gwas-binary-coding\" title=\"Permanent link\">¶</a></h2>\n<p>se385 is not a complete FUT2 null. Blood-group papers report residual enzyme activity and a <strong>weak-secretor</strong> / Le(a+b+) phenotype (Henry et al. 1996; Koda et al. 1996; Soejima and Koda 2021). Many GWAS papers treat homozygous se385 (rs1047781 T/T) as <strong>non-secretor</strong> (Smyth et al. 2011; He et al. 2023 BBJ peptic-ulcer coding).</p>\n<ul>\n<li><code>--phenotype-coding biochemical</code> (default): <code>Se^w/Se^w</code> and <code>Se^w/se</code> → <code>weak-secretor</code>; <code>se/se</code> → <code>non-secretor</code>.</li>\n<li><code>--phenotype-coding gwas</code>: those <code>Se^w</code> diplotypes are recoded as <code>non-secretor</code>. Heterozygotes with a functional Se copy (<code>Se/Se^w</code>, <code>Se/se</code>) stay secretor.</li>\n</ul>\n<p><code>fut2_genotype</code> always keeps <code>Se^w</code>. Python: <code>SecretorCaller(phenotype_coding=\"gwas\")</code>.</p>\n<h2 id=\"-assume-trans\"><code>--assume-trans</code><a class=\"headerlink\" href=\"#-assume-trans\" title=\"Permanent link\">¶</a></h2>\n<p>Unphased heterozygotes at <strong>both</strong> functional SNPs are compatible with trans <code>Se^w/se</code> (weak-secretor) or cis <code>Se</code> plus a double-mutant haplotype (secretor). The default assigns trans. Pass <code>--no-assume-trans</code> to leave those samples ambiguous.</p>\n<p>In 1000 Genomes 30x hg38, that unphased pattern is rare because se428 and se385 almost never co-occur (zero double-hets in AFR/AMR/EUR; one trans double-het in EAS). See <a href=\"../examples/1kg-assume-trans/\">1000 Genomes <code>--assume-trans</code></a>. That check uses <strong>phase</strong>, not salivary serology.</p>\n<h2 id=\"proxy-ld\">Proxy LD<a class=\"headerlink\" href=\"#proxy-ld\" title=\"Permanent link\">¶</a></h2>\n<p>rs602662 is strongly correlated with rs601338 in European cohorts and is a poorer tag in populations where se385 (not se428) is the common reduced-activity allele. Proxy calls are always low confidence.</p>\n<h2 id=\"validation\">Validation<a class=\"headerlink\" href=\"#validation\" title=\"Permanent link\">¶</a></h2>\n<p>genoSecretor has not been validated against salivary ABH typing across ancestries.</p>\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n </article>\n </div>\n \n \n <script>var tabs=__md_get(\"__tabs\");if(Array.isArray(tabs))e:for(var set of document.querySelectorAll(\".tabbed-set\")){var labels=set.querySelector(\".tabbed-labels\");for(var tab of tabs)for(var label of labels.getElementsByTagName(\"label\"))if(label.innerText.trim()===tab){var input=document.getElementById(label.htmlFor);input.checked=!0;continue e}}</script>\n\n<script>var target=document.getElementById(location.hash.slice(1));target&&target.name&&(target.checked=target.name.startsWith(\"__tabbed_\"))</script>\n </div>\n \n <button type=\"button\" class=\"md-top md-icon\" data-md-component=\"top\" hidden>\n \n <svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\" class=\"lucide lucide-circle-arrow-up\" viewBox=\"0 0 24 24\"><circle cx=\"12\" cy=\"12\" r=\"10\"/><path d=\"m16 12-4-4-4 4M12 16V8\"/></svg>\n Back to top\n</button>\n \n </main>\n \n <footer class=\"md-footer\">\n \n \n \n <nav class=\"md-footer__inner md-grid\" aria-label=\"Footer\" >\n \n \n <a href=\"../markers/\" class=\"md-footer__link md-footer__link--prev\" aria-label=\"Previous: Markers\">\n <div class=\"md-footer__button md-icon\">\n \n <svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\" class=\"lucide lucide-arrow-left\" viewBox=\"0 0 24 24\"><path d=\"m12 19-7-7 7-7M19 12H5\"/></svg>\n </div>\n <div class=\"md-footer__title\">\n <span class=\"md-footer__direction\">\n Previous\n </span>\n <div class=\"md-ellipsis\">\n Markers\n </div>\n </div>\n </a>\n \n \n \n <a href=\"../examples/\" class=\"md-footer__link md-footer__link--next\" aria-label=\"Next: Examples\">\n <div class=\"md-footer__title\">\n <span class=\"md-footer__direction\">\n Next\n </span>\n <div class=\"md-ellipsis\">\n Examples\n </div>\n </div>\n <div class=\"md-footer__button md-icon\">\n \n <svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\" class=\"lucide lucide-arrow-right\" viewBox=\"0 0 24 24\"><path d=\"M5 12h14M12 5l7 7-7 7\"/></svg>\n </div>\n </a>\n \n </nav>\n \n \n <div class=\"md-footer-meta md-typeset\">\n <div class=\"md-footer-meta__inner md-grid\">\n <div class=\"md-copyright\">\n \n <div class=\"md-copyright__highlight\">\n Copyright © 2026 Yunye He\n </div>\n \n \n Made with\n <a href=\"https://zensical.org/\" target=\"_blank\" rel=\"noopener\">\n Zensical\n </a>\n \n</div>\n \n \n<div class=\"md-social\">\n \n \n \n \n \n \n \n \n <a href=\"https://github.com/cloufield/genoSecretor\" target=\"_blank\" rel=\"noopener\" title=\"github.com\" class=\"md-social__link\">\n <svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 512 512\"><!--! Font Awesome Free 7.1.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2025 Fonticons, Inc.--><path fill=\"currentColor\" d=\"M173.9 397.4c0 2-2.3 3.6-5.2 3.6-3.3.3-5.6-1.3-5.6-3.6 0-2 2.3-3.6 5.2-3.6 3-.3 5.6 1.3 5.6 3.6m-31.1-4.5c-.7 2 1.3 4.3 4.3 4.9 2.6 1 5.6 0 6.2-2s-1.3-4.3-4.3-5.2c-2.6-.7-5.5.3-6.2 2.3m44.2-1.7c-2.9.7-4.9 2.6-4.6 4.9.3 2 2.9 3.3 5.9 2.6 2.9-.7 4.9-2.6 4.6-4.6-.3-1.9-3-3.2-5.9-2.9M252.8 8C114.1 8 8 113.3 8 252c0 110.9 69.8 205.8 169.5 239.2 12.8 2.3 17.3-5.6 17.3-12.1 0-6.2-.3-40.4-.3-61.4 0 0-70 15-84.7-29.8 0 0-11.4-29.1-27.8-36.6 0 0-22.9-15.7 1.6-15.4 0 0 24.9 2 38.6 25.8 21.9 38.6 58.6 27.5 72.9 20.9 2.3-16 8.8-27.1 16-33.7-55.9-6.2-112.3-14.3-112.3-110.5 0-27.5 7.6-41.3 23.6-58.9-2.6-6.5-11.1-33.3 2.6-67.9 20.9-6.5 69 27 69 27 20-5.6 41.5-8.5 62.8-8.5s42.8 2.9 62.8 8.5c0 0 48.1-33.6 69-27 13.7 34.7 5.2 61.4 2.6 67.9 16 17.7 25.8 31.5 25.8 58.9 0 96.5-58.9 104.2-114.8 110.5 9.2 7.9 17 22.9 17 46.4 0 33.7-.3 75.4-.3 83.6 0 6.5 4.6 14.4 17.3 12.1C436.2 457.8 504 362.9 504 252 504 113.3 391.5 8 252.8 8M105.2 352.9c-1.3 1-1 3.3.7 5.2 1.6 1.6 3.9 2.3 5.2 1 1.3-1 1-3.3-.7-5.2-1.6-1.6-3.9-2.3-5.2-1m-10.8-8.1c-.7 1.3.3 2.9 2.3 3.9 1.6 1 3.6.7 4.3-.7.7-1.3-.3-2.9-2.3-3.9-2-.6-3.6-.3-4.3.7m32.4 35.6c-1.6 1.3-1 4.3 1.3 6.2 2.3 2.3 5.2 2.6 6.5 1 1.3-1.3.7-4.3-1.3-6.2-2.2-2.3-5.2-2.6-6.5-1m-11.4-14.7c-1.6 1-1.6 3.6 0 5.9s4.3 3.3 5.6 2.3c1.6-1.3 1.6-3.9 0-6.2-1.4-2.3-4-3.3-5.6-2\"/></svg>\n </a>\n \n</div>\n \n </div>\n </div>\n</footer>\n \n </div>\n <div class=\"md-dialog\" data-md-component=\"dialog\">\n <div class=\"md-dialog__inner md-typeset\"></div>\n </div>\n \n \n \n \n \n \n <script id=\"__config\" type=\"application/json\">{\"annotate\":null,\"base\":\"..\",\"features\":[\"content.code.copy\",\"content.tabs.link\",\"navigation.footer\",\"navigation.indexes\",\"navigation.sections\",\"navigation.top\",\"search.highlight\",\"toc.follow\"],\"search\":\"../assets/javascripts/workers/search.e2d2d235.min.js\",\"tags\":null,\"translations\":{\"clipboard.copied\":\"Copied to clipboard\",\"clipboard.copy\":\"Copy to clipboard\",\"search.result.more.one\":\"1 more on this page\",\"search.result.more.other\":\"# more on this page\",\"search.result.none\":\"No matching documents\",\"search.result.one\":\"1 matching document\",\"search.result.other\":\"# matching documents\",\"search.result.placeholder\":\"Type to start searching\",\"search.result.term.missing\":\"Missing\",\"select.version\":\"Select version\"},\"version\":null}</script>\n \n \n <script src=\"../assets/javascripts/bundle.00c35305.min.js\"></script>\n \n \n </body>\n</html>",
|
|
3
|
+
"hash": 1076251634859645339
|
|
4
|
+
}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
{
|
|
2
|
+
"data": "\n<!doctype html>\n<html lang=\"en\" class=\"no-js\">\n <head>\n \n <meta charset=\"utf-8\">\n <meta name=\"viewport\" content=\"width=device-width,initial-scale=1\">\n \n <meta name=\"description\" content=\"Genetically determined FUT2 secretor status inference from genotype datasets\">\n \n \n <meta name=\"author\" content=\"Yunye He\">\n \n \n <link rel=\"canonical\" href=\"https://cloufield.github.io/genoSecretor/usage/\">\n \n \n <link rel=\"prev\" href=\"..\">\n \n \n <link rel=\"next\" href=\"../workflow/\">\n \n \n \n \n \n <link rel=\"icon\" href=\"../assets/images/favicon.png\">\n <meta name=\"generator\" content=\"zensical-0.0.15\">\n \n \n \n <title>Usage - genoSecretor</title>\n \n \n \n \n \n \n <link rel=\"stylesheet\" href=\"../assets/stylesheets/modern/main.f1b6466b.min.css\">\n \n \n \n \n <link rel=\"stylesheet\" href=\"../assets/stylesheets/modern/palette.dfe2e883.min.css\">\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n <style>:root{}</style>\n\n\n\n \n \n \n \n \n \n \n \n <link rel=\"preconnect\" href=\"https://fonts.gstatic.com\" crossorigin>\n <link rel=\"stylesheet\" href=\"https://fonts.googleapis.com/css?family=Inter:300,300i,400,400i,500,500i,700,700i%7CJetBrains+Mono:400,400i,700,700i&display=fallback\">\n <style>:root{--md-text-font:\"Inter\";--md-code-font:\"JetBrains Mono\"}</style>\n \n \n \n <script>__md_scope=new URL(\"..\",location),__md_hash=e=>[...e].reduce(((e,t)=>(e<<5)-e+t.charCodeAt(0)),0),__md_get=(e,t=localStorage,a=__md_scope)=>JSON.parse(t.getItem(a.pathname+\".\"+e)),__md_set=(e,t,a=localStorage,_=__md_scope)=>{try{a.setItem(_.pathname+\".\"+e,JSON.stringify(t))}catch(e){}},document.documentElement.setAttribute(\"data-platform\",navigator.platform)</script>\n \n \n\n \n \n </head>\n \n \n \n \n \n \n \n \n \n <body dir=\"ltr\" data-md-color-scheme=\"default\" data-md-color-primary=\"indigo\" data-md-color-accent=\"indigo\">\n \n \n <input class=\"md-toggle\" data-md-toggle=\"drawer\" type=\"checkbox\" id=\"__drawer\" autocomplete=\"off\">\n <input class=\"md-toggle\" data-md-toggle=\"search\" type=\"checkbox\" id=\"__search\" autocomplete=\"off\">\n <label class=\"md-overlay\" for=\"__drawer\"></label>\n <div data-md-component=\"skip\">\n \n \n <a href=\"#usage\" class=\"md-skip\">\n Skip to content\n </a>\n \n </div>\n <div data-md-component=\"announce\">\n \n </div>\n \n \n \n\n \n\n<header class=\"md-header md-header--shadow\" data-md-component=\"header\">\n <nav class=\"md-header__inner md-grid\" aria-label=\"Header\">\n <a href=\"..\" title=\"genoSecretor\" class=\"md-header__button md-logo\" aria-label=\"genoSecretor\" data-md-component=\"logo\">\n \n \n <svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\" class=\"lucide lucide-book-open\" viewBox=\"0 0 24 24\"><path d=\"M12 7v14M3 18a1 1 0 0 1-1-1V4a1 1 0 0 1 1-1h5a4 4 0 0 1 4 4 4 4 0 0 1 4-4h5a1 1 0 0 1 1 1v13a1 1 0 0 1-1 1h-6a3 3 0 0 0-3 3 3 3 0 0 0-3-3z\"/></svg>\n\n </a>\n <label class=\"md-header__button md-icon\" for=\"__drawer\">\n \n <svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\" class=\"lucide lucide-menu\" viewBox=\"0 0 24 24\"><path d=\"M4 5h16M4 12h16M4 19h16\"/></svg>\n </label>\n <div class=\"md-header__title\" data-md-component=\"header-title\">\n <div class=\"md-header__ellipsis\">\n <div class=\"md-header__topic\">\n <span class=\"md-ellipsis\">\n genoSecretor\n </span>\n </div>\n <div class=\"md-header__topic\" data-md-component=\"header-topic\">\n <span class=\"md-ellipsis\">\n \n Usage\n \n </span>\n </div>\n </div>\n </div>\n \n \n <form class=\"md-header__option\" data-md-component=\"palette\">\n \n \n \n \n <input class=\"md-option\" data-md-color-media=\"(prefers-color-scheme)\" data-md-color-scheme=\"default\" data-md-color-primary=\"indigo\" data-md-color-accent=\"indigo\" aria-label=\"Switch to light mode\" type=\"radio\" name=\"__palette\" id=\"__palette_0\">\n \n <label class=\"md-header__button md-icon\" title=\"Switch to light mode\" for=\"__palette_1\" hidden>\n <svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\" class=\"lucide lucide-sun-moon\" viewBox=\"0 0 24 24\"><path d=\"M12 2v2M14.837 16.385a6 6 0 1 1-7.223-7.222c.624-.147.97.66.715 1.248a4 4 0 0 0 5.26 5.259c.589-.255 1.396.09 1.248.715M16 12a4 4 0 0 0-4-4M19 5l-1.256 1.256M20 12h2\"/></svg>\n </label>\n \n \n \n \n \n <input class=\"md-option\" data-md-color-media=\"(prefers-color-scheme: light)\" data-md-color-scheme=\"default\" data-md-color-primary=\"indigo\" data-md-color-accent=\"indigo\" aria-label=\"Switch to dark mode\" type=\"radio\" name=\"__palette\" id=\"__palette_1\">\n \n <label class=\"md-header__button md-icon\" title=\"Switch to dark mode\" for=\"__palette_2\" hidden>\n <svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\" class=\"lucide lucide-sun\" viewBox=\"0 0 24 24\"><circle cx=\"12\" cy=\"12\" r=\"4\"/><path d=\"M12 2v2M12 20v2M4.93 4.93l1.41 1.41M17.66 17.66l1.41 1.41M2 12h2M20 12h2M6.34 17.66l-1.41 1.41M19.07 4.93l-1.41 1.41\"/></svg>\n </label>\n \n \n \n \n \n <input class=\"md-option\" data-md-color-media=\"(prefers-color-scheme: dark)\" data-md-color-scheme=\"slate\" data-md-color-primary=\"indigo\" data-md-color-accent=\"indigo\" aria-label=\"Switch to system preference\" type=\"radio\" name=\"__palette\" id=\"__palette_2\">\n \n <label class=\"md-header__button md-icon\" title=\"Switch to system preference\" for=\"__palette_0\" hidden>\n <svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\" class=\"lucide lucide-moon\" viewBox=\"0 0 24 24\"><path d=\"M20.985 12.486a9 9 0 1 1-9.473-9.472c.405-.022.617.46.402.803a6 6 0 0 0 8.268 8.268c.344-.215.825-.004.803.401\"/></svg>\n </label>\n \n \n</form>\n \n \n \n <script>var palette=__md_get(\"__palette\");if(palette&&palette.color){if(\"(prefers-color-scheme)\"===palette.color.media){var media=matchMedia(\"(prefers-color-scheme: light)\"),input=document.querySelector(media.matches?\"[data-md-color-media='(prefers-color-scheme: light)']\":\"[data-md-color-media='(prefers-color-scheme: dark)']\");palette.color.media=input.getAttribute(\"data-md-color-media\"),palette.color.scheme=input.getAttribute(\"data-md-color-scheme\"),palette.color.primary=input.getAttribute(\"data-md-color-primary\"),palette.color.accent=input.getAttribute(\"data-md-color-accent\")}for(var[key,value]of Object.entries(palette.color))document.body.setAttribute(\"data-md-color-\"+key,value)}</script>\n \n \n \n \n \n <label class=\"md-header__button md-icon\" for=\"__search\">\n \n <svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\" class=\"lucide lucide-search\" viewBox=\"0 0 24 24\"><path d=\"m21 21-4.34-4.34\"/><circle cx=\"11\" cy=\"11\" r=\"8\"/></svg>\n </label>\n <div class=\"md-search\" data-md-component=\"search\" role=\"dialog\" aria-label=\"Search\">\n <button type=\"button\" class=\"md-search__button\">\n Search\n </button>\n</div>\n \n \n <div class=\"md-header__source\">\n \n <a href=\"https://github.com/cloufield/genoSecretor\" title=\"Go to repository\" class=\"md-source\" data-md-component=\"source\">\n <div class=\"md-source__icon md-icon\">\n \n <svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 448 512\"><!--! Font Awesome Free 7.1.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2025 Fonticons, Inc.--><path fill=\"currentColor\" d=\"M439.6 236.1 244 40.5c-5.4-5.5-12.8-8.5-20.4-8.5s-15 3-20.4 8.4L162.5 81l51.5 51.5c27.1-9.1 52.7 16.8 43.4 43.7l49.7 49.7c34.2-11.8 61.2 31 35.5 56.7-26.5 26.5-70.2-2.9-56-37.3L240.3 199v121.9c25.3 12.5 22.3 41.8 9.1 55-6.4 6.4-15.2 10.1-24.3 10.1s-17.8-3.6-24.3-10.1c-17.6-17.6-11.1-46.9 11.2-56v-123c-20.8-8.5-24.6-30.7-18.6-45L142.6 101 8.5 235.1C3 240.6 0 247.9 0 255.5s3 15 8.5 20.4l195.6 195.7c5.4 5.4 12.7 8.4 20.4 8.4s15-3 20.4-8.4l194.7-194.7c5.4-5.4 8.4-12.8 8.4-20.4s-3-15-8.4-20.4\"/></svg>\n </div>\n <div class=\"md-source__repository\">\n cloufield/genoSecretor\n </div>\n</a>\n \n </div>\n </nav>\n \n</header>\n \n <div class=\"md-container\" data-md-component=\"container\">\n \n \n \n \n \n \n <main class=\"md-main\" data-md-component=\"main\">\n <div class=\"md-main__inner md-grid\">\n \n \n \n <div class=\"md-sidebar md-sidebar--primary\" data-md-component=\"sidebar\" data-md-type=\"navigation\" >\n <div class=\"md-sidebar__scrollwrap\">\n <div class=\"md-sidebar__inner\">\n \n\n\n\n<nav class=\"md-nav md-nav--primary\" aria-label=\"Navigation\" data-md-level=\"0\">\n <label class=\"md-nav__title\" for=\"__drawer\">\n <a href=\"..\" title=\"genoSecretor\" class=\"md-nav__button md-logo\" aria-label=\"genoSecretor\" data-md-component=\"logo\">\n \n \n <svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\" class=\"lucide lucide-book-open\" viewBox=\"0 0 24 24\"><path d=\"M12 7v14M3 18a1 1 0 0 1-1-1V4a1 1 0 0 1 1-1h5a4 4 0 0 1 4 4 4 4 0 0 1 4-4h5a1 1 0 0 1 1 1v13a1 1 0 0 1-1 1h-6a3 3 0 0 0-3 3 3 3 0 0 0-3-3z\"/></svg>\n\n </a>\n genoSecretor\n </label>\n \n <div class=\"md-nav__source\">\n <a href=\"https://github.com/cloufield/genoSecretor\" title=\"Go to repository\" class=\"md-source\" data-md-component=\"source\">\n <div class=\"md-source__icon md-icon\">\n \n <svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 448 512\"><!--! Font Awesome Free 7.1.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2025 Fonticons, Inc.--><path fill=\"currentColor\" d=\"M439.6 236.1 244 40.5c-5.4-5.5-12.8-8.5-20.4-8.5s-15 3-20.4 8.4L162.5 81l51.5 51.5c27.1-9.1 52.7 16.8 43.4 43.7l49.7 49.7c34.2-11.8 61.2 31 35.5 56.7-26.5 26.5-70.2-2.9-56-37.3L240.3 199v121.9c25.3 12.5 22.3 41.8 9.1 55-6.4 6.4-15.2 10.1-24.3 10.1s-17.8-3.6-24.3-10.1c-17.6-17.6-11.1-46.9 11.2-56v-123c-20.8-8.5-24.6-30.7-18.6-45L142.6 101 8.5 235.1C3 240.6 0 247.9 0 255.5s3 15 8.5 20.4l195.6 195.7c5.4 5.4 12.7 8.4 20.4 8.4s15-3 20.4-8.4l194.7-194.7c5.4-5.4 8.4-12.8 8.4-20.4s-3-15-8.4-20.4\"/></svg>\n </div>\n <div class=\"md-source__repository\">\n cloufield/genoSecretor\n </div>\n</a>\n </div>\n \n <ul class=\"md-nav__list\" data-md-scrollfix>\n \n \n \n \n \n \n \n <li class=\"md-nav__item\">\n <a href=\"..\" class=\"md-nav__link\">\n \n \n \n <span class=\"md-ellipsis\">\n \n \n Home\n \n\n \n </span>\n \n \n\n </a>\n </li>\n \n\n \n \n \n \n \n \n \n \n \n <li class=\"md-nav__item md-nav__item--active\">\n \n <input class=\"md-nav__toggle md-toggle\" type=\"checkbox\" id=\"__toc\">\n \n \n \n \n \n <label class=\"md-nav__link md-nav__link--active\" for=\"__toc\">\n \n \n \n <span class=\"md-ellipsis\">\n \n \n Usage\n \n\n \n </span>\n \n \n\n <span class=\"md-nav__icon md-icon\"></span>\n </label>\n \n <a href=\"./\" class=\"md-nav__link md-nav__link--active\">\n \n \n \n <span class=\"md-ellipsis\">\n \n \n Usage\n \n\n \n </span>\n \n \n\n </a>\n \n \n\n\n<nav class=\"md-nav md-nav--secondary\" aria-label=\"On this page\">\n \n \n \n \n \n \n <label class=\"md-nav__title\" for=\"__toc\">\n <span class=\"md-nav__icon md-icon\"></span>\n On this page\n </label>\n <ul class=\"md-nav__list\" data-md-component=\"toc\" data-md-scrollfix>\n \n <li class=\"md-nav__item\">\n <a href=\"#install\" class=\"md-nav__link\">\n <span class=\"md-ellipsis\">\n \n Install\n \n </span>\n </a>\n \n</li>\n \n <li class=\"md-nav__item\">\n <a href=\"#quick-start\" class=\"md-nav__link\">\n <span class=\"md-ellipsis\">\n \n Quick start\n \n </span>\n </a>\n \n</li>\n \n <li class=\"md-nav__item\">\n <a href=\"#command-line-reference\" class=\"md-nav__link\">\n <span class=\"md-ellipsis\">\n \n Command-line reference\n \n </span>\n </a>\n \n</li>\n \n <li class=\"md-nav__item\">\n <a href=\"#inspect-and-method-metadata\" class=\"md-nav__link\">\n <span class=\"md-ellipsis\">\n \n Inspect and method metadata\n \n </span>\n </a>\n \n</li>\n \n <li class=\"md-nav__item\">\n <a href=\"#input-formats\" class=\"md-nav__link\">\n <span class=\"md-ellipsis\">\n \n Input formats\n \n </span>\n </a>\n \n</li>\n \n <li class=\"md-nav__item\">\n <a href=\"#outputs\" class=\"md-nav__link\">\n <span class=\"md-ellipsis\">\n \n Outputs\n \n </span>\n </a>\n \n</li>\n \n <li class=\"md-nav__item\">\n <a href=\"#python-api\" class=\"md-nav__link\">\n <span class=\"md-ellipsis\">\n \n Python API\n \n </span>\n </a>\n \n</li>\n \n <li class=\"md-nav__item\">\n <a href=\"#see-also\" class=\"md-nav__link\">\n <span class=\"md-ellipsis\">\n \n See also\n \n </span>\n </a>\n \n</li>\n \n </ul>\n \n</nav>\n \n </li>\n \n\n \n \n \n \n \n \n \n <li class=\"md-nav__item\">\n <a href=\"../workflow/\" class=\"md-nav__link\">\n \n \n \n <span class=\"md-ellipsis\">\n \n \n Workflow\n \n\n \n </span>\n \n \n\n </a>\n </li>\n \n\n \n \n \n \n \n \n \n <li class=\"md-nav__item\">\n <a href=\"../methods/\" class=\"md-nav__link\">\n \n \n \n <span class=\"md-ellipsis\">\n \n \n Methods\n \n\n \n </span>\n \n \n\n </a>\n </li>\n \n\n \n \n \n \n \n \n \n <li class=\"md-nav__item\">\n <a href=\"../markers/\" class=\"md-nav__link\">\n \n \n \n <span class=\"md-ellipsis\">\n \n \n Markers\n \n\n \n </span>\n \n \n\n </a>\n </li>\n \n\n \n \n \n \n \n \n \n <li class=\"md-nav__item\">\n <a href=\"../assumptions/\" class=\"md-nav__link\">\n \n \n \n <span class=\"md-ellipsis\">\n \n \n Assumptions\n \n\n \n </span>\n \n \n\n </a>\n </li>\n \n\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n <li class=\"md-nav__item md-nav__item--section md-nav__item--nested\">\n \n \n \n <input class=\"md-nav__toggle md-toggle \" type=\"checkbox\" id=\"__nav_7\" >\n \n \n <div class=\"md-nav__link md-nav__container\">\n <a href=\"../examples/\" class=\"md-nav__link \">\n \n \n \n <span class=\"md-ellipsis\">\n \n \n Examples\n \n\n \n </span>\n \n \n\n </a>\n \n \n <label class=\"md-nav__link \" for=\"__nav_7\" id=\"__nav_7_label\" tabindex=\"\">\n <span class=\"md-nav__icon md-icon\"></span>\n </label>\n \n </div>\n \n <nav class=\"md-nav\" data-md-level=\"1\" aria-labelledby=\"__nav_7_label\" aria-expanded=\"false\">\n <label class=\"md-nav__title\" for=\"__nav_7\">\n <span class=\"md-nav__icon md-icon\"></span>\n \n \n Examples\n \n\n </label>\n <ul class=\"md-nav__list\" data-md-scrollfix>\n \n \n \n \n \n \n \n \n \n <li class=\"md-nav__item\">\n <a href=\"../examples/synthetic/\" class=\"md-nav__link\">\n \n \n \n <span class=\"md-ellipsis\">\n \n \n Synthetic cohort\n \n\n \n </span>\n \n \n\n </a>\n </li>\n \n\n \n \n \n \n \n \n \n \n <li class=\"md-nav__item\">\n <a href=\"../examples/1kg/\" class=\"md-nav__link\">\n \n \n \n <span class=\"md-ellipsis\">\n \n \n 1000 Genomes\n \n\n \n </span>\n \n \n\n </a>\n </li>\n \n\n \n \n \n \n \n \n \n \n <li class=\"md-nav__item\">\n <a href=\"../examples/1kg-assume-trans/\" class=\"md-nav__link\">\n \n \n \n <span class=\"md-ellipsis\">\n \n \n 1000 Genomes assume-trans\n \n\n \n </span>\n \n \n\n </a>\n </li>\n \n\n \n \n \n \n \n \n \n \n <li class=\"md-nav__item\">\n <a href=\"../examples/report/\" class=\"md-nav__link\">\n \n \n \n <span class=\"md-ellipsis\">\n \n \n Example reports\n \n\n \n </span>\n \n \n\n </a>\n </li>\n \n\n \n \n </ul>\n </nav>\n \n </li>\n \n\n \n \n \n \n \n \n \n <li class=\"md-nav__item\">\n <a href=\"../updatelog/\" class=\"md-nav__link\">\n \n \n \n <span class=\"md-ellipsis\">\n \n \n Update Log\n \n\n \n </span>\n \n \n\n </a>\n </li>\n \n\n \n </ul>\n</nav>\n </div>\n </div>\n </div>\n \n \n \n <div class=\"md-sidebar md-sidebar--secondary\" data-md-component=\"sidebar\" data-md-type=\"toc\" >\n <div class=\"md-sidebar__scrollwrap\">\n <div class=\"md-sidebar__inner\">\n \n\n\n<nav class=\"md-nav md-nav--secondary\" aria-label=\"On this page\">\n \n \n \n \n \n \n <label class=\"md-nav__title\" for=\"__toc\">\n <span class=\"md-nav__icon md-icon\"></span>\n On this page\n </label>\n <ul class=\"md-nav__list\" data-md-component=\"toc\" data-md-scrollfix>\n \n <li class=\"md-nav__item\">\n <a href=\"#install\" class=\"md-nav__link\">\n <span class=\"md-ellipsis\">\n \n Install\n \n </span>\n </a>\n \n</li>\n \n <li class=\"md-nav__item\">\n <a href=\"#quick-start\" class=\"md-nav__link\">\n <span class=\"md-ellipsis\">\n \n Quick start\n \n </span>\n </a>\n \n</li>\n \n <li class=\"md-nav__item\">\n <a href=\"#command-line-reference\" class=\"md-nav__link\">\n <span class=\"md-ellipsis\">\n \n Command-line reference\n \n </span>\n </a>\n \n</li>\n \n <li class=\"md-nav__item\">\n <a href=\"#inspect-and-method-metadata\" class=\"md-nav__link\">\n <span class=\"md-ellipsis\">\n \n Inspect and method metadata\n \n </span>\n </a>\n \n</li>\n \n <li class=\"md-nav__item\">\n <a href=\"#input-formats\" class=\"md-nav__link\">\n <span class=\"md-ellipsis\">\n \n Input formats\n \n </span>\n </a>\n \n</li>\n \n <li class=\"md-nav__item\">\n <a href=\"#outputs\" class=\"md-nav__link\">\n <span class=\"md-ellipsis\">\n \n Outputs\n \n </span>\n </a>\n \n</li>\n \n <li class=\"md-nav__item\">\n <a href=\"#python-api\" class=\"md-nav__link\">\n <span class=\"md-ellipsis\">\n \n Python API\n \n </span>\n </a>\n \n</li>\n \n <li class=\"md-nav__item\">\n <a href=\"#see-also\" class=\"md-nav__link\">\n <span class=\"md-ellipsis\">\n \n See also\n \n </span>\n </a>\n \n</li>\n \n </ul>\n \n</nav>\n </div>\n </div>\n </div>\n \n \n \n <div class=\"md-content\" data-md-component=\"content\">\n \n <article class=\"md-content__inner md-typeset\">\n \n \n \n \n\n\n<h1 id=\"usage\">Usage<a class=\"headerlink\" href=\"#usage\" title=\"Permanent link\">¶</a></h1>\n<p>Install genoSecretor and infer FUT2 secretor status from a genotype file. For pipeline internals see <a href=\"../workflow/\">Workflow</a>; for haplotype rules see <a href=\"../methods/\">Inference methods</a>.</p>\n<div class=\"admonition warning\">\n<p class=\"admonition-title\">Research use only</p>\n<p>genoSecretor is intended for population-genetics, epidemiology, GWAS, PheWAS, and biobank research.\nGenotype-inferred secretor status does not capture all rare or atypical FUT2 alleles and\n<strong>must not</strong> be used for clinical decision-making.</p>\n</div>\n<h2 id=\"install\">Install<a class=\"headerlink\" href=\"#install\" title=\"Permanent link\">¶</a></h2>\n<div class=\"language-bash highlight\"><pre><span></span><code><span id=\"__span-0-1\"><a id=\"__codelineno-0-1\" name=\"__codelineno-0-1\" href=\"#__codelineno-0-1\"></a>pip<span class=\"w\"> </span>install<span class=\"w\"> </span>genosecretor\n</span></code></pre></div>\n<h2 id=\"quick-start\">Quick start<a class=\"headerlink\" href=\"#quick-start\" title=\"Permanent link\">¶</a></h2>\n<div class=\"language-bash highlight\"><pre><span></span><code><span id=\"__span-1-1\"><a id=\"__codelineno-1-1\" name=\"__codelineno-1-1\" href=\"#__codelineno-1-1\"></a>genosecretor<span class=\"w\"> </span>cohort.pgen<span class=\"w\"> </span>--out<span class=\"w\"> </span>secretor\n</span><span id=\"__span-1-2\"><a id=\"__codelineno-1-2\" name=\"__codelineno-1-2\" href=\"#__codelineno-1-2\"></a><span class=\"c1\"># writes: secretor.secretor.tsv, secretor.qc.tsv, secretor.summary.txt, secretor.report.html</span>\n</span></code></pre></div>\n<p>If <code>--out</code> is omitted, the prefix is the input path with its suffix stripped.</p>\n<h2 id=\"command-line-reference\">Command-line reference<a class=\"headerlink\" href=\"#command-line-reference\" title=\"Permanent link\">¶</a></h2>\n<div class=\"language-text highlight\"><pre><span></span><code><span id=\"__span-2-1\"><a id=\"__codelineno-2-1\" name=\"__codelineno-2-1\" href=\"#__codelineno-2-1\"></a>genosecretor DATA [options]\n</span></code></pre></div>\n<table>\n<thead>\n<tr>\n<th>Flag</th>\n<th>Default</th>\n<th>Meaning</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td><code>DATA</code></td>\n<td>required</td>\n<td>Input genotype file</td>\n</tr>\n<tr>\n<td><code>-o</code> / <code>--out</code></td>\n<td>stem of <code>DATA</code></td>\n<td>Output prefix</td>\n</tr>\n<tr>\n<td><code>--format</code></td>\n<td><code>auto</code></td>\n<td><code>auto</code>, <code>vcf</code>, <code>bcf</code>, <code>bgen</code>, <code>pgen</code>, or <code>plink1</code></td>\n</tr>\n<tr>\n<td><code>--build</code></td>\n<td><code>auto</code></td>\n<td><code>auto</code>, <code>hg19</code>, <code>hg38</code>, or <code>chm13</code></td>\n</tr>\n<tr>\n<td><code>--method</code></td>\n<td><code>auto</code></td>\n<td><code>auto</code>, <code>two-marker</code>, <code>common</code>, <code>eas</code>, or <code>proxy</code></td>\n</tr>\n<tr>\n<td><code>--geno-mode</code></td>\n<td><code>auto</code></td>\n<td><code>auto</code>, <code>hardcall</code>, <code>dosage</code>, or <code>probability</code></td>\n</tr>\n<tr>\n<td><code>--phase</code></td>\n<td><code>auto</code></td>\n<td><code>auto</code>, <code>phased</code>, or <code>unphased</code></td>\n</tr>\n<tr>\n<td><code>--assume-trans</code> / <code>--no-assume-trans</code></td>\n<td>trans on</td>\n<td>Unphased double-het (rs601338 × rs1047781): assign <code>Se^w/se</code> (default) or leave ambiguous</td>\n</tr>\n<tr>\n<td><code>--phenotype-coding</code></td>\n<td><code>biochemical</code></td>\n<td><code>biochemical</code> (default) or <code>gwas</code></td>\n</tr>\n<tr>\n<td><code>--min-genotype-prob</code></td>\n<td><code>0.90</code></td>\n<td>Minimum max(GP) for a probability hardcall</td>\n</tr>\n<tr>\n<td><code>--dosage-hardcall-threshold</code></td>\n<td><code>0.1</code></td>\n<td>Dosage rounding window around 0 / 1 / 2</td>\n</tr>\n<tr>\n<td><code>--strict-method</code></td>\n<td>off</td>\n<td>Fail if the requested method's markers are missing</td>\n</tr>\n<tr>\n<td><code>--inspect</code></td>\n<td>off</td>\n<td>Probe markers and recommended method; do not write calls</td>\n</tr>\n<tr>\n<td><code>--version</code></td>\n<td>—</td>\n<td>Print the package version and exit</td>\n</tr>\n<tr>\n<td><code>--methods</code></td>\n<td>—</td>\n<td>List methods (no data file)</td>\n</tr>\n<tr>\n<td><code>--method-info NAME</code></td>\n<td>—</td>\n<td>Print citations for a method (no data file)</td>\n</tr>\n<tr>\n<td><code>--report</code></td>\n<td><code>PREFIX.report.html</code></td>\n<td>HTML run report path</td>\n</tr>\n</tbody>\n</table>\n<p><code>--method auto</code> picks the first method whose markers are present: <code>two-marker</code> → <code>common</code> → <code>eas</code> → <code>proxy</code>. <code>--phenotype-coding gwas</code> recodes <code>Se^w/Se^w</code> and <code>Se^w/se</code> as non-secretor; <code>fut2_genotype</code> still keeps <code>Se^w</code>. See <a href=\"../methods/\">Inference methods</a>.</p>\n<p><code>--geno-mode auto</code> uses GP, then DS, then hardcall GT. <code>--phase auto</code> uses phased haplotypes when the file has <code>|</code> genotypes; otherwise it enumerates unphased diplotypes. <code>--build auto</code> uses marker coordinates, header metadata, and chromosome lengths; conflicting evidence is an error and requires explicit <code>--build</code>.</p>\n<h2 id=\"inspect-and-method-metadata\">Inspect and method metadata<a class=\"headerlink\" href=\"#inspect-and-method-metadata\" title=\"Permanent link\">¶</a></h2>\n<div class=\"language-bash highlight\"><pre><span></span><code><span id=\"__span-3-1\"><a id=\"__codelineno-3-1\" name=\"__codelineno-3-1\" href=\"#__codelineno-3-1\"></a>genosecretor<span class=\"w\"> </span>--version\n</span><span id=\"__span-3-2\"><a id=\"__codelineno-3-2\" name=\"__codelineno-3-2\" href=\"#__codelineno-3-2\"></a>genosecretor<span class=\"w\"> </span>cohort.pgen<span class=\"w\"> </span>--inspect\n</span><span id=\"__span-3-3\"><a id=\"__codelineno-3-3\" name=\"__codelineno-3-3\" href=\"#__codelineno-3-3\"></a>genosecretor<span class=\"w\"> </span>--methods\n</span><span id=\"__span-3-4\"><a id=\"__codelineno-3-4\" name=\"__codelineno-3-4\" href=\"#__codelineno-3-4\"></a>genosecretor<span class=\"w\"> </span>--method-info<span class=\"w\"> </span>two-marker\n</span></code></pre></div>\n<p><code>--inspect</code> reports which FUT2 tags were found, call rates, genome build, and the recommended method. <code>--methods</code> and <code>--method-info</code> do not require an input file.</p>\n<h2 id=\"input-formats\">Input formats<a class=\"headerlink\" href=\"#input-formats\" title=\"Permanent link\">¶</a></h2>\n<table>\n<thead>\n<tr>\n<th>Format</th>\n<th>Extensions</th>\n<th>Notes</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td>VCF/BCF</td>\n<td><code>.vcf</code>, <code>.vcf.gz</code>, <code>.bcf</code></td>\n<td>GT, phased GT, DS, GP</td>\n</tr>\n<tr>\n<td>PLINK2</td>\n<td><code>.pgen</code> + <code>.pvar</code> + <code>.psam</code></td>\n<td>Auto-locates companion files</td>\n</tr>\n<tr>\n<td>PLINK1</td>\n<td><code>.bed</code> + <code>.bim</code> + <code>.fam</code></td>\n<td><code>--format plink1</code></td>\n</tr>\n<tr>\n<td>BGEN</td>\n<td><code>.bgen</code> + <code>.sample</code></td>\n<td>Dosage/probability support</td>\n</tr>\n</tbody>\n</table>\n<p>GRCh37/hg19, GRCh38/hg38, and T2T-CHM13v2 are supported.</p>\n<h2 id=\"outputs\">Outputs<a class=\"headerlink\" href=\"#outputs\" title=\"Permanent link\">¶</a></h2>\n<p>A successful call writes four files:</p>\n<table>\n<thead>\n<tr>\n<th>File</th>\n<th>Contents</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td><code>PREFIX.secretor.tsv</code></td>\n<td>Per-sample secretor calls</td>\n</tr>\n<tr>\n<td><code>PREFIX.qc.tsv</code></td>\n<td>Run-level QC metrics</td>\n</tr>\n<tr>\n<td><code>PREFIX.summary.txt</code></td>\n<td>Human-readable summary</td>\n</tr>\n<tr>\n<td><code>PREFIX.report.html</code></td>\n<td>HTML run report (<code>--report</code> overrides the path)</td>\n</tr>\n</tbody>\n</table>\n<p><code>.secretor.tsv</code> columns:</p>\n<table>\n<thead>\n<tr>\n<th>Column</th>\n<th>Description</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td>FID</td>\n<td>Family or cohort identifier from the input file</td>\n</tr>\n<tr>\n<td>IID</td>\n<td>Individual sample identifier</td>\n</tr>\n<tr>\n<td>secretor_status</td>\n<td>Inferred phenotype: secretor, weak-secretor, non-secretor, or unknown (GWAS coding recodes weak-secretor as non-secretor)</td>\n</tr>\n<tr>\n<td>fut2_genotype</td>\n<td>Diplotype label (for example Se/se), or ambiguous</td>\n</tr>\n<tr>\n<td>fut2_allele1</td>\n<td>First haplotype allele after sort (Se < Se^w < se)</td>\n</tr>\n<tr>\n<td>fut2_allele2</td>\n<td>Second haplotype allele after sort</td>\n</tr>\n<tr>\n<td>haplotype1</td>\n<td>Haplotype call on chromosome copy 1</td>\n</tr>\n<tr>\n<td>haplotype2</td>\n<td>Haplotype call on chromosome copy 2</td>\n</tr>\n<tr>\n<td>method</td>\n<td>Inference method used for this sample</td>\n</tr>\n<tr>\n<td>geno_mode</td>\n<td>Genotype interpretation mode (hardcall, dosage, probability, auto)</td>\n</tr>\n<tr>\n<td>phase_mode</td>\n<td>Whether haplotypes used phase (phased) or enumeration (unphased)</td>\n</tr>\n<tr>\n<td>build</td>\n<td>Genome assembly used for marker coordinates</td>\n</tr>\n<tr>\n<td>confidence</td>\n<td>high, medium, low, or none (not a calibrated probability)</td>\n</tr>\n<tr>\n<td>qc_status</td>\n<td>PASS, AMBIGUOUS, MISSING_MARKER, CONFLICT, or LOW_CONFIDENCE</td>\n</tr>\n<tr>\n<td>qc_reason</td>\n<td>Free-text explanation of QC status</td>\n</tr>\n<tr>\n<td>possible_diplotypes</td>\n<td>Compatible diplotypes when fut2_genotype is ambiguous</td>\n</tr>\n</tbody>\n</table>\n<p>See <a href=\"../workflow/\">Workflow</a> for how genotypes move from file load to these files.</p>\n<h2 id=\"python-api\">Python API<a class=\"headerlink\" href=\"#python-api\" title=\"Permanent link\">¶</a></h2>\n<p><code>SecretorCaller</code> constructor kwargs match the CLI. <code>call()</code> returns a <code>CallerResult</code>; iterate <code>result.calls</code> for per-sample fields.</p>\n<div class=\"language-python highlight\"><pre><span></span><code><span id=\"__span-4-1\"><a id=\"__codelineno-4-1\" name=\"__codelineno-4-1\" href=\"#__codelineno-4-1\"></a><span class=\"kn\">from</span><span class=\"w\"> </span><span class=\"nn\">genosecretor</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">SecretorCaller</span>\n</span><span id=\"__span-4-2\"><a id=\"__codelineno-4-2\" name=\"__codelineno-4-2\" href=\"#__codelineno-4-2\"></a>\n</span><span id=\"__span-4-3\"><a id=\"__codelineno-4-3\" name=\"__codelineno-4-3\" href=\"#__codelineno-4-3\"></a><span class=\"n\">caller</span> <span class=\"o\">=</span> <span class=\"n\">SecretorCaller</span><span class=\"p\">(</span>\n</span><span id=\"__span-4-4\"><a id=\"__codelineno-4-4\" name=\"__codelineno-4-4\" href=\"#__codelineno-4-4\"></a> <span class=\"n\">method</span><span class=\"o\">=</span><span class=\"s2\">"auto"</span><span class=\"p\">,</span>\n</span><span id=\"__span-4-5\"><a id=\"__codelineno-4-5\" name=\"__codelineno-4-5\" href=\"#__codelineno-4-5\"></a> <span class=\"n\">build</span><span class=\"o\">=</span><span class=\"s2\">"auto"</span><span class=\"p\">,</span>\n</span><span id=\"__span-4-6\"><a id=\"__codelineno-4-6\" name=\"__codelineno-4-6\" href=\"#__codelineno-4-6\"></a> <span class=\"n\">genotype_mode</span><span class=\"o\">=</span><span class=\"s2\">"auto"</span><span class=\"p\">,</span>\n</span><span id=\"__span-4-7\"><a id=\"__codelineno-4-7\" name=\"__codelineno-4-7\" href=\"#__codelineno-4-7\"></a> <span class=\"n\">phase</span><span class=\"o\">=</span><span class=\"s2\">"auto"</span><span class=\"p\">,</span>\n</span><span id=\"__span-4-8\"><a id=\"__codelineno-4-8\" name=\"__codelineno-4-8\" href=\"#__codelineno-4-8\"></a> <span class=\"nb\">format</span><span class=\"o\">=</span><span class=\"s2\">"auto"</span><span class=\"p\">,</span>\n</span><span id=\"__span-4-9\"><a id=\"__codelineno-4-9\" name=\"__codelineno-4-9\" href=\"#__codelineno-4-9\"></a> <span class=\"n\">dosage_threshold</span><span class=\"o\">=</span><span class=\"mf\">0.1</span><span class=\"p\">,</span>\n</span><span id=\"__span-4-10\"><a id=\"__codelineno-4-10\" name=\"__codelineno-4-10\" href=\"#__codelineno-4-10\"></a> <span class=\"n\">min_genotype_prob</span><span class=\"o\">=</span><span class=\"mf\">0.9</span><span class=\"p\">,</span>\n</span><span id=\"__span-4-11\"><a id=\"__codelineno-4-11\" name=\"__codelineno-4-11\" href=\"#__codelineno-4-11\"></a> <span class=\"n\">strict_method</span><span class=\"o\">=</span><span class=\"kc\">False</span><span class=\"p\">,</span>\n</span><span id=\"__span-4-12\"><a id=\"__codelineno-4-12\" name=\"__codelineno-4-12\" href=\"#__codelineno-4-12\"></a> <span class=\"n\">assume_trans</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">,</span>\n</span><span id=\"__span-4-13\"><a id=\"__codelineno-4-13\" name=\"__codelineno-4-13\" href=\"#__codelineno-4-13\"></a> <span class=\"n\">phenotype_coding</span><span class=\"o\">=</span><span class=\"s2\">"biochemical"</span><span class=\"p\">,</span>\n</span><span id=\"__span-4-14\"><a id=\"__codelineno-4-14\" name=\"__codelineno-4-14\" href=\"#__codelineno-4-14\"></a><span class=\"p\">)</span>\n</span><span id=\"__span-4-15\"><a id=\"__codelineno-4-15\" name=\"__codelineno-4-15\" href=\"#__codelineno-4-15\"></a><span class=\"n\">result</span> <span class=\"o\">=</span> <span class=\"n\">caller</span><span class=\"o\">.</span><span class=\"n\">call</span><span class=\"p\">(</span><span class=\"s2\">"ukb.pgen"</span><span class=\"p\">)</span>\n</span><span id=\"__span-4-16\"><a id=\"__codelineno-4-16\" name=\"__codelineno-4-16\" href=\"#__codelineno-4-16\"></a><span class=\"k\">for</span> <span class=\"n\">call</span> <span class=\"ow\">in</span> <span class=\"n\">result</span><span class=\"o\">.</span><span class=\"n\">calls</span><span class=\"p\">:</span>\n</span><span id=\"__span-4-17\"><a id=\"__codelineno-4-17\" name=\"__codelineno-4-17\" href=\"#__codelineno-4-17\"></a> <span class=\"nb\">print</span><span class=\"p\">(</span><span class=\"n\">call</span><span class=\"o\">.</span><span class=\"n\">sample</span><span class=\"o\">.</span><span class=\"n\">iid</span><span class=\"p\">,</span> <span class=\"n\">call</span><span class=\"o\">.</span><span class=\"n\">secretor_status</span><span class=\"p\">,</span> <span class=\"n\">call</span><span class=\"o\">.</span><span class=\"n\">fut2_genotype</span><span class=\"p\">)</span>\n</span></code></pre></div>\n<p>Inspect without writing calls:</p>\n<div class=\"language-python highlight\"><pre><span></span><code><span id=\"__span-5-1\"><a id=\"__codelineno-5-1\" name=\"__codelineno-5-1\" href=\"#__codelineno-5-1\"></a><span class=\"n\">result</span> <span class=\"o\">=</span> <span class=\"n\">caller</span><span class=\"o\">.</span><span class=\"n\">call</span><span class=\"p\">(</span><span class=\"s2\">"ukb.pgen"</span><span class=\"p\">,</span> <span class=\"n\">inspect_only</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">)</span>\n</span><span id=\"__span-5-2\"><a id=\"__codelineno-5-2\" name=\"__codelineno-5-2\" href=\"#__codelineno-5-2\"></a><span class=\"nb\">print</span><span class=\"p\">(</span><span class=\"n\">result</span><span class=\"o\">.</span><span class=\"n\">build</span><span class=\"p\">,</span> <span class=\"n\">result</span><span class=\"o\">.</span><span class=\"n\">method</span><span class=\"p\">,</span> <span class=\"n\">result</span><span class=\"o\">.</span><span class=\"n\">inspect</span><span class=\"p\">)</span>\n</span></code></pre></div>\n<h2 id=\"see-also\">See also<a class=\"headerlink\" href=\"#see-also\" title=\"Permanent link\">¶</a></h2>\n<ul>\n<li><a href=\"../workflow/\">Workflow</a> — load-to-output pipeline</li>\n<li><a href=\"../methods/\">Inference methods</a> — haplotype and phenotype rules</li>\n<li><a href=\"../markers/\">Markers</a> — coordinates and 1000 Genomes LD r²</li>\n<li><a href=\"../assumptions/\">Assumptions</a> — limitations</li>\n<li><a href=\"../examples/\">Examples</a> — synthetic and 1000 Genomes demos</li>\n</ul>\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n </article>\n </div>\n \n \n <script>var tabs=__md_get(\"__tabs\");if(Array.isArray(tabs))e:for(var set of document.querySelectorAll(\".tabbed-set\")){var labels=set.querySelector(\".tabbed-labels\");for(var tab of tabs)for(var label of labels.getElementsByTagName(\"label\"))if(label.innerText.trim()===tab){var input=document.getElementById(label.htmlFor);input.checked=!0;continue e}}</script>\n\n<script>var target=document.getElementById(location.hash.slice(1));target&&target.name&&(target.checked=target.name.startsWith(\"__tabbed_\"))</script>\n </div>\n \n <button type=\"button\" class=\"md-top md-icon\" data-md-component=\"top\" hidden>\n \n <svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\" class=\"lucide lucide-circle-arrow-up\" viewBox=\"0 0 24 24\"><circle cx=\"12\" cy=\"12\" r=\"10\"/><path d=\"m16 12-4-4-4 4M12 16V8\"/></svg>\n Back to top\n</button>\n \n </main>\n \n <footer class=\"md-footer\">\n \n \n \n <nav class=\"md-footer__inner md-grid\" aria-label=\"Footer\" >\n \n \n <a href=\"..\" class=\"md-footer__link md-footer__link--prev\" aria-label=\"Previous: Home\">\n <div class=\"md-footer__button md-icon\">\n \n <svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\" class=\"lucide lucide-arrow-left\" viewBox=\"0 0 24 24\"><path d=\"m12 19-7-7 7-7M19 12H5\"/></svg>\n </div>\n <div class=\"md-footer__title\">\n <span class=\"md-footer__direction\">\n Previous\n </span>\n <div class=\"md-ellipsis\">\n Home\n </div>\n </div>\n </a>\n \n \n \n <a href=\"../workflow/\" class=\"md-footer__link md-footer__link--next\" aria-label=\"Next: Workflow\">\n <div class=\"md-footer__title\">\n <span class=\"md-footer__direction\">\n Next\n </span>\n <div class=\"md-ellipsis\">\n Workflow\n </div>\n </div>\n <div class=\"md-footer__button md-icon\">\n \n <svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\" class=\"lucide lucide-arrow-right\" viewBox=\"0 0 24 24\"><path d=\"M5 12h14M12 5l7 7-7 7\"/></svg>\n </div>\n </a>\n \n </nav>\n \n \n <div class=\"md-footer-meta md-typeset\">\n <div class=\"md-footer-meta__inner md-grid\">\n <div class=\"md-copyright\">\n \n <div class=\"md-copyright__highlight\">\n Copyright © 2026 Yunye He\n </div>\n \n \n Made with\n <a href=\"https://zensical.org/\" target=\"_blank\" rel=\"noopener\">\n Zensical\n </a>\n \n</div>\n \n \n<div class=\"md-social\">\n \n \n \n \n \n \n \n \n <a href=\"https://github.com/cloufield/genoSecretor\" target=\"_blank\" rel=\"noopener\" title=\"github.com\" class=\"md-social__link\">\n <svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 512 512\"><!--! Font Awesome Free 7.1.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2025 Fonticons, Inc.--><path fill=\"currentColor\" d=\"M173.9 397.4c0 2-2.3 3.6-5.2 3.6-3.3.3-5.6-1.3-5.6-3.6 0-2 2.3-3.6 5.2-3.6 3-.3 5.6 1.3 5.6 3.6m-31.1-4.5c-.7 2 1.3 4.3 4.3 4.9 2.6 1 5.6 0 6.2-2s-1.3-4.3-4.3-5.2c-2.6-.7-5.5.3-6.2 2.3m44.2-1.7c-2.9.7-4.9 2.6-4.6 4.9.3 2 2.9 3.3 5.9 2.6 2.9-.7 4.9-2.6 4.6-4.6-.3-1.9-3-3.2-5.9-2.9M252.8 8C114.1 8 8 113.3 8 252c0 110.9 69.8 205.8 169.5 239.2 12.8 2.3 17.3-5.6 17.3-12.1 0-6.2-.3-40.4-.3-61.4 0 0-70 15-84.7-29.8 0 0-11.4-29.1-27.8-36.6 0 0-22.9-15.7 1.6-15.4 0 0 24.9 2 38.6 25.8 21.9 38.6 58.6 27.5 72.9 20.9 2.3-16 8.8-27.1 16-33.7-55.9-6.2-112.3-14.3-112.3-110.5 0-27.5 7.6-41.3 23.6-58.9-2.6-6.5-11.1-33.3 2.6-67.9 20.9-6.5 69 27 69 27 20-5.6 41.5-8.5 62.8-8.5s42.8 2.9 62.8 8.5c0 0 48.1-33.6 69-27 13.7 34.7 5.2 61.4 2.6 67.9 16 17.7 25.8 31.5 25.8 58.9 0 96.5-58.9 104.2-114.8 110.5 9.2 7.9 17 22.9 17 46.4 0 33.7-.3 75.4-.3 83.6 0 6.5 4.6 14.4 17.3 12.1C436.2 457.8 504 362.9 504 252 504 113.3 391.5 8 252.8 8M105.2 352.9c-1.3 1-1 3.3.7 5.2 1.6 1.6 3.9 2.3 5.2 1 1.3-1 1-3.3-.7-5.2-1.6-1.6-3.9-2.3-5.2-1m-10.8-8.1c-.7 1.3.3 2.9 2.3 3.9 1.6 1 3.6.7 4.3-.7.7-1.3-.3-2.9-2.3-3.9-2-.6-3.6-.3-4.3.7m32.4 35.6c-1.6 1.3-1 4.3 1.3 6.2 2.3 2.3 5.2 2.6 6.5 1 1.3-1.3.7-4.3-1.3-6.2-2.2-2.3-5.2-2.6-6.5-1m-11.4-14.7c-1.6 1-1.6 3.6 0 5.9s4.3 3.3 5.6 2.3c1.6-1.3 1.6-3.9 0-6.2-1.4-2.3-4-3.3-5.6-2\"/></svg>\n </a>\n \n</div>\n \n </div>\n </div>\n</footer>\n \n </div>\n <div class=\"md-dialog\" data-md-component=\"dialog\">\n <div class=\"md-dialog__inner md-typeset\"></div>\n </div>\n \n \n \n \n \n \n <script id=\"__config\" type=\"application/json\">{\"annotate\":null,\"base\":\"..\",\"features\":[\"content.code.copy\",\"content.tabs.link\",\"navigation.footer\",\"navigation.indexes\",\"navigation.sections\",\"navigation.top\",\"search.highlight\",\"toc.follow\"],\"search\":\"../assets/javascripts/workers/search.e2d2d235.min.js\",\"tags\":null,\"translations\":{\"clipboard.copied\":\"Copied to clipboard\",\"clipboard.copy\":\"Copy to clipboard\",\"search.result.more.one\":\"1 more on this page\",\"search.result.more.other\":\"# more on this page\",\"search.result.none\":\"No matching documents\",\"search.result.one\":\"1 matching document\",\"search.result.other\":\"# matching documents\",\"search.result.placeholder\":\"Type to start searching\",\"search.result.term.missing\":\"Missing\",\"select.version\":\"Select version\"},\"version\":null}</script>\n \n \n <script src=\"../assets/javascripts/bundle.00c35305.min.js\"></script>\n \n \n </body>\n</html>",
|
|
3
|
+
"hash": 840464160875118914
|
|
4
|
+
}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
{
|
|
2
|
+
"data": "\n<!doctype html>\n<html lang=\"en\" class=\"no-js\">\n <head>\n \n <meta charset=\"utf-8\">\n <meta name=\"viewport\" content=\"width=device-width,initial-scale=1\">\n \n <meta name=\"description\" content=\"Genetically determined FUT2 secretor status inference from genotype datasets\">\n \n \n <meta name=\"author\" content=\"Yunye He\">\n \n \n <link rel=\"canonical\" href=\"https://cloufield.github.io/genoSecretor/examples/1kg-assume-trans/\">\n \n \n <link rel=\"prev\" href=\"../1kg/\">\n \n \n <link rel=\"next\" href=\"../report/\">\n \n \n \n \n \n <link rel=\"icon\" href=\"../../assets/images/favicon.png\">\n <meta name=\"generator\" content=\"zensical-0.0.15\">\n \n \n \n <title>1000 Genomes --assume-trans check - genoSecretor</title>\n \n \n \n \n \n \n <link rel=\"stylesheet\" href=\"../../assets/stylesheets/modern/main.f1b6466b.min.css\">\n \n \n \n \n <link rel=\"stylesheet\" href=\"../../assets/stylesheets/modern/palette.dfe2e883.min.css\">\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n <style>:root{}</style>\n\n\n\n \n \n \n \n \n \n \n \n <link rel=\"preconnect\" href=\"https://fonts.gstatic.com\" crossorigin>\n <link rel=\"stylesheet\" href=\"https://fonts.googleapis.com/css?family=Inter:300,300i,400,400i,500,500i,700,700i%7CJetBrains+Mono:400,400i,700,700i&display=fallback\">\n <style>:root{--md-text-font:\"Inter\";--md-code-font:\"JetBrains Mono\"}</style>\n \n \n \n <script>__md_scope=new URL(\"../..\",location),__md_hash=e=>[...e].reduce(((e,t)=>(e<<5)-e+t.charCodeAt(0)),0),__md_get=(e,t=localStorage,a=__md_scope)=>JSON.parse(t.getItem(a.pathname+\".\"+e)),__md_set=(e,t,a=localStorage,_=__md_scope)=>{try{a.setItem(_.pathname+\".\"+e,JSON.stringify(t))}catch(e){}},document.documentElement.setAttribute(\"data-platform\",navigator.platform)</script>\n \n \n\n \n \n </head>\n \n \n \n \n \n \n \n \n \n <body dir=\"ltr\" data-md-color-scheme=\"default\" data-md-color-primary=\"indigo\" data-md-color-accent=\"indigo\">\n \n \n <input class=\"md-toggle\" data-md-toggle=\"drawer\" type=\"checkbox\" id=\"__drawer\" autocomplete=\"off\">\n <input class=\"md-toggle\" data-md-toggle=\"search\" type=\"checkbox\" id=\"__search\" autocomplete=\"off\">\n <label class=\"md-overlay\" for=\"__drawer\"></label>\n <div data-md-component=\"skip\">\n \n \n <a href=\"#1000-genomes-assume-trans-check\" class=\"md-skip\">\n Skip to content\n </a>\n \n </div>\n <div data-md-component=\"announce\">\n \n </div>\n \n \n \n\n \n\n<header class=\"md-header md-header--shadow\" data-md-component=\"header\">\n <nav class=\"md-header__inner md-grid\" aria-label=\"Header\">\n <a href=\"../..\" title=\"genoSecretor\" class=\"md-header__button md-logo\" aria-label=\"genoSecretor\" data-md-component=\"logo\">\n \n \n <svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\" class=\"lucide lucide-book-open\" viewBox=\"0 0 24 24\"><path d=\"M12 7v14M3 18a1 1 0 0 1-1-1V4a1 1 0 0 1 1-1h5a4 4 0 0 1 4 4 4 4 0 0 1 4-4h5a1 1 0 0 1 1 1v13a1 1 0 0 1-1 1h-6a3 3 0 0 0-3 3 3 3 0 0 0-3-3z\"/></svg>\n\n </a>\n <label class=\"md-header__button md-icon\" for=\"__drawer\">\n \n <svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\" class=\"lucide lucide-menu\" viewBox=\"0 0 24 24\"><path d=\"M4 5h16M4 12h16M4 19h16\"/></svg>\n </label>\n <div class=\"md-header__title\" data-md-component=\"header-title\">\n <div class=\"md-header__ellipsis\">\n <div class=\"md-header__topic\">\n <span class=\"md-ellipsis\">\n genoSecretor\n </span>\n </div>\n <div class=\"md-header__topic\" data-md-component=\"header-topic\">\n <span class=\"md-ellipsis\">\n \n 1000 Genomes --assume-trans check\n \n </span>\n </div>\n </div>\n </div>\n \n \n <form class=\"md-header__option\" data-md-component=\"palette\">\n \n \n \n \n <input class=\"md-option\" data-md-color-media=\"(prefers-color-scheme)\" data-md-color-scheme=\"default\" data-md-color-primary=\"indigo\" data-md-color-accent=\"indigo\" aria-label=\"Switch to light mode\" type=\"radio\" name=\"__palette\" id=\"__palette_0\">\n \n <label class=\"md-header__button md-icon\" title=\"Switch to light mode\" for=\"__palette_1\" hidden>\n <svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\" class=\"lucide lucide-sun-moon\" viewBox=\"0 0 24 24\"><path d=\"M12 2v2M14.837 16.385a6 6 0 1 1-7.223-7.222c.624-.147.97.66.715 1.248a4 4 0 0 0 5.26 5.259c.589-.255 1.396.09 1.248.715M16 12a4 4 0 0 0-4-4M19 5l-1.256 1.256M20 12h2\"/></svg>\n </label>\n \n \n \n \n \n <input class=\"md-option\" data-md-color-media=\"(prefers-color-scheme: light)\" data-md-color-scheme=\"default\" data-md-color-primary=\"indigo\" data-md-color-accent=\"indigo\" aria-label=\"Switch to dark mode\" type=\"radio\" name=\"__palette\" id=\"__palette_1\">\n \n <label class=\"md-header__button md-icon\" title=\"Switch to dark mode\" for=\"__palette_2\" hidden>\n <svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\" class=\"lucide lucide-sun\" viewBox=\"0 0 24 24\"><circle cx=\"12\" cy=\"12\" r=\"4\"/><path d=\"M12 2v2M12 20v2M4.93 4.93l1.41 1.41M17.66 17.66l1.41 1.41M2 12h2M20 12h2M6.34 17.66l-1.41 1.41M19.07 4.93l-1.41 1.41\"/></svg>\n </label>\n \n \n \n \n \n <input class=\"md-option\" data-md-color-media=\"(prefers-color-scheme: dark)\" data-md-color-scheme=\"slate\" data-md-color-primary=\"indigo\" data-md-color-accent=\"indigo\" aria-label=\"Switch to system preference\" type=\"radio\" name=\"__palette\" id=\"__palette_2\">\n \n <label class=\"md-header__button md-icon\" title=\"Switch to system preference\" for=\"__palette_0\" hidden>\n <svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\" class=\"lucide lucide-moon\" viewBox=\"0 0 24 24\"><path d=\"M20.985 12.486a9 9 0 1 1-9.473-9.472c.405-.022.617.46.402.803a6 6 0 0 0 8.268 8.268c.344-.215.825-.004.803.401\"/></svg>\n </label>\n \n \n</form>\n \n \n \n <script>var palette=__md_get(\"__palette\");if(palette&&palette.color){if(\"(prefers-color-scheme)\"===palette.color.media){var media=matchMedia(\"(prefers-color-scheme: light)\"),input=document.querySelector(media.matches?\"[data-md-color-media='(prefers-color-scheme: light)']\":\"[data-md-color-media='(prefers-color-scheme: dark)']\");palette.color.media=input.getAttribute(\"data-md-color-media\"),palette.color.scheme=input.getAttribute(\"data-md-color-scheme\"),palette.color.primary=input.getAttribute(\"data-md-color-primary\"),palette.color.accent=input.getAttribute(\"data-md-color-accent\")}for(var[key,value]of Object.entries(palette.color))document.body.setAttribute(\"data-md-color-\"+key,value)}</script>\n \n \n \n \n \n <label class=\"md-header__button md-icon\" for=\"__search\">\n \n <svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\" class=\"lucide lucide-search\" viewBox=\"0 0 24 24\"><path d=\"m21 21-4.34-4.34\"/><circle cx=\"11\" cy=\"11\" r=\"8\"/></svg>\n </label>\n <div class=\"md-search\" data-md-component=\"search\" role=\"dialog\" aria-label=\"Search\">\n <button type=\"button\" class=\"md-search__button\">\n Search\n </button>\n</div>\n \n \n <div class=\"md-header__source\">\n \n <a href=\"https://github.com/cloufield/genoSecretor\" title=\"Go to repository\" class=\"md-source\" data-md-component=\"source\">\n <div class=\"md-source__icon md-icon\">\n \n <svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 448 512\"><!--! Font Awesome Free 7.1.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2025 Fonticons, Inc.--><path fill=\"currentColor\" d=\"M439.6 236.1 244 40.5c-5.4-5.5-12.8-8.5-20.4-8.5s-15 3-20.4 8.4L162.5 81l51.5 51.5c27.1-9.1 52.7 16.8 43.4 43.7l49.7 49.7c34.2-11.8 61.2 31 35.5 56.7-26.5 26.5-70.2-2.9-56-37.3L240.3 199v121.9c25.3 12.5 22.3 41.8 9.1 55-6.4 6.4-15.2 10.1-24.3 10.1s-17.8-3.6-24.3-10.1c-17.6-17.6-11.1-46.9 11.2-56v-123c-20.8-8.5-24.6-30.7-18.6-45L142.6 101 8.5 235.1C3 240.6 0 247.9 0 255.5s3 15 8.5 20.4l195.6 195.7c5.4 5.4 12.7 8.4 20.4 8.4s15-3 20.4-8.4l194.7-194.7c5.4-5.4 8.4-12.8 8.4-20.4s-3-15-8.4-20.4\"/></svg>\n </div>\n <div class=\"md-source__repository\">\n cloufield/genoSecretor\n </div>\n</a>\n \n </div>\n </nav>\n \n</header>\n \n <div class=\"md-container\" data-md-component=\"container\">\n \n \n \n \n \n \n <main class=\"md-main\" data-md-component=\"main\">\n <div class=\"md-main__inner md-grid\">\n \n \n \n <div class=\"md-sidebar md-sidebar--primary\" data-md-component=\"sidebar\" data-md-type=\"navigation\" >\n <div class=\"md-sidebar__scrollwrap\">\n <div class=\"md-sidebar__inner\">\n \n\n\n\n<nav class=\"md-nav md-nav--primary\" aria-label=\"Navigation\" data-md-level=\"0\">\n <label class=\"md-nav__title\" for=\"__drawer\">\n <a href=\"../..\" title=\"genoSecretor\" class=\"md-nav__button md-logo\" aria-label=\"genoSecretor\" data-md-component=\"logo\">\n \n \n <svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\" class=\"lucide lucide-book-open\" viewBox=\"0 0 24 24\"><path d=\"M12 7v14M3 18a1 1 0 0 1-1-1V4a1 1 0 0 1 1-1h5a4 4 0 0 1 4 4 4 4 0 0 1 4-4h5a1 1 0 0 1 1 1v13a1 1 0 0 1-1 1h-6a3 3 0 0 0-3 3 3 3 0 0 0-3-3z\"/></svg>\n\n </a>\n genoSecretor\n </label>\n \n <div class=\"md-nav__source\">\n <a href=\"https://github.com/cloufield/genoSecretor\" title=\"Go to repository\" class=\"md-source\" data-md-component=\"source\">\n <div class=\"md-source__icon md-icon\">\n \n <svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 448 512\"><!--! Font Awesome Free 7.1.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2025 Fonticons, Inc.--><path fill=\"currentColor\" d=\"M439.6 236.1 244 40.5c-5.4-5.5-12.8-8.5-20.4-8.5s-15 3-20.4 8.4L162.5 81l51.5 51.5c27.1-9.1 52.7 16.8 43.4 43.7l49.7 49.7c34.2-11.8 61.2 31 35.5 56.7-26.5 26.5-70.2-2.9-56-37.3L240.3 199v121.9c25.3 12.5 22.3 41.8 9.1 55-6.4 6.4-15.2 10.1-24.3 10.1s-17.8-3.6-24.3-10.1c-17.6-17.6-11.1-46.9 11.2-56v-123c-20.8-8.5-24.6-30.7-18.6-45L142.6 101 8.5 235.1C3 240.6 0 247.9 0 255.5s3 15 8.5 20.4l195.6 195.7c5.4 5.4 12.7 8.4 20.4 8.4s15-3 20.4-8.4l194.7-194.7c5.4-5.4 8.4-12.8 8.4-20.4s-3-15-8.4-20.4\"/></svg>\n </div>\n <div class=\"md-source__repository\">\n cloufield/genoSecretor\n </div>\n</a>\n </div>\n \n <ul class=\"md-nav__list\" data-md-scrollfix>\n \n \n \n \n \n \n \n <li class=\"md-nav__item\">\n <a href=\"../..\" class=\"md-nav__link\">\n \n \n \n <span class=\"md-ellipsis\">\n \n \n Home\n \n\n \n </span>\n \n \n\n </a>\n </li>\n \n\n \n \n \n \n \n \n \n <li class=\"md-nav__item\">\n <a href=\"../../usage/\" class=\"md-nav__link\">\n \n \n \n <span class=\"md-ellipsis\">\n \n \n Usage\n \n\n \n </span>\n \n \n\n </a>\n </li>\n \n\n \n \n \n \n \n \n \n <li class=\"md-nav__item\">\n <a href=\"../../workflow/\" class=\"md-nav__link\">\n \n \n \n <span class=\"md-ellipsis\">\n \n \n Workflow\n \n\n \n </span>\n \n \n\n </a>\n </li>\n \n\n \n \n \n \n \n \n \n <li class=\"md-nav__item\">\n <a href=\"../../methods/\" class=\"md-nav__link\">\n \n \n \n <span class=\"md-ellipsis\">\n \n \n Methods\n \n\n \n </span>\n \n \n\n </a>\n </li>\n \n\n \n \n \n \n \n \n \n <li class=\"md-nav__item\">\n <a href=\"../../markers/\" class=\"md-nav__link\">\n \n \n \n <span class=\"md-ellipsis\">\n \n \n Markers\n \n\n \n </span>\n \n \n\n </a>\n </li>\n \n\n \n \n \n \n \n \n \n <li class=\"md-nav__item\">\n <a href=\"../../assumptions/\" class=\"md-nav__link\">\n \n \n \n <span class=\"md-ellipsis\">\n \n \n Assumptions\n \n\n \n </span>\n \n \n\n </a>\n </li>\n \n\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n <li class=\"md-nav__item md-nav__item--active md-nav__item--section md-nav__item--nested\">\n \n \n \n <input class=\"md-nav__toggle md-toggle \" type=\"checkbox\" id=\"__nav_7\" checked>\n \n \n <div class=\"md-nav__link md-nav__container\">\n <a href=\"../\" class=\"md-nav__link \">\n \n \n \n <span class=\"md-ellipsis\">\n \n \n Examples\n \n\n \n </span>\n \n \n\n </a>\n \n \n <label class=\"md-nav__link \" for=\"__nav_7\" id=\"__nav_7_label\" tabindex=\"\">\n <span class=\"md-nav__icon md-icon\"></span>\n </label>\n \n </div>\n \n <nav class=\"md-nav\" data-md-level=\"1\" aria-labelledby=\"__nav_7_label\" aria-expanded=\"true\">\n <label class=\"md-nav__title\" for=\"__nav_7\">\n <span class=\"md-nav__icon md-icon\"></span>\n \n \n Examples\n \n\n </label>\n <ul class=\"md-nav__list\" data-md-scrollfix>\n \n \n \n \n \n \n \n \n \n <li class=\"md-nav__item\">\n <a href=\"../synthetic/\" class=\"md-nav__link\">\n \n \n \n <span class=\"md-ellipsis\">\n \n \n Synthetic cohort\n \n\n \n </span>\n \n \n\n </a>\n </li>\n \n\n \n \n \n \n \n \n \n \n <li class=\"md-nav__item\">\n <a href=\"../1kg/\" class=\"md-nav__link\">\n \n \n \n <span class=\"md-ellipsis\">\n \n \n 1000 Genomes\n \n\n \n </span>\n \n \n\n </a>\n </li>\n \n\n \n \n \n \n \n \n \n \n \n \n <li class=\"md-nav__item md-nav__item--active\">\n \n <input class=\"md-nav__toggle md-toggle\" type=\"checkbox\" id=\"__toc\">\n \n \n \n \n \n <label class=\"md-nav__link md-nav__link--active\" for=\"__toc\">\n \n \n \n <span class=\"md-ellipsis\">\n \n \n 1000 Genomes assume-trans\n \n\n \n </span>\n \n \n\n <span class=\"md-nav__icon md-icon\"></span>\n </label>\n \n <a href=\"./\" class=\"md-nav__link md-nav__link--active\">\n \n \n \n <span class=\"md-ellipsis\">\n \n \n 1000 Genomes assume-trans\n \n\n \n </span>\n \n \n\n </a>\n \n \n\n\n<nav class=\"md-nav md-nav--secondary\" aria-label=\"On this page\">\n \n \n \n \n \n \n <label class=\"md-nav__title\" for=\"__toc\">\n <span class=\"md-nav__icon md-icon\"></span>\n On this page\n </label>\n <ul class=\"md-nav__list\" data-md-component=\"toc\" data-md-scrollfix>\n \n <li class=\"md-nav__item\">\n <a href=\"#operational-metric-the-flag\" class=\"md-nav__link\">\n <span class=\"md-ellipsis\">\n \n Operational metric (the flag)\n \n </span>\n </a>\n \n</li>\n \n <li class=\"md-nav__item\">\n <a href=\"#haplotype-metric\" class=\"md-nav__link\">\n <span class=\"md-ellipsis\">\n \n Haplotype metric\n \n </span>\n </a>\n \n</li>\n \n </ul>\n \n</nav>\n \n </li>\n \n\n \n \n \n \n \n \n \n \n <li class=\"md-nav__item\">\n <a href=\"../report/\" class=\"md-nav__link\">\n \n \n \n <span class=\"md-ellipsis\">\n \n \n Example reports\n \n\n \n </span>\n \n \n\n </a>\n </li>\n \n\n \n \n </ul>\n </nav>\n \n </li>\n \n\n \n \n \n \n \n \n \n <li class=\"md-nav__item\">\n <a href=\"../../updatelog/\" class=\"md-nav__link\">\n \n \n \n <span class=\"md-ellipsis\">\n \n \n Update Log\n \n\n \n </span>\n \n \n\n </a>\n </li>\n \n\n \n </ul>\n</nav>\n </div>\n </div>\n </div>\n \n \n \n <div class=\"md-sidebar md-sidebar--secondary\" data-md-component=\"sidebar\" data-md-type=\"toc\" >\n <div class=\"md-sidebar__scrollwrap\">\n <div class=\"md-sidebar__inner\">\n \n\n\n<nav class=\"md-nav md-nav--secondary\" aria-label=\"On this page\">\n \n \n \n \n \n \n <label class=\"md-nav__title\" for=\"__toc\">\n <span class=\"md-nav__icon md-icon\"></span>\n On this page\n </label>\n <ul class=\"md-nav__list\" data-md-component=\"toc\" data-md-scrollfix>\n \n <li class=\"md-nav__item\">\n <a href=\"#operational-metric-the-flag\" class=\"md-nav__link\">\n <span class=\"md-ellipsis\">\n \n Operational metric (the flag)\n \n </span>\n </a>\n \n</li>\n \n <li class=\"md-nav__item\">\n <a href=\"#haplotype-metric\" class=\"md-nav__link\">\n <span class=\"md-ellipsis\">\n \n Haplotype metric\n \n </span>\n </a>\n \n</li>\n \n </ul>\n \n</nav>\n </div>\n </div>\n </div>\n \n \n \n <div class=\"md-content\" data-md-component=\"content\">\n \n <article class=\"md-content__inner md-typeset\">\n \n \n \n \n\n\n<h1 id=\"1000-genomes-assume-trans-check\">1000 Genomes <code>--assume-trans</code> check<a class=\"headerlink\" href=\"#1000-genomes-assume-trans-check\" title=\"Permanent link\">¶</a></h1>\n<p>Phased NYGC 30x GRCh38 panels (AFR, AMR, EAS, EUR) as cis/trans truth for the unphased double-heterozygote rule.</p>\n<div class=\"admonition warning\">\n<p class=\"admonition-title\">Research use only</p>\n<p>Phased 1000 Genomes genotypes are not salivary secretor phenotypes. This check asks whether\nunphased <code>--assume-trans</code> matches <strong>phase</strong> at rs601338 × rs1047781. It is not a clinical\nvalidation.</p>\n</div>\n<p>Panels: <code>~/.gwaslab/{ANC}.ALL.split_norm_af.1kg_30x.hg38.vcf.gz</code> (override with <code>GENOSECRETOR_1KG_<ANC>_VCF</code>). AFR/EAS/EUR fall back to the bundled extracts if the full panel is absent.</p>\n<div class=\"language-bash highlight\"><pre><span></span><code><span id=\"__span-0-1\"><a id=\"__codelineno-0-1\" name=\"__codelineno-0-1\" href=\"#__codelineno-0-1\"></a><span class=\"ch\">#!/usr/bin/env bash</span>\n</span><span id=\"__span-0-2\"><a id=\"__codelineno-0-2\" name=\"__codelineno-0-2\" href=\"#__codelineno-0-2\"></a><span class=\"c1\"># Compare unphased --assume-trans to phased 1KG AFR/AMR/EAS/EUR diplotypes.</span>\n</span><span id=\"__span-0-3\"><a id=\"__codelineno-0-3\" name=\"__codelineno-0-3\" href=\"#__codelineno-0-3\"></a><span class=\"c1\"># Panels: GENOSECRETOR_1KG_<ANC>_VCF, else ~/.gwaslab/<ANC>.ALL.split_norm_af.1kg_30x.hg38.vcf.gz</span>\n</span><span id=\"__span-0-4\"><a id=\"__codelineno-0-4\" name=\"__codelineno-0-4\" href=\"#__codelineno-0-4\"></a><span class=\"c1\"># AFR/EAS/EUR fall back to the bundled three-SNP extracts.</span>\n</span><span id=\"__span-0-5\"><a id=\"__codelineno-0-5\" name=\"__codelineno-0-5\" href=\"#__codelineno-0-5\"></a><span class=\"nb\">set</span><span class=\"w\"> </span>-euo<span class=\"w\"> </span>pipefail\n</span><span id=\"__span-0-6\"><a id=\"__codelineno-0-6\" name=\"__codelineno-0-6\" href=\"#__codelineno-0-6\"></a><span class=\"nv\">ROOT</span><span class=\"o\">=</span><span class=\"s2\">"</span><span class=\"k\">$(</span><span class=\"nb\">cd</span><span class=\"w\"> </span><span class=\"s2\">"</span><span class=\"k\">$(</span>dirname<span class=\"w\"> </span><span class=\"s2\">"</span><span class=\"nv\">$0</span><span class=\"s2\">"</span><span class=\"k\">)</span><span class=\"s2\">"</span><span class=\"w\"> </span><span class=\"o\">&&</span><span class=\"w\"> </span><span class=\"nb\">pwd</span><span class=\"k\">)</span><span class=\"s2\">"</span>\n</span><span id=\"__span-0-7\"><a id=\"__codelineno-0-7\" name=\"__codelineno-0-7\" href=\"#__codelineno-0-7\"></a>mkdir<span class=\"w\"> </span>-p<span class=\"w\"> </span><span class=\"s2\">"</span><span class=\"nv\">$ROOT</span><span class=\"s2\">/out"</span>\n</span><span id=\"__span-0-8\"><a id=\"__codelineno-0-8\" name=\"__codelineno-0-8\" href=\"#__codelineno-0-8\"></a>python<span class=\"w\"> </span><span class=\"s2\">"</span><span class=\"nv\">$ROOT</span><span class=\"s2\">/verify_assume_trans_1kg.py"</span><span class=\"w\"> </span>--out-dir<span class=\"w\"> </span><span class=\"s2\">"</span><span class=\"nv\">$ROOT</span><span class=\"s2\">/out"</span>\n</span><span id=\"__span-0-9\"><a id=\"__codelineno-0-9\" name=\"__codelineno-0-9\" href=\"#__codelineno-0-9\"></a><span class=\"nb\">echo</span><span class=\"w\"> </span><span class=\"s2\">"Summary: </span><span class=\"nv\">$ROOT</span><span class=\"s2\">/out/assume_trans_1kg.summary.txt"</span>\n</span></code></pre></div>\n<div class=\"language-bash highlight\"><pre><span></span><code><span id=\"__span-1-1\"><a id=\"__codelineno-1-1\" name=\"__codelineno-1-1\" href=\"#__codelineno-1-1\"></a>./examples/run_1kg_assume_trans.sh\n</span></code></pre></div>\n<p>Writes <code>examples/out/assume_trans_1kg.summary.tsv</code>, <code>.discordant.tsv</code>, and <code>.summary.txt</code>.</p>\n<h2 id=\"operational-metric-the-flag\">Operational metric (the flag)<a class=\"headerlink\" href=\"#operational-metric-the-flag\" title=\"Permanent link\">¶</a></h2>\n<p>Unphased heterozygotes at <strong>both</strong> functional SNPs are compatible with trans <code>Se^w/se</code> or cis <code>Se/se</code> (both variants on one haplotype). <code>--no-assume-trans</code> leaves those samples ambiguous; default <code>--assume-trans</code> assigns <strong><code>Se^w/se</code></strong>. Concordance is the fraction of that double-het set whose <strong>phased</strong> genotype is <code>Se^w/se</code>.</p>\n<table>\n<thead>\n<tr>\n<th>Super-population</th>\n<th>n</th>\n<th>Double-het</th>\n<th>Phased trans (<code>Se^w/se</code>)</th>\n<th>Phased cis (<code>Se/se</code>)</th>\n<th>Concordance</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td>AFR</td>\n<td>661</td>\n<td>0</td>\n<td>0</td>\n<td>0</td>\n<td>NA</td>\n</tr>\n<tr>\n<td>AMR</td>\n<td>347</td>\n<td>0</td>\n<td>0</td>\n<td>0</td>\n<td>NA</td>\n</tr>\n<tr>\n<td>EAS</td>\n<td>504</td>\n<td>1</td>\n<td>1</td>\n<td>0</td>\n<td>1/1 (100%)</td>\n</tr>\n<tr>\n<td>EUR</td>\n<td>503</td>\n<td>0</td>\n<td>0</td>\n<td>0</td>\n<td>NA</td>\n</tr>\n</tbody>\n</table>\n<p>se428 and se385 are nearly mutually exclusive in these panels, so the unphased rule almost never fires. The one EAS double-het is trans in phase, so <code>--assume-trans</code> matches the phased diplotype (and phenotype). Zero mismatches vs phase in AFR/AMR/EAS/EUR.</p>\n<p>Default <code>--assume-trans</code> is unchanged. Pass <code>--no-assume-trans</code> when you do not want the ancestral-haplotype assumption.</p>\n<h2 id=\"haplotype-metric\">Haplotype metric<a class=\"headerlink\" href=\"#haplotype-metric\" title=\"Permanent link\">¶</a></h2>\n<p>Phased haplotype counts (<code>se</code> = se428 LoF, <code>Se^w</code> = se385 weak, <code>Se</code> = functional):</p>\n<table>\n<thead>\n<tr>\n<th>Super-population</th>\n<th>se</th>\n<th>Se^w</th>\n<th>Se</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td>AFR</td>\n<td>649</td>\n<td>0</td>\n<td>673</td>\n</tr>\n<tr>\n<td>AMR</td>\n<td>237</td>\n<td>1</td>\n<td>456</td>\n</tr>\n<tr>\n<td>EAS</td>\n<td>4</td>\n<td>443</td>\n<td>561</td>\n</tr>\n<tr>\n<td>EUR</td>\n<td>444</td>\n<td>0</td>\n<td>562</td>\n</tr>\n</tbody>\n</table>\n<p>se385 (<code>Se^w</code>) is common only in EAS. AFR and EUR have no <code>Se^w</code> haplotypes here; AMR has a single copy. That is why double-hets are rare: the two derived alleles almost never co-occur in the same person.</p>\n<p>See <a href=\"../../assumptions/\">Assumptions</a> and <a href=\"../../methods/\">Inference methods</a> (double-heterozygote resolution).</p>\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n </article>\n </div>\n \n \n <script>var tabs=__md_get(\"__tabs\");if(Array.isArray(tabs))e:for(var set of document.querySelectorAll(\".tabbed-set\")){var labels=set.querySelector(\".tabbed-labels\");for(var tab of tabs)for(var label of labels.getElementsByTagName(\"label\"))if(label.innerText.trim()===tab){var input=document.getElementById(label.htmlFor);input.checked=!0;continue e}}</script>\n\n<script>var target=document.getElementById(location.hash.slice(1));target&&target.name&&(target.checked=target.name.startsWith(\"__tabbed_\"))</script>\n </div>\n \n <button type=\"button\" class=\"md-top md-icon\" data-md-component=\"top\" hidden>\n \n <svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\" class=\"lucide lucide-circle-arrow-up\" viewBox=\"0 0 24 24\"><circle cx=\"12\" cy=\"12\" r=\"10\"/><path d=\"m16 12-4-4-4 4M12 16V8\"/></svg>\n Back to top\n</button>\n \n </main>\n \n <footer class=\"md-footer\">\n \n \n \n <nav class=\"md-footer__inner md-grid\" aria-label=\"Footer\" >\n \n \n <a href=\"../1kg/\" class=\"md-footer__link md-footer__link--prev\" aria-label=\"Previous: 1000 Genomes\">\n <div class=\"md-footer__button md-icon\">\n \n <svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\" class=\"lucide lucide-arrow-left\" viewBox=\"0 0 24 24\"><path d=\"m12 19-7-7 7-7M19 12H5\"/></svg>\n </div>\n <div class=\"md-footer__title\">\n <span class=\"md-footer__direction\">\n Previous\n </span>\n <div class=\"md-ellipsis\">\n 1000 Genomes\n </div>\n </div>\n </a>\n \n \n \n <a href=\"../report/\" class=\"md-footer__link md-footer__link--next\" aria-label=\"Next: Example reports\">\n <div class=\"md-footer__title\">\n <span class=\"md-footer__direction\">\n Next\n </span>\n <div class=\"md-ellipsis\">\n Example reports\n </div>\n </div>\n <div class=\"md-footer__button md-icon\">\n \n <svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\" class=\"lucide lucide-arrow-right\" viewBox=\"0 0 24 24\"><path d=\"M5 12h14M12 5l7 7-7 7\"/></svg>\n </div>\n </a>\n \n </nav>\n \n \n <div class=\"md-footer-meta md-typeset\">\n <div class=\"md-footer-meta__inner md-grid\">\n <div class=\"md-copyright\">\n \n <div class=\"md-copyright__highlight\">\n Copyright © 2026 Yunye He\n </div>\n \n \n Made with\n <a href=\"https://zensical.org/\" target=\"_blank\" rel=\"noopener\">\n Zensical\n </a>\n \n</div>\n \n \n<div class=\"md-social\">\n \n \n \n \n \n \n \n \n <a href=\"https://github.com/cloufield/genoSecretor\" target=\"_blank\" rel=\"noopener\" title=\"github.com\" class=\"md-social__link\">\n <svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 512 512\"><!--! Font Awesome Free 7.1.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2025 Fonticons, Inc.--><path fill=\"currentColor\" d=\"M173.9 397.4c0 2-2.3 3.6-5.2 3.6-3.3.3-5.6-1.3-5.6-3.6 0-2 2.3-3.6 5.2-3.6 3-.3 5.6 1.3 5.6 3.6m-31.1-4.5c-.7 2 1.3 4.3 4.3 4.9 2.6 1 5.6 0 6.2-2s-1.3-4.3-4.3-5.2c-2.6-.7-5.5.3-6.2 2.3m44.2-1.7c-2.9.7-4.9 2.6-4.6 4.9.3 2 2.9 3.3 5.9 2.6 2.9-.7 4.9-2.6 4.6-4.6-.3-1.9-3-3.2-5.9-2.9M252.8 8C114.1 8 8 113.3 8 252c0 110.9 69.8 205.8 169.5 239.2 12.8 2.3 17.3-5.6 17.3-12.1 0-6.2-.3-40.4-.3-61.4 0 0-70 15-84.7-29.8 0 0-11.4-29.1-27.8-36.6 0 0-22.9-15.7 1.6-15.4 0 0 24.9 2 38.6 25.8 21.9 38.6 58.6 27.5 72.9 20.9 2.3-16 8.8-27.1 16-33.7-55.9-6.2-112.3-14.3-112.3-110.5 0-27.5 7.6-41.3 23.6-58.9-2.6-6.5-11.1-33.3 2.6-67.9 20.9-6.5 69 27 69 27 20-5.6 41.5-8.5 62.8-8.5s42.8 2.9 62.8 8.5c0 0 48.1-33.6 69-27 13.7 34.7 5.2 61.4 2.6 67.9 16 17.7 25.8 31.5 25.8 58.9 0 96.5-58.9 104.2-114.8 110.5 9.2 7.9 17 22.9 17 46.4 0 33.7-.3 75.4-.3 83.6 0 6.5 4.6 14.4 17.3 12.1C436.2 457.8 504 362.9 504 252 504 113.3 391.5 8 252.8 8M105.2 352.9c-1.3 1-1 3.3.7 5.2 1.6 1.6 3.9 2.3 5.2 1 1.3-1 1-3.3-.7-5.2-1.6-1.6-3.9-2.3-5.2-1m-10.8-8.1c-.7 1.3.3 2.9 2.3 3.9 1.6 1 3.6.7 4.3-.7.7-1.3-.3-2.9-2.3-3.9-2-.6-3.6-.3-4.3.7m32.4 35.6c-1.6 1.3-1 4.3 1.3 6.2 2.3 2.3 5.2 2.6 6.5 1 1.3-1.3.7-4.3-1.3-6.2-2.2-2.3-5.2-2.6-6.5-1m-11.4-14.7c-1.6 1-1.6 3.6 0 5.9s4.3 3.3 5.6 2.3c1.6-1.3 1.6-3.9 0-6.2-1.4-2.3-4-3.3-5.6-2\"/></svg>\n </a>\n \n</div>\n \n </div>\n </div>\n</footer>\n \n </div>\n <div class=\"md-dialog\" data-md-component=\"dialog\">\n <div class=\"md-dialog__inner md-typeset\"></div>\n </div>\n \n \n \n \n \n \n <script id=\"__config\" type=\"application/json\">{\"annotate\":null,\"base\":\"../..\",\"features\":[\"content.code.copy\",\"content.tabs.link\",\"navigation.footer\",\"navigation.indexes\",\"navigation.sections\",\"navigation.top\",\"search.highlight\",\"toc.follow\"],\"search\":\"../../assets/javascripts/workers/search.e2d2d235.min.js\",\"tags\":null,\"translations\":{\"clipboard.copied\":\"Copied to clipboard\",\"clipboard.copy\":\"Copy to clipboard\",\"search.result.more.one\":\"1 more on this page\",\"search.result.more.other\":\"# more on this page\",\"search.result.none\":\"No matching documents\",\"search.result.one\":\"1 matching document\",\"search.result.other\":\"# matching documents\",\"search.result.placeholder\":\"Type to start searching\",\"search.result.term.missing\":\"Missing\",\"select.version\":\"Select version\"},\"version\":null}</script>\n \n \n <script src=\"../../assets/javascripts/bundle.00c35305.min.js\"></script>\n \n \n </body>\n</html>",
|
|
3
|
+
"hash": 13070067934076624977
|
|
4
|
+
}
|