diff --git a/scripts/cloud/tasks/p8.sh b/scripts/cloud/tasks/p8.sh new file mode 100644 index 0000000..2a28496 --- /dev/null +++ b/scripts/cloud/tasks/p8.sh @@ -0,0 +1,96 @@ +#!/bin/bash +# Phase P8 scientific validation on GEO GSE165845 (GSA-MD v1, 120 1000 Genomes individuals × 3 replicates): +# 1. fetch IDATs (GEO), GSA v1 C2 build38 BPM/CSV + C1 EGT, GRCh38 FASTA, NYGC 30x per-chromosome VCFs, GIAB HG001; +# 2. `simurg genotype` → `simurg gtc-to-vcf --merge`; +# 3. truth subsets at the array positions (bcftools, split + left-normalised like the array records); +# 4. scripts/p8/validate_p8.py (plan §16.5 metrics). +# Args: . Run with OMNI=0 (the Omni2.5 archive is not needed). +set -uo pipefail +OUT=$2 +W=/work/p8; mkdir -p $W $OUT/p8 +R=$OUT/p8 +N=$(nproc) +export DEBIAN_FRONTEND=noninteractive +apt-get install -y -q bcftools tabix > /dev/null +bcftools --version | head -1 + +GSA=https://webdata.illumina.com/downloads/productfiles/global-screening-array/v1-0 +NYGC=https://ftp.1000genomes.ebi.ac.uk/vol1/ftp/data_collections/1000G_2504_high_coverage/working/20220422_3202_phased_SNV_INDEL_SV +GIAB=https://ftp-trace.ncbi.nlm.nih.gov/ReferenceSamples/giab/release/NA12878_HG001/NISTv4.2.1/GRCh38/HG001_GRCh38_1_22_v4.2.1_benchmark +CHROMS="$(seq 1 22) X" + +echo "=== downloads $(date -u +%T) ===" +mkdir -p $W/nygc $W/gsa $W/giab +( for c in $CHROMS; do + s=""; [[ $c == X ]] && s=".v2" + f=1kGP_high_coverage_Illumina.chr$c.filtered.SNV_INDEL_SV_phased_panel$s.vcf.gz + echo "$NYGC/$f $W/nygc/chr$c.vcf.gz" + done | xargs -P 12 -n 2 sh -c 'curl -sSfL --retry 5 -o "$1" "$0" || echo "!! failed $0"' + echo "NYGC downloaded $(du -sh $W/nygc | cut -f1) at $(date -u +%T)" ) > $W/nygc.log 2>&1 & +NYGC_PID=$! +( for e in vcf.gz vcf.gz.tbi bed; do curl -sSfL --retry 5 -o $W/giab/hg001.$e $GIAB.$e; done ) & +( bash scripts/fetch_data.sh p6 ) > $W/fasta.log 2>&1 & +FASTA_PID=$! +cd $W/gsa +for z in infinium-global-screening-array-24-v1-0-c2-manifest-file-bpm-build38.zip \ + infinium-global-screening-array-24-v1-0-c2-manifest-file-csv-build38.zip \ + infinium-global-screening-array-v1-0-c1-cluster-file.zip; do + curl -sSfL --retry 5 -O "$GSA/$z" +done +sha256sum -c - <<'EOF' || { echo "!! GSA product file checksum mismatch"; exit 1; } +10ba8e692f6f14f9c50b3bed00d92a96af7ef8aa873df115abc52b5ae7c209b8 infinium-global-screening-array-24-v1-0-c2-manifest-file-bpm-build38.zip +fed9af6de6a8f000b42f44ff1aeecc9fde2a4ae29c834c542bedb2f28879a815 infinium-global-screening-array-24-v1-0-c2-manifest-file-csv-build38.zip +8bd33c286feded0e77b93cacc8533c27dd879a06e97ef9a575dff2037348cb67 infinium-global-screening-array-v1-0-c1-cluster-file.zip +EOF +for z in *.zip; do unzip -oq $z; done +cd - > /dev/null +BPM=$W/gsa/GSA-24v1-0_C2.bpm; CSV=$W/gsa/GSA-24v1-0_C2.csv; EGT=$W/gsa/GSA-24v1-0_C1_ClusterFile.egt +ls -la $W/gsa + +/usr/bin/time -v .venv/bin/python scripts/p8/prepare.py --tsv scripts/p8/gse165845_samples.tsv --dl $W/geo \ + --out $W/idats --workers 24 2> $R/prepare_time.txt || { tail -30 $R/prepare_time.txt; exit 1; } +cp $W/idats/samples_map.tsv $R/ + +echo "=== genotype $(date -u +%T) ===" +GT=$W/gt +/usr/bin/time -v .venv/bin/simurg genotype --bpm $BPM --egt $EGT --idats $W/idats --out $GT \ + --threads "$N" --quiet 2> $R/genotype_time.txt || echo "genotype exit $?" +tail -22 $R/genotype_time.txt +cp $GT/sample_summary.tsv $GT/relatedness.tsv $GT/controls_qc.tsv $GT/run_manifest.json $R/ 2>/dev/null +cp -r $GT/logs $R/genotype_logs 2>/dev/null + +wait $FASTA_PID; tail -2 $W/fasta.log +FA=data/p6/GRCh38.primary.fa +echo "=== gtc-to-vcf $(date -u +%T) ===" +/usr/bin/time -v .venv/bin/simurg gtc-to-vcf --bpm $BPM --csv $CSV --fasta $FA --gtcs $GT --out $W/vcf --merge \ + --threads "$N" --quiet 2> $R/vcf_time.txt || echo "gtc-to-vcf exit $?" +tail -22 $R/vcf_time.txt +cp $W/vcf/run_manifest.json $R/vcf_run_manifest.json; cp -r $W/vcf/logs $R/vcf_logs 2>/dev/null +ARR=$W/vcf/cohort.snv.bcf +[[ -f $ARR ]] || { echo "!! no cohort BCF"; exit 1; } + +echo "=== truth subsets $(date -u +%T) ===" +for c in $(seq 1 22) X Y M; do echo -e "chr$c\t$c"; done > $W/chrmap.txt +cut -f3 $W/idats/samples_map.tsv | tail -n +2 | sort -u | paste -sd, > $W/inds.txt +bcftools query -f '%CHROM\t%POS\n' $ARR | awk '{print "chr"$1"\t"$2}' | uniq > $W/sites_chr.tsv +wc -l < $W/sites_chr.tsv +bcftools norm -f $FA -m-any --check-ref w -Ob -o $W/array.norm.bcf $ARR 2> $R/norm_array.txt +wait $NYGC_PID; cat $W/nygc.log; df -h /work | tail -1 +export W FA +echo $CHROMS | tr ' ' '\n' | xargs -P "$N" -I{} sh -c \ + 'bcftools view -T $W/sites_chr.tsv -s $(cat $W/inds.txt) --force-samples -Ou $W/nygc/chr{}.vcf.gz \ + | bcftools annotate --rename-chrs $W/chrmap.txt -Ou \ + | bcftools norm -f $FA -m-any --check-ref w -Ob -o $W/truth.{}.bcf 2> $W/truth.{}.log || echo "!! truth chr{} failed"' +bcftools concat -Ob -o $W/truth.bcf $(for c in $CHROMS; do echo $W/truth.$c.bcf; done) +bcftools view -T $W/sites_chr.tsv -Ou $W/giab/hg001.vcf.gz | bcftools annotate --rename-chrs $W/chrmap.txt -Ou \ + | bcftools norm -f $FA -m-any --check-ref w -Ob -o $W/giab.bcf +echo "array $(bcftools view -H $W/array.norm.bcf | wc -l) records, truth $(bcftools view -H $W/truth.bcf | wc -l)," \ + "giab $(bcftools view -H $W/giab.bcf | wc -l)" + +echo "=== validate $(date -u +%T) ===" +/usr/bin/time -v .venv/bin/python scripts/p8/validate_p8.py --array $W/array.norm.bcf --truth $W/truth.bcf \ + --giab $W/giab.bcf --giab-bed $W/giab/hg001.bed --map $W/idats/samples_map.tsv --gt-dir $GT --out $R \ + 2> $R/validate_time.txt || echo "validation exit $?" +tail -22 $R/validate_time.txt +gzip -f $R/replicate_pairs.tsv $R/systematic_sites.tsv 2>/dev/null +echo "=== task done $(date -u +%T) ===" diff --git a/scripts/cloud/trial.sh b/scripts/cloud/trial.sh index 5e31e5b..b1dacd6 100755 --- a/scripts/cloud/trial.sh +++ b/scripts/cloud/trial.sh @@ -64,7 +64,9 @@ launch) git archive --format=tar.gz -o /tmp/simurg-repo.tar.gz HEAD $AWS s3 cp /tmp/simurg-repo.tar.gz "s3://$BUCKET/$RUN/repo.tar.gz" --only-show-errors [[ -f scripts/cloud/tasks/$TASK.sh ]] || { echo "unknown TASK $TASK"; exit 2; } + OMNI=${OMNI:-1} # 0: the task does not need the 107 GB Omni2.5 archive sed -e "s/__BUCKET__/$BUCKET/" -e "s/__RUN__/$RUN/" -e "s/__MAX_MINUTES__/$MAX_MINUTES/" -e "s/__TASK__/$TASK/g" \ + -e "s/__OMNI__/$OMNI/" \ scripts/cloud/userdata.sh > /tmp/simurg-userdata.sh AMI=$($AWS ssm get-parameter --name /aws/service/canonical/ubuntu/server/24.04/stable/current/arm64/hvm/ebs-gp3/ami-id \ --query Parameter.Value --output text) diff --git a/scripts/cloud/userdata.sh b/scripts/cloud/userdata.sh index 3089524..ef14f67 100755 --- a/scripts/cloud/userdata.sh +++ b/scripts/cloud/userdata.sh @@ -47,12 +47,14 @@ mkdir -p refs && git clone -q --depth 1 https://github.com/Illumina/BeadArrayFil SRC=s3://1000genomes/release/20130502/supporting/hd_genotype_chip/broad_intensities D=/work/omni && mkdir -p $D/data -for f in HumanOmni2.5-4v1-Multi_B.bpm HumanOmni2.5-4v1-Multi_B.egt HumanOmni2.5-4v1_B.csv; do - $S3 cp --no-sign-request "$SRC/$f" $D/ --only-show-errors -done -echo "=== streaming 107 GB IDAT+GTC archive (no copy of the .tgz is kept) $(date -u +%T) ===" -$S3 cp --no-sign-request "$SRC/Omni25_idats_gtcs_2141_samples.tgz" - | pigz -dc | tar -x -C $D/data -echo "=== extracted $(du -sh $D/data | cut -f1) at $(date -u +%T) ===" +if [[ "__OMNI__" == "1" ]]; then + for f in HumanOmni2.5-4v1-Multi_B.bpm HumanOmni2.5-4v1-Multi_B.egt HumanOmni2.5-4v1_B.csv; do + $S3 cp --no-sign-request "$SRC/$f" $D/ --only-show-errors + done + echo "=== streaming 107 GB IDAT+GTC archive (no copy of the .tgz is kept) $(date -u +%T) ===" + $S3 cp --no-sign-request "$SRC/Omni25_idats_gtcs_2141_samples.tgz" - | pigz -dc | tar -x -C $D/data + echo "=== extracted $(du -sh $D/data | cut -f1) at $(date -u +%T) ===" +fi echo "=== unit tests $(date -u +%T) ===" .venv/bin/python -m pytest tests/unit -q -p no:cacheprovider || echo "unit tests reported failures (continuing)" diff --git a/scripts/p8/gse165845_samples.tsv b/scripts/p8/gse165845_samples.tsv new file mode 100644 index 0000000..fcfc7e7 --- /dev/null +++ b/scripts/p8/gse165845_samples.tsv @@ -0,0 +1,361 @@ +gsm individual replicate grn_url red_url +GSM5050990 HG00096 1 https://ftp.ncbi.nlm.nih.gov/geo/samples/GSM5050nnn/GSM5050990/suppl/GSM5050990_HG00096_1_Grn.idat.gz https://ftp.ncbi.nlm.nih.gov/geo/samples/GSM5050nnn/GSM5050990/suppl/GSM5050990_HG00096_1_Red.idat.gz +GSM5050991 HG00096 2 https://ftp.ncbi.nlm.nih.gov/geo/samples/GSM5050nnn/GSM5050991/suppl/GSM5050991_HG00096_2_Grn.idat.gz https://ftp.ncbi.nlm.nih.gov/geo/samples/GSM5050nnn/GSM5050991/suppl/GSM5050991_HG00096_2_Red.idat.gz +GSM5050992 HG00096 3 https://ftp.ncbi.nlm.nih.gov/geo/samples/GSM5050nnn/GSM5050992/suppl/GSM5050992_HG00096_3_Grn.idat.gz https://ftp.ncbi.nlm.nih.gov/geo/samples/GSM5050nnn/GSM5050992/suppl/GSM5050992_HG00096_3_Red.idat.gz +GSM5050993 HG00101 1 https://ftp.ncbi.nlm.nih.gov/geo/samples/GSM5050nnn/GSM5050993/suppl/GSM5050993_HG00101_1_Grn.idat.gz https://ftp.ncbi.nlm.nih.gov/geo/samples/GSM5050nnn/GSM5050993/suppl/GSM5050993_HG00101_1_Red.idat.gz +GSM5050994 HG00101 2 https://ftp.ncbi.nlm.nih.gov/geo/samples/GSM5050nnn/GSM5050994/suppl/GSM5050994_HG00101_2_Grn.idat.gz https://ftp.ncbi.nlm.nih.gov/geo/samples/GSM5050nnn/GSM5050994/suppl/GSM5050994_HG00101_2_Red.idat.gz +GSM5050995 HG00101 3 https://ftp.ncbi.nlm.nih.gov/geo/samples/GSM5050nnn/GSM5050995/suppl/GSM5050995_HG00101_3_Grn.idat.gz https://ftp.ncbi.nlm.nih.gov/geo/samples/GSM5050nnn/GSM5050995/suppl/GSM5050995_HG00101_3_Red.idat.gz +GSM5050996 HG00102 1 https://ftp.ncbi.nlm.nih.gov/geo/samples/GSM5050nnn/GSM5050996/suppl/GSM5050996_HG00102_1_Grn.idat.gz https://ftp.ncbi.nlm.nih.gov/geo/samples/GSM5050nnn/GSM5050996/suppl/GSM5050996_HG00102_1_Red.idat.gz +GSM5050997 HG00102 2 https://ftp.ncbi.nlm.nih.gov/geo/samples/GSM5050nnn/GSM5050997/suppl/GSM5050997_HG00102_2_Grn.idat.gz https://ftp.ncbi.nlm.nih.gov/geo/samples/GSM5050nnn/GSM5050997/suppl/GSM5050997_HG00102_2_Red.idat.gz +GSM5050998 HG00102 3 https://ftp.ncbi.nlm.nih.gov/geo/samples/GSM5050nnn/GSM5050998/suppl/GSM5050998_HG00102_3_Grn.idat.gz https://ftp.ncbi.nlm.nih.gov/geo/samples/GSM5050nnn/GSM5050998/suppl/GSM5050998_HG00102_3_Red.idat.gz +GSM5050999 HG00105 1 https://ftp.ncbi.nlm.nih.gov/geo/samples/GSM5050nnn/GSM5050999/suppl/GSM5050999_HG00105_1_Grn.idat.gz https://ftp.ncbi.nlm.nih.gov/geo/samples/GSM5050nnn/GSM5050999/suppl/GSM5050999_HG00105_1_Red.idat.gz +GSM5051000 HG00105 2 https://ftp.ncbi.nlm.nih.gov/geo/samples/GSM5051nnn/GSM5051000/suppl/GSM5051000_HG00105_2_Grn.idat.gz https://ftp.ncbi.nlm.nih.gov/geo/samples/GSM5051nnn/GSM5051000/suppl/GSM5051000_HG00105_2_Red.idat.gz +GSM5051001 HG00105 3 https://ftp.ncbi.nlm.nih.gov/geo/samples/GSM5051nnn/GSM5051001/suppl/GSM5051001_HG00105_3_Grn.idat.gz https://ftp.ncbi.nlm.nih.gov/geo/samples/GSM5051nnn/GSM5051001/suppl/GSM5051001_HG00105_3_Red.idat.gz +GSM5051002 HG00107 1 https://ftp.ncbi.nlm.nih.gov/geo/samples/GSM5051nnn/GSM5051002/suppl/GSM5051002_HG00107_1_Grn.idat.gz https://ftp.ncbi.nlm.nih.gov/geo/samples/GSM5051nnn/GSM5051002/suppl/GSM5051002_HG00107_1_Red.idat.gz +GSM5051003 HG00107 2 https://ftp.ncbi.nlm.nih.gov/geo/samples/GSM5051nnn/GSM5051003/suppl/GSM5051003_HG00107_2_Grn.idat.gz https://ftp.ncbi.nlm.nih.gov/geo/samples/GSM5051nnn/GSM5051003/suppl/GSM5051003_HG00107_2_Red.idat.gz +GSM5051004 HG00107 3 https://ftp.ncbi.nlm.nih.gov/geo/samples/GSM5051nnn/GSM5051004/suppl/GSM5051004_HG00107_3_Grn.idat.gz https://ftp.ncbi.nlm.nih.gov/geo/samples/GSM5051nnn/GSM5051004/suppl/GSM5051004_HG00107_3_Red.idat.gz +GSM5051005 HG00108 1 https://ftp.ncbi.nlm.nih.gov/geo/samples/GSM5051nnn/GSM5051005/suppl/GSM5051005_HG00108_1_Grn.idat.gz https://ftp.ncbi.nlm.nih.gov/geo/samples/GSM5051nnn/GSM5051005/suppl/GSM5051005_HG00108_1_Red.idat.gz +GSM5051006 HG00108 2 https://ftp.ncbi.nlm.nih.gov/geo/samples/GSM5051nnn/GSM5051006/suppl/GSM5051006_HG00108_2_Grn.idat.gz https://ftp.ncbi.nlm.nih.gov/geo/samples/GSM5051nnn/GSM5051006/suppl/GSM5051006_HG00108_2_Red.idat.gz +GSM5051007 HG00108 3 https://ftp.ncbi.nlm.nih.gov/geo/samples/GSM5051nnn/GSM5051007/suppl/GSM5051007_HG00108_3_Grn.idat.gz https://ftp.ncbi.nlm.nih.gov/geo/samples/GSM5051nnn/GSM5051007/suppl/GSM5051007_HG00108_3_Red.idat.gz +GSM5051008 HG00110 1 https://ftp.ncbi.nlm.nih.gov/geo/samples/GSM5051nnn/GSM5051008/suppl/GSM5051008_HG00110_1_Grn.idat.gz https://ftp.ncbi.nlm.nih.gov/geo/samples/GSM5051nnn/GSM5051008/suppl/GSM5051008_HG00110_1_Red.idat.gz +GSM5051009 HG00110 2 https://ftp.ncbi.nlm.nih.gov/geo/samples/GSM5051nnn/GSM5051009/suppl/GSM5051009_HG00110_2_Grn.idat.gz https://ftp.ncbi.nlm.nih.gov/geo/samples/GSM5051nnn/GSM5051009/suppl/GSM5051009_HG00110_2_Red.idat.gz +GSM5051010 HG00110 3 https://ftp.ncbi.nlm.nih.gov/geo/samples/GSM5051nnn/GSM5051010/suppl/GSM5051010_HG00110_3_Grn.idat.gz https://ftp.ncbi.nlm.nih.gov/geo/samples/GSM5051nnn/GSM5051010/suppl/GSM5051010_HG00110_3_Red.idat.gz +GSM5051011 HG00111 1 https://ftp.ncbi.nlm.nih.gov/geo/samples/GSM5051nnn/GSM5051011/suppl/GSM5051011_HG00111_1_Grn.idat.gz https://ftp.ncbi.nlm.nih.gov/geo/samples/GSM5051nnn/GSM5051011/suppl/GSM5051011_HG00111_1_Red.idat.gz +GSM5051012 HG00111 2 https://ftp.ncbi.nlm.nih.gov/geo/samples/GSM5051nnn/GSM5051012/suppl/GSM5051012_HG00111_2_Grn.idat.gz https://ftp.ncbi.nlm.nih.gov/geo/samples/GSM5051nnn/GSM5051012/suppl/GSM5051012_HG00111_2_Red.idat.gz +GSM5051013 HG00111 3 https://ftp.ncbi.nlm.nih.gov/geo/samples/GSM5051nnn/GSM5051013/suppl/GSM5051013_HG00111_3_Grn.idat.gz https://ftp.ncbi.nlm.nih.gov/geo/samples/GSM5051nnn/GSM5051013/suppl/GSM5051013_HG00111_3_Red.idat.gz +GSM5051014 HG00116 1 https://ftp.ncbi.nlm.nih.gov/geo/samples/GSM5051nnn/GSM5051014/suppl/GSM5051014_HG00116_1_Grn.idat.gz https://ftp.ncbi.nlm.nih.gov/geo/samples/GSM5051nnn/GSM5051014/suppl/GSM5051014_HG00116_1_Red.idat.gz +GSM5051015 HG00116 2 https://ftp.ncbi.nlm.nih.gov/geo/samples/GSM5051nnn/GSM5051015/suppl/GSM5051015_HG00116_2_Grn.idat.gz https://ftp.ncbi.nlm.nih.gov/geo/samples/GSM5051nnn/GSM5051015/suppl/GSM5051015_HG00116_2_Red.idat.gz +GSM5051016 HG00116 3 https://ftp.ncbi.nlm.nih.gov/geo/samples/GSM5051nnn/GSM5051016/suppl/GSM5051016_HG00116_3_Grn.idat.gz https://ftp.ncbi.nlm.nih.gov/geo/samples/GSM5051nnn/GSM5051016/suppl/GSM5051016_HG00116_3_Red.idat.gz +GSM5051017 HG00119 1 https://ftp.ncbi.nlm.nih.gov/geo/samples/GSM5051nnn/GSM5051017/suppl/GSM5051017_HG00119_1_Grn.idat.gz https://ftp.ncbi.nlm.nih.gov/geo/samples/GSM5051nnn/GSM5051017/suppl/GSM5051017_HG00119_1_Red.idat.gz +GSM5051018 HG00119 2 https://ftp.ncbi.nlm.nih.gov/geo/samples/GSM5051nnn/GSM5051018/suppl/GSM5051018_HG00119_2_Grn.idat.gz https://ftp.ncbi.nlm.nih.gov/geo/samples/GSM5051nnn/GSM5051018/suppl/GSM5051018_HG00119_2_Red.idat.gz +GSM5051019 HG00119 3 https://ftp.ncbi.nlm.nih.gov/geo/samples/GSM5051nnn/GSM5051019/suppl/GSM5051019_HG00119_3_Grn.idat.gz https://ftp.ncbi.nlm.nih.gov/geo/samples/GSM5051nnn/GSM5051019/suppl/GSM5051019_HG00119_3_Red.idat.gz +GSM5051020 HG00131 1 https://ftp.ncbi.nlm.nih.gov/geo/samples/GSM5051nnn/GSM5051020/suppl/GSM5051020_HG00131_1_Grn.idat.gz https://ftp.ncbi.nlm.nih.gov/geo/samples/GSM5051nnn/GSM5051020/suppl/GSM5051020_HG00131_1_Red.idat.gz +GSM5051021 HG00131 2 https://ftp.ncbi.nlm.nih.gov/geo/samples/GSM5051nnn/GSM5051021/suppl/GSM5051021_HG00131_2_Grn.idat.gz https://ftp.ncbi.nlm.nih.gov/geo/samples/GSM5051nnn/GSM5051021/suppl/GSM5051021_HG00131_2_Red.idat.gz +GSM5051022 HG00131 3 https://ftp.ncbi.nlm.nih.gov/geo/samples/GSM5051nnn/GSM5051022/suppl/GSM5051022_HG00131_3_Grn.idat.gz https://ftp.ncbi.nlm.nih.gov/geo/samples/GSM5051nnn/GSM5051022/suppl/GSM5051022_HG00131_3_Red.idat.gz +GSM5051023 HG00132 1 https://ftp.ncbi.nlm.nih.gov/geo/samples/GSM5051nnn/GSM5051023/suppl/GSM5051023_HG00132_1_Grn.idat.gz https://ftp.ncbi.nlm.nih.gov/geo/samples/GSM5051nnn/GSM5051023/suppl/GSM5051023_HG00132_1_Red.idat.gz +GSM5051024 HG00132 2 https://ftp.ncbi.nlm.nih.gov/geo/samples/GSM5051nnn/GSM5051024/suppl/GSM5051024_HG00132_2_Grn.idat.gz https://ftp.ncbi.nlm.nih.gov/geo/samples/GSM5051nnn/GSM5051024/suppl/GSM5051024_HG00132_2_Red.idat.gz +GSM5051025 HG00132 3 https://ftp.ncbi.nlm.nih.gov/geo/samples/GSM5051nnn/GSM5051025/suppl/GSM5051025_HG00132_3_Grn.idat.gz https://ftp.ncbi.nlm.nih.gov/geo/samples/GSM5051nnn/GSM5051025/suppl/GSM5051025_HG00132_3_Red.idat.gz +GSM5051026 HG00145 1 https://ftp.ncbi.nlm.nih.gov/geo/samples/GSM5051nnn/GSM5051026/suppl/GSM5051026_HG00145_1_Grn.idat.gz https://ftp.ncbi.nlm.nih.gov/geo/samples/GSM5051nnn/GSM5051026/suppl/GSM5051026_HG00145_1_Red.idat.gz +GSM5051027 HG00145 2 https://ftp.ncbi.nlm.nih.gov/geo/samples/GSM5051nnn/GSM5051027/suppl/GSM5051027_HG00145_2_Grn.idat.gz https://ftp.ncbi.nlm.nih.gov/geo/samples/GSM5051nnn/GSM5051027/suppl/GSM5051027_HG00145_2_Red.idat.gz +GSM5051028 HG00145 3 https://ftp.ncbi.nlm.nih.gov/geo/samples/GSM5051nnn/GSM5051028/suppl/GSM5051028_HG00145_3_Grn.idat.gz https://ftp.ncbi.nlm.nih.gov/geo/samples/GSM5051nnn/GSM5051028/suppl/GSM5051028_HG00145_3_Red.idat.gz +GSM5051029 HG00160 1 https://ftp.ncbi.nlm.nih.gov/geo/samples/GSM5051nnn/GSM5051029/suppl/GSM5051029_HG00160_1_Grn.idat.gz https://ftp.ncbi.nlm.nih.gov/geo/samples/GSM5051nnn/GSM5051029/suppl/GSM5051029_HG00160_1_Red.idat.gz +GSM5051030 HG00160 2 https://ftp.ncbi.nlm.nih.gov/geo/samples/GSM5051nnn/GSM5051030/suppl/GSM5051030_HG00160_2_Grn.idat.gz https://ftp.ncbi.nlm.nih.gov/geo/samples/GSM5051nnn/GSM5051030/suppl/GSM5051030_HG00160_2_Red.idat.gz +GSM5051031 HG00160 3 https://ftp.ncbi.nlm.nih.gov/geo/samples/GSM5051nnn/GSM5051031/suppl/GSM5051031_HG00160_3_Grn.idat.gz https://ftp.ncbi.nlm.nih.gov/geo/samples/GSM5051nnn/GSM5051031/suppl/GSM5051031_HG00160_3_Red.idat.gz +GSM5051032 HG00234 1 https://ftp.ncbi.nlm.nih.gov/geo/samples/GSM5051nnn/GSM5051032/suppl/GSM5051032_HG00234_1_Grn.idat.gz https://ftp.ncbi.nlm.nih.gov/geo/samples/GSM5051nnn/GSM5051032/suppl/GSM5051032_HG00234_1_Red.idat.gz +GSM5051033 HG00234 2 https://ftp.ncbi.nlm.nih.gov/geo/samples/GSM5051nnn/GSM5051033/suppl/GSM5051033_HG00234_2_Grn.idat.gz https://ftp.ncbi.nlm.nih.gov/geo/samples/GSM5051nnn/GSM5051033/suppl/GSM5051033_HG00234_2_Red.idat.gz +GSM5051034 HG00234 3 https://ftp.ncbi.nlm.nih.gov/geo/samples/GSM5051nnn/GSM5051034/suppl/GSM5051034_HG00234_3_Grn.idat.gz https://ftp.ncbi.nlm.nih.gov/geo/samples/GSM5051nnn/GSM5051034/suppl/GSM5051034_HG00234_3_Red.idat.gz +GSM5051035 HG00239 1 https://ftp.ncbi.nlm.nih.gov/geo/samples/GSM5051nnn/GSM5051035/suppl/GSM5051035_HG00239_1_Grn.idat.gz https://ftp.ncbi.nlm.nih.gov/geo/samples/GSM5051nnn/GSM5051035/suppl/GSM5051035_HG00239_1_Red.idat.gz +GSM5051036 HG00239 2 https://ftp.ncbi.nlm.nih.gov/geo/samples/GSM5051nnn/GSM5051036/suppl/GSM5051036_HG00239_2_Grn.idat.gz https://ftp.ncbi.nlm.nih.gov/geo/samples/GSM5051nnn/GSM5051036/suppl/GSM5051036_HG00239_2_Red.idat.gz +GSM5051037 HG00239 3 https://ftp.ncbi.nlm.nih.gov/geo/samples/GSM5051nnn/GSM5051037/suppl/GSM5051037_HG00239_3_Grn.idat.gz https://ftp.ncbi.nlm.nih.gov/geo/samples/GSM5051nnn/GSM5051037/suppl/GSM5051037_HG00239_3_Red.idat.gz +GSM5051038 HG00240 1 https://ftp.ncbi.nlm.nih.gov/geo/samples/GSM5051nnn/GSM5051038/suppl/GSM5051038_HG00240_1_Grn.idat.gz https://ftp.ncbi.nlm.nih.gov/geo/samples/GSM5051nnn/GSM5051038/suppl/GSM5051038_HG00240_1_Red.idat.gz +GSM5051039 HG00240 2 https://ftp.ncbi.nlm.nih.gov/geo/samples/GSM5051nnn/GSM5051039/suppl/GSM5051039_HG00240_2_Grn.idat.gz https://ftp.ncbi.nlm.nih.gov/geo/samples/GSM5051nnn/GSM5051039/suppl/GSM5051039_HG00240_2_Red.idat.gz +GSM5051040 HG00240 3 https://ftp.ncbi.nlm.nih.gov/geo/samples/GSM5051nnn/GSM5051040/suppl/GSM5051040_HG00240_3_Grn.idat.gz https://ftp.ncbi.nlm.nih.gov/geo/samples/GSM5051nnn/GSM5051040/suppl/GSM5051040_HG00240_3_Red.idat.gz +GSM5051041 HG00242 1 https://ftp.ncbi.nlm.nih.gov/geo/samples/GSM5051nnn/GSM5051041/suppl/GSM5051041_HG00242_1_Grn.idat.gz https://ftp.ncbi.nlm.nih.gov/geo/samples/GSM5051nnn/GSM5051041/suppl/GSM5051041_HG00242_1_Red.idat.gz +GSM5051042 HG00242 2 https://ftp.ncbi.nlm.nih.gov/geo/samples/GSM5051nnn/GSM5051042/suppl/GSM5051042_HG00242_2_Grn.idat.gz https://ftp.ncbi.nlm.nih.gov/geo/samples/GSM5051nnn/GSM5051042/suppl/GSM5051042_HG00242_2_Red.idat.gz +GSM5051043 HG00242 3 https://ftp.ncbi.nlm.nih.gov/geo/samples/GSM5051nnn/GSM5051043/suppl/GSM5051043_HG00242_3_Grn.idat.gz https://ftp.ncbi.nlm.nih.gov/geo/samples/GSM5051nnn/GSM5051043/suppl/GSM5051043_HG00242_3_Red.idat.gz +GSM5051044 HG00244 1 https://ftp.ncbi.nlm.nih.gov/geo/samples/GSM5051nnn/GSM5051044/suppl/GSM5051044_HG00244_1_Grn.idat.gz https://ftp.ncbi.nlm.nih.gov/geo/samples/GSM5051nnn/GSM5051044/suppl/GSM5051044_HG00244_1_Red.idat.gz +GSM5051045 HG00244 2 https://ftp.ncbi.nlm.nih.gov/geo/samples/GSM5051nnn/GSM5051045/suppl/GSM5051045_HG00244_2_Grn.idat.gz https://ftp.ncbi.nlm.nih.gov/geo/samples/GSM5051nnn/GSM5051045/suppl/GSM5051045_HG00244_2_Red.idat.gz +GSM5051046 HG00244 3 https://ftp.ncbi.nlm.nih.gov/geo/samples/GSM5051nnn/GSM5051046/suppl/GSM5051046_HG00244_3_Grn.idat.gz https://ftp.ncbi.nlm.nih.gov/geo/samples/GSM5051nnn/GSM5051046/suppl/GSM5051046_HG00244_3_Red.idat.gz +GSM5051047 HG00250 1 https://ftp.ncbi.nlm.nih.gov/geo/samples/GSM5051nnn/GSM5051047/suppl/GSM5051047_HG00250_1_Grn.idat.gz https://ftp.ncbi.nlm.nih.gov/geo/samples/GSM5051nnn/GSM5051047/suppl/GSM5051047_HG00250_1_Red.idat.gz +GSM5051048 HG00250 2 https://ftp.ncbi.nlm.nih.gov/geo/samples/GSM5051nnn/GSM5051048/suppl/GSM5051048_HG00250_2_Grn.idat.gz https://ftp.ncbi.nlm.nih.gov/geo/samples/GSM5051nnn/GSM5051048/suppl/GSM5051048_HG00250_2_Red.idat.gz +GSM5051049 HG00250 3 https://ftp.ncbi.nlm.nih.gov/geo/samples/GSM5051nnn/GSM5051049/suppl/GSM5051049_HG00250_3_Grn.idat.gz https://ftp.ncbi.nlm.nih.gov/geo/samples/GSM5051nnn/GSM5051049/suppl/GSM5051049_HG00250_3_Red.idat.gz +GSM5051050 HG00251 1 https://ftp.ncbi.nlm.nih.gov/geo/samples/GSM5051nnn/GSM5051050/suppl/GSM5051050_HG00251_1_Grn.idat.gz https://ftp.ncbi.nlm.nih.gov/geo/samples/GSM5051nnn/GSM5051050/suppl/GSM5051050_HG00251_1_Red.idat.gz +GSM5051051 HG00251 2 https://ftp.ncbi.nlm.nih.gov/geo/samples/GSM5051nnn/GSM5051051/suppl/GSM5051051_HG00251_2_Grn.idat.gz https://ftp.ncbi.nlm.nih.gov/geo/samples/GSM5051nnn/GSM5051051/suppl/GSM5051051_HG00251_2_Red.idat.gz +GSM5051052 HG00251 3 https://ftp.ncbi.nlm.nih.gov/geo/samples/GSM5051nnn/GSM5051052/suppl/GSM5051052_HG00251_3_Grn.idat.gz https://ftp.ncbi.nlm.nih.gov/geo/samples/GSM5051nnn/GSM5051052/suppl/GSM5051052_HG00251_3_Red.idat.gz +GSM5051053 HG00255 1 https://ftp.ncbi.nlm.nih.gov/geo/samples/GSM5051nnn/GSM5051053/suppl/GSM5051053_HG00255_1_Grn.idat.gz https://ftp.ncbi.nlm.nih.gov/geo/samples/GSM5051nnn/GSM5051053/suppl/GSM5051053_HG00255_1_Red.idat.gz +GSM5051054 HG00255 2 https://ftp.ncbi.nlm.nih.gov/geo/samples/GSM5051nnn/GSM5051054/suppl/GSM5051054_HG00255_2_Grn.idat.gz https://ftp.ncbi.nlm.nih.gov/geo/samples/GSM5051nnn/GSM5051054/suppl/GSM5051054_HG00255_2_Red.idat.gz +GSM5051055 HG00255 3 https://ftp.ncbi.nlm.nih.gov/geo/samples/GSM5051nnn/GSM5051055/suppl/GSM5051055_HG00255_3_Grn.idat.gz https://ftp.ncbi.nlm.nih.gov/geo/samples/GSM5051nnn/GSM5051055/suppl/GSM5051055_HG00255_3_Red.idat.gz +GSM5051056 HG00262 1 https://ftp.ncbi.nlm.nih.gov/geo/samples/GSM5051nnn/GSM5051056/suppl/GSM5051056_HG00262_1_Grn.idat.gz https://ftp.ncbi.nlm.nih.gov/geo/samples/GSM5051nnn/GSM5051056/suppl/GSM5051056_HG00262_1_Red.idat.gz +GSM5051057 HG00262 2 https://ftp.ncbi.nlm.nih.gov/geo/samples/GSM5051nnn/GSM5051057/suppl/GSM5051057_HG00262_2_Grn.idat.gz https://ftp.ncbi.nlm.nih.gov/geo/samples/GSM5051nnn/GSM5051057/suppl/GSM5051057_HG00262_2_Red.idat.gz +GSM5051058 HG00262 3 https://ftp.ncbi.nlm.nih.gov/geo/samples/GSM5051nnn/GSM5051058/suppl/GSM5051058_HG00262_3_Grn.idat.gz https://ftp.ncbi.nlm.nih.gov/geo/samples/GSM5051nnn/GSM5051058/suppl/GSM5051058_HG00262_3_Red.idat.gz +GSM5051059 HG00268 1 https://ftp.ncbi.nlm.nih.gov/geo/samples/GSM5051nnn/GSM5051059/suppl/GSM5051059_HG00268_1_Grn.idat.gz https://ftp.ncbi.nlm.nih.gov/geo/samples/GSM5051nnn/GSM5051059/suppl/GSM5051059_HG00268_1_Red.idat.gz +GSM5051060 HG00268 2 https://ftp.ncbi.nlm.nih.gov/geo/samples/GSM5051nnn/GSM5051060/suppl/GSM5051060_HG00268_2_Grn.idat.gz https://ftp.ncbi.nlm.nih.gov/geo/samples/GSM5051nnn/GSM5051060/suppl/GSM5051060_HG00268_2_Red.idat.gz +GSM5051061 HG00268 3 https://ftp.ncbi.nlm.nih.gov/geo/samples/GSM5051nnn/GSM5051061/suppl/GSM5051061_HG00268_3_Grn.idat.gz https://ftp.ncbi.nlm.nih.gov/geo/samples/GSM5051nnn/GSM5051061/suppl/GSM5051061_HG00268_3_Red.idat.gz +GSM5051062 HG00330 1 https://ftp.ncbi.nlm.nih.gov/geo/samples/GSM5051nnn/GSM5051062/suppl/GSM5051062_HG00330_1_Grn.idat.gz https://ftp.ncbi.nlm.nih.gov/geo/samples/GSM5051nnn/GSM5051062/suppl/GSM5051062_HG00330_1_Red.idat.gz +GSM5051063 HG00330 2 https://ftp.ncbi.nlm.nih.gov/geo/samples/GSM5051nnn/GSM5051063/suppl/GSM5051063_HG00330_2_Grn.idat.gz https://ftp.ncbi.nlm.nih.gov/geo/samples/GSM5051nnn/GSM5051063/suppl/GSM5051063_HG00330_2_Red.idat.gz +GSM5051064 HG00330 3 https://ftp.ncbi.nlm.nih.gov/geo/samples/GSM5051nnn/GSM5051064/suppl/GSM5051064_HG00330_3_Grn.idat.gz https://ftp.ncbi.nlm.nih.gov/geo/samples/GSM5051nnn/GSM5051064/suppl/GSM5051064_HG00330_3_Red.idat.gz +GSM5051065 HG00360 1 https://ftp.ncbi.nlm.nih.gov/geo/samples/GSM5051nnn/GSM5051065/suppl/GSM5051065_HG00360_1_Grn.idat.gz https://ftp.ncbi.nlm.nih.gov/geo/samples/GSM5051nnn/GSM5051065/suppl/GSM5051065_HG00360_1_Red.idat.gz +GSM5051066 HG00360 2 https://ftp.ncbi.nlm.nih.gov/geo/samples/GSM5051nnn/GSM5051066/suppl/GSM5051066_HG00360_2_Grn.idat.gz https://ftp.ncbi.nlm.nih.gov/geo/samples/GSM5051nnn/GSM5051066/suppl/GSM5051066_HG00360_2_Red.idat.gz +GSM5051067 HG00360 3 https://ftp.ncbi.nlm.nih.gov/geo/samples/GSM5051nnn/GSM5051067/suppl/GSM5051067_HG00360_3_Grn.idat.gz https://ftp.ncbi.nlm.nih.gov/geo/samples/GSM5051nnn/GSM5051067/suppl/GSM5051067_HG00360_3_Red.idat.gz +GSM5051068 HG00364 1 https://ftp.ncbi.nlm.nih.gov/geo/samples/GSM5051nnn/GSM5051068/suppl/GSM5051068_HG00364_1_Grn.idat.gz https://ftp.ncbi.nlm.nih.gov/geo/samples/GSM5051nnn/GSM5051068/suppl/GSM5051068_HG00364_1_Red.idat.gz +GSM5051069 HG00364 2 https://ftp.ncbi.nlm.nih.gov/geo/samples/GSM5051nnn/GSM5051069/suppl/GSM5051069_HG00364_2_Grn.idat.gz https://ftp.ncbi.nlm.nih.gov/geo/samples/GSM5051nnn/GSM5051069/suppl/GSM5051069_HG00364_2_Red.idat.gz +GSM5051070 HG00364 3 https://ftp.ncbi.nlm.nih.gov/geo/samples/GSM5051nnn/GSM5051070/suppl/GSM5051070_HG00364_3_Grn.idat.gz https://ftp.ncbi.nlm.nih.gov/geo/samples/GSM5051nnn/GSM5051070/suppl/GSM5051070_HG00364_3_Red.idat.gz +GSM5051071 HG00365 1 https://ftp.ncbi.nlm.nih.gov/geo/samples/GSM5051nnn/GSM5051071/suppl/GSM5051071_HG00365_1_Grn.idat.gz https://ftp.ncbi.nlm.nih.gov/geo/samples/GSM5051nnn/GSM5051071/suppl/GSM5051071_HG00365_1_Red.idat.gz +GSM5051072 HG00365 2 https://ftp.ncbi.nlm.nih.gov/geo/samples/GSM5051nnn/GSM5051072/suppl/GSM5051072_HG00365_2_Grn.idat.gz https://ftp.ncbi.nlm.nih.gov/geo/samples/GSM5051nnn/GSM5051072/suppl/GSM5051072_HG00365_2_Red.idat.gz +GSM5051073 HG00365 3 https://ftp.ncbi.nlm.nih.gov/geo/samples/GSM5051nnn/GSM5051073/suppl/GSM5051073_HG00365_3_Grn.idat.gz https://ftp.ncbi.nlm.nih.gov/geo/samples/GSM5051nnn/GSM5051073/suppl/GSM5051073_HG00365_3_Red.idat.gz +GSM5051074 HG00384 1 https://ftp.ncbi.nlm.nih.gov/geo/samples/GSM5051nnn/GSM5051074/suppl/GSM5051074_HG00384_1_Grn.idat.gz https://ftp.ncbi.nlm.nih.gov/geo/samples/GSM5051nnn/GSM5051074/suppl/GSM5051074_HG00384_1_Red.idat.gz +GSM5051075 HG00384 2 https://ftp.ncbi.nlm.nih.gov/geo/samples/GSM5051nnn/GSM5051075/suppl/GSM5051075_HG00384_2_Grn.idat.gz https://ftp.ncbi.nlm.nih.gov/geo/samples/GSM5051nnn/GSM5051075/suppl/GSM5051075_HG00384_2_Red.idat.gz +GSM5051076 HG00384 3 https://ftp.ncbi.nlm.nih.gov/geo/samples/GSM5051nnn/GSM5051076/suppl/GSM5051076_HG00384_3_Grn.idat.gz https://ftp.ncbi.nlm.nih.gov/geo/samples/GSM5051nnn/GSM5051076/suppl/GSM5051076_HG00384_3_Red.idat.gz +GSM5051077 HG01500 1 https://ftp.ncbi.nlm.nih.gov/geo/samples/GSM5051nnn/GSM5051077/suppl/GSM5051077_HG01500_1_Grn.idat.gz https://ftp.ncbi.nlm.nih.gov/geo/samples/GSM5051nnn/GSM5051077/suppl/GSM5051077_HG01500_1_Red.idat.gz +GSM5051078 HG01500 2 https://ftp.ncbi.nlm.nih.gov/geo/samples/GSM5051nnn/GSM5051078/suppl/GSM5051078_HG01500_2_Grn.idat.gz https://ftp.ncbi.nlm.nih.gov/geo/samples/GSM5051nnn/GSM5051078/suppl/GSM5051078_HG01500_2_Red.idat.gz +GSM5051079 HG01500 3 https://ftp.ncbi.nlm.nih.gov/geo/samples/GSM5051nnn/GSM5051079/suppl/GSM5051079_HG01500_3_Grn.idat.gz https://ftp.ncbi.nlm.nih.gov/geo/samples/GSM5051nnn/GSM5051079/suppl/GSM5051079_HG01500_3_Red.idat.gz +GSM5051080 HG01697 1 https://ftp.ncbi.nlm.nih.gov/geo/samples/GSM5051nnn/GSM5051080/suppl/GSM5051080_HG01697_1_Grn.idat.gz https://ftp.ncbi.nlm.nih.gov/geo/samples/GSM5051nnn/GSM5051080/suppl/GSM5051080_HG01697_1_Red.idat.gz +GSM5051081 HG01697 2 https://ftp.ncbi.nlm.nih.gov/geo/samples/GSM5051nnn/GSM5051081/suppl/GSM5051081_HG01697_2_Grn.idat.gz https://ftp.ncbi.nlm.nih.gov/geo/samples/GSM5051nnn/GSM5051081/suppl/GSM5051081_HG01697_2_Red.idat.gz +GSM5051082 HG01697 3 https://ftp.ncbi.nlm.nih.gov/geo/samples/GSM5051nnn/GSM5051082/suppl/GSM5051082_HG01697_3_Grn.idat.gz https://ftp.ncbi.nlm.nih.gov/geo/samples/GSM5051nnn/GSM5051082/suppl/GSM5051082_HG01697_3_Red.idat.gz +GSM5051083 HG01699 1 https://ftp.ncbi.nlm.nih.gov/geo/samples/GSM5051nnn/GSM5051083/suppl/GSM5051083_HG01699_1_Grn.idat.gz https://ftp.ncbi.nlm.nih.gov/geo/samples/GSM5051nnn/GSM5051083/suppl/GSM5051083_HG01699_1_Red.idat.gz +GSM5051084 HG01699 2 https://ftp.ncbi.nlm.nih.gov/geo/samples/GSM5051nnn/GSM5051084/suppl/GSM5051084_HG01699_2_Grn.idat.gz https://ftp.ncbi.nlm.nih.gov/geo/samples/GSM5051nnn/GSM5051084/suppl/GSM5051084_HG01699_2_Red.idat.gz +GSM5051085 HG01699 3 https://ftp.ncbi.nlm.nih.gov/geo/samples/GSM5051nnn/GSM5051085/suppl/GSM5051085_HG01699_3_Grn.idat.gz https://ftp.ncbi.nlm.nih.gov/geo/samples/GSM5051nnn/GSM5051085/suppl/GSM5051085_HG01699_3_Red.idat.gz +GSM5051086 HG01756 1 https://ftp.ncbi.nlm.nih.gov/geo/samples/GSM5051nnn/GSM5051086/suppl/GSM5051086_HG01756_1_Grn.idat.gz https://ftp.ncbi.nlm.nih.gov/geo/samples/GSM5051nnn/GSM5051086/suppl/GSM5051086_HG01756_1_Red.idat.gz +GSM5051087 HG01756 2 https://ftp.ncbi.nlm.nih.gov/geo/samples/GSM5051nnn/GSM5051087/suppl/GSM5051087_HG01756_2_Grn.idat.gz https://ftp.ncbi.nlm.nih.gov/geo/samples/GSM5051nnn/GSM5051087/suppl/GSM5051087_HG01756_2_Red.idat.gz +GSM5051088 HG01756 3 https://ftp.ncbi.nlm.nih.gov/geo/samples/GSM5051nnn/GSM5051088/suppl/GSM5051088_HG01756_3_Grn.idat.gz https://ftp.ncbi.nlm.nih.gov/geo/samples/GSM5051nnn/GSM5051088/suppl/GSM5051088_HG01756_3_Red.idat.gz +GSM5051089 HG01757 1 https://ftp.ncbi.nlm.nih.gov/geo/samples/GSM5051nnn/GSM5051089/suppl/GSM5051089_HG01757_1_Grn.idat.gz https://ftp.ncbi.nlm.nih.gov/geo/samples/GSM5051nnn/GSM5051089/suppl/GSM5051089_HG01757_1_Red.idat.gz +GSM5051090 HG01757 2 https://ftp.ncbi.nlm.nih.gov/geo/samples/GSM5051nnn/GSM5051090/suppl/GSM5051090_HG01757_2_Grn.idat.gz https://ftp.ncbi.nlm.nih.gov/geo/samples/GSM5051nnn/GSM5051090/suppl/GSM5051090_HG01757_2_Red.idat.gz +GSM5051091 HG01757 3 https://ftp.ncbi.nlm.nih.gov/geo/samples/GSM5051nnn/GSM5051091/suppl/GSM5051091_HG01757_3_Grn.idat.gz https://ftp.ncbi.nlm.nih.gov/geo/samples/GSM5051nnn/GSM5051091/suppl/GSM5051091_HG01757_3_Red.idat.gz +GSM5051092 HG01761 1 https://ftp.ncbi.nlm.nih.gov/geo/samples/GSM5051nnn/GSM5051092/suppl/GSM5051092_HG01761_1_Grn.idat.gz https://ftp.ncbi.nlm.nih.gov/geo/samples/GSM5051nnn/GSM5051092/suppl/GSM5051092_HG01761_1_Red.idat.gz +GSM5051093 HG01761 2 https://ftp.ncbi.nlm.nih.gov/geo/samples/GSM5051nnn/GSM5051093/suppl/GSM5051093_HG01761_2_Grn.idat.gz https://ftp.ncbi.nlm.nih.gov/geo/samples/GSM5051nnn/GSM5051093/suppl/GSM5051093_HG01761_2_Red.idat.gz +GSM5051094 HG01761 3 https://ftp.ncbi.nlm.nih.gov/geo/samples/GSM5051nnn/GSM5051094/suppl/GSM5051094_HG01761_3_Grn.idat.gz https://ftp.ncbi.nlm.nih.gov/geo/samples/GSM5051nnn/GSM5051094/suppl/GSM5051094_HG01761_3_Red.idat.gz +GSM5051095 HG01762 1 https://ftp.ncbi.nlm.nih.gov/geo/samples/GSM5051nnn/GSM5051095/suppl/GSM5051095_HG01762_1_Grn.idat.gz https://ftp.ncbi.nlm.nih.gov/geo/samples/GSM5051nnn/GSM5051095/suppl/GSM5051095_HG01762_1_Red.idat.gz +GSM5051096 HG01762 2 https://ftp.ncbi.nlm.nih.gov/geo/samples/GSM5051nnn/GSM5051096/suppl/GSM5051096_HG01762_2_Grn.idat.gz https://ftp.ncbi.nlm.nih.gov/geo/samples/GSM5051nnn/GSM5051096/suppl/GSM5051096_HG01762_2_Red.idat.gz +GSM5051097 HG01762 3 https://ftp.ncbi.nlm.nih.gov/geo/samples/GSM5051nnn/GSM5051097/suppl/GSM5051097_HG01762_3_Grn.idat.gz https://ftp.ncbi.nlm.nih.gov/geo/samples/GSM5051nnn/GSM5051097/suppl/GSM5051097_HG01762_3_Red.idat.gz +GSM5051098 HG01770 1 https://ftp.ncbi.nlm.nih.gov/geo/samples/GSM5051nnn/GSM5051098/suppl/GSM5051098_HG01770_1_Grn.idat.gz https://ftp.ncbi.nlm.nih.gov/geo/samples/GSM5051nnn/GSM5051098/suppl/GSM5051098_HG01770_1_Red.idat.gz +GSM5051099 HG01770 2 https://ftp.ncbi.nlm.nih.gov/geo/samples/GSM5051nnn/GSM5051099/suppl/GSM5051099_HG01770_2_Grn.idat.gz https://ftp.ncbi.nlm.nih.gov/geo/samples/GSM5051nnn/GSM5051099/suppl/GSM5051099_HG01770_2_Red.idat.gz +GSM5051100 HG01770 3 https://ftp.ncbi.nlm.nih.gov/geo/samples/GSM5051nnn/GSM5051100/suppl/GSM5051100_HG01770_3_Grn.idat.gz https://ftp.ncbi.nlm.nih.gov/geo/samples/GSM5051nnn/GSM5051100/suppl/GSM5051100_HG01770_3_Red.idat.gz +GSM5051101 HG01771 1 https://ftp.ncbi.nlm.nih.gov/geo/samples/GSM5051nnn/GSM5051101/suppl/GSM5051101_HG01771_1_Grn.idat.gz https://ftp.ncbi.nlm.nih.gov/geo/samples/GSM5051nnn/GSM5051101/suppl/GSM5051101_HG01771_1_Red.idat.gz +GSM5051102 HG01771 2 https://ftp.ncbi.nlm.nih.gov/geo/samples/GSM5051nnn/GSM5051102/suppl/GSM5051102_HG01771_2_Grn.idat.gz https://ftp.ncbi.nlm.nih.gov/geo/samples/GSM5051nnn/GSM5051102/suppl/GSM5051102_HG01771_2_Red.idat.gz +GSM5051103 HG01771 3 https://ftp.ncbi.nlm.nih.gov/geo/samples/GSM5051nnn/GSM5051103/suppl/GSM5051103_HG01771_3_Grn.idat.gz https://ftp.ncbi.nlm.nih.gov/geo/samples/GSM5051nnn/GSM5051103/suppl/GSM5051103_HG01771_3_Red.idat.gz +GSM5051104 HG01777 1 https://ftp.ncbi.nlm.nih.gov/geo/samples/GSM5051nnn/GSM5051104/suppl/GSM5051104_HG01777_1_Grn.idat.gz https://ftp.ncbi.nlm.nih.gov/geo/samples/GSM5051nnn/GSM5051104/suppl/GSM5051104_HG01777_1_Red.idat.gz +GSM5051105 HG01777 2 https://ftp.ncbi.nlm.nih.gov/geo/samples/GSM5051nnn/GSM5051105/suppl/GSM5051105_HG01777_2_Grn.idat.gz https://ftp.ncbi.nlm.nih.gov/geo/samples/GSM5051nnn/GSM5051105/suppl/GSM5051105_HG01777_2_Red.idat.gz +GSM5051106 HG01777 3 https://ftp.ncbi.nlm.nih.gov/geo/samples/GSM5051nnn/GSM5051106/suppl/GSM5051106_HG01777_3_Grn.idat.gz https://ftp.ncbi.nlm.nih.gov/geo/samples/GSM5051nnn/GSM5051106/suppl/GSM5051106_HG01777_3_Red.idat.gz +GSM5051107 HG01781 1 https://ftp.ncbi.nlm.nih.gov/geo/samples/GSM5051nnn/GSM5051107/suppl/GSM5051107_HG01781_1_Grn.idat.gz https://ftp.ncbi.nlm.nih.gov/geo/samples/GSM5051nnn/GSM5051107/suppl/GSM5051107_HG01781_1_Red.idat.gz +GSM5051108 HG01781 2 https://ftp.ncbi.nlm.nih.gov/geo/samples/GSM5051nnn/GSM5051108/suppl/GSM5051108_HG01781_2_Grn.idat.gz https://ftp.ncbi.nlm.nih.gov/geo/samples/GSM5051nnn/GSM5051108/suppl/GSM5051108_HG01781_2_Red.idat.gz +GSM5051109 HG01781 3 https://ftp.ncbi.nlm.nih.gov/geo/samples/GSM5051nnn/GSM5051109/suppl/GSM5051109_HG01781_3_Grn.idat.gz https://ftp.ncbi.nlm.nih.gov/geo/samples/GSM5051nnn/GSM5051109/suppl/GSM5051109_HG01781_3_Red.idat.gz +GSM5051110 HG01784 1 https://ftp.ncbi.nlm.nih.gov/geo/samples/GSM5051nnn/GSM5051110/suppl/GSM5051110_HG01784_1_Grn.idat.gz https://ftp.ncbi.nlm.nih.gov/geo/samples/GSM5051nnn/GSM5051110/suppl/GSM5051110_HG01784_1_Red.idat.gz +GSM5051111 HG01784 2 https://ftp.ncbi.nlm.nih.gov/geo/samples/GSM5051nnn/GSM5051111/suppl/GSM5051111_HG01784_2_Grn.idat.gz https://ftp.ncbi.nlm.nih.gov/geo/samples/GSM5051nnn/GSM5051111/suppl/GSM5051111_HG01784_2_Red.idat.gz +GSM5051112 HG01784 3 https://ftp.ncbi.nlm.nih.gov/geo/samples/GSM5051nnn/GSM5051112/suppl/GSM5051112_HG01784_3_Grn.idat.gz https://ftp.ncbi.nlm.nih.gov/geo/samples/GSM5051nnn/GSM5051112/suppl/GSM5051112_HG01784_3_Red.idat.gz +GSM5051113 HG01879 1 https://ftp.ncbi.nlm.nih.gov/geo/samples/GSM5051nnn/GSM5051113/suppl/GSM5051113_HG01879_1_Grn.idat.gz https://ftp.ncbi.nlm.nih.gov/geo/samples/GSM5051nnn/GSM5051113/suppl/GSM5051113_HG01879_1_Red.idat.gz +GSM5051114 HG01879 2 https://ftp.ncbi.nlm.nih.gov/geo/samples/GSM5051nnn/GSM5051114/suppl/GSM5051114_HG01879_2_Grn.idat.gz https://ftp.ncbi.nlm.nih.gov/geo/samples/GSM5051nnn/GSM5051114/suppl/GSM5051114_HG01879_2_Red.idat.gz +GSM5051115 HG01879 3 https://ftp.ncbi.nlm.nih.gov/geo/samples/GSM5051nnn/GSM5051115/suppl/GSM5051115_HG01879_3_Grn.idat.gz https://ftp.ncbi.nlm.nih.gov/geo/samples/GSM5051nnn/GSM5051115/suppl/GSM5051115_HG01879_3_Red.idat.gz +GSM5051116 HG01886 1 https://ftp.ncbi.nlm.nih.gov/geo/samples/GSM5051nnn/GSM5051116/suppl/GSM5051116_HG01886_1_Grn.idat.gz https://ftp.ncbi.nlm.nih.gov/geo/samples/GSM5051nnn/GSM5051116/suppl/GSM5051116_HG01886_1_Red.idat.gz +GSM5051117 HG01886 2 https://ftp.ncbi.nlm.nih.gov/geo/samples/GSM5051nnn/GSM5051117/suppl/GSM5051117_HG01886_2_Grn.idat.gz https://ftp.ncbi.nlm.nih.gov/geo/samples/GSM5051nnn/GSM5051117/suppl/GSM5051117_HG01886_2_Red.idat.gz +GSM5051118 HG01886 3 https://ftp.ncbi.nlm.nih.gov/geo/samples/GSM5051nnn/GSM5051118/suppl/GSM5051118_HG01886_3_Grn.idat.gz https://ftp.ncbi.nlm.nih.gov/geo/samples/GSM5051nnn/GSM5051118/suppl/GSM5051118_HG01886_3_Red.idat.gz +GSM5051119 HG01889 1 https://ftp.ncbi.nlm.nih.gov/geo/samples/GSM5051nnn/GSM5051119/suppl/GSM5051119_HG01889_1_Grn.idat.gz https://ftp.ncbi.nlm.nih.gov/geo/samples/GSM5051nnn/GSM5051119/suppl/GSM5051119_HG01889_1_Red.idat.gz +GSM5051120 HG01889 2 https://ftp.ncbi.nlm.nih.gov/geo/samples/GSM5051nnn/GSM5051120/suppl/GSM5051120_HG01889_2_Grn.idat.gz https://ftp.ncbi.nlm.nih.gov/geo/samples/GSM5051nnn/GSM5051120/suppl/GSM5051120_HG01889_2_Red.idat.gz +GSM5051121 HG01889 3 https://ftp.ncbi.nlm.nih.gov/geo/samples/GSM5051nnn/GSM5051121/suppl/GSM5051121_HG01889_3_Grn.idat.gz https://ftp.ncbi.nlm.nih.gov/geo/samples/GSM5051nnn/GSM5051121/suppl/GSM5051121_HG01889_3_Red.idat.gz +GSM5051122 HG01890 1 https://ftp.ncbi.nlm.nih.gov/geo/samples/GSM5051nnn/GSM5051122/suppl/GSM5051122_HG01890_1_Grn.idat.gz https://ftp.ncbi.nlm.nih.gov/geo/samples/GSM5051nnn/GSM5051122/suppl/GSM5051122_HG01890_1_Red.idat.gz +GSM5051123 HG01890 2 https://ftp.ncbi.nlm.nih.gov/geo/samples/GSM5051nnn/GSM5051123/suppl/GSM5051123_HG01890_2_Grn.idat.gz https://ftp.ncbi.nlm.nih.gov/geo/samples/GSM5051nnn/GSM5051123/suppl/GSM5051123_HG01890_2_Red.idat.gz +GSM5051124 HG01890 3 https://ftp.ncbi.nlm.nih.gov/geo/samples/GSM5051nnn/GSM5051124/suppl/GSM5051124_HG01890_3_Grn.idat.gz https://ftp.ncbi.nlm.nih.gov/geo/samples/GSM5051nnn/GSM5051124/suppl/GSM5051124_HG01890_3_Red.idat.gz +GSM5051125 HG02009 1 https://ftp.ncbi.nlm.nih.gov/geo/samples/GSM5051nnn/GSM5051125/suppl/GSM5051125_HG02009_1_Grn.idat.gz https://ftp.ncbi.nlm.nih.gov/geo/samples/GSM5051nnn/GSM5051125/suppl/GSM5051125_HG02009_1_Red.idat.gz +GSM5051126 HG02009 2 https://ftp.ncbi.nlm.nih.gov/geo/samples/GSM5051nnn/GSM5051126/suppl/GSM5051126_HG02009_2_Grn.idat.gz https://ftp.ncbi.nlm.nih.gov/geo/samples/GSM5051nnn/GSM5051126/suppl/GSM5051126_HG02009_2_Red.idat.gz +GSM5051127 HG02009 3 https://ftp.ncbi.nlm.nih.gov/geo/samples/GSM5051nnn/GSM5051127/suppl/GSM5051127_HG02009_3_Grn.idat.gz https://ftp.ncbi.nlm.nih.gov/geo/samples/GSM5051nnn/GSM5051127/suppl/GSM5051127_HG02009_3_Red.idat.gz +GSM5051128 HG02010 1 https://ftp.ncbi.nlm.nih.gov/geo/samples/GSM5051nnn/GSM5051128/suppl/GSM5051128_HG02010_1_Grn.idat.gz https://ftp.ncbi.nlm.nih.gov/geo/samples/GSM5051nnn/GSM5051128/suppl/GSM5051128_HG02010_1_Red.idat.gz +GSM5051129 HG02010 2 https://ftp.ncbi.nlm.nih.gov/geo/samples/GSM5051nnn/GSM5051129/suppl/GSM5051129_HG02010_2_Grn.idat.gz https://ftp.ncbi.nlm.nih.gov/geo/samples/GSM5051nnn/GSM5051129/suppl/GSM5051129_HG02010_2_Red.idat.gz +GSM5051130 HG02010 3 https://ftp.ncbi.nlm.nih.gov/geo/samples/GSM5051nnn/GSM5051130/suppl/GSM5051130_HG02010_3_Grn.idat.gz https://ftp.ncbi.nlm.nih.gov/geo/samples/GSM5051nnn/GSM5051130/suppl/GSM5051130_HG02010_3_Red.idat.gz +GSM5051131 HG02107 1 https://ftp.ncbi.nlm.nih.gov/geo/samples/GSM5051nnn/GSM5051131/suppl/GSM5051131_HG02107_1_Grn.idat.gz https://ftp.ncbi.nlm.nih.gov/geo/samples/GSM5051nnn/GSM5051131/suppl/GSM5051131_HG02107_1_Red.idat.gz +GSM5051132 HG02107 2 https://ftp.ncbi.nlm.nih.gov/geo/samples/GSM5051nnn/GSM5051132/suppl/GSM5051132_HG02107_2_Grn.idat.gz https://ftp.ncbi.nlm.nih.gov/geo/samples/GSM5051nnn/GSM5051132/suppl/GSM5051132_HG02107_2_Red.idat.gz +GSM5051133 HG02107 3 https://ftp.ncbi.nlm.nih.gov/geo/samples/GSM5051nnn/GSM5051133/suppl/GSM5051133_HG02107_3_Grn.idat.gz https://ftp.ncbi.nlm.nih.gov/geo/samples/GSM5051nnn/GSM5051133/suppl/GSM5051133_HG02107_3_Red.idat.gz +GSM5051134 HG02215 1 https://ftp.ncbi.nlm.nih.gov/geo/samples/GSM5051nnn/GSM5051134/suppl/GSM5051134_HG02215_1_Grn.idat.gz https://ftp.ncbi.nlm.nih.gov/geo/samples/GSM5051nnn/GSM5051134/suppl/GSM5051134_HG02215_1_Red.idat.gz +GSM5051135 HG02215 2 https://ftp.ncbi.nlm.nih.gov/geo/samples/GSM5051nnn/GSM5051135/suppl/GSM5051135_HG02215_2_Grn.idat.gz https://ftp.ncbi.nlm.nih.gov/geo/samples/GSM5051nnn/GSM5051135/suppl/GSM5051135_HG02215_2_Red.idat.gz +GSM5051136 HG02215 3 https://ftp.ncbi.nlm.nih.gov/geo/samples/GSM5051nnn/GSM5051136/suppl/GSM5051136_HG02215_3_Grn.idat.gz https://ftp.ncbi.nlm.nih.gov/geo/samples/GSM5051nnn/GSM5051136/suppl/GSM5051136_HG02215_3_Red.idat.gz +GSM5051137 HG02282 1 https://ftp.ncbi.nlm.nih.gov/geo/samples/GSM5051nnn/GSM5051137/suppl/GSM5051137_HG02282_1_Grn.idat.gz https://ftp.ncbi.nlm.nih.gov/geo/samples/GSM5051nnn/GSM5051137/suppl/GSM5051137_HG02282_1_Red.idat.gz +GSM5051138 HG02282 2 https://ftp.ncbi.nlm.nih.gov/geo/samples/GSM5051nnn/GSM5051138/suppl/GSM5051138_HG02282_2_Grn.idat.gz https://ftp.ncbi.nlm.nih.gov/geo/samples/GSM5051nnn/GSM5051138/suppl/GSM5051138_HG02282_2_Red.idat.gz +GSM5051139 HG02282 3 https://ftp.ncbi.nlm.nih.gov/geo/samples/GSM5051nnn/GSM5051139/suppl/GSM5051139_HG02282_3_Grn.idat.gz https://ftp.ncbi.nlm.nih.gov/geo/samples/GSM5051nnn/GSM5051139/suppl/GSM5051139_HG02282_3_Red.idat.gz +GSM5051140 HG02568 1 https://ftp.ncbi.nlm.nih.gov/geo/samples/GSM5051nnn/GSM5051140/suppl/GSM5051140_HG02568_1_Grn.idat.gz https://ftp.ncbi.nlm.nih.gov/geo/samples/GSM5051nnn/GSM5051140/suppl/GSM5051140_HG02568_1_Red.idat.gz +GSM5051141 HG02568 2 https://ftp.ncbi.nlm.nih.gov/geo/samples/GSM5051nnn/GSM5051141/suppl/GSM5051141_HG02568_2_Grn.idat.gz https://ftp.ncbi.nlm.nih.gov/geo/samples/GSM5051nnn/GSM5051141/suppl/GSM5051141_HG02568_2_Red.idat.gz +GSM5051142 HG02568 3 https://ftp.ncbi.nlm.nih.gov/geo/samples/GSM5051nnn/GSM5051142/suppl/GSM5051142_HG02568_3_Grn.idat.gz https://ftp.ncbi.nlm.nih.gov/geo/samples/GSM5051nnn/GSM5051142/suppl/GSM5051142_HG02568_3_Red.idat.gz +GSM5051143 HG02759 1 https://ftp.ncbi.nlm.nih.gov/geo/samples/GSM5051nnn/GSM5051143/suppl/GSM5051143_HG02759_1_Grn.idat.gz https://ftp.ncbi.nlm.nih.gov/geo/samples/GSM5051nnn/GSM5051143/suppl/GSM5051143_HG02759_1_Red.idat.gz +GSM5051144 HG02759 2 https://ftp.ncbi.nlm.nih.gov/geo/samples/GSM5051nnn/GSM5051144/suppl/GSM5051144_HG02759_2_Grn.idat.gz https://ftp.ncbi.nlm.nih.gov/geo/samples/GSM5051nnn/GSM5051144/suppl/GSM5051144_HG02759_2_Red.idat.gz +GSM5051145 HG02759 3 https://ftp.ncbi.nlm.nih.gov/geo/samples/GSM5051nnn/GSM5051145/suppl/GSM5051145_HG02759_3_Grn.idat.gz https://ftp.ncbi.nlm.nih.gov/geo/samples/GSM5051nnn/GSM5051145/suppl/GSM5051145_HG02759_3_Red.idat.gz +GSM5051146 HG02760 1 https://ftp.ncbi.nlm.nih.gov/geo/samples/GSM5051nnn/GSM5051146/suppl/GSM5051146_HG02760_1_Grn.idat.gz https://ftp.ncbi.nlm.nih.gov/geo/samples/GSM5051nnn/GSM5051146/suppl/GSM5051146_HG02760_1_Red.idat.gz +GSM5051147 HG02760 2 https://ftp.ncbi.nlm.nih.gov/geo/samples/GSM5051nnn/GSM5051147/suppl/GSM5051147_HG02760_2_Grn.idat.gz https://ftp.ncbi.nlm.nih.gov/geo/samples/GSM5051nnn/GSM5051147/suppl/GSM5051147_HG02760_2_Red.idat.gz +GSM5051148 HG02760 3 https://ftp.ncbi.nlm.nih.gov/geo/samples/GSM5051nnn/GSM5051148/suppl/GSM5051148_HG02760_3_Grn.idat.gz https://ftp.ncbi.nlm.nih.gov/geo/samples/GSM5051nnn/GSM5051148/suppl/GSM5051148_HG02760_3_Red.idat.gz +GSM5051149 HG02878 1 https://ftp.ncbi.nlm.nih.gov/geo/samples/GSM5051nnn/GSM5051149/suppl/GSM5051149_HG02878_1_Grn.idat.gz https://ftp.ncbi.nlm.nih.gov/geo/samples/GSM5051nnn/GSM5051149/suppl/GSM5051149_HG02878_1_Red.idat.gz +GSM5051150 HG02878 2 https://ftp.ncbi.nlm.nih.gov/geo/samples/GSM5051nnn/GSM5051150/suppl/GSM5051150_HG02878_2_Grn.idat.gz https://ftp.ncbi.nlm.nih.gov/geo/samples/GSM5051nnn/GSM5051150/suppl/GSM5051150_HG02878_2_Red.idat.gz +GSM5051151 HG02878 3 https://ftp.ncbi.nlm.nih.gov/geo/samples/GSM5051nnn/GSM5051151/suppl/GSM5051151_HG02878_3_Grn.idat.gz https://ftp.ncbi.nlm.nih.gov/geo/samples/GSM5051nnn/GSM5051151/suppl/GSM5051151_HG02878_3_Red.idat.gz +GSM5051152 HG02879 1 https://ftp.ncbi.nlm.nih.gov/geo/samples/GSM5051nnn/GSM5051152/suppl/GSM5051152_HG02879_1_Grn.idat.gz https://ftp.ncbi.nlm.nih.gov/geo/samples/GSM5051nnn/GSM5051152/suppl/GSM5051152_HG02879_1_Red.idat.gz +GSM5051153 HG02879 2 https://ftp.ncbi.nlm.nih.gov/geo/samples/GSM5051nnn/GSM5051153/suppl/GSM5051153_HG02879_2_Grn.idat.gz https://ftp.ncbi.nlm.nih.gov/geo/samples/GSM5051nnn/GSM5051153/suppl/GSM5051153_HG02879_2_Red.idat.gz +GSM5051154 HG02879 3 https://ftp.ncbi.nlm.nih.gov/geo/samples/GSM5051nnn/GSM5051154/suppl/GSM5051154_HG02879_3_Grn.idat.gz https://ftp.ncbi.nlm.nih.gov/geo/samples/GSM5051nnn/GSM5051154/suppl/GSM5051154_HG02879_3_Red.idat.gz +GSM5051155 HG02881 1 https://ftp.ncbi.nlm.nih.gov/geo/samples/GSM5051nnn/GSM5051155/suppl/GSM5051155_HG02881_1_Grn.idat.gz https://ftp.ncbi.nlm.nih.gov/geo/samples/GSM5051nnn/GSM5051155/suppl/GSM5051155_HG02881_1_Red.idat.gz +GSM5051156 HG02881 2 https://ftp.ncbi.nlm.nih.gov/geo/samples/GSM5051nnn/GSM5051156/suppl/GSM5051156_HG02881_2_Grn.idat.gz https://ftp.ncbi.nlm.nih.gov/geo/samples/GSM5051nnn/GSM5051156/suppl/GSM5051156_HG02881_2_Red.idat.gz +GSM5051157 HG02881 3 https://ftp.ncbi.nlm.nih.gov/geo/samples/GSM5051nnn/GSM5051157/suppl/GSM5051157_HG02881_3_Grn.idat.gz https://ftp.ncbi.nlm.nih.gov/geo/samples/GSM5051nnn/GSM5051157/suppl/GSM5051157_HG02881_3_Red.idat.gz +GSM5051158 HG02882 1 https://ftp.ncbi.nlm.nih.gov/geo/samples/GSM5051nnn/GSM5051158/suppl/GSM5051158_HG02882_1_Grn.idat.gz https://ftp.ncbi.nlm.nih.gov/geo/samples/GSM5051nnn/GSM5051158/suppl/GSM5051158_HG02882_1_Red.idat.gz +GSM5051159 HG02882 2 https://ftp.ncbi.nlm.nih.gov/geo/samples/GSM5051nnn/GSM5051159/suppl/GSM5051159_HG02882_2_Grn.idat.gz https://ftp.ncbi.nlm.nih.gov/geo/samples/GSM5051nnn/GSM5051159/suppl/GSM5051159_HG02882_2_Red.idat.gz +GSM5051160 HG02882 3 https://ftp.ncbi.nlm.nih.gov/geo/samples/GSM5051nnn/GSM5051160/suppl/GSM5051160_HG02882_3_Grn.idat.gz https://ftp.ncbi.nlm.nih.gov/geo/samples/GSM5051nnn/GSM5051160/suppl/GSM5051160_HG02882_3_Red.idat.gz +GSM5051161 HG02922 1 https://ftp.ncbi.nlm.nih.gov/geo/samples/GSM5051nnn/GSM5051161/suppl/GSM5051161_HG02922_1_Grn.idat.gz https://ftp.ncbi.nlm.nih.gov/geo/samples/GSM5051nnn/GSM5051161/suppl/GSM5051161_HG02922_1_Red.idat.gz +GSM5051162 HG02922 2 https://ftp.ncbi.nlm.nih.gov/geo/samples/GSM5051nnn/GSM5051162/suppl/GSM5051162_HG02922_2_Grn.idat.gz https://ftp.ncbi.nlm.nih.gov/geo/samples/GSM5051nnn/GSM5051162/suppl/GSM5051162_HG02922_2_Red.idat.gz +GSM5051163 HG02922 3 https://ftp.ncbi.nlm.nih.gov/geo/samples/GSM5051nnn/GSM5051163/suppl/GSM5051163_HG02922_3_Grn.idat.gz https://ftp.ncbi.nlm.nih.gov/geo/samples/GSM5051nnn/GSM5051163/suppl/GSM5051163_HG02922_3_Red.idat.gz +GSM5051164 HG02938 1 https://ftp.ncbi.nlm.nih.gov/geo/samples/GSM5051nnn/GSM5051164/suppl/GSM5051164_HG02938_1_Grn.idat.gz https://ftp.ncbi.nlm.nih.gov/geo/samples/GSM5051nnn/GSM5051164/suppl/GSM5051164_HG02938_1_Red.idat.gz +GSM5051165 HG02938 2 https://ftp.ncbi.nlm.nih.gov/geo/samples/GSM5051nnn/GSM5051165/suppl/GSM5051165_HG02938_2_Grn.idat.gz https://ftp.ncbi.nlm.nih.gov/geo/samples/GSM5051nnn/GSM5051165/suppl/GSM5051165_HG02938_2_Red.idat.gz +GSM5051166 HG02938 3 https://ftp.ncbi.nlm.nih.gov/geo/samples/GSM5051nnn/GSM5051166/suppl/GSM5051166_HG02938_3_Grn.idat.gz https://ftp.ncbi.nlm.nih.gov/geo/samples/GSM5051nnn/GSM5051166/suppl/GSM5051166_HG02938_3_Red.idat.gz +GSM5051167 HG02941 1 https://ftp.ncbi.nlm.nih.gov/geo/samples/GSM5051nnn/GSM5051167/suppl/GSM5051167_HG02941_1_Grn.idat.gz https://ftp.ncbi.nlm.nih.gov/geo/samples/GSM5051nnn/GSM5051167/suppl/GSM5051167_HG02941_1_Red.idat.gz +GSM5051168 HG02941 2 https://ftp.ncbi.nlm.nih.gov/geo/samples/GSM5051nnn/GSM5051168/suppl/GSM5051168_HG02941_2_Grn.idat.gz https://ftp.ncbi.nlm.nih.gov/geo/samples/GSM5051nnn/GSM5051168/suppl/GSM5051168_HG02941_2_Red.idat.gz +GSM5051169 HG02941 3 https://ftp.ncbi.nlm.nih.gov/geo/samples/GSM5051nnn/GSM5051169/suppl/GSM5051169_HG02941_3_Grn.idat.gz https://ftp.ncbi.nlm.nih.gov/geo/samples/GSM5051nnn/GSM5051169/suppl/GSM5051169_HG02941_3_Red.idat.gz +GSM5051170 HG02982 1 https://ftp.ncbi.nlm.nih.gov/geo/samples/GSM5051nnn/GSM5051170/suppl/GSM5051170_HG02982_1_Grn.idat.gz https://ftp.ncbi.nlm.nih.gov/geo/samples/GSM5051nnn/GSM5051170/suppl/GSM5051170_HG02982_1_Red.idat.gz +GSM5051171 HG02982 2 https://ftp.ncbi.nlm.nih.gov/geo/samples/GSM5051nnn/GSM5051171/suppl/GSM5051171_HG02982_2_Grn.idat.gz https://ftp.ncbi.nlm.nih.gov/geo/samples/GSM5051nnn/GSM5051171/suppl/GSM5051171_HG02982_2_Red.idat.gz +GSM5051172 HG02982 3 https://ftp.ncbi.nlm.nih.gov/geo/samples/GSM5051nnn/GSM5051172/suppl/GSM5051172_HG02982_3_Grn.idat.gz https://ftp.ncbi.nlm.nih.gov/geo/samples/GSM5051nnn/GSM5051172/suppl/GSM5051172_HG02982_3_Red.idat.gz +GSM5051173 HG03052 1 https://ftp.ncbi.nlm.nih.gov/geo/samples/GSM5051nnn/GSM5051173/suppl/GSM5051173_HG03052_1_Grn.idat.gz https://ftp.ncbi.nlm.nih.gov/geo/samples/GSM5051nnn/GSM5051173/suppl/GSM5051173_HG03052_1_Red.idat.gz +GSM5051174 HG03052 2 https://ftp.ncbi.nlm.nih.gov/geo/samples/GSM5051nnn/GSM5051174/suppl/GSM5051174_HG03052_2_Grn.idat.gz https://ftp.ncbi.nlm.nih.gov/geo/samples/GSM5051nnn/GSM5051174/suppl/GSM5051174_HG03052_2_Red.idat.gz +GSM5051175 HG03052 3 https://ftp.ncbi.nlm.nih.gov/geo/samples/GSM5051nnn/GSM5051175/suppl/GSM5051175_HG03052_3_Grn.idat.gz https://ftp.ncbi.nlm.nih.gov/geo/samples/GSM5051nnn/GSM5051175/suppl/GSM5051175_HG03052_3_Red.idat.gz +GSM5051176 HG03054 1 https://ftp.ncbi.nlm.nih.gov/geo/samples/GSM5051nnn/GSM5051176/suppl/GSM5051176_HG03054_1_Grn.idat.gz https://ftp.ncbi.nlm.nih.gov/geo/samples/GSM5051nnn/GSM5051176/suppl/GSM5051176_HG03054_1_Red.idat.gz +GSM5051177 HG03054 2 https://ftp.ncbi.nlm.nih.gov/geo/samples/GSM5051nnn/GSM5051177/suppl/GSM5051177_HG03054_2_Grn.idat.gz https://ftp.ncbi.nlm.nih.gov/geo/samples/GSM5051nnn/GSM5051177/suppl/GSM5051177_HG03054_2_Red.idat.gz +GSM5051178 HG03054 3 https://ftp.ncbi.nlm.nih.gov/geo/samples/GSM5051nnn/GSM5051178/suppl/GSM5051178_HG03054_3_Grn.idat.gz https://ftp.ncbi.nlm.nih.gov/geo/samples/GSM5051nnn/GSM5051178/suppl/GSM5051178_HG03054_3_Red.idat.gz +GSM5051179 HG03060 1 https://ftp.ncbi.nlm.nih.gov/geo/samples/GSM5051nnn/GSM5051179/suppl/GSM5051179_HG03060_1_Grn.idat.gz https://ftp.ncbi.nlm.nih.gov/geo/samples/GSM5051nnn/GSM5051179/suppl/GSM5051179_HG03060_1_Red.idat.gz +GSM5051180 HG03060 2 https://ftp.ncbi.nlm.nih.gov/geo/samples/GSM5051nnn/GSM5051180/suppl/GSM5051180_HG03060_2_Grn.idat.gz https://ftp.ncbi.nlm.nih.gov/geo/samples/GSM5051nnn/GSM5051180/suppl/GSM5051180_HG03060_2_Red.idat.gz +GSM5051181 HG03060 3 https://ftp.ncbi.nlm.nih.gov/geo/samples/GSM5051nnn/GSM5051181/suppl/GSM5051181_HG03060_3_Grn.idat.gz https://ftp.ncbi.nlm.nih.gov/geo/samples/GSM5051nnn/GSM5051181/suppl/GSM5051181_HG03060_3_Red.idat.gz +GSM5051182 HG03063 1 https://ftp.ncbi.nlm.nih.gov/geo/samples/GSM5051nnn/GSM5051182/suppl/GSM5051182_HG03063_1_Grn.idat.gz https://ftp.ncbi.nlm.nih.gov/geo/samples/GSM5051nnn/GSM5051182/suppl/GSM5051182_HG03063_1_Red.idat.gz +GSM5051183 HG03063 2 https://ftp.ncbi.nlm.nih.gov/geo/samples/GSM5051nnn/GSM5051183/suppl/GSM5051183_HG03063_2_Grn.idat.gz https://ftp.ncbi.nlm.nih.gov/geo/samples/GSM5051nnn/GSM5051183/suppl/GSM5051183_HG03063_2_Red.idat.gz +GSM5051184 HG03063 3 https://ftp.ncbi.nlm.nih.gov/geo/samples/GSM5051nnn/GSM5051184/suppl/GSM5051184_HG03063_3_Grn.idat.gz https://ftp.ncbi.nlm.nih.gov/geo/samples/GSM5051nnn/GSM5051184/suppl/GSM5051184_HG03063_3_Red.idat.gz +GSM5051185 HG03077 1 https://ftp.ncbi.nlm.nih.gov/geo/samples/GSM5051nnn/GSM5051185/suppl/GSM5051185_HG03077_1_Grn.idat.gz https://ftp.ncbi.nlm.nih.gov/geo/samples/GSM5051nnn/GSM5051185/suppl/GSM5051185_HG03077_1_Red.idat.gz +GSM5051186 HG03077 2 https://ftp.ncbi.nlm.nih.gov/geo/samples/GSM5051nnn/GSM5051186/suppl/GSM5051186_HG03077_2_Grn.idat.gz https://ftp.ncbi.nlm.nih.gov/geo/samples/GSM5051nnn/GSM5051186/suppl/GSM5051186_HG03077_2_Red.idat.gz +GSM5051187 HG03077 3 https://ftp.ncbi.nlm.nih.gov/geo/samples/GSM5051nnn/GSM5051187/suppl/GSM5051187_HG03077_3_Grn.idat.gz https://ftp.ncbi.nlm.nih.gov/geo/samples/GSM5051nnn/GSM5051187/suppl/GSM5051187_HG03077_3_Red.idat.gz +GSM5051188 HG03082 1 https://ftp.ncbi.nlm.nih.gov/geo/samples/GSM5051nnn/GSM5051188/suppl/GSM5051188_HG03082_1_Grn.idat.gz https://ftp.ncbi.nlm.nih.gov/geo/samples/GSM5051nnn/GSM5051188/suppl/GSM5051188_HG03082_1_Red.idat.gz +GSM5051189 HG03082 2 https://ftp.ncbi.nlm.nih.gov/geo/samples/GSM5051nnn/GSM5051189/suppl/GSM5051189_HG03082_2_Grn.idat.gz https://ftp.ncbi.nlm.nih.gov/geo/samples/GSM5051nnn/GSM5051189/suppl/GSM5051189_HG03082_2_Red.idat.gz +GSM5051190 HG03082 3 https://ftp.ncbi.nlm.nih.gov/geo/samples/GSM5051nnn/GSM5051190/suppl/GSM5051190_HG03082_3_Grn.idat.gz https://ftp.ncbi.nlm.nih.gov/geo/samples/GSM5051nnn/GSM5051190/suppl/GSM5051190_HG03082_3_Red.idat.gz +GSM5051191 HG03095 1 https://ftp.ncbi.nlm.nih.gov/geo/samples/GSM5051nnn/GSM5051191/suppl/GSM5051191_HG03095_1_Grn.idat.gz https://ftp.ncbi.nlm.nih.gov/geo/samples/GSM5051nnn/GSM5051191/suppl/GSM5051191_HG03095_1_Red.idat.gz +GSM5051192 HG03095 2 https://ftp.ncbi.nlm.nih.gov/geo/samples/GSM5051nnn/GSM5051192/suppl/GSM5051192_HG03095_2_Grn.idat.gz https://ftp.ncbi.nlm.nih.gov/geo/samples/GSM5051nnn/GSM5051192/suppl/GSM5051192_HG03095_2_Red.idat.gz +GSM5051193 HG03095 3 https://ftp.ncbi.nlm.nih.gov/geo/samples/GSM5051nnn/GSM5051193/suppl/GSM5051193_HG03095_3_Grn.idat.gz https://ftp.ncbi.nlm.nih.gov/geo/samples/GSM5051nnn/GSM5051193/suppl/GSM5051193_HG03095_3_Red.idat.gz +GSM5051194 HG03127 1 https://ftp.ncbi.nlm.nih.gov/geo/samples/GSM5051nnn/GSM5051194/suppl/GSM5051194_HG03127_1_Grn.idat.gz https://ftp.ncbi.nlm.nih.gov/geo/samples/GSM5051nnn/GSM5051194/suppl/GSM5051194_HG03127_1_Red.idat.gz +GSM5051195 HG03127 2 https://ftp.ncbi.nlm.nih.gov/geo/samples/GSM5051nnn/GSM5051195/suppl/GSM5051195_HG03127_2_Grn.idat.gz https://ftp.ncbi.nlm.nih.gov/geo/samples/GSM5051nnn/GSM5051195/suppl/GSM5051195_HG03127_2_Red.idat.gz +GSM5051196 HG03127 3 https://ftp.ncbi.nlm.nih.gov/geo/samples/GSM5051nnn/GSM5051196/suppl/GSM5051196_HG03127_3_Grn.idat.gz https://ftp.ncbi.nlm.nih.gov/geo/samples/GSM5051nnn/GSM5051196/suppl/GSM5051196_HG03127_3_Red.idat.gz +GSM5051197 HG03202 1 https://ftp.ncbi.nlm.nih.gov/geo/samples/GSM5051nnn/GSM5051197/suppl/GSM5051197_HG03202_1_Grn.idat.gz https://ftp.ncbi.nlm.nih.gov/geo/samples/GSM5051nnn/GSM5051197/suppl/GSM5051197_HG03202_1_Red.idat.gz +GSM5051198 HG03202 2 https://ftp.ncbi.nlm.nih.gov/geo/samples/GSM5051nnn/GSM5051198/suppl/GSM5051198_HG03202_2_Grn.idat.gz https://ftp.ncbi.nlm.nih.gov/geo/samples/GSM5051nnn/GSM5051198/suppl/GSM5051198_HG03202_2_Red.idat.gz +GSM5051199 HG03202 3 https://ftp.ncbi.nlm.nih.gov/geo/samples/GSM5051nnn/GSM5051199/suppl/GSM5051199_HG03202_3_Grn.idat.gz https://ftp.ncbi.nlm.nih.gov/geo/samples/GSM5051nnn/GSM5051199/suppl/GSM5051199_HG03202_3_Red.idat.gz +GSM5051200 HG03298 1 https://ftp.ncbi.nlm.nih.gov/geo/samples/GSM5051nnn/GSM5051200/suppl/GSM5051200_HG03298_1_Grn.idat.gz https://ftp.ncbi.nlm.nih.gov/geo/samples/GSM5051nnn/GSM5051200/suppl/GSM5051200_HG03298_1_Red.idat.gz +GSM5051201 HG03298 2 https://ftp.ncbi.nlm.nih.gov/geo/samples/GSM5051nnn/GSM5051201/suppl/GSM5051201_HG03298_2_Grn.idat.gz https://ftp.ncbi.nlm.nih.gov/geo/samples/GSM5051nnn/GSM5051201/suppl/GSM5051201_HG03298_2_Red.idat.gz +GSM5051202 HG03298 3 https://ftp.ncbi.nlm.nih.gov/geo/samples/GSM5051nnn/GSM5051202/suppl/GSM5051202_HG03298_3_Grn.idat.gz https://ftp.ncbi.nlm.nih.gov/geo/samples/GSM5051nnn/GSM5051202/suppl/GSM5051202_HG03298_3_Red.idat.gz +GSM5051203 HG03382 1 https://ftp.ncbi.nlm.nih.gov/geo/samples/GSM5051nnn/GSM5051203/suppl/GSM5051203_HG03382_1_Grn.idat.gz https://ftp.ncbi.nlm.nih.gov/geo/samples/GSM5051nnn/GSM5051203/suppl/GSM5051203_HG03382_1_Red.idat.gz +GSM5051204 HG03382 2 https://ftp.ncbi.nlm.nih.gov/geo/samples/GSM5051nnn/GSM5051204/suppl/GSM5051204_HG03382_2_Grn.idat.gz https://ftp.ncbi.nlm.nih.gov/geo/samples/GSM5051nnn/GSM5051204/suppl/GSM5051204_HG03382_2_Red.idat.gz +GSM5051205 HG03382 3 https://ftp.ncbi.nlm.nih.gov/geo/samples/GSM5051nnn/GSM5051205/suppl/GSM5051205_HG03382_3_Grn.idat.gz https://ftp.ncbi.nlm.nih.gov/geo/samples/GSM5051nnn/GSM5051205/suppl/GSM5051205_HG03382_3_Red.idat.gz +GSM5051206 HG03520 1 https://ftp.ncbi.nlm.nih.gov/geo/samples/GSM5051nnn/GSM5051206/suppl/GSM5051206_HG03520_1_Grn.idat.gz https://ftp.ncbi.nlm.nih.gov/geo/samples/GSM5051nnn/GSM5051206/suppl/GSM5051206_HG03520_1_Red.idat.gz +GSM5051207 HG03520 2 https://ftp.ncbi.nlm.nih.gov/geo/samples/GSM5051nnn/GSM5051207/suppl/GSM5051207_HG03520_2_Grn.idat.gz https://ftp.ncbi.nlm.nih.gov/geo/samples/GSM5051nnn/GSM5051207/suppl/GSM5051207_HG03520_2_Red.idat.gz +GSM5051208 HG03520 3 https://ftp.ncbi.nlm.nih.gov/geo/samples/GSM5051nnn/GSM5051208/suppl/GSM5051208_HG03520_3_Grn.idat.gz https://ftp.ncbi.nlm.nih.gov/geo/samples/GSM5051nnn/GSM5051208/suppl/GSM5051208_HG03520_3_Red.idat.gz +GSM5051209 HG03521 1 https://ftp.ncbi.nlm.nih.gov/geo/samples/GSM5051nnn/GSM5051209/suppl/GSM5051209_HG03521_1_Grn.idat.gz https://ftp.ncbi.nlm.nih.gov/geo/samples/GSM5051nnn/GSM5051209/suppl/GSM5051209_HG03521_1_Red.idat.gz +GSM5051210 HG03521 2 https://ftp.ncbi.nlm.nih.gov/geo/samples/GSM5051nnn/GSM5051210/suppl/GSM5051210_HG03521_2_Grn.idat.gz https://ftp.ncbi.nlm.nih.gov/geo/samples/GSM5051nnn/GSM5051210/suppl/GSM5051210_HG03521_2_Red.idat.gz +GSM5051211 HG03521 3 https://ftp.ncbi.nlm.nih.gov/geo/samples/GSM5051nnn/GSM5051211/suppl/GSM5051211_HG03521_3_Grn.idat.gz https://ftp.ncbi.nlm.nih.gov/geo/samples/GSM5051nnn/GSM5051211/suppl/GSM5051211_HG03521_3_Red.idat.gz +GSM5051212 NA06985 1 https://ftp.ncbi.nlm.nih.gov/geo/samples/GSM5051nnn/GSM5051212/suppl/GSM5051212_NA06985_1_Grn.idat.gz https://ftp.ncbi.nlm.nih.gov/geo/samples/GSM5051nnn/GSM5051212/suppl/GSM5051212_NA06985_1_Red.idat.gz +GSM5051213 NA06985 2 https://ftp.ncbi.nlm.nih.gov/geo/samples/GSM5051nnn/GSM5051213/suppl/GSM5051213_NA06985_2_Grn.idat.gz https://ftp.ncbi.nlm.nih.gov/geo/samples/GSM5051nnn/GSM5051213/suppl/GSM5051213_NA06985_2_Red.idat.gz +GSM5051214 NA06985 3 https://ftp.ncbi.nlm.nih.gov/geo/samples/GSM5051nnn/GSM5051214/suppl/GSM5051214_NA06985_3_Grn.idat.gz https://ftp.ncbi.nlm.nih.gov/geo/samples/GSM5051nnn/GSM5051214/suppl/GSM5051214_NA06985_3_Red.idat.gz +GSM5051215 NA11930 1 https://ftp.ncbi.nlm.nih.gov/geo/samples/GSM5051nnn/GSM5051215/suppl/GSM5051215_NA11930_1_Grn.idat.gz https://ftp.ncbi.nlm.nih.gov/geo/samples/GSM5051nnn/GSM5051215/suppl/GSM5051215_NA11930_1_Red.idat.gz +GSM5051216 NA11930 2 https://ftp.ncbi.nlm.nih.gov/geo/samples/GSM5051nnn/GSM5051216/suppl/GSM5051216_NA11930_2_Grn.idat.gz https://ftp.ncbi.nlm.nih.gov/geo/samples/GSM5051nnn/GSM5051216/suppl/GSM5051216_NA11930_2_Red.idat.gz +GSM5051217 NA11930 3 https://ftp.ncbi.nlm.nih.gov/geo/samples/GSM5051nnn/GSM5051217/suppl/GSM5051217_NA11930_3_Grn.idat.gz https://ftp.ncbi.nlm.nih.gov/geo/samples/GSM5051nnn/GSM5051217/suppl/GSM5051217_NA11930_3_Red.idat.gz +GSM5051218 NA12342 1 https://ftp.ncbi.nlm.nih.gov/geo/samples/GSM5051nnn/GSM5051218/suppl/GSM5051218_NA12342_1_Grn.idat.gz https://ftp.ncbi.nlm.nih.gov/geo/samples/GSM5051nnn/GSM5051218/suppl/GSM5051218_NA12342_1_Red.idat.gz +GSM5051219 NA12342 2 https://ftp.ncbi.nlm.nih.gov/geo/samples/GSM5051nnn/GSM5051219/suppl/GSM5051219_NA12342_2_Grn.idat.gz https://ftp.ncbi.nlm.nih.gov/geo/samples/GSM5051nnn/GSM5051219/suppl/GSM5051219_NA12342_2_Red.idat.gz +GSM5051220 NA12342 3 https://ftp.ncbi.nlm.nih.gov/geo/samples/GSM5051nnn/GSM5051220/suppl/GSM5051220_NA12342_3_Grn.idat.gz https://ftp.ncbi.nlm.nih.gov/geo/samples/GSM5051nnn/GSM5051220/suppl/GSM5051220_NA12342_3_Red.idat.gz +GSM5051221 NA12842 1 https://ftp.ncbi.nlm.nih.gov/geo/samples/GSM5051nnn/GSM5051221/suppl/GSM5051221_NA12842_1_Grn.idat.gz https://ftp.ncbi.nlm.nih.gov/geo/samples/GSM5051nnn/GSM5051221/suppl/GSM5051221_NA12842_1_Red.idat.gz +GSM5051222 NA12842 2 https://ftp.ncbi.nlm.nih.gov/geo/samples/GSM5051nnn/GSM5051222/suppl/GSM5051222_NA12842_2_Grn.idat.gz https://ftp.ncbi.nlm.nih.gov/geo/samples/GSM5051nnn/GSM5051222/suppl/GSM5051222_NA12842_2_Red.idat.gz +GSM5051223 NA12842 3 https://ftp.ncbi.nlm.nih.gov/geo/samples/GSM5051nnn/GSM5051223/suppl/GSM5051223_NA12842_3_Grn.idat.gz https://ftp.ncbi.nlm.nih.gov/geo/samples/GSM5051nnn/GSM5051223/suppl/GSM5051223_NA12842_3_Red.idat.gz +GSM5051224 NA12843 1 https://ftp.ncbi.nlm.nih.gov/geo/samples/GSM5051nnn/GSM5051224/suppl/GSM5051224_NA12843_1_Grn.idat.gz https://ftp.ncbi.nlm.nih.gov/geo/samples/GSM5051nnn/GSM5051224/suppl/GSM5051224_NA12843_1_Red.idat.gz +GSM5051225 NA12843 2 https://ftp.ncbi.nlm.nih.gov/geo/samples/GSM5051nnn/GSM5051225/suppl/GSM5051225_NA12843_2_Grn.idat.gz https://ftp.ncbi.nlm.nih.gov/geo/samples/GSM5051nnn/GSM5051225/suppl/GSM5051225_NA12843_2_Red.idat.gz +GSM5051226 NA12843 3 https://ftp.ncbi.nlm.nih.gov/geo/samples/GSM5051nnn/GSM5051226/suppl/GSM5051226_NA12843_3_Grn.idat.gz https://ftp.ncbi.nlm.nih.gov/geo/samples/GSM5051nnn/GSM5051226/suppl/GSM5051226_NA12843_3_Red.idat.gz +GSM5051227 NA12878 1 https://ftp.ncbi.nlm.nih.gov/geo/samples/GSM5051nnn/GSM5051227/suppl/GSM5051227_NA12878_1_Grn.idat.gz https://ftp.ncbi.nlm.nih.gov/geo/samples/GSM5051nnn/GSM5051227/suppl/GSM5051227_NA12878_1_Red.idat.gz +GSM5051228 NA12878 2 https://ftp.ncbi.nlm.nih.gov/geo/samples/GSM5051nnn/GSM5051228/suppl/GSM5051228_NA12878_2_Grn.idat.gz https://ftp.ncbi.nlm.nih.gov/geo/samples/GSM5051nnn/GSM5051228/suppl/GSM5051228_NA12878_2_Red.idat.gz +GSM5051229 NA12878 3 https://ftp.ncbi.nlm.nih.gov/geo/samples/GSM5051nnn/GSM5051229/suppl/GSM5051229_NA12878_3_Grn.idat.gz https://ftp.ncbi.nlm.nih.gov/geo/samples/GSM5051nnn/GSM5051229/suppl/GSM5051229_NA12878_3_Red.idat.gz +GSM5051230 NA18504 1 https://ftp.ncbi.nlm.nih.gov/geo/samples/GSM5051nnn/GSM5051230/suppl/GSM5051230_NA18504_1_Grn.idat.gz https://ftp.ncbi.nlm.nih.gov/geo/samples/GSM5051nnn/GSM5051230/suppl/GSM5051230_NA18504_1_Red.idat.gz +GSM5051231 NA18504 2 https://ftp.ncbi.nlm.nih.gov/geo/samples/GSM5051nnn/GSM5051231/suppl/GSM5051231_NA18504_2_Grn.idat.gz https://ftp.ncbi.nlm.nih.gov/geo/samples/GSM5051nnn/GSM5051231/suppl/GSM5051231_NA18504_2_Red.idat.gz +GSM5051232 NA18504 3 https://ftp.ncbi.nlm.nih.gov/geo/samples/GSM5051nnn/GSM5051232/suppl/GSM5051232_NA18504_3_Grn.idat.gz https://ftp.ncbi.nlm.nih.gov/geo/samples/GSM5051nnn/GSM5051232/suppl/GSM5051232_NA18504_3_Red.idat.gz +GSM5051233 NA18912 1 https://ftp.ncbi.nlm.nih.gov/geo/samples/GSM5051nnn/GSM5051233/suppl/GSM5051233_NA18912_1_Grn.idat.gz https://ftp.ncbi.nlm.nih.gov/geo/samples/GSM5051nnn/GSM5051233/suppl/GSM5051233_NA18912_1_Red.idat.gz +GSM5051234 NA18912 2 https://ftp.ncbi.nlm.nih.gov/geo/samples/GSM5051nnn/GSM5051234/suppl/GSM5051234_NA18912_2_Grn.idat.gz https://ftp.ncbi.nlm.nih.gov/geo/samples/GSM5051nnn/GSM5051234/suppl/GSM5051234_NA18912_2_Red.idat.gz +GSM5051235 NA18912 3 https://ftp.ncbi.nlm.nih.gov/geo/samples/GSM5051nnn/GSM5051235/suppl/GSM5051235_NA18912_3_Grn.idat.gz https://ftp.ncbi.nlm.nih.gov/geo/samples/GSM5051nnn/GSM5051235/suppl/GSM5051235_NA18912_3_Red.idat.gz +GSM5051236 NA19017 1 https://ftp.ncbi.nlm.nih.gov/geo/samples/GSM5051nnn/GSM5051236/suppl/GSM5051236_NA19017_1_Grn.idat.gz https://ftp.ncbi.nlm.nih.gov/geo/samples/GSM5051nnn/GSM5051236/suppl/GSM5051236_NA19017_1_Red.idat.gz +GSM5051237 NA19017 2 https://ftp.ncbi.nlm.nih.gov/geo/samples/GSM5051nnn/GSM5051237/suppl/GSM5051237_NA19017_2_Grn.idat.gz https://ftp.ncbi.nlm.nih.gov/geo/samples/GSM5051nnn/GSM5051237/suppl/GSM5051237_NA19017_2_Red.idat.gz +GSM5051238 NA19017 3 https://ftp.ncbi.nlm.nih.gov/geo/samples/GSM5051nnn/GSM5051238/suppl/GSM5051238_NA19017_3_Grn.idat.gz https://ftp.ncbi.nlm.nih.gov/geo/samples/GSM5051nnn/GSM5051238/suppl/GSM5051238_NA19017_3_Red.idat.gz +GSM5051239 NA19041 1 https://ftp.ncbi.nlm.nih.gov/geo/samples/GSM5051nnn/GSM5051239/suppl/GSM5051239_NA19041_1_Grn.idat.gz https://ftp.ncbi.nlm.nih.gov/geo/samples/GSM5051nnn/GSM5051239/suppl/GSM5051239_NA19041_1_Red.idat.gz +GSM5051240 NA19041 2 https://ftp.ncbi.nlm.nih.gov/geo/samples/GSM5051nnn/GSM5051240/suppl/GSM5051240_NA19041_2_Grn.idat.gz https://ftp.ncbi.nlm.nih.gov/geo/samples/GSM5051nnn/GSM5051240/suppl/GSM5051240_NA19041_2_Red.idat.gz +GSM5051241 NA19041 3 https://ftp.ncbi.nlm.nih.gov/geo/samples/GSM5051nnn/GSM5051241/suppl/GSM5051241_NA19041_3_Grn.idat.gz https://ftp.ncbi.nlm.nih.gov/geo/samples/GSM5051nnn/GSM5051241/suppl/GSM5051241_NA19041_3_Red.idat.gz +GSM5051242 NA19119 1 https://ftp.ncbi.nlm.nih.gov/geo/samples/GSM5051nnn/GSM5051242/suppl/GSM5051242_NA19119_1_Grn.idat.gz https://ftp.ncbi.nlm.nih.gov/geo/samples/GSM5051nnn/GSM5051242/suppl/GSM5051242_NA19119_1_Red.idat.gz +GSM5051243 NA19119 2 https://ftp.ncbi.nlm.nih.gov/geo/samples/GSM5051nnn/GSM5051243/suppl/GSM5051243_NA19119_2_Grn.idat.gz https://ftp.ncbi.nlm.nih.gov/geo/samples/GSM5051nnn/GSM5051243/suppl/GSM5051243_NA19119_2_Red.idat.gz +GSM5051244 NA19119 3 https://ftp.ncbi.nlm.nih.gov/geo/samples/GSM5051nnn/GSM5051244/suppl/GSM5051244_NA19119_3_Grn.idat.gz https://ftp.ncbi.nlm.nih.gov/geo/samples/GSM5051nnn/GSM5051244/suppl/GSM5051244_NA19119_3_Red.idat.gz +GSM5051245 NA19131 1 https://ftp.ncbi.nlm.nih.gov/geo/samples/GSM5051nnn/GSM5051245/suppl/GSM5051245_NA19131_1_Grn.idat.gz https://ftp.ncbi.nlm.nih.gov/geo/samples/GSM5051nnn/GSM5051245/suppl/GSM5051245_NA19131_1_Red.idat.gz +GSM5051246 NA19131 2 https://ftp.ncbi.nlm.nih.gov/geo/samples/GSM5051nnn/GSM5051246/suppl/GSM5051246_NA19131_2_Grn.idat.gz https://ftp.ncbi.nlm.nih.gov/geo/samples/GSM5051nnn/GSM5051246/suppl/GSM5051246_NA19131_2_Red.idat.gz +GSM5051247 NA19131 3 https://ftp.ncbi.nlm.nih.gov/geo/samples/GSM5051nnn/GSM5051247/suppl/GSM5051247_NA19131_3_Grn.idat.gz https://ftp.ncbi.nlm.nih.gov/geo/samples/GSM5051nnn/GSM5051247/suppl/GSM5051247_NA19131_3_Red.idat.gz +GSM5051248 NA19152 1 https://ftp.ncbi.nlm.nih.gov/geo/samples/GSM5051nnn/GSM5051248/suppl/GSM5051248_NA19152_1_Grn.idat.gz https://ftp.ncbi.nlm.nih.gov/geo/samples/GSM5051nnn/GSM5051248/suppl/GSM5051248_NA19152_1_Red.idat.gz +GSM5051249 NA19152 2 https://ftp.ncbi.nlm.nih.gov/geo/samples/GSM5051nnn/GSM5051249/suppl/GSM5051249_NA19152_2_Grn.idat.gz https://ftp.ncbi.nlm.nih.gov/geo/samples/GSM5051nnn/GSM5051249/suppl/GSM5051249_NA19152_2_Red.idat.gz +GSM5051250 NA19152 3 https://ftp.ncbi.nlm.nih.gov/geo/samples/GSM5051nnn/GSM5051250/suppl/GSM5051250_NA19152_3_Grn.idat.gz https://ftp.ncbi.nlm.nih.gov/geo/samples/GSM5051nnn/GSM5051250/suppl/GSM5051250_NA19152_3_Red.idat.gz +GSM5051251 NA19204 1 https://ftp.ncbi.nlm.nih.gov/geo/samples/GSM5051nnn/GSM5051251/suppl/GSM5051251_NA19204_1_Grn.idat.gz https://ftp.ncbi.nlm.nih.gov/geo/samples/GSM5051nnn/GSM5051251/suppl/GSM5051251_NA19204_1_Red.idat.gz +GSM5051252 NA19204 2 https://ftp.ncbi.nlm.nih.gov/geo/samples/GSM5051nnn/GSM5051252/suppl/GSM5051252_NA19204_2_Grn.idat.gz https://ftp.ncbi.nlm.nih.gov/geo/samples/GSM5051nnn/GSM5051252/suppl/GSM5051252_NA19204_2_Red.idat.gz +GSM5051253 NA19204 3 https://ftp.ncbi.nlm.nih.gov/geo/samples/GSM5051nnn/GSM5051253/suppl/GSM5051253_NA19204_3_Grn.idat.gz https://ftp.ncbi.nlm.nih.gov/geo/samples/GSM5051nnn/GSM5051253/suppl/GSM5051253_NA19204_3_Red.idat.gz +GSM5051254 NA19238 1 https://ftp.ncbi.nlm.nih.gov/geo/samples/GSM5051nnn/GSM5051254/suppl/GSM5051254_NA19238_1_Grn.idat.gz https://ftp.ncbi.nlm.nih.gov/geo/samples/GSM5051nnn/GSM5051254/suppl/GSM5051254_NA19238_1_Red.idat.gz +GSM5051255 NA19238 2 https://ftp.ncbi.nlm.nih.gov/geo/samples/GSM5051nnn/GSM5051255/suppl/GSM5051255_NA19238_2_Grn.idat.gz https://ftp.ncbi.nlm.nih.gov/geo/samples/GSM5051nnn/GSM5051255/suppl/GSM5051255_NA19238_2_Red.idat.gz +GSM5051256 NA19238 3 https://ftp.ncbi.nlm.nih.gov/geo/samples/GSM5051nnn/GSM5051256/suppl/GSM5051256_NA19238_3_Grn.idat.gz https://ftp.ncbi.nlm.nih.gov/geo/samples/GSM5051nnn/GSM5051256/suppl/GSM5051256_NA19238_3_Red.idat.gz +GSM5051257 NA19239 1 https://ftp.ncbi.nlm.nih.gov/geo/samples/GSM5051nnn/GSM5051257/suppl/GSM5051257_NA19239_1_Grn.idat.gz https://ftp.ncbi.nlm.nih.gov/geo/samples/GSM5051nnn/GSM5051257/suppl/GSM5051257_NA19239_1_Red.idat.gz +GSM5051258 NA19239 2 https://ftp.ncbi.nlm.nih.gov/geo/samples/GSM5051nnn/GSM5051258/suppl/GSM5051258_NA19239_2_Grn.idat.gz https://ftp.ncbi.nlm.nih.gov/geo/samples/GSM5051nnn/GSM5051258/suppl/GSM5051258_NA19239_2_Red.idat.gz +GSM5051259 NA19239 3 https://ftp.ncbi.nlm.nih.gov/geo/samples/GSM5051nnn/GSM5051259/suppl/GSM5051259_NA19239_3_Grn.idat.gz https://ftp.ncbi.nlm.nih.gov/geo/samples/GSM5051nnn/GSM5051259/suppl/GSM5051259_NA19239_3_Red.idat.gz +GSM5051260 NA19307 1 https://ftp.ncbi.nlm.nih.gov/geo/samples/GSM5051nnn/GSM5051260/suppl/GSM5051260_NA19307_1_Grn.idat.gz https://ftp.ncbi.nlm.nih.gov/geo/samples/GSM5051nnn/GSM5051260/suppl/GSM5051260_NA19307_1_Red.idat.gz +GSM5051261 NA19307 2 https://ftp.ncbi.nlm.nih.gov/geo/samples/GSM5051nnn/GSM5051261/suppl/GSM5051261_NA19307_2_Grn.idat.gz https://ftp.ncbi.nlm.nih.gov/geo/samples/GSM5051nnn/GSM5051261/suppl/GSM5051261_NA19307_2_Red.idat.gz +GSM5051262 NA19307 3 https://ftp.ncbi.nlm.nih.gov/geo/samples/GSM5051nnn/GSM5051262/suppl/GSM5051262_NA19307_3_Grn.idat.gz https://ftp.ncbi.nlm.nih.gov/geo/samples/GSM5051nnn/GSM5051262/suppl/GSM5051262_NA19307_3_Red.idat.gz +GSM5051263 NA19308 1 https://ftp.ncbi.nlm.nih.gov/geo/samples/GSM5051nnn/GSM5051263/suppl/GSM5051263_NA19308_1_Grn.idat.gz https://ftp.ncbi.nlm.nih.gov/geo/samples/GSM5051nnn/GSM5051263/suppl/GSM5051263_NA19308_1_Red.idat.gz +GSM5051264 NA19308 2 https://ftp.ncbi.nlm.nih.gov/geo/samples/GSM5051nnn/GSM5051264/suppl/GSM5051264_NA19308_2_Grn.idat.gz https://ftp.ncbi.nlm.nih.gov/geo/samples/GSM5051nnn/GSM5051264/suppl/GSM5051264_NA19308_2_Red.idat.gz +GSM5051265 NA19308 3 https://ftp.ncbi.nlm.nih.gov/geo/samples/GSM5051nnn/GSM5051265/suppl/GSM5051265_NA19308_3_Grn.idat.gz https://ftp.ncbi.nlm.nih.gov/geo/samples/GSM5051nnn/GSM5051265/suppl/GSM5051265_NA19308_3_Red.idat.gz +GSM5051266 NA19310 1 https://ftp.ncbi.nlm.nih.gov/geo/samples/GSM5051nnn/GSM5051266/suppl/GSM5051266_NA19310_1_Grn.idat.gz https://ftp.ncbi.nlm.nih.gov/geo/samples/GSM5051nnn/GSM5051266/suppl/GSM5051266_NA19310_1_Red.idat.gz +GSM5051267 NA19310 2 https://ftp.ncbi.nlm.nih.gov/geo/samples/GSM5051nnn/GSM5051267/suppl/GSM5051267_NA19310_2_Grn.idat.gz https://ftp.ncbi.nlm.nih.gov/geo/samples/GSM5051nnn/GSM5051267/suppl/GSM5051267_NA19310_2_Red.idat.gz +GSM5051268 NA19310 3 https://ftp.ncbi.nlm.nih.gov/geo/samples/GSM5051nnn/GSM5051268/suppl/GSM5051268_NA19310_3_Grn.idat.gz https://ftp.ncbi.nlm.nih.gov/geo/samples/GSM5051nnn/GSM5051268/suppl/GSM5051268_NA19310_3_Red.idat.gz +GSM5051269 NA19350 1 https://ftp.ncbi.nlm.nih.gov/geo/samples/GSM5051nnn/GSM5051269/suppl/GSM5051269_NA19350_1_Grn.idat.gz https://ftp.ncbi.nlm.nih.gov/geo/samples/GSM5051nnn/GSM5051269/suppl/GSM5051269_NA19350_1_Red.idat.gz +GSM5051270 NA19350 2 https://ftp.ncbi.nlm.nih.gov/geo/samples/GSM5051nnn/GSM5051270/suppl/GSM5051270_NA19350_2_Grn.idat.gz https://ftp.ncbi.nlm.nih.gov/geo/samples/GSM5051nnn/GSM5051270/suppl/GSM5051270_NA19350_2_Red.idat.gz +GSM5051271 NA19350 3 https://ftp.ncbi.nlm.nih.gov/geo/samples/GSM5051nnn/GSM5051271/suppl/GSM5051271_NA19350_3_Grn.idat.gz https://ftp.ncbi.nlm.nih.gov/geo/samples/GSM5051nnn/GSM5051271/suppl/GSM5051271_NA19350_3_Red.idat.gz +GSM5051272 NA19351 1 https://ftp.ncbi.nlm.nih.gov/geo/samples/GSM5051nnn/GSM5051272/suppl/GSM5051272_NA19351_1_Grn.idat.gz https://ftp.ncbi.nlm.nih.gov/geo/samples/GSM5051nnn/GSM5051272/suppl/GSM5051272_NA19351_1_Red.idat.gz +GSM5051273 NA19351 2 https://ftp.ncbi.nlm.nih.gov/geo/samples/GSM5051nnn/GSM5051273/suppl/GSM5051273_NA19351_2_Grn.idat.gz https://ftp.ncbi.nlm.nih.gov/geo/samples/GSM5051nnn/GSM5051273/suppl/GSM5051273_NA19351_2_Red.idat.gz +GSM5051274 NA19351 3 https://ftp.ncbi.nlm.nih.gov/geo/samples/GSM5051nnn/GSM5051274/suppl/GSM5051274_NA19351_3_Grn.idat.gz https://ftp.ncbi.nlm.nih.gov/geo/samples/GSM5051nnn/GSM5051274/suppl/GSM5051274_NA19351_3_Red.idat.gz +GSM5051275 NA19471 1 https://ftp.ncbi.nlm.nih.gov/geo/samples/GSM5051nnn/GSM5051275/suppl/GSM5051275_NA19471_1_Grn.idat.gz https://ftp.ncbi.nlm.nih.gov/geo/samples/GSM5051nnn/GSM5051275/suppl/GSM5051275_NA19471_1_Red.idat.gz +GSM5051276 NA19471 2 https://ftp.ncbi.nlm.nih.gov/geo/samples/GSM5051nnn/GSM5051276/suppl/GSM5051276_NA19471_2_Grn.idat.gz https://ftp.ncbi.nlm.nih.gov/geo/samples/GSM5051nnn/GSM5051276/suppl/GSM5051276_NA19471_2_Red.idat.gz +GSM5051277 NA19471 3 https://ftp.ncbi.nlm.nih.gov/geo/samples/GSM5051nnn/GSM5051277/suppl/GSM5051277_NA19471_3_Grn.idat.gz https://ftp.ncbi.nlm.nih.gov/geo/samples/GSM5051nnn/GSM5051277/suppl/GSM5051277_NA19471_3_Red.idat.gz +GSM5051278 NA19625 1 https://ftp.ncbi.nlm.nih.gov/geo/samples/GSM5051nnn/GSM5051278/suppl/GSM5051278_NA19625_1_Grn.idat.gz https://ftp.ncbi.nlm.nih.gov/geo/samples/GSM5051nnn/GSM5051278/suppl/GSM5051278_NA19625_1_Red.idat.gz +GSM5051279 NA19625 2 https://ftp.ncbi.nlm.nih.gov/geo/samples/GSM5051nnn/GSM5051279/suppl/GSM5051279_NA19625_2_Grn.idat.gz https://ftp.ncbi.nlm.nih.gov/geo/samples/GSM5051nnn/GSM5051279/suppl/GSM5051279_NA19625_2_Red.idat.gz +GSM5051280 NA19625 3 https://ftp.ncbi.nlm.nih.gov/geo/samples/GSM5051nnn/GSM5051280/suppl/GSM5051280_NA19625_3_Grn.idat.gz https://ftp.ncbi.nlm.nih.gov/geo/samples/GSM5051nnn/GSM5051280/suppl/GSM5051280_NA19625_3_Red.idat.gz +GSM5051281 NA19914 1 https://ftp.ncbi.nlm.nih.gov/geo/samples/GSM5051nnn/GSM5051281/suppl/GSM5051281_NA19914_1_Grn.idat.gz https://ftp.ncbi.nlm.nih.gov/geo/samples/GSM5051nnn/GSM5051281/suppl/GSM5051281_NA19914_1_Red.idat.gz +GSM5051282 NA19914 2 https://ftp.ncbi.nlm.nih.gov/geo/samples/GSM5051nnn/GSM5051282/suppl/GSM5051282_NA19914_2_Grn.idat.gz https://ftp.ncbi.nlm.nih.gov/geo/samples/GSM5051nnn/GSM5051282/suppl/GSM5051282_NA19914_2_Red.idat.gz +GSM5051283 NA19914 3 https://ftp.ncbi.nlm.nih.gov/geo/samples/GSM5051nnn/GSM5051283/suppl/GSM5051283_NA19914_3_Grn.idat.gz https://ftp.ncbi.nlm.nih.gov/geo/samples/GSM5051nnn/GSM5051283/suppl/GSM5051283_NA19914_3_Red.idat.gz +GSM5051284 NA19922 1 https://ftp.ncbi.nlm.nih.gov/geo/samples/GSM5051nnn/GSM5051284/suppl/GSM5051284_NA19922_1_Grn.idat.gz https://ftp.ncbi.nlm.nih.gov/geo/samples/GSM5051nnn/GSM5051284/suppl/GSM5051284_NA19922_1_Red.idat.gz +GSM5051285 NA19922 2 https://ftp.ncbi.nlm.nih.gov/geo/samples/GSM5051nnn/GSM5051285/suppl/GSM5051285_NA19922_2_Grn.idat.gz https://ftp.ncbi.nlm.nih.gov/geo/samples/GSM5051nnn/GSM5051285/suppl/GSM5051285_NA19922_2_Red.idat.gz +GSM5051286 NA19922 3 https://ftp.ncbi.nlm.nih.gov/geo/samples/GSM5051nnn/GSM5051286/suppl/GSM5051286_NA19922_3_Grn.idat.gz https://ftp.ncbi.nlm.nih.gov/geo/samples/GSM5051nnn/GSM5051286/suppl/GSM5051286_NA19922_3_Red.idat.gz +GSM5051287 NA19923 1 https://ftp.ncbi.nlm.nih.gov/geo/samples/GSM5051nnn/GSM5051287/suppl/GSM5051287_NA19923_1_Grn.idat.gz https://ftp.ncbi.nlm.nih.gov/geo/samples/GSM5051nnn/GSM5051287/suppl/GSM5051287_NA19923_1_Red.idat.gz +GSM5051288 NA19923 2 https://ftp.ncbi.nlm.nih.gov/geo/samples/GSM5051nnn/GSM5051288/suppl/GSM5051288_NA19923_2_Grn.idat.gz https://ftp.ncbi.nlm.nih.gov/geo/samples/GSM5051nnn/GSM5051288/suppl/GSM5051288_NA19923_2_Red.idat.gz +GSM5051289 NA19923 3 https://ftp.ncbi.nlm.nih.gov/geo/samples/GSM5051nnn/GSM5051289/suppl/GSM5051289_NA19923_3_Grn.idat.gz https://ftp.ncbi.nlm.nih.gov/geo/samples/GSM5051nnn/GSM5051289/suppl/GSM5051289_NA19923_3_Red.idat.gz +GSM5051290 NA19984 1 https://ftp.ncbi.nlm.nih.gov/geo/samples/GSM5051nnn/GSM5051290/suppl/GSM5051290_NA19984_1_Grn.idat.gz https://ftp.ncbi.nlm.nih.gov/geo/samples/GSM5051nnn/GSM5051290/suppl/GSM5051290_NA19984_1_Red.idat.gz +GSM5051291 NA19984 2 https://ftp.ncbi.nlm.nih.gov/geo/samples/GSM5051nnn/GSM5051291/suppl/GSM5051291_NA19984_2_Grn.idat.gz https://ftp.ncbi.nlm.nih.gov/geo/samples/GSM5051nnn/GSM5051291/suppl/GSM5051291_NA19984_2_Red.idat.gz +GSM5051292 NA19984 3 https://ftp.ncbi.nlm.nih.gov/geo/samples/GSM5051nnn/GSM5051292/suppl/GSM5051292_NA19984_3_Grn.idat.gz https://ftp.ncbi.nlm.nih.gov/geo/samples/GSM5051nnn/GSM5051292/suppl/GSM5051292_NA19984_3_Red.idat.gz +GSM5051293 NA20298 1 https://ftp.ncbi.nlm.nih.gov/geo/samples/GSM5051nnn/GSM5051293/suppl/GSM5051293_NA20298_1_Grn.idat.gz https://ftp.ncbi.nlm.nih.gov/geo/samples/GSM5051nnn/GSM5051293/suppl/GSM5051293_NA20298_1_Red.idat.gz +GSM5051294 NA20298 2 https://ftp.ncbi.nlm.nih.gov/geo/samples/GSM5051nnn/GSM5051294/suppl/GSM5051294_NA20298_2_Grn.idat.gz https://ftp.ncbi.nlm.nih.gov/geo/samples/GSM5051nnn/GSM5051294/suppl/GSM5051294_NA20298_2_Red.idat.gz +GSM5051295 NA20298 3 https://ftp.ncbi.nlm.nih.gov/geo/samples/GSM5051nnn/GSM5051295/suppl/GSM5051295_NA20298_3_Grn.idat.gz https://ftp.ncbi.nlm.nih.gov/geo/samples/GSM5051nnn/GSM5051295/suppl/GSM5051295_NA20298_3_Red.idat.gz +GSM5051296 NA20320 1 https://ftp.ncbi.nlm.nih.gov/geo/samples/GSM5051nnn/GSM5051296/suppl/GSM5051296_NA20320_1_Grn.idat.gz https://ftp.ncbi.nlm.nih.gov/geo/samples/GSM5051nnn/GSM5051296/suppl/GSM5051296_NA20320_1_Red.idat.gz +GSM5051297 NA20320 2 https://ftp.ncbi.nlm.nih.gov/geo/samples/GSM5051nnn/GSM5051297/suppl/GSM5051297_NA20320_2_Grn.idat.gz https://ftp.ncbi.nlm.nih.gov/geo/samples/GSM5051nnn/GSM5051297/suppl/GSM5051297_NA20320_2_Red.idat.gz +GSM5051298 NA20320 3 https://ftp.ncbi.nlm.nih.gov/geo/samples/GSM5051nnn/GSM5051298/suppl/GSM5051298_NA20320_3_Grn.idat.gz https://ftp.ncbi.nlm.nih.gov/geo/samples/GSM5051nnn/GSM5051298/suppl/GSM5051298_NA20320_3_Red.idat.gz +GSM5051299 NA20351 1 https://ftp.ncbi.nlm.nih.gov/geo/samples/GSM5051nnn/GSM5051299/suppl/GSM5051299_NA20351_1_Grn.idat.gz https://ftp.ncbi.nlm.nih.gov/geo/samples/GSM5051nnn/GSM5051299/suppl/GSM5051299_NA20351_1_Red.idat.gz +GSM5051300 NA20351 2 https://ftp.ncbi.nlm.nih.gov/geo/samples/GSM5051nnn/GSM5051300/suppl/GSM5051300_NA20351_2_Grn.idat.gz https://ftp.ncbi.nlm.nih.gov/geo/samples/GSM5051nnn/GSM5051300/suppl/GSM5051300_NA20351_2_Red.idat.gz +GSM5051301 NA20351 3 https://ftp.ncbi.nlm.nih.gov/geo/samples/GSM5051nnn/GSM5051301/suppl/GSM5051301_NA20351_3_Grn.idat.gz https://ftp.ncbi.nlm.nih.gov/geo/samples/GSM5051nnn/GSM5051301/suppl/GSM5051301_NA20351_3_Red.idat.gz +GSM5051302 NA20357 1 https://ftp.ncbi.nlm.nih.gov/geo/samples/GSM5051nnn/GSM5051302/suppl/GSM5051302_NA20357_1_Grn.idat.gz https://ftp.ncbi.nlm.nih.gov/geo/samples/GSM5051nnn/GSM5051302/suppl/GSM5051302_NA20357_1_Red.idat.gz +GSM5051303 NA20357 2 https://ftp.ncbi.nlm.nih.gov/geo/samples/GSM5051nnn/GSM5051303/suppl/GSM5051303_NA20357_2_Grn.idat.gz https://ftp.ncbi.nlm.nih.gov/geo/samples/GSM5051nnn/GSM5051303/suppl/GSM5051303_NA20357_2_Red.idat.gz +GSM5051304 NA20357 3 https://ftp.ncbi.nlm.nih.gov/geo/samples/GSM5051nnn/GSM5051304/suppl/GSM5051304_NA20357_3_Grn.idat.gz https://ftp.ncbi.nlm.nih.gov/geo/samples/GSM5051nnn/GSM5051304/suppl/GSM5051304_NA20357_3_Red.idat.gz +GSM5051305 NA20359 1 https://ftp.ncbi.nlm.nih.gov/geo/samples/GSM5051nnn/GSM5051305/suppl/GSM5051305_NA20359_1_Grn.idat.gz https://ftp.ncbi.nlm.nih.gov/geo/samples/GSM5051nnn/GSM5051305/suppl/GSM5051305_NA20359_1_Red.idat.gz +GSM5051306 NA20359 2 https://ftp.ncbi.nlm.nih.gov/geo/samples/GSM5051nnn/GSM5051306/suppl/GSM5051306_NA20359_2_Grn.idat.gz https://ftp.ncbi.nlm.nih.gov/geo/samples/GSM5051nnn/GSM5051306/suppl/GSM5051306_NA20359_2_Red.idat.gz +GSM5051307 NA20359 3 https://ftp.ncbi.nlm.nih.gov/geo/samples/GSM5051nnn/GSM5051307/suppl/GSM5051307_NA20359_3_Grn.idat.gz https://ftp.ncbi.nlm.nih.gov/geo/samples/GSM5051nnn/GSM5051307/suppl/GSM5051307_NA20359_3_Red.idat.gz +GSM5051308 NA20362 1 https://ftp.ncbi.nlm.nih.gov/geo/samples/GSM5051nnn/GSM5051308/suppl/GSM5051308_NA20362_1_Grn.idat.gz https://ftp.ncbi.nlm.nih.gov/geo/samples/GSM5051nnn/GSM5051308/suppl/GSM5051308_NA20362_1_Red.idat.gz +GSM5051309 NA20362 2 https://ftp.ncbi.nlm.nih.gov/geo/samples/GSM5051nnn/GSM5051309/suppl/GSM5051309_NA20362_2_Grn.idat.gz https://ftp.ncbi.nlm.nih.gov/geo/samples/GSM5051nnn/GSM5051309/suppl/GSM5051309_NA20362_2_Red.idat.gz +GSM5051310 NA20362 3 https://ftp.ncbi.nlm.nih.gov/geo/samples/GSM5051nnn/GSM5051310/suppl/GSM5051310_NA20362_3_Grn.idat.gz https://ftp.ncbi.nlm.nih.gov/geo/samples/GSM5051nnn/GSM5051310/suppl/GSM5051310_NA20362_3_Red.idat.gz +GSM5051311 NA20412 1 https://ftp.ncbi.nlm.nih.gov/geo/samples/GSM5051nnn/GSM5051311/suppl/GSM5051311_NA20412_1_Grn.idat.gz https://ftp.ncbi.nlm.nih.gov/geo/samples/GSM5051nnn/GSM5051311/suppl/GSM5051311_NA20412_1_Red.idat.gz +GSM5051312 NA20412 2 https://ftp.ncbi.nlm.nih.gov/geo/samples/GSM5051nnn/GSM5051312/suppl/GSM5051312_NA20412_2_Grn.idat.gz https://ftp.ncbi.nlm.nih.gov/geo/samples/GSM5051nnn/GSM5051312/suppl/GSM5051312_NA20412_2_Red.idat.gz +GSM5051313 NA20412 3 https://ftp.ncbi.nlm.nih.gov/geo/samples/GSM5051nnn/GSM5051313/suppl/GSM5051313_NA20412_3_Grn.idat.gz https://ftp.ncbi.nlm.nih.gov/geo/samples/GSM5051nnn/GSM5051313/suppl/GSM5051313_NA20412_3_Red.idat.gz +GSM5051314 NA20502 1 https://ftp.ncbi.nlm.nih.gov/geo/samples/GSM5051nnn/GSM5051314/suppl/GSM5051314_NA20502_1_Grn.idat.gz https://ftp.ncbi.nlm.nih.gov/geo/samples/GSM5051nnn/GSM5051314/suppl/GSM5051314_NA20502_1_Red.idat.gz +GSM5051315 NA20502 2 https://ftp.ncbi.nlm.nih.gov/geo/samples/GSM5051nnn/GSM5051315/suppl/GSM5051315_NA20502_2_Grn.idat.gz https://ftp.ncbi.nlm.nih.gov/geo/samples/GSM5051nnn/GSM5051315/suppl/GSM5051315_NA20502_2_Red.idat.gz +GSM5051316 NA20502 3 https://ftp.ncbi.nlm.nih.gov/geo/samples/GSM5051nnn/GSM5051316/suppl/GSM5051316_NA20502_3_Grn.idat.gz https://ftp.ncbi.nlm.nih.gov/geo/samples/GSM5051nnn/GSM5051316/suppl/GSM5051316_NA20502_3_Red.idat.gz +GSM5051317 NA20503 1 https://ftp.ncbi.nlm.nih.gov/geo/samples/GSM5051nnn/GSM5051317/suppl/GSM5051317_NA20503_1_Grn.idat.gz https://ftp.ncbi.nlm.nih.gov/geo/samples/GSM5051nnn/GSM5051317/suppl/GSM5051317_NA20503_1_Red.idat.gz +GSM5051318 NA20503 2 https://ftp.ncbi.nlm.nih.gov/geo/samples/GSM5051nnn/GSM5051318/suppl/GSM5051318_NA20503_2_Grn.idat.gz https://ftp.ncbi.nlm.nih.gov/geo/samples/GSM5051nnn/GSM5051318/suppl/GSM5051318_NA20503_2_Red.idat.gz +GSM5051319 NA20503 3 https://ftp.ncbi.nlm.nih.gov/geo/samples/GSM5051nnn/GSM5051319/suppl/GSM5051319_NA20503_3_Grn.idat.gz https://ftp.ncbi.nlm.nih.gov/geo/samples/GSM5051nnn/GSM5051319/suppl/GSM5051319_NA20503_3_Red.idat.gz +GSM5051320 NA20507 1 https://ftp.ncbi.nlm.nih.gov/geo/samples/GSM5051nnn/GSM5051320/suppl/GSM5051320_NA20507_1_Grn.idat.gz https://ftp.ncbi.nlm.nih.gov/geo/samples/GSM5051nnn/GSM5051320/suppl/GSM5051320_NA20507_1_Red.idat.gz +GSM5051321 NA20507 2 https://ftp.ncbi.nlm.nih.gov/geo/samples/GSM5051nnn/GSM5051321/suppl/GSM5051321_NA20507_2_Grn.idat.gz https://ftp.ncbi.nlm.nih.gov/geo/samples/GSM5051nnn/GSM5051321/suppl/GSM5051321_NA20507_2_Red.idat.gz +GSM5051322 NA20507 3 https://ftp.ncbi.nlm.nih.gov/geo/samples/GSM5051nnn/GSM5051322/suppl/GSM5051322_NA20507_3_Grn.idat.gz https://ftp.ncbi.nlm.nih.gov/geo/samples/GSM5051nnn/GSM5051322/suppl/GSM5051322_NA20507_3_Red.idat.gz +GSM5051323 NA20513 1 https://ftp.ncbi.nlm.nih.gov/geo/samples/GSM5051nnn/GSM5051323/suppl/GSM5051323_NA20513_1_Grn.idat.gz https://ftp.ncbi.nlm.nih.gov/geo/samples/GSM5051nnn/GSM5051323/suppl/GSM5051323_NA20513_1_Red.idat.gz +GSM5051324 NA20513 2 https://ftp.ncbi.nlm.nih.gov/geo/samples/GSM5051nnn/GSM5051324/suppl/GSM5051324_NA20513_2_Grn.idat.gz https://ftp.ncbi.nlm.nih.gov/geo/samples/GSM5051nnn/GSM5051324/suppl/GSM5051324_NA20513_2_Red.idat.gz +GSM5051325 NA20513 3 https://ftp.ncbi.nlm.nih.gov/geo/samples/GSM5051nnn/GSM5051325/suppl/GSM5051325_NA20513_3_Grn.idat.gz https://ftp.ncbi.nlm.nih.gov/geo/samples/GSM5051nnn/GSM5051325/suppl/GSM5051325_NA20513_3_Red.idat.gz +GSM5051326 NA20514 1 https://ftp.ncbi.nlm.nih.gov/geo/samples/GSM5051nnn/GSM5051326/suppl/GSM5051326_NA20514_1_Grn.idat.gz https://ftp.ncbi.nlm.nih.gov/geo/samples/GSM5051nnn/GSM5051326/suppl/GSM5051326_NA20514_1_Red.idat.gz +GSM5051327 NA20514 2 https://ftp.ncbi.nlm.nih.gov/geo/samples/GSM5051nnn/GSM5051327/suppl/GSM5051327_NA20514_2_Grn.idat.gz https://ftp.ncbi.nlm.nih.gov/geo/samples/GSM5051nnn/GSM5051327/suppl/GSM5051327_NA20514_2_Red.idat.gz +GSM5051328 NA20514 3 https://ftp.ncbi.nlm.nih.gov/geo/samples/GSM5051nnn/GSM5051328/suppl/GSM5051328_NA20514_3_Grn.idat.gz https://ftp.ncbi.nlm.nih.gov/geo/samples/GSM5051nnn/GSM5051328/suppl/GSM5051328_NA20514_3_Red.idat.gz +GSM5051329 NA20798 1 https://ftp.ncbi.nlm.nih.gov/geo/samples/GSM5051nnn/GSM5051329/suppl/GSM5051329_NA20798_1_Grn.idat.gz https://ftp.ncbi.nlm.nih.gov/geo/samples/GSM5051nnn/GSM5051329/suppl/GSM5051329_NA20798_1_Red.idat.gz +GSM5051330 NA20798 2 https://ftp.ncbi.nlm.nih.gov/geo/samples/GSM5051nnn/GSM5051330/suppl/GSM5051330_NA20798_2_Grn.idat.gz https://ftp.ncbi.nlm.nih.gov/geo/samples/GSM5051nnn/GSM5051330/suppl/GSM5051330_NA20798_2_Red.idat.gz +GSM5051331 NA20798 3 https://ftp.ncbi.nlm.nih.gov/geo/samples/GSM5051nnn/GSM5051331/suppl/GSM5051331_NA20798_3_Grn.idat.gz https://ftp.ncbi.nlm.nih.gov/geo/samples/GSM5051nnn/GSM5051331/suppl/GSM5051331_NA20798_3_Red.idat.gz +GSM5051332 NA20802 1 https://ftp.ncbi.nlm.nih.gov/geo/samples/GSM5051nnn/GSM5051332/suppl/GSM5051332_NA20802_1_Grn.idat.gz https://ftp.ncbi.nlm.nih.gov/geo/samples/GSM5051nnn/GSM5051332/suppl/GSM5051332_NA20802_1_Red.idat.gz +GSM5051333 NA20802 2 https://ftp.ncbi.nlm.nih.gov/geo/samples/GSM5051nnn/GSM5051333/suppl/GSM5051333_NA20802_2_Grn.idat.gz https://ftp.ncbi.nlm.nih.gov/geo/samples/GSM5051nnn/GSM5051333/suppl/GSM5051333_NA20802_2_Red.idat.gz +GSM5051334 NA20802 3 https://ftp.ncbi.nlm.nih.gov/geo/samples/GSM5051nnn/GSM5051334/suppl/GSM5051334_NA20802_3_Grn.idat.gz https://ftp.ncbi.nlm.nih.gov/geo/samples/GSM5051nnn/GSM5051334/suppl/GSM5051334_NA20802_3_Red.idat.gz +GSM5051335 NA20803 1 https://ftp.ncbi.nlm.nih.gov/geo/samples/GSM5051nnn/GSM5051335/suppl/GSM5051335_NA20803_1_Grn.idat.gz https://ftp.ncbi.nlm.nih.gov/geo/samples/GSM5051nnn/GSM5051335/suppl/GSM5051335_NA20803_1_Red.idat.gz +GSM5051336 NA20803 2 https://ftp.ncbi.nlm.nih.gov/geo/samples/GSM5051nnn/GSM5051336/suppl/GSM5051336_NA20803_2_Grn.idat.gz https://ftp.ncbi.nlm.nih.gov/geo/samples/GSM5051nnn/GSM5051336/suppl/GSM5051336_NA20803_2_Red.idat.gz +GSM5051337 NA20803 3 https://ftp.ncbi.nlm.nih.gov/geo/samples/GSM5051nnn/GSM5051337/suppl/GSM5051337_NA20803_3_Grn.idat.gz https://ftp.ncbi.nlm.nih.gov/geo/samples/GSM5051nnn/GSM5051337/suppl/GSM5051337_NA20803_3_Red.idat.gz +GSM5051338 NA20804 1 https://ftp.ncbi.nlm.nih.gov/geo/samples/GSM5051nnn/GSM5051338/suppl/GSM5051338_NA20804_1_Grn.idat.gz https://ftp.ncbi.nlm.nih.gov/geo/samples/GSM5051nnn/GSM5051338/suppl/GSM5051338_NA20804_1_Red.idat.gz +GSM5051339 NA20804 2 https://ftp.ncbi.nlm.nih.gov/geo/samples/GSM5051nnn/GSM5051339/suppl/GSM5051339_NA20804_2_Grn.idat.gz https://ftp.ncbi.nlm.nih.gov/geo/samples/GSM5051nnn/GSM5051339/suppl/GSM5051339_NA20804_2_Red.idat.gz +GSM5051340 NA20804 3 https://ftp.ncbi.nlm.nih.gov/geo/samples/GSM5051nnn/GSM5051340/suppl/GSM5051340_NA20804_3_Grn.idat.gz https://ftp.ncbi.nlm.nih.gov/geo/samples/GSM5051nnn/GSM5051340/suppl/GSM5051340_NA20804_3_Red.idat.gz +GSM5051341 NA20805 1 https://ftp.ncbi.nlm.nih.gov/geo/samples/GSM5051nnn/GSM5051341/suppl/GSM5051341_NA20805_1_Grn.idat.gz https://ftp.ncbi.nlm.nih.gov/geo/samples/GSM5051nnn/GSM5051341/suppl/GSM5051341_NA20805_1_Red.idat.gz +GSM5051342 NA20805 2 https://ftp.ncbi.nlm.nih.gov/geo/samples/GSM5051nnn/GSM5051342/suppl/GSM5051342_NA20805_2_Grn.idat.gz https://ftp.ncbi.nlm.nih.gov/geo/samples/GSM5051nnn/GSM5051342/suppl/GSM5051342_NA20805_2_Red.idat.gz +GSM5051343 NA20805 3 https://ftp.ncbi.nlm.nih.gov/geo/samples/GSM5051nnn/GSM5051343/suppl/GSM5051343_NA20805_3_Grn.idat.gz https://ftp.ncbi.nlm.nih.gov/geo/samples/GSM5051nnn/GSM5051343/suppl/GSM5051343_NA20805_3_Red.idat.gz +GSM5051344 NA20821 1 https://ftp.ncbi.nlm.nih.gov/geo/samples/GSM5051nnn/GSM5051344/suppl/GSM5051344_NA20821_1_Grn.idat.gz https://ftp.ncbi.nlm.nih.gov/geo/samples/GSM5051nnn/GSM5051344/suppl/GSM5051344_NA20821_1_Red.idat.gz +GSM5051345 NA20821 2 https://ftp.ncbi.nlm.nih.gov/geo/samples/GSM5051nnn/GSM5051345/suppl/GSM5051345_NA20821_2_Grn.idat.gz https://ftp.ncbi.nlm.nih.gov/geo/samples/GSM5051nnn/GSM5051345/suppl/GSM5051345_NA20821_2_Red.idat.gz +GSM5051346 NA20821 3 https://ftp.ncbi.nlm.nih.gov/geo/samples/GSM5051nnn/GSM5051346/suppl/GSM5051346_NA20821_3_Grn.idat.gz https://ftp.ncbi.nlm.nih.gov/geo/samples/GSM5051nnn/GSM5051346/suppl/GSM5051346_NA20821_3_Red.idat.gz +GSM5051347 NA20822 1 https://ftp.ncbi.nlm.nih.gov/geo/samples/GSM5051nnn/GSM5051347/suppl/GSM5051347_NA20822_1_Grn.idat.gz https://ftp.ncbi.nlm.nih.gov/geo/samples/GSM5051nnn/GSM5051347/suppl/GSM5051347_NA20822_1_Red.idat.gz +GSM5051348 NA20822 2 https://ftp.ncbi.nlm.nih.gov/geo/samples/GSM5051nnn/GSM5051348/suppl/GSM5051348_NA20822_2_Grn.idat.gz https://ftp.ncbi.nlm.nih.gov/geo/samples/GSM5051nnn/GSM5051348/suppl/GSM5051348_NA20822_2_Red.idat.gz +GSM5051349 NA20822 3 https://ftp.ncbi.nlm.nih.gov/geo/samples/GSM5051nnn/GSM5051349/suppl/GSM5051349_NA20822_3_Grn.idat.gz https://ftp.ncbi.nlm.nih.gov/geo/samples/GSM5051nnn/GSM5051349/suppl/GSM5051349_NA20822_3_Red.idat.gz diff --git a/scripts/p8/prepare.py b/scripts/p8/prepare.py new file mode 100644 index 0000000..d6fe1dd --- /dev/null +++ b/scripts/p8/prepare.py @@ -0,0 +1,89 @@ +#!/usr/bin/env python3 +"""P8: fetch the GSE165845 IDATs (120 1000 Genomes individuals × 3 replicates, GSA-MD v1) and lay them out as +``/__{Grn,Red}.idat.gz`` symlinks, reading barcode and position from each IDAT header +(the GEO file names are ``GSM…___{Grn,Red}.idat.gz``). + +Writes ``/samples_map.tsv`` (sample_id, gsm, individual, replicate). + + python scripts/p8/prepare.py --tsv scripts/p8/gse165845_samples.tsv --dl DIR --out DIR [--only NA12878,HG00096] +""" + +from __future__ import annotations + +import argparse +import csv +import sys +import time +import urllib.request +from concurrent.futures import ThreadPoolExecutor +from pathlib import Path + +from simurg.formats.idat import read_idat + + +def fetch(url: str, dest: Path, tries: int = 5) -> Path: + if dest.exists() and dest.stat().st_size > 0: + return dest + tmp = dest.with_suffix(dest.suffix + ".part") + for i in range(tries): + try: + with urllib.request.urlopen(url, timeout=120) as r, open(tmp, "wb") as fh: + while chunk := r.read(1 << 20): + fh.write(chunk) + tmp.rename(dest) + return dest + except OSError as e: + print(f"retry {i + 1}/{tries} {url}: {e}", file=sys.stderr) + time.sleep(5 * (i + 1)) + raise RuntimeError(f"download failed: {url}") + + +def main() -> int: + ap = argparse.ArgumentParser(description=__doc__, formatter_class=argparse.RawDescriptionHelpFormatter) + ap.add_argument("--tsv", required=True, type=Path) + ap.add_argument("--dl", required=True, type=Path, help="download folder (GEO names)") + ap.add_argument("--out", required=True, type=Path, help="folder for the standard-name symlink tree") + ap.add_argument("--only", default="", help="comma-separated individuals (test subsets)") + ap.add_argument("--workers", type=int, default=16) + a = ap.parse_args() + + rows = list(csv.DictReader(a.tsv.open(), delimiter="\t")) + if a.only: + keep = set(a.only.split(",")) + rows = [r for r in rows if r["individual"] in keep] + a.dl.mkdir(parents=True, exist_ok=True) + jobs = [(r[k], a.dl / r[k].rsplit("/", 1)[1]) for r in rows for k in ("grn_url", "red_url")] + t0 = time.time() + with ThreadPoolExecutor(a.workers) as ex: + list(ex.map(lambda j: fetch(*j), jobs)) + size = sum(p.stat().st_size for _, p in jobs) + print(f"{len(jobs)} IDATs, {size / 1e9:.1f} GB in {time.time() - t0:.0f} s") + + a.out.mkdir(parents=True, exist_ok=True) + seen: dict[str, str] = {} + with open(a.out / "samples_map.tsv", "w") as fh: + fh.write("sample_id\tgsm\tindividual\treplicate\n") + for r in rows: + names = [] + for ch, key in (("Grn", "grn_url"), ("Red", "red_url")): + src = a.dl / r[key].rsplit("/", 1)[1] + idat = read_idat(src, load_arrays=False) + names.append(f"{idat.barcode}_{idat.position}") + d = a.out / idat.barcode + d.mkdir(exist_ok=True) + link = d / f"{idat.barcode}_{idat.position}_{ch}.idat.gz" + if not link.exists(): + link.symlink_to(src.resolve()) + if names[0] != names[1]: + raise SystemExit(f"{r['gsm']}: Grn/Red headers disagree ({names})") + sid = names[0] + if sid in seen: + raise SystemExit(f"{r['gsm']}: {sid} already used by {seen[sid]}") + seen[sid] = r["gsm"] + fh.write(f"{sid}\t{r['gsm']}\t{r['individual']}\t{r['replicate']}\n") + print(f"{len(seen)} samples -> {a.out}") + return 0 + + +if __name__ == "__main__": + raise SystemExit(main()) diff --git a/scripts/p8/validate_p8.py b/scripts/p8/validate_p8.py new file mode 100644 index 0000000..e4b41d6 --- /dev/null +++ b/scripts/p8/validate_p8.py @@ -0,0 +1,481 @@ +#!/usr/bin/env python3 +"""P8 scientific validation (plan §16.5) of SimurgArray calls on GSE165845 (GSA-MD v1, 120 1000 Genomes +individuals × 3 replicates) against the NYGC 30x WGS call set and GIAB HG001 v4.2.1. + +Inputs are prepared by ``scripts/cloud/tasks/p8.sh``: every VCF/BCF is already split to biallelic records and +left-normalised against the same GRCh38 FASTA with Ensembl contig names (1…22, X): + + --array cohort BCF from ``simurg gtc-to-vcf --merge`` (samples = _) + --truth NYGC records at the array positions, subset to the GSE165845 individuals + --giab GIAB HG001 records at the array positions; --giab-bed the v4.2.1 confident regions + --map samples_map.tsv from ``prepare.py``; --gt-dir the ``simurg genotype`` output folder + +Metrics: genotype concordance, non-reference discordance (NRD), no-call rate, sensitivity / specificity / +precision / F1 per genotype class and per truth MAF bin, SNV vs indel; replicate concordance; systematic +site discordance with the allele-swap (strand/allele error) pattern; per-chip call rate and LogR deviation; +duplicate detection by the cohort relatedness step. A site absent from a WGS call set is taken as homozygous +reference (reported separately from sites present in both). +""" + +from __future__ import annotations + +import argparse +import csv +import json +import statistics +import subprocess +import sys +import time +from collections import defaultdict +from itertools import combinations +from pathlib import Path + +import numpy as np +import numpy.typing as npt + +CHROMS = [str(i) for i in range(1, 23)] + ["X"] +GT_CODE = { + "0/0": 0, "0|0": 0, "0": 0, + "0/1": 1, "1/0": 1, "0|1": 1, "1|0": 1, + "1/1": 2, "1|1": 2, "1": 2, +} # fmt: skip +MAF_BINS = [0.0, 0.001, 0.01, 0.05, 0.1, 0.2, 0.5000001] +MAF_LABELS = ["<0.1%", "0.1-1%", "1-5%", "5-10%", "10-20%", "20-50%"] +CLASSES = ["hom_ref", "het", "hom_alt"] + + +def query(bcftools: str, path: Path, fmt: str) -> tuple[list[str], subprocess.Popen[str]]: + samples = subprocess.run([bcftools, "query", "-l", str(path)], capture_output=True, text=True, check=True) + p = subprocess.Popen([bcftools, "query", "-f", fmt, str(path)], stdout=subprocess.PIPE, text=True, bufsize=1 << 20) + return samples.stdout.split(), p + + +def load(bcftools: str, path: Path, with_af: bool = False, chroms: list[str] | None = None) -> dict: + """Records of chromosomes 1–22/X → keys, genotype matrix (int8, −1 = no call), AF (if asked).""" + fmt = "%CHROM\t%POS\t%REF\t%ALT" + ("\t%INFO/AF" if with_af else "") + "[\t%GT]\n" + samples, p = query(bcftools, path, fmt) + nfix = 5 if with_af else 4 + keys: list[tuple[str, int, str, str]] = [] + rows: list[npt.NDArray[np.int8]] = [] + af: list[float] = [] + index: dict[tuple[str, int, str, str], int] = {} + positions: set[tuple[str, int]] = set() + dups = 0 + ok_chrom = set(chroms or CHROMS) + get = GT_CODE.get + assert p.stdout is not None + for line in p.stdout: + f = line.rstrip("\n").split("\t") + if f[0] not in ok_chrom: + continue + key = (f[0], int(f[1]), f[2], f[3]) + if key in index: + dups += 1 + continue + index[key] = len(keys) + keys.append(key) + positions.add((f[0], key[1])) + if with_af: + try: + af.append(float(f[4])) + except ValueError: + af.append(float("nan")) + rows.append(np.fromiter((get(g, -1) for g in f[nfix:]), np.int8, len(f) - nfix)) + if p.wait() != 0: + raise SystemExit(f"bcftools query failed on {path}") + gt = np.vstack(rows) if rows else np.zeros((0, len(samples)), np.int8) + return { + "samples": samples, "keys": keys, "index": index, "positions": positions, "gt": gt, + "af": np.array(af), "duplicate_keys": dups, + } # fmt: skip + + +def is_snv(key: tuple[str, int, str, str]) -> bool: + return len(key[2]) == 1 and len(key[3]) == 1 + + +def confusion(t: npt.NDArray[np.int8], a: npt.NDArray[np.int8], group: npt.NDArray[np.int64], ngroups: int): + """Counts (group, truth 0..2, array −1..2) over every cell; ``group`` has the shape of ``t``.""" + code = (t.astype(np.int64) * 4 + (a.astype(np.int64) + 1)) + 12 * group + return np.bincount(code.ravel(), minlength=12 * ngroups).reshape(ngroups, 3, 4) + + +def metrics(c: npt.NDArray[np.int64]) -> dict: + """``c`` is (truth 0..2) × (array no-call, 0, 1, 2).""" + called = c[:, 1:] + n = int(called.sum()) + nocall = int(c[:, 0].sum()) + out: dict = {"n_called": n, "n_nocall": nocall} + if n == 0: + return out + trace = int(np.trace(called)) + out["concordance"] = trace / n + out["nocall_rate"] = nocall / (n + nocall) + nr = n - int(called[0, 0]) + out["nrd"] = (n - trace) / nr if nr else None + for k, name in enumerate(CLASSES): + tp = int(called[k, k]) + fn = int(called[k].sum()) - tp + fp = int(called[:, k].sum()) - tp + tn = n - tp - fn - fp + sens = tp / (tp + fn) if tp + fn else None + prec = tp / (tp + fp) if tp + fp else None + out[name] = { + "n_truth": tp + fn, + "sensitivity": sens, + "precision": prec, + "specificity": tn / (tn + fp) if tn + fp else None, + "f1": 2 * sens * prec / (sens + prec) if sens and prec else None, + "nocall_rate": int(c[k, 0]) / (tp + fn + int(c[k, 0])) if tp + fn + int(c[k, 0]) else None, + } + # variant level (non-reference genotypes): a call is a true positive only with the exact genotype + tp = int(called[1, 1] + called[2, 2]) + fn = int(called[1, 0] + called[2, 0] + called[1, 2] + called[2, 1]) + fp = int(called[0, 1] + called[0, 2] + called[1, 2] + called[2, 1]) + sens = tp / (tp + fn) if tp + fn else None + prec = tp / (tp + fp) if tp + fp else None + out["nonref"] = { + "sensitivity": sens, + "precision": prec, + "f1": 2 * sens * prec / (sens + prec) if sens and prec else None, + } + out["matrix_truth_by_array_nc012"] = c.tolist() + return out + + +def read_bed(path: Path) -> dict[str, tuple[npt.NDArray[np.int64], npt.NDArray[np.int64]]]: + iv: dict[str, list[tuple[int, int]]] = defaultdict(list) + with open(path) as fh: + for line in fh: + if line.startswith(("#", "track", "browser")): + continue + f = line.split("\t") + iv[f[0].removeprefix("chr")].append((int(f[1]), int(f[2]))) + return {k: (np.array([s for s, _ in v]), np.array([e for _, e in v])) for k, v in iv.items() for v in [sorted(v)]} + + +def in_bed(bed, chrom: str, pos: int) -> bool: + if chrom not in bed: + return False + s, e = bed[chrom] + i = int(np.searchsorted(s, pos - 1, side="right")) - 1 # BED is 0-based half-open; pos is 1-based + return i >= 0 and pos - 1 < e[i] + + +def against(arr: dict, tru: dict, cols: list[int], tcols: list[int], restrict=None) -> dict: + """Array samples ``cols`` vs truth columns ``tcols``: per-sample, per MAF bin × variant type, per site.""" + keys = arr["keys"] + n = len(keys) + rows_t = np.full(n, -1, np.int64) + status = np.zeros(n, np.int8) # 0 matched, 1 absent (→ hom ref), 2 allele mismatch, 3 outside region + for i, k in enumerate(keys): + if restrict is not None and not restrict(k): + status[i] = 3 + continue + j = tru["index"].get(k) + if j is not None: + rows_t[i] = j + elif (k[0], k[1]) in tru["positions"]: + status[i] = 2 + else: + status[i] = 1 + use = np.flatnonzero(status <= 1) + A = arr["gt"][np.ix_(use, cols)] + T = np.zeros_like(A) + m = rows_t[use] >= 0 + T[m] = tru["gt"][np.ix_(rows_t[use][m], tcols)] + T[T < 0] = -9 # truth no-call → excluded below + snv = np.array([is_snv(keys[i]) for i in use]) + if len(tru["af"]): + af = np.where(m, tru["af"][np.maximum(rows_t[use], 0)], 0.0) + af = np.nan_to_num(af, nan=0.0) + maf = np.minimum(af, 1 - af) + mbin = np.where(m, np.digitize(maf, MAF_BINS) - 1, len(MAF_LABELS)) # last bin = absent from truth + else: + mbin = np.where(m, 0, len(MAF_LABELS)) + matched_flag = m.astype(np.int64) + + S = len(cols) + nb = len(MAF_LABELS) + 1 + per_sample = np.zeros((S, 3, 4), np.int64) + by_group = np.zeros((2 * 2 * nb, 3, 4), np.int64) # matched? × snv? × bin + site_disc = np.zeros(len(use), np.int64) + site_called = np.zeros(len(use), np.int64) + site_swap = np.zeros(len(use), np.int64) + step = 50_000 + for s0 in range(0, len(use), step): + a = A[s0 : s0 + step] + t = T[s0 : s0 + step] + valid = t >= 0 + tt = np.where(valid, t, 0) + sample_g = np.broadcast_to(np.arange(S), a.shape) + per_sample += confusion(tt[valid], a[valid], sample_g[valid], S) + g = (matched_flag[s0 : s0 + step] * 2 + snv[s0 : s0 + step]) * nb + mbin[s0 : s0 + step] + gg = np.broadcast_to(g[:, None], a.shape) + by_group += confusion(tt[valid], a[valid], gg[valid], 4 * nb) + both = valid & (a >= 0) + site_called[s0 : s0 + step] = both.sum(1) + site_disc[s0 : s0 + step] = (both & (a != t)).sum(1) + site_swap[s0 : s0 + step] = (both & (t != 1) & (a == 2 - t)).sum(1) + + def pooled(sel) -> dict: + return metrics(by_group[np.atleast_1d(sel)].sum(0)) + + idx = np.arange(4 * nb).reshape(2, 2, nb) # [matched][snv][bin] + res: dict = { + "sites": { + "array_records": n, + "matched": int((status == 0).sum()), + "absent_in_truth_as_hom_ref": int((status == 1).sum()), + "allele_mismatch_excluded": int((status == 2).sum()), + "outside_region": int((status == 3).sum()), + }, + "all": pooled(idx.ravel()), + "matched_only": pooled(idx[1].ravel()), + "snv": pooled(idx[:, 1].ravel()), + "indel": pooled(idx[:, 0].ravel()), + "by_maf": {lab: pooled(idx[1, :, b].ravel()) for b, lab in enumerate(MAF_LABELS)}, + "by_maf_snv": {lab: pooled(idx[1, 1, b]) for b, lab in enumerate(MAF_LABELS)}, + "absent_in_truth": pooled(idx[:, :, nb - 1].ravel()), + } + ps = [metrics(per_sample[i]) for i in range(S)] + res["per_sample"] = ps + conc = [p["concordance"] for p in ps if "concordance" in p] + nrd = [p["nrd"] for p in ps if p.get("nrd") is not None] + res["per_sample_summary"] = { + "n": len(conc), + "concordance_median": statistics.median(conc) if conc else None, + "concordance_min": min(conc) if conc else None, + "nrd_median": statistics.median(nrd) if nrd else None, + "nrd_max": max(nrd) if nrd else None, + } + # systematic discordance: sites wrong in at least half of the called samples (≥ 10 called) + frac = np.divide(site_disc, site_called, out=np.zeros(len(use)), where=site_called > 0) + sysm = (site_called >= 10) & (frac >= 0.5) + swap = sysm & (site_swap >= 0.8 * np.maximum(site_disc, 1)) + ambiguous = np.array([{keys[i][2], keys[i][3]} in ({"A", "T"}, {"C", "G"}) for i in use]) + evaluable = int((site_called >= 10).sum()) + res["site_errors"] = { + "evaluable_sites": evaluable, + "systematic_discordant_sites": int(sysm.sum()), + "systematic_rate": sysm.sum() / evaluable if evaluable else None, + "allele_swap_sites": int(swap.sum()), + "allele_swap_rate": swap.sum() / evaluable if evaluable else None, + "allele_swap_at_cg_ambiguous": int((swap & ambiguous).sum()), + "systematic_indels": int((sysm & ~snv).sum()), + "systematic_absent_in_truth": int((sysm & ~m).sum()), + } + res["_systematic_rows"] = [ + (keys[use[i]], int(site_called[i]), int(site_disc[i]), int(site_swap[i]), bool(m[i])) + for i in np.flatnonzero(sysm) + ] + return res + + +def replicate_concordance(arr: dict, groups: dict[str, list[int]]) -> dict: + gt = arr["gt"] + pairs = [] + for ind, cols in sorted(groups.items()): + for x, y in combinations(cols, 2): + a, b = gt[:, x], gt[:, y] + both = (a >= 0) & (b >= 0) + one = (a >= 0) ^ (b >= 0) + nb = int(both.sum()) + eq = int((both & (a == b)).sum()) + nonref = both & ((a > 0) | (b > 0)) + pairs.append( + { + "individual": ind, + "a": arr["samples"][x], + "b": arr["samples"][y], + "both_called": nb, + "concordance": eq / nb if nb else None, + "nonref_discordance": int((nonref & (a != b)).sum()) / int(nonref.sum()) if nonref.any() else None, + "one_side_nocall": int(one.sum()), + } + ) + c = [p["concordance"] for p in pairs if p["concordance"] is not None] + d = [p["nonref_discordance"] for p in pairs if p["nonref_discordance"] is not None] + tot_both = sum(p["both_called"] for p in pairs) + tot_eq = sum(round(p["concordance"] * p["both_called"]) for p in pairs if p["concordance"] is not None) + return { + "n_pairs": len(pairs), + "pooled_concordance": tot_eq / tot_both if tot_both else None, + "median_concordance": statistics.median(c) if c else None, + "min_concordance": min(c) if c else None, + "median_nonref_discordance": statistics.median(d) if d else None, + "pairs": pairs, + } + + +def batch_table(gt_dir: Path, sample_map: dict[str, dict], per_sample_conc: dict[str, float]) -> dict: + path = gt_dir / "sample_summary.tsv" + if not path.exists(): + return {} + chips: dict[str, list[dict]] = defaultdict(list) + for r in csv.DictReader(path.open(), delimiter="\t"): + chips[r["sample_folder"] or r["sample_id"].split("_")[0]].append(r) + + def f(x: str) -> float | None: + try: + return float(x) + except ValueError: + return None + + table = [] + for chip, rs in sorted(chips.items()): + cr = [v for r in rs if (v := f(r["call_rate"])) is not None] + ld = [v for r in rs if (v := f(r["logr_dev"])) is not None] + cc = [per_sample_conc[r["sample_id"]] for r in rs if r["sample_id"] in per_sample_conc] + table.append( + { + "chip": chip, + "n": len(rs), + "call_rate_mean": statistics.fmean(cr) if cr else None, + "call_rate_min": min(cr) if cr else None, + "logr_dev_median": statistics.median(ld) if ld else None, + "wgs_concordance_mean": statistics.fmean(cc) if cc else None, + "status_fail": sum(r["status"] != "OK" for r in rs), + } + ) + means = [t["call_rate_mean"] for t in table if t["call_rate_mean"] is not None] + med = statistics.median(means) + mad = statistics.median(abs(x - med) for x in means) or 1e-9 + for t in table: + t["call_rate_outlier"] = t["call_rate_mean"] is not None and abs(t["call_rate_mean"] - med) > 3 * 1.4826 * mad + all_cr = [f(r["call_rate"]) for rs in chips.values() for r in rs] + all_ld = [f(r["logr_dev"]) for rs in chips.values() for r in rs] + return { + "n_chips": len(table), + "n_samples": sum(t["n"] for t in table), + "call_rate_median": statistics.median(x for x in all_cr if x is not None), + "logr_dev_median": statistics.median(x for x in all_ld if x is not None), + "chips_call_rate_outliers": [t["chip"] for t in table if t["call_rate_outlier"]], + "chips": table, + } + + +def duplicate_check(gt_dir: Path, sample_map: dict[str, dict]) -> dict: + path = gt_dir / "relatedness.tsv" + if not path.exists(): + return {} + ind = {s: m["individual"] for s, m in sample_map.items()} + found: set[frozenset[str]] = set() + false_dup = [] + for r in csv.DictReader(path.open(), delimiter="\t"): + a, b = r["sample_a"], r["sample_b"] + if r["degree"] == "duplicate": + if ind.get(a) == ind.get(b): + found.add(frozenset((a, b))) + else: + false_dup.append((a, b, r["kinship"])) + groups: dict[str, list[str]] = defaultdict(list) + for s, i in ind.items(): + groups[i].append(s) + expected = {frozenset(p) for g in groups.values() for p in combinations(g, 2)} + return { + "replicate_pairs": len(expected), + "detected_as_duplicate": len(found & expected), + "missed": sorted(" ".join(sorted(p)) for p in expected - found), + "duplicates_between_different_individuals": false_dup, + } + + +def main() -> int: + ap = argparse.ArgumentParser(description=__doc__, formatter_class=argparse.RawDescriptionHelpFormatter) + ap.add_argument("--array", required=True, type=Path) + ap.add_argument("--truth", required=True, type=Path) + ap.add_argument("--giab", type=Path) + ap.add_argument("--giab-bed", type=Path) + ap.add_argument("--giab-sample", default="NA12878") + ap.add_argument("--map", required=True, type=Path) + ap.add_argument("--gt-dir", type=Path) + ap.add_argument("--bcftools", default="bcftools") + ap.add_argument("--chroms", default="", help="comma-separated subset of 1..22,X (tests)") + ap.add_argument("--out", required=True, type=Path) + a = ap.parse_args() + t0 = time.time() + a.out.mkdir(parents=True, exist_ok=True) + + smap = {r["sample_id"]: r for r in csv.DictReader(a.map.open(), delimiter="\t")} + chroms = a.chroms.split(",") if a.chroms else None + arr = load(a.bcftools, a.array, chroms=chroms) + tru = load(a.bcftools, a.truth, with_af=True) + print(f"array {arr['gt'].shape}, truth {tru['gt'].shape} ({time.time() - t0:.0f} s)", file=sys.stderr) + + tcol = {s: i for i, s in enumerate(tru["samples"])} + cols, tcols, missing = [], [], [] + for i, s in enumerate(arr["samples"]): + ind = smap.get(s, {}).get("individual") + if ind in tcol: + cols.append(i) + tcols.append(tcol[ind]) + else: + missing.append(s) + summary: dict = { + "array_samples": len(arr["samples"]), + "individuals": len({smap[s]["individual"] for s in arr["samples"] if s in smap}), + "samples_without_truth": missing, + "array_duplicate_keys": arr["duplicate_keys"], + } + wgs = against(arr, tru, cols, tcols) + sysrows = wgs.pop("_systematic_rows") + per = wgs.pop("per_sample") + per_conc = {} + with open(a.out / "per_sample.tsv", "w") as fh: + fh.write("sample_id\tindividual\treplicate\tn_called\tn_nocall\tconcordance\tnrd\n") + for c, p in zip(cols, per, strict=True): + s = arr["samples"][c] + per_conc[s] = p.get("concordance") + fh.write( + f"{s}\t{smap[s]['individual']}\t{smap[s]['replicate']}\t{p['n_called']}\t{p['n_nocall']}\t" + f"{p.get('concordance', '')}\t{p.get('nrd', '')}\n" + ) + with open(a.out / "systematic_sites.tsv", "w") as fh: + fh.write("chrom\tpos\tref\talt\tcalled\tdiscordant\tallele_swap\tin_truth\n") + for k, nc, nd, ns, inb in sysrows: + fh.write(f"{k[0]}\t{k[1]}\t{k[2]}\t{k[3]}\t{nc}\t{nd}\t{ns}\t{int(inb)}\n") + summary["nygc_30x"] = wgs + + groups: dict[str, list[int]] = defaultdict(list) + for i, s in enumerate(arr["samples"]): + if s in smap: + groups[smap[s]["individual"]].append(i) + rep = replicate_concordance(arr, groups) + with open(a.out / "replicate_pairs.tsv", "w") as fh: + fh.write("individual\ta\tb\tboth_called\tconcordance\tnonref_discordance\tone_side_nocall\n") + for p in rep.pop("pairs"): + fh.write("\t".join(str(p[k]) for k in p) + "\n") + summary["replicates"] = rep + + if a.giab and a.giab_bed: + gia = load(a.bcftools, a.giab) + bed = read_bed(a.giab_bed) + gcols = [i for i, s in enumerate(arr["samples"]) if smap.get(s, {}).get("individual") == a.giab_sample] + if gcols and gia["samples"]: + g = against(arr, gia, gcols, [0] * len(gcols), restrict=lambda k: k[0] != "X" and in_bed(bed, k[0], k[1])) + g.pop("by_maf"), g.pop("by_maf_snv") + g["systematic_sites"] = [f"{k[0]}:{k[1]}:{k[2]}:{k[3]}" for k, *_ in g.pop("_systematic_rows")] + g["per_replicate"] = [ + {"sample": arr["samples"][c], **{k: p.get(k) for k in ("n_called", "concordance", "nrd")}} + for c, p in zip(gcols, g.pop("per_sample"), strict=True) + ] + summary["giab_hg001"] = g + if a.gt_dir: + summary["batch"] = batch_table(a.gt_dir, smap, per_conc) + summary["duplicate_detection"] = duplicate_check(a.gt_dir, smap) + summary["seconds"] = round(time.time() - t0, 1) + (a.out / "summary.json").write_text(json.dumps(summary, indent=1, default=float)) + w = summary["nygc_30x"] + print( + f"NYGC: concordance {w['all'].get('concordance'):.5f} NRD {w['all'].get('nrd'):.5f} " + f"no-call {w['all'].get('nocall_rate'):.5f} replicate {rep['pooled_concordance']:.5f}" + ) + if "giab_hg001" in summary: + gg = summary["giab_hg001"]["all"] + print(f"GIAB HG001: concordance {gg.get('concordance'):.5f} NRD {gg.get('nrd')}") + return 0 + + +if __name__ == "__main__": + raise SystemExit(main())