# QC Pipeline — Contingency Tables + Filtering + Manhattan Plots

Pipeline do kontroli jakości wyników GWAS. Oblicza tablice kontyngencji dla wszystkich wariantów, filtruje artefakty rzadkich wariantów (LOF, CNV z niską liczbą nosicieli), generuje Manhattan ploty z kolorowymi kółkami wskazującymi warianty o niskim MIN_CELL.

## Quick Start

```bash
# 1. Aktywuj venv
source venv/bin/activate

# 2. Zaloguj się do DNAnexus
dx login

# 3. Uruchom QC orchestrator
bash qc_orchestrator.sh --pool-size 25
```

## Co robi pipeline

Dla każdego fenotypu z `gwas_qc_summary.tsv`:

1. **Contingency** — oblicza tablicę kontyngencji na DNAnexus (~25 min/fenotyp, N równolegle)
   - Dla binary: MIN_CELL = min(carrier_case, carrier_ctrl)
   - Dla continuous: MIN_CELL = total carrier count
2. **Filtrowanie** — usuwa warianty z niskim MIN_CELL (binary: <=4, continuous: <=15)
   - Wynik: `filtered/PHENOTYPE.filtered.tsv`
3. **Manhattan plot** — generuje plot z kolorowymi kółkami
   - Binary: czarne (MC<=3), czerwone (MC<=4), pomarańczowe (MC<=5)
   - Continuous: czarne (MC<=5), czerwone (MC<=15), pomarańczowe (MC<=25)
   - Wynik: `qc_test/PHENOTYPE_manhattan.png`

## Opcje qc_orchestrator.sh

| Opcja | Opis |
|-------|------|
| `--pool-size N` | Liczba równoległych jobów DNAnexus (domyślnie 25) |
| `--skip-contingency` | Pomiń obliczenia contingency (użyj istniejących TSV) |
| `--skip-filtering` | Pomiń filtrowanie wyników |
| `--skip-plotting` | Pomiń generowanie plotów |

## Uruchamianie dla pojedynczego fenotypu

```bash
# Binary (ADR/prescribed)
bash run_contingency.sh zopiclone__M796

# Continuous (dawkowanie/biomarkery)
bash run_contingency.sh warfarin__optimal_dose --phenotype-type continuous
```

## Pliki wejściowe

### Lokalne
- `gwas_qc_summary.tsv` — lista fenotypów z wynikami GWAS (generowany przez gwas_orchestrator.sh + gwas_viz_combined.R)
- `result/` — katalog z wynikami GWAS (~1.1 TB)

### Na DNAnexus
| Ścieżka | Zawartość |
|---------|-----------|
| `/results/gemo/snp/chr{1-22,X}/` | SNV (pfile + VCF) |
| `/results/gemo/hla/chr6_hla.vcf.gz` | HLA |
| `/results/gemo/cypmicro/chr*_cypmicro.vcf.gz` | CYP microarray |
| `/results/gemo/cyp2/chr*_cypdosage.vcf.gz` | CYP dosage |
| `/results/gemo/wes/lof/chr*_lof.vcf.bgz` | Loss-of-function (WES) |
| `/results/gemo/wes/missense/chr*_mpc.vcf.bgz` | Missense/MPC (WES) |
| `/results/gemo/hardcalls_down_up/chr*_cnv_*.vcf.bgz` | CNV (genes + regions) |
| `/results/pheno/applets-resources/*.tar.gz` | Parquet z fenotypami (3 pliki) |
| `/data/cohorts/train_set.txt` | Lista próbek (FID IID) |

## Wymagania

- Python 3 + dxpy (w venv)
- R z pakietami: ggplot2, dplyr, scales, RColorBrewer, ggrepel, patchwork, biomaRt
- Dostęp do projektu DNAnexus z danymi genotypowymi

## Pliki pipeline

| Plik | Rola |
|------|------|
| `qc_orchestrator.sh` | Główny orchestrator |
| `contingency_all.py` | Obliczanie tablic kontyngencji (bcftools/plink2) |
| `contingency_runner.sh` | Runner wewnątrz DNAnexus swiss-army-knife |
| `extract_phenotype.py` | Ekstrakcja fenotypów z parquet |
| `run_contingency.sh` | Submission pojedynczego fenotypu |
| `generate_qc_plots.sh` | Generowanie Manhattan plotów |
| `gwas_viz_combined.R` | Wizualizacja GWAS (Manhattan + QQ) |

## Progi filtrowania

Opracowane na podstawie analizy 38 fenotypów kontrolnych (pozytywnych i negatywnych):

| Typ | Próg MIN_CELL | Co oznacza |
|-----|---------------|------------|
| Binary | >= 5 | min(nosiciele w cases, nosiciele w controls) |
| Continuous | >= 20 | łączna liczba nosicieli wariantu |

Szczegóły analizy w `qc_test/methods.txt`.

## Test set

Lista fenotypów testowych z oczekiwanymi wynikami filtrowania w `qc_test/list.txt`.
Aktualne wyniki: https://gwas.labpgx.com/qc_test/
