diff --git a/DESCRIPTION b/DESCRIPTION index e1dfc5b8..dec7b480 100644 --- a/DESCRIPTION +++ b/DESCRIPTION @@ -22,9 +22,9 @@ Imports: bigsnpr, bigstatsr, generics, - genio, ggplot2, magrittr, + methods, MASS, patchwork, rlang, @@ -37,6 +37,8 @@ Imports: vctrs Suggests: adegenet, + broom, + hierfstat, knitr, detectRUNS, LEA, diff --git a/NAMESPACE b/NAMESPACE index baacfad3..e1cc431e 100644 --- a/NAMESPACE +++ b/NAMESPACE @@ -6,11 +6,11 @@ S3method("show_loci<-",vctrs_bigSNP) S3method(augment,gt_dapc) S3method(augment,gt_pca) S3method(augment_loci,gt_pca) +S3method(autoplot,gt_cluster_pca) S3method(autoplot,gt_dapc) S3method(autoplot,gt_pca) -S3method(autoplot,gt_pca_clust) -S3method(autoplot,indiv_qc_report) -S3method(autoplot,loci_qc_report) +S3method(autoplot,qc_report_indiv) +S3method(autoplot,qc_report_loci) S3method(count_loci,tbl_df) S3method(count_loci,vctrs_bigSNP) S3method(dplyr_reconstruct,gen_tbl) @@ -26,6 +26,8 @@ S3method(indiv_missingness,vctrs_bigSNP) S3method(loci_alt_freq,grouped_df) S3method(loci_alt_freq,tbl_df) S3method(loci_alt_freq,vctrs_bigSNP) +S3method(loci_chromosomes,tbl_df) +S3method(loci_chromosomes,vctrs_bigSNP) S3method(loci_hwe,grouped_df) S3method(loci_hwe,tbl_df) S3method(loci_hwe,vctrs_bigSNP) @@ -38,6 +40,8 @@ S3method(loci_maf,vctrs_bigSNP) S3method(loci_missingness,grouped_df) S3method(loci_missingness,tbl_df) S3method(loci_missingness,vctrs_bigSNP) +S3method(loci_names,tbl_df) +S3method(loci_names,vctrs_bigSNP) S3method(loci_sums,grouped_df) S3method(loci_sums,tbl_df) S3method(loci_sums,vctrs_bigSNP) @@ -48,8 +52,6 @@ S3method(show_genotypes,tbl_df) S3method(show_genotypes,vctrs_bigSNP) S3method(show_loci,tbl_df) S3method(show_loci,vctrs_bigSNP) -S3method(show_loci_names,tbl_df) -S3method(show_loci_names,vctrs_bigSNP) S3method(summary,rbind_report) S3method(summary,vctrs_bigSNP) S3method(tbl_sum,gen_tbl) @@ -61,44 +63,51 @@ export(augment) export(augment_loci) export(autoplot) export(count_loci) +export(filter_high_relatedness) export(gen_tibble) +export(gt_as_genind) +export(gt_as_genlight) +export(gt_as_geno_lea) +export(gt_as_hierfstat) +export(gt_as_plink) +export(gt_cluster_pca) +export(gt_cluster_pca_best_k) export(gt_dapc) export(gt_get_file_names) export(gt_has_imputed) -export(gt_ibs) export(gt_impute_simple) export(gt_king) export(gt_load) export(gt_pca_autoSVD) -export(gt_pca_clust_best_k) -export(gt_pca_find_clusters) export(gt_pca_partialSVD) export(gt_pca_randomSVD) export(gt_roh_window) export(gt_save) export(gt_set_imputed) export(gt_uses_imputed) -export(gt_vcf_to_bed) -export(gt_write_bed_from_dfs) -export(gt_write_lea_geno) -export(gt_write_plink) export(indiv_het_obs) export(indiv_missingness) -export(indiv_qc_report) export(loci_alt_freq) +export(loci_chromosomes) export(loci_hwe) export(loci_ld_clump) export(loci_maf) export(loci_missingness) -export(loci_qc_report) +export(loci_names) export(loci_sums) -export(pop_pairwise_fst) +export(pairwise_allele_sharing) +export(pairwise_ibs) +export(pairwise_pop_fst) +export(pop_fis) +export(pop_fst) +export(qc_report_indiv) +export(qc_report_loci) export(rbind_dry_run) export(select_loci) export(select_loci_if) export(show_genotypes) export(show_loci) -export(show_loci_names) +export(snp_allele_sharing) export(snp_ibs) export(snp_king) export(tidy) diff --git a/R/RcppExports.R b/R/RcppExports.R index 626627e4..cb4f1f51 100644 --- a/R/RcppExports.R +++ b/R/RcppExports.R @@ -13,11 +13,15 @@ SNPHWE_midp_t <- function(obs_hets, obs_hom1, obs_hom2, thresh) { .Call(`_tidypopgen_SNPHWE_midp_t`, obs_hets, obs_hom1, obs_hom2, thresh) } +increment_as_counts <- function(k, k2, na_mat, dos_mat, BM, rowInd, colInd) { + invisible(.Call(`_tidypopgen_increment_as_counts`, k, k2, na_mat, dos_mat, BM, rowInd, colInd)) +} + increment_ibs_counts <- function(k, k2, genotype0, genotype1, genotype2, BM, rowInd, colInd) { invisible(.Call(`_tidypopgen_increment_ibs_counts`, k, k2, genotype0, genotype1, genotype2, BM, rowInd, colInd)) } -increment_king_numerator <- function(k, genotype0, genotype1, genotype2, BM, rowInd, colInd) { - invisible(.Call(`_tidypopgen_increment_king_numerator`, k, genotype0, genotype1, genotype2, BM, rowInd, colInd)) +increment_king_numerator <- function(k, n_Aa_i, genotype0, genotype1, genotype2, genotype_valid, BM, rowInd, colInd) { + invisible(.Call(`_tidypopgen_increment_king_numerator`, k, n_Aa_i, genotype0, genotype1, genotype2, genotype_valid, BM, rowInd, colInd)) } diff --git a/R/augment_loci.R b/R/augment_loci.R index 540bfca3..9de022cd 100644 --- a/R/augment_loci.R +++ b/R/augment_loci.R @@ -2,10 +2,10 @@ #' #' `augment_loci` add columns to the loci table of a `gen_tibble` related #' to information from a given analysis. -#' @param x A `gt_pca` object returned by one of the `gt_pca_*` functions. +#' @param x An object returned by one of the `gt_` functions (e.g. [gt_pca()]). #' @param data the `gen_tibble` used to run the PCA. -#' @param ... Additional paramters passed to the individual methods. -#' @return A [gen_tibble] with additiona columns added to the loci tibble (accessible +#' @param ... Additional parameters passed to the individual methods. +#' @return A [gen_tibble] with additional columns added to the loci tibble (accessible #' with [show_loci()]. If `data` is missing, a tibble of the information, with a #' column `.rownames` giving the loci names. #' @export diff --git a/R/autoplot_gt_dapc.R b/R/autoplot_gt_dapc.R index 9d1cf7fb..5b3b8e2f 100644 --- a/R/autoplot_gt_dapc.R +++ b/R/autoplot_gt_dapc.R @@ -22,7 +22,7 @@ #' columns should be used. #' @param ... not currently used. #' @returns a `ggplot2` object -#' @rdname autoplot_gt_pca +#' @rdname autoplot_gt_dapc #' @export autoplot.gt_dapc <- function(object, type=c("screeplot", "scores", "loadings", "components"), diff --git a/R/autoplot_gt_pca.R b/R/autoplot_gt_pca.R index 8d34e4a2..6265dc3d 100644 --- a/R/autoplot_gt_pca.R +++ b/R/autoplot_gt_pca.R @@ -17,7 +17,7 @@ #' e.g. c(1,2); for `loadings` either one or more values. #' @param ... not currently used. #' @returns a `ggplot2` object -#' @rdname autoplot_gt_pca +#' @name autoplot_gt_pca #' @export autoplot.gt_pca <- function(object, type=c("screeplot", "scores","loadings"), diff --git a/R/filter_high_relatedness.R b/R/filter_high_relatedness.R new file mode 100644 index 00000000..f91a2893 --- /dev/null +++ b/R/filter_high_relatedness.R @@ -0,0 +1,117 @@ +#' Filter individuals based on a relationship threshold +#' +#' This function takes a matrix of x by y individuals containing relatedness +#' coefficients and returns the maximum set of individuals that contains no +#' relationships above the given threshold. +#' +#' TODO this function needs a test +#' +#' @param matrix a square symmetric matrix of individuals containing relationship coefficients +#' @param .x a [`gen_tibble`] object +#' @param kings_threshold a threshold over which +#' @param verbose boolean whether to report to screen +#' @return a list where '1' is individual ID's to retain, '2' +#' is individual ID's to remove, and '3' is a boolean where individuals to keep +#' are TRUE and individuals to remove are FALSE +#' @rdname filter_high_relatedness +#' @export +#' +filter_high_relatedness <- + function(matrix, .x = NULL, kings_threshold = NULL, verbose = FALSE) { + + var_num <- dim(matrix)[1] + + if(is.null(dimnames(matrix))){ + if(is.null(.x)){ + colnames(matrix) <- 1:ncol(matrix) + rownames(matrix) <- 1:nrow(matrix) + } else { + colnames(matrix) <- (.x)$id + rownames(matrix) <- (.x)$id + } + } + + var_names <- dimnames(matrix)[[1]] + + matrix <- abs(matrix) + + # re-ordered columns based on max absolute correlation + original_order <- 1:var_num + + average_corr <- + function(matrix) { + mean(matrix, na.rm = TRUE) + } + tmp <- matrix + diag(tmp) <- NA + + max_abs_cor_order <- + order(apply(tmp, 2, average_corr), decreasing = TRUE) + matrix <- matrix[max_abs_cor_order, max_abs_cor_order] + newOrder <- original_order[max_abs_cor_order] + rm(tmp) + + col_to_delete <- rep(FALSE, var_num) + + matrix2 <- matrix + diag(matrix2) <- NA + + for (i in 1:(var_num - 1)) { + if (!any(matrix2[!is.na(matrix2)] > kings_threshold)) { + if (verbose) { + message("All correlations <=", kings_threshold, "\n") + } + break() + } + if (col_to_delete[i]) { + next + } + for (j in (i + 1):var_num) { + if (!col_to_delete[i] & !col_to_delete[j]) { + if (matrix[i, j] > kings_threshold) { + mn1 <- mean(matrix2[i, ], na.rm = TRUE) + mn2 <- mean(matrix2[-j, ], na.rm = TRUE) + if (verbose) { + message( + "Compare row", + newOrder[i], + " and column ", + newOrder[j], + "with corr ", + round(matrix[i, j], 3), + "\n" + ) + } + if (verbose) { + message(" Means: ", round(mn1, 3), "vs", round(mn2, 3)) + } + if (mn1 > mn2) { + col_to_delete[i] <- TRUE + matrix2[i, ] <- NA + matrix2[, i] <- NA + if (verbose) { + message(" so flagging column", newOrder[i], "\n") + } + } else { + col_to_delete[j] <- TRUE + matrix2[j, ] <- NA + matrix2[, j] <- NA + if (verbose) { + message(" so flagging column", newOrder[j], "\n") + } + } + } + } + } + } + + + # return variable names + passed_filter <- var_names[newOrder][!col_to_delete] + #attr(passed_filter, "to_remove") + to_remove <- var_names[!var_names %in% passed_filter] + + var_names <- var_names %in% passed_filter == TRUE + + return(list(passed_filter,to_remove,var_names)) + } diff --git a/R/gen_tibble.R b/R/gen_tibble.R index 80f2750a..38eec8e7 100644 --- a/R/gen_tibble.R +++ b/R/gen_tibble.R @@ -3,7 +3,9 @@ #' A `gen_tibble` stores genotypes for individuals in a tidy format. DESCRIBE #' here the format #' @param x can be: -#' - a string giving the path to a plink BED file, or a [`bigsnpr::bigSNP`] +#' - a string giving the path to a PLINK BED or PED file. The correspective +#' BIM and FAM fiel for the BED, or MAP for PED are expected to be in the same +#' directory and have the same file name. #' - a string giving the path to a RDS file storing a `bigSNP` object from #' the `bigsnpr` package (usually created with [bigsnpr::snp_readBed()]) #' - a string giving the path to a vcf file. Note that we currently read the whole @@ -21,7 +23,7 @@ #' 'C' and 'G'. #' @param missing_alleles a vector of values in the BIM file/loci dataframe that #' indicate a missing value for the allele value (e.g. when we have a monomorphic -#' locus with only one allele). It defalts to '0' and '.' (the same as PLINK 1.9). +#' locus with only one allele). It defaults to '0' and '.' (the same as PLINK 1.9). #' @param backingfile the path, including the file name without extension, #' for backing files used to store the data (they will be given a .bk #' and .RDS automatically). This is not needed if `x` is already an .RDS file. @@ -72,12 +74,18 @@ gen_tibble.character <- missing_alleles= missing_alleles, backingfile = backingfile, quiet = quiet) - } else if ((tolower(file_ext(x))=="vcf") || (tolower(file_ext(x))=="vcf.gz")){ + } else if ((tolower(file_ext(x))=="vcf") || (tolower(file_ext(x))=="gz")){ gen_tibble_vcf(x = x, ..., valid_alleles= valid_alleles, missing_alleles= missing_alleles, backingfile = backingfile, quiet = quiet) - } else { + } else if (tolower(file_ext(x))=="ped"){ + gen_tibble_ped(x = x, ..., + valid_alleles= valid_alleles, + missing_alleles= missing_alleles, + backingfile = backingfile, + quiet = quiet) + } else { stop("file_path should be pointing to a either a PLINK .bed file, a bigSNP .rds file or a VCF .vcf or .vcf.gz file") } } @@ -155,7 +163,7 @@ gen_tibble_vcf <- function(x, ..., ind_meta <- tibble(id = colnames(x), population = NA) # using the gen_tibble.matrix method - new_gen_tbl <- gen_tibble(x = x, + new_gen_tbl <- gen_tibble(x = t(x), indiv_meta = ind_meta, loci = loci, backingfile = backingfile) @@ -195,6 +203,14 @@ gen_tibble.matrix <- function(x, indiv_meta, loci, ..., stop("'x' is not a matrix of integers") } + # check dimensions + if (ncol(x)!=nrow(loci)){ + stop ("there is a mismatch between the number of loci in the genotype table x and in the loci table") + } + if (nrow(x)!=nrow(indiv_meta)){ + stop ("there is a mismatch between the number of loci in the genotype table x and in the loci table") + } + # use code for NA in FBM.256 x[is.na(x)]<-3 @@ -338,7 +354,7 @@ stopifnot_gen_tibble <- function(.x){ #' @export tbl_sum.gen_tbl <- function(x, ...) { c( - "A gen_tibble" = paste(nrow(show_loci(x))," loci"), + "A gen_tibble" = paste(count_loci(x)," loci"), NextMethod() ) } @@ -361,7 +377,7 @@ check_allele_alphabet <- function(x, # loci_info is usually from show_loci() harmonise_missing_values <- function (loci_info, missing_alleles =c("0",".")){ # 0 is always considered as a missing value - if ("0" %in% missing_alleles){ + if (!"0" %in% missing_alleles){ missing_alleles <- c(missing_alleles, "0") } loci_info$allele_ref[loci_info$allele_ref %in% missing_alleles]<-NA @@ -372,13 +388,4 @@ harmonise_missing_values <- function (loci_info, missing_alleles =c("0",".")){ -########################################## -# convenient functs -.gt_bigsnp_cols <- function(.x){ - show_loci(.x)$big_index -} - -.gt_bigsnp_rows <- function(.x){ - vctrs::vec_data(.x$genotypes) -} diff --git a/R/gen_tibble_ped.R b/R/gen_tibble_ped.R new file mode 100644 index 00000000..3401a625 --- /dev/null +++ b/R/gen_tibble_ped.R @@ -0,0 +1,194 @@ +#A function to read ped files +gen_tibble_ped <- function(x, ..., + valid_alleles = c("A", "T", "C", "G"), + missing_alleles = c("0","."), + backingfile = NULL, quiet = FALSE) { + # Substitute .ped with .map + map_file <- sub("\\.ped$", ".map", x) + if (!file.exists(map_file)){ + stop("map file ",map_file," does not exist") + } + + + res <- read.pedfile(file =x , snps = map_file, + na.strings = missing_alleles, + quiet = quiet) + # using the gen_tibble.matrix method + new_gen_tbl <- gen_tibble(x = res$genotypes, + indiv_meta = res$fam, + loci = res$map, + backingfile = backingfile, quiet=quiet) + check_allele_alphabet (new_gen_tbl, valid_alleles = valid_alleles, + missing_alleles = missing_alleles) + show_loci(new_gen_tbl) <- harmonise_missing_values(show_loci(new_gen_tbl), missing_alleles = missing_alleles) + return(new_gen_tbl) + +} + + + + + +# modified from snpStats::read.pedfile + +read.pedfile <- function(file, n, snps, which, split="\t| +", sep=".", + na.strings="0", quiet = FALSE) { + ## Constants +# r0 <- as.raw(0) +# r1 <- as.raw(1) +# r2 <- as.raw(2) +# r3 <- as.raw(3) + + r0 <- 3 + r1 <- 2 + r2 <- 1 + r3 <- 0 + + ## Input file + con <- gzfile(file) + open(con) + ## If no line count, find out + if (missing(n)) { + n <- 0 + repeat { + line <- readLines(con, n=1) + if (length(line)==0) break; + n <- n+1; + } + if (n==0) + stop("Nothing read") + seek(con, 0) + } + ## Find snp names + gen <- missing(snps) + map <- NULL + if (!gen) { + m <- length(snps) + if (m==1) { + map <- utils::read.table(snps, comment.char="") + m <- nrow(map) + if (missing(which)) { + which <- 1 + repeat { + snps <- map[,which] + if (!any(duplicated(snps))) + break + if (which==ncol(map)) + stop("No unambiguous snp names found on file") + which <- which+1 + } + } + else { + snps <- map[,which] + } + } + } + else { + line <- readLines(con, n=1) + fields <- strsplit(line, split)[[1]] + nf <- length(fields) + if (nf%%2!=0) + stop("Odd number of fields") + m <- (nf - 6)/2 + seek(con, 0) + } + nf <- 6+2*m + ## Generate empty matrix + result <- matrix(rep(NA,n*m), nrow=n) + ## Columns of subject dataframe + ped <- character(n) + mem <- character(n) + pa <- character(n) + ma <- character(n) + sex <- numeric(n) + aff <- numeric(n) + rownms <- character(n) + a1 <- a2 <- rep(NA, m) + a1m <- a2m <- rep(TRUE, m) + mallelic <- rep(FALSE, m) ## Multiallelic? + for (i in 1:n) { + line <- readLines(con, n=1) + fields <- strsplit(line, "\t| +")[[1]] + to.na <- fields %in% na.strings + fields[to.na] <- NA + ped[i] <- fields[1] + mem[i] <- fields[2] + pa[i] <- fields[3] + ma[i] <- fields[4] + sex[i] <- as.numeric(fields[5]) + aff[i] <- as.numeric(fields[6]) + alleles <- matrix(fields[7:nf], byrow=TRUE, ncol=2) + one <- two <- rep(FALSE, m) + for (k in 1:2) { + ak <- alleles[,k] + akm <- is.na(ak) + br1 <- !akm & a1m + a1[br1] <- ak[br1] + a1m[br1] <- FALSE + br2 <- !akm & (a1==ak) + one[br2] <- TRUE + br3 <- !akm & !a1m & (a1!=ak) + br4 <- br3 & a2m + a2[br4] <- ak[br4] + a2m[br4] <- FALSE + br5 <- br3 & (a2==ak) + two[br5] <- TRUE + mallelic <- mallelic | !(akm|one|two) + } + gt <- rep(r0, m) + gt[one&!two] <- r1 + gt[one&two] <- r2 + gt[two&!one] <- r3 + result[i,] <- gt + } + close(con) + ## Warnin messages + mono <-(a2m & !a1m) + + if (any(mallelic)) { + result[,mallelic] <- r0; + } + if (!quiet){ + if (any(a1m)) + message("no data for ", sum(a1m), " loci") + if (any(mono)) + message(sum(mono), " loci were monomorphic") + if (any(mallelic)) { + message(sum(mallelic), " loci were multi-allelic --- set to NA") + } + } + + ## SnpMatrix result + if (gen) + snps <- paste("locus", 1:m, sep=sep) + if (any(duplicated(ped))) { + if (any(duplicated(mem))) { + rnames <- paste(ped, mem, sep=sep) + if (any(duplicated(rnames))) + stop("could not create unique subject identifiers") + } + else + rnames <- mem + } + else + rnames <- ped + dimnames(result) <- list(rnames, snps) +# result <- new("SnpMatrix", result) + + ## Subject support file + fam <- data.frame(row.names=rnames, population=ped, id=mem, + father=pa, mother=ma, sex=sex, phenotype=aff) + ## map data frame + if (is.null(map)) + map <- data.frame(row.names=snps, snp.name=snps, + allele.1=a1, allele.2=a2) + else { + # mapfile + names(map) <- c('chromosome', 'name', 'genetic_dist','position') + map$allele_ref <- a1 + map$allele_alt <- a2 + #names(map)[which] <- "snp.names" + map + } + list(genotypes=result, fam=fam, map=map) +} diff --git a/R/gt_as_genind.R b/R/gt_as_genind.R new file mode 100644 index 00000000..0b50b68d --- /dev/null +++ b/R/gt_as_genind.R @@ -0,0 +1,26 @@ +#' Convert a `gen_tibble` to a `genind` object from `adegenet` +#' +#' This function converts a `gen_tibble` to a `genind` object from `adegenet` +#' +#' @param x a [`gen_tibble`], with population coded as 'population' +#' @returns a `genind` object +#' @export +#' + +gt_as_genind <- function(x){ + if (!requireNamespace("adegenet", quietly = TRUE)) { + stop( + "to use this function, first install package 'adegenet' with\n", + "install.packages('adegenet')") + } + df_for_genind <- show_genotypes(x) + df_for_genind [df_for_genind ==0]<-"11" + df_for_genind [df_for_genind ==1]<-"12" + df_for_genind [df_for_genind ==2]<-"22" + adegenet::df2genind(X = df_for_genind, + ind.names = x$id, + pop = x$population, + ncode=1, + loc.names = loci_names(x)) +} + diff --git a/R/gt_as_genlight.R b/R/gt_as_genlight.R new file mode 100644 index 00000000..ea404aa5 --- /dev/null +++ b/R/gt_as_genlight.R @@ -0,0 +1,22 @@ +#' Convert a `gen_tibble` to a `genlight` object from `adegenet` +#' +#' This function converts a `gen_tibble` to a `genlight` object from `adegenet` +#' +#' @param x a [`gen_tibble`], with population coded as 'population' +#' @returns a `genlight` object +#' @export +#' + +gt_as_genlight <- function(x){ + if (!requireNamespace("adegenet", quietly = TRUE)) { + stop( + "to use this function, first install package 'adegenet' with\n", + "install.packages('adegenet')") + } + test_genlight <- methods::new("genlight", gen = show_genotypes(x), + ploidy=2, # TODO update this when ploidy is implemented + ind.names = x$id, + pop = x$population, + loc.names = loci_names(x)) +} + diff --git a/R/gt_write_lea_geno.R b/R/gt_as_geno_lea.R similarity index 79% rename from R/gt_write_lea_geno.R rename to R/gt_as_geno_lea.R index 3d399789..ac4b6038 100644 --- a/R/gt_write_lea_geno.R +++ b/R/gt_as_geno_lea.R @@ -1,6 +1,6 @@ -#' Write a geno file for sNMF from the LEA package +#' Convert a `gentibble` to a .geno file for sNMF from the LEA package #' -#' This function writes a geno file fom a [`gen_tibble`]. Unless a file path is given, +#' This function writes a .geno file fom a [`gen_tibble`]. Unless a file path is given, #' a file with suffix .geno is written in the same location as the .rds and .bk #' files that underpin the [`gen_tibble`]. #' @@ -12,7 +12,7 @@ #' # Write a geno file (as used by LEA) -gt_write_lea_geno <- function(x, file = NULL){ +gt_as_geno_lea <- function(x, file = NULL){ if (is.null(file)){ file <- sub_rds(gt_get_file_names(x)[1],".geno") } diff --git a/R/gt_as_hierfstat.R b/R/gt_as_hierfstat.R new file mode 100644 index 00000000..cb477a2f --- /dev/null +++ b/R/gt_as_hierfstat.R @@ -0,0 +1,19 @@ +#' Convert a `gen_tibble` to a data.frame compatible with `hierfstat` +#' +#' This function converts a `gen_tibble` to a data.frame formatted +#' to be used by `hierfstat` functions. +#' +#' @param x a [`gen_tibble`], with population coded as 'population' +#' @returns a data.frame with a column 'pop' and further column representing +#' the genotypes (with alleles recoded as 1 and 2) +#' @export +#' + +gt_as_hierfstat <- function(x){ + hier_df <- data.frame (pop = as.factor(x$population), show_genotypes(x)) + hier_df [hier_df ==0]<-11 + hier_df [hier_df ==1]<-12 + hier_df [hier_df ==2]<-22 + hier_df +} + diff --git a/R/gt_write_plink.R b/R/gt_as_plink.R similarity index 96% rename from R/gt_write_plink.R rename to R/gt_as_plink.R index ce4a312c..f4a2f16a 100644 --- a/R/gt_write_plink.R +++ b/R/gt_as_plink.R @@ -10,7 +10,7 @@ #' @export -gt_write_plink <- function(x, bedfile = NULL, +gt_as_plink <- function(x, bedfile = NULL, overwrite = TRUE){ if (is.null(bedfile)){ bedfile <- bigstatsr::sub_bk(attr(x$genotypes,"bigsnp")$genotypes$backingfile,".bed") diff --git a/R/gt_pca_find_cluster.R b/R/gt_cluster_pca.R similarity index 93% rename from R/gt_pca_find_cluster.R rename to R/gt_cluster_pca.R index f269ae25..36f3ad8c 100644 --- a/R/gt_pca_find_cluster.R +++ b/R/gt_cluster_pca.R @@ -7,7 +7,7 @@ #' a principal component analysis (PCA). For each model, #' several statistical measures of goodness of fit #' are computed, which allows to choose the optimal k using the function -#' [gt_pca_clust_best_k()]. +#' [gt_cluster_pca_best_k()]. #' See details for a description of how to select the optimal k #' and vignette("adegenet-dapc") for a tutorial. #' @param x a `gt_pca` object returned by one of the `gt_pca_*` functions. @@ -20,7 +20,7 @@ #' @param n_start number of starting points for kmeans (only used if `method="kmeans"`) #' @param quiet boolean on whether to silence outputting information to the #' screen (defaults to FALSE) -#' @returns a `gt_pca_clust` object, which is a subclass of `gt_pca` with +#' @returns a `gt_cluster_pca` object, which is a subclass of `gt_pca` with #' an additional element 'cluster', a list with elements: #' - 'method' the clustering method (either kmeans or ward) #' - 'n_pca' number of principal components used for clustering @@ -31,7 +31,7 @@ #' - 'groups' a list, with each element giving the group assignments for a given k #' @export -gt_pca_find_clusters <- function(x = NULL, n_pca = NULL, +gt_cluster_pca <- function(x = NULL, n_pca = NULL, k_clusters = c(1,round(nrow(x$u)/10)), method=c("kmeans","ward"), n_iter = 1e5, n_start = 10, @@ -117,7 +117,7 @@ gt_pca_find_clusters <- function(x = NULL, n_pca = NULL, names(cluster_list$groups)<-nbClust x$clusters <- cluster_list - class(x) <- c("gt_pca_clust", class(x)) + class(x) <- c("gt_cluster_pca", class(x)) return(x) } @@ -129,16 +129,16 @@ gt_pca_find_clusters <- function(x = NULL, n_pca = NULL, } -#' Autoplots for `gt_pca_clust` objects +#' Autoplots for `gt_cluster_pca` objects #' -#' For `gt_pca_clust`, `autoplot` produces a plot of a metric of choice ('BIC', +#' For `gt_cluster_pca`, `autoplot` produces a plot of a metric of choice ('BIC', #' 'AIC' or 'WSS') against the number of clusters (*k*). This plot is can be #' used to infer the best value of *k*, which corresponds to the smallest #' value of the metric (the minimum in an 'elbow' shaped curve). In some cases, #' there is not 'elbow' and the metric keeps decreasing with increasing *k*; #' in such cases, it is customary to choose the value of *k* at which the #' decrease in the metric reaches as plateau. For a programmatic way of choosing -#' *k*, use [gt_pca_clust_best_k()]. +#' *k*, use [gt_cluster_pca_best_k()]. #' #' `autoplot` produces simple plots to quickly inspect an object. They are #' not customisable; we recommend that you use `ggplot2` to produce publication @@ -149,10 +149,10 @@ gt_pca_find_clusters <- function(x = NULL, n_pca = NULL, #' 'WSS' (with sum of squares) #' @param ... not currently used. #' @returns a `ggplot2` object -#' @rdname autoplot_gt_pca +#' @rdname autoplot_gt_cluster_pca #' @export -autoplot.gt_pca_clust <- function(object, +autoplot.gt_cluster_pca <- function(object, metric = c("BIC", "AIC", "WSS"), ...) { diff --git a/R/gt_pca_best_k.R b/R/gt_cluster_pca_best_k.R similarity index 93% rename from R/gt_pca_best_k.R rename to R/gt_cluster_pca_best_k.R index 44960d57..4d00547c 100644 --- a/R/gt_pca_best_k.R +++ b/R/gt_cluster_pca_best_k.R @@ -4,7 +4,7 @@ #' It is equivalent to plotting the metric against the *k* values, and selecting #' the *k* that fulfils a given criterion (see details for an explanation of #' each criterion). This function simply adds an element 'best_k' to the -#' `gt_pca_clust` returned by [gt_pca_find_clusters()]. The choice can be +#' `gt_cluster_pca` returned by [gt_cluster_pca()]. The choice can be #' over-ridden simply by assigning a different value to that element (e.g. #' for an object x and a desired *k* of 8, simply use `x$best_k <- 8`) #' @@ -59,21 +59,21 @@ #' principal components: a new method for the analysis of genetically #' structured populations. BMC Genetics 11:94. doi:10.1186/1471-2156-11-94 #' -#' @param x a `gt_pca_clust` object obtained with [gt_pca_find_clusters()] +#' @param x a `gt_cluster_pca` object obtained with [gt_cluster_pca()] #' @param stat a statistics, one of "BIC", "AIC" or "WSS" #' @param criterion one of "diffNgroup", "min", "goesup", "smoothNgoesup", "goodfit", #' see details for a discussion of each approach. #' @param quiet boolean on whether to silence outputting information to the #' screen (defaults to FALSE) -#' @returns a 'gt_pca_clust' object with an added element 'best_k' +#' @returns a 'gt_cluster_pca' object with an added element 'best_k' #' @export -gt_pca_clust_best_k <- function(x, stat = c("BIC", "AIC", "WSS"), +gt_cluster_pca_best_k <- function(x, stat = c("BIC", "AIC", "WSS"), criterion = c("diffNgroup", "min", "goesup", "smoothNgoesup", "goodfit"), quiet=FALSE){ - if (!inherits(x, "gt_pca_clust")){ - stop("'x' should be a 'gt_pca_clusters' object generated with 'gt_pca_find_clusters()'") + if (!inherits(x, "gt_cluster_pca")){ + stop("'x' should be a 'gt_cluster_pcaers' object generated with 'gt_cluster_pca()'") } stat <- match.arg(stat) diff --git a/R/gt_dapc.R b/R/gt_dapc.R index 0da3bf0a..4ebf6482 100644 --- a/R/gt_dapc.R +++ b/R/gt_dapc.R @@ -2,7 +2,7 @@ #' #' This function implements the Discriminant Analysis of Principal Components #' (DAPC, Jombart et al. 2010). This method descibes the diversity between -#' pre-defined groups. When groups are unknown, use [gt_pca_find_clusters()] to +#' pre-defined groups. When groups are unknown, use [gt_cluster_pca()] to #' infer genetic clusters. See 'details' section for a succint #' description of the method, and the vignette in the package `adegenet` #' ("adegenet-dapc") for a @@ -29,11 +29,11 @@ #' Molecular Ecology Resources, 23, 523–538. https://doi.org/10.1111/1755-0998.13706 #' #' -#' @param x an object of class `gt_pca`, or its subclass `gt_pca_clust` +#' @param x an object of class `gt_pca`, or its subclass `gt_cluster_pca` #' @param pop either a factor indicating the group membership of individuals; -#' or an integer defining the desired *k* if x is a `gt_pca_clust`; or NULL, if -#' 'x' is a `gt_pca_clust` and contain an element 'best_k', -#' usually generated with [gt_pca_clust_best_k()], +#' or an integer defining the desired *k* if x is a `gt_cluster_pca`; or NULL, if +#' 'x' is a `gt_cluster_pca` and contain an element 'best_k', +#' usually generated with [gt_cluster_pca_best_k()], #' which will be used to select the clustering level. #' @param n_pca number of principal components to be used in the Discriminant #' Analysis. If NULL, k-1 will be used. @@ -72,13 +72,13 @@ gt_dapc <- function(x, pop = NULL, n_pca = NULL, n_da=NULL, } if(is.null(pop)) { # if no pop was given, use best_k - if (any(!inherits(x,"gt_pca_clust"),is.null(x$best_k))){ - stop("if 'pop' is not set, 'x' should be a 'gt_pca_clust ") + if (any(!inherits(x,"gt_cluster_pca"),is.null(x$best_k))){ + stop("if 'pop' is not set, 'x' should be a 'gt_cluster_pca ") } pop.fac <- as.factor(x$clusters$groups[[x$best_k]]) } else if (is.factor(pop)) { # if a factor with all assignments was given pop.fac <- pop - } else if (is.numeric(pop) & inherits(x,"gt_pca_clust")) { # if pop is the k value + } else if (is.numeric(pop) & inherits(x,"gt_cluster_pca")) { # if pop is the k value pop.fac <- as.factor(x$clusters$groups[[pop]]) } @@ -87,7 +87,7 @@ gt_dapc <- function(x, pop = NULL, n_pca = NULL, n_da=NULL, if (is.null(n_pca) ){ - if (inherits(x,"gt_pca_clust")){ # if we generated clusters, use the same pca + if (inherits(x,"gt_cluster_pca")){ # if we generated clusters, use the same pca n_pca <- x$clusters$n_pca } else { # use all principal components n_pca <- length(x$d) diff --git a/R/gt_has_imputed.R b/R/gt_has_imputed.R index 481f4769..bfb45d97 100644 --- a/R/gt_has_imputed.R +++ b/R/gt_has_imputed.R @@ -8,7 +8,10 @@ #' @export gt_has_imputed <- function (x){ - !is.null(attr(x$genotypes,"imputed")) + if (inherits(x,"gen_tbl")){ + x <- x$genotypes + } + !is.null(attr(x,"imputed")) } #' Checks if a `gen_tibble` uses imputed data @@ -21,11 +24,14 @@ gt_has_imputed <- function (x){ #' @export gt_uses_imputed <- function (x){ + if (inherits(x,"gen_tbl")){ + x <- x$genotypes + } if (!gt_has_imputed(x)){ stop("this dataset does not have any imputated values to use!") } - if (identical(attr(x$genotypes,"bigsnp")$genotypes$code256, bigsnpr::CODE_IMPUTE_PRED) | - identical(attr(x$genotypes,"bigsnp")$genotypes$code256, bigsnpr::CODE_DOSAGE)){ + if (identical(attr(x,"bigsnp")$genotypes$code256, bigsnpr::CODE_IMPUTE_PRED) | + identical(attr(x,"bigsnp")$genotypes$code256, bigsnpr::CODE_DOSAGE)){ return(TRUE) } else{ return(FALSE) @@ -44,17 +50,20 @@ gt_uses_imputed <- function (x){ #' @export gt_set_imputed <- function (x, set = NULL){ - if (is.null(set)){ + if (inherits(x,"gen_tbl")){ + x <- x$genotypes + } + if (!is.logical(set)){ stop ("set should be either TRUE (to use imputed) or FALSE (to use the raw calls") } if (!gt_has_imputed(x)){ stop("this dataset does not have imputed values to use!") } if (set==FALSE){ - attr(x$genotypes,"bigsnp")$genotypes$code256 <- bigsnpr::CODE_012 + attr(x,"bigsnp")$genotypes$code256 <- bigsnpr::CODE_012 } else { - if (attr(x$genotypes,"imputed") %in% c("simple","xgboost")){ - attr(x$genotypes,"bigsnp")$genotypes$code256 <- bigsnpr::CODE_IMPUTE_PRED + if (attr(x,"imputed") %in% c("simple","xgboost")){ + attr(x,"bigsnp")$genotypes$code256 <- bigsnpr::CODE_IMPUTE_PRED } } return(invisible(NULL)) diff --git a/R/gt_helper_functions.R b/R/gt_helper_functions.R new file mode 100644 index 00000000..bc58f58c --- /dev/null +++ b/R/gt_helper_functions.R @@ -0,0 +1,32 @@ +# internal functions that make life easier +.gt_bigsnp_cols <- function(.x){ + show_loci(.x)$big_index +} + +.gt_bigsnp_rows <- function(.x){ + vctrs::vec_data(.x$genotypes) +} + +.gt_get_bigsnp<-function(.x){ + attr(.x$genotypes,"bigsnp") +} + + +# a developer function to create various count summaries of a population, used to +# compute more complex statistics (e.g. pairwise fst, etc.). +.gt_pop_freqs <- function(.x){ + counts <- bigstatsr::big_counts( .gt_get_bigsnp(.x)$genotypes, + ind.row =.gt_bigsnp_rows(.x), + ind.col = .gt_bigsnp_cols(.x)) + sums_alt <- apply(counts,2,function(x) x[2]+2*x[3]) + n <- apply(counts,2,function(x) sum(x[1:3])*2) + sums_ref <- n - sums_alt + freq_alt <- sums_alt/n + freq_ref <- 1- freq_alt + het_obs <- apply(counts,2,function(x) x[2]/sum(x[1:3])) + return (list( + freq_alt = freq_alt, + freq_ref = freq_ref, + n = n, + het_obs = het_obs)) +} diff --git a/R/gt_ibs.R b/R/gt_ibs.R deleted file mode 100644 index cbaee66b..00000000 --- a/R/gt_ibs.R +++ /dev/null @@ -1,29 +0,0 @@ -#' Compute the Identity by State Matrix for a `gen_tibble` object -#' -#' This function computes the IBS matrix. -#' -#' Note that monomorphic sites are currently counted. Should we filter -#' them beforehand? What does plink do? -#' @param x a `gen_tibble` object. -#' @param as_counts whether the counts of similar alleles, rather than the proportion, -#' should be returned (FALSE by default). -#' @param block_size maximum number of loci read at once. More loci should improve speed, -#' but will tax memory. -#' @returns a list of two [bigstatsr::FBM] matrices, one of counts of IBS by alleles (i.e. 2*n loci), -#' and one of valid alleles (i.e. 2*n_loci - 2*missing_loci) -#' @export -gt_ibs <- function(x, - as_counts = FALSE, - block_size = bigstatsr::block_size(length(show_loci_names(x)))*2) { - - X <- attr(x$genotypes,"bigsnp") # convenient pointer - x_ind_col <- show_loci(x)$big_index - x_ind_row <- vctrs::vec_data(x$genotypes) - ibs_matrix <- snp_ibs(X$genotypes, - ind.row = x_ind_row, - ind.col = x_ind_col, - as.counts = as_counts, - block.size = block_size) - #rownames(ibs_matrix$counts_IBS) <- colnames(ibs_matrix$counts_IBS) <- x$id - ibs_matrix -} diff --git a/R/gt_load.R b/R/gt_load.R index 89d19e08..9134d063 100644 --- a/R/gt_load.R +++ b/R/gt_load.R @@ -43,10 +43,6 @@ gt_load <-function(file = NULL, reattach_to = NULL) { return(x) } -gt_get_bigsnp<-function(x){ - attr(x$genotypes,"bigsnp") -} - sub_rds <- function (path, replacement = "", stop_if_not_ext = TRUE) { diff --git a/R/gt_pca_autoSVD.R b/R/gt_pca_autoSVD.R index 492005a5..75423ba6 100644 --- a/R/gt_pca_autoSVD.R +++ b/R/gt_pca_autoSVD.R @@ -65,7 +65,7 @@ gt_pca_autoSVD <- function(x, k = 10, max_iter = 5, n_cores = 1, verbose = TRUE) { - if (gt_has_imputed(x)){ + if (gt_has_imputed(x) && gt_uses_imputed(x)==FALSE){ gt_set_imputed(x, set = TRUE) on.exit(gt_set_imputed(x, set = FALSE)) } diff --git a/R/gt_pca_partialSVD.R b/R/gt_pca_partialSVD.R index a4f18a44..6902403c 100644 --- a/R/gt_pca_partialSVD.R +++ b/R/gt_pca_partialSVD.R @@ -31,7 +31,7 @@ gt_pca_partialSVD <- function(x, k = 10, fun_scaling = bigsnpr::snp_scaleBinom() ) { - if (gt_has_imputed(x)){ + if (gt_has_imputed(x) && gt_uses_imputed(x)==FALSE){ gt_set_imputed(x, set = TRUE) on.exit(gt_set_imputed(x, set = FALSE)) } @@ -51,7 +51,7 @@ gt_pca_partialSVD <- function(x, k = 10, fun_scaling = bigsnpr::snp_scaleBinom() block.size= bigstatsr::block_size(nrow(X$genotypes))) # TODO check that this is correct and expose it, maybe creat convenience function to get the values # add names to the scores (to match them to data later) rownames(this_svd$u)<-x$id - rownames(this_svd$v) <- show_loci_names(x) + rownames(this_svd$v) <- loci_names(x) this_svd$method <- "partialSVD" this_svd$call <- match.call() class(this_svd) <- c("gt_pca", class(this_svd)) diff --git a/R/gt_pca_randomSVD.R b/R/gt_pca_randomSVD.R index 3c37512b..6126ebd8 100644 --- a/R/gt_pca_randomSVD.R +++ b/R/gt_pca_randomSVD.R @@ -52,7 +52,7 @@ gt_pca_randomSVD <- function(x, k = 10, fun_prod = bigstatsr::big_prodVec, fun_cprod = bigstatsr::big_cprodVec ) { - if (gt_has_imputed(x)){ + if (gt_has_imputed(x) && gt_uses_imputed(x)==FALSE){ gt_set_imputed(x, set = TRUE) on.exit(gt_set_imputed(x, set = FALSE)) } @@ -76,7 +76,7 @@ gt_pca_randomSVD <- function(x, k = 10, fun.cprod = fun_cprod) # TODO check that this is correct and expose it, maybe creat convenience function to get the values # add names to the scores (to match them to data later) rownames(this_svd$u)<-x$id - rownames(this_svd$v) <- show_loci_names(x) + rownames(this_svd$v) <- loci_names(x) this_svd$method <- "randomSVD" this_svd$call <- match.call() class(this_svd) <- c("gt_pca", class(this_svd)) diff --git a/R/gt_pca_tidiers.R b/R/gt_pca_tidiers.R index 796b57b2..faddf71b 100644 --- a/R/gt_pca_tidiers.R +++ b/R/gt_pca_tidiers.R @@ -174,7 +174,7 @@ augment_loci.gt_pca <- function(x, data = NULL, k= NULL, ...) { ret <- if (!missing(data) && !is.null(data)) { #check that names of the two columns are in sync # @TODO reinstate this check once we have rownames in the pca object for loadings - if (!all.equal(show_loci_names(data), rownames(as.data.frame(x$v)))){ + if (!all.equal(loci_names(data), rownames(as.data.frame(x$v)))){ stop("the loci names in 'data' do not correspond to the loci in the pca object 'x'") } show_loci(data) <- show_loci(data) %>% tibble::add_column(loadings) diff --git a/R/gt_roh_window.R b/R/gt_roh_window.R index e363223d..fc4d3d12 100644 --- a/R/gt_roh_window.R +++ b/R/gt_roh_window.R @@ -44,8 +44,10 @@ #' @examples #' # don't run the example #' if (FALSE) { -#' sheep_bed <- system.file("extdata/sheep.bed", package="tidypopgen") -#' sheep_gt <- tidypopgen::gen_tibble(sheep_bed, backingfile = tempfile(), quiet=TRUE) +#' sheep_ped <- system.file("extdata", "Kijas2016_Sheep_subset.ped", +#' package="detectRUNS") +#' sheep_gt <- tidypopgen::gen_tibble(sheep_ped, backingfile = tempfile(), +#' quiet=TRUE) #' sheep_gt <- sheep_gt %>% group_by(population) #' sheep_roh <- gt_roh_window(sheep_gt) #' detectRUNS::plot_Runs(runs = sheep_roh) @@ -85,7 +87,7 @@ gt_roh_window <- function(x, window_size = 15, threshold = 0.05, # naively process it by row (the parallelism is implemented within individual) # access time is horrible, but I don't think this is the bottleneck # it needs some profiling - X <- gt_get_bigsnp(x)$genotypes # pointer for the FBM + X <- .gt_get_bigsnp(x)$genotypes # pointer for the FBM for (i in seq_len(nrow(x))){ this_genotype <- X[i,] this_indiv <- list(FID=groups[i], IID=x$id[i]) diff --git a/R/gt_vcf_to_bed.R b/R/gt_vcf_to_bed.R deleted file mode 100644 index 68f7faab..00000000 --- a/R/gt_vcf_to_bed.R +++ /dev/null @@ -1,82 +0,0 @@ -#' Convert vcf to bed -#' -#' This function quickly converts a smallish vcf to bed. The vcf needs to be -#' read into memory and manipulated in memory, so there are some serious limits -#' to this function. PLINK is a better option for converting vcf to BED, but -#' for small datasets, it should do the job. -#' @param vcf_path the path to the vcf -#' @param bed_path the path where the bed file should be saved. If left to null, -#' the vcf path will be used by switching the file type from .vcf to .bed -#' @param quiet if TRUE, don't output information to screen -#' @param ... parameters to be passed to [vcfR::read.vcfR] -#' @returns the file path where the BED file was saved. -#' @export - -gt_vcf_to_bed <- read_vcf <- function(vcf_path, bed_path=NULL, quiet = TRUE, ...) { - - if (requireNamespace("vcfR", quietly = TRUE)) { - .x <- vcfR::read.vcfR(file = vcf_path, verbose = !quiet, ...) - # subset to biallelic loci only - bi <- vcfR::is.biallelic(.x) - if(sum(!bi) > 0){ - msg <- paste("Found", sum(!bi), "loci with more than two alleles.") - msg <- c(msg, "\n", paste("Objects of class gen_tibble only support loci with two alleles.")) - msg <- c(msg, "\n", paste(sum(!bi), 'loci will be omitted from the gen_tibble object.')) - warning(msg) - .x <- .x[bi,] - } - - # fill in any missing IDs of loci - .x <- vcfR::addID(.x) - - # create loci table - loci <- tibble(name = vcfR::getID(.x), - chromosome = vcfR::getCHROM(.x), - position = vcfR::getPOS(.x), - allele_ref = vcfR::getREF(.x), - allele_alt = vcfR::getALT(.x)) - - .x <- vcfR::extract.gt(.x) - .x[.x=="0|0"] <- 0 - .x[.x=="0|1"] <- 1 - .x[.x=="1|0"] <- 1 - .x[.x=="1|1"] <- 2 - .x[.x=="0/0"] <- 0 - .x[.x=="0/1"] <- 1 - .x[.x=="1/0"] <- 1 - .x[.x=="1/1"] <- 2 - # remove warnings about NAs - suppressWarnings(storage.mode(.x) <- "integer") - - indiv_meta <- tibble(id = colnames(.x), population = NA) - - if (is.null(bed_path)){ - bed_path <- sub_vcf(vcf_path) - } else if (file_ext(bed_path)=="bed"){ - bed_path <- bigsnpr::sub_bed(bed_path,"") - } - bed_path <- gt_write_bed_from_dfs(indiv_meta= indiv_meta, - genotypes = t(.x), - loci = loci, - path_out = bed_path) - - return(bed_path) - } else { - stop( - "to convert from vcfR objects, first install package 'vcfR' with\n", - "install.packages('vcfR')" - ) - } -} - -# this adapts bigsnpr::sub_bed to vcf -sub_vcf <- function (path, replacement = "", stop_if_not_ext = TRUE) -{ - pattern <- "\\.vcf$" - if (!grepl(pattern, path)) - stop("Path '%s' must have 'vcf' extension.", path) - if (stop_if_not_ext && (nchar(replacement) > 0) && (substr(replacement, - 1, 1) != ".")) - stop("Replacement must be an extension starting with '.' if provided.") - sub(pattern, replacement, path) -} diff --git a/R/gt_write_bed_from_dfs.R b/R/gt_write_bed_from_dfs.R deleted file mode 100644 index ac54571e..00000000 --- a/R/gt_write_bed_from_dfs.R +++ /dev/null @@ -1,43 +0,0 @@ -#' Simple function to write a plink BED file from data.frames -#' -#' This function write a bed file using information in tables with the same format -#' as they are stored in various parts of a [`gen_tibble`]. This is mostly used -#' for creating small test files, but could also be used to convert small datasets -#' manually into BED files (and the appropriate BIM and FAM companions). -#' -#' @param genotypes a matrix of genotype dosages -#' @param loci a table of loci information (as used in [`gen_tibble`]) -#' @param indiv_meta a table with 'id' and 'population' -#' @param path_out is the path and the prefix, to which '.bed', '.bim', and '.fam' -#' will be added. -#' @returns NULL it writes the files -#' @export - -gt_write_bed_from_dfs <- function(genotypes, loci, indiv_meta, path_out=NULL){ - - if (is.null(path_out)){ - stop ("path_out needs to be given") - } - if (nrow(genotypes)!=nrow(loci)){ - genotypes <- t(genotypes) - } - - bim <- genio::make_bim( n = nrow(genotypes) ) - bim$chr <- loci$chromosome - bim$id <- loci$name - bim$pos <- loci$position - # bim$posg <- loci$genetic_dist - bim$ref <- loci$allele_ref - bim$alt <- loci$allele_alt - # replace missing alleles with 0 (the plink default) - bim$alt[is.na(bim$alt)] <- "0" - - fam <- genio::make_fam(n= nrow(indiv_meta)) - fam$fam <- indiv_meta$population - fam$id <- indiv_meta$id - rownames(genotypes) <- bim$id - colnames(genotypes) <- fam$id - - genio::write_plink(path_out, genotypes, bim, fam, verbose=FALSE) - return(paste0(path_out,".bed")) -} diff --git a/R/indiv_missingness.R b/R/indiv_missingness.R index ff9bcc5e..971feaff 100644 --- a/R/indiv_missingness.R +++ b/R/indiv_missingness.R @@ -45,7 +45,7 @@ indiv_missingness.vctrs_bigSNP <- function(.x, as_counts = FALSE, ...){ ind=attr(.x,"loci")$big_index, a.combine = 'plus', rows_to_keep=rows_to_keep) if (!as_counts){ - this_row_na <- this_row_na/length(show_loci_names(.x)) + this_row_na <- this_row_na/length(loci_names(.x)) } this_row_na } diff --git a/R/indiv_qc_report.R b/R/indiv_qc_report.R deleted file mode 100644 index 7a7bac6b..00000000 --- a/R/indiv_qc_report.R +++ /dev/null @@ -1,55 +0,0 @@ -#' Create a Quality Control report for individuals -#' -#'#' Return QC information to assess loci (Observed heterozygosity and missingness). -#' -#' @param .x a [`gen_tibble`] object. -#' @param ... further arguments to pass -#' @returns a tibble with 2 elements: het_obs and missingness -#' @export -indiv_qc_report <- function(.x,...){ - indiv_qc_report <- .x %>% reframe(het_obs = indiv_het_obs(.x), - missingness = indiv_missingness(.x,as_counts=FALSE)) - class(indiv_qc_report) <- c("indiv_qc_report",class(indiv_qc_report)) - indiv_qc_report -} - -#' @export -autoplot.indiv_qc_report <- function(object, type = c("scatter"),miss_threshold = NULL, ...){ - - rlang::check_dots_empty() - - miss_threshold <- if(is.null(miss_threshold)){ - 0.05 - } else { - miss_threshold - } - - type <- match.arg(type) - - if (type == "scatter") { - final_plot <- autoplot_indiv_qc_report(object,miss_threshold) - } else { - stop("Invalid type argument. Please choose 'scatter'") - } - - return(final_plot) - -} - - -autoplot_indiv_qc_report <- function(object, miss_threshold = miss_threshold){ - - miss_threshold <- miss_threshold - - mean_val <- mean(object$het_obs) - sd_val <- stats::sd(object$het_obs) - - upper <- mean_val + 3*(sd_val) - lower <- mean_val - 3*(sd_val) - - mid_upper <- mean_val + 2*(sd_val) - mid_lower <- mean_val - 2*(sd_val) - - final_plot <- ggplot2::ggplot(object,ggplot2::aes(x=.data$missingness,y=.data$het_obs))+ggplot2::geom_point()+ggplot2::labs(x="Missingness",y="Observed Heterozygosity",title="Heterozygosity and missingness by individual")+ ggplot2::geom_vline(xintercept= miss_threshold, lty=2, col="red")+ggplot2::geom_hline(yintercept = c(upper,lower,mid_upper,mid_lower),lty=2,col="blue") - -} diff --git a/R/loci_chromosomes.R b/R/loci_chromosomes.R new file mode 100644 index 00000000..c04ea7b9 --- /dev/null +++ b/R/loci_chromosomes.R @@ -0,0 +1,28 @@ +#' Get the chromosomes of loci in a `gen_tibble` +#' +#' Extract the loci chromosomes from a `gen_tibble` (or directly from its `genotype` +#' column). +#' @param .x a [`gen_tibble`], or a vector of class `vctrs_bigSNP` (usually the `genotype` column of +#' a [`gen_tibble`] object). +#' @param ... currently unused. +#' @returns a character vector of chromosomes +#' @rdname loci_chromosomes +#' @export +loci_chromosomes <- function(.x, ...) { + UseMethod("loci_chromosomes", .x) +} + +#' @export +#' @rdname loci_chromosomes +loci_chromosomes.tbl_df <- function(.x, ...){ + stopifnot_gen_tibble(.x) + # extract the column and hand it over to its method + loci_chromosomes(.x$genotypes) +} + +#' @export +#' @rdname loci_chromosomes +loci_chromosomes.vctrs_bigSNP <- function(.x, ...){ + rlang::check_dots_empty() + attr(.x,"loci")$chromosome +} diff --git a/R/loci_ld_clump.R b/R/loci_ld_clump.R index 6b3290eb..28cff682 100644 --- a/R/loci_ld_clump.R +++ b/R/loci_ld_clump.R @@ -6,10 +6,7 @@ #' spread of SNPs over the chromosome. #' #' Any missing values in the genotypes of a `gen_tibble` passed to `loci_ld_clump` -#' will cause an error. To deal with missingness, see `gt_impute_simple`. -#' -#' TODO we should really return a boolean rather than indices, so that it can -#' be easily used with `select_loci_if` +#' will cause an error. To deal with missingness, see [gt_impute_simple()]. #' #' @param .x a [`gen_tibble`] object #' @param thr_r2 Threshold over the squared correlation between two SNPs. @@ -31,8 +28,12 @@ #' can be used to exclude long-range LD regions (see Price2008). Another use #' can be for thresholding with respect to p-values associated with `S`. #' @param n_cores number of cores to be used +#' @param return_id boolean on whether the id of SNPs to keep should be returned. +#' It defaults to FALSE, which returns a vector of booleans (TRUE or FALSE) #' @param ... currently not used. -#' @return a vector of snp indices to be kept +#' @return a boolean vector indicating whether the SNP should be kept (if +#' 'return_id = FALSE', the default), else a vector of SNP indices to be kept (if +#' 'return_id = TRUE') #' @rdname loci_ld_clump #' @export loci_ld_clump <- function(.x, ...) { @@ -44,6 +45,7 @@ loci_ld_clump <- function(.x, ...) { loci_ld_clump.tbl_df <- function(.x, ...) { #TODO this is a hack to deal with the class being dropped when going through group_map stopifnot_gen_tibble(.x) + loci_ld_clump(.x$genotypes, ...) } @@ -57,9 +59,16 @@ loci_ld_clump.vctrs_bigSNP <- function(.x, exclude = NULL, use_positions = TRUE, n_cores = 1, + return_id = FALSE, ...) { rlang::check_dots_empty() + + if (gt_has_imputed(.x) && gt_uses_imputed(.x)==FALSE){ #but not uses_imputed + gt_set_imputed(.x, set = TRUE) + on.exit(gt_set_imputed(.x, set = FALSE)) + } + # get the FBM geno_fbm <- attr(.x,"bigsnp")$genotypes # rows (individuals) that we want to use @@ -88,9 +97,14 @@ loci_ld_clump.vctrs_bigSNP <- function(.x, size = size, exclude = exclude, ncores = n_cores) - warning("this is yet to be tested!!!") - match(snp_clump_ids, show_loci(.x)$big_index) - ## @TODO test that this works as expected + to_keep_id <- match(snp_clump_ids, show_loci(.x)$big_index) + if (return_id){ + to_keep_id + } else { + keep_bool <- rep(FALSE,count_loci(.x)) + keep_bool[to_keep_id]<-TRUE + keep_bool + } } #' @export diff --git a/R/show_loci_names.R b/R/loci_names.R similarity index 59% rename from R/show_loci_names.R rename to R/loci_names.R index 083acc7e..f259bd49 100644 --- a/R/show_loci_names.R +++ b/R/loci_names.R @@ -1,4 +1,4 @@ -#' Show the loci names of a `gen_tibble` +#' Get the names of loci in a `gen_tibble` #' #' Extract the loci names from a `gen_tibble` (or directly from its `genotype` #' column). @@ -7,23 +7,23 @@ #' or a [`gen_tibble`]. #' @param ... currently unused. #' @returns a character vector of names -#' @rdname show_loci_names +#' @rdname loci_names #' @export -show_loci_names <- function(.x, ...) { - UseMethod("show_loci_names", .x) +loci_names <- function(.x, ...) { + UseMethod("loci_names", .x) } #' @export -#' @rdname show_loci_names -show_loci_names.tbl_df <- function(.x, ...){ +#' @rdname loci_names +loci_names.tbl_df <- function(.x, ...){ stopifnot_gen_tibble(.x) # extract the column and hand it over to its method - show_loci_names(.x$genotypes) + loci_names(.x$genotypes) } #' @export -#' @rdname show_loci_names -show_loci_names.vctrs_bigSNP <- function(.x, ...){ +#' @rdname loci_names +loci_names.vctrs_bigSNP <- function(.x, ...){ rlang::check_dots_empty() attr(.x,"loci")$name } diff --git a/R/pairwise_allele_sharing.R b/R/pairwise_allele_sharing.R new file mode 100644 index 00000000..84211853 --- /dev/null +++ b/R/pairwise_allele_sharing.R @@ -0,0 +1,31 @@ +#' Compute the Pairwise Allele Sharing Matrix for a `gen_tibble` object +#' +#' This function computes the Allele Sharing matrix. +#' Estimates Allele Sharing (matching in `hierfstat`)) between pairs of individuals +#' (for each locus, gives 1 if the two individuals are homozygous +#' for the same allele, 0 if they are homozygous for a different allele, and 1/2 if at least one individual +#' is heterozygous. Matching is the average of these 0, 1/2 and 1s) +#' +#' @param x a `gen_tibble` object. +#' @param as_matrix boolean, determining whether the results should be a square symmetrical matrix (TRUE), +#' or a tidied tibble (FALSE, the default) +#' @param block_size maximum number of loci read at once. More loci should improve speed, +#' but will tax memory. +#' @returns a matrix of allele sharing between all pairs of individuals +#' @export +pairwise_allele_sharing <- function(x, as_matrix=FALSE, + block_size = bigstatsr::block_size(count_loci(x))) { + X <- attr(x$genotypes,"bigsnp") # convenient pointer + x_ind_col <- .gt_bigsnp_cols(x) + x_ind_row <- .gt_bigsnp_rows(x) + ashare_matrix <- snp_allele_sharing(X$genotypes, + ind.row = x_ind_row, + ind.col = x_ind_col, + block.size = block_size) + dimnames(ashare_matrix)<-list(x$id, x$id) + if (as_matrix){ + return(ashare_matrix) + } else { + return(tidy_dist_matrix(ashare_matrix)) + } +} diff --git a/R/pairwise_ibs.R b/R/pairwise_ibs.R new file mode 100644 index 00000000..521656f0 --- /dev/null +++ b/R/pairwise_ibs.R @@ -0,0 +1,47 @@ +#' Compute the Identity by State Matrix for a `gen_tibble` object +#' +#' This function computes the IBS matrix. +#' +#' Note that monomorphic sites are currently counted. Should we filter +#' them beforehand? What does plink do? +#' @param x a `gen_tibble` object. +#' @param as_matrix boolean, determining whether the results should be a square symmetrical matrix (TRUE), +#' or a tidied tibble (FALSE, the default) +#' @param type one of "proportion" (equivalent to "ibs" in PLINK), "adjusted_counts" ("distance" in PLINK), +#' and "raw_counts" (the counts of identical alleles and non-missing alleles, from which the two other quantities are computed) +#' @param block_size maximum number of loci read at once. More loci should improve speed, +#' but will tax memory. +#' @returns a [bigstatsr::FBM] of proportion or adjusted counts, or a list of +#' two [bigstatsr::FBM] matrices, one of counts of IBS by alleles, +#' and one of number of valid alleles (i.e. 2*n_loci - 2*missing_loci) +#' @export +pairwise_ibs <- function(x, as_matrix = FALSE, + type = c("proportion","adjusted_counts","raw_counts"), + block_size = bigstatsr::block_size(count_loci(x))) { + type <- match.arg(type) + X <- attr(x$genotypes,"bigsnp") # convenient pointer + x_ind_col <- show_loci(x)$big_index + x_ind_row <- vctrs::vec_data(x$genotypes) + ibs_matrix <- snp_ibs(X$genotypes, + ind.row = x_ind_row, + ind.col = x_ind_col, + type = type, + block.size = block_size) + #dimnames(ibs_matrix)<-list(x$id, x$id) + if (inherits(ibs_matrix,"matrix")){ + dimnames(ibs_matrix)<-list(x$id, x$id) + } else { # else if we have a list of two count matrices + attr(ibs_matrix[[1]],"indiv_names") <- x$id + attr(ibs_matrix[[2]],"indiv_names") <- x$id + } + + if(type == "proportion"|type == "adjusted_counts"){ + if (as_matrix){ + return(ibs_matrix) + } else { + return(tidy_dist_matrix(ibs_matrix)) + } + } + + ibs_matrix +} diff --git a/R/gt_king.R b/R/pairwise_king.R similarity index 67% rename from R/gt_king.R rename to R/pairwise_king.R index 530c5716..c2390862 100644 --- a/R/gt_king.R +++ b/R/pairwise_king.R @@ -4,11 +4,13 @@ #' #' Note that monomorphic sites are currently considered. What does PLINK do??? #' @param x a `gen_tibble` object. +#' @param as_matrix boolean, determining whether the results should be a square symmetrical matrix (TRUE), +#' or a tidied tibble (FALSE, the default) #' @param block_size maximum number of loci read at once. More loci should improve speed, #' but will tax memory. #' @export -gt_king <- function(x, - block_size = bigstatsr::block_size(length(show_loci_names(x)))) { +gt_king <- function(x, as_matrix = FALSE, + block_size = bigstatsr::block_size(length(loci_names(x)))) { X <- attr(x$genotypes,"bigsnp") # convenient pointer x_ind_col <- show_loci(x)$big_index @@ -17,6 +19,11 @@ gt_king <- function(x, ind.row = x_ind_row, ind.col = x_ind_col, block.size = block_size) - rownames(king_matrix) <- colnames(king_matrix) <- x$id - king_matrix + dimnames(king_matrix)<-list(x$id, x$id) + if (as_matrix){ + return(king_matrix) + } else { + return(tidy_dist_matrix(king_matrix)) + } + } diff --git a/R/pairwise_pop_fst.R b/R/pairwise_pop_fst.R new file mode 100644 index 00000000..46f7d14b --- /dev/null +++ b/R/pairwise_pop_fst.R @@ -0,0 +1,261 @@ +#' Compute pairwise population Fst +#' +#' This function computes pairwise Fst. The following methods are implemented: +#' - 'Hudson': Hudson's formulation, as derived in Bhatia et al (2013) for diploids. +#' - 'Nei86' : Gst according to Nei (1986), as derived in Bhatia et al (2013) for diploids. +#' - 'Nei87' : Fst according to Nei (1987) - this is equivalent to `hierfstat::pairwise.neifst()`, +#' and includes the correction for heterozygosity when computing Ht +#' - 'WC84' : Weir and Cockerham (1984), as derived in Bhatia et al (2013) for diploids. +#' +#' For all formulae, the genome wide estimate is obtained by taking the ratio of the mean +#' numerators and denominators over all relevant SNPs. +#' +#' @references Bhatia G, Patterson N, Sankararaman S, Price AL. Estimating and Interpreting +#' FST: The Impact of Rare Variants. Genome Research. 2013;23(9):1514–1521. +#' +#' Nei, M. (1987) Molecular Evolutionary Genetics. Columbia University Press +#' +#' @param .x a grouped [`gen_tibble`] (as obtained by using [dplyr::group_by()]) +#' @param by_locus boolean, determining whether Fst should be returned by locus(TRUE), +#' or as a single genome wide value obtained by taking the ratio of the mean numerator +#' and denominator (FALSE, the default). +#' @param method one of 'Hudson', 'Nei86', 'Nei87', and 'WC84' +#' @returns a tibble of genome-wide pairwise Fst values with each pairwise combination +#' as a row if "by_locus=FALSE", else +#' a list including the tibble of genome-wide values as well as a matrix with pairwise +#' Fst by locus with loci as rows and and pairwise +#' combinations as columns. +#' a matrix +#' @export + + +# #' @param tidy boolean whether to return a tidy tibble. Default is TRUE, FALSE +# #' returns a matrix. THIS IS NOT IMPLEMENT YET. + + +pairwise_pop_fst <- function(.x, by_locus=FALSE, method= c("Hudson","Nei87","Nei86","WC84")){ + if (!inherits(.x,"grouped_df")){ + stop (".x should be a grouped df") + } + method <- match.arg(method) + if (method=="Hudson"){ + pairwise_pop_fst_hudson(.x=.x, by_locus=by_locus) + } else if (method=="Nei87"){ + pairwise_pop_fst_nei87(.x=.x, by_locus=by_locus) + } else if (method=="Nei86"){ + pairwise_pop_fst_nei86(.x=.x, by_locus=by_locus) + } else if (method=="WC84"){ + pairwise_pop_fst_wc84(.x=.x, by_locus=by_locus) + } +} + +pairwise_pop_fst_hudson <- function(.x, by_locus=FALSE){ + + message("this function is not properly tested yet!!!") + message("if you have time, test the results against something like hierfstat and create a unit test") + # get the populations + .group_levels = .x %>% group_keys() + # create all combinations + pairwise_combn <- utils::combn(nrow(.group_levels),2) + # vector and matrix to store Fst for total and by locus + Fst_tot <- rep(NA_real_, ncol(pairwise_combn)) + if (by_locus){ + Fst_locus <- matrix(NA_real_, nrow = count_loci(.x), ncol = ncol(pairwise_combn)) + } + # summarise population frequencies + pop_freqs_df <- group_map(.x, .f=~.gt_pop_freqs(.x)) + for (i_col in seq_len(ncol(pairwise_combn))){ + pop1 <- pairwise_combn[1,i_col] + pop2 <- pairwise_combn[2,i_col] + + numerator <- (pop_freqs_df[[pop1]]$freq_alt-pop_freqs_df[[pop2]]$freq_alt)^2 - + (pop_freqs_df[[pop1]]$freq_alt*pop_freqs_df[[pop1]]$freq_ref)/ (pop_freqs_df[[pop1]]$n -1) - + (pop_freqs_df[[pop2]]$freq_alt*pop_freqs_df[[pop2]]$freq_ref)/ (pop_freqs_df[[pop2]]$n -1) + denominator <- pop_freqs_df[[pop1]]$freq_alt * pop_freqs_df[[pop2]]$freq_ref + + pop_freqs_df[[pop2]]$freq_alt * pop_freqs_df[[pop1]]$freq_ref + if (by_locus){ + Fst_locus[,i_col] = numerator/denominator + } + Fst_tot[i_col]<-mean(numerator)/mean(denominator) + } + # format nicely the objects + group_combinations <- cbind(.group_levels[pairwise_combn[1,],],.group_levels[pairwise_combn[2,],]) + names(group_combinations) <- c(paste0(dplyr::group_vars(.x),"_1"),paste0(dplyr::group_vars(.x),"_2")) + Fst_tot <- tibble::tibble(group_combinations,value=Fst_tot) + if (by_locus){ + rownames(Fst_locus)<-loci_names(.x) + colnames(Fst_locus)<- apply(group_combinations,1,function(x)paste(x,collapse = ".")) + } + if (by_locus){ + return(list(Fst_by_locus = Fst_locus, Fst = Fst_tot)) + } else{ + return(Fst_tot) + } +} + + + + +# the implementation for Nei 87, adapted from hierfstat +pairwise_pop_fst_nei87 <- function(.x, by_locus = FALSE){ + # get the populations + .group_levels = .x %>% group_keys() + # create all combinations + pairwise_combn <- utils::combn(nrow(.group_levels),2) + # vector and matrix to store Fst for total and by locus + Fst_tot <- rep(NA_real_, ncol(pairwise_combn)) + if (by_locus){ + Fst_locus <- matrix(NA_real_, nrow = count_loci(.x), ncol = ncol(pairwise_combn)) + } + # summarise population frequencies + pop_freqs_df <- group_map(.x, .f=~.gt_pop_freqs(.x)) + for (i_col in seq_len(ncol(pairwise_combn))){ + pop1 <- pairwise_combn[1,i_col] + pop2 <- pairwise_combn[2,i_col] + + n <-cbind(pop_freqs_df[[pop1]]$n,pop_freqs_df[[pop2]]$n)/2 + sHo <-cbind(pop_freqs_df[[pop1]]$het_obs,pop_freqs_df[[pop2]]$het_obs) + mHo <- apply(sHo, 1, mean, na.rm = TRUE) + freq_alt <- cbind(pop_freqs_df[[pop1]]$freq_alt, pop_freqs_df[[pop2]]$freq_alt) + freq_ref <- cbind(pop_freqs_df[[pop1]]$freq_ref, pop_freqs_df[[pop2]]$freq_ref) + + # sum of squared frequencies + sp2 <- freq_alt^2+freq_ref^2 + Hs <- (1 - sp2 - sHo/2/n) + Hs <- n/(n - 1) * Hs + np <- apply(n, 1, fun <- function(x) sum(!is.na(x))) + # mean sample size over the populations + mn <- apply(n, 1, fun <- function(x) { + sum(!is.na(x))/sum(1/x[!is.na(x)]) + }) + # mean sum of square frequencies + msp2 <- apply(sp2, 1, mean, na.rm = TRUE) + mp2 <- rowMeans(freq_alt)^2+rowMeans(freq_ref)^2 + mHs <- mn/(mn - 1) * (1 - msp2 - mHo/2/mn) + Ht <- 1 - mp2 + mHs/mn/np - mHo/2/mn/np + + Dst <- Ht - mHs + Dstp <- np/(np - 1) * Dst + Htp = mHs + Dstp + if (by_locus){ + Fst_locus[,i_col] = Dstp/Htp + } + Fst_tot[i_col]<-mean(Dstp)/mean(Htp) + } + # format nicely the objects + group_combinations <- cbind(.group_levels[pairwise_combn[1,],],.group_levels[pairwise_combn[2,],]) + names(group_combinations) <- c(paste0(dplyr::group_vars(.x),"_1"),paste0(dplyr::group_vars(.x),"_2")) + Fst_tot <- tibble::tibble(group_combinations,value=Fst_tot) + if (by_locus){ + rownames(Fst_locus)<-loci_names(.x) + colnames(Fst_locus)<- apply(group_combinations,1,function(x)paste(x,collapse = ".")) + } + if (by_locus){ + return(list(Fst_by_locus = Fst_locus, Fst = Fst_tot)) + } else{ + return(Fst_tot) + } +} + + +# based on the formula in Bhatia 2013 +pairwise_pop_fst_wc84 <- function(.x, by_locus=FALSE){ + + message("this function is not properly tested yet!!!") + message("if you have time, test the results against something like hierfstat and create a unit test") + # get the populations + .group_levels = .x %>% group_keys() + # create all combinations + pairwise_combn <- utils::combn(nrow(.group_levels),2) + # vector and matrix to store Fst for total and by locus + Fst_tot <- rep(NA_real_, ncol(pairwise_combn)) + if (by_locus){ + Fst_locus <- matrix(NA_real_, nrow = count_loci(.x), ncol = ncol(pairwise_combn)) + } + # summarise population frequencies + pop_freqs_df <- group_map(.x, .f=~.gt_pop_freqs(.x)) + for (i_col in seq_len(ncol(pairwise_combn))){ + pop1 <- pairwise_combn[1,i_col] + pop2 <- pairwise_combn[2,i_col] + n1 <- pop_freqs_df[[pop1]]$n + n2 <- pop_freqs_df[[pop2]]$n + p1 <- pop_freqs_df[[pop1]]$freq_alt + p2 <- pop_freqs_df[[pop2]]$freq_alt + q1 <- pop_freqs_df[[pop1]]$freq_ref + q2 <- pop_freqs_df[[pop2]]$freq_ref + a <- (n1*n2)/(n1+n2) + b <- (1/(n1+n2-2))*((n1*p1*q1)+(n2*p2*q2)) + c <- (p1-p2)^2 + numerator <- 2*a*b + denominator <- a*c+(2*a-1)*b + if (by_locus){ + Fst_locus[,i_col] = 1-numerator/denominator + } + Fst_tot[i_col]<-1-mean(numerator)/mean(denominator) + } + # format nicely the objects + group_combinations <- cbind(.group_levels[pairwise_combn[1,],],.group_levels[pairwise_combn[2,],]) + names(group_combinations) <- c(paste0(dplyr::group_vars(.x),"_1"),paste0(dplyr::group_vars(.x),"_2")) + Fst_tot <- tibble::tibble(group_combinations,value=Fst_tot) + if (by_locus){ + rownames(Fst_locus)<-loci_names(.x) + colnames(Fst_locus)<- apply(group_combinations,1,function(x)paste(x,collapse = ".")) + } + if (by_locus){ + return(list(Fst_by_locus = Fst_locus, Fst = Fst_tot)) + } else{ + return(Fst_tot) + } +} + +# based on the formula in Bhatia 2013 +pairwise_pop_fst_nei86 <- function(.x, by_locus=FALSE){ + + message("this function is not properly tested yet!!!") + message("if you have time, test the results against something like hierfstat and create a unit test") + # get the populations + .group_levels = .x %>% group_keys() + # create all combinations + pairwise_combn <- utils::combn(nrow(.group_levels),2) + # vector and matrix to store Fst for total and by locus + Fst_tot <- rep(NA_real_, ncol(pairwise_combn)) + if (by_locus){ + Fst_locus <- matrix(NA_real_, nrow = count_loci(.x), ncol = ncol(pairwise_combn)) + } + # summarise population frequencies + pop_freqs_df <- group_map(.x, .f=~.gt_pop_freqs(.x)) + for (i_col in seq_len(ncol(pairwise_combn))){ + pop1 <- pairwise_combn[1,i_col] + pop2 <- pairwise_combn[2,i_col] + p1 <- pop_freqs_df[[pop1]]$freq_alt + p2 <- pop_freqs_df[[pop2]]$freq_alt + pbar <- (p1+p2)/2 + numerator <- ((p1-p2)^2) + denominator <- (2*pbar*(1-pbar)) + if (by_locus){ + Fst_locus[,i_col] = numerator/denominator + } + Fst_tot[i_col]<-mean(numerator)/mean(denominator) + } + # format nicely the objects + group_combinations <- cbind(.group_levels[pairwise_combn[1,],],.group_levels[pairwise_combn[2,],]) + names(group_combinations) <- c(paste0(dplyr::group_vars(.x),"_1"),paste0(dplyr::group_vars(.x),"_2")) + Fst_tot <- tibble::tibble(group_combinations,value=Fst_tot) + if (by_locus){ + rownames(Fst_locus)<-loci_names(.x) + colnames(Fst_locus)<- apply(group_combinations,1,function(x)paste(x,collapse = ".")) + } + if (by_locus){ + return(list(Fst_by_locus = Fst_locus, Fst = Fst_tot)) + } else{ + return(Fst_tot) + } +} + + + +## use tidyr::pivot_wider to turn into a matrix if that's what is requested. + + + + diff --git a/R/pop_fis.R b/R/pop_fis.R new file mode 100644 index 00000000..268dcc9a --- /dev/null +++ b/R/pop_fis.R @@ -0,0 +1,30 @@ +#' Compute population specific FIS +#' +#' This function computes population specific FIS (as computed by [hierfstat::fis.dosage()]). +#' @param .x a grouped [`gen_tibble`] (as obtained by using [dplyr::group_by()]) +#' @param include_global boolean determining whether, besides the population specific fis, a global +#' fis should be appended. Note that this will return a vector of n populations plus 1 (the global value) +#' @param allele_sharing_mat optional, the matrix of Allele Sharing returned by +#' [pairwise_allele_sharing()] with `as_matrix=TRUE`. As a number of statistics can be +#' derived from the Allele Sharing matrix, +#' it it sometimes more efficient to pre-compute this matrix. +#' @returns a vector of population specific fis (plus the global value if `include_global=TRUE`) +#' @export + +pop_fis <- function(.x, include_global=FALSE, allele_sharing_mat = NULL){ + if (!inherits(.x,"grouped_df")){ + stop (".x should be a grouped df") + } + if (is.null(allele_sharing_mat)){ + allele_sharing_mat <- pairwise_allele_sharing(.x, as_matrix = TRUE) + } + fis_by_pop <- hierfstat::fis.dosage(allele_sharing_mat, + matching=TRUE, + pop=group_indices(.x)) + names(fis_by_pop) <- c(dplyr::group_keys(.x) %>% pull(1),"global") + if (include_global){ + return(fis_by_pop) + } else { + return(fis_by_pop[-length(fis_by_pop)]) + } +} diff --git a/R/pop_fst.R b/R/pop_fst.R new file mode 100644 index 00000000..99e84280 --- /dev/null +++ b/R/pop_fst.R @@ -0,0 +1,29 @@ +#' Compute population specific Fst +#' +#' This function computes population specific Fst (as computed by [hierfstat::fst.dosage()]). +#' @param .x a grouped [`gen_tibble`] (as obtained by using [dplyr::group_by()]) +#' @param include_global boolean determining whether, besides the population specific Fst, a global +#' Fst should be appended. Note that this will return a vector of n populations plus 1 (the global value) +#' @param allele_sharing_mat optional, the matrix of Allele Sharing returned by +#' [pairwise_allele_sharing()] with `as_matrix=TRUE`. As a number of statistics can be +#' derived from the Allele Sharing matrix, +#' @returns a vector of population specific Fst (plus the global value if `include_global=TRUE`) +#' @export + +pop_fst <- function(.x, include_global=FALSE, allele_sharing_mat = NULL){ + if (!inherits(.x,"grouped_df")){ + stop (".x should be a grouped df") + } + if (is.null(allele_sharing_mat)){ + allele_sharing_mat <- pairwise_allele_sharing(.x, as_matrix = TRUE) + } + fst_by_pop <- hierfstat::fst.dosage(allele_sharing_mat, + matching=TRUE, + pop=group_indices(.x)) + names(fst_by_pop) <- c(dplyr::group_keys(.x) %>% pull(1),"global") + if (include_global){ + return(fst_by_pop) + } else { + return(fst_by_pop[-length(fst_by_pop)]) + } +} diff --git a/R/pop_pairwise_fst.R b/R/pop_pairwise_fst.R deleted file mode 100644 index 2b38af9f..00000000 --- a/R/pop_pairwise_fst.R +++ /dev/null @@ -1,71 +0,0 @@ -#' Compute pairwise Hudson Fst -#' -#' This function computes pairwise Fst using the formulation by Hudson. -#' @param .x a grouped [`gen_tibble`] (as obtained by using [dplyr::group_by()]) -#' @param by_locus boolean, determining whether Fst should be returned by locus(TRUE), -#' or as a single genome wide value obtained by taking the ratio of the mean numerator -#' and denominator (FALSE, the default). -#' @returns a tibble with each pairwise combination as a row -#' @export - -pop_pairwise_fst <- function(.x, by_locus=FALSE){ - if (!inherits(.x,"grouped_df")){ - stop (".x should be a grouped df") - } - message("this function is not properly tested yet!!!") - message("if you have time, test the results against something like hierfstat and create a unit test") - # check matrix(unlist(z, use.names = FALSE), ncol = 10, byrow = TRUE) - # is known to be faster than do.call(rbind,f) - # see https://stackoverflow.com/questions/13224553/how-to-convert-a-huge-list-of-vector-to-a-matrix-more-efficiently - # do not modify the approach used below: - n_loci <- nrow(show_loci(.x)) - # sum alt alleles over each locus in each group - sums <- matrix(unlist(.x %>% - loci_sums(), - use.names = FALSE), ncol = n_loci, byrow = TRUE) - # get the total number of alleles (i.e. removing NAs) for each locus in each group - n_missing <- matrix(unlist(.x %>% - loci_missingness(as_counts=TRUE), - use.names = FALSE), ncol = n_loci, byrow = TRUE) - n_ind <- (.x %>% tally() %>% pull(.data$n)) # number of individuals per population - - n_alleles <- sweep(-n_missing,1,n_ind, FUN = "+")*2 - # function to compute het by row - het_exp_by_row <- function(i, sums, n){(sums[i,]*(n[i,]-sums[i,]))/(n[i,]*(n[i,]-1))} - # get het at each locus for each population - het <- matrix(unlist(lapply(1:nrow(sums), het_exp_by_row, sums, n_alleles), - use.names = FALSE), ncol = n_loci, byrow = TRUE) - # get the grouping column, and create all pairwise combination of indices - .group_levels = .x %>% group_keys() - pairwise_combn <- t(utils::combn(nrow(.group_levels),2)) - numerator <- matrix(NA_real_, nrow = nrow(pairwise_combn), ncol = n_loci) - denominator <- matrix(NA_real_, nrow = nrow(pairwise_combn), ncol = n_loci) - for (i_row in seq_len(nrow(pairwise_combn))){ - pop1 <- pairwise_combn[i_row,1] - pop2 <- pairwise_combn[i_row,2] - numerator[i_row,] <- (sums[pop1,]/n_alleles[pop1,] - sums[pop2,]/n_alleles[pop2,])^2 - - het[pop1,]/n_alleles[pop1,] - het[pop2,]/n_alleles[pop2,] - denominator[i_row,] <- numerator[i_row,] + het[pop1,] + het[pop2,] - } - - # if we want whole genome level estimates - fst <- tibble(!!paste0(names(.group_levels),"_",1) := .group_levels[pairwise_combn[,1],1] %>% pull(1), - !!(paste0(names(.group_levels),"_",2)) := .group_levels[pairwise_combn[,2],1] %>% pull(1)) - if (!by_locus){ - fst_wg_by_row <- function(i, numerator, denominator){ - return(sum(numerator[i,],na.rm=TRUE)/sum(denominator[i,],na.rm=TRUE)) - } - fst <- fst %>% mutate(value = unlist(lapply(seq_len(nrow(fst)),fst_wg_by_row, numerator, denominator))) - - return(fst) - } else { - # if we want estimates by locus - fst_by_row <- function(i, numerator, denominator){ - return(numerator[i,]/denominator[i,]) - } - fst_vals <- matrix(unlist(lapply(seq_len(nrow(numerator)),fst_by_row, numerator, denominator), - use.names = FALSE), ncol = n_loci, byrow = TRUE) - colnames(fst_vals) <- show_loci_names(.x) - return(fst %>% cbind(fst_vals)) - } -} diff --git a/R/qc_report_indiv.R b/R/qc_report_indiv.R new file mode 100644 index 00000000..66f37ea5 --- /dev/null +++ b/R/qc_report_indiv.R @@ -0,0 +1,137 @@ +#' Create a Quality Control report for individuals +#' +#'#' Return QC information to assess loci (Observed heterozygosity and missingness). +#' +#' @param .x a [`gen_tibble`] object. +#' @param kings_threshold an optional numeric, a threshold of relatedness for the sample +#' @param ... further arguments to pass +#' @returns a tibble with 2 elements: het_obs and missingness +#' @export + + +qc_report_indiv <- function(.x, kings_threshold = NULL, ...){ + rlang::check_dots_empty() + + if(is.null(kings_threshold)){ + qc_report_indiv <- .x %>% reframe(het_obs = indiv_het_obs(.x), + missingness = indiv_missingness(.x,as_counts=FALSE)) + } else { + + king <- gt_king(.x, as_matrix = TRUE) + + relatives <- filter_high_relatedness(matrix = king, .x = .x, kings_threshold = kings_threshold,...) + + qc_report_indiv <- .x %>% reframe(het_obs = indiv_het_obs(.x), + missingness = indiv_missingness(.x,as_counts=FALSE)) + qc_report_indiv$to_keep <- relatives[[3]] + qc_report_indiv$id <- .x$id + attr(qc_report_indiv$to_keep, "king") <- king + + } + + class(qc_report_indiv) <- c("qc_report_indiv",class(qc_report_indiv)) + qc_report_indiv +} + + +#' Autoplots for `qc_report_indiv` objects +#' +#' For `qc_report_indiv`, the following types of plots are available: +#' - `scatter`: a plot of missingness and observed heterozygosity within +#' individuals. +#' - `relatedness`: a histogram of paired kinship coefficients +#' +#' `autoplot` produces simple plots to quickly inspect an object. They are +#' not customisable; we recommend that you use `ggplot2` to produce publication +#' ready plots. +#' +#' @param object an object of class `qc_report_indiv` +#' @param type the type of plot (`scatter`) +#' @param miss_threshold a threshold for the accepted rate of missingness within +#' individuals +#' @param kings_threshold an optional numeric, a threshold of relatedness for the sample +#' @param ... not currently used. +#' @returns a `ggplot2` object +#' @export +autoplot.qc_report_indiv <- function(object, type = c("scatter", "relatedness"),miss_threshold = NULL, kings_threshold = kings_threshold, ...){ + + rlang::check_dots_empty() + + miss_threshold <- if(is.null(miss_threshold)){ + 0.05 + } else { + miss_threshold + } + + type <- match.arg(type) + + if (type == "scatter") { + final_plot <- autoplot_qc_report_indiv(object,miss_threshold) + } else if (type == "relatedness") { + final_plot <- autoplot_qc_report_indiv_king(object,kings_threshold) + } else { + stop("Invalid type argument. Please choose from 'scatter' or 'relatedness'") + } + + return(final_plot) + +} + +autoplot_qc_report_indiv <- function(object, miss_threshold = miss_threshold){ + + miss_threshold <- miss_threshold + + mean_val <- mean(object$het_obs) + sd_val <- stats::sd(object$het_obs) + + upper <- mean_val + 3*(sd_val) + lower <- mean_val - 3*(sd_val) + + mid_upper <- mean_val + 2*(sd_val) + mid_lower <- mean_val - 2*(sd_val) + + final_plot <- ggplot2::ggplot(object,ggplot2::aes(x=.data$missingness,y=.data$het_obs))+ggplot2::geom_point()+ggplot2::labs(x="Missingness",y="Observed Heterozygosity",title="Heterozygosity and missingness by individual")+ ggplot2::geom_vline(xintercept= miss_threshold, lty=2, col="red")+ggplot2::geom_hline(yintercept = c(upper,lower,mid_upper,mid_lower),lty=2,col="blue") + +} + +autoplot_qc_report_indiv_king <- function(object, kings_threshold = kings_threshold){ + + browser() + king <- as.data.frame(attr(object$to_keep, "king")) + num_samples <- nrow(king) + king$row <- colnames(king) + + #format into 3 columns: ID1, ID2, and their relatedness coefficient + # TODO gather is superseded, and should be rewritten with pivot_longer + king <- tidyr::gather(king, "column", "value", -"row") + colnames(king) <- c("ID1","ID2","kinship") + + #remove duplication from the new df + king_sorted <- king %>% + mutate( + row_min = pmin(.data$ID1, .data$ID2), + row_max = pmax(.data$ID1, .data$ID2) + ) %>% + dplyr::select(-dplyr::all_of(c("ID1", "ID2"))) %>% + distinct(.data$row_min, .data$row_max, .keep_all = TRUE) %>% + rename("ID1" = .data$row_min, "ID2" = .data$row_max) + + # remove cases of individuals relatedness with themselves + king_sorted <- king_sorted %>% filter(.data$ID1 != .data$ID2) + + #add a check for correct number of pairs + total_pairs <- num_samples * (num_samples -1)/2 + + if (total_pairs != nrow(king_sorted)){ + stop("Relatedness matrix must be symmetric ") + } + + p <- ggplot2::ggplot(king_sorted, ggplot2::aes(x=.data$kinship)) + + ggplot2::geom_histogram(bins = 40) + + ggplot2::labs(x="KING robust kinship estimator",y = "Number of pairs", + title = "Distribution of paired kinship coefficients") + + ggplot2::geom_vline(xintercept = kings_threshold, lty=2, col="red") + + + } + diff --git a/R/loci_qc_report.R b/R/qc_report_loci.R similarity index 74% rename from R/loci_qc_report.R rename to R/qc_report_loci.R index dcae73e3..ef31c636 100644 --- a/R/loci_qc_report.R +++ b/R/qc_report_loci.R @@ -7,18 +7,50 @@ #' the HWE test. #' @returns a tibble with 3 elements: maf, missingness and hwe_p #' @export -loci_qc_report <- function (.x, ...){ +qc_report_loci <- function (.x, ...){ rlang::check_dots_empty() - qc_report <- .x %>% reframe(snp_id = show_loci_names(.x),maf=loci_maf(.data$genotypes), + qc_report <- .x %>% reframe(snp_id = loci_names(.x),maf=loci_maf(.data$genotypes), missingness = loci_missingness(.data$genotypes), hwe_p = loci_hwe(.data$genotypes)) - class(qc_report) <- c("loci_qc_report",class(qc_report)) + class(qc_report) <- c("qc_report_loci",class(qc_report)) qc_report } - +#' Autoplots for `qc_report_loci` objects +#' +#' For `qc_report_loci`, the following types of plots are available: +#' - `overview`: an UpSet plot, giving counts of snps over the threshold for +#' missingness, minor allele frequency, and Hardy-Weinberg equilibrium P-value, +#' and visualising the interaction between these +#' - `all`: a four panel plot, containing `missing high maf`, `missing low maf`, +#' `hwe`, and `significant hwe` plots +#' - `missing`: a histogram of proportion of missing data +#' - `missing low maf`: a histogram of the proportion of missing data for +#' snps with low minor allele freqency +#' - `missing high maf`:a histogram of the proportion of missing data for +#' snps with high minor allele freqency +#' - `maf`: a histogram of minor allele frequency +#' - `hwe`: a histogram of HWE exact test p-values +#' - `significant hwe`: a histogram of significant HWE exact test p-values +#' +#' `autoplot` produces simple plots to quickly inspect an object. They are +#' not customisable; we recommend that you use `ggplot2` to produce publication +#' ready plots. +#' +#' @param object an object of class `qc_report_loci` +#' @param type the type of plot (one of `overview`, `all`, `missing`, +#' `missing low maf`, `missing high maf`, `maf`, `hwe`, and `significant hwe`) +#' @param maf_threshold a threshold for the accepted rate of minor allele +#' frequency of loci +#' @param miss_threshold a threshold for the accepted rate of missingness per +#' loci +#' @param hwe_p a threshold of significance for Hardy-Weinberg exact p-values +#' @param ... not currently used. +#' @returns a `ggplot2` object #' @export -autoplot.loci_qc_report <- function(object, type = c("overview","all","missing","missing low maf","missing high maf","maf","hwe","significant hwe"), maf_threshold = NULL, miss_threshold = NULL, p_val = NULL,...) { +autoplot.qc_report_loci <- function(object, + type = c("overview","all","missing","missing low maf","missing high maf","maf","hwe","significant hwe"), + maf_threshold = NULL, miss_threshold = NULL, hwe_p = NULL,...) { type <- match.arg(type) @@ -36,18 +68,18 @@ autoplot.loci_qc_report <- function(object, type = c("overview","all","missing", miss_threshold } - p_val <- if(is.null(p_val)){ + hwe_p <- if(is.null(hwe_p)){ 0.01 } else { - p_val + hwe_p } - logp <- -log10(p_val) + logp <- -log10(hwe_p) if (type == "overview") { final_plot <- autoplot_l_qc_overview(object, maf_threshold, miss_threshold) } else if (type == "all") { - final_plot <- autoplot_l_qc_all(object, maf_threshold, miss_threshold, p_val,logp) + final_plot <- autoplot_l_qc_all(object, maf_threshold, miss_threshold, hwe_p,logp) } else if (type == "missing") { final_plot <- autoplot_l_qc_missing(object, miss_threshold) } else if (type == "missing low maf") { @@ -59,7 +91,7 @@ autoplot.loci_qc_report <- function(object, type = c("overview","all","missing", } else if (type == "hwe") { final_plot <- autoplot_l_qc_hwe(object,logp) } else if (type == "significant hwe") { - final_plot <- autoplot_l_qc_sig_hwe(object,p_val,logp) + final_plot <- autoplot_l_qc_sig_hwe(object,hwe_p,logp) } else { stop("Invalid type argument. Please choose from 'overview','all','maf','hwe','significant hwe'") } @@ -68,10 +100,7 @@ autoplot.loci_qc_report <- function(object, type = c("overview","all","missing", } - - - -autoplot_l_qc_all <- function(object, maf_threshold = maf_threshold, miss_threshold = miss_threshold, p_val = p_val, logp = logp,...){ +autoplot_l_qc_all <- function(object, maf_threshold = maf_threshold, miss_threshold = miss_threshold, hwe_p = hwe_p, logp = logp,...){ qc_report <- object @@ -95,10 +124,10 @@ autoplot_l_qc_all <- function(object, maf_threshold = maf_threshold, miss_thresh #Hardy weinberg exact test p-val distribution qc_report$hwe_p_log <- -log10(qc_report$hwe_p) - qc_lowhwe <- subset(qc_report,qc_report$hwe_p < p_val) + qc_lowhwe <- subset(qc_report,qc_report$hwe_p < hwe_p) hwe_all <- ggplot2::ggplot(qc_report,ggplot2::aes(x=.data$hwe_p_log))+ggplot2::geom_histogram(binwidth = 0.5,fill="#66C2A5")+ ggplot2::labs(x=expression("-log"[10]*" of HWE exact p-value"),y="Number of SNPs", title = "Hardy-Weinberg exact test")+ ggplot2::geom_vline(xintercept= logp, lty=2, col="red") - hwe_low <- ggplot2::ggplot(qc_lowhwe,ggplot2::aes(x=.data$hwe_p_log))+ggplot2::geom_histogram(binwidth = 0.5,fill="#66C2A5")+ ggplot2::labs(x=expression("-log"[10]* " of HWE exact p-value"),y="Number of SNPs", title = paste("HWE exact p-value <", p_val))+ ggplot2::geom_vline(xintercept= logp, lty=2, col="red") + hwe_low <- ggplot2::ggplot(qc_lowhwe,ggplot2::aes(x=.data$hwe_p_log))+ggplot2::geom_histogram(binwidth = 0.5,fill="#66C2A5")+ ggplot2::labs(x=expression("-log"[10]* " of HWE exact p-value"),y="Number of SNPs", title = paste("HWE exact p-value <", hwe_p))+ ggplot2::geom_vline(xintercept= logp, lty=2, col="red") hwes <- patchwork::wrap_plots(hwe_all,hwe_low) @@ -147,15 +176,15 @@ autoplot_l_qc_hwe <- function(object,logp,...){ } -autoplot_l_qc_sig_hwe <- function(object,p_val=p_val,logp,...){ +autoplot_l_qc_sig_hwe <- function(object,hwe_p=hwe_p,logp,...){ qc_report <- object #Hardy weinberg exact test p-val distribution qc_report$hwe_p_log <- -log10(qc_report$hwe_p) - qc_lowhwe <- subset(qc_report,qc_report$hwe_p < p_val) + qc_lowhwe <- subset(qc_report,qc_report$hwe_p < hwe_p) - hwe_low <- ggplot2::ggplot(qc_lowhwe,ggplot2::aes(x=.data$hwe_p_log))+ggplot2::geom_histogram(binwidth = 0.5,fill="#66C2A5")+ ggplot2::labs(x=expression("-log"[10]* " of HWE exact p-value"),y="Number of SNPs", title = paste("HWE exact p-value <", p_val))+ ggplot2::geom_vline(xintercept= logp, lty=2, col="red") + hwe_low <- ggplot2::ggplot(qc_lowhwe,ggplot2::aes(x=.data$hwe_p_log))+ggplot2::geom_histogram(binwidth = 0.5,fill="#66C2A5")+ ggplot2::labs(x=expression("-log"[10]* " of HWE exact p-value"),y="Number of SNPs", title = paste("HWE exact p-value <", hwe_p))+ ggplot2::geom_vline(xintercept= logp, lty=2, col="red") } autoplot_l_qc_missing <- function(object, miss_threshold = miss_threshold, ...){ diff --git a/R/rbind_gen_tibble.R b/R/rbind_gen_tibble.R index 4b608490..bdf38743 100644 --- a/R/rbind_gen_tibble.R +++ b/R/rbind_gen_tibble.R @@ -12,6 +12,11 @@ #' and remove ambiguous alleles (C/G and A/T) where the correct strand can not #' be guessed. #' +#' rbind differs from merging data with plink, which swaps the order of allele1 +#' and allele2 according to minor allele frequency when merging datasets. rbind +#' flips and/or swaps alleles according to the reference dataset, not according +#' to allele frequency. +#' #' @param ... two [`gen_tibble`] objects. Note that this function can not take #' more objects, `rbind` has to be done sequentially for large sets of objects. #' @param as_is boolean determining whether the loci should be left as they are diff --git a/R/select_loci.R b/R/select_loci.R index 5d2f185d..e645c899 100644 --- a/R/select_loci.R +++ b/R/select_loci.R @@ -24,7 +24,7 @@ select_loci <-function(.data, .sel_arg){ # create a named vector of all loci loci_names_vec <- stats::setNames(seq_len(nrow(show_loci(.data))), - nm = show_loci_names(.data)) + nm = loci_names(.data)) # and now evaluate the selection criteria, giving it the loci names to work with loci_sel <- tidyselect::eval_select(expr=sel_defused, data = loci_names_vec) diff --git a/R/select_loci_if.R b/R/select_loci_if.R index 725e4df0..bf99873b 100644 --- a/R/select_loci_if.R +++ b/R/select_loci_if.R @@ -9,7 +9,8 @@ #' but rather it subsets the list of loci to be used stored in the `gen_tibble`. #' @param .data a `gen_tibble` #' @param .sel_logical a logical vector of length equal to the number of loci, -#' or an expression that will tidy evaluate to such a vector. +#' or an expression that will tidy evaluate to such a vector. Only loci +#' for which .sel_logical is TRUE will be selected; NA will be treated as FALSE. #' @export #' select_loci_if <-function(.data, .sel_logical){ @@ -24,6 +25,8 @@ select_loci_if <-function(.data, .sel_logical){ if (length(loci_sel) != ncol(show_genotypes(.data$genotypes))){ stop(".sel_logical should be the same length as the number of loci") } + # set to FALSE any missing value + loci_sel[is.na(loci_sel)]<-FALSE # subset the loci table attr(.data$genotypes,"loci") <- attr(.data$genotypes,"loci")[loci_sel,] diff --git a/R/snp_allele_sharing.R b/R/snp_allele_sharing.R new file mode 100644 index 00000000..43e4f81d --- /dev/null +++ b/R/snp_allele_sharing.R @@ -0,0 +1,61 @@ +#' Compute the Pairwise Allele Sharing Matrix for a bigSNP object +#' +#' This function computes the Allele Sharing matrix. +#' Estimates Allele Sharing (matching in `hierfstat`)) between pairs of individuals +#' (for each locus, gives 1 if the two individuals are homozygous +#' for the same allele, 0 if they are homozygous for a different allele, and 1/2 if at least one individual +#' is heterozygous. Matching is the average of these 0, 1/2 and 1s) +#' +#' @param X a [bigstatsr::FBM.code256] matrix (as found in the `genotypes` +#' slot of a [bigsnpr::bigSNP] object). +#' @param ind.row An optional vector of the row indices that are used. +#' If not specified, all rows are used. Don't use negative indices. +#' @param ind.col An optional vector of the column indices that are used. If not +#' specified, all columns are used. Don't use negative indices. +#' @param block.size maximum number of columns read at once. Note that, to optimise the +#' speed of matrix operations, we have to store in memory 3 times the columns. +#' @returns a matrix of allele sharing between all pairs of individuals +#' @export + +snp_allele_sharing <- function( + X, + ind.row = bigstatsr::rows_along(X), + ind.col = bigstatsr::cols_along(X), + block.size = bigstatsr::block_size(nrow(X)) + ) { + #check_args() + + n <- length(ind.row) + # FBM matrix to store the tcrossproduct of (dos-1) + dos_tcross <- bigstatsr::FBM(n, n, init = 0) + # FBM matrix to store tcrossproduct of NA matrix (0 is NA, 1 is a valid genotype) + na_tcross <- bigstatsr::FBM(n, n, init = 0) + m <- length(ind.col) + + intervals <- CutBySize(m, block.size) + + # Preassign memory where we will store the slices of genotypes. + # For efficiency, when we read in the slice, + # we will immediately recode it into these3 matrices, + # one per genotype, equivalent to X==0, X==1, and X==2 respectively + dos_mat_part <- matrix(0, n, max(intervals[, "size"])) + na_mat_part <- matrix(0, n, max(intervals[, "size"])) + + for (j in bigstatsr::rows_along(intervals)) { + ind <- seq2(intervals[j, ]) # this iteration indices + ind.col.ind <- ind.col[ind] #subset given indices by the iteration indices + increment_as_counts(dos_tcross, + na_tcross, + dos_mat_part, + na_mat_part, + X, + ind.row, + ind.col.ind) + } + # The allele sharing matrix is: + # Mij <- 1/2 * (1+1/tcrossprod(na) * tcrossprod(dos-1)) + # where dos is a dosage matrix (with missing values replaced by 1) and na is a matrix with 0 for NAs and 1 for valid values + # TODO this could be done in chunks to avoid bringing everything to memory at once + return(1/2 * (1+1/na_tcross[] * dos_tcross[]) ) +} + diff --git a/R/snp_ibs.R b/R/snp_ibs.R index 680cbc0f..edf7a914 100644 --- a/R/snp_ibs.R +++ b/R/snp_ibs.R @@ -10,29 +10,29 @@ #' If not specified, all rows are used. Don't use negative indices. #' @param ind.col An optional vector of the column indices that are used. If not #' specified, all columns are used. Don't use negative indices. -#' @param as.counts whether the counts of similar alleles, rather than the proportion, -#' should be returned (FALSE by default). CURRENTLY ALWAYS RETURNS COUNTS!!! +#' @param type one of "proportion" (equivalent to "ibs" in PLINK), "adjusted_counts" ("distance" in PLINK), +#' and "raw_counts" (the counts of identical alleles and non-missing alleles, from which the two other quantities are computed) #' @param block.size maximum number of columns read at once. Note that, to optimise the #' speed of matrix operations, we have to store in memory 3 times the columns. -#' @returns a list of two [bigstatsr::FBM] matrices, one of counts of IBS by alleles (i.e. 2*n loci), -#' and one of valid alleles (i.e. 2*n_loci - 2*missing_loci) +#' @returns if as.counts = TRUE function returns a list of two [bigstatsr::FBM] matrices, one of counts of IBS by alleles (i.e. 2*n loci), +#' and one of valid alleles (i.e. 2 * n_loci - 2 * missing_loci). If as.counts = FALSE returns a single matrix of IBS proportions. #' @export snp_ibs <- function( X, ind.row = bigstatsr::rows_along(X), ind.col = bigstatsr::cols_along(X), - as.counts = FALSE, + type = c("proportion","adjusted_counts","raw_counts"), block.size = bigstatsr::block_size(nrow(X)) ) { - + type <- match.arg(type) #check_args() n <- length(ind.row) # FBM matrix to count the IBS counts - K <- bigstatsr::FBM(n, n, init = 0) + IBS <- bigstatsr::FBM(n, n, init = 0) # FBM matrix to store valid number of comparisons (i.e NOT NA) - K2 <- bigstatsr::FBM(n, n, init = 0) + IBS_valid_loci <- bigstatsr::FBM(n, n, init = 0) m <- length(ind.col) intervals <- CutBySize(m, block.size) @@ -41,24 +41,39 @@ snp_ibs <- function( # For efficiency, when we read in the slice, # we will immediately recode it into these3 matrices, # one per genotype, equivalent to X==0, X==1, and X==2 respectively - X_part_temp0 <- matrix(0, n, max(intervals[, "size"])) - X_part_temp1 <- matrix(0, n, max(intervals[, "size"])) - X_part_temp2 <- matrix(0, n, max(intervals[, "size"])) + X_0_part <- matrix(0, n, max(intervals[, "size"])) + X_1_part <- matrix(0, n, max(intervals[, "size"])) + X_2_part <- matrix(0, n, max(intervals[, "size"])) for (j in bigstatsr::rows_along(intervals)) { ind <- seq2(intervals[j, ]) # this iteration indices ind.col.ind <- ind.col[ind] #subset given indices by the iteration indices - increment_ibs_counts(K, - K2, - X_part_temp0, - X_part_temp1, - X_part_temp2, + increment_ibs_counts(IBS, + IBS_valid_loci, + X_0_part, + X_1_part, + X_2_part, X, ind.row, ind.col.ind) } - return(list(ibs = K, valid_n = K2)) + if(type == "raw_counts"){ + return(list(ibs = IBS, valid_n = IBS_valid_loci)) + } else{ + + #IBS proportion + # get the means of each column + divide_sub <- function(X, ind, Y) (X[, ind]/Y[,ind]) + ibs_prop <- bigstatsr::big_apply(IBS, a.FUN = divide_sub, Y=IBS_valid_loci, a.combine = 'cbind') + if (type=="proportion"){ + return(ibs_prop) + } else { # for adjusted counts + ibs_adj <- ibs_prop* m + return(ibs_adj) + } + + } } diff --git a/R/snp_king.R b/R/snp_king.R index f432d36a..19ce1e13 100644 --- a/R/snp_king.R +++ b/R/snp_king.R @@ -18,12 +18,16 @@ snp_king <- function(X, ind.row = bigstatsr::rows_along(X), ind.col = bigstatsr::cols_along(X), - block.size = bigstatsr::block_size(nrow(X))*3) { - #check_args() + block.size = bigstatsr::block_size(nrow(X))*4) { + if (!inherits(X,"FBM.code256")){ + stop ("X should be a FBM.code256 matrix") + } n <- length(ind.row) # FBM matrix for the KING numerator K_numerator <- bigstatsr::FBM(n, n, init = 0) + # FBM matrix of number of heterozygous loci for individual i (limited to sites not missing in j) + N_Aa_i <- bigstatsr::FBM(n, n, init = 0) m <- length(ind.col) intervals <- CutBySize(m, block.size) @@ -32,41 +36,43 @@ snp_king <- function(X, # For efficiency, when we read in the slice, # we will immediately recode it into these3 matrices, # one per genotype, equivalent to X==0, X==1, and X==2 respectively - X_part_temp0 <- matrix(0, n, max(intervals[, "size"])) - X_part_temp1 <- matrix(0, n, max(intervals[, "size"])) - X_part_temp2 <- matrix(0, n, max(intervals[, "size"])) + X_0_part <- matrix(0, n, max(intervals[, "size"])) + X_1_part <- matrix(0, n, max(intervals[, "size"])) + X_2_part <- matrix(0, n, max(intervals[, "size"])) + # valid loci (i.e. wiht genotype 0,1 or 2) + X_valid_part <- matrix(0, n, max(intervals[, "size"])) for (j in bigstatsr::rows_along(intervals)) { ind <- seq2(intervals[j, ]) # this iteration indices ind.col.ind <- ind.col[ind] #subset given indices by the iteration indeces increment_king_numerator(K_numerator, - X_part_temp0, - X_part_temp1, - X_part_temp2, + N_Aa_i, + X_0_part, + X_1_part, + X_2_part, + X_valid_part, X, ind.row, ind.col.ind) } - # now we compute the denominator - # sum of how many genotypes are 1 - row_sums_1 <- bigstatsr::big_counts(X,byrow=TRUE)[2,] + # transpose the counts of heterozygous sites to confirm that this is valid + N_Aa_j <- bigstatsr::big_transpose(N_Aa_i) - # divide KING num by den for a set of rows 'ind' - divide_king_sub <- function (K_num_sub, ind, row_sums_1){ - X_sub <- K_num_sub[,ind] - n_rows <- nrow(K_num_sub) + # divide KING num by den for a set of col 'ind' + divide_king_sub <- function (K, ind, N_Aa_i, N_Aa_j){ + K_sub <- K[,ind] + N_Aa_i_sub <- N_Aa_i[,ind] + N_Aa_j_sub <- N_Aa_j[,ind] # denominator of KING for these columns - K_den_sub <- K_den <- matrix(rep(row_sums_1[ind],nrow(K_num_sub)),nrow=nrow(K_num_sub), byrow=T)+ - matrix(rep(row_sums_1,length(ind)),nrow=nrow(K_num_sub), byrow=F) - # the ratio - X_sub/K_den_sub + K_sub/(2* pmin(N_Aa_i_sub,N_Aa_j_sub))+0.5- + 0.25*(N_Aa_i_sub+N_Aa_j_sub)/pmin(N_Aa_i_sub,N_Aa_j_sub) } # This works, but could be done with a FBM in c++ for added speed ibs_counts_matrix <- bigstatsr::big_apply(K_numerator, a.FUN = divide_king_sub, ind = seq_len(ncol(K_numerator)), - row_sums_1 = row_sums_1, + N_Aa_i = N_Aa_i, + N_Aa_j = N_Aa_j, a.combine = "cbind", - # in theory block size coudl be our previouse block size * 3 block.size = bigstatsr::block_size(nrow(K_numerator))) } diff --git a/R/utils.R b/R/utils.R index a00f58b5..eaa629ca 100644 --- a/R/utils.R +++ b/R/utils.R @@ -1,7 +1,23 @@ # utility internal functions # simple function to extract the extension of a file +# this avoids having to import tools just for tools::file_ext file_ext <- function(x){ utils::tail(unlist(strsplit(x,".",fixed = TRUE)),n=1) } +# a simple tidier for dist matrices +# tidy.dist is deprecated, and often we have a full matrix rather than a dist object +tidy_dist_matrix<- function(mat){ + if (!inherits(mat,"matrix")){ + stop("mat should be a matrix") + } + mat_names<- colnames(mat) + if (is.null(mat)){ + mat_names <- c(1:ncol(mat)) + } + xy <- t(utils::combn(colnames(mat), 2)) + colnames(xy)<-c("item1","item2") + xy %>% tibble::as_tibble() %>% + dplyr::mutate(value=mat[xy]) +} diff --git a/data-raw/clustering_tidiers_ideas.R b/data-raw/adegenet_functions/clustering_tidiers_ideas.R similarity index 100% rename from data-raw/clustering_tidiers_ideas.R rename to data-raw/adegenet_functions/clustering_tidiers_ideas.R diff --git a/data-raw/adegenet_functions/dapc.R b/data-raw/adegenet_functions/dapc.R index 347439fd..37dbcd9b 100644 --- a/data-raw/adegenet_functions/dapc.R +++ b/data-raw/adegenet_functions/dapc.R @@ -12,8 +12,8 @@ gt_dapc <- function(x, pop = NULL, n_pca = NULL, n_da=NULL, pca.select <- match.arg(pca.select) if(is.null(pop)) { - if (any(!inherits(x,"gt_pca_clust"),is.null(x$n_clust))){ - stop("if 'pop' is not set, 'x' should be a 'gt_pca_clust ") + if (any(!inherits(x,"gt_cluster_pca"),is.null(x$n_clust))){ + stop("if 'pop' is not set, 'x' should be a 'gt_cluster_pca ") } pop.fac <- as.factor(x$clusters$groups[[x$n_clust]]) } else { @@ -23,7 +23,7 @@ gt_dapc <- function(x, pop = NULL, n_pca = NULL, n_da=NULL, if(is.null(pop.fac)) stop("x does not include pre-defined populations, and `pop' is not provided") if (i s .null(n_pca ) ){ - if (inherits(x,"gt_pca_clust " )){ + if (inherits(x,"gt_cluster_pca " )){ n_pca <- x$clusters$n_pca } else { # use all principal compon e nts n_pca <- length(x$eig) diff --git a/data-raw/adegenet_functions/find.clusters.R b/data-raw/adegenet_functions/find.clusters.R index 0644a4b0..4598a20d 100644 --- a/data-raw/adegenet_functions/find.clusters.R +++ b/data-raw/adegenet_functions/find.clusters.R @@ -26,7 +26,7 @@ #' - 'groups' a list, with each element giving the group assignments for a given k #' @export -gt_pca_find_clusters <- function(x = NULL, n_pca = NULL, +gt_cluster_pca <- function(x = NULL, n_pca = NULL, n_clusters = c(1,round(nrow(x$scores)/10)), method=c("kmeans","ward"), n_iter = 1e5, n_start = 10){ @@ -107,7 +107,7 @@ gt_pca_find_clusters <- function(x = NULL, n_pca = NULL, names(cluster_list$groups)<-nbClust x$clusters <- cluster_list - class(x) <- c("gt_pca_clust", class(x)) + class(x) <- c("gt_cluster_pca", class(x)) return(x) } @@ -121,12 +121,12 @@ gt_pca_find_clusters <- function(x = NULL, n_pca = NULL, ##TODO this function should add to the previous object -gt_pca_clust_choose_n <- function(x, stat = c("BIC", "AIC", "WSS"), +gt_cluster_pca_choose_n <- function(x, stat = c("BIC", "AIC", "WSS"), criterion = c("diffNgroup", "min", "goesup", "smoothNgoesup", "goodfit"), quiet=FALSE){ - if (!inherits(x, "gt_pca_clust")){ - stop("'x' should be a 'gt_pca_clusters' object generated with 'gt_pca_find_clusters()'") + if (!inherits(x, "gt_cluster_pca")){ + stop("'x' should be a 'gt_cluster_pcaers' object generated with 'gt_cluster_pca()'") } stat <- match.arg(stat) diff --git a/data-raw/adegenet_functions/gt_dapc.R b/data-raw/adegenet_functions/gt_dapc.R index ec15b44f..98a0a9c9 100644 --- a/data-raw/adegenet_functions/gt_dapc.R +++ b/data-raw/adegenet_functions/gt_dapc.R @@ -31,7 +31,7 @@ gt_dapc <- function(x, if (REDUCEDIM) { # if no glPca provided - maxRank <- min(c(nrow(x), length(show_loci_names(x)))) + maxRank <- min(c(nrow(x), length(loci_names(x)))) pcaX <- gt_pca( x, diff --git a/data-raw/adegenet_functions/svd_and_pca.R b/data-raw/adegenet_functions/svd_and_pca.R index bfe600cc..bdd05e06 100644 --- a/data-raw/adegenet_functions/svd_and_pca.R +++ b/data-raw/adegenet_functions/svd_and_pca.R @@ -41,7 +41,7 @@ all.equal( check.attributes = FALSE) # for an centered matrix (but not scaled), the sum of the eigen vectors is equal -to the sum of variances +#to the sum of variances all.equal(sum(a_prcomp$sdev^2), sum(apply(a_mat,2,var))) diff --git a/data-raw/archive/as_genlight.R b/data-raw/archive/as_genlight.R index 946bdc11..26311e04 100644 --- a/data-raw/archive/as_genlight.R +++ b/data-raw/archive/as_genlight.R @@ -16,7 +16,7 @@ as_genlight <- function(x, ...) { if ("population" %in% names(x)){ new_gl@pop <- as.factor(x$population) } - new_gl@loc.names<-show_loci_names(x) + new_gl@loc.names<-loci_names(x) new_gl@loc.all <- paste0(show_loci(x)$allele_ref,"/",show_loci(x)$allele_alt) # TODO is this the right order?!? new_gl@chromosome <- as.factor(show_loci(x)$chromosome) new_gl@position <- as.integer(show_loci(x)$position) diff --git a/data-raw/archive/fst_ideas.R b/data-raw/archive/fst_ideas.R index 09b5db24..bbe49780 100644 --- a/data-raw/archive/fst_ideas.R +++ b/data-raw/archive/fst_ideas.R @@ -38,7 +38,7 @@ loci_het_exp <- function(.x){ return((sums*(n-sums))/(n*(n-1))) } -pop_pairwise_fst <- function(.x, by_locus=FALSE){ +pairwise_pop_fst <- function(.x, by_locus=FALSE){ warning("this function is not properly tested yet!!!") # check matrix(unlist(z, use.names = FALSE), ncol = 10, byrow = TRUE) @@ -91,7 +91,7 @@ pop_pairwise_fst <- function(.x, by_locus=FALSE){ } fst_vals <- matrix(unlist(lapply(seq_len(nrow(numerator)),fst_by_row, numerator, denominator), use.names = FALSE), ncol = n_loci, byrow = TRUE) - colnames(fst_vals) <- show_loci_names(.x) + colnames(fst_vals) <- loci_names(.x) return(fst %>% cbind(fst_vals)) } } diff --git a/data-raw/archive/gl_pca.R b/data-raw/archive/gl_pca.R index 5efa7786..fd508ddd 100644 --- a/data-raw/archive/gl_pca.R +++ b/data-raw/archive/gl_pca.R @@ -226,8 +226,8 @@ gt_pca <- function(x, center=TRUE, scale=FALSE, nf=NULL, loadings=TRUE, alleles_ if(!is.null(res$loadings)){ colnames(res$loadings) <- paste("Axis", 1:nf, sep="") # TODO quick hack - # if(!is.null(show_loci_names(x_gt)) & !is.null(alleles(x))){ - # rownames(res$loadings) <- paste(show_loci_names(x_gt),alleles(x), sep=".") + # if(!is.null(loci_names(x_gt)) & !is.null(alleles(x))){ + # rownames(res$loadings) <- paste(loci_names(x_gt),alleles(x), sep=".") # } else { rownames(res$loadings) <- 1:nLoc # } diff --git a/data-raw/archive/king_formulae_with_matrix_algebra.R b/data-raw/archive/king_formulae_with_matrix_algebra.R new file mode 100644 index 00000000..860f4ace --- /dev/null +++ b/data-raw/archive/king_formulae_with_matrix_algebra.R @@ -0,0 +1,38 @@ +#X <- show_genotypes(test_gt) +# code ignoring missing data +X0 <- X==0 +X0[is.na(X0)]<-0 +X1 <-X==1 +X1[is.na(X1)]<-0 +X2 <-X==2 +X2[is.na(X2)]<-0 +king_num <- (X1 %*% t(X1) - 2* ((X0) %*% t(X2) + (X2) %*% t(X0)) ) + +N_Aa_i <- matrix(rep(rowSums(X1), nrow(X)), nrow = nrow(X), byrow = T) +N_Aa_j <- matrix(rep(rowSums(X1), nrow(X)), nrow = nrow(X), byrow = F) +king.r.ignore.na <- king_num/(2* pmin(N_Aa_i,N_Aa_j))+0.5-0.25*(N_Aa_i+N_Aa_j)/pmin(N_Aa_i,N_Aa_j) + +### code accounting for missing data + + + + +################################################################################ +test_gt <- tidypopgen::gen_tibble("./data-raw/datasets/families.bed") +X_mat <- show_genotypes(test_gt) + +X_mat0 <- X_mat==0 +X_mat0[is.na(X_mat0)]<-0 +X_mat1 <-X_mat==1 +X_mat1[is.na(X_mat1)]<-0 +X_mat2 <-X_mat==2 +X_mat2[is.na(X_mat2)]<-0 +king_num <- (X_mat1 %*% t(X_mat1) - 2* ((X_mat0) %*% t(X_mat2) + (X_mat2) %*% t(X_mat0)) ) +X_mat_valid <- !is.na(X_mat) +N_mat_Aa_i <- X_mat1 %*% t(X_mat_valid) +N_mat_Aa_j <- t(N_mat_Aa_i) +king.r <- king_num/(2* pmin(N_mat_Aa_i,N_mat_Aa_j))+0.5-0.25*(N_mat_Aa_i+N_mat_Aa_j)/pmin(N_mat_Aa_i,N_mat_Aa_j) + +X <- .gt_get_bigsnp(test_gt) +snp_king(X) + diff --git a/data-raw/benchmarking/simple benchmark.R b/data-raw/benchmarking/simple benchmark.R index 5e018965..d22452b5 100644 --- a/data-raw/benchmarking/simple benchmark.R +++ b/data-raw/benchmarking/simple benchmark.R @@ -3,7 +3,7 @@ bed_file <- "./data-raw/benchmarking/hgdp_100k.bed" hgdp_gt <- gen_tibble(bed_file, backingfile = tempfile("missing_")) hgdp_gt <- gt_impute_simple(hgdp_gt) tic() -test_ibs <- snp_ibs(gt_get_bigsnp(hgdp_gt)$genotypes, block.size = 10000) +test_ibs <- snp_ibs(.gt_get_bigsnp(hgdp_gt)$genotypes, block.size = 10000) toc() tic() diff --git a/data-raw/compare_fst.Rmd b/data-raw/compare_fst.Rmd new file mode 100644 index 00000000..382b7f19 --- /dev/null +++ b/data-raw/compare_fst.Rmd @@ -0,0 +1,57 @@ +--- +title: "Validate Fst" +output: html_document +date: "2024-04-28" +--- + +```{r setup, include=FALSE} +knitr::opts_chunk$set(echo = TRUE) +``` + +## A simple dataset + +Start with a minimalistic dataset +```{r} +library(tidypopgen) +test_genotypes <- rbind(c(1,1,0,1,1,0), + c(2,1,0,NA,0,0), + c(2,NA,0,0,1,1), + c(1,0,0,1,0,0), + c(1,2,0,1,2,1), + c(0,0,0,0,NA,1), + c(0,1,1,0,1,NA)) +test_indiv_meta <- data.frame (id=c("a","b","c","d","e","f","g"), + population = c("pop1","pop1","pop2","pop2","pop1","pop3","pop3")) +test_loci <- data.frame(name=paste0("rs",1:6), + chromosome=paste0("chr",c(1,1,1,1,2,2)), + position=as.integer(c(3,5,65,343,23,456)), + genetic_dist = as.integer(rep(0,6)), + allele_ref = c("A","T","C","G","C","T"), + allele_alt = c("T","C", NA,"C","G","A")) + +test_gt <- gen_tibble(x = test_genotypes, loci = test_loci, indiv_meta = test_indiv_meta, quiet = TRUE) + +``` + +Now export it: +```{r} +bed_file <- tempfile("bed_") +gt_as_plink(test_gt, bedfile = bed_file) +``` + +Use radiator to rexport it: +```{r} +test_converted <- radiator::genomic_converter( + data = bed_file, + strata = x$population, + output = c( + "hierfstat", # for Hierfstat + "bed" # to read it back into tidypopgen and avoid different filtering + ) +) %>% dplyr::glimpse() + + +``` + + + diff --git a/data-raw/create_ibs_dataset.R b/data-raw/create_ibs_dataset.R index 79c13b8c..2d377670 100644 --- a/data-raw/create_ibs_dataset.R +++ b/data-raw/create_ibs_dataset.R @@ -38,7 +38,7 @@ offspring.geno <- function(n.families, n.snps, fs = rep(0.5,n.snps), n.shared.pa return (X) } set.seed(123) -p = 10000 #SNPs +p = 1000 #SNPs fs = runif(p, 0.05, 0.5) #MAF at each SNP is Uniform(0.05, 0.5) X = rbind(offspring.geno(n.families = 2, n.snps = p, fs = fs, n.shared.parents = 0), @@ -47,9 +47,20 @@ X = rbind(offspring.geno(n.families = 2, n.snps = p, fs = fs, n.shared.parents = X = X[,apply(X,2,var) > 0] #remove possible monomorphic variants +# sprinkle some missing data +na_n <- 450 +na_rows<- sample(dim(X)[1],na_n, replace = TRUE) +na_cols <- sample(dim(X)[2],na_n, replace = TRUE) +for (i in 1:na_n){ + X[na_rows[i], na_cols[i]] <- NA +} + # transpose it X = t(X) fake_bim <- genio::make_bim(n=nrow(X)) fake_fam <- genio::make_fam(n=ncol(X)) # this should be saved directly into inst, I think... -genio::write_plink("./data-raw/datasets/families", X,bim=fake_bim, fam=fake_fam) +#genio::write_plink("./data-raw/datasets/families", X,bim=fake_bim, fam=fake_fam) +genio::write_plink("./inst/extdata/related/families", X,bim=fake_bim, fam=fake_fam) + + diff --git a/data-raw/datasets/families.bed b/data-raw/datasets/families.bed index be8d8e41..9aa3ad95 100644 Binary files a/data-raw/datasets/families.bed and b/data-raw/datasets/families.bed differ diff --git a/data-raw/datasets/families.bim b/data-raw/datasets/families.bim index 635ad316..fc73cf4f 100644 --- a/data-raw/datasets/families.bim +++ b/data-raw/datasets/families.bim @@ -10,3 +10,952 @@ 1 10 0 10 2 1 1 11 0 11 2 1 1 12 0 12 2 1 +1 13 0 13 2 1 +1 14 0 14 2 1 +1 15 0 15 2 1 +1 16 0 16 2 1 +1 17 0 17 2 1 +1 18 0 18 2 1 +1 19 0 19 2 1 +1 20 0 20 2 1 +1 21 0 21 2 1 +1 22 0 22 2 1 +1 23 0 23 2 1 +1 24 0 24 2 1 +1 25 0 25 2 1 +1 26 0 26 2 1 +1 27 0 27 2 1 +1 28 0 28 2 1 +1 29 0 29 2 1 +1 30 0 30 2 1 +1 31 0 31 2 1 +1 32 0 32 2 1 +1 33 0 33 2 1 +1 34 0 34 2 1 +1 35 0 35 2 1 +1 36 0 36 2 1 +1 37 0 37 2 1 +1 38 0 38 2 1 +1 39 0 39 2 1 +1 40 0 40 2 1 +1 41 0 41 2 1 +1 42 0 42 2 1 +1 43 0 43 2 1 +1 44 0 44 2 1 +1 45 0 45 2 1 +1 46 0 46 2 1 +1 47 0 47 2 1 +1 48 0 48 2 1 +1 49 0 49 2 1 +1 50 0 50 2 1 +1 51 0 51 2 1 +1 52 0 52 2 1 +1 53 0 53 2 1 +1 54 0 54 2 1 +1 55 0 55 2 1 +1 56 0 56 2 1 +1 57 0 57 2 1 +1 58 0 58 2 1 +1 59 0 59 2 1 +1 60 0 60 2 1 +1 61 0 61 2 1 +1 62 0 62 2 1 +1 63 0 63 2 1 +1 64 0 64 2 1 +1 65 0 65 2 1 +1 66 0 66 2 1 +1 67 0 67 2 1 +1 68 0 68 2 1 +1 69 0 69 2 1 +1 70 0 70 2 1 +1 71 0 71 2 1 +1 72 0 72 2 1 +1 73 0 73 2 1 +1 74 0 74 2 1 +1 75 0 75 2 1 +1 76 0 76 2 1 +1 77 0 77 2 1 +1 78 0 78 2 1 +1 79 0 79 2 1 +1 80 0 80 2 1 +1 81 0 81 2 1 +1 82 0 82 2 1 +1 83 0 83 2 1 +1 84 0 84 2 1 +1 85 0 85 2 1 +1 86 0 86 2 1 +1 87 0 87 2 1 +1 88 0 88 2 1 +1 89 0 89 2 1 +1 90 0 90 2 1 +1 91 0 91 2 1 +1 92 0 92 2 1 +1 93 0 93 2 1 +1 94 0 94 2 1 +1 95 0 95 2 1 +1 96 0 96 2 1 +1 97 0 97 2 1 +1 98 0 98 2 1 +1 99 0 99 2 1 +1 100 0 100 2 1 +1 101 0 101 2 1 +1 102 0 102 2 1 +1 103 0 103 2 1 +1 104 0 104 2 1 +1 105 0 105 2 1 +1 106 0 106 2 1 +1 107 0 107 2 1 +1 108 0 108 2 1 +1 109 0 109 2 1 +1 110 0 110 2 1 +1 111 0 111 2 1 +1 112 0 112 2 1 +1 113 0 113 2 1 +1 114 0 114 2 1 +1 115 0 115 2 1 +1 116 0 116 2 1 +1 117 0 117 2 1 +1 118 0 118 2 1 +1 119 0 119 2 1 +1 120 0 120 2 1 +1 121 0 121 2 1 +1 122 0 122 2 1 +1 123 0 123 2 1 +1 124 0 124 2 1 +1 125 0 125 2 1 +1 126 0 126 2 1 +1 127 0 127 2 1 +1 128 0 128 2 1 +1 129 0 129 2 1 +1 130 0 130 2 1 +1 131 0 131 2 1 +1 132 0 132 2 1 +1 133 0 133 2 1 +1 134 0 134 2 1 +1 135 0 135 2 1 +1 136 0 136 2 1 +1 137 0 137 2 1 +1 138 0 138 2 1 +1 139 0 139 2 1 +1 140 0 140 2 1 +1 141 0 141 2 1 +1 142 0 142 2 1 +1 143 0 143 2 1 +1 144 0 144 2 1 +1 145 0 145 2 1 +1 146 0 146 2 1 +1 147 0 147 2 1 +1 148 0 148 2 1 +1 149 0 149 2 1 +1 150 0 150 2 1 +1 151 0 151 2 1 +1 152 0 152 2 1 +1 153 0 153 2 1 +1 154 0 154 2 1 +1 155 0 155 2 1 +1 156 0 156 2 1 +1 157 0 157 2 1 +1 158 0 158 2 1 +1 159 0 159 2 1 +1 160 0 160 2 1 +1 161 0 161 2 1 +1 162 0 162 2 1 +1 163 0 163 2 1 +1 164 0 164 2 1 +1 165 0 165 2 1 +1 166 0 166 2 1 +1 167 0 167 2 1 +1 168 0 168 2 1 +1 169 0 169 2 1 +1 170 0 170 2 1 +1 171 0 171 2 1 +1 172 0 172 2 1 +1 173 0 173 2 1 +1 174 0 174 2 1 +1 175 0 175 2 1 +1 176 0 176 2 1 +1 177 0 177 2 1 +1 178 0 178 2 1 +1 179 0 179 2 1 +1 180 0 180 2 1 +1 181 0 181 2 1 +1 182 0 182 2 1 +1 183 0 183 2 1 +1 184 0 184 2 1 +1 185 0 185 2 1 +1 186 0 186 2 1 +1 187 0 187 2 1 +1 188 0 188 2 1 +1 189 0 189 2 1 +1 190 0 190 2 1 +1 191 0 191 2 1 +1 192 0 192 2 1 +1 193 0 193 2 1 +1 194 0 194 2 1 +1 195 0 195 2 1 +1 196 0 196 2 1 +1 197 0 197 2 1 +1 198 0 198 2 1 +1 199 0 199 2 1 +1 200 0 200 2 1 +1 201 0 201 2 1 +1 202 0 202 2 1 +1 203 0 203 2 1 +1 204 0 204 2 1 +1 205 0 205 2 1 +1 206 0 206 2 1 +1 207 0 207 2 1 +1 208 0 208 2 1 +1 209 0 209 2 1 +1 210 0 210 2 1 +1 211 0 211 2 1 +1 212 0 212 2 1 +1 213 0 213 2 1 +1 214 0 214 2 1 +1 215 0 215 2 1 +1 216 0 216 2 1 +1 217 0 217 2 1 +1 218 0 218 2 1 +1 219 0 219 2 1 +1 220 0 220 2 1 +1 221 0 221 2 1 +1 222 0 222 2 1 +1 223 0 223 2 1 +1 224 0 224 2 1 +1 225 0 225 2 1 +1 226 0 226 2 1 +1 227 0 227 2 1 +1 228 0 228 2 1 +1 229 0 229 2 1 +1 230 0 230 2 1 +1 231 0 231 2 1 +1 232 0 232 2 1 +1 233 0 233 2 1 +1 234 0 234 2 1 +1 235 0 235 2 1 +1 236 0 236 2 1 +1 237 0 237 2 1 +1 238 0 238 2 1 +1 239 0 239 2 1 +1 240 0 240 2 1 +1 241 0 241 2 1 +1 242 0 242 2 1 +1 243 0 243 2 1 +1 244 0 244 2 1 +1 245 0 245 2 1 +1 246 0 246 2 1 +1 247 0 247 2 1 +1 248 0 248 2 1 +1 249 0 249 2 1 +1 250 0 250 2 1 +1 251 0 251 2 1 +1 252 0 252 2 1 +1 253 0 253 2 1 +1 254 0 254 2 1 +1 255 0 255 2 1 +1 256 0 256 2 1 +1 257 0 257 2 1 +1 258 0 258 2 1 +1 259 0 259 2 1 +1 260 0 260 2 1 +1 261 0 261 2 1 +1 262 0 262 2 1 +1 263 0 263 2 1 +1 264 0 264 2 1 +1 265 0 265 2 1 +1 266 0 266 2 1 +1 267 0 267 2 1 +1 268 0 268 2 1 +1 269 0 269 2 1 +1 270 0 270 2 1 +1 271 0 271 2 1 +1 272 0 272 2 1 +1 273 0 273 2 1 +1 274 0 274 2 1 +1 275 0 275 2 1 +1 276 0 276 2 1 +1 277 0 277 2 1 +1 278 0 278 2 1 +1 279 0 279 2 1 +1 280 0 280 2 1 +1 281 0 281 2 1 +1 282 0 282 2 1 +1 283 0 283 2 1 +1 284 0 284 2 1 +1 285 0 285 2 1 +1 286 0 286 2 1 +1 287 0 287 2 1 +1 288 0 288 2 1 +1 289 0 289 2 1 +1 290 0 290 2 1 +1 291 0 291 2 1 +1 292 0 292 2 1 +1 293 0 293 2 1 +1 294 0 294 2 1 +1 295 0 295 2 1 +1 296 0 296 2 1 +1 297 0 297 2 1 +1 298 0 298 2 1 +1 299 0 299 2 1 +1 300 0 300 2 1 +1 301 0 301 2 1 +1 302 0 302 2 1 +1 303 0 303 2 1 +1 304 0 304 2 1 +1 305 0 305 2 1 +1 306 0 306 2 1 +1 307 0 307 2 1 +1 308 0 308 2 1 +1 309 0 309 2 1 +1 310 0 310 2 1 +1 311 0 311 2 1 +1 312 0 312 2 1 +1 313 0 313 2 1 +1 314 0 314 2 1 +1 315 0 315 2 1 +1 316 0 316 2 1 +1 317 0 317 2 1 +1 318 0 318 2 1 +1 319 0 319 2 1 +1 320 0 320 2 1 +1 321 0 321 2 1 +1 322 0 322 2 1 +1 323 0 323 2 1 +1 324 0 324 2 1 +1 325 0 325 2 1 +1 326 0 326 2 1 +1 327 0 327 2 1 +1 328 0 328 2 1 +1 329 0 329 2 1 +1 330 0 330 2 1 +1 331 0 331 2 1 +1 332 0 332 2 1 +1 333 0 333 2 1 +1 334 0 334 2 1 +1 335 0 335 2 1 +1 336 0 336 2 1 +1 337 0 337 2 1 +1 338 0 338 2 1 +1 339 0 339 2 1 +1 340 0 340 2 1 +1 341 0 341 2 1 +1 342 0 342 2 1 +1 343 0 343 2 1 +1 344 0 344 2 1 +1 345 0 345 2 1 +1 346 0 346 2 1 +1 347 0 347 2 1 +1 348 0 348 2 1 +1 349 0 349 2 1 +1 350 0 350 2 1 +1 351 0 351 2 1 +1 352 0 352 2 1 +1 353 0 353 2 1 +1 354 0 354 2 1 +1 355 0 355 2 1 +1 356 0 356 2 1 +1 357 0 357 2 1 +1 358 0 358 2 1 +1 359 0 359 2 1 +1 360 0 360 2 1 +1 361 0 361 2 1 +1 362 0 362 2 1 +1 363 0 363 2 1 +1 364 0 364 2 1 +1 365 0 365 2 1 +1 366 0 366 2 1 +1 367 0 367 2 1 +1 368 0 368 2 1 +1 369 0 369 2 1 +1 370 0 370 2 1 +1 371 0 371 2 1 +1 372 0 372 2 1 +1 373 0 373 2 1 +1 374 0 374 2 1 +1 375 0 375 2 1 +1 376 0 376 2 1 +1 377 0 377 2 1 +1 378 0 378 2 1 +1 379 0 379 2 1 +1 380 0 380 2 1 +1 381 0 381 2 1 +1 382 0 382 2 1 +1 383 0 383 2 1 +1 384 0 384 2 1 +1 385 0 385 2 1 +1 386 0 386 2 1 +1 387 0 387 2 1 +1 388 0 388 2 1 +1 389 0 389 2 1 +1 390 0 390 2 1 +1 391 0 391 2 1 +1 392 0 392 2 1 +1 393 0 393 2 1 +1 394 0 394 2 1 +1 395 0 395 2 1 +1 396 0 396 2 1 +1 397 0 397 2 1 +1 398 0 398 2 1 +1 399 0 399 2 1 +1 400 0 400 2 1 +1 401 0 401 2 1 +1 402 0 402 2 1 +1 403 0 403 2 1 +1 404 0 404 2 1 +1 405 0 405 2 1 +1 406 0 406 2 1 +1 407 0 407 2 1 +1 408 0 408 2 1 +1 409 0 409 2 1 +1 410 0 410 2 1 +1 411 0 411 2 1 +1 412 0 412 2 1 +1 413 0 413 2 1 +1 414 0 414 2 1 +1 415 0 415 2 1 +1 416 0 416 2 1 +1 417 0 417 2 1 +1 418 0 418 2 1 +1 419 0 419 2 1 +1 420 0 420 2 1 +1 421 0 421 2 1 +1 422 0 422 2 1 +1 423 0 423 2 1 +1 424 0 424 2 1 +1 425 0 425 2 1 +1 426 0 426 2 1 +1 427 0 427 2 1 +1 428 0 428 2 1 +1 429 0 429 2 1 +1 430 0 430 2 1 +1 431 0 431 2 1 +1 432 0 432 2 1 +1 433 0 433 2 1 +1 434 0 434 2 1 +1 435 0 435 2 1 +1 436 0 436 2 1 +1 437 0 437 2 1 +1 438 0 438 2 1 +1 439 0 439 2 1 +1 440 0 440 2 1 +1 441 0 441 2 1 +1 442 0 442 2 1 +1 443 0 443 2 1 +1 444 0 444 2 1 +1 445 0 445 2 1 +1 446 0 446 2 1 +1 447 0 447 2 1 +1 448 0 448 2 1 +1 449 0 449 2 1 +1 450 0 450 2 1 +1 451 0 451 2 1 +1 452 0 452 2 1 +1 453 0 453 2 1 +1 454 0 454 2 1 +1 455 0 455 2 1 +1 456 0 456 2 1 +1 457 0 457 2 1 +1 458 0 458 2 1 +1 459 0 459 2 1 +1 460 0 460 2 1 +1 461 0 461 2 1 +1 462 0 462 2 1 +1 463 0 463 2 1 +1 464 0 464 2 1 +1 465 0 465 2 1 +1 466 0 466 2 1 +1 467 0 467 2 1 +1 468 0 468 2 1 +1 469 0 469 2 1 +1 470 0 470 2 1 +1 471 0 471 2 1 +1 472 0 472 2 1 +1 473 0 473 2 1 +1 474 0 474 2 1 +1 475 0 475 2 1 +1 476 0 476 2 1 +1 477 0 477 2 1 +1 478 0 478 2 1 +1 479 0 479 2 1 +1 480 0 480 2 1 +1 481 0 481 2 1 +1 482 0 482 2 1 +1 483 0 483 2 1 +1 484 0 484 2 1 +1 485 0 485 2 1 +1 486 0 486 2 1 +1 487 0 487 2 1 +1 488 0 488 2 1 +1 489 0 489 2 1 +1 490 0 490 2 1 +1 491 0 491 2 1 +1 492 0 492 2 1 +1 493 0 493 2 1 +1 494 0 494 2 1 +1 495 0 495 2 1 +1 496 0 496 2 1 +1 497 0 497 2 1 +1 498 0 498 2 1 +1 499 0 499 2 1 +1 500 0 500 2 1 +1 501 0 501 2 1 +1 502 0 502 2 1 +1 503 0 503 2 1 +1 504 0 504 2 1 +1 505 0 505 2 1 +1 506 0 506 2 1 +1 507 0 507 2 1 +1 508 0 508 2 1 +1 509 0 509 2 1 +1 510 0 510 2 1 +1 511 0 511 2 1 +1 512 0 512 2 1 +1 513 0 513 2 1 +1 514 0 514 2 1 +1 515 0 515 2 1 +1 516 0 516 2 1 +1 517 0 517 2 1 +1 518 0 518 2 1 +1 519 0 519 2 1 +1 520 0 520 2 1 +1 521 0 521 2 1 +1 522 0 522 2 1 +1 523 0 523 2 1 +1 524 0 524 2 1 +1 525 0 525 2 1 +1 526 0 526 2 1 +1 527 0 527 2 1 +1 528 0 528 2 1 +1 529 0 529 2 1 +1 530 0 530 2 1 +1 531 0 531 2 1 +1 532 0 532 2 1 +1 533 0 533 2 1 +1 534 0 534 2 1 +1 535 0 535 2 1 +1 536 0 536 2 1 +1 537 0 537 2 1 +1 538 0 538 2 1 +1 539 0 539 2 1 +1 540 0 540 2 1 +1 541 0 541 2 1 +1 542 0 542 2 1 +1 543 0 543 2 1 +1 544 0 544 2 1 +1 545 0 545 2 1 +1 546 0 546 2 1 +1 547 0 547 2 1 +1 548 0 548 2 1 +1 549 0 549 2 1 +1 550 0 550 2 1 +1 551 0 551 2 1 +1 552 0 552 2 1 +1 553 0 553 2 1 +1 554 0 554 2 1 +1 555 0 555 2 1 +1 556 0 556 2 1 +1 557 0 557 2 1 +1 558 0 558 2 1 +1 559 0 559 2 1 +1 560 0 560 2 1 +1 561 0 561 2 1 +1 562 0 562 2 1 +1 563 0 563 2 1 +1 564 0 564 2 1 +1 565 0 565 2 1 +1 566 0 566 2 1 +1 567 0 567 2 1 +1 568 0 568 2 1 +1 569 0 569 2 1 +1 570 0 570 2 1 +1 571 0 571 2 1 +1 572 0 572 2 1 +1 573 0 573 2 1 +1 574 0 574 2 1 +1 575 0 575 2 1 +1 576 0 576 2 1 +1 577 0 577 2 1 +1 578 0 578 2 1 +1 579 0 579 2 1 +1 580 0 580 2 1 +1 581 0 581 2 1 +1 582 0 582 2 1 +1 583 0 583 2 1 +1 584 0 584 2 1 +1 585 0 585 2 1 +1 586 0 586 2 1 +1 587 0 587 2 1 +1 588 0 588 2 1 +1 589 0 589 2 1 +1 590 0 590 2 1 +1 591 0 591 2 1 +1 592 0 592 2 1 +1 593 0 593 2 1 +1 594 0 594 2 1 +1 595 0 595 2 1 +1 596 0 596 2 1 +1 597 0 597 2 1 +1 598 0 598 2 1 +1 599 0 599 2 1 +1 600 0 600 2 1 +1 601 0 601 2 1 +1 602 0 602 2 1 +1 603 0 603 2 1 +1 604 0 604 2 1 +1 605 0 605 2 1 +1 606 0 606 2 1 +1 607 0 607 2 1 +1 608 0 608 2 1 +1 609 0 609 2 1 +1 610 0 610 2 1 +1 611 0 611 2 1 +1 612 0 612 2 1 +1 613 0 613 2 1 +1 614 0 614 2 1 +1 615 0 615 2 1 +1 616 0 616 2 1 +1 617 0 617 2 1 +1 618 0 618 2 1 +1 619 0 619 2 1 +1 620 0 620 2 1 +1 621 0 621 2 1 +1 622 0 622 2 1 +1 623 0 623 2 1 +1 624 0 624 2 1 +1 625 0 625 2 1 +1 626 0 626 2 1 +1 627 0 627 2 1 +1 628 0 628 2 1 +1 629 0 629 2 1 +1 630 0 630 2 1 +1 631 0 631 2 1 +1 632 0 632 2 1 +1 633 0 633 2 1 +1 634 0 634 2 1 +1 635 0 635 2 1 +1 636 0 636 2 1 +1 637 0 637 2 1 +1 638 0 638 2 1 +1 639 0 639 2 1 +1 640 0 640 2 1 +1 641 0 641 2 1 +1 642 0 642 2 1 +1 643 0 643 2 1 +1 644 0 644 2 1 +1 645 0 645 2 1 +1 646 0 646 2 1 +1 647 0 647 2 1 +1 648 0 648 2 1 +1 649 0 649 2 1 +1 650 0 650 2 1 +1 651 0 651 2 1 +1 652 0 652 2 1 +1 653 0 653 2 1 +1 654 0 654 2 1 +1 655 0 655 2 1 +1 656 0 656 2 1 +1 657 0 657 2 1 +1 658 0 658 2 1 +1 659 0 659 2 1 +1 660 0 660 2 1 +1 661 0 661 2 1 +1 662 0 662 2 1 +1 663 0 663 2 1 +1 664 0 664 2 1 +1 665 0 665 2 1 +1 666 0 666 2 1 +1 667 0 667 2 1 +1 668 0 668 2 1 +1 669 0 669 2 1 +1 670 0 670 2 1 +1 671 0 671 2 1 +1 672 0 672 2 1 +1 673 0 673 2 1 +1 674 0 674 2 1 +1 675 0 675 2 1 +1 676 0 676 2 1 +1 677 0 677 2 1 +1 678 0 678 2 1 +1 679 0 679 2 1 +1 680 0 680 2 1 +1 681 0 681 2 1 +1 682 0 682 2 1 +1 683 0 683 2 1 +1 684 0 684 2 1 +1 685 0 685 2 1 +1 686 0 686 2 1 +1 687 0 687 2 1 +1 688 0 688 2 1 +1 689 0 689 2 1 +1 690 0 690 2 1 +1 691 0 691 2 1 +1 692 0 692 2 1 +1 693 0 693 2 1 +1 694 0 694 2 1 +1 695 0 695 2 1 +1 696 0 696 2 1 +1 697 0 697 2 1 +1 698 0 698 2 1 +1 699 0 699 2 1 +1 700 0 700 2 1 +1 701 0 701 2 1 +1 702 0 702 2 1 +1 703 0 703 2 1 +1 704 0 704 2 1 +1 705 0 705 2 1 +1 706 0 706 2 1 +1 707 0 707 2 1 +1 708 0 708 2 1 +1 709 0 709 2 1 +1 710 0 710 2 1 +1 711 0 711 2 1 +1 712 0 712 2 1 +1 713 0 713 2 1 +1 714 0 714 2 1 +1 715 0 715 2 1 +1 716 0 716 2 1 +1 717 0 717 2 1 +1 718 0 718 2 1 +1 719 0 719 2 1 +1 720 0 720 2 1 +1 721 0 721 2 1 +1 722 0 722 2 1 +1 723 0 723 2 1 +1 724 0 724 2 1 +1 725 0 725 2 1 +1 726 0 726 2 1 +1 727 0 727 2 1 +1 728 0 728 2 1 +1 729 0 729 2 1 +1 730 0 730 2 1 +1 731 0 731 2 1 +1 732 0 732 2 1 +1 733 0 733 2 1 +1 734 0 734 2 1 +1 735 0 735 2 1 +1 736 0 736 2 1 +1 737 0 737 2 1 +1 738 0 738 2 1 +1 739 0 739 2 1 +1 740 0 740 2 1 +1 741 0 741 2 1 +1 742 0 742 2 1 +1 743 0 743 2 1 +1 744 0 744 2 1 +1 745 0 745 2 1 +1 746 0 746 2 1 +1 747 0 747 2 1 +1 748 0 748 2 1 +1 749 0 749 2 1 +1 750 0 750 2 1 +1 751 0 751 2 1 +1 752 0 752 2 1 +1 753 0 753 2 1 +1 754 0 754 2 1 +1 755 0 755 2 1 +1 756 0 756 2 1 +1 757 0 757 2 1 +1 758 0 758 2 1 +1 759 0 759 2 1 +1 760 0 760 2 1 +1 761 0 761 2 1 +1 762 0 762 2 1 +1 763 0 763 2 1 +1 764 0 764 2 1 +1 765 0 765 2 1 +1 766 0 766 2 1 +1 767 0 767 2 1 +1 768 0 768 2 1 +1 769 0 769 2 1 +1 770 0 770 2 1 +1 771 0 771 2 1 +1 772 0 772 2 1 +1 773 0 773 2 1 +1 774 0 774 2 1 +1 775 0 775 2 1 +1 776 0 776 2 1 +1 777 0 777 2 1 +1 778 0 778 2 1 +1 779 0 779 2 1 +1 780 0 780 2 1 +1 781 0 781 2 1 +1 782 0 782 2 1 +1 783 0 783 2 1 +1 784 0 784 2 1 +1 785 0 785 2 1 +1 786 0 786 2 1 +1 787 0 787 2 1 +1 788 0 788 2 1 +1 789 0 789 2 1 +1 790 0 790 2 1 +1 791 0 791 2 1 +1 792 0 792 2 1 +1 793 0 793 2 1 +1 794 0 794 2 1 +1 795 0 795 2 1 +1 796 0 796 2 1 +1 797 0 797 2 1 +1 798 0 798 2 1 +1 799 0 799 2 1 +1 800 0 800 2 1 +1 801 0 801 2 1 +1 802 0 802 2 1 +1 803 0 803 2 1 +1 804 0 804 2 1 +1 805 0 805 2 1 +1 806 0 806 2 1 +1 807 0 807 2 1 +1 808 0 808 2 1 +1 809 0 809 2 1 +1 810 0 810 2 1 +1 811 0 811 2 1 +1 812 0 812 2 1 +1 813 0 813 2 1 +1 814 0 814 2 1 +1 815 0 815 2 1 +1 816 0 816 2 1 +1 817 0 817 2 1 +1 818 0 818 2 1 +1 819 0 819 2 1 +1 820 0 820 2 1 +1 821 0 821 2 1 +1 822 0 822 2 1 +1 823 0 823 2 1 +1 824 0 824 2 1 +1 825 0 825 2 1 +1 826 0 826 2 1 +1 827 0 827 2 1 +1 828 0 828 2 1 +1 829 0 829 2 1 +1 830 0 830 2 1 +1 831 0 831 2 1 +1 832 0 832 2 1 +1 833 0 833 2 1 +1 834 0 834 2 1 +1 835 0 835 2 1 +1 836 0 836 2 1 +1 837 0 837 2 1 +1 838 0 838 2 1 +1 839 0 839 2 1 +1 840 0 840 2 1 +1 841 0 841 2 1 +1 842 0 842 2 1 +1 843 0 843 2 1 +1 844 0 844 2 1 +1 845 0 845 2 1 +1 846 0 846 2 1 +1 847 0 847 2 1 +1 848 0 848 2 1 +1 849 0 849 2 1 +1 850 0 850 2 1 +1 851 0 851 2 1 +1 852 0 852 2 1 +1 853 0 853 2 1 +1 854 0 854 2 1 +1 855 0 855 2 1 +1 856 0 856 2 1 +1 857 0 857 2 1 +1 858 0 858 2 1 +1 859 0 859 2 1 +1 860 0 860 2 1 +1 861 0 861 2 1 +1 862 0 862 2 1 +1 863 0 863 2 1 +1 864 0 864 2 1 +1 865 0 865 2 1 +1 866 0 866 2 1 +1 867 0 867 2 1 +1 868 0 868 2 1 +1 869 0 869 2 1 +1 870 0 870 2 1 +1 871 0 871 2 1 +1 872 0 872 2 1 +1 873 0 873 2 1 +1 874 0 874 2 1 +1 875 0 875 2 1 +1 876 0 876 2 1 +1 877 0 877 2 1 +1 878 0 878 2 1 +1 879 0 879 2 1 +1 880 0 880 2 1 +1 881 0 881 2 1 +1 882 0 882 2 1 +1 883 0 883 2 1 +1 884 0 884 2 1 +1 885 0 885 2 1 +1 886 0 886 2 1 +1 887 0 887 2 1 +1 888 0 888 2 1 +1 889 0 889 2 1 +1 890 0 890 2 1 +1 891 0 891 2 1 +1 892 0 892 2 1 +1 893 0 893 2 1 +1 894 0 894 2 1 +1 895 0 895 2 1 +1 896 0 896 2 1 +1 897 0 897 2 1 +1 898 0 898 2 1 +1 899 0 899 2 1 +1 900 0 900 2 1 +1 901 0 901 2 1 +1 902 0 902 2 1 +1 903 0 903 2 1 +1 904 0 904 2 1 +1 905 0 905 2 1 +1 906 0 906 2 1 +1 907 0 907 2 1 +1 908 0 908 2 1 +1 909 0 909 2 1 +1 910 0 910 2 1 +1 911 0 911 2 1 +1 912 0 912 2 1 +1 913 0 913 2 1 +1 914 0 914 2 1 +1 915 0 915 2 1 +1 916 0 916 2 1 +1 917 0 917 2 1 +1 918 0 918 2 1 +1 919 0 919 2 1 +1 920 0 920 2 1 +1 921 0 921 2 1 +1 922 0 922 2 1 +1 923 0 923 2 1 +1 924 0 924 2 1 +1 925 0 925 2 1 +1 926 0 926 2 1 +1 927 0 927 2 1 +1 928 0 928 2 1 +1 929 0 929 2 1 +1 930 0 930 2 1 +1 931 0 931 2 1 +1 932 0 932 2 1 +1 933 0 933 2 1 +1 934 0 934 2 1 +1 935 0 935 2 1 +1 936 0 936 2 1 +1 937 0 937 2 1 +1 938 0 938 2 1 +1 939 0 939 2 1 +1 940 0 940 2 1 +1 941 0 941 2 1 +1 942 0 942 2 1 +1 943 0 943 2 1 +1 944 0 944 2 1 +1 945 0 945 2 1 +1 946 0 946 2 1 +1 947 0 947 2 1 +1 948 0 948 2 1 +1 949 0 949 2 1 +1 950 0 950 2 1 +1 951 0 951 2 1 +1 952 0 952 2 1 +1 953 0 953 2 1 +1 954 0 954 2 1 +1 955 0 955 2 1 +1 956 0 956 2 1 +1 957 0 957 2 1 +1 958 0 958 2 1 +1 959 0 959 2 1 +1 960 0 960 2 1 +1 961 0 961 2 1 diff --git a/data-raw/datasets/families.fam b/data-raw/datasets/families.fam index 288ed997..f5875bb0 100644 --- a/data-raw/datasets/families.fam +++ b/data-raw/datasets/families.fam @@ -10,9653 +10,3 @@ 10 10 0 0 0 0 11 11 0 0 0 0 12 12 0 0 0 0 -13 13 0 0 0 0 -14 14 0 0 0 0 -15 15 0 0 0 0 -16 16 0 0 0 0 -17 17 0 0 0 0 -18 18 0 0 0 0 -19 19 0 0 0 0 -20 20 0 0 0 0 -21 21 0 0 0 0 -22 22 0 0 0 0 -23 23 0 0 0 0 -24 24 0 0 0 0 -25 25 0 0 0 0 -26 26 0 0 0 0 -27 27 0 0 0 0 -28 28 0 0 0 0 -29 29 0 0 0 0 -30 30 0 0 0 0 -31 31 0 0 0 0 -32 32 0 0 0 0 -33 33 0 0 0 0 -34 34 0 0 0 0 -35 35 0 0 0 0 -36 36 0 0 0 0 -37 37 0 0 0 0 -38 38 0 0 0 0 -39 39 0 0 0 0 -40 40 0 0 0 0 -41 41 0 0 0 0 -42 42 0 0 0 0 -43 43 0 0 0 0 -44 44 0 0 0 0 -45 45 0 0 0 0 -46 46 0 0 0 0 -47 47 0 0 0 0 -48 48 0 0 0 0 -49 49 0 0 0 0 -50 50 0 0 0 0 -51 51 0 0 0 0 -52 52 0 0 0 0 -53 53 0 0 0 0 -54 54 0 0 0 0 -55 55 0 0 0 0 -56 56 0 0 0 0 -57 57 0 0 0 0 -58 58 0 0 0 0 -59 59 0 0 0 0 -60 60 0 0 0 0 -61 61 0 0 0 0 -62 62 0 0 0 0 -63 63 0 0 0 0 -64 64 0 0 0 0 -65 65 0 0 0 0 -66 66 0 0 0 0 -67 67 0 0 0 0 -68 68 0 0 0 0 -69 69 0 0 0 0 -70 70 0 0 0 0 -71 71 0 0 0 0 -72 72 0 0 0 0 -73 73 0 0 0 0 -74 74 0 0 0 0 -75 75 0 0 0 0 -76 76 0 0 0 0 -77 77 0 0 0 0 -78 78 0 0 0 0 -79 79 0 0 0 0 -80 80 0 0 0 0 -81 81 0 0 0 0 -82 82 0 0 0 0 -83 83 0 0 0 0 -84 84 0 0 0 0 -85 85 0 0 0 0 -86 86 0 0 0 0 -87 87 0 0 0 0 -88 88 0 0 0 0 -89 89 0 0 0 0 -90 90 0 0 0 0 -91 91 0 0 0 0 -92 92 0 0 0 0 -93 93 0 0 0 0 -94 94 0 0 0 0 -95 95 0 0 0 0 -96 96 0 0 0 0 -97 97 0 0 0 0 -98 98 0 0 0 0 -99 99 0 0 0 0 -100 100 0 0 0 0 -101 101 0 0 0 0 -102 102 0 0 0 0 -103 103 0 0 0 0 -104 104 0 0 0 0 -105 105 0 0 0 0 -106 106 0 0 0 0 -107 107 0 0 0 0 -108 108 0 0 0 0 -109 109 0 0 0 0 -110 110 0 0 0 0 -111 111 0 0 0 0 -112 112 0 0 0 0 -113 113 0 0 0 0 -114 114 0 0 0 0 -115 115 0 0 0 0 -116 116 0 0 0 0 -117 117 0 0 0 0 -118 118 0 0 0 0 -119 119 0 0 0 0 -120 120 0 0 0 0 -121 121 0 0 0 0 -122 122 0 0 0 0 -123 123 0 0 0 0 -124 124 0 0 0 0 -125 125 0 0 0 0 -126 126 0 0 0 0 -127 127 0 0 0 0 -128 128 0 0 0 0 -129 129 0 0 0 0 -130 130 0 0 0 0 -131 131 0 0 0 0 -132 132 0 0 0 0 -133 133 0 0 0 0 -134 134 0 0 0 0 -135 135 0 0 0 0 -136 136 0 0 0 0 -137 137 0 0 0 0 -138 138 0 0 0 0 -139 139 0 0 0 0 -140 140 0 0 0 0 -141 141 0 0 0 0 -142 142 0 0 0 0 -143 143 0 0 0 0 -144 144 0 0 0 0 -145 145 0 0 0 0 -146 146 0 0 0 0 -147 147 0 0 0 0 -148 148 0 0 0 0 -149 149 0 0 0 0 -150 150 0 0 0 0 -151 151 0 0 0 0 -152 152 0 0 0 0 -153 153 0 0 0 0 -154 154 0 0 0 0 -155 155 0 0 0 0 -156 156 0 0 0 0 -157 157 0 0 0 0 -158 158 0 0 0 0 -159 159 0 0 0 0 -160 160 0 0 0 0 -161 161 0 0 0 0 -162 162 0 0 0 0 -163 163 0 0 0 0 -164 164 0 0 0 0 -165 165 0 0 0 0 -166 166 0 0 0 0 -167 167 0 0 0 0 -168 168 0 0 0 0 -169 169 0 0 0 0 -170 170 0 0 0 0 -171 171 0 0 0 0 -172 172 0 0 0 0 -173 173 0 0 0 0 -174 174 0 0 0 0 -175 175 0 0 0 0 -176 176 0 0 0 0 -177 177 0 0 0 0 -178 178 0 0 0 0 -179 179 0 0 0 0 -180 180 0 0 0 0 -181 181 0 0 0 0 -182 182 0 0 0 0 -183 183 0 0 0 0 -184 184 0 0 0 0 -185 185 0 0 0 0 -186 186 0 0 0 0 -187 187 0 0 0 0 -188 188 0 0 0 0 -189 189 0 0 0 0 -190 190 0 0 0 0 -191 191 0 0 0 0 -192 192 0 0 0 0 -193 193 0 0 0 0 -194 194 0 0 0 0 -195 195 0 0 0 0 -196 196 0 0 0 0 -197 197 0 0 0 0 -198 198 0 0 0 0 -199 199 0 0 0 0 -200 200 0 0 0 0 -201 201 0 0 0 0 -202 202 0 0 0 0 -203 203 0 0 0 0 -204 204 0 0 0 0 -205 205 0 0 0 0 -206 206 0 0 0 0 -207 207 0 0 0 0 -208 208 0 0 0 0 -209 209 0 0 0 0 -210 210 0 0 0 0 -211 211 0 0 0 0 -212 212 0 0 0 0 -213 213 0 0 0 0 -214 214 0 0 0 0 -215 215 0 0 0 0 -216 216 0 0 0 0 -217 217 0 0 0 0 -218 218 0 0 0 0 -219 219 0 0 0 0 -220 220 0 0 0 0 -221 221 0 0 0 0 -222 222 0 0 0 0 -223 223 0 0 0 0 -224 224 0 0 0 0 -225 225 0 0 0 0 -226 226 0 0 0 0 -227 227 0 0 0 0 -228 228 0 0 0 0 -229 229 0 0 0 0 -230 230 0 0 0 0 -231 231 0 0 0 0 -232 232 0 0 0 0 -233 233 0 0 0 0 -234 234 0 0 0 0 -235 235 0 0 0 0 -236 236 0 0 0 0 -237 237 0 0 0 0 -238 238 0 0 0 0 -239 239 0 0 0 0 -240 240 0 0 0 0 -241 241 0 0 0 0 -242 242 0 0 0 0 -243 243 0 0 0 0 -244 244 0 0 0 0 -245 245 0 0 0 0 -246 246 0 0 0 0 -247 247 0 0 0 0 -248 248 0 0 0 0 -249 249 0 0 0 0 -250 250 0 0 0 0 -251 251 0 0 0 0 -252 252 0 0 0 0 -253 253 0 0 0 0 -254 254 0 0 0 0 -255 255 0 0 0 0 -256 256 0 0 0 0 -257 257 0 0 0 0 -258 258 0 0 0 0 -259 259 0 0 0 0 -260 260 0 0 0 0 -261 261 0 0 0 0 -262 262 0 0 0 0 -263 263 0 0 0 0 -264 264 0 0 0 0 -265 265 0 0 0 0 -266 266 0 0 0 0 -267 267 0 0 0 0 -268 268 0 0 0 0 -269 269 0 0 0 0 -270 270 0 0 0 0 -271 271 0 0 0 0 -272 272 0 0 0 0 -273 273 0 0 0 0 -274 274 0 0 0 0 -275 275 0 0 0 0 -276 276 0 0 0 0 -277 277 0 0 0 0 -278 278 0 0 0 0 -279 279 0 0 0 0 -280 280 0 0 0 0 -281 281 0 0 0 0 -282 282 0 0 0 0 -283 283 0 0 0 0 -284 284 0 0 0 0 -285 285 0 0 0 0 -286 286 0 0 0 0 -287 287 0 0 0 0 -288 288 0 0 0 0 -289 289 0 0 0 0 -290 290 0 0 0 0 -291 291 0 0 0 0 -292 292 0 0 0 0 -293 293 0 0 0 0 -294 294 0 0 0 0 -295 295 0 0 0 0 -296 296 0 0 0 0 -297 297 0 0 0 0 -298 298 0 0 0 0 -299 299 0 0 0 0 -300 300 0 0 0 0 -301 301 0 0 0 0 -302 302 0 0 0 0 -303 303 0 0 0 0 -304 304 0 0 0 0 -305 305 0 0 0 0 -306 306 0 0 0 0 -307 307 0 0 0 0 -308 308 0 0 0 0 -309 309 0 0 0 0 -310 310 0 0 0 0 -311 311 0 0 0 0 -312 312 0 0 0 0 -313 313 0 0 0 0 -314 314 0 0 0 0 -315 315 0 0 0 0 -316 316 0 0 0 0 -317 317 0 0 0 0 -318 318 0 0 0 0 -319 319 0 0 0 0 -320 320 0 0 0 0 -321 321 0 0 0 0 -322 322 0 0 0 0 -323 323 0 0 0 0 -324 324 0 0 0 0 -325 325 0 0 0 0 -326 326 0 0 0 0 -327 327 0 0 0 0 -328 328 0 0 0 0 -329 329 0 0 0 0 -330 330 0 0 0 0 -331 331 0 0 0 0 -332 332 0 0 0 0 -333 333 0 0 0 0 -334 334 0 0 0 0 -335 335 0 0 0 0 -336 336 0 0 0 0 -337 337 0 0 0 0 -338 338 0 0 0 0 -339 339 0 0 0 0 -340 340 0 0 0 0 -341 341 0 0 0 0 -342 342 0 0 0 0 -343 343 0 0 0 0 -344 344 0 0 0 0 -345 345 0 0 0 0 -346 346 0 0 0 0 -347 347 0 0 0 0 -348 348 0 0 0 0 -349 349 0 0 0 0 -350 350 0 0 0 0 -351 351 0 0 0 0 -352 352 0 0 0 0 -353 353 0 0 0 0 -354 354 0 0 0 0 -355 355 0 0 0 0 -356 356 0 0 0 0 -357 357 0 0 0 0 -358 358 0 0 0 0 -359 359 0 0 0 0 -360 360 0 0 0 0 -361 361 0 0 0 0 -362 362 0 0 0 0 -363 363 0 0 0 0 -364 364 0 0 0 0 -365 365 0 0 0 0 -366 366 0 0 0 0 -367 367 0 0 0 0 -368 368 0 0 0 0 -369 369 0 0 0 0 -370 370 0 0 0 0 -371 371 0 0 0 0 -372 372 0 0 0 0 -373 373 0 0 0 0 -374 374 0 0 0 0 -375 375 0 0 0 0 -376 376 0 0 0 0 -377 377 0 0 0 0 -378 378 0 0 0 0 -379 379 0 0 0 0 -380 380 0 0 0 0 -381 381 0 0 0 0 -382 382 0 0 0 0 -383 383 0 0 0 0 -384 384 0 0 0 0 -385 385 0 0 0 0 -386 386 0 0 0 0 -387 387 0 0 0 0 -388 388 0 0 0 0 -389 389 0 0 0 0 -390 390 0 0 0 0 -391 391 0 0 0 0 -392 392 0 0 0 0 -393 393 0 0 0 0 -394 394 0 0 0 0 -395 395 0 0 0 0 -396 396 0 0 0 0 -397 397 0 0 0 0 -398 398 0 0 0 0 -399 399 0 0 0 0 -400 400 0 0 0 0 -401 401 0 0 0 0 -402 402 0 0 0 0 -403 403 0 0 0 0 -404 404 0 0 0 0 -405 405 0 0 0 0 -406 406 0 0 0 0 -407 407 0 0 0 0 -408 408 0 0 0 0 -409 409 0 0 0 0 -410 410 0 0 0 0 -411 411 0 0 0 0 -412 412 0 0 0 0 -413 413 0 0 0 0 -414 414 0 0 0 0 -415 415 0 0 0 0 -416 416 0 0 0 0 -417 417 0 0 0 0 -418 418 0 0 0 0 -419 419 0 0 0 0 -420 420 0 0 0 0 -421 421 0 0 0 0 -422 422 0 0 0 0 -423 423 0 0 0 0 -424 424 0 0 0 0 -425 425 0 0 0 0 -426 426 0 0 0 0 -427 427 0 0 0 0 -428 428 0 0 0 0 -429 429 0 0 0 0 -430 430 0 0 0 0 -431 431 0 0 0 0 -432 432 0 0 0 0 -433 433 0 0 0 0 -434 434 0 0 0 0 -435 435 0 0 0 0 -436 436 0 0 0 0 -437 437 0 0 0 0 -438 438 0 0 0 0 -439 439 0 0 0 0 -440 440 0 0 0 0 -441 441 0 0 0 0 -442 442 0 0 0 0 -443 443 0 0 0 0 -444 444 0 0 0 0 -445 445 0 0 0 0 -446 446 0 0 0 0 -447 447 0 0 0 0 -448 448 0 0 0 0 -449 449 0 0 0 0 -450 450 0 0 0 0 -451 451 0 0 0 0 -452 452 0 0 0 0 -453 453 0 0 0 0 -454 454 0 0 0 0 -455 455 0 0 0 0 -456 456 0 0 0 0 -457 457 0 0 0 0 -458 458 0 0 0 0 -459 459 0 0 0 0 -460 460 0 0 0 0 -461 461 0 0 0 0 -462 462 0 0 0 0 -463 463 0 0 0 0 -464 464 0 0 0 0 -465 465 0 0 0 0 -466 466 0 0 0 0 -467 467 0 0 0 0 -468 468 0 0 0 0 -469 469 0 0 0 0 -470 470 0 0 0 0 -471 471 0 0 0 0 -472 472 0 0 0 0 -473 473 0 0 0 0 -474 474 0 0 0 0 -475 475 0 0 0 0 -476 476 0 0 0 0 -477 477 0 0 0 0 -478 478 0 0 0 0 -479 479 0 0 0 0 -480 480 0 0 0 0 -481 481 0 0 0 0 -482 482 0 0 0 0 -483 483 0 0 0 0 -484 484 0 0 0 0 -485 485 0 0 0 0 -486 486 0 0 0 0 -487 487 0 0 0 0 -488 488 0 0 0 0 -489 489 0 0 0 0 -490 490 0 0 0 0 -491 491 0 0 0 0 -492 492 0 0 0 0 -493 493 0 0 0 0 -494 494 0 0 0 0 -495 495 0 0 0 0 -496 496 0 0 0 0 -497 497 0 0 0 0 -498 498 0 0 0 0 -499 499 0 0 0 0 -500 500 0 0 0 0 -501 501 0 0 0 0 -502 502 0 0 0 0 -503 503 0 0 0 0 -504 504 0 0 0 0 -505 505 0 0 0 0 -506 506 0 0 0 0 -507 507 0 0 0 0 -508 508 0 0 0 0 -509 509 0 0 0 0 -510 510 0 0 0 0 -511 511 0 0 0 0 -512 512 0 0 0 0 -513 513 0 0 0 0 -514 514 0 0 0 0 -515 515 0 0 0 0 -516 516 0 0 0 0 -517 517 0 0 0 0 -518 518 0 0 0 0 -519 519 0 0 0 0 -520 520 0 0 0 0 -521 521 0 0 0 0 -522 522 0 0 0 0 -523 523 0 0 0 0 -524 524 0 0 0 0 -525 525 0 0 0 0 -526 526 0 0 0 0 -527 527 0 0 0 0 -528 528 0 0 0 0 -529 529 0 0 0 0 -530 530 0 0 0 0 -531 531 0 0 0 0 -532 532 0 0 0 0 -533 533 0 0 0 0 -534 534 0 0 0 0 -535 535 0 0 0 0 -536 536 0 0 0 0 -537 537 0 0 0 0 -538 538 0 0 0 0 -539 539 0 0 0 0 -540 540 0 0 0 0 -541 541 0 0 0 0 -542 542 0 0 0 0 -543 543 0 0 0 0 -544 544 0 0 0 0 -545 545 0 0 0 0 -546 546 0 0 0 0 -547 547 0 0 0 0 -548 548 0 0 0 0 -549 549 0 0 0 0 -550 550 0 0 0 0 -551 551 0 0 0 0 -552 552 0 0 0 0 -553 553 0 0 0 0 -554 554 0 0 0 0 -555 555 0 0 0 0 -556 556 0 0 0 0 -557 557 0 0 0 0 -558 558 0 0 0 0 -559 559 0 0 0 0 -560 560 0 0 0 0 -561 561 0 0 0 0 -562 562 0 0 0 0 -563 563 0 0 0 0 -564 564 0 0 0 0 -565 565 0 0 0 0 -566 566 0 0 0 0 -567 567 0 0 0 0 -568 568 0 0 0 0 -569 569 0 0 0 0 -570 570 0 0 0 0 -571 571 0 0 0 0 -572 572 0 0 0 0 -573 573 0 0 0 0 -574 574 0 0 0 0 -575 575 0 0 0 0 -576 576 0 0 0 0 -577 577 0 0 0 0 -578 578 0 0 0 0 -579 579 0 0 0 0 -580 580 0 0 0 0 -581 581 0 0 0 0 -582 582 0 0 0 0 -583 583 0 0 0 0 -584 584 0 0 0 0 -585 585 0 0 0 0 -586 586 0 0 0 0 -587 587 0 0 0 0 -588 588 0 0 0 0 -589 589 0 0 0 0 -590 590 0 0 0 0 -591 591 0 0 0 0 -592 592 0 0 0 0 -593 593 0 0 0 0 -594 594 0 0 0 0 -595 595 0 0 0 0 -596 596 0 0 0 0 -597 597 0 0 0 0 -598 598 0 0 0 0 -599 599 0 0 0 0 -600 600 0 0 0 0 -601 601 0 0 0 0 -602 602 0 0 0 0 -603 603 0 0 0 0 -604 604 0 0 0 0 -605 605 0 0 0 0 -606 606 0 0 0 0 -607 607 0 0 0 0 -608 608 0 0 0 0 -609 609 0 0 0 0 -610 610 0 0 0 0 -611 611 0 0 0 0 -612 612 0 0 0 0 -613 613 0 0 0 0 -614 614 0 0 0 0 -615 615 0 0 0 0 -616 616 0 0 0 0 -617 617 0 0 0 0 -618 618 0 0 0 0 -619 619 0 0 0 0 -620 620 0 0 0 0 -621 621 0 0 0 0 -622 622 0 0 0 0 -623 623 0 0 0 0 -624 624 0 0 0 0 -625 625 0 0 0 0 -626 626 0 0 0 0 -627 627 0 0 0 0 -628 628 0 0 0 0 -629 629 0 0 0 0 -630 630 0 0 0 0 -631 631 0 0 0 0 -632 632 0 0 0 0 -633 633 0 0 0 0 -634 634 0 0 0 0 -635 635 0 0 0 0 -636 636 0 0 0 0 -637 637 0 0 0 0 -638 638 0 0 0 0 -639 639 0 0 0 0 -640 640 0 0 0 0 -641 641 0 0 0 0 -642 642 0 0 0 0 -643 643 0 0 0 0 -644 644 0 0 0 0 -645 645 0 0 0 0 -646 646 0 0 0 0 -647 647 0 0 0 0 -648 648 0 0 0 0 -649 649 0 0 0 0 -650 650 0 0 0 0 -651 651 0 0 0 0 -652 652 0 0 0 0 -653 653 0 0 0 0 -654 654 0 0 0 0 -655 655 0 0 0 0 -656 656 0 0 0 0 -657 657 0 0 0 0 -658 658 0 0 0 0 -659 659 0 0 0 0 -660 660 0 0 0 0 -661 661 0 0 0 0 -662 662 0 0 0 0 -663 663 0 0 0 0 -664 664 0 0 0 0 -665 665 0 0 0 0 -666 666 0 0 0 0 -667 667 0 0 0 0 -668 668 0 0 0 0 -669 669 0 0 0 0 -670 670 0 0 0 0 -671 671 0 0 0 0 -672 672 0 0 0 0 -673 673 0 0 0 0 -674 674 0 0 0 0 -675 675 0 0 0 0 -676 676 0 0 0 0 -677 677 0 0 0 0 -678 678 0 0 0 0 -679 679 0 0 0 0 -680 680 0 0 0 0 -681 681 0 0 0 0 -682 682 0 0 0 0 -683 683 0 0 0 0 -684 684 0 0 0 0 -685 685 0 0 0 0 -686 686 0 0 0 0 -687 687 0 0 0 0 -688 688 0 0 0 0 -689 689 0 0 0 0 -690 690 0 0 0 0 -691 691 0 0 0 0 -692 692 0 0 0 0 -693 693 0 0 0 0 -694 694 0 0 0 0 -695 695 0 0 0 0 -696 696 0 0 0 0 -697 697 0 0 0 0 -698 698 0 0 0 0 -699 699 0 0 0 0 -700 700 0 0 0 0 -701 701 0 0 0 0 -702 702 0 0 0 0 -703 703 0 0 0 0 -704 704 0 0 0 0 -705 705 0 0 0 0 -706 706 0 0 0 0 -707 707 0 0 0 0 -708 708 0 0 0 0 -709 709 0 0 0 0 -710 710 0 0 0 0 -711 711 0 0 0 0 -712 712 0 0 0 0 -713 713 0 0 0 0 -714 714 0 0 0 0 -715 715 0 0 0 0 -716 716 0 0 0 0 -717 717 0 0 0 0 -718 718 0 0 0 0 -719 719 0 0 0 0 -720 720 0 0 0 0 -721 721 0 0 0 0 -722 722 0 0 0 0 -723 723 0 0 0 0 -724 724 0 0 0 0 -725 725 0 0 0 0 -726 726 0 0 0 0 -727 727 0 0 0 0 -728 728 0 0 0 0 -729 729 0 0 0 0 -730 730 0 0 0 0 -731 731 0 0 0 0 -732 732 0 0 0 0 -733 733 0 0 0 0 -734 734 0 0 0 0 -735 735 0 0 0 0 -736 736 0 0 0 0 -737 737 0 0 0 0 -738 738 0 0 0 0 -739 739 0 0 0 0 -740 740 0 0 0 0 -741 741 0 0 0 0 -742 742 0 0 0 0 -743 743 0 0 0 0 -744 744 0 0 0 0 -745 745 0 0 0 0 -746 746 0 0 0 0 -747 747 0 0 0 0 -748 748 0 0 0 0 -749 749 0 0 0 0 -750 750 0 0 0 0 -751 751 0 0 0 0 -752 752 0 0 0 0 -753 753 0 0 0 0 -754 754 0 0 0 0 -755 755 0 0 0 0 -756 756 0 0 0 0 -757 757 0 0 0 0 -758 758 0 0 0 0 -759 759 0 0 0 0 -760 760 0 0 0 0 -761 761 0 0 0 0 -762 762 0 0 0 0 -763 763 0 0 0 0 -764 764 0 0 0 0 -765 765 0 0 0 0 -766 766 0 0 0 0 -767 767 0 0 0 0 -768 768 0 0 0 0 -769 769 0 0 0 0 -770 770 0 0 0 0 -771 771 0 0 0 0 -772 772 0 0 0 0 -773 773 0 0 0 0 -774 774 0 0 0 0 -775 775 0 0 0 0 -776 776 0 0 0 0 -777 777 0 0 0 0 -778 778 0 0 0 0 -779 779 0 0 0 0 -780 780 0 0 0 0 -781 781 0 0 0 0 -782 782 0 0 0 0 -783 783 0 0 0 0 -784 784 0 0 0 0 -785 785 0 0 0 0 -786 786 0 0 0 0 -787 787 0 0 0 0 -788 788 0 0 0 0 -789 789 0 0 0 0 -790 790 0 0 0 0 -791 791 0 0 0 0 -792 792 0 0 0 0 -793 793 0 0 0 0 -794 794 0 0 0 0 -795 795 0 0 0 0 -796 796 0 0 0 0 -797 797 0 0 0 0 -798 798 0 0 0 0 -799 799 0 0 0 0 -800 800 0 0 0 0 -801 801 0 0 0 0 -802 802 0 0 0 0 -803 803 0 0 0 0 -804 804 0 0 0 0 -805 805 0 0 0 0 -806 806 0 0 0 0 -807 807 0 0 0 0 -808 808 0 0 0 0 -809 809 0 0 0 0 -810 810 0 0 0 0 -811 811 0 0 0 0 -812 812 0 0 0 0 -813 813 0 0 0 0 -814 814 0 0 0 0 -815 815 0 0 0 0 -816 816 0 0 0 0 -817 817 0 0 0 0 -818 818 0 0 0 0 -819 819 0 0 0 0 -820 820 0 0 0 0 -821 821 0 0 0 0 -822 822 0 0 0 0 -823 823 0 0 0 0 -824 824 0 0 0 0 -825 825 0 0 0 0 -826 826 0 0 0 0 -827 827 0 0 0 0 -828 828 0 0 0 0 -829 829 0 0 0 0 -830 830 0 0 0 0 -831 831 0 0 0 0 -832 832 0 0 0 0 -833 833 0 0 0 0 -834 834 0 0 0 0 -835 835 0 0 0 0 -836 836 0 0 0 0 -837 837 0 0 0 0 -838 838 0 0 0 0 -839 839 0 0 0 0 -840 840 0 0 0 0 -841 841 0 0 0 0 -842 842 0 0 0 0 -843 843 0 0 0 0 -844 844 0 0 0 0 -845 845 0 0 0 0 -846 846 0 0 0 0 -847 847 0 0 0 0 -848 848 0 0 0 0 -849 849 0 0 0 0 -850 850 0 0 0 0 -851 851 0 0 0 0 -852 852 0 0 0 0 -853 853 0 0 0 0 -854 854 0 0 0 0 -855 855 0 0 0 0 -856 856 0 0 0 0 -857 857 0 0 0 0 -858 858 0 0 0 0 -859 859 0 0 0 0 -860 860 0 0 0 0 -861 861 0 0 0 0 -862 862 0 0 0 0 -863 863 0 0 0 0 -864 864 0 0 0 0 -865 865 0 0 0 0 -866 866 0 0 0 0 -867 867 0 0 0 0 -868 868 0 0 0 0 -869 869 0 0 0 0 -870 870 0 0 0 0 -871 871 0 0 0 0 -872 872 0 0 0 0 -873 873 0 0 0 0 -874 874 0 0 0 0 -875 875 0 0 0 0 -876 876 0 0 0 0 -877 877 0 0 0 0 -878 878 0 0 0 0 -879 879 0 0 0 0 -880 880 0 0 0 0 -881 881 0 0 0 0 -882 882 0 0 0 0 -883 883 0 0 0 0 -884 884 0 0 0 0 -885 885 0 0 0 0 -886 886 0 0 0 0 -887 887 0 0 0 0 -888 888 0 0 0 0 -889 889 0 0 0 0 -890 890 0 0 0 0 -891 891 0 0 0 0 -892 892 0 0 0 0 -893 893 0 0 0 0 -894 894 0 0 0 0 -895 895 0 0 0 0 -896 896 0 0 0 0 -897 897 0 0 0 0 -898 898 0 0 0 0 -899 899 0 0 0 0 -900 900 0 0 0 0 -901 901 0 0 0 0 -902 902 0 0 0 0 -903 903 0 0 0 0 -904 904 0 0 0 0 -905 905 0 0 0 0 -906 906 0 0 0 0 -907 907 0 0 0 0 -908 908 0 0 0 0 -909 909 0 0 0 0 -910 910 0 0 0 0 -911 911 0 0 0 0 -912 912 0 0 0 0 -913 913 0 0 0 0 -914 914 0 0 0 0 -915 915 0 0 0 0 -916 916 0 0 0 0 -917 917 0 0 0 0 -918 918 0 0 0 0 -919 919 0 0 0 0 -920 920 0 0 0 0 -921 921 0 0 0 0 -922 922 0 0 0 0 -923 923 0 0 0 0 -924 924 0 0 0 0 -925 925 0 0 0 0 -926 926 0 0 0 0 -927 927 0 0 0 0 -928 928 0 0 0 0 -929 929 0 0 0 0 -930 930 0 0 0 0 -931 931 0 0 0 0 -932 932 0 0 0 0 -933 933 0 0 0 0 -934 934 0 0 0 0 -935 935 0 0 0 0 -936 936 0 0 0 0 -937 937 0 0 0 0 -938 938 0 0 0 0 -939 939 0 0 0 0 -940 940 0 0 0 0 -941 941 0 0 0 0 -942 942 0 0 0 0 -943 943 0 0 0 0 -944 944 0 0 0 0 -945 945 0 0 0 0 -946 946 0 0 0 0 -947 947 0 0 0 0 -948 948 0 0 0 0 -949 949 0 0 0 0 -950 950 0 0 0 0 -951 951 0 0 0 0 -952 952 0 0 0 0 -953 953 0 0 0 0 -954 954 0 0 0 0 -955 955 0 0 0 0 -956 956 0 0 0 0 -957 957 0 0 0 0 -958 958 0 0 0 0 -959 959 0 0 0 0 -960 960 0 0 0 0 -961 961 0 0 0 0 -962 962 0 0 0 0 -963 963 0 0 0 0 -964 964 0 0 0 0 -965 965 0 0 0 0 -966 966 0 0 0 0 -967 967 0 0 0 0 -968 968 0 0 0 0 -969 969 0 0 0 0 -970 970 0 0 0 0 -971 971 0 0 0 0 -972 972 0 0 0 0 -973 973 0 0 0 0 -974 974 0 0 0 0 -975 975 0 0 0 0 -976 976 0 0 0 0 -977 977 0 0 0 0 -978 978 0 0 0 0 -979 979 0 0 0 0 -980 980 0 0 0 0 -981 981 0 0 0 0 -982 982 0 0 0 0 -983 983 0 0 0 0 -984 984 0 0 0 0 -985 985 0 0 0 0 -986 986 0 0 0 0 -987 987 0 0 0 0 -988 988 0 0 0 0 -989 989 0 0 0 0 -990 990 0 0 0 0 -991 991 0 0 0 0 -992 992 0 0 0 0 -993 993 0 0 0 0 -994 994 0 0 0 0 -995 995 0 0 0 0 -996 996 0 0 0 0 -997 997 0 0 0 0 -998 998 0 0 0 0 -999 999 0 0 0 0 -1000 1000 0 0 0 0 -1001 1001 0 0 0 0 -1002 1002 0 0 0 0 -1003 1003 0 0 0 0 -1004 1004 0 0 0 0 -1005 1005 0 0 0 0 -1006 1006 0 0 0 0 -1007 1007 0 0 0 0 -1008 1008 0 0 0 0 -1009 1009 0 0 0 0 -1010 1010 0 0 0 0 -1011 1011 0 0 0 0 -1012 1012 0 0 0 0 -1013 1013 0 0 0 0 -1014 1014 0 0 0 0 -1015 1015 0 0 0 0 -1016 1016 0 0 0 0 -1017 1017 0 0 0 0 -1018 1018 0 0 0 0 -1019 1019 0 0 0 0 -1020 1020 0 0 0 0 -1021 1021 0 0 0 0 -1022 1022 0 0 0 0 -1023 1023 0 0 0 0 -1024 1024 0 0 0 0 -1025 1025 0 0 0 0 -1026 1026 0 0 0 0 -1027 1027 0 0 0 0 -1028 1028 0 0 0 0 -1029 1029 0 0 0 0 -1030 1030 0 0 0 0 -1031 1031 0 0 0 0 -1032 1032 0 0 0 0 -1033 1033 0 0 0 0 -1034 1034 0 0 0 0 -1035 1035 0 0 0 0 -1036 1036 0 0 0 0 -1037 1037 0 0 0 0 -1038 1038 0 0 0 0 -1039 1039 0 0 0 0 -1040 1040 0 0 0 0 -1041 1041 0 0 0 0 -1042 1042 0 0 0 0 -1043 1043 0 0 0 0 -1044 1044 0 0 0 0 -1045 1045 0 0 0 0 -1046 1046 0 0 0 0 -1047 1047 0 0 0 0 -1048 1048 0 0 0 0 -1049 1049 0 0 0 0 -1050 1050 0 0 0 0 -1051 1051 0 0 0 0 -1052 1052 0 0 0 0 -1053 1053 0 0 0 0 -1054 1054 0 0 0 0 -1055 1055 0 0 0 0 -1056 1056 0 0 0 0 -1057 1057 0 0 0 0 -1058 1058 0 0 0 0 -1059 1059 0 0 0 0 -1060 1060 0 0 0 0 -1061 1061 0 0 0 0 -1062 1062 0 0 0 0 -1063 1063 0 0 0 0 -1064 1064 0 0 0 0 -1065 1065 0 0 0 0 -1066 1066 0 0 0 0 -1067 1067 0 0 0 0 -1068 1068 0 0 0 0 -1069 1069 0 0 0 0 -1070 1070 0 0 0 0 -1071 1071 0 0 0 0 -1072 1072 0 0 0 0 -1073 1073 0 0 0 0 -1074 1074 0 0 0 0 -1075 1075 0 0 0 0 -1076 1076 0 0 0 0 -1077 1077 0 0 0 0 -1078 1078 0 0 0 0 -1079 1079 0 0 0 0 -1080 1080 0 0 0 0 -1081 1081 0 0 0 0 -1082 1082 0 0 0 0 -1083 1083 0 0 0 0 -1084 1084 0 0 0 0 -1085 1085 0 0 0 0 -1086 1086 0 0 0 0 -1087 1087 0 0 0 0 -1088 1088 0 0 0 0 -1089 1089 0 0 0 0 -1090 1090 0 0 0 0 -1091 1091 0 0 0 0 -1092 1092 0 0 0 0 -1093 1093 0 0 0 0 -1094 1094 0 0 0 0 -1095 1095 0 0 0 0 -1096 1096 0 0 0 0 -1097 1097 0 0 0 0 -1098 1098 0 0 0 0 -1099 1099 0 0 0 0 -1100 1100 0 0 0 0 -1101 1101 0 0 0 0 -1102 1102 0 0 0 0 -1103 1103 0 0 0 0 -1104 1104 0 0 0 0 -1105 1105 0 0 0 0 -1106 1106 0 0 0 0 -1107 1107 0 0 0 0 -1108 1108 0 0 0 0 -1109 1109 0 0 0 0 -1110 1110 0 0 0 0 -1111 1111 0 0 0 0 -1112 1112 0 0 0 0 -1113 1113 0 0 0 0 -1114 1114 0 0 0 0 -1115 1115 0 0 0 0 -1116 1116 0 0 0 0 -1117 1117 0 0 0 0 -1118 1118 0 0 0 0 -1119 1119 0 0 0 0 -1120 1120 0 0 0 0 -1121 1121 0 0 0 0 -1122 1122 0 0 0 0 -1123 1123 0 0 0 0 -1124 1124 0 0 0 0 -1125 1125 0 0 0 0 -1126 1126 0 0 0 0 -1127 1127 0 0 0 0 -1128 1128 0 0 0 0 -1129 1129 0 0 0 0 -1130 1130 0 0 0 0 -1131 1131 0 0 0 0 -1132 1132 0 0 0 0 -1133 1133 0 0 0 0 -1134 1134 0 0 0 0 -1135 1135 0 0 0 0 -1136 1136 0 0 0 0 -1137 1137 0 0 0 0 -1138 1138 0 0 0 0 -1139 1139 0 0 0 0 -1140 1140 0 0 0 0 -1141 1141 0 0 0 0 -1142 1142 0 0 0 0 -1143 1143 0 0 0 0 -1144 1144 0 0 0 0 -1145 1145 0 0 0 0 -1146 1146 0 0 0 0 -1147 1147 0 0 0 0 -1148 1148 0 0 0 0 -1149 1149 0 0 0 0 -1150 1150 0 0 0 0 -1151 1151 0 0 0 0 -1152 1152 0 0 0 0 -1153 1153 0 0 0 0 -1154 1154 0 0 0 0 -1155 1155 0 0 0 0 -1156 1156 0 0 0 0 -1157 1157 0 0 0 0 -1158 1158 0 0 0 0 -1159 1159 0 0 0 0 -1160 1160 0 0 0 0 -1161 1161 0 0 0 0 -1162 1162 0 0 0 0 -1163 1163 0 0 0 0 -1164 1164 0 0 0 0 -1165 1165 0 0 0 0 -1166 1166 0 0 0 0 -1167 1167 0 0 0 0 -1168 1168 0 0 0 0 -1169 1169 0 0 0 0 -1170 1170 0 0 0 0 -1171 1171 0 0 0 0 -1172 1172 0 0 0 0 -1173 1173 0 0 0 0 -1174 1174 0 0 0 0 -1175 1175 0 0 0 0 -1176 1176 0 0 0 0 -1177 1177 0 0 0 0 -1178 1178 0 0 0 0 -1179 1179 0 0 0 0 -1180 1180 0 0 0 0 -1181 1181 0 0 0 0 -1182 1182 0 0 0 0 -1183 1183 0 0 0 0 -1184 1184 0 0 0 0 -1185 1185 0 0 0 0 -1186 1186 0 0 0 0 -1187 1187 0 0 0 0 -1188 1188 0 0 0 0 -1189 1189 0 0 0 0 -1190 1190 0 0 0 0 -1191 1191 0 0 0 0 -1192 1192 0 0 0 0 -1193 1193 0 0 0 0 -1194 1194 0 0 0 0 -1195 1195 0 0 0 0 -1196 1196 0 0 0 0 -1197 1197 0 0 0 0 -1198 1198 0 0 0 0 -1199 1199 0 0 0 0 -1200 1200 0 0 0 0 -1201 1201 0 0 0 0 -1202 1202 0 0 0 0 -1203 1203 0 0 0 0 -1204 1204 0 0 0 0 -1205 1205 0 0 0 0 -1206 1206 0 0 0 0 -1207 1207 0 0 0 0 -1208 1208 0 0 0 0 -1209 1209 0 0 0 0 -1210 1210 0 0 0 0 -1211 1211 0 0 0 0 -1212 1212 0 0 0 0 -1213 1213 0 0 0 0 -1214 1214 0 0 0 0 -1215 1215 0 0 0 0 -1216 1216 0 0 0 0 -1217 1217 0 0 0 0 -1218 1218 0 0 0 0 -1219 1219 0 0 0 0 -1220 1220 0 0 0 0 -1221 1221 0 0 0 0 -1222 1222 0 0 0 0 -1223 1223 0 0 0 0 -1224 1224 0 0 0 0 -1225 1225 0 0 0 0 -1226 1226 0 0 0 0 -1227 1227 0 0 0 0 -1228 1228 0 0 0 0 -1229 1229 0 0 0 0 -1230 1230 0 0 0 0 -1231 1231 0 0 0 0 -1232 1232 0 0 0 0 -1233 1233 0 0 0 0 -1234 1234 0 0 0 0 -1235 1235 0 0 0 0 -1236 1236 0 0 0 0 -1237 1237 0 0 0 0 -1238 1238 0 0 0 0 -1239 1239 0 0 0 0 -1240 1240 0 0 0 0 -1241 1241 0 0 0 0 -1242 1242 0 0 0 0 -1243 1243 0 0 0 0 -1244 1244 0 0 0 0 -1245 1245 0 0 0 0 -1246 1246 0 0 0 0 -1247 1247 0 0 0 0 -1248 1248 0 0 0 0 -1249 1249 0 0 0 0 -1250 1250 0 0 0 0 -1251 1251 0 0 0 0 -1252 1252 0 0 0 0 -1253 1253 0 0 0 0 -1254 1254 0 0 0 0 -1255 1255 0 0 0 0 -1256 1256 0 0 0 0 -1257 1257 0 0 0 0 -1258 1258 0 0 0 0 -1259 1259 0 0 0 0 -1260 1260 0 0 0 0 -1261 1261 0 0 0 0 -1262 1262 0 0 0 0 -1263 1263 0 0 0 0 -1264 1264 0 0 0 0 -1265 1265 0 0 0 0 -1266 1266 0 0 0 0 -1267 1267 0 0 0 0 -1268 1268 0 0 0 0 -1269 1269 0 0 0 0 -1270 1270 0 0 0 0 -1271 1271 0 0 0 0 -1272 1272 0 0 0 0 -1273 1273 0 0 0 0 -1274 1274 0 0 0 0 -1275 1275 0 0 0 0 -1276 1276 0 0 0 0 -1277 1277 0 0 0 0 -1278 1278 0 0 0 0 -1279 1279 0 0 0 0 -1280 1280 0 0 0 0 -1281 1281 0 0 0 0 -1282 1282 0 0 0 0 -1283 1283 0 0 0 0 -1284 1284 0 0 0 0 -1285 1285 0 0 0 0 -1286 1286 0 0 0 0 -1287 1287 0 0 0 0 -1288 1288 0 0 0 0 -1289 1289 0 0 0 0 -1290 1290 0 0 0 0 -1291 1291 0 0 0 0 -1292 1292 0 0 0 0 -1293 1293 0 0 0 0 -1294 1294 0 0 0 0 -1295 1295 0 0 0 0 -1296 1296 0 0 0 0 -1297 1297 0 0 0 0 -1298 1298 0 0 0 0 -1299 1299 0 0 0 0 -1300 1300 0 0 0 0 -1301 1301 0 0 0 0 -1302 1302 0 0 0 0 -1303 1303 0 0 0 0 -1304 1304 0 0 0 0 -1305 1305 0 0 0 0 -1306 1306 0 0 0 0 -1307 1307 0 0 0 0 -1308 1308 0 0 0 0 -1309 1309 0 0 0 0 -1310 1310 0 0 0 0 -1311 1311 0 0 0 0 -1312 1312 0 0 0 0 -1313 1313 0 0 0 0 -1314 1314 0 0 0 0 -1315 1315 0 0 0 0 -1316 1316 0 0 0 0 -1317 1317 0 0 0 0 -1318 1318 0 0 0 0 -1319 1319 0 0 0 0 -1320 1320 0 0 0 0 -1321 1321 0 0 0 0 -1322 1322 0 0 0 0 -1323 1323 0 0 0 0 -1324 1324 0 0 0 0 -1325 1325 0 0 0 0 -1326 1326 0 0 0 0 -1327 1327 0 0 0 0 -1328 1328 0 0 0 0 -1329 1329 0 0 0 0 -1330 1330 0 0 0 0 -1331 1331 0 0 0 0 -1332 1332 0 0 0 0 -1333 1333 0 0 0 0 -1334 1334 0 0 0 0 -1335 1335 0 0 0 0 -1336 1336 0 0 0 0 -1337 1337 0 0 0 0 -1338 1338 0 0 0 0 -1339 1339 0 0 0 0 -1340 1340 0 0 0 0 -1341 1341 0 0 0 0 -1342 1342 0 0 0 0 -1343 1343 0 0 0 0 -1344 1344 0 0 0 0 -1345 1345 0 0 0 0 -1346 1346 0 0 0 0 -1347 1347 0 0 0 0 -1348 1348 0 0 0 0 -1349 1349 0 0 0 0 -1350 1350 0 0 0 0 -1351 1351 0 0 0 0 -1352 1352 0 0 0 0 -1353 1353 0 0 0 0 -1354 1354 0 0 0 0 -1355 1355 0 0 0 0 -1356 1356 0 0 0 0 -1357 1357 0 0 0 0 -1358 1358 0 0 0 0 -1359 1359 0 0 0 0 -1360 1360 0 0 0 0 -1361 1361 0 0 0 0 -1362 1362 0 0 0 0 -1363 1363 0 0 0 0 -1364 1364 0 0 0 0 -1365 1365 0 0 0 0 -1366 1366 0 0 0 0 -1367 1367 0 0 0 0 -1368 1368 0 0 0 0 -1369 1369 0 0 0 0 -1370 1370 0 0 0 0 -1371 1371 0 0 0 0 -1372 1372 0 0 0 0 -1373 1373 0 0 0 0 -1374 1374 0 0 0 0 -1375 1375 0 0 0 0 -1376 1376 0 0 0 0 -1377 1377 0 0 0 0 -1378 1378 0 0 0 0 -1379 1379 0 0 0 0 -1380 1380 0 0 0 0 -1381 1381 0 0 0 0 -1382 1382 0 0 0 0 -1383 1383 0 0 0 0 -1384 1384 0 0 0 0 -1385 1385 0 0 0 0 -1386 1386 0 0 0 0 -1387 1387 0 0 0 0 -1388 1388 0 0 0 0 -1389 1389 0 0 0 0 -1390 1390 0 0 0 0 -1391 1391 0 0 0 0 -1392 1392 0 0 0 0 -1393 1393 0 0 0 0 -1394 1394 0 0 0 0 -1395 1395 0 0 0 0 -1396 1396 0 0 0 0 -1397 1397 0 0 0 0 -1398 1398 0 0 0 0 -1399 1399 0 0 0 0 -1400 1400 0 0 0 0 -1401 1401 0 0 0 0 -1402 1402 0 0 0 0 -1403 1403 0 0 0 0 -1404 1404 0 0 0 0 -1405 1405 0 0 0 0 -1406 1406 0 0 0 0 -1407 1407 0 0 0 0 -1408 1408 0 0 0 0 -1409 1409 0 0 0 0 -1410 1410 0 0 0 0 -1411 1411 0 0 0 0 -1412 1412 0 0 0 0 -1413 1413 0 0 0 0 -1414 1414 0 0 0 0 -1415 1415 0 0 0 0 -1416 1416 0 0 0 0 -1417 1417 0 0 0 0 -1418 1418 0 0 0 0 -1419 1419 0 0 0 0 -1420 1420 0 0 0 0 -1421 1421 0 0 0 0 -1422 1422 0 0 0 0 -1423 1423 0 0 0 0 -1424 1424 0 0 0 0 -1425 1425 0 0 0 0 -1426 1426 0 0 0 0 -1427 1427 0 0 0 0 -1428 1428 0 0 0 0 -1429 1429 0 0 0 0 -1430 1430 0 0 0 0 -1431 1431 0 0 0 0 -1432 1432 0 0 0 0 -1433 1433 0 0 0 0 -1434 1434 0 0 0 0 -1435 1435 0 0 0 0 -1436 1436 0 0 0 0 -1437 1437 0 0 0 0 -1438 1438 0 0 0 0 -1439 1439 0 0 0 0 -1440 1440 0 0 0 0 -1441 1441 0 0 0 0 -1442 1442 0 0 0 0 -1443 1443 0 0 0 0 -1444 1444 0 0 0 0 -1445 1445 0 0 0 0 -1446 1446 0 0 0 0 -1447 1447 0 0 0 0 -1448 1448 0 0 0 0 -1449 1449 0 0 0 0 -1450 1450 0 0 0 0 -1451 1451 0 0 0 0 -1452 1452 0 0 0 0 -1453 1453 0 0 0 0 -1454 1454 0 0 0 0 -1455 1455 0 0 0 0 -1456 1456 0 0 0 0 -1457 1457 0 0 0 0 -1458 1458 0 0 0 0 -1459 1459 0 0 0 0 -1460 1460 0 0 0 0 -1461 1461 0 0 0 0 -1462 1462 0 0 0 0 -1463 1463 0 0 0 0 -1464 1464 0 0 0 0 -1465 1465 0 0 0 0 -1466 1466 0 0 0 0 -1467 1467 0 0 0 0 -1468 1468 0 0 0 0 -1469 1469 0 0 0 0 -1470 1470 0 0 0 0 -1471 1471 0 0 0 0 -1472 1472 0 0 0 0 -1473 1473 0 0 0 0 -1474 1474 0 0 0 0 -1475 1475 0 0 0 0 -1476 1476 0 0 0 0 -1477 1477 0 0 0 0 -1478 1478 0 0 0 0 -1479 1479 0 0 0 0 -1480 1480 0 0 0 0 -1481 1481 0 0 0 0 -1482 1482 0 0 0 0 -1483 1483 0 0 0 0 -1484 1484 0 0 0 0 -1485 1485 0 0 0 0 -1486 1486 0 0 0 0 -1487 1487 0 0 0 0 -1488 1488 0 0 0 0 -1489 1489 0 0 0 0 -1490 1490 0 0 0 0 -1491 1491 0 0 0 0 -1492 1492 0 0 0 0 -1493 1493 0 0 0 0 -1494 1494 0 0 0 0 -1495 1495 0 0 0 0 -1496 1496 0 0 0 0 -1497 1497 0 0 0 0 -1498 1498 0 0 0 0 -1499 1499 0 0 0 0 -1500 1500 0 0 0 0 -1501 1501 0 0 0 0 -1502 1502 0 0 0 0 -1503 1503 0 0 0 0 -1504 1504 0 0 0 0 -1505 1505 0 0 0 0 -1506 1506 0 0 0 0 -1507 1507 0 0 0 0 -1508 1508 0 0 0 0 -1509 1509 0 0 0 0 -1510 1510 0 0 0 0 -1511 1511 0 0 0 0 -1512 1512 0 0 0 0 -1513 1513 0 0 0 0 -1514 1514 0 0 0 0 -1515 1515 0 0 0 0 -1516 1516 0 0 0 0 -1517 1517 0 0 0 0 -1518 1518 0 0 0 0 -1519 1519 0 0 0 0 -1520 1520 0 0 0 0 -1521 1521 0 0 0 0 -1522 1522 0 0 0 0 -1523 1523 0 0 0 0 -1524 1524 0 0 0 0 -1525 1525 0 0 0 0 -1526 1526 0 0 0 0 -1527 1527 0 0 0 0 -1528 1528 0 0 0 0 -1529 1529 0 0 0 0 -1530 1530 0 0 0 0 -1531 1531 0 0 0 0 -1532 1532 0 0 0 0 -1533 1533 0 0 0 0 -1534 1534 0 0 0 0 -1535 1535 0 0 0 0 -1536 1536 0 0 0 0 -1537 1537 0 0 0 0 -1538 1538 0 0 0 0 -1539 1539 0 0 0 0 -1540 1540 0 0 0 0 -1541 1541 0 0 0 0 -1542 1542 0 0 0 0 -1543 1543 0 0 0 0 -1544 1544 0 0 0 0 -1545 1545 0 0 0 0 -1546 1546 0 0 0 0 -1547 1547 0 0 0 0 -1548 1548 0 0 0 0 -1549 1549 0 0 0 0 -1550 1550 0 0 0 0 -1551 1551 0 0 0 0 -1552 1552 0 0 0 0 -1553 1553 0 0 0 0 -1554 1554 0 0 0 0 -1555 1555 0 0 0 0 -1556 1556 0 0 0 0 -1557 1557 0 0 0 0 -1558 1558 0 0 0 0 -1559 1559 0 0 0 0 -1560 1560 0 0 0 0 -1561 1561 0 0 0 0 -1562 1562 0 0 0 0 -1563 1563 0 0 0 0 -1564 1564 0 0 0 0 -1565 1565 0 0 0 0 -1566 1566 0 0 0 0 -1567 1567 0 0 0 0 -1568 1568 0 0 0 0 -1569 1569 0 0 0 0 -1570 1570 0 0 0 0 -1571 1571 0 0 0 0 -1572 1572 0 0 0 0 -1573 1573 0 0 0 0 -1574 1574 0 0 0 0 -1575 1575 0 0 0 0 -1576 1576 0 0 0 0 -1577 1577 0 0 0 0 -1578 1578 0 0 0 0 -1579 1579 0 0 0 0 -1580 1580 0 0 0 0 -1581 1581 0 0 0 0 -1582 1582 0 0 0 0 -1583 1583 0 0 0 0 -1584 1584 0 0 0 0 -1585 1585 0 0 0 0 -1586 1586 0 0 0 0 -1587 1587 0 0 0 0 -1588 1588 0 0 0 0 -1589 1589 0 0 0 0 -1590 1590 0 0 0 0 -1591 1591 0 0 0 0 -1592 1592 0 0 0 0 -1593 1593 0 0 0 0 -1594 1594 0 0 0 0 -1595 1595 0 0 0 0 -1596 1596 0 0 0 0 -1597 1597 0 0 0 0 -1598 1598 0 0 0 0 -1599 1599 0 0 0 0 -1600 1600 0 0 0 0 -1601 1601 0 0 0 0 -1602 1602 0 0 0 0 -1603 1603 0 0 0 0 -1604 1604 0 0 0 0 -1605 1605 0 0 0 0 -1606 1606 0 0 0 0 -1607 1607 0 0 0 0 -1608 1608 0 0 0 0 -1609 1609 0 0 0 0 -1610 1610 0 0 0 0 -1611 1611 0 0 0 0 -1612 1612 0 0 0 0 -1613 1613 0 0 0 0 -1614 1614 0 0 0 0 -1615 1615 0 0 0 0 -1616 1616 0 0 0 0 -1617 1617 0 0 0 0 -1618 1618 0 0 0 0 -1619 1619 0 0 0 0 -1620 1620 0 0 0 0 -1621 1621 0 0 0 0 -1622 1622 0 0 0 0 -1623 1623 0 0 0 0 -1624 1624 0 0 0 0 -1625 1625 0 0 0 0 -1626 1626 0 0 0 0 -1627 1627 0 0 0 0 -1628 1628 0 0 0 0 -1629 1629 0 0 0 0 -1630 1630 0 0 0 0 -1631 1631 0 0 0 0 -1632 1632 0 0 0 0 -1633 1633 0 0 0 0 -1634 1634 0 0 0 0 -1635 1635 0 0 0 0 -1636 1636 0 0 0 0 -1637 1637 0 0 0 0 -1638 1638 0 0 0 0 -1639 1639 0 0 0 0 -1640 1640 0 0 0 0 -1641 1641 0 0 0 0 -1642 1642 0 0 0 0 -1643 1643 0 0 0 0 -1644 1644 0 0 0 0 -1645 1645 0 0 0 0 -1646 1646 0 0 0 0 -1647 1647 0 0 0 0 -1648 1648 0 0 0 0 -1649 1649 0 0 0 0 -1650 1650 0 0 0 0 -1651 1651 0 0 0 0 -1652 1652 0 0 0 0 -1653 1653 0 0 0 0 -1654 1654 0 0 0 0 -1655 1655 0 0 0 0 -1656 1656 0 0 0 0 -1657 1657 0 0 0 0 -1658 1658 0 0 0 0 -1659 1659 0 0 0 0 -1660 1660 0 0 0 0 -1661 1661 0 0 0 0 -1662 1662 0 0 0 0 -1663 1663 0 0 0 0 -1664 1664 0 0 0 0 -1665 1665 0 0 0 0 -1666 1666 0 0 0 0 -1667 1667 0 0 0 0 -1668 1668 0 0 0 0 -1669 1669 0 0 0 0 -1670 1670 0 0 0 0 -1671 1671 0 0 0 0 -1672 1672 0 0 0 0 -1673 1673 0 0 0 0 -1674 1674 0 0 0 0 -1675 1675 0 0 0 0 -1676 1676 0 0 0 0 -1677 1677 0 0 0 0 -1678 1678 0 0 0 0 -1679 1679 0 0 0 0 -1680 1680 0 0 0 0 -1681 1681 0 0 0 0 -1682 1682 0 0 0 0 -1683 1683 0 0 0 0 -1684 1684 0 0 0 0 -1685 1685 0 0 0 0 -1686 1686 0 0 0 0 -1687 1687 0 0 0 0 -1688 1688 0 0 0 0 -1689 1689 0 0 0 0 -1690 1690 0 0 0 0 -1691 1691 0 0 0 0 -1692 1692 0 0 0 0 -1693 1693 0 0 0 0 -1694 1694 0 0 0 0 -1695 1695 0 0 0 0 -1696 1696 0 0 0 0 -1697 1697 0 0 0 0 -1698 1698 0 0 0 0 -1699 1699 0 0 0 0 -1700 1700 0 0 0 0 -1701 1701 0 0 0 0 -1702 1702 0 0 0 0 -1703 1703 0 0 0 0 -1704 1704 0 0 0 0 -1705 1705 0 0 0 0 -1706 1706 0 0 0 0 -1707 1707 0 0 0 0 -1708 1708 0 0 0 0 -1709 1709 0 0 0 0 -1710 1710 0 0 0 0 -1711 1711 0 0 0 0 -1712 1712 0 0 0 0 -1713 1713 0 0 0 0 -1714 1714 0 0 0 0 -1715 1715 0 0 0 0 -1716 1716 0 0 0 0 -1717 1717 0 0 0 0 -1718 1718 0 0 0 0 -1719 1719 0 0 0 0 -1720 1720 0 0 0 0 -1721 1721 0 0 0 0 -1722 1722 0 0 0 0 -1723 1723 0 0 0 0 -1724 1724 0 0 0 0 -1725 1725 0 0 0 0 -1726 1726 0 0 0 0 -1727 1727 0 0 0 0 -1728 1728 0 0 0 0 -1729 1729 0 0 0 0 -1730 1730 0 0 0 0 -1731 1731 0 0 0 0 -1732 1732 0 0 0 0 -1733 1733 0 0 0 0 -1734 1734 0 0 0 0 -1735 1735 0 0 0 0 -1736 1736 0 0 0 0 -1737 1737 0 0 0 0 -1738 1738 0 0 0 0 -1739 1739 0 0 0 0 -1740 1740 0 0 0 0 -1741 1741 0 0 0 0 -1742 1742 0 0 0 0 -1743 1743 0 0 0 0 -1744 1744 0 0 0 0 -1745 1745 0 0 0 0 -1746 1746 0 0 0 0 -1747 1747 0 0 0 0 -1748 1748 0 0 0 0 -1749 1749 0 0 0 0 -1750 1750 0 0 0 0 -1751 1751 0 0 0 0 -1752 1752 0 0 0 0 -1753 1753 0 0 0 0 -1754 1754 0 0 0 0 -1755 1755 0 0 0 0 -1756 1756 0 0 0 0 -1757 1757 0 0 0 0 -1758 1758 0 0 0 0 -1759 1759 0 0 0 0 -1760 1760 0 0 0 0 -1761 1761 0 0 0 0 -1762 1762 0 0 0 0 -1763 1763 0 0 0 0 -1764 1764 0 0 0 0 -1765 1765 0 0 0 0 -1766 1766 0 0 0 0 -1767 1767 0 0 0 0 -1768 1768 0 0 0 0 -1769 1769 0 0 0 0 -1770 1770 0 0 0 0 -1771 1771 0 0 0 0 -1772 1772 0 0 0 0 -1773 1773 0 0 0 0 -1774 1774 0 0 0 0 -1775 1775 0 0 0 0 -1776 1776 0 0 0 0 -1777 1777 0 0 0 0 -1778 1778 0 0 0 0 -1779 1779 0 0 0 0 -1780 1780 0 0 0 0 -1781 1781 0 0 0 0 -1782 1782 0 0 0 0 -1783 1783 0 0 0 0 -1784 1784 0 0 0 0 -1785 1785 0 0 0 0 -1786 1786 0 0 0 0 -1787 1787 0 0 0 0 -1788 1788 0 0 0 0 -1789 1789 0 0 0 0 -1790 1790 0 0 0 0 -1791 1791 0 0 0 0 -1792 1792 0 0 0 0 -1793 1793 0 0 0 0 -1794 1794 0 0 0 0 -1795 1795 0 0 0 0 -1796 1796 0 0 0 0 -1797 1797 0 0 0 0 -1798 1798 0 0 0 0 -1799 1799 0 0 0 0 -1800 1800 0 0 0 0 -1801 1801 0 0 0 0 -1802 1802 0 0 0 0 -1803 1803 0 0 0 0 -1804 1804 0 0 0 0 -1805 1805 0 0 0 0 -1806 1806 0 0 0 0 -1807 1807 0 0 0 0 -1808 1808 0 0 0 0 -1809 1809 0 0 0 0 -1810 1810 0 0 0 0 -1811 1811 0 0 0 0 -1812 1812 0 0 0 0 -1813 1813 0 0 0 0 -1814 1814 0 0 0 0 -1815 1815 0 0 0 0 -1816 1816 0 0 0 0 -1817 1817 0 0 0 0 -1818 1818 0 0 0 0 -1819 1819 0 0 0 0 -1820 1820 0 0 0 0 -1821 1821 0 0 0 0 -1822 1822 0 0 0 0 -1823 1823 0 0 0 0 -1824 1824 0 0 0 0 -1825 1825 0 0 0 0 -1826 1826 0 0 0 0 -1827 1827 0 0 0 0 -1828 1828 0 0 0 0 -1829 1829 0 0 0 0 -1830 1830 0 0 0 0 -1831 1831 0 0 0 0 -1832 1832 0 0 0 0 -1833 1833 0 0 0 0 -1834 1834 0 0 0 0 -1835 1835 0 0 0 0 -1836 1836 0 0 0 0 -1837 1837 0 0 0 0 -1838 1838 0 0 0 0 -1839 1839 0 0 0 0 -1840 1840 0 0 0 0 -1841 1841 0 0 0 0 -1842 1842 0 0 0 0 -1843 1843 0 0 0 0 -1844 1844 0 0 0 0 -1845 1845 0 0 0 0 -1846 1846 0 0 0 0 -1847 1847 0 0 0 0 -1848 1848 0 0 0 0 -1849 1849 0 0 0 0 -1850 1850 0 0 0 0 -1851 1851 0 0 0 0 -1852 1852 0 0 0 0 -1853 1853 0 0 0 0 -1854 1854 0 0 0 0 -1855 1855 0 0 0 0 -1856 1856 0 0 0 0 -1857 1857 0 0 0 0 -1858 1858 0 0 0 0 -1859 1859 0 0 0 0 -1860 1860 0 0 0 0 -1861 1861 0 0 0 0 -1862 1862 0 0 0 0 -1863 1863 0 0 0 0 -1864 1864 0 0 0 0 -1865 1865 0 0 0 0 -1866 1866 0 0 0 0 -1867 1867 0 0 0 0 -1868 1868 0 0 0 0 -1869 1869 0 0 0 0 -1870 1870 0 0 0 0 -1871 1871 0 0 0 0 -1872 1872 0 0 0 0 -1873 1873 0 0 0 0 -1874 1874 0 0 0 0 -1875 1875 0 0 0 0 -1876 1876 0 0 0 0 -1877 1877 0 0 0 0 -1878 1878 0 0 0 0 -1879 1879 0 0 0 0 -1880 1880 0 0 0 0 -1881 1881 0 0 0 0 -1882 1882 0 0 0 0 -1883 1883 0 0 0 0 -1884 1884 0 0 0 0 -1885 1885 0 0 0 0 -1886 1886 0 0 0 0 -1887 1887 0 0 0 0 -1888 1888 0 0 0 0 -1889 1889 0 0 0 0 -1890 1890 0 0 0 0 -1891 1891 0 0 0 0 -1892 1892 0 0 0 0 -1893 1893 0 0 0 0 -1894 1894 0 0 0 0 -1895 1895 0 0 0 0 -1896 1896 0 0 0 0 -1897 1897 0 0 0 0 -1898 1898 0 0 0 0 -1899 1899 0 0 0 0 -1900 1900 0 0 0 0 -1901 1901 0 0 0 0 -1902 1902 0 0 0 0 -1903 1903 0 0 0 0 -1904 1904 0 0 0 0 -1905 1905 0 0 0 0 -1906 1906 0 0 0 0 -1907 1907 0 0 0 0 -1908 1908 0 0 0 0 -1909 1909 0 0 0 0 -1910 1910 0 0 0 0 -1911 1911 0 0 0 0 -1912 1912 0 0 0 0 -1913 1913 0 0 0 0 -1914 1914 0 0 0 0 -1915 1915 0 0 0 0 -1916 1916 0 0 0 0 -1917 1917 0 0 0 0 -1918 1918 0 0 0 0 -1919 1919 0 0 0 0 -1920 1920 0 0 0 0 -1921 1921 0 0 0 0 -1922 1922 0 0 0 0 -1923 1923 0 0 0 0 -1924 1924 0 0 0 0 -1925 1925 0 0 0 0 -1926 1926 0 0 0 0 -1927 1927 0 0 0 0 -1928 1928 0 0 0 0 -1929 1929 0 0 0 0 -1930 1930 0 0 0 0 -1931 1931 0 0 0 0 -1932 1932 0 0 0 0 -1933 1933 0 0 0 0 -1934 1934 0 0 0 0 -1935 1935 0 0 0 0 -1936 1936 0 0 0 0 -1937 1937 0 0 0 0 -1938 1938 0 0 0 0 -1939 1939 0 0 0 0 -1940 1940 0 0 0 0 -1941 1941 0 0 0 0 -1942 1942 0 0 0 0 -1943 1943 0 0 0 0 -1944 1944 0 0 0 0 -1945 1945 0 0 0 0 -1946 1946 0 0 0 0 -1947 1947 0 0 0 0 -1948 1948 0 0 0 0 -1949 1949 0 0 0 0 -1950 1950 0 0 0 0 -1951 1951 0 0 0 0 -1952 1952 0 0 0 0 -1953 1953 0 0 0 0 -1954 1954 0 0 0 0 -1955 1955 0 0 0 0 -1956 1956 0 0 0 0 -1957 1957 0 0 0 0 -1958 1958 0 0 0 0 -1959 1959 0 0 0 0 -1960 1960 0 0 0 0 -1961 1961 0 0 0 0 -1962 1962 0 0 0 0 -1963 1963 0 0 0 0 -1964 1964 0 0 0 0 -1965 1965 0 0 0 0 -1966 1966 0 0 0 0 -1967 1967 0 0 0 0 -1968 1968 0 0 0 0 -1969 1969 0 0 0 0 -1970 1970 0 0 0 0 -1971 1971 0 0 0 0 -1972 1972 0 0 0 0 -1973 1973 0 0 0 0 -1974 1974 0 0 0 0 -1975 1975 0 0 0 0 -1976 1976 0 0 0 0 -1977 1977 0 0 0 0 -1978 1978 0 0 0 0 -1979 1979 0 0 0 0 -1980 1980 0 0 0 0 -1981 1981 0 0 0 0 -1982 1982 0 0 0 0 -1983 1983 0 0 0 0 -1984 1984 0 0 0 0 -1985 1985 0 0 0 0 -1986 1986 0 0 0 0 -1987 1987 0 0 0 0 -1988 1988 0 0 0 0 -1989 1989 0 0 0 0 -1990 1990 0 0 0 0 -1991 1991 0 0 0 0 -1992 1992 0 0 0 0 -1993 1993 0 0 0 0 -1994 1994 0 0 0 0 -1995 1995 0 0 0 0 -1996 1996 0 0 0 0 -1997 1997 0 0 0 0 -1998 1998 0 0 0 0 -1999 1999 0 0 0 0 -2000 2000 0 0 0 0 -2001 2001 0 0 0 0 -2002 2002 0 0 0 0 -2003 2003 0 0 0 0 -2004 2004 0 0 0 0 -2005 2005 0 0 0 0 -2006 2006 0 0 0 0 -2007 2007 0 0 0 0 -2008 2008 0 0 0 0 -2009 2009 0 0 0 0 -2010 2010 0 0 0 0 -2011 2011 0 0 0 0 -2012 2012 0 0 0 0 -2013 2013 0 0 0 0 -2014 2014 0 0 0 0 -2015 2015 0 0 0 0 -2016 2016 0 0 0 0 -2017 2017 0 0 0 0 -2018 2018 0 0 0 0 -2019 2019 0 0 0 0 -2020 2020 0 0 0 0 -2021 2021 0 0 0 0 -2022 2022 0 0 0 0 -2023 2023 0 0 0 0 -2024 2024 0 0 0 0 -2025 2025 0 0 0 0 -2026 2026 0 0 0 0 -2027 2027 0 0 0 0 -2028 2028 0 0 0 0 -2029 2029 0 0 0 0 -2030 2030 0 0 0 0 -2031 2031 0 0 0 0 -2032 2032 0 0 0 0 -2033 2033 0 0 0 0 -2034 2034 0 0 0 0 -2035 2035 0 0 0 0 -2036 2036 0 0 0 0 -2037 2037 0 0 0 0 -2038 2038 0 0 0 0 -2039 2039 0 0 0 0 -2040 2040 0 0 0 0 -2041 2041 0 0 0 0 -2042 2042 0 0 0 0 -2043 2043 0 0 0 0 -2044 2044 0 0 0 0 -2045 2045 0 0 0 0 -2046 2046 0 0 0 0 -2047 2047 0 0 0 0 -2048 2048 0 0 0 0 -2049 2049 0 0 0 0 -2050 2050 0 0 0 0 -2051 2051 0 0 0 0 -2052 2052 0 0 0 0 -2053 2053 0 0 0 0 -2054 2054 0 0 0 0 -2055 2055 0 0 0 0 -2056 2056 0 0 0 0 -2057 2057 0 0 0 0 -2058 2058 0 0 0 0 -2059 2059 0 0 0 0 -2060 2060 0 0 0 0 -2061 2061 0 0 0 0 -2062 2062 0 0 0 0 -2063 2063 0 0 0 0 -2064 2064 0 0 0 0 -2065 2065 0 0 0 0 -2066 2066 0 0 0 0 -2067 2067 0 0 0 0 -2068 2068 0 0 0 0 -2069 2069 0 0 0 0 -2070 2070 0 0 0 0 -2071 2071 0 0 0 0 -2072 2072 0 0 0 0 -2073 2073 0 0 0 0 -2074 2074 0 0 0 0 -2075 2075 0 0 0 0 -2076 2076 0 0 0 0 -2077 2077 0 0 0 0 -2078 2078 0 0 0 0 -2079 2079 0 0 0 0 -2080 2080 0 0 0 0 -2081 2081 0 0 0 0 -2082 2082 0 0 0 0 -2083 2083 0 0 0 0 -2084 2084 0 0 0 0 -2085 2085 0 0 0 0 -2086 2086 0 0 0 0 -2087 2087 0 0 0 0 -2088 2088 0 0 0 0 -2089 2089 0 0 0 0 -2090 2090 0 0 0 0 -2091 2091 0 0 0 0 -2092 2092 0 0 0 0 -2093 2093 0 0 0 0 -2094 2094 0 0 0 0 -2095 2095 0 0 0 0 -2096 2096 0 0 0 0 -2097 2097 0 0 0 0 -2098 2098 0 0 0 0 -2099 2099 0 0 0 0 -2100 2100 0 0 0 0 -2101 2101 0 0 0 0 -2102 2102 0 0 0 0 -2103 2103 0 0 0 0 -2104 2104 0 0 0 0 -2105 2105 0 0 0 0 -2106 2106 0 0 0 0 -2107 2107 0 0 0 0 -2108 2108 0 0 0 0 -2109 2109 0 0 0 0 -2110 2110 0 0 0 0 -2111 2111 0 0 0 0 -2112 2112 0 0 0 0 -2113 2113 0 0 0 0 -2114 2114 0 0 0 0 -2115 2115 0 0 0 0 -2116 2116 0 0 0 0 -2117 2117 0 0 0 0 -2118 2118 0 0 0 0 -2119 2119 0 0 0 0 -2120 2120 0 0 0 0 -2121 2121 0 0 0 0 -2122 2122 0 0 0 0 -2123 2123 0 0 0 0 -2124 2124 0 0 0 0 -2125 2125 0 0 0 0 -2126 2126 0 0 0 0 -2127 2127 0 0 0 0 -2128 2128 0 0 0 0 -2129 2129 0 0 0 0 -2130 2130 0 0 0 0 -2131 2131 0 0 0 0 -2132 2132 0 0 0 0 -2133 2133 0 0 0 0 -2134 2134 0 0 0 0 -2135 2135 0 0 0 0 -2136 2136 0 0 0 0 -2137 2137 0 0 0 0 -2138 2138 0 0 0 0 -2139 2139 0 0 0 0 -2140 2140 0 0 0 0 -2141 2141 0 0 0 0 -2142 2142 0 0 0 0 -2143 2143 0 0 0 0 -2144 2144 0 0 0 0 -2145 2145 0 0 0 0 -2146 2146 0 0 0 0 -2147 2147 0 0 0 0 -2148 2148 0 0 0 0 -2149 2149 0 0 0 0 -2150 2150 0 0 0 0 -2151 2151 0 0 0 0 -2152 2152 0 0 0 0 -2153 2153 0 0 0 0 -2154 2154 0 0 0 0 -2155 2155 0 0 0 0 -2156 2156 0 0 0 0 -2157 2157 0 0 0 0 -2158 2158 0 0 0 0 -2159 2159 0 0 0 0 -2160 2160 0 0 0 0 -2161 2161 0 0 0 0 -2162 2162 0 0 0 0 -2163 2163 0 0 0 0 -2164 2164 0 0 0 0 -2165 2165 0 0 0 0 -2166 2166 0 0 0 0 -2167 2167 0 0 0 0 -2168 2168 0 0 0 0 -2169 2169 0 0 0 0 -2170 2170 0 0 0 0 -2171 2171 0 0 0 0 -2172 2172 0 0 0 0 -2173 2173 0 0 0 0 -2174 2174 0 0 0 0 -2175 2175 0 0 0 0 -2176 2176 0 0 0 0 -2177 2177 0 0 0 0 -2178 2178 0 0 0 0 -2179 2179 0 0 0 0 -2180 2180 0 0 0 0 -2181 2181 0 0 0 0 -2182 2182 0 0 0 0 -2183 2183 0 0 0 0 -2184 2184 0 0 0 0 -2185 2185 0 0 0 0 -2186 2186 0 0 0 0 -2187 2187 0 0 0 0 -2188 2188 0 0 0 0 -2189 2189 0 0 0 0 -2190 2190 0 0 0 0 -2191 2191 0 0 0 0 -2192 2192 0 0 0 0 -2193 2193 0 0 0 0 -2194 2194 0 0 0 0 -2195 2195 0 0 0 0 -2196 2196 0 0 0 0 -2197 2197 0 0 0 0 -2198 2198 0 0 0 0 -2199 2199 0 0 0 0 -2200 2200 0 0 0 0 -2201 2201 0 0 0 0 -2202 2202 0 0 0 0 -2203 2203 0 0 0 0 -2204 2204 0 0 0 0 -2205 2205 0 0 0 0 -2206 2206 0 0 0 0 -2207 2207 0 0 0 0 -2208 2208 0 0 0 0 -2209 2209 0 0 0 0 -2210 2210 0 0 0 0 -2211 2211 0 0 0 0 -2212 2212 0 0 0 0 -2213 2213 0 0 0 0 -2214 2214 0 0 0 0 -2215 2215 0 0 0 0 -2216 2216 0 0 0 0 -2217 2217 0 0 0 0 -2218 2218 0 0 0 0 -2219 2219 0 0 0 0 -2220 2220 0 0 0 0 -2221 2221 0 0 0 0 -2222 2222 0 0 0 0 -2223 2223 0 0 0 0 -2224 2224 0 0 0 0 -2225 2225 0 0 0 0 -2226 2226 0 0 0 0 -2227 2227 0 0 0 0 -2228 2228 0 0 0 0 -2229 2229 0 0 0 0 -2230 2230 0 0 0 0 -2231 2231 0 0 0 0 -2232 2232 0 0 0 0 -2233 2233 0 0 0 0 -2234 2234 0 0 0 0 -2235 2235 0 0 0 0 -2236 2236 0 0 0 0 -2237 2237 0 0 0 0 -2238 2238 0 0 0 0 -2239 2239 0 0 0 0 -2240 2240 0 0 0 0 -2241 2241 0 0 0 0 -2242 2242 0 0 0 0 -2243 2243 0 0 0 0 -2244 2244 0 0 0 0 -2245 2245 0 0 0 0 -2246 2246 0 0 0 0 -2247 2247 0 0 0 0 -2248 2248 0 0 0 0 -2249 2249 0 0 0 0 -2250 2250 0 0 0 0 -2251 2251 0 0 0 0 -2252 2252 0 0 0 0 -2253 2253 0 0 0 0 -2254 2254 0 0 0 0 -2255 2255 0 0 0 0 -2256 2256 0 0 0 0 -2257 2257 0 0 0 0 -2258 2258 0 0 0 0 -2259 2259 0 0 0 0 -2260 2260 0 0 0 0 -2261 2261 0 0 0 0 -2262 2262 0 0 0 0 -2263 2263 0 0 0 0 -2264 2264 0 0 0 0 -2265 2265 0 0 0 0 -2266 2266 0 0 0 0 -2267 2267 0 0 0 0 -2268 2268 0 0 0 0 -2269 2269 0 0 0 0 -2270 2270 0 0 0 0 -2271 2271 0 0 0 0 -2272 2272 0 0 0 0 -2273 2273 0 0 0 0 -2274 2274 0 0 0 0 -2275 2275 0 0 0 0 -2276 2276 0 0 0 0 -2277 2277 0 0 0 0 -2278 2278 0 0 0 0 -2279 2279 0 0 0 0 -2280 2280 0 0 0 0 -2281 2281 0 0 0 0 -2282 2282 0 0 0 0 -2283 2283 0 0 0 0 -2284 2284 0 0 0 0 -2285 2285 0 0 0 0 -2286 2286 0 0 0 0 -2287 2287 0 0 0 0 -2288 2288 0 0 0 0 -2289 2289 0 0 0 0 -2290 2290 0 0 0 0 -2291 2291 0 0 0 0 -2292 2292 0 0 0 0 -2293 2293 0 0 0 0 -2294 2294 0 0 0 0 -2295 2295 0 0 0 0 -2296 2296 0 0 0 0 -2297 2297 0 0 0 0 -2298 2298 0 0 0 0 -2299 2299 0 0 0 0 -2300 2300 0 0 0 0 -2301 2301 0 0 0 0 -2302 2302 0 0 0 0 -2303 2303 0 0 0 0 -2304 2304 0 0 0 0 -2305 2305 0 0 0 0 -2306 2306 0 0 0 0 -2307 2307 0 0 0 0 -2308 2308 0 0 0 0 -2309 2309 0 0 0 0 -2310 2310 0 0 0 0 -2311 2311 0 0 0 0 -2312 2312 0 0 0 0 -2313 2313 0 0 0 0 -2314 2314 0 0 0 0 -2315 2315 0 0 0 0 -2316 2316 0 0 0 0 -2317 2317 0 0 0 0 -2318 2318 0 0 0 0 -2319 2319 0 0 0 0 -2320 2320 0 0 0 0 -2321 2321 0 0 0 0 -2322 2322 0 0 0 0 -2323 2323 0 0 0 0 -2324 2324 0 0 0 0 -2325 2325 0 0 0 0 -2326 2326 0 0 0 0 -2327 2327 0 0 0 0 -2328 2328 0 0 0 0 -2329 2329 0 0 0 0 -2330 2330 0 0 0 0 -2331 2331 0 0 0 0 -2332 2332 0 0 0 0 -2333 2333 0 0 0 0 -2334 2334 0 0 0 0 -2335 2335 0 0 0 0 -2336 2336 0 0 0 0 -2337 2337 0 0 0 0 -2338 2338 0 0 0 0 -2339 2339 0 0 0 0 -2340 2340 0 0 0 0 -2341 2341 0 0 0 0 -2342 2342 0 0 0 0 -2343 2343 0 0 0 0 -2344 2344 0 0 0 0 -2345 2345 0 0 0 0 -2346 2346 0 0 0 0 -2347 2347 0 0 0 0 -2348 2348 0 0 0 0 -2349 2349 0 0 0 0 -2350 2350 0 0 0 0 -2351 2351 0 0 0 0 -2352 2352 0 0 0 0 -2353 2353 0 0 0 0 -2354 2354 0 0 0 0 -2355 2355 0 0 0 0 -2356 2356 0 0 0 0 -2357 2357 0 0 0 0 -2358 2358 0 0 0 0 -2359 2359 0 0 0 0 -2360 2360 0 0 0 0 -2361 2361 0 0 0 0 -2362 2362 0 0 0 0 -2363 2363 0 0 0 0 -2364 2364 0 0 0 0 -2365 2365 0 0 0 0 -2366 2366 0 0 0 0 -2367 2367 0 0 0 0 -2368 2368 0 0 0 0 -2369 2369 0 0 0 0 -2370 2370 0 0 0 0 -2371 2371 0 0 0 0 -2372 2372 0 0 0 0 -2373 2373 0 0 0 0 -2374 2374 0 0 0 0 -2375 2375 0 0 0 0 -2376 2376 0 0 0 0 -2377 2377 0 0 0 0 -2378 2378 0 0 0 0 -2379 2379 0 0 0 0 -2380 2380 0 0 0 0 -2381 2381 0 0 0 0 -2382 2382 0 0 0 0 -2383 2383 0 0 0 0 -2384 2384 0 0 0 0 -2385 2385 0 0 0 0 -2386 2386 0 0 0 0 -2387 2387 0 0 0 0 -2388 2388 0 0 0 0 -2389 2389 0 0 0 0 -2390 2390 0 0 0 0 -2391 2391 0 0 0 0 -2392 2392 0 0 0 0 -2393 2393 0 0 0 0 -2394 2394 0 0 0 0 -2395 2395 0 0 0 0 -2396 2396 0 0 0 0 -2397 2397 0 0 0 0 -2398 2398 0 0 0 0 -2399 2399 0 0 0 0 -2400 2400 0 0 0 0 -2401 2401 0 0 0 0 -2402 2402 0 0 0 0 -2403 2403 0 0 0 0 -2404 2404 0 0 0 0 -2405 2405 0 0 0 0 -2406 2406 0 0 0 0 -2407 2407 0 0 0 0 -2408 2408 0 0 0 0 -2409 2409 0 0 0 0 -2410 2410 0 0 0 0 -2411 2411 0 0 0 0 -2412 2412 0 0 0 0 -2413 2413 0 0 0 0 -2414 2414 0 0 0 0 -2415 2415 0 0 0 0 -2416 2416 0 0 0 0 -2417 2417 0 0 0 0 -2418 2418 0 0 0 0 -2419 2419 0 0 0 0 -2420 2420 0 0 0 0 -2421 2421 0 0 0 0 -2422 2422 0 0 0 0 -2423 2423 0 0 0 0 -2424 2424 0 0 0 0 -2425 2425 0 0 0 0 -2426 2426 0 0 0 0 -2427 2427 0 0 0 0 -2428 2428 0 0 0 0 -2429 2429 0 0 0 0 -2430 2430 0 0 0 0 -2431 2431 0 0 0 0 -2432 2432 0 0 0 0 -2433 2433 0 0 0 0 -2434 2434 0 0 0 0 -2435 2435 0 0 0 0 -2436 2436 0 0 0 0 -2437 2437 0 0 0 0 -2438 2438 0 0 0 0 -2439 2439 0 0 0 0 -2440 2440 0 0 0 0 -2441 2441 0 0 0 0 -2442 2442 0 0 0 0 -2443 2443 0 0 0 0 -2444 2444 0 0 0 0 -2445 2445 0 0 0 0 -2446 2446 0 0 0 0 -2447 2447 0 0 0 0 -2448 2448 0 0 0 0 -2449 2449 0 0 0 0 -2450 2450 0 0 0 0 -2451 2451 0 0 0 0 -2452 2452 0 0 0 0 -2453 2453 0 0 0 0 -2454 2454 0 0 0 0 -2455 2455 0 0 0 0 -2456 2456 0 0 0 0 -2457 2457 0 0 0 0 -2458 2458 0 0 0 0 -2459 2459 0 0 0 0 -2460 2460 0 0 0 0 -2461 2461 0 0 0 0 -2462 2462 0 0 0 0 -2463 2463 0 0 0 0 -2464 2464 0 0 0 0 -2465 2465 0 0 0 0 -2466 2466 0 0 0 0 -2467 2467 0 0 0 0 -2468 2468 0 0 0 0 -2469 2469 0 0 0 0 -2470 2470 0 0 0 0 -2471 2471 0 0 0 0 -2472 2472 0 0 0 0 -2473 2473 0 0 0 0 -2474 2474 0 0 0 0 -2475 2475 0 0 0 0 -2476 2476 0 0 0 0 -2477 2477 0 0 0 0 -2478 2478 0 0 0 0 -2479 2479 0 0 0 0 -2480 2480 0 0 0 0 -2481 2481 0 0 0 0 -2482 2482 0 0 0 0 -2483 2483 0 0 0 0 -2484 2484 0 0 0 0 -2485 2485 0 0 0 0 -2486 2486 0 0 0 0 -2487 2487 0 0 0 0 -2488 2488 0 0 0 0 -2489 2489 0 0 0 0 -2490 2490 0 0 0 0 -2491 2491 0 0 0 0 -2492 2492 0 0 0 0 -2493 2493 0 0 0 0 -2494 2494 0 0 0 0 -2495 2495 0 0 0 0 -2496 2496 0 0 0 0 -2497 2497 0 0 0 0 -2498 2498 0 0 0 0 -2499 2499 0 0 0 0 -2500 2500 0 0 0 0 -2501 2501 0 0 0 0 -2502 2502 0 0 0 0 -2503 2503 0 0 0 0 -2504 2504 0 0 0 0 -2505 2505 0 0 0 0 -2506 2506 0 0 0 0 -2507 2507 0 0 0 0 -2508 2508 0 0 0 0 -2509 2509 0 0 0 0 -2510 2510 0 0 0 0 -2511 2511 0 0 0 0 -2512 2512 0 0 0 0 -2513 2513 0 0 0 0 -2514 2514 0 0 0 0 -2515 2515 0 0 0 0 -2516 2516 0 0 0 0 -2517 2517 0 0 0 0 -2518 2518 0 0 0 0 -2519 2519 0 0 0 0 -2520 2520 0 0 0 0 -2521 2521 0 0 0 0 -2522 2522 0 0 0 0 -2523 2523 0 0 0 0 -2524 2524 0 0 0 0 -2525 2525 0 0 0 0 -2526 2526 0 0 0 0 -2527 2527 0 0 0 0 -2528 2528 0 0 0 0 -2529 2529 0 0 0 0 -2530 2530 0 0 0 0 -2531 2531 0 0 0 0 -2532 2532 0 0 0 0 -2533 2533 0 0 0 0 -2534 2534 0 0 0 0 -2535 2535 0 0 0 0 -2536 2536 0 0 0 0 -2537 2537 0 0 0 0 -2538 2538 0 0 0 0 -2539 2539 0 0 0 0 -2540 2540 0 0 0 0 -2541 2541 0 0 0 0 -2542 2542 0 0 0 0 -2543 2543 0 0 0 0 -2544 2544 0 0 0 0 -2545 2545 0 0 0 0 -2546 2546 0 0 0 0 -2547 2547 0 0 0 0 -2548 2548 0 0 0 0 -2549 2549 0 0 0 0 -2550 2550 0 0 0 0 -2551 2551 0 0 0 0 -2552 2552 0 0 0 0 -2553 2553 0 0 0 0 -2554 2554 0 0 0 0 -2555 2555 0 0 0 0 -2556 2556 0 0 0 0 -2557 2557 0 0 0 0 -2558 2558 0 0 0 0 -2559 2559 0 0 0 0 -2560 2560 0 0 0 0 -2561 2561 0 0 0 0 -2562 2562 0 0 0 0 -2563 2563 0 0 0 0 -2564 2564 0 0 0 0 -2565 2565 0 0 0 0 -2566 2566 0 0 0 0 -2567 2567 0 0 0 0 -2568 2568 0 0 0 0 -2569 2569 0 0 0 0 -2570 2570 0 0 0 0 -2571 2571 0 0 0 0 -2572 2572 0 0 0 0 -2573 2573 0 0 0 0 -2574 2574 0 0 0 0 -2575 2575 0 0 0 0 -2576 2576 0 0 0 0 -2577 2577 0 0 0 0 -2578 2578 0 0 0 0 -2579 2579 0 0 0 0 -2580 2580 0 0 0 0 -2581 2581 0 0 0 0 -2582 2582 0 0 0 0 -2583 2583 0 0 0 0 -2584 2584 0 0 0 0 -2585 2585 0 0 0 0 -2586 2586 0 0 0 0 -2587 2587 0 0 0 0 -2588 2588 0 0 0 0 -2589 2589 0 0 0 0 -2590 2590 0 0 0 0 -2591 2591 0 0 0 0 -2592 2592 0 0 0 0 -2593 2593 0 0 0 0 -2594 2594 0 0 0 0 -2595 2595 0 0 0 0 -2596 2596 0 0 0 0 -2597 2597 0 0 0 0 -2598 2598 0 0 0 0 -2599 2599 0 0 0 0 -2600 2600 0 0 0 0 -2601 2601 0 0 0 0 -2602 2602 0 0 0 0 -2603 2603 0 0 0 0 -2604 2604 0 0 0 0 -2605 2605 0 0 0 0 -2606 2606 0 0 0 0 -2607 2607 0 0 0 0 -2608 2608 0 0 0 0 -2609 2609 0 0 0 0 -2610 2610 0 0 0 0 -2611 2611 0 0 0 0 -2612 2612 0 0 0 0 -2613 2613 0 0 0 0 -2614 2614 0 0 0 0 -2615 2615 0 0 0 0 -2616 2616 0 0 0 0 -2617 2617 0 0 0 0 -2618 2618 0 0 0 0 -2619 2619 0 0 0 0 -2620 2620 0 0 0 0 -2621 2621 0 0 0 0 -2622 2622 0 0 0 0 -2623 2623 0 0 0 0 -2624 2624 0 0 0 0 -2625 2625 0 0 0 0 -2626 2626 0 0 0 0 -2627 2627 0 0 0 0 -2628 2628 0 0 0 0 -2629 2629 0 0 0 0 -2630 2630 0 0 0 0 -2631 2631 0 0 0 0 -2632 2632 0 0 0 0 -2633 2633 0 0 0 0 -2634 2634 0 0 0 0 -2635 2635 0 0 0 0 -2636 2636 0 0 0 0 -2637 2637 0 0 0 0 -2638 2638 0 0 0 0 -2639 2639 0 0 0 0 -2640 2640 0 0 0 0 -2641 2641 0 0 0 0 -2642 2642 0 0 0 0 -2643 2643 0 0 0 0 -2644 2644 0 0 0 0 -2645 2645 0 0 0 0 -2646 2646 0 0 0 0 -2647 2647 0 0 0 0 -2648 2648 0 0 0 0 -2649 2649 0 0 0 0 -2650 2650 0 0 0 0 -2651 2651 0 0 0 0 -2652 2652 0 0 0 0 -2653 2653 0 0 0 0 -2654 2654 0 0 0 0 -2655 2655 0 0 0 0 -2656 2656 0 0 0 0 -2657 2657 0 0 0 0 -2658 2658 0 0 0 0 -2659 2659 0 0 0 0 -2660 2660 0 0 0 0 -2661 2661 0 0 0 0 -2662 2662 0 0 0 0 -2663 2663 0 0 0 0 -2664 2664 0 0 0 0 -2665 2665 0 0 0 0 -2666 2666 0 0 0 0 -2667 2667 0 0 0 0 -2668 2668 0 0 0 0 -2669 2669 0 0 0 0 -2670 2670 0 0 0 0 -2671 2671 0 0 0 0 -2672 2672 0 0 0 0 -2673 2673 0 0 0 0 -2674 2674 0 0 0 0 -2675 2675 0 0 0 0 -2676 2676 0 0 0 0 -2677 2677 0 0 0 0 -2678 2678 0 0 0 0 -2679 2679 0 0 0 0 -2680 2680 0 0 0 0 -2681 2681 0 0 0 0 -2682 2682 0 0 0 0 -2683 2683 0 0 0 0 -2684 2684 0 0 0 0 -2685 2685 0 0 0 0 -2686 2686 0 0 0 0 -2687 2687 0 0 0 0 -2688 2688 0 0 0 0 -2689 2689 0 0 0 0 -2690 2690 0 0 0 0 -2691 2691 0 0 0 0 -2692 2692 0 0 0 0 -2693 2693 0 0 0 0 -2694 2694 0 0 0 0 -2695 2695 0 0 0 0 -2696 2696 0 0 0 0 -2697 2697 0 0 0 0 -2698 2698 0 0 0 0 -2699 2699 0 0 0 0 -2700 2700 0 0 0 0 -2701 2701 0 0 0 0 -2702 2702 0 0 0 0 -2703 2703 0 0 0 0 -2704 2704 0 0 0 0 -2705 2705 0 0 0 0 -2706 2706 0 0 0 0 -2707 2707 0 0 0 0 -2708 2708 0 0 0 0 -2709 2709 0 0 0 0 -2710 2710 0 0 0 0 -2711 2711 0 0 0 0 -2712 2712 0 0 0 0 -2713 2713 0 0 0 0 -2714 2714 0 0 0 0 -2715 2715 0 0 0 0 -2716 2716 0 0 0 0 -2717 2717 0 0 0 0 -2718 2718 0 0 0 0 -2719 2719 0 0 0 0 -2720 2720 0 0 0 0 -2721 2721 0 0 0 0 -2722 2722 0 0 0 0 -2723 2723 0 0 0 0 -2724 2724 0 0 0 0 -2725 2725 0 0 0 0 -2726 2726 0 0 0 0 -2727 2727 0 0 0 0 -2728 2728 0 0 0 0 -2729 2729 0 0 0 0 -2730 2730 0 0 0 0 -2731 2731 0 0 0 0 -2732 2732 0 0 0 0 -2733 2733 0 0 0 0 -2734 2734 0 0 0 0 -2735 2735 0 0 0 0 -2736 2736 0 0 0 0 -2737 2737 0 0 0 0 -2738 2738 0 0 0 0 -2739 2739 0 0 0 0 -2740 2740 0 0 0 0 -2741 2741 0 0 0 0 -2742 2742 0 0 0 0 -2743 2743 0 0 0 0 -2744 2744 0 0 0 0 -2745 2745 0 0 0 0 -2746 2746 0 0 0 0 -2747 2747 0 0 0 0 -2748 2748 0 0 0 0 -2749 2749 0 0 0 0 -2750 2750 0 0 0 0 -2751 2751 0 0 0 0 -2752 2752 0 0 0 0 -2753 2753 0 0 0 0 -2754 2754 0 0 0 0 -2755 2755 0 0 0 0 -2756 2756 0 0 0 0 -2757 2757 0 0 0 0 -2758 2758 0 0 0 0 -2759 2759 0 0 0 0 -2760 2760 0 0 0 0 -2761 2761 0 0 0 0 -2762 2762 0 0 0 0 -2763 2763 0 0 0 0 -2764 2764 0 0 0 0 -2765 2765 0 0 0 0 -2766 2766 0 0 0 0 -2767 2767 0 0 0 0 -2768 2768 0 0 0 0 -2769 2769 0 0 0 0 -2770 2770 0 0 0 0 -2771 2771 0 0 0 0 -2772 2772 0 0 0 0 -2773 2773 0 0 0 0 -2774 2774 0 0 0 0 -2775 2775 0 0 0 0 -2776 2776 0 0 0 0 -2777 2777 0 0 0 0 -2778 2778 0 0 0 0 -2779 2779 0 0 0 0 -2780 2780 0 0 0 0 -2781 2781 0 0 0 0 -2782 2782 0 0 0 0 -2783 2783 0 0 0 0 -2784 2784 0 0 0 0 -2785 2785 0 0 0 0 -2786 2786 0 0 0 0 -2787 2787 0 0 0 0 -2788 2788 0 0 0 0 -2789 2789 0 0 0 0 -2790 2790 0 0 0 0 -2791 2791 0 0 0 0 -2792 2792 0 0 0 0 -2793 2793 0 0 0 0 -2794 2794 0 0 0 0 -2795 2795 0 0 0 0 -2796 2796 0 0 0 0 -2797 2797 0 0 0 0 -2798 2798 0 0 0 0 -2799 2799 0 0 0 0 -2800 2800 0 0 0 0 -2801 2801 0 0 0 0 -2802 2802 0 0 0 0 -2803 2803 0 0 0 0 -2804 2804 0 0 0 0 -2805 2805 0 0 0 0 -2806 2806 0 0 0 0 -2807 2807 0 0 0 0 -2808 2808 0 0 0 0 -2809 2809 0 0 0 0 -2810 2810 0 0 0 0 -2811 2811 0 0 0 0 -2812 2812 0 0 0 0 -2813 2813 0 0 0 0 -2814 2814 0 0 0 0 -2815 2815 0 0 0 0 -2816 2816 0 0 0 0 -2817 2817 0 0 0 0 -2818 2818 0 0 0 0 -2819 2819 0 0 0 0 -2820 2820 0 0 0 0 -2821 2821 0 0 0 0 -2822 2822 0 0 0 0 -2823 2823 0 0 0 0 -2824 2824 0 0 0 0 -2825 2825 0 0 0 0 -2826 2826 0 0 0 0 -2827 2827 0 0 0 0 -2828 2828 0 0 0 0 -2829 2829 0 0 0 0 -2830 2830 0 0 0 0 -2831 2831 0 0 0 0 -2832 2832 0 0 0 0 -2833 2833 0 0 0 0 -2834 2834 0 0 0 0 -2835 2835 0 0 0 0 -2836 2836 0 0 0 0 -2837 2837 0 0 0 0 -2838 2838 0 0 0 0 -2839 2839 0 0 0 0 -2840 2840 0 0 0 0 -2841 2841 0 0 0 0 -2842 2842 0 0 0 0 -2843 2843 0 0 0 0 -2844 2844 0 0 0 0 -2845 2845 0 0 0 0 -2846 2846 0 0 0 0 -2847 2847 0 0 0 0 -2848 2848 0 0 0 0 -2849 2849 0 0 0 0 -2850 2850 0 0 0 0 -2851 2851 0 0 0 0 -2852 2852 0 0 0 0 -2853 2853 0 0 0 0 -2854 2854 0 0 0 0 -2855 2855 0 0 0 0 -2856 2856 0 0 0 0 -2857 2857 0 0 0 0 -2858 2858 0 0 0 0 -2859 2859 0 0 0 0 -2860 2860 0 0 0 0 -2861 2861 0 0 0 0 -2862 2862 0 0 0 0 -2863 2863 0 0 0 0 -2864 2864 0 0 0 0 -2865 2865 0 0 0 0 -2866 2866 0 0 0 0 -2867 2867 0 0 0 0 -2868 2868 0 0 0 0 -2869 2869 0 0 0 0 -2870 2870 0 0 0 0 -2871 2871 0 0 0 0 -2872 2872 0 0 0 0 -2873 2873 0 0 0 0 -2874 2874 0 0 0 0 -2875 2875 0 0 0 0 -2876 2876 0 0 0 0 -2877 2877 0 0 0 0 -2878 2878 0 0 0 0 -2879 2879 0 0 0 0 -2880 2880 0 0 0 0 -2881 2881 0 0 0 0 -2882 2882 0 0 0 0 -2883 2883 0 0 0 0 -2884 2884 0 0 0 0 -2885 2885 0 0 0 0 -2886 2886 0 0 0 0 -2887 2887 0 0 0 0 -2888 2888 0 0 0 0 -2889 2889 0 0 0 0 -2890 2890 0 0 0 0 -2891 2891 0 0 0 0 -2892 2892 0 0 0 0 -2893 2893 0 0 0 0 -2894 2894 0 0 0 0 -2895 2895 0 0 0 0 -2896 2896 0 0 0 0 -2897 2897 0 0 0 0 -2898 2898 0 0 0 0 -2899 2899 0 0 0 0 -2900 2900 0 0 0 0 -2901 2901 0 0 0 0 -2902 2902 0 0 0 0 -2903 2903 0 0 0 0 -2904 2904 0 0 0 0 -2905 2905 0 0 0 0 -2906 2906 0 0 0 0 -2907 2907 0 0 0 0 -2908 2908 0 0 0 0 -2909 2909 0 0 0 0 -2910 2910 0 0 0 0 -2911 2911 0 0 0 0 -2912 2912 0 0 0 0 -2913 2913 0 0 0 0 -2914 2914 0 0 0 0 -2915 2915 0 0 0 0 -2916 2916 0 0 0 0 -2917 2917 0 0 0 0 -2918 2918 0 0 0 0 -2919 2919 0 0 0 0 -2920 2920 0 0 0 0 -2921 2921 0 0 0 0 -2922 2922 0 0 0 0 -2923 2923 0 0 0 0 -2924 2924 0 0 0 0 -2925 2925 0 0 0 0 -2926 2926 0 0 0 0 -2927 2927 0 0 0 0 -2928 2928 0 0 0 0 -2929 2929 0 0 0 0 -2930 2930 0 0 0 0 -2931 2931 0 0 0 0 -2932 2932 0 0 0 0 -2933 2933 0 0 0 0 -2934 2934 0 0 0 0 -2935 2935 0 0 0 0 -2936 2936 0 0 0 0 -2937 2937 0 0 0 0 -2938 2938 0 0 0 0 -2939 2939 0 0 0 0 -2940 2940 0 0 0 0 -2941 2941 0 0 0 0 -2942 2942 0 0 0 0 -2943 2943 0 0 0 0 -2944 2944 0 0 0 0 -2945 2945 0 0 0 0 -2946 2946 0 0 0 0 -2947 2947 0 0 0 0 -2948 2948 0 0 0 0 -2949 2949 0 0 0 0 -2950 2950 0 0 0 0 -2951 2951 0 0 0 0 -2952 2952 0 0 0 0 -2953 2953 0 0 0 0 -2954 2954 0 0 0 0 -2955 2955 0 0 0 0 -2956 2956 0 0 0 0 -2957 2957 0 0 0 0 -2958 2958 0 0 0 0 -2959 2959 0 0 0 0 -2960 2960 0 0 0 0 -2961 2961 0 0 0 0 -2962 2962 0 0 0 0 -2963 2963 0 0 0 0 -2964 2964 0 0 0 0 -2965 2965 0 0 0 0 -2966 2966 0 0 0 0 -2967 2967 0 0 0 0 -2968 2968 0 0 0 0 -2969 2969 0 0 0 0 -2970 2970 0 0 0 0 -2971 2971 0 0 0 0 -2972 2972 0 0 0 0 -2973 2973 0 0 0 0 -2974 2974 0 0 0 0 -2975 2975 0 0 0 0 -2976 2976 0 0 0 0 -2977 2977 0 0 0 0 -2978 2978 0 0 0 0 -2979 2979 0 0 0 0 -2980 2980 0 0 0 0 -2981 2981 0 0 0 0 -2982 2982 0 0 0 0 -2983 2983 0 0 0 0 -2984 2984 0 0 0 0 -2985 2985 0 0 0 0 -2986 2986 0 0 0 0 -2987 2987 0 0 0 0 -2988 2988 0 0 0 0 -2989 2989 0 0 0 0 -2990 2990 0 0 0 0 -2991 2991 0 0 0 0 -2992 2992 0 0 0 0 -2993 2993 0 0 0 0 -2994 2994 0 0 0 0 -2995 2995 0 0 0 0 -2996 2996 0 0 0 0 -2997 2997 0 0 0 0 -2998 2998 0 0 0 0 -2999 2999 0 0 0 0 -3000 3000 0 0 0 0 -3001 3001 0 0 0 0 -3002 3002 0 0 0 0 -3003 3003 0 0 0 0 -3004 3004 0 0 0 0 -3005 3005 0 0 0 0 -3006 3006 0 0 0 0 -3007 3007 0 0 0 0 -3008 3008 0 0 0 0 -3009 3009 0 0 0 0 -3010 3010 0 0 0 0 -3011 3011 0 0 0 0 -3012 3012 0 0 0 0 -3013 3013 0 0 0 0 -3014 3014 0 0 0 0 -3015 3015 0 0 0 0 -3016 3016 0 0 0 0 -3017 3017 0 0 0 0 -3018 3018 0 0 0 0 -3019 3019 0 0 0 0 -3020 3020 0 0 0 0 -3021 3021 0 0 0 0 -3022 3022 0 0 0 0 -3023 3023 0 0 0 0 -3024 3024 0 0 0 0 -3025 3025 0 0 0 0 -3026 3026 0 0 0 0 -3027 3027 0 0 0 0 -3028 3028 0 0 0 0 -3029 3029 0 0 0 0 -3030 3030 0 0 0 0 -3031 3031 0 0 0 0 -3032 3032 0 0 0 0 -3033 3033 0 0 0 0 -3034 3034 0 0 0 0 -3035 3035 0 0 0 0 -3036 3036 0 0 0 0 -3037 3037 0 0 0 0 -3038 3038 0 0 0 0 -3039 3039 0 0 0 0 -3040 3040 0 0 0 0 -3041 3041 0 0 0 0 -3042 3042 0 0 0 0 -3043 3043 0 0 0 0 -3044 3044 0 0 0 0 -3045 3045 0 0 0 0 -3046 3046 0 0 0 0 -3047 3047 0 0 0 0 -3048 3048 0 0 0 0 -3049 3049 0 0 0 0 -3050 3050 0 0 0 0 -3051 3051 0 0 0 0 -3052 3052 0 0 0 0 -3053 3053 0 0 0 0 -3054 3054 0 0 0 0 -3055 3055 0 0 0 0 -3056 3056 0 0 0 0 -3057 3057 0 0 0 0 -3058 3058 0 0 0 0 -3059 3059 0 0 0 0 -3060 3060 0 0 0 0 -3061 3061 0 0 0 0 -3062 3062 0 0 0 0 -3063 3063 0 0 0 0 -3064 3064 0 0 0 0 -3065 3065 0 0 0 0 -3066 3066 0 0 0 0 -3067 3067 0 0 0 0 -3068 3068 0 0 0 0 -3069 3069 0 0 0 0 -3070 3070 0 0 0 0 -3071 3071 0 0 0 0 -3072 3072 0 0 0 0 -3073 3073 0 0 0 0 -3074 3074 0 0 0 0 -3075 3075 0 0 0 0 -3076 3076 0 0 0 0 -3077 3077 0 0 0 0 -3078 3078 0 0 0 0 -3079 3079 0 0 0 0 -3080 3080 0 0 0 0 -3081 3081 0 0 0 0 -3082 3082 0 0 0 0 -3083 3083 0 0 0 0 -3084 3084 0 0 0 0 -3085 3085 0 0 0 0 -3086 3086 0 0 0 0 -3087 3087 0 0 0 0 -3088 3088 0 0 0 0 -3089 3089 0 0 0 0 -3090 3090 0 0 0 0 -3091 3091 0 0 0 0 -3092 3092 0 0 0 0 -3093 3093 0 0 0 0 -3094 3094 0 0 0 0 -3095 3095 0 0 0 0 -3096 3096 0 0 0 0 -3097 3097 0 0 0 0 -3098 3098 0 0 0 0 -3099 3099 0 0 0 0 -3100 3100 0 0 0 0 -3101 3101 0 0 0 0 -3102 3102 0 0 0 0 -3103 3103 0 0 0 0 -3104 3104 0 0 0 0 -3105 3105 0 0 0 0 -3106 3106 0 0 0 0 -3107 3107 0 0 0 0 -3108 3108 0 0 0 0 -3109 3109 0 0 0 0 -3110 3110 0 0 0 0 -3111 3111 0 0 0 0 -3112 3112 0 0 0 0 -3113 3113 0 0 0 0 -3114 3114 0 0 0 0 -3115 3115 0 0 0 0 -3116 3116 0 0 0 0 -3117 3117 0 0 0 0 -3118 3118 0 0 0 0 -3119 3119 0 0 0 0 -3120 3120 0 0 0 0 -3121 3121 0 0 0 0 -3122 3122 0 0 0 0 -3123 3123 0 0 0 0 -3124 3124 0 0 0 0 -3125 3125 0 0 0 0 -3126 3126 0 0 0 0 -3127 3127 0 0 0 0 -3128 3128 0 0 0 0 -3129 3129 0 0 0 0 -3130 3130 0 0 0 0 -3131 3131 0 0 0 0 -3132 3132 0 0 0 0 -3133 3133 0 0 0 0 -3134 3134 0 0 0 0 -3135 3135 0 0 0 0 -3136 3136 0 0 0 0 -3137 3137 0 0 0 0 -3138 3138 0 0 0 0 -3139 3139 0 0 0 0 -3140 3140 0 0 0 0 -3141 3141 0 0 0 0 -3142 3142 0 0 0 0 -3143 3143 0 0 0 0 -3144 3144 0 0 0 0 -3145 3145 0 0 0 0 -3146 3146 0 0 0 0 -3147 3147 0 0 0 0 -3148 3148 0 0 0 0 -3149 3149 0 0 0 0 -3150 3150 0 0 0 0 -3151 3151 0 0 0 0 -3152 3152 0 0 0 0 -3153 3153 0 0 0 0 -3154 3154 0 0 0 0 -3155 3155 0 0 0 0 -3156 3156 0 0 0 0 -3157 3157 0 0 0 0 -3158 3158 0 0 0 0 -3159 3159 0 0 0 0 -3160 3160 0 0 0 0 -3161 3161 0 0 0 0 -3162 3162 0 0 0 0 -3163 3163 0 0 0 0 -3164 3164 0 0 0 0 -3165 3165 0 0 0 0 -3166 3166 0 0 0 0 -3167 3167 0 0 0 0 -3168 3168 0 0 0 0 -3169 3169 0 0 0 0 -3170 3170 0 0 0 0 -3171 3171 0 0 0 0 -3172 3172 0 0 0 0 -3173 3173 0 0 0 0 -3174 3174 0 0 0 0 -3175 3175 0 0 0 0 -3176 3176 0 0 0 0 -3177 3177 0 0 0 0 -3178 3178 0 0 0 0 -3179 3179 0 0 0 0 -3180 3180 0 0 0 0 -3181 3181 0 0 0 0 -3182 3182 0 0 0 0 -3183 3183 0 0 0 0 -3184 3184 0 0 0 0 -3185 3185 0 0 0 0 -3186 3186 0 0 0 0 -3187 3187 0 0 0 0 -3188 3188 0 0 0 0 -3189 3189 0 0 0 0 -3190 3190 0 0 0 0 -3191 3191 0 0 0 0 -3192 3192 0 0 0 0 -3193 3193 0 0 0 0 -3194 3194 0 0 0 0 -3195 3195 0 0 0 0 -3196 3196 0 0 0 0 -3197 3197 0 0 0 0 -3198 3198 0 0 0 0 -3199 3199 0 0 0 0 -3200 3200 0 0 0 0 -3201 3201 0 0 0 0 -3202 3202 0 0 0 0 -3203 3203 0 0 0 0 -3204 3204 0 0 0 0 -3205 3205 0 0 0 0 -3206 3206 0 0 0 0 -3207 3207 0 0 0 0 -3208 3208 0 0 0 0 -3209 3209 0 0 0 0 -3210 3210 0 0 0 0 -3211 3211 0 0 0 0 -3212 3212 0 0 0 0 -3213 3213 0 0 0 0 -3214 3214 0 0 0 0 -3215 3215 0 0 0 0 -3216 3216 0 0 0 0 -3217 3217 0 0 0 0 -3218 3218 0 0 0 0 -3219 3219 0 0 0 0 -3220 3220 0 0 0 0 -3221 3221 0 0 0 0 -3222 3222 0 0 0 0 -3223 3223 0 0 0 0 -3224 3224 0 0 0 0 -3225 3225 0 0 0 0 -3226 3226 0 0 0 0 -3227 3227 0 0 0 0 -3228 3228 0 0 0 0 -3229 3229 0 0 0 0 -3230 3230 0 0 0 0 -3231 3231 0 0 0 0 -3232 3232 0 0 0 0 -3233 3233 0 0 0 0 -3234 3234 0 0 0 0 -3235 3235 0 0 0 0 -3236 3236 0 0 0 0 -3237 3237 0 0 0 0 -3238 3238 0 0 0 0 -3239 3239 0 0 0 0 -3240 3240 0 0 0 0 -3241 3241 0 0 0 0 -3242 3242 0 0 0 0 -3243 3243 0 0 0 0 -3244 3244 0 0 0 0 -3245 3245 0 0 0 0 -3246 3246 0 0 0 0 -3247 3247 0 0 0 0 -3248 3248 0 0 0 0 -3249 3249 0 0 0 0 -3250 3250 0 0 0 0 -3251 3251 0 0 0 0 -3252 3252 0 0 0 0 -3253 3253 0 0 0 0 -3254 3254 0 0 0 0 -3255 3255 0 0 0 0 -3256 3256 0 0 0 0 -3257 3257 0 0 0 0 -3258 3258 0 0 0 0 -3259 3259 0 0 0 0 -3260 3260 0 0 0 0 -3261 3261 0 0 0 0 -3262 3262 0 0 0 0 -3263 3263 0 0 0 0 -3264 3264 0 0 0 0 -3265 3265 0 0 0 0 -3266 3266 0 0 0 0 -3267 3267 0 0 0 0 -3268 3268 0 0 0 0 -3269 3269 0 0 0 0 -3270 3270 0 0 0 0 -3271 3271 0 0 0 0 -3272 3272 0 0 0 0 -3273 3273 0 0 0 0 -3274 3274 0 0 0 0 -3275 3275 0 0 0 0 -3276 3276 0 0 0 0 -3277 3277 0 0 0 0 -3278 3278 0 0 0 0 -3279 3279 0 0 0 0 -3280 3280 0 0 0 0 -3281 3281 0 0 0 0 -3282 3282 0 0 0 0 -3283 3283 0 0 0 0 -3284 3284 0 0 0 0 -3285 3285 0 0 0 0 -3286 3286 0 0 0 0 -3287 3287 0 0 0 0 -3288 3288 0 0 0 0 -3289 3289 0 0 0 0 -3290 3290 0 0 0 0 -3291 3291 0 0 0 0 -3292 3292 0 0 0 0 -3293 3293 0 0 0 0 -3294 3294 0 0 0 0 -3295 3295 0 0 0 0 -3296 3296 0 0 0 0 -3297 3297 0 0 0 0 -3298 3298 0 0 0 0 -3299 3299 0 0 0 0 -3300 3300 0 0 0 0 -3301 3301 0 0 0 0 -3302 3302 0 0 0 0 -3303 3303 0 0 0 0 -3304 3304 0 0 0 0 -3305 3305 0 0 0 0 -3306 3306 0 0 0 0 -3307 3307 0 0 0 0 -3308 3308 0 0 0 0 -3309 3309 0 0 0 0 -3310 3310 0 0 0 0 -3311 3311 0 0 0 0 -3312 3312 0 0 0 0 -3313 3313 0 0 0 0 -3314 3314 0 0 0 0 -3315 3315 0 0 0 0 -3316 3316 0 0 0 0 -3317 3317 0 0 0 0 -3318 3318 0 0 0 0 -3319 3319 0 0 0 0 -3320 3320 0 0 0 0 -3321 3321 0 0 0 0 -3322 3322 0 0 0 0 -3323 3323 0 0 0 0 -3324 3324 0 0 0 0 -3325 3325 0 0 0 0 -3326 3326 0 0 0 0 -3327 3327 0 0 0 0 -3328 3328 0 0 0 0 -3329 3329 0 0 0 0 -3330 3330 0 0 0 0 -3331 3331 0 0 0 0 -3332 3332 0 0 0 0 -3333 3333 0 0 0 0 -3334 3334 0 0 0 0 -3335 3335 0 0 0 0 -3336 3336 0 0 0 0 -3337 3337 0 0 0 0 -3338 3338 0 0 0 0 -3339 3339 0 0 0 0 -3340 3340 0 0 0 0 -3341 3341 0 0 0 0 -3342 3342 0 0 0 0 -3343 3343 0 0 0 0 -3344 3344 0 0 0 0 -3345 3345 0 0 0 0 -3346 3346 0 0 0 0 -3347 3347 0 0 0 0 -3348 3348 0 0 0 0 -3349 3349 0 0 0 0 -3350 3350 0 0 0 0 -3351 3351 0 0 0 0 -3352 3352 0 0 0 0 -3353 3353 0 0 0 0 -3354 3354 0 0 0 0 -3355 3355 0 0 0 0 -3356 3356 0 0 0 0 -3357 3357 0 0 0 0 -3358 3358 0 0 0 0 -3359 3359 0 0 0 0 -3360 3360 0 0 0 0 -3361 3361 0 0 0 0 -3362 3362 0 0 0 0 -3363 3363 0 0 0 0 -3364 3364 0 0 0 0 -3365 3365 0 0 0 0 -3366 3366 0 0 0 0 -3367 3367 0 0 0 0 -3368 3368 0 0 0 0 -3369 3369 0 0 0 0 -3370 3370 0 0 0 0 -3371 3371 0 0 0 0 -3372 3372 0 0 0 0 -3373 3373 0 0 0 0 -3374 3374 0 0 0 0 -3375 3375 0 0 0 0 -3376 3376 0 0 0 0 -3377 3377 0 0 0 0 -3378 3378 0 0 0 0 -3379 3379 0 0 0 0 -3380 3380 0 0 0 0 -3381 3381 0 0 0 0 -3382 3382 0 0 0 0 -3383 3383 0 0 0 0 -3384 3384 0 0 0 0 -3385 3385 0 0 0 0 -3386 3386 0 0 0 0 -3387 3387 0 0 0 0 -3388 3388 0 0 0 0 -3389 3389 0 0 0 0 -3390 3390 0 0 0 0 -3391 3391 0 0 0 0 -3392 3392 0 0 0 0 -3393 3393 0 0 0 0 -3394 3394 0 0 0 0 -3395 3395 0 0 0 0 -3396 3396 0 0 0 0 -3397 3397 0 0 0 0 -3398 3398 0 0 0 0 -3399 3399 0 0 0 0 -3400 3400 0 0 0 0 -3401 3401 0 0 0 0 -3402 3402 0 0 0 0 -3403 3403 0 0 0 0 -3404 3404 0 0 0 0 -3405 3405 0 0 0 0 -3406 3406 0 0 0 0 -3407 3407 0 0 0 0 -3408 3408 0 0 0 0 -3409 3409 0 0 0 0 -3410 3410 0 0 0 0 -3411 3411 0 0 0 0 -3412 3412 0 0 0 0 -3413 3413 0 0 0 0 -3414 3414 0 0 0 0 -3415 3415 0 0 0 0 -3416 3416 0 0 0 0 -3417 3417 0 0 0 0 -3418 3418 0 0 0 0 -3419 3419 0 0 0 0 -3420 3420 0 0 0 0 -3421 3421 0 0 0 0 -3422 3422 0 0 0 0 -3423 3423 0 0 0 0 -3424 3424 0 0 0 0 -3425 3425 0 0 0 0 -3426 3426 0 0 0 0 -3427 3427 0 0 0 0 -3428 3428 0 0 0 0 -3429 3429 0 0 0 0 -3430 3430 0 0 0 0 -3431 3431 0 0 0 0 -3432 3432 0 0 0 0 -3433 3433 0 0 0 0 -3434 3434 0 0 0 0 -3435 3435 0 0 0 0 -3436 3436 0 0 0 0 -3437 3437 0 0 0 0 -3438 3438 0 0 0 0 -3439 3439 0 0 0 0 -3440 3440 0 0 0 0 -3441 3441 0 0 0 0 -3442 3442 0 0 0 0 -3443 3443 0 0 0 0 -3444 3444 0 0 0 0 -3445 3445 0 0 0 0 -3446 3446 0 0 0 0 -3447 3447 0 0 0 0 -3448 3448 0 0 0 0 -3449 3449 0 0 0 0 -3450 3450 0 0 0 0 -3451 3451 0 0 0 0 -3452 3452 0 0 0 0 -3453 3453 0 0 0 0 -3454 3454 0 0 0 0 -3455 3455 0 0 0 0 -3456 3456 0 0 0 0 -3457 3457 0 0 0 0 -3458 3458 0 0 0 0 -3459 3459 0 0 0 0 -3460 3460 0 0 0 0 -3461 3461 0 0 0 0 -3462 3462 0 0 0 0 -3463 3463 0 0 0 0 -3464 3464 0 0 0 0 -3465 3465 0 0 0 0 -3466 3466 0 0 0 0 -3467 3467 0 0 0 0 -3468 3468 0 0 0 0 -3469 3469 0 0 0 0 -3470 3470 0 0 0 0 -3471 3471 0 0 0 0 -3472 3472 0 0 0 0 -3473 3473 0 0 0 0 -3474 3474 0 0 0 0 -3475 3475 0 0 0 0 -3476 3476 0 0 0 0 -3477 3477 0 0 0 0 -3478 3478 0 0 0 0 -3479 3479 0 0 0 0 -3480 3480 0 0 0 0 -3481 3481 0 0 0 0 -3482 3482 0 0 0 0 -3483 3483 0 0 0 0 -3484 3484 0 0 0 0 -3485 3485 0 0 0 0 -3486 3486 0 0 0 0 -3487 3487 0 0 0 0 -3488 3488 0 0 0 0 -3489 3489 0 0 0 0 -3490 3490 0 0 0 0 -3491 3491 0 0 0 0 -3492 3492 0 0 0 0 -3493 3493 0 0 0 0 -3494 3494 0 0 0 0 -3495 3495 0 0 0 0 -3496 3496 0 0 0 0 -3497 3497 0 0 0 0 -3498 3498 0 0 0 0 -3499 3499 0 0 0 0 -3500 3500 0 0 0 0 -3501 3501 0 0 0 0 -3502 3502 0 0 0 0 -3503 3503 0 0 0 0 -3504 3504 0 0 0 0 -3505 3505 0 0 0 0 -3506 3506 0 0 0 0 -3507 3507 0 0 0 0 -3508 3508 0 0 0 0 -3509 3509 0 0 0 0 -3510 3510 0 0 0 0 -3511 3511 0 0 0 0 -3512 3512 0 0 0 0 -3513 3513 0 0 0 0 -3514 3514 0 0 0 0 -3515 3515 0 0 0 0 -3516 3516 0 0 0 0 -3517 3517 0 0 0 0 -3518 3518 0 0 0 0 -3519 3519 0 0 0 0 -3520 3520 0 0 0 0 -3521 3521 0 0 0 0 -3522 3522 0 0 0 0 -3523 3523 0 0 0 0 -3524 3524 0 0 0 0 -3525 3525 0 0 0 0 -3526 3526 0 0 0 0 -3527 3527 0 0 0 0 -3528 3528 0 0 0 0 -3529 3529 0 0 0 0 -3530 3530 0 0 0 0 -3531 3531 0 0 0 0 -3532 3532 0 0 0 0 -3533 3533 0 0 0 0 -3534 3534 0 0 0 0 -3535 3535 0 0 0 0 -3536 3536 0 0 0 0 -3537 3537 0 0 0 0 -3538 3538 0 0 0 0 -3539 3539 0 0 0 0 -3540 3540 0 0 0 0 -3541 3541 0 0 0 0 -3542 3542 0 0 0 0 -3543 3543 0 0 0 0 -3544 3544 0 0 0 0 -3545 3545 0 0 0 0 -3546 3546 0 0 0 0 -3547 3547 0 0 0 0 -3548 3548 0 0 0 0 -3549 3549 0 0 0 0 -3550 3550 0 0 0 0 -3551 3551 0 0 0 0 -3552 3552 0 0 0 0 -3553 3553 0 0 0 0 -3554 3554 0 0 0 0 -3555 3555 0 0 0 0 -3556 3556 0 0 0 0 -3557 3557 0 0 0 0 -3558 3558 0 0 0 0 -3559 3559 0 0 0 0 -3560 3560 0 0 0 0 -3561 3561 0 0 0 0 -3562 3562 0 0 0 0 -3563 3563 0 0 0 0 -3564 3564 0 0 0 0 -3565 3565 0 0 0 0 -3566 3566 0 0 0 0 -3567 3567 0 0 0 0 -3568 3568 0 0 0 0 -3569 3569 0 0 0 0 -3570 3570 0 0 0 0 -3571 3571 0 0 0 0 -3572 3572 0 0 0 0 -3573 3573 0 0 0 0 -3574 3574 0 0 0 0 -3575 3575 0 0 0 0 -3576 3576 0 0 0 0 -3577 3577 0 0 0 0 -3578 3578 0 0 0 0 -3579 3579 0 0 0 0 -3580 3580 0 0 0 0 -3581 3581 0 0 0 0 -3582 3582 0 0 0 0 -3583 3583 0 0 0 0 -3584 3584 0 0 0 0 -3585 3585 0 0 0 0 -3586 3586 0 0 0 0 -3587 3587 0 0 0 0 -3588 3588 0 0 0 0 -3589 3589 0 0 0 0 -3590 3590 0 0 0 0 -3591 3591 0 0 0 0 -3592 3592 0 0 0 0 -3593 3593 0 0 0 0 -3594 3594 0 0 0 0 -3595 3595 0 0 0 0 -3596 3596 0 0 0 0 -3597 3597 0 0 0 0 -3598 3598 0 0 0 0 -3599 3599 0 0 0 0 -3600 3600 0 0 0 0 -3601 3601 0 0 0 0 -3602 3602 0 0 0 0 -3603 3603 0 0 0 0 -3604 3604 0 0 0 0 -3605 3605 0 0 0 0 -3606 3606 0 0 0 0 -3607 3607 0 0 0 0 -3608 3608 0 0 0 0 -3609 3609 0 0 0 0 -3610 3610 0 0 0 0 -3611 3611 0 0 0 0 -3612 3612 0 0 0 0 -3613 3613 0 0 0 0 -3614 3614 0 0 0 0 -3615 3615 0 0 0 0 -3616 3616 0 0 0 0 -3617 3617 0 0 0 0 -3618 3618 0 0 0 0 -3619 3619 0 0 0 0 -3620 3620 0 0 0 0 -3621 3621 0 0 0 0 -3622 3622 0 0 0 0 -3623 3623 0 0 0 0 -3624 3624 0 0 0 0 -3625 3625 0 0 0 0 -3626 3626 0 0 0 0 -3627 3627 0 0 0 0 -3628 3628 0 0 0 0 -3629 3629 0 0 0 0 -3630 3630 0 0 0 0 -3631 3631 0 0 0 0 -3632 3632 0 0 0 0 -3633 3633 0 0 0 0 -3634 3634 0 0 0 0 -3635 3635 0 0 0 0 -3636 3636 0 0 0 0 -3637 3637 0 0 0 0 -3638 3638 0 0 0 0 -3639 3639 0 0 0 0 -3640 3640 0 0 0 0 -3641 3641 0 0 0 0 -3642 3642 0 0 0 0 -3643 3643 0 0 0 0 -3644 3644 0 0 0 0 -3645 3645 0 0 0 0 -3646 3646 0 0 0 0 -3647 3647 0 0 0 0 -3648 3648 0 0 0 0 -3649 3649 0 0 0 0 -3650 3650 0 0 0 0 -3651 3651 0 0 0 0 -3652 3652 0 0 0 0 -3653 3653 0 0 0 0 -3654 3654 0 0 0 0 -3655 3655 0 0 0 0 -3656 3656 0 0 0 0 -3657 3657 0 0 0 0 -3658 3658 0 0 0 0 -3659 3659 0 0 0 0 -3660 3660 0 0 0 0 -3661 3661 0 0 0 0 -3662 3662 0 0 0 0 -3663 3663 0 0 0 0 -3664 3664 0 0 0 0 -3665 3665 0 0 0 0 -3666 3666 0 0 0 0 -3667 3667 0 0 0 0 -3668 3668 0 0 0 0 -3669 3669 0 0 0 0 -3670 3670 0 0 0 0 -3671 3671 0 0 0 0 -3672 3672 0 0 0 0 -3673 3673 0 0 0 0 -3674 3674 0 0 0 0 -3675 3675 0 0 0 0 -3676 3676 0 0 0 0 -3677 3677 0 0 0 0 -3678 3678 0 0 0 0 -3679 3679 0 0 0 0 -3680 3680 0 0 0 0 -3681 3681 0 0 0 0 -3682 3682 0 0 0 0 -3683 3683 0 0 0 0 -3684 3684 0 0 0 0 -3685 3685 0 0 0 0 -3686 3686 0 0 0 0 -3687 3687 0 0 0 0 -3688 3688 0 0 0 0 -3689 3689 0 0 0 0 -3690 3690 0 0 0 0 -3691 3691 0 0 0 0 -3692 3692 0 0 0 0 -3693 3693 0 0 0 0 -3694 3694 0 0 0 0 -3695 3695 0 0 0 0 -3696 3696 0 0 0 0 -3697 3697 0 0 0 0 -3698 3698 0 0 0 0 -3699 3699 0 0 0 0 -3700 3700 0 0 0 0 -3701 3701 0 0 0 0 -3702 3702 0 0 0 0 -3703 3703 0 0 0 0 -3704 3704 0 0 0 0 -3705 3705 0 0 0 0 -3706 3706 0 0 0 0 -3707 3707 0 0 0 0 -3708 3708 0 0 0 0 -3709 3709 0 0 0 0 -3710 3710 0 0 0 0 -3711 3711 0 0 0 0 -3712 3712 0 0 0 0 -3713 3713 0 0 0 0 -3714 3714 0 0 0 0 -3715 3715 0 0 0 0 -3716 3716 0 0 0 0 -3717 3717 0 0 0 0 -3718 3718 0 0 0 0 -3719 3719 0 0 0 0 -3720 3720 0 0 0 0 -3721 3721 0 0 0 0 -3722 3722 0 0 0 0 -3723 3723 0 0 0 0 -3724 3724 0 0 0 0 -3725 3725 0 0 0 0 -3726 3726 0 0 0 0 -3727 3727 0 0 0 0 -3728 3728 0 0 0 0 -3729 3729 0 0 0 0 -3730 3730 0 0 0 0 -3731 3731 0 0 0 0 -3732 3732 0 0 0 0 -3733 3733 0 0 0 0 -3734 3734 0 0 0 0 -3735 3735 0 0 0 0 -3736 3736 0 0 0 0 -3737 3737 0 0 0 0 -3738 3738 0 0 0 0 -3739 3739 0 0 0 0 -3740 3740 0 0 0 0 -3741 3741 0 0 0 0 -3742 3742 0 0 0 0 -3743 3743 0 0 0 0 -3744 3744 0 0 0 0 -3745 3745 0 0 0 0 -3746 3746 0 0 0 0 -3747 3747 0 0 0 0 -3748 3748 0 0 0 0 -3749 3749 0 0 0 0 -3750 3750 0 0 0 0 -3751 3751 0 0 0 0 -3752 3752 0 0 0 0 -3753 3753 0 0 0 0 -3754 3754 0 0 0 0 -3755 3755 0 0 0 0 -3756 3756 0 0 0 0 -3757 3757 0 0 0 0 -3758 3758 0 0 0 0 -3759 3759 0 0 0 0 -3760 3760 0 0 0 0 -3761 3761 0 0 0 0 -3762 3762 0 0 0 0 -3763 3763 0 0 0 0 -3764 3764 0 0 0 0 -3765 3765 0 0 0 0 -3766 3766 0 0 0 0 -3767 3767 0 0 0 0 -3768 3768 0 0 0 0 -3769 3769 0 0 0 0 -3770 3770 0 0 0 0 -3771 3771 0 0 0 0 -3772 3772 0 0 0 0 -3773 3773 0 0 0 0 -3774 3774 0 0 0 0 -3775 3775 0 0 0 0 -3776 3776 0 0 0 0 -3777 3777 0 0 0 0 -3778 3778 0 0 0 0 -3779 3779 0 0 0 0 -3780 3780 0 0 0 0 -3781 3781 0 0 0 0 -3782 3782 0 0 0 0 -3783 3783 0 0 0 0 -3784 3784 0 0 0 0 -3785 3785 0 0 0 0 -3786 3786 0 0 0 0 -3787 3787 0 0 0 0 -3788 3788 0 0 0 0 -3789 3789 0 0 0 0 -3790 3790 0 0 0 0 -3791 3791 0 0 0 0 -3792 3792 0 0 0 0 -3793 3793 0 0 0 0 -3794 3794 0 0 0 0 -3795 3795 0 0 0 0 -3796 3796 0 0 0 0 -3797 3797 0 0 0 0 -3798 3798 0 0 0 0 -3799 3799 0 0 0 0 -3800 3800 0 0 0 0 -3801 3801 0 0 0 0 -3802 3802 0 0 0 0 -3803 3803 0 0 0 0 -3804 3804 0 0 0 0 -3805 3805 0 0 0 0 -3806 3806 0 0 0 0 -3807 3807 0 0 0 0 -3808 3808 0 0 0 0 -3809 3809 0 0 0 0 -3810 3810 0 0 0 0 -3811 3811 0 0 0 0 -3812 3812 0 0 0 0 -3813 3813 0 0 0 0 -3814 3814 0 0 0 0 -3815 3815 0 0 0 0 -3816 3816 0 0 0 0 -3817 3817 0 0 0 0 -3818 3818 0 0 0 0 -3819 3819 0 0 0 0 -3820 3820 0 0 0 0 -3821 3821 0 0 0 0 -3822 3822 0 0 0 0 -3823 3823 0 0 0 0 -3824 3824 0 0 0 0 -3825 3825 0 0 0 0 -3826 3826 0 0 0 0 -3827 3827 0 0 0 0 -3828 3828 0 0 0 0 -3829 3829 0 0 0 0 -3830 3830 0 0 0 0 -3831 3831 0 0 0 0 -3832 3832 0 0 0 0 -3833 3833 0 0 0 0 -3834 3834 0 0 0 0 -3835 3835 0 0 0 0 -3836 3836 0 0 0 0 -3837 3837 0 0 0 0 -3838 3838 0 0 0 0 -3839 3839 0 0 0 0 -3840 3840 0 0 0 0 -3841 3841 0 0 0 0 -3842 3842 0 0 0 0 -3843 3843 0 0 0 0 -3844 3844 0 0 0 0 -3845 3845 0 0 0 0 -3846 3846 0 0 0 0 -3847 3847 0 0 0 0 -3848 3848 0 0 0 0 -3849 3849 0 0 0 0 -3850 3850 0 0 0 0 -3851 3851 0 0 0 0 -3852 3852 0 0 0 0 -3853 3853 0 0 0 0 -3854 3854 0 0 0 0 -3855 3855 0 0 0 0 -3856 3856 0 0 0 0 -3857 3857 0 0 0 0 -3858 3858 0 0 0 0 -3859 3859 0 0 0 0 -3860 3860 0 0 0 0 -3861 3861 0 0 0 0 -3862 3862 0 0 0 0 -3863 3863 0 0 0 0 -3864 3864 0 0 0 0 -3865 3865 0 0 0 0 -3866 3866 0 0 0 0 -3867 3867 0 0 0 0 -3868 3868 0 0 0 0 -3869 3869 0 0 0 0 -3870 3870 0 0 0 0 -3871 3871 0 0 0 0 -3872 3872 0 0 0 0 -3873 3873 0 0 0 0 -3874 3874 0 0 0 0 -3875 3875 0 0 0 0 -3876 3876 0 0 0 0 -3877 3877 0 0 0 0 -3878 3878 0 0 0 0 -3879 3879 0 0 0 0 -3880 3880 0 0 0 0 -3881 3881 0 0 0 0 -3882 3882 0 0 0 0 -3883 3883 0 0 0 0 -3884 3884 0 0 0 0 -3885 3885 0 0 0 0 -3886 3886 0 0 0 0 -3887 3887 0 0 0 0 -3888 3888 0 0 0 0 -3889 3889 0 0 0 0 -3890 3890 0 0 0 0 -3891 3891 0 0 0 0 -3892 3892 0 0 0 0 -3893 3893 0 0 0 0 -3894 3894 0 0 0 0 -3895 3895 0 0 0 0 -3896 3896 0 0 0 0 -3897 3897 0 0 0 0 -3898 3898 0 0 0 0 -3899 3899 0 0 0 0 -3900 3900 0 0 0 0 -3901 3901 0 0 0 0 -3902 3902 0 0 0 0 -3903 3903 0 0 0 0 -3904 3904 0 0 0 0 -3905 3905 0 0 0 0 -3906 3906 0 0 0 0 -3907 3907 0 0 0 0 -3908 3908 0 0 0 0 -3909 3909 0 0 0 0 -3910 3910 0 0 0 0 -3911 3911 0 0 0 0 -3912 3912 0 0 0 0 -3913 3913 0 0 0 0 -3914 3914 0 0 0 0 -3915 3915 0 0 0 0 -3916 3916 0 0 0 0 -3917 3917 0 0 0 0 -3918 3918 0 0 0 0 -3919 3919 0 0 0 0 -3920 3920 0 0 0 0 -3921 3921 0 0 0 0 -3922 3922 0 0 0 0 -3923 3923 0 0 0 0 -3924 3924 0 0 0 0 -3925 3925 0 0 0 0 -3926 3926 0 0 0 0 -3927 3927 0 0 0 0 -3928 3928 0 0 0 0 -3929 3929 0 0 0 0 -3930 3930 0 0 0 0 -3931 3931 0 0 0 0 -3932 3932 0 0 0 0 -3933 3933 0 0 0 0 -3934 3934 0 0 0 0 -3935 3935 0 0 0 0 -3936 3936 0 0 0 0 -3937 3937 0 0 0 0 -3938 3938 0 0 0 0 -3939 3939 0 0 0 0 -3940 3940 0 0 0 0 -3941 3941 0 0 0 0 -3942 3942 0 0 0 0 -3943 3943 0 0 0 0 -3944 3944 0 0 0 0 -3945 3945 0 0 0 0 -3946 3946 0 0 0 0 -3947 3947 0 0 0 0 -3948 3948 0 0 0 0 -3949 3949 0 0 0 0 -3950 3950 0 0 0 0 -3951 3951 0 0 0 0 -3952 3952 0 0 0 0 -3953 3953 0 0 0 0 -3954 3954 0 0 0 0 -3955 3955 0 0 0 0 -3956 3956 0 0 0 0 -3957 3957 0 0 0 0 -3958 3958 0 0 0 0 -3959 3959 0 0 0 0 -3960 3960 0 0 0 0 -3961 3961 0 0 0 0 -3962 3962 0 0 0 0 -3963 3963 0 0 0 0 -3964 3964 0 0 0 0 -3965 3965 0 0 0 0 -3966 3966 0 0 0 0 -3967 3967 0 0 0 0 -3968 3968 0 0 0 0 -3969 3969 0 0 0 0 -3970 3970 0 0 0 0 -3971 3971 0 0 0 0 -3972 3972 0 0 0 0 -3973 3973 0 0 0 0 -3974 3974 0 0 0 0 -3975 3975 0 0 0 0 -3976 3976 0 0 0 0 -3977 3977 0 0 0 0 -3978 3978 0 0 0 0 -3979 3979 0 0 0 0 -3980 3980 0 0 0 0 -3981 3981 0 0 0 0 -3982 3982 0 0 0 0 -3983 3983 0 0 0 0 -3984 3984 0 0 0 0 -3985 3985 0 0 0 0 -3986 3986 0 0 0 0 -3987 3987 0 0 0 0 -3988 3988 0 0 0 0 -3989 3989 0 0 0 0 -3990 3990 0 0 0 0 -3991 3991 0 0 0 0 -3992 3992 0 0 0 0 -3993 3993 0 0 0 0 -3994 3994 0 0 0 0 -3995 3995 0 0 0 0 -3996 3996 0 0 0 0 -3997 3997 0 0 0 0 -3998 3998 0 0 0 0 -3999 3999 0 0 0 0 -4000 4000 0 0 0 0 -4001 4001 0 0 0 0 -4002 4002 0 0 0 0 -4003 4003 0 0 0 0 -4004 4004 0 0 0 0 -4005 4005 0 0 0 0 -4006 4006 0 0 0 0 -4007 4007 0 0 0 0 -4008 4008 0 0 0 0 -4009 4009 0 0 0 0 -4010 4010 0 0 0 0 -4011 4011 0 0 0 0 -4012 4012 0 0 0 0 -4013 4013 0 0 0 0 -4014 4014 0 0 0 0 -4015 4015 0 0 0 0 -4016 4016 0 0 0 0 -4017 4017 0 0 0 0 -4018 4018 0 0 0 0 -4019 4019 0 0 0 0 -4020 4020 0 0 0 0 -4021 4021 0 0 0 0 -4022 4022 0 0 0 0 -4023 4023 0 0 0 0 -4024 4024 0 0 0 0 -4025 4025 0 0 0 0 -4026 4026 0 0 0 0 -4027 4027 0 0 0 0 -4028 4028 0 0 0 0 -4029 4029 0 0 0 0 -4030 4030 0 0 0 0 -4031 4031 0 0 0 0 -4032 4032 0 0 0 0 -4033 4033 0 0 0 0 -4034 4034 0 0 0 0 -4035 4035 0 0 0 0 -4036 4036 0 0 0 0 -4037 4037 0 0 0 0 -4038 4038 0 0 0 0 -4039 4039 0 0 0 0 -4040 4040 0 0 0 0 -4041 4041 0 0 0 0 -4042 4042 0 0 0 0 -4043 4043 0 0 0 0 -4044 4044 0 0 0 0 -4045 4045 0 0 0 0 -4046 4046 0 0 0 0 -4047 4047 0 0 0 0 -4048 4048 0 0 0 0 -4049 4049 0 0 0 0 -4050 4050 0 0 0 0 -4051 4051 0 0 0 0 -4052 4052 0 0 0 0 -4053 4053 0 0 0 0 -4054 4054 0 0 0 0 -4055 4055 0 0 0 0 -4056 4056 0 0 0 0 -4057 4057 0 0 0 0 -4058 4058 0 0 0 0 -4059 4059 0 0 0 0 -4060 4060 0 0 0 0 -4061 4061 0 0 0 0 -4062 4062 0 0 0 0 -4063 4063 0 0 0 0 -4064 4064 0 0 0 0 -4065 4065 0 0 0 0 -4066 4066 0 0 0 0 -4067 4067 0 0 0 0 -4068 4068 0 0 0 0 -4069 4069 0 0 0 0 -4070 4070 0 0 0 0 -4071 4071 0 0 0 0 -4072 4072 0 0 0 0 -4073 4073 0 0 0 0 -4074 4074 0 0 0 0 -4075 4075 0 0 0 0 -4076 4076 0 0 0 0 -4077 4077 0 0 0 0 -4078 4078 0 0 0 0 -4079 4079 0 0 0 0 -4080 4080 0 0 0 0 -4081 4081 0 0 0 0 -4082 4082 0 0 0 0 -4083 4083 0 0 0 0 -4084 4084 0 0 0 0 -4085 4085 0 0 0 0 -4086 4086 0 0 0 0 -4087 4087 0 0 0 0 -4088 4088 0 0 0 0 -4089 4089 0 0 0 0 -4090 4090 0 0 0 0 -4091 4091 0 0 0 0 -4092 4092 0 0 0 0 -4093 4093 0 0 0 0 -4094 4094 0 0 0 0 -4095 4095 0 0 0 0 -4096 4096 0 0 0 0 -4097 4097 0 0 0 0 -4098 4098 0 0 0 0 -4099 4099 0 0 0 0 -4100 4100 0 0 0 0 -4101 4101 0 0 0 0 -4102 4102 0 0 0 0 -4103 4103 0 0 0 0 -4104 4104 0 0 0 0 -4105 4105 0 0 0 0 -4106 4106 0 0 0 0 -4107 4107 0 0 0 0 -4108 4108 0 0 0 0 -4109 4109 0 0 0 0 -4110 4110 0 0 0 0 -4111 4111 0 0 0 0 -4112 4112 0 0 0 0 -4113 4113 0 0 0 0 -4114 4114 0 0 0 0 -4115 4115 0 0 0 0 -4116 4116 0 0 0 0 -4117 4117 0 0 0 0 -4118 4118 0 0 0 0 -4119 4119 0 0 0 0 -4120 4120 0 0 0 0 -4121 4121 0 0 0 0 -4122 4122 0 0 0 0 -4123 4123 0 0 0 0 -4124 4124 0 0 0 0 -4125 4125 0 0 0 0 -4126 4126 0 0 0 0 -4127 4127 0 0 0 0 -4128 4128 0 0 0 0 -4129 4129 0 0 0 0 -4130 4130 0 0 0 0 -4131 4131 0 0 0 0 -4132 4132 0 0 0 0 -4133 4133 0 0 0 0 -4134 4134 0 0 0 0 -4135 4135 0 0 0 0 -4136 4136 0 0 0 0 -4137 4137 0 0 0 0 -4138 4138 0 0 0 0 -4139 4139 0 0 0 0 -4140 4140 0 0 0 0 -4141 4141 0 0 0 0 -4142 4142 0 0 0 0 -4143 4143 0 0 0 0 -4144 4144 0 0 0 0 -4145 4145 0 0 0 0 -4146 4146 0 0 0 0 -4147 4147 0 0 0 0 -4148 4148 0 0 0 0 -4149 4149 0 0 0 0 -4150 4150 0 0 0 0 -4151 4151 0 0 0 0 -4152 4152 0 0 0 0 -4153 4153 0 0 0 0 -4154 4154 0 0 0 0 -4155 4155 0 0 0 0 -4156 4156 0 0 0 0 -4157 4157 0 0 0 0 -4158 4158 0 0 0 0 -4159 4159 0 0 0 0 -4160 4160 0 0 0 0 -4161 4161 0 0 0 0 -4162 4162 0 0 0 0 -4163 4163 0 0 0 0 -4164 4164 0 0 0 0 -4165 4165 0 0 0 0 -4166 4166 0 0 0 0 -4167 4167 0 0 0 0 -4168 4168 0 0 0 0 -4169 4169 0 0 0 0 -4170 4170 0 0 0 0 -4171 4171 0 0 0 0 -4172 4172 0 0 0 0 -4173 4173 0 0 0 0 -4174 4174 0 0 0 0 -4175 4175 0 0 0 0 -4176 4176 0 0 0 0 -4177 4177 0 0 0 0 -4178 4178 0 0 0 0 -4179 4179 0 0 0 0 -4180 4180 0 0 0 0 -4181 4181 0 0 0 0 -4182 4182 0 0 0 0 -4183 4183 0 0 0 0 -4184 4184 0 0 0 0 -4185 4185 0 0 0 0 -4186 4186 0 0 0 0 -4187 4187 0 0 0 0 -4188 4188 0 0 0 0 -4189 4189 0 0 0 0 -4190 4190 0 0 0 0 -4191 4191 0 0 0 0 -4192 4192 0 0 0 0 -4193 4193 0 0 0 0 -4194 4194 0 0 0 0 -4195 4195 0 0 0 0 -4196 4196 0 0 0 0 -4197 4197 0 0 0 0 -4198 4198 0 0 0 0 -4199 4199 0 0 0 0 -4200 4200 0 0 0 0 -4201 4201 0 0 0 0 -4202 4202 0 0 0 0 -4203 4203 0 0 0 0 -4204 4204 0 0 0 0 -4205 4205 0 0 0 0 -4206 4206 0 0 0 0 -4207 4207 0 0 0 0 -4208 4208 0 0 0 0 -4209 4209 0 0 0 0 -4210 4210 0 0 0 0 -4211 4211 0 0 0 0 -4212 4212 0 0 0 0 -4213 4213 0 0 0 0 -4214 4214 0 0 0 0 -4215 4215 0 0 0 0 -4216 4216 0 0 0 0 -4217 4217 0 0 0 0 -4218 4218 0 0 0 0 -4219 4219 0 0 0 0 -4220 4220 0 0 0 0 -4221 4221 0 0 0 0 -4222 4222 0 0 0 0 -4223 4223 0 0 0 0 -4224 4224 0 0 0 0 -4225 4225 0 0 0 0 -4226 4226 0 0 0 0 -4227 4227 0 0 0 0 -4228 4228 0 0 0 0 -4229 4229 0 0 0 0 -4230 4230 0 0 0 0 -4231 4231 0 0 0 0 -4232 4232 0 0 0 0 -4233 4233 0 0 0 0 -4234 4234 0 0 0 0 -4235 4235 0 0 0 0 -4236 4236 0 0 0 0 -4237 4237 0 0 0 0 -4238 4238 0 0 0 0 -4239 4239 0 0 0 0 -4240 4240 0 0 0 0 -4241 4241 0 0 0 0 -4242 4242 0 0 0 0 -4243 4243 0 0 0 0 -4244 4244 0 0 0 0 -4245 4245 0 0 0 0 -4246 4246 0 0 0 0 -4247 4247 0 0 0 0 -4248 4248 0 0 0 0 -4249 4249 0 0 0 0 -4250 4250 0 0 0 0 -4251 4251 0 0 0 0 -4252 4252 0 0 0 0 -4253 4253 0 0 0 0 -4254 4254 0 0 0 0 -4255 4255 0 0 0 0 -4256 4256 0 0 0 0 -4257 4257 0 0 0 0 -4258 4258 0 0 0 0 -4259 4259 0 0 0 0 -4260 4260 0 0 0 0 -4261 4261 0 0 0 0 -4262 4262 0 0 0 0 -4263 4263 0 0 0 0 -4264 4264 0 0 0 0 -4265 4265 0 0 0 0 -4266 4266 0 0 0 0 -4267 4267 0 0 0 0 -4268 4268 0 0 0 0 -4269 4269 0 0 0 0 -4270 4270 0 0 0 0 -4271 4271 0 0 0 0 -4272 4272 0 0 0 0 -4273 4273 0 0 0 0 -4274 4274 0 0 0 0 -4275 4275 0 0 0 0 -4276 4276 0 0 0 0 -4277 4277 0 0 0 0 -4278 4278 0 0 0 0 -4279 4279 0 0 0 0 -4280 4280 0 0 0 0 -4281 4281 0 0 0 0 -4282 4282 0 0 0 0 -4283 4283 0 0 0 0 -4284 4284 0 0 0 0 -4285 4285 0 0 0 0 -4286 4286 0 0 0 0 -4287 4287 0 0 0 0 -4288 4288 0 0 0 0 -4289 4289 0 0 0 0 -4290 4290 0 0 0 0 -4291 4291 0 0 0 0 -4292 4292 0 0 0 0 -4293 4293 0 0 0 0 -4294 4294 0 0 0 0 -4295 4295 0 0 0 0 -4296 4296 0 0 0 0 -4297 4297 0 0 0 0 -4298 4298 0 0 0 0 -4299 4299 0 0 0 0 -4300 4300 0 0 0 0 -4301 4301 0 0 0 0 -4302 4302 0 0 0 0 -4303 4303 0 0 0 0 -4304 4304 0 0 0 0 -4305 4305 0 0 0 0 -4306 4306 0 0 0 0 -4307 4307 0 0 0 0 -4308 4308 0 0 0 0 -4309 4309 0 0 0 0 -4310 4310 0 0 0 0 -4311 4311 0 0 0 0 -4312 4312 0 0 0 0 -4313 4313 0 0 0 0 -4314 4314 0 0 0 0 -4315 4315 0 0 0 0 -4316 4316 0 0 0 0 -4317 4317 0 0 0 0 -4318 4318 0 0 0 0 -4319 4319 0 0 0 0 -4320 4320 0 0 0 0 -4321 4321 0 0 0 0 -4322 4322 0 0 0 0 -4323 4323 0 0 0 0 -4324 4324 0 0 0 0 -4325 4325 0 0 0 0 -4326 4326 0 0 0 0 -4327 4327 0 0 0 0 -4328 4328 0 0 0 0 -4329 4329 0 0 0 0 -4330 4330 0 0 0 0 -4331 4331 0 0 0 0 -4332 4332 0 0 0 0 -4333 4333 0 0 0 0 -4334 4334 0 0 0 0 -4335 4335 0 0 0 0 -4336 4336 0 0 0 0 -4337 4337 0 0 0 0 -4338 4338 0 0 0 0 -4339 4339 0 0 0 0 -4340 4340 0 0 0 0 -4341 4341 0 0 0 0 -4342 4342 0 0 0 0 -4343 4343 0 0 0 0 -4344 4344 0 0 0 0 -4345 4345 0 0 0 0 -4346 4346 0 0 0 0 -4347 4347 0 0 0 0 -4348 4348 0 0 0 0 -4349 4349 0 0 0 0 -4350 4350 0 0 0 0 -4351 4351 0 0 0 0 -4352 4352 0 0 0 0 -4353 4353 0 0 0 0 -4354 4354 0 0 0 0 -4355 4355 0 0 0 0 -4356 4356 0 0 0 0 -4357 4357 0 0 0 0 -4358 4358 0 0 0 0 -4359 4359 0 0 0 0 -4360 4360 0 0 0 0 -4361 4361 0 0 0 0 -4362 4362 0 0 0 0 -4363 4363 0 0 0 0 -4364 4364 0 0 0 0 -4365 4365 0 0 0 0 -4366 4366 0 0 0 0 -4367 4367 0 0 0 0 -4368 4368 0 0 0 0 -4369 4369 0 0 0 0 -4370 4370 0 0 0 0 -4371 4371 0 0 0 0 -4372 4372 0 0 0 0 -4373 4373 0 0 0 0 -4374 4374 0 0 0 0 -4375 4375 0 0 0 0 -4376 4376 0 0 0 0 -4377 4377 0 0 0 0 -4378 4378 0 0 0 0 -4379 4379 0 0 0 0 -4380 4380 0 0 0 0 -4381 4381 0 0 0 0 -4382 4382 0 0 0 0 -4383 4383 0 0 0 0 -4384 4384 0 0 0 0 -4385 4385 0 0 0 0 -4386 4386 0 0 0 0 -4387 4387 0 0 0 0 -4388 4388 0 0 0 0 -4389 4389 0 0 0 0 -4390 4390 0 0 0 0 -4391 4391 0 0 0 0 -4392 4392 0 0 0 0 -4393 4393 0 0 0 0 -4394 4394 0 0 0 0 -4395 4395 0 0 0 0 -4396 4396 0 0 0 0 -4397 4397 0 0 0 0 -4398 4398 0 0 0 0 -4399 4399 0 0 0 0 -4400 4400 0 0 0 0 -4401 4401 0 0 0 0 -4402 4402 0 0 0 0 -4403 4403 0 0 0 0 -4404 4404 0 0 0 0 -4405 4405 0 0 0 0 -4406 4406 0 0 0 0 -4407 4407 0 0 0 0 -4408 4408 0 0 0 0 -4409 4409 0 0 0 0 -4410 4410 0 0 0 0 -4411 4411 0 0 0 0 -4412 4412 0 0 0 0 -4413 4413 0 0 0 0 -4414 4414 0 0 0 0 -4415 4415 0 0 0 0 -4416 4416 0 0 0 0 -4417 4417 0 0 0 0 -4418 4418 0 0 0 0 -4419 4419 0 0 0 0 -4420 4420 0 0 0 0 -4421 4421 0 0 0 0 -4422 4422 0 0 0 0 -4423 4423 0 0 0 0 -4424 4424 0 0 0 0 -4425 4425 0 0 0 0 -4426 4426 0 0 0 0 -4427 4427 0 0 0 0 -4428 4428 0 0 0 0 -4429 4429 0 0 0 0 -4430 4430 0 0 0 0 -4431 4431 0 0 0 0 -4432 4432 0 0 0 0 -4433 4433 0 0 0 0 -4434 4434 0 0 0 0 -4435 4435 0 0 0 0 -4436 4436 0 0 0 0 -4437 4437 0 0 0 0 -4438 4438 0 0 0 0 -4439 4439 0 0 0 0 -4440 4440 0 0 0 0 -4441 4441 0 0 0 0 -4442 4442 0 0 0 0 -4443 4443 0 0 0 0 -4444 4444 0 0 0 0 -4445 4445 0 0 0 0 -4446 4446 0 0 0 0 -4447 4447 0 0 0 0 -4448 4448 0 0 0 0 -4449 4449 0 0 0 0 -4450 4450 0 0 0 0 -4451 4451 0 0 0 0 -4452 4452 0 0 0 0 -4453 4453 0 0 0 0 -4454 4454 0 0 0 0 -4455 4455 0 0 0 0 -4456 4456 0 0 0 0 -4457 4457 0 0 0 0 -4458 4458 0 0 0 0 -4459 4459 0 0 0 0 -4460 4460 0 0 0 0 -4461 4461 0 0 0 0 -4462 4462 0 0 0 0 -4463 4463 0 0 0 0 -4464 4464 0 0 0 0 -4465 4465 0 0 0 0 -4466 4466 0 0 0 0 -4467 4467 0 0 0 0 -4468 4468 0 0 0 0 -4469 4469 0 0 0 0 -4470 4470 0 0 0 0 -4471 4471 0 0 0 0 -4472 4472 0 0 0 0 -4473 4473 0 0 0 0 -4474 4474 0 0 0 0 -4475 4475 0 0 0 0 -4476 4476 0 0 0 0 -4477 4477 0 0 0 0 -4478 4478 0 0 0 0 -4479 4479 0 0 0 0 -4480 4480 0 0 0 0 -4481 4481 0 0 0 0 -4482 4482 0 0 0 0 -4483 4483 0 0 0 0 -4484 4484 0 0 0 0 -4485 4485 0 0 0 0 -4486 4486 0 0 0 0 -4487 4487 0 0 0 0 -4488 4488 0 0 0 0 -4489 4489 0 0 0 0 -4490 4490 0 0 0 0 -4491 4491 0 0 0 0 -4492 4492 0 0 0 0 -4493 4493 0 0 0 0 -4494 4494 0 0 0 0 -4495 4495 0 0 0 0 -4496 4496 0 0 0 0 -4497 4497 0 0 0 0 -4498 4498 0 0 0 0 -4499 4499 0 0 0 0 -4500 4500 0 0 0 0 -4501 4501 0 0 0 0 -4502 4502 0 0 0 0 -4503 4503 0 0 0 0 -4504 4504 0 0 0 0 -4505 4505 0 0 0 0 -4506 4506 0 0 0 0 -4507 4507 0 0 0 0 -4508 4508 0 0 0 0 -4509 4509 0 0 0 0 -4510 4510 0 0 0 0 -4511 4511 0 0 0 0 -4512 4512 0 0 0 0 -4513 4513 0 0 0 0 -4514 4514 0 0 0 0 -4515 4515 0 0 0 0 -4516 4516 0 0 0 0 -4517 4517 0 0 0 0 -4518 4518 0 0 0 0 -4519 4519 0 0 0 0 -4520 4520 0 0 0 0 -4521 4521 0 0 0 0 -4522 4522 0 0 0 0 -4523 4523 0 0 0 0 -4524 4524 0 0 0 0 -4525 4525 0 0 0 0 -4526 4526 0 0 0 0 -4527 4527 0 0 0 0 -4528 4528 0 0 0 0 -4529 4529 0 0 0 0 -4530 4530 0 0 0 0 -4531 4531 0 0 0 0 -4532 4532 0 0 0 0 -4533 4533 0 0 0 0 -4534 4534 0 0 0 0 -4535 4535 0 0 0 0 -4536 4536 0 0 0 0 -4537 4537 0 0 0 0 -4538 4538 0 0 0 0 -4539 4539 0 0 0 0 -4540 4540 0 0 0 0 -4541 4541 0 0 0 0 -4542 4542 0 0 0 0 -4543 4543 0 0 0 0 -4544 4544 0 0 0 0 -4545 4545 0 0 0 0 -4546 4546 0 0 0 0 -4547 4547 0 0 0 0 -4548 4548 0 0 0 0 -4549 4549 0 0 0 0 -4550 4550 0 0 0 0 -4551 4551 0 0 0 0 -4552 4552 0 0 0 0 -4553 4553 0 0 0 0 -4554 4554 0 0 0 0 -4555 4555 0 0 0 0 -4556 4556 0 0 0 0 -4557 4557 0 0 0 0 -4558 4558 0 0 0 0 -4559 4559 0 0 0 0 -4560 4560 0 0 0 0 -4561 4561 0 0 0 0 -4562 4562 0 0 0 0 -4563 4563 0 0 0 0 -4564 4564 0 0 0 0 -4565 4565 0 0 0 0 -4566 4566 0 0 0 0 -4567 4567 0 0 0 0 -4568 4568 0 0 0 0 -4569 4569 0 0 0 0 -4570 4570 0 0 0 0 -4571 4571 0 0 0 0 -4572 4572 0 0 0 0 -4573 4573 0 0 0 0 -4574 4574 0 0 0 0 -4575 4575 0 0 0 0 -4576 4576 0 0 0 0 -4577 4577 0 0 0 0 -4578 4578 0 0 0 0 -4579 4579 0 0 0 0 -4580 4580 0 0 0 0 -4581 4581 0 0 0 0 -4582 4582 0 0 0 0 -4583 4583 0 0 0 0 -4584 4584 0 0 0 0 -4585 4585 0 0 0 0 -4586 4586 0 0 0 0 -4587 4587 0 0 0 0 -4588 4588 0 0 0 0 -4589 4589 0 0 0 0 -4590 4590 0 0 0 0 -4591 4591 0 0 0 0 -4592 4592 0 0 0 0 -4593 4593 0 0 0 0 -4594 4594 0 0 0 0 -4595 4595 0 0 0 0 -4596 4596 0 0 0 0 -4597 4597 0 0 0 0 -4598 4598 0 0 0 0 -4599 4599 0 0 0 0 -4600 4600 0 0 0 0 -4601 4601 0 0 0 0 -4602 4602 0 0 0 0 -4603 4603 0 0 0 0 -4604 4604 0 0 0 0 -4605 4605 0 0 0 0 -4606 4606 0 0 0 0 -4607 4607 0 0 0 0 -4608 4608 0 0 0 0 -4609 4609 0 0 0 0 -4610 4610 0 0 0 0 -4611 4611 0 0 0 0 -4612 4612 0 0 0 0 -4613 4613 0 0 0 0 -4614 4614 0 0 0 0 -4615 4615 0 0 0 0 -4616 4616 0 0 0 0 -4617 4617 0 0 0 0 -4618 4618 0 0 0 0 -4619 4619 0 0 0 0 -4620 4620 0 0 0 0 -4621 4621 0 0 0 0 -4622 4622 0 0 0 0 -4623 4623 0 0 0 0 -4624 4624 0 0 0 0 -4625 4625 0 0 0 0 -4626 4626 0 0 0 0 -4627 4627 0 0 0 0 -4628 4628 0 0 0 0 -4629 4629 0 0 0 0 -4630 4630 0 0 0 0 -4631 4631 0 0 0 0 -4632 4632 0 0 0 0 -4633 4633 0 0 0 0 -4634 4634 0 0 0 0 -4635 4635 0 0 0 0 -4636 4636 0 0 0 0 -4637 4637 0 0 0 0 -4638 4638 0 0 0 0 -4639 4639 0 0 0 0 -4640 4640 0 0 0 0 -4641 4641 0 0 0 0 -4642 4642 0 0 0 0 -4643 4643 0 0 0 0 -4644 4644 0 0 0 0 -4645 4645 0 0 0 0 -4646 4646 0 0 0 0 -4647 4647 0 0 0 0 -4648 4648 0 0 0 0 -4649 4649 0 0 0 0 -4650 4650 0 0 0 0 -4651 4651 0 0 0 0 -4652 4652 0 0 0 0 -4653 4653 0 0 0 0 -4654 4654 0 0 0 0 -4655 4655 0 0 0 0 -4656 4656 0 0 0 0 -4657 4657 0 0 0 0 -4658 4658 0 0 0 0 -4659 4659 0 0 0 0 -4660 4660 0 0 0 0 -4661 4661 0 0 0 0 -4662 4662 0 0 0 0 -4663 4663 0 0 0 0 -4664 4664 0 0 0 0 -4665 4665 0 0 0 0 -4666 4666 0 0 0 0 -4667 4667 0 0 0 0 -4668 4668 0 0 0 0 -4669 4669 0 0 0 0 -4670 4670 0 0 0 0 -4671 4671 0 0 0 0 -4672 4672 0 0 0 0 -4673 4673 0 0 0 0 -4674 4674 0 0 0 0 -4675 4675 0 0 0 0 -4676 4676 0 0 0 0 -4677 4677 0 0 0 0 -4678 4678 0 0 0 0 -4679 4679 0 0 0 0 -4680 4680 0 0 0 0 -4681 4681 0 0 0 0 -4682 4682 0 0 0 0 -4683 4683 0 0 0 0 -4684 4684 0 0 0 0 -4685 4685 0 0 0 0 -4686 4686 0 0 0 0 -4687 4687 0 0 0 0 -4688 4688 0 0 0 0 -4689 4689 0 0 0 0 -4690 4690 0 0 0 0 -4691 4691 0 0 0 0 -4692 4692 0 0 0 0 -4693 4693 0 0 0 0 -4694 4694 0 0 0 0 -4695 4695 0 0 0 0 -4696 4696 0 0 0 0 -4697 4697 0 0 0 0 -4698 4698 0 0 0 0 -4699 4699 0 0 0 0 -4700 4700 0 0 0 0 -4701 4701 0 0 0 0 -4702 4702 0 0 0 0 -4703 4703 0 0 0 0 -4704 4704 0 0 0 0 -4705 4705 0 0 0 0 -4706 4706 0 0 0 0 -4707 4707 0 0 0 0 -4708 4708 0 0 0 0 -4709 4709 0 0 0 0 -4710 4710 0 0 0 0 -4711 4711 0 0 0 0 -4712 4712 0 0 0 0 -4713 4713 0 0 0 0 -4714 4714 0 0 0 0 -4715 4715 0 0 0 0 -4716 4716 0 0 0 0 -4717 4717 0 0 0 0 -4718 4718 0 0 0 0 -4719 4719 0 0 0 0 -4720 4720 0 0 0 0 -4721 4721 0 0 0 0 -4722 4722 0 0 0 0 -4723 4723 0 0 0 0 -4724 4724 0 0 0 0 -4725 4725 0 0 0 0 -4726 4726 0 0 0 0 -4727 4727 0 0 0 0 -4728 4728 0 0 0 0 -4729 4729 0 0 0 0 -4730 4730 0 0 0 0 -4731 4731 0 0 0 0 -4732 4732 0 0 0 0 -4733 4733 0 0 0 0 -4734 4734 0 0 0 0 -4735 4735 0 0 0 0 -4736 4736 0 0 0 0 -4737 4737 0 0 0 0 -4738 4738 0 0 0 0 -4739 4739 0 0 0 0 -4740 4740 0 0 0 0 -4741 4741 0 0 0 0 -4742 4742 0 0 0 0 -4743 4743 0 0 0 0 -4744 4744 0 0 0 0 -4745 4745 0 0 0 0 -4746 4746 0 0 0 0 -4747 4747 0 0 0 0 -4748 4748 0 0 0 0 -4749 4749 0 0 0 0 -4750 4750 0 0 0 0 -4751 4751 0 0 0 0 -4752 4752 0 0 0 0 -4753 4753 0 0 0 0 -4754 4754 0 0 0 0 -4755 4755 0 0 0 0 -4756 4756 0 0 0 0 -4757 4757 0 0 0 0 -4758 4758 0 0 0 0 -4759 4759 0 0 0 0 -4760 4760 0 0 0 0 -4761 4761 0 0 0 0 -4762 4762 0 0 0 0 -4763 4763 0 0 0 0 -4764 4764 0 0 0 0 -4765 4765 0 0 0 0 -4766 4766 0 0 0 0 -4767 4767 0 0 0 0 -4768 4768 0 0 0 0 -4769 4769 0 0 0 0 -4770 4770 0 0 0 0 -4771 4771 0 0 0 0 -4772 4772 0 0 0 0 -4773 4773 0 0 0 0 -4774 4774 0 0 0 0 -4775 4775 0 0 0 0 -4776 4776 0 0 0 0 -4777 4777 0 0 0 0 -4778 4778 0 0 0 0 -4779 4779 0 0 0 0 -4780 4780 0 0 0 0 -4781 4781 0 0 0 0 -4782 4782 0 0 0 0 -4783 4783 0 0 0 0 -4784 4784 0 0 0 0 -4785 4785 0 0 0 0 -4786 4786 0 0 0 0 -4787 4787 0 0 0 0 -4788 4788 0 0 0 0 -4789 4789 0 0 0 0 -4790 4790 0 0 0 0 -4791 4791 0 0 0 0 -4792 4792 0 0 0 0 -4793 4793 0 0 0 0 -4794 4794 0 0 0 0 -4795 4795 0 0 0 0 -4796 4796 0 0 0 0 -4797 4797 0 0 0 0 -4798 4798 0 0 0 0 -4799 4799 0 0 0 0 -4800 4800 0 0 0 0 -4801 4801 0 0 0 0 -4802 4802 0 0 0 0 -4803 4803 0 0 0 0 -4804 4804 0 0 0 0 -4805 4805 0 0 0 0 -4806 4806 0 0 0 0 -4807 4807 0 0 0 0 -4808 4808 0 0 0 0 -4809 4809 0 0 0 0 -4810 4810 0 0 0 0 -4811 4811 0 0 0 0 -4812 4812 0 0 0 0 -4813 4813 0 0 0 0 -4814 4814 0 0 0 0 -4815 4815 0 0 0 0 -4816 4816 0 0 0 0 -4817 4817 0 0 0 0 -4818 4818 0 0 0 0 -4819 4819 0 0 0 0 -4820 4820 0 0 0 0 -4821 4821 0 0 0 0 -4822 4822 0 0 0 0 -4823 4823 0 0 0 0 -4824 4824 0 0 0 0 -4825 4825 0 0 0 0 -4826 4826 0 0 0 0 -4827 4827 0 0 0 0 -4828 4828 0 0 0 0 -4829 4829 0 0 0 0 -4830 4830 0 0 0 0 -4831 4831 0 0 0 0 -4832 4832 0 0 0 0 -4833 4833 0 0 0 0 -4834 4834 0 0 0 0 -4835 4835 0 0 0 0 -4836 4836 0 0 0 0 -4837 4837 0 0 0 0 -4838 4838 0 0 0 0 -4839 4839 0 0 0 0 -4840 4840 0 0 0 0 -4841 4841 0 0 0 0 -4842 4842 0 0 0 0 -4843 4843 0 0 0 0 -4844 4844 0 0 0 0 -4845 4845 0 0 0 0 -4846 4846 0 0 0 0 -4847 4847 0 0 0 0 -4848 4848 0 0 0 0 -4849 4849 0 0 0 0 -4850 4850 0 0 0 0 -4851 4851 0 0 0 0 -4852 4852 0 0 0 0 -4853 4853 0 0 0 0 -4854 4854 0 0 0 0 -4855 4855 0 0 0 0 -4856 4856 0 0 0 0 -4857 4857 0 0 0 0 -4858 4858 0 0 0 0 -4859 4859 0 0 0 0 -4860 4860 0 0 0 0 -4861 4861 0 0 0 0 -4862 4862 0 0 0 0 -4863 4863 0 0 0 0 -4864 4864 0 0 0 0 -4865 4865 0 0 0 0 -4866 4866 0 0 0 0 -4867 4867 0 0 0 0 -4868 4868 0 0 0 0 -4869 4869 0 0 0 0 -4870 4870 0 0 0 0 -4871 4871 0 0 0 0 -4872 4872 0 0 0 0 -4873 4873 0 0 0 0 -4874 4874 0 0 0 0 -4875 4875 0 0 0 0 -4876 4876 0 0 0 0 -4877 4877 0 0 0 0 -4878 4878 0 0 0 0 -4879 4879 0 0 0 0 -4880 4880 0 0 0 0 -4881 4881 0 0 0 0 -4882 4882 0 0 0 0 -4883 4883 0 0 0 0 -4884 4884 0 0 0 0 -4885 4885 0 0 0 0 -4886 4886 0 0 0 0 -4887 4887 0 0 0 0 -4888 4888 0 0 0 0 -4889 4889 0 0 0 0 -4890 4890 0 0 0 0 -4891 4891 0 0 0 0 -4892 4892 0 0 0 0 -4893 4893 0 0 0 0 -4894 4894 0 0 0 0 -4895 4895 0 0 0 0 -4896 4896 0 0 0 0 -4897 4897 0 0 0 0 -4898 4898 0 0 0 0 -4899 4899 0 0 0 0 -4900 4900 0 0 0 0 -4901 4901 0 0 0 0 -4902 4902 0 0 0 0 -4903 4903 0 0 0 0 -4904 4904 0 0 0 0 -4905 4905 0 0 0 0 -4906 4906 0 0 0 0 -4907 4907 0 0 0 0 -4908 4908 0 0 0 0 -4909 4909 0 0 0 0 -4910 4910 0 0 0 0 -4911 4911 0 0 0 0 -4912 4912 0 0 0 0 -4913 4913 0 0 0 0 -4914 4914 0 0 0 0 -4915 4915 0 0 0 0 -4916 4916 0 0 0 0 -4917 4917 0 0 0 0 -4918 4918 0 0 0 0 -4919 4919 0 0 0 0 -4920 4920 0 0 0 0 -4921 4921 0 0 0 0 -4922 4922 0 0 0 0 -4923 4923 0 0 0 0 -4924 4924 0 0 0 0 -4925 4925 0 0 0 0 -4926 4926 0 0 0 0 -4927 4927 0 0 0 0 -4928 4928 0 0 0 0 -4929 4929 0 0 0 0 -4930 4930 0 0 0 0 -4931 4931 0 0 0 0 -4932 4932 0 0 0 0 -4933 4933 0 0 0 0 -4934 4934 0 0 0 0 -4935 4935 0 0 0 0 -4936 4936 0 0 0 0 -4937 4937 0 0 0 0 -4938 4938 0 0 0 0 -4939 4939 0 0 0 0 -4940 4940 0 0 0 0 -4941 4941 0 0 0 0 -4942 4942 0 0 0 0 -4943 4943 0 0 0 0 -4944 4944 0 0 0 0 -4945 4945 0 0 0 0 -4946 4946 0 0 0 0 -4947 4947 0 0 0 0 -4948 4948 0 0 0 0 -4949 4949 0 0 0 0 -4950 4950 0 0 0 0 -4951 4951 0 0 0 0 -4952 4952 0 0 0 0 -4953 4953 0 0 0 0 -4954 4954 0 0 0 0 -4955 4955 0 0 0 0 -4956 4956 0 0 0 0 -4957 4957 0 0 0 0 -4958 4958 0 0 0 0 -4959 4959 0 0 0 0 -4960 4960 0 0 0 0 -4961 4961 0 0 0 0 -4962 4962 0 0 0 0 -4963 4963 0 0 0 0 -4964 4964 0 0 0 0 -4965 4965 0 0 0 0 -4966 4966 0 0 0 0 -4967 4967 0 0 0 0 -4968 4968 0 0 0 0 -4969 4969 0 0 0 0 -4970 4970 0 0 0 0 -4971 4971 0 0 0 0 -4972 4972 0 0 0 0 -4973 4973 0 0 0 0 -4974 4974 0 0 0 0 -4975 4975 0 0 0 0 -4976 4976 0 0 0 0 -4977 4977 0 0 0 0 -4978 4978 0 0 0 0 -4979 4979 0 0 0 0 -4980 4980 0 0 0 0 -4981 4981 0 0 0 0 -4982 4982 0 0 0 0 -4983 4983 0 0 0 0 -4984 4984 0 0 0 0 -4985 4985 0 0 0 0 -4986 4986 0 0 0 0 -4987 4987 0 0 0 0 -4988 4988 0 0 0 0 -4989 4989 0 0 0 0 -4990 4990 0 0 0 0 -4991 4991 0 0 0 0 -4992 4992 0 0 0 0 -4993 4993 0 0 0 0 -4994 4994 0 0 0 0 -4995 4995 0 0 0 0 -4996 4996 0 0 0 0 -4997 4997 0 0 0 0 -4998 4998 0 0 0 0 -4999 4999 0 0 0 0 -5000 5000 0 0 0 0 -5001 5001 0 0 0 0 -5002 5002 0 0 0 0 -5003 5003 0 0 0 0 -5004 5004 0 0 0 0 -5005 5005 0 0 0 0 -5006 5006 0 0 0 0 -5007 5007 0 0 0 0 -5008 5008 0 0 0 0 -5009 5009 0 0 0 0 -5010 5010 0 0 0 0 -5011 5011 0 0 0 0 -5012 5012 0 0 0 0 -5013 5013 0 0 0 0 -5014 5014 0 0 0 0 -5015 5015 0 0 0 0 -5016 5016 0 0 0 0 -5017 5017 0 0 0 0 -5018 5018 0 0 0 0 -5019 5019 0 0 0 0 -5020 5020 0 0 0 0 -5021 5021 0 0 0 0 -5022 5022 0 0 0 0 -5023 5023 0 0 0 0 -5024 5024 0 0 0 0 -5025 5025 0 0 0 0 -5026 5026 0 0 0 0 -5027 5027 0 0 0 0 -5028 5028 0 0 0 0 -5029 5029 0 0 0 0 -5030 5030 0 0 0 0 -5031 5031 0 0 0 0 -5032 5032 0 0 0 0 -5033 5033 0 0 0 0 -5034 5034 0 0 0 0 -5035 5035 0 0 0 0 -5036 5036 0 0 0 0 -5037 5037 0 0 0 0 -5038 5038 0 0 0 0 -5039 5039 0 0 0 0 -5040 5040 0 0 0 0 -5041 5041 0 0 0 0 -5042 5042 0 0 0 0 -5043 5043 0 0 0 0 -5044 5044 0 0 0 0 -5045 5045 0 0 0 0 -5046 5046 0 0 0 0 -5047 5047 0 0 0 0 -5048 5048 0 0 0 0 -5049 5049 0 0 0 0 -5050 5050 0 0 0 0 -5051 5051 0 0 0 0 -5052 5052 0 0 0 0 -5053 5053 0 0 0 0 -5054 5054 0 0 0 0 -5055 5055 0 0 0 0 -5056 5056 0 0 0 0 -5057 5057 0 0 0 0 -5058 5058 0 0 0 0 -5059 5059 0 0 0 0 -5060 5060 0 0 0 0 -5061 5061 0 0 0 0 -5062 5062 0 0 0 0 -5063 5063 0 0 0 0 -5064 5064 0 0 0 0 -5065 5065 0 0 0 0 -5066 5066 0 0 0 0 -5067 5067 0 0 0 0 -5068 5068 0 0 0 0 -5069 5069 0 0 0 0 -5070 5070 0 0 0 0 -5071 5071 0 0 0 0 -5072 5072 0 0 0 0 -5073 5073 0 0 0 0 -5074 5074 0 0 0 0 -5075 5075 0 0 0 0 -5076 5076 0 0 0 0 -5077 5077 0 0 0 0 -5078 5078 0 0 0 0 -5079 5079 0 0 0 0 -5080 5080 0 0 0 0 -5081 5081 0 0 0 0 -5082 5082 0 0 0 0 -5083 5083 0 0 0 0 -5084 5084 0 0 0 0 -5085 5085 0 0 0 0 -5086 5086 0 0 0 0 -5087 5087 0 0 0 0 -5088 5088 0 0 0 0 -5089 5089 0 0 0 0 -5090 5090 0 0 0 0 -5091 5091 0 0 0 0 -5092 5092 0 0 0 0 -5093 5093 0 0 0 0 -5094 5094 0 0 0 0 -5095 5095 0 0 0 0 -5096 5096 0 0 0 0 -5097 5097 0 0 0 0 -5098 5098 0 0 0 0 -5099 5099 0 0 0 0 -5100 5100 0 0 0 0 -5101 5101 0 0 0 0 -5102 5102 0 0 0 0 -5103 5103 0 0 0 0 -5104 5104 0 0 0 0 -5105 5105 0 0 0 0 -5106 5106 0 0 0 0 -5107 5107 0 0 0 0 -5108 5108 0 0 0 0 -5109 5109 0 0 0 0 -5110 5110 0 0 0 0 -5111 5111 0 0 0 0 -5112 5112 0 0 0 0 -5113 5113 0 0 0 0 -5114 5114 0 0 0 0 -5115 5115 0 0 0 0 -5116 5116 0 0 0 0 -5117 5117 0 0 0 0 -5118 5118 0 0 0 0 -5119 5119 0 0 0 0 -5120 5120 0 0 0 0 -5121 5121 0 0 0 0 -5122 5122 0 0 0 0 -5123 5123 0 0 0 0 -5124 5124 0 0 0 0 -5125 5125 0 0 0 0 -5126 5126 0 0 0 0 -5127 5127 0 0 0 0 -5128 5128 0 0 0 0 -5129 5129 0 0 0 0 -5130 5130 0 0 0 0 -5131 5131 0 0 0 0 -5132 5132 0 0 0 0 -5133 5133 0 0 0 0 -5134 5134 0 0 0 0 -5135 5135 0 0 0 0 -5136 5136 0 0 0 0 -5137 5137 0 0 0 0 -5138 5138 0 0 0 0 -5139 5139 0 0 0 0 -5140 5140 0 0 0 0 -5141 5141 0 0 0 0 -5142 5142 0 0 0 0 -5143 5143 0 0 0 0 -5144 5144 0 0 0 0 -5145 5145 0 0 0 0 -5146 5146 0 0 0 0 -5147 5147 0 0 0 0 -5148 5148 0 0 0 0 -5149 5149 0 0 0 0 -5150 5150 0 0 0 0 -5151 5151 0 0 0 0 -5152 5152 0 0 0 0 -5153 5153 0 0 0 0 -5154 5154 0 0 0 0 -5155 5155 0 0 0 0 -5156 5156 0 0 0 0 -5157 5157 0 0 0 0 -5158 5158 0 0 0 0 -5159 5159 0 0 0 0 -5160 5160 0 0 0 0 -5161 5161 0 0 0 0 -5162 5162 0 0 0 0 -5163 5163 0 0 0 0 -5164 5164 0 0 0 0 -5165 5165 0 0 0 0 -5166 5166 0 0 0 0 -5167 5167 0 0 0 0 -5168 5168 0 0 0 0 -5169 5169 0 0 0 0 -5170 5170 0 0 0 0 -5171 5171 0 0 0 0 -5172 5172 0 0 0 0 -5173 5173 0 0 0 0 -5174 5174 0 0 0 0 -5175 5175 0 0 0 0 -5176 5176 0 0 0 0 -5177 5177 0 0 0 0 -5178 5178 0 0 0 0 -5179 5179 0 0 0 0 -5180 5180 0 0 0 0 -5181 5181 0 0 0 0 -5182 5182 0 0 0 0 -5183 5183 0 0 0 0 -5184 5184 0 0 0 0 -5185 5185 0 0 0 0 -5186 5186 0 0 0 0 -5187 5187 0 0 0 0 -5188 5188 0 0 0 0 -5189 5189 0 0 0 0 -5190 5190 0 0 0 0 -5191 5191 0 0 0 0 -5192 5192 0 0 0 0 -5193 5193 0 0 0 0 -5194 5194 0 0 0 0 -5195 5195 0 0 0 0 -5196 5196 0 0 0 0 -5197 5197 0 0 0 0 -5198 5198 0 0 0 0 -5199 5199 0 0 0 0 -5200 5200 0 0 0 0 -5201 5201 0 0 0 0 -5202 5202 0 0 0 0 -5203 5203 0 0 0 0 -5204 5204 0 0 0 0 -5205 5205 0 0 0 0 -5206 5206 0 0 0 0 -5207 5207 0 0 0 0 -5208 5208 0 0 0 0 -5209 5209 0 0 0 0 -5210 5210 0 0 0 0 -5211 5211 0 0 0 0 -5212 5212 0 0 0 0 -5213 5213 0 0 0 0 -5214 5214 0 0 0 0 -5215 5215 0 0 0 0 -5216 5216 0 0 0 0 -5217 5217 0 0 0 0 -5218 5218 0 0 0 0 -5219 5219 0 0 0 0 -5220 5220 0 0 0 0 -5221 5221 0 0 0 0 -5222 5222 0 0 0 0 -5223 5223 0 0 0 0 -5224 5224 0 0 0 0 -5225 5225 0 0 0 0 -5226 5226 0 0 0 0 -5227 5227 0 0 0 0 -5228 5228 0 0 0 0 -5229 5229 0 0 0 0 -5230 5230 0 0 0 0 -5231 5231 0 0 0 0 -5232 5232 0 0 0 0 -5233 5233 0 0 0 0 -5234 5234 0 0 0 0 -5235 5235 0 0 0 0 -5236 5236 0 0 0 0 -5237 5237 0 0 0 0 -5238 5238 0 0 0 0 -5239 5239 0 0 0 0 -5240 5240 0 0 0 0 -5241 5241 0 0 0 0 -5242 5242 0 0 0 0 -5243 5243 0 0 0 0 -5244 5244 0 0 0 0 -5245 5245 0 0 0 0 -5246 5246 0 0 0 0 -5247 5247 0 0 0 0 -5248 5248 0 0 0 0 -5249 5249 0 0 0 0 -5250 5250 0 0 0 0 -5251 5251 0 0 0 0 -5252 5252 0 0 0 0 -5253 5253 0 0 0 0 -5254 5254 0 0 0 0 -5255 5255 0 0 0 0 -5256 5256 0 0 0 0 -5257 5257 0 0 0 0 -5258 5258 0 0 0 0 -5259 5259 0 0 0 0 -5260 5260 0 0 0 0 -5261 5261 0 0 0 0 -5262 5262 0 0 0 0 -5263 5263 0 0 0 0 -5264 5264 0 0 0 0 -5265 5265 0 0 0 0 -5266 5266 0 0 0 0 -5267 5267 0 0 0 0 -5268 5268 0 0 0 0 -5269 5269 0 0 0 0 -5270 5270 0 0 0 0 -5271 5271 0 0 0 0 -5272 5272 0 0 0 0 -5273 5273 0 0 0 0 -5274 5274 0 0 0 0 -5275 5275 0 0 0 0 -5276 5276 0 0 0 0 -5277 5277 0 0 0 0 -5278 5278 0 0 0 0 -5279 5279 0 0 0 0 -5280 5280 0 0 0 0 -5281 5281 0 0 0 0 -5282 5282 0 0 0 0 -5283 5283 0 0 0 0 -5284 5284 0 0 0 0 -5285 5285 0 0 0 0 -5286 5286 0 0 0 0 -5287 5287 0 0 0 0 -5288 5288 0 0 0 0 -5289 5289 0 0 0 0 -5290 5290 0 0 0 0 -5291 5291 0 0 0 0 -5292 5292 0 0 0 0 -5293 5293 0 0 0 0 -5294 5294 0 0 0 0 -5295 5295 0 0 0 0 -5296 5296 0 0 0 0 -5297 5297 0 0 0 0 -5298 5298 0 0 0 0 -5299 5299 0 0 0 0 -5300 5300 0 0 0 0 -5301 5301 0 0 0 0 -5302 5302 0 0 0 0 -5303 5303 0 0 0 0 -5304 5304 0 0 0 0 -5305 5305 0 0 0 0 -5306 5306 0 0 0 0 -5307 5307 0 0 0 0 -5308 5308 0 0 0 0 -5309 5309 0 0 0 0 -5310 5310 0 0 0 0 -5311 5311 0 0 0 0 -5312 5312 0 0 0 0 -5313 5313 0 0 0 0 -5314 5314 0 0 0 0 -5315 5315 0 0 0 0 -5316 5316 0 0 0 0 -5317 5317 0 0 0 0 -5318 5318 0 0 0 0 -5319 5319 0 0 0 0 -5320 5320 0 0 0 0 -5321 5321 0 0 0 0 -5322 5322 0 0 0 0 -5323 5323 0 0 0 0 -5324 5324 0 0 0 0 -5325 5325 0 0 0 0 -5326 5326 0 0 0 0 -5327 5327 0 0 0 0 -5328 5328 0 0 0 0 -5329 5329 0 0 0 0 -5330 5330 0 0 0 0 -5331 5331 0 0 0 0 -5332 5332 0 0 0 0 -5333 5333 0 0 0 0 -5334 5334 0 0 0 0 -5335 5335 0 0 0 0 -5336 5336 0 0 0 0 -5337 5337 0 0 0 0 -5338 5338 0 0 0 0 -5339 5339 0 0 0 0 -5340 5340 0 0 0 0 -5341 5341 0 0 0 0 -5342 5342 0 0 0 0 -5343 5343 0 0 0 0 -5344 5344 0 0 0 0 -5345 5345 0 0 0 0 -5346 5346 0 0 0 0 -5347 5347 0 0 0 0 -5348 5348 0 0 0 0 -5349 5349 0 0 0 0 -5350 5350 0 0 0 0 -5351 5351 0 0 0 0 -5352 5352 0 0 0 0 -5353 5353 0 0 0 0 -5354 5354 0 0 0 0 -5355 5355 0 0 0 0 -5356 5356 0 0 0 0 -5357 5357 0 0 0 0 -5358 5358 0 0 0 0 -5359 5359 0 0 0 0 -5360 5360 0 0 0 0 -5361 5361 0 0 0 0 -5362 5362 0 0 0 0 -5363 5363 0 0 0 0 -5364 5364 0 0 0 0 -5365 5365 0 0 0 0 -5366 5366 0 0 0 0 -5367 5367 0 0 0 0 -5368 5368 0 0 0 0 -5369 5369 0 0 0 0 -5370 5370 0 0 0 0 -5371 5371 0 0 0 0 -5372 5372 0 0 0 0 -5373 5373 0 0 0 0 -5374 5374 0 0 0 0 -5375 5375 0 0 0 0 -5376 5376 0 0 0 0 -5377 5377 0 0 0 0 -5378 5378 0 0 0 0 -5379 5379 0 0 0 0 -5380 5380 0 0 0 0 -5381 5381 0 0 0 0 -5382 5382 0 0 0 0 -5383 5383 0 0 0 0 -5384 5384 0 0 0 0 -5385 5385 0 0 0 0 -5386 5386 0 0 0 0 -5387 5387 0 0 0 0 -5388 5388 0 0 0 0 -5389 5389 0 0 0 0 -5390 5390 0 0 0 0 -5391 5391 0 0 0 0 -5392 5392 0 0 0 0 -5393 5393 0 0 0 0 -5394 5394 0 0 0 0 -5395 5395 0 0 0 0 -5396 5396 0 0 0 0 -5397 5397 0 0 0 0 -5398 5398 0 0 0 0 -5399 5399 0 0 0 0 -5400 5400 0 0 0 0 -5401 5401 0 0 0 0 -5402 5402 0 0 0 0 -5403 5403 0 0 0 0 -5404 5404 0 0 0 0 -5405 5405 0 0 0 0 -5406 5406 0 0 0 0 -5407 5407 0 0 0 0 -5408 5408 0 0 0 0 -5409 5409 0 0 0 0 -5410 5410 0 0 0 0 -5411 5411 0 0 0 0 -5412 5412 0 0 0 0 -5413 5413 0 0 0 0 -5414 5414 0 0 0 0 -5415 5415 0 0 0 0 -5416 5416 0 0 0 0 -5417 5417 0 0 0 0 -5418 5418 0 0 0 0 -5419 5419 0 0 0 0 -5420 5420 0 0 0 0 -5421 5421 0 0 0 0 -5422 5422 0 0 0 0 -5423 5423 0 0 0 0 -5424 5424 0 0 0 0 -5425 5425 0 0 0 0 -5426 5426 0 0 0 0 -5427 5427 0 0 0 0 -5428 5428 0 0 0 0 -5429 5429 0 0 0 0 -5430 5430 0 0 0 0 -5431 5431 0 0 0 0 -5432 5432 0 0 0 0 -5433 5433 0 0 0 0 -5434 5434 0 0 0 0 -5435 5435 0 0 0 0 -5436 5436 0 0 0 0 -5437 5437 0 0 0 0 -5438 5438 0 0 0 0 -5439 5439 0 0 0 0 -5440 5440 0 0 0 0 -5441 5441 0 0 0 0 -5442 5442 0 0 0 0 -5443 5443 0 0 0 0 -5444 5444 0 0 0 0 -5445 5445 0 0 0 0 -5446 5446 0 0 0 0 -5447 5447 0 0 0 0 -5448 5448 0 0 0 0 -5449 5449 0 0 0 0 -5450 5450 0 0 0 0 -5451 5451 0 0 0 0 -5452 5452 0 0 0 0 -5453 5453 0 0 0 0 -5454 5454 0 0 0 0 -5455 5455 0 0 0 0 -5456 5456 0 0 0 0 -5457 5457 0 0 0 0 -5458 5458 0 0 0 0 -5459 5459 0 0 0 0 -5460 5460 0 0 0 0 -5461 5461 0 0 0 0 -5462 5462 0 0 0 0 -5463 5463 0 0 0 0 -5464 5464 0 0 0 0 -5465 5465 0 0 0 0 -5466 5466 0 0 0 0 -5467 5467 0 0 0 0 -5468 5468 0 0 0 0 -5469 5469 0 0 0 0 -5470 5470 0 0 0 0 -5471 5471 0 0 0 0 -5472 5472 0 0 0 0 -5473 5473 0 0 0 0 -5474 5474 0 0 0 0 -5475 5475 0 0 0 0 -5476 5476 0 0 0 0 -5477 5477 0 0 0 0 -5478 5478 0 0 0 0 -5479 5479 0 0 0 0 -5480 5480 0 0 0 0 -5481 5481 0 0 0 0 -5482 5482 0 0 0 0 -5483 5483 0 0 0 0 -5484 5484 0 0 0 0 -5485 5485 0 0 0 0 -5486 5486 0 0 0 0 -5487 5487 0 0 0 0 -5488 5488 0 0 0 0 -5489 5489 0 0 0 0 -5490 5490 0 0 0 0 -5491 5491 0 0 0 0 -5492 5492 0 0 0 0 -5493 5493 0 0 0 0 -5494 5494 0 0 0 0 -5495 5495 0 0 0 0 -5496 5496 0 0 0 0 -5497 5497 0 0 0 0 -5498 5498 0 0 0 0 -5499 5499 0 0 0 0 -5500 5500 0 0 0 0 -5501 5501 0 0 0 0 -5502 5502 0 0 0 0 -5503 5503 0 0 0 0 -5504 5504 0 0 0 0 -5505 5505 0 0 0 0 -5506 5506 0 0 0 0 -5507 5507 0 0 0 0 -5508 5508 0 0 0 0 -5509 5509 0 0 0 0 -5510 5510 0 0 0 0 -5511 5511 0 0 0 0 -5512 5512 0 0 0 0 -5513 5513 0 0 0 0 -5514 5514 0 0 0 0 -5515 5515 0 0 0 0 -5516 5516 0 0 0 0 -5517 5517 0 0 0 0 -5518 5518 0 0 0 0 -5519 5519 0 0 0 0 -5520 5520 0 0 0 0 -5521 5521 0 0 0 0 -5522 5522 0 0 0 0 -5523 5523 0 0 0 0 -5524 5524 0 0 0 0 -5525 5525 0 0 0 0 -5526 5526 0 0 0 0 -5527 5527 0 0 0 0 -5528 5528 0 0 0 0 -5529 5529 0 0 0 0 -5530 5530 0 0 0 0 -5531 5531 0 0 0 0 -5532 5532 0 0 0 0 -5533 5533 0 0 0 0 -5534 5534 0 0 0 0 -5535 5535 0 0 0 0 -5536 5536 0 0 0 0 -5537 5537 0 0 0 0 -5538 5538 0 0 0 0 -5539 5539 0 0 0 0 -5540 5540 0 0 0 0 -5541 5541 0 0 0 0 -5542 5542 0 0 0 0 -5543 5543 0 0 0 0 -5544 5544 0 0 0 0 -5545 5545 0 0 0 0 -5546 5546 0 0 0 0 -5547 5547 0 0 0 0 -5548 5548 0 0 0 0 -5549 5549 0 0 0 0 -5550 5550 0 0 0 0 -5551 5551 0 0 0 0 -5552 5552 0 0 0 0 -5553 5553 0 0 0 0 -5554 5554 0 0 0 0 -5555 5555 0 0 0 0 -5556 5556 0 0 0 0 -5557 5557 0 0 0 0 -5558 5558 0 0 0 0 -5559 5559 0 0 0 0 -5560 5560 0 0 0 0 -5561 5561 0 0 0 0 -5562 5562 0 0 0 0 -5563 5563 0 0 0 0 -5564 5564 0 0 0 0 -5565 5565 0 0 0 0 -5566 5566 0 0 0 0 -5567 5567 0 0 0 0 -5568 5568 0 0 0 0 -5569 5569 0 0 0 0 -5570 5570 0 0 0 0 -5571 5571 0 0 0 0 -5572 5572 0 0 0 0 -5573 5573 0 0 0 0 -5574 5574 0 0 0 0 -5575 5575 0 0 0 0 -5576 5576 0 0 0 0 -5577 5577 0 0 0 0 -5578 5578 0 0 0 0 -5579 5579 0 0 0 0 -5580 5580 0 0 0 0 -5581 5581 0 0 0 0 -5582 5582 0 0 0 0 -5583 5583 0 0 0 0 -5584 5584 0 0 0 0 -5585 5585 0 0 0 0 -5586 5586 0 0 0 0 -5587 5587 0 0 0 0 -5588 5588 0 0 0 0 -5589 5589 0 0 0 0 -5590 5590 0 0 0 0 -5591 5591 0 0 0 0 -5592 5592 0 0 0 0 -5593 5593 0 0 0 0 -5594 5594 0 0 0 0 -5595 5595 0 0 0 0 -5596 5596 0 0 0 0 -5597 5597 0 0 0 0 -5598 5598 0 0 0 0 -5599 5599 0 0 0 0 -5600 5600 0 0 0 0 -5601 5601 0 0 0 0 -5602 5602 0 0 0 0 -5603 5603 0 0 0 0 -5604 5604 0 0 0 0 -5605 5605 0 0 0 0 -5606 5606 0 0 0 0 -5607 5607 0 0 0 0 -5608 5608 0 0 0 0 -5609 5609 0 0 0 0 -5610 5610 0 0 0 0 -5611 5611 0 0 0 0 -5612 5612 0 0 0 0 -5613 5613 0 0 0 0 -5614 5614 0 0 0 0 -5615 5615 0 0 0 0 -5616 5616 0 0 0 0 -5617 5617 0 0 0 0 -5618 5618 0 0 0 0 -5619 5619 0 0 0 0 -5620 5620 0 0 0 0 -5621 5621 0 0 0 0 -5622 5622 0 0 0 0 -5623 5623 0 0 0 0 -5624 5624 0 0 0 0 -5625 5625 0 0 0 0 -5626 5626 0 0 0 0 -5627 5627 0 0 0 0 -5628 5628 0 0 0 0 -5629 5629 0 0 0 0 -5630 5630 0 0 0 0 -5631 5631 0 0 0 0 -5632 5632 0 0 0 0 -5633 5633 0 0 0 0 -5634 5634 0 0 0 0 -5635 5635 0 0 0 0 -5636 5636 0 0 0 0 -5637 5637 0 0 0 0 -5638 5638 0 0 0 0 -5639 5639 0 0 0 0 -5640 5640 0 0 0 0 -5641 5641 0 0 0 0 -5642 5642 0 0 0 0 -5643 5643 0 0 0 0 -5644 5644 0 0 0 0 -5645 5645 0 0 0 0 -5646 5646 0 0 0 0 -5647 5647 0 0 0 0 -5648 5648 0 0 0 0 -5649 5649 0 0 0 0 -5650 5650 0 0 0 0 -5651 5651 0 0 0 0 -5652 5652 0 0 0 0 -5653 5653 0 0 0 0 -5654 5654 0 0 0 0 -5655 5655 0 0 0 0 -5656 5656 0 0 0 0 -5657 5657 0 0 0 0 -5658 5658 0 0 0 0 -5659 5659 0 0 0 0 -5660 5660 0 0 0 0 -5661 5661 0 0 0 0 -5662 5662 0 0 0 0 -5663 5663 0 0 0 0 -5664 5664 0 0 0 0 -5665 5665 0 0 0 0 -5666 5666 0 0 0 0 -5667 5667 0 0 0 0 -5668 5668 0 0 0 0 -5669 5669 0 0 0 0 -5670 5670 0 0 0 0 -5671 5671 0 0 0 0 -5672 5672 0 0 0 0 -5673 5673 0 0 0 0 -5674 5674 0 0 0 0 -5675 5675 0 0 0 0 -5676 5676 0 0 0 0 -5677 5677 0 0 0 0 -5678 5678 0 0 0 0 -5679 5679 0 0 0 0 -5680 5680 0 0 0 0 -5681 5681 0 0 0 0 -5682 5682 0 0 0 0 -5683 5683 0 0 0 0 -5684 5684 0 0 0 0 -5685 5685 0 0 0 0 -5686 5686 0 0 0 0 -5687 5687 0 0 0 0 -5688 5688 0 0 0 0 -5689 5689 0 0 0 0 -5690 5690 0 0 0 0 -5691 5691 0 0 0 0 -5692 5692 0 0 0 0 -5693 5693 0 0 0 0 -5694 5694 0 0 0 0 -5695 5695 0 0 0 0 -5696 5696 0 0 0 0 -5697 5697 0 0 0 0 -5698 5698 0 0 0 0 -5699 5699 0 0 0 0 -5700 5700 0 0 0 0 -5701 5701 0 0 0 0 -5702 5702 0 0 0 0 -5703 5703 0 0 0 0 -5704 5704 0 0 0 0 -5705 5705 0 0 0 0 -5706 5706 0 0 0 0 -5707 5707 0 0 0 0 -5708 5708 0 0 0 0 -5709 5709 0 0 0 0 -5710 5710 0 0 0 0 -5711 5711 0 0 0 0 -5712 5712 0 0 0 0 -5713 5713 0 0 0 0 -5714 5714 0 0 0 0 -5715 5715 0 0 0 0 -5716 5716 0 0 0 0 -5717 5717 0 0 0 0 -5718 5718 0 0 0 0 -5719 5719 0 0 0 0 -5720 5720 0 0 0 0 -5721 5721 0 0 0 0 -5722 5722 0 0 0 0 -5723 5723 0 0 0 0 -5724 5724 0 0 0 0 -5725 5725 0 0 0 0 -5726 5726 0 0 0 0 -5727 5727 0 0 0 0 -5728 5728 0 0 0 0 -5729 5729 0 0 0 0 -5730 5730 0 0 0 0 -5731 5731 0 0 0 0 -5732 5732 0 0 0 0 -5733 5733 0 0 0 0 -5734 5734 0 0 0 0 -5735 5735 0 0 0 0 -5736 5736 0 0 0 0 -5737 5737 0 0 0 0 -5738 5738 0 0 0 0 -5739 5739 0 0 0 0 -5740 5740 0 0 0 0 -5741 5741 0 0 0 0 -5742 5742 0 0 0 0 -5743 5743 0 0 0 0 -5744 5744 0 0 0 0 -5745 5745 0 0 0 0 -5746 5746 0 0 0 0 -5747 5747 0 0 0 0 -5748 5748 0 0 0 0 -5749 5749 0 0 0 0 -5750 5750 0 0 0 0 -5751 5751 0 0 0 0 -5752 5752 0 0 0 0 -5753 5753 0 0 0 0 -5754 5754 0 0 0 0 -5755 5755 0 0 0 0 -5756 5756 0 0 0 0 -5757 5757 0 0 0 0 -5758 5758 0 0 0 0 -5759 5759 0 0 0 0 -5760 5760 0 0 0 0 -5761 5761 0 0 0 0 -5762 5762 0 0 0 0 -5763 5763 0 0 0 0 -5764 5764 0 0 0 0 -5765 5765 0 0 0 0 -5766 5766 0 0 0 0 -5767 5767 0 0 0 0 -5768 5768 0 0 0 0 -5769 5769 0 0 0 0 -5770 5770 0 0 0 0 -5771 5771 0 0 0 0 -5772 5772 0 0 0 0 -5773 5773 0 0 0 0 -5774 5774 0 0 0 0 -5775 5775 0 0 0 0 -5776 5776 0 0 0 0 -5777 5777 0 0 0 0 -5778 5778 0 0 0 0 -5779 5779 0 0 0 0 -5780 5780 0 0 0 0 -5781 5781 0 0 0 0 -5782 5782 0 0 0 0 -5783 5783 0 0 0 0 -5784 5784 0 0 0 0 -5785 5785 0 0 0 0 -5786 5786 0 0 0 0 -5787 5787 0 0 0 0 -5788 5788 0 0 0 0 -5789 5789 0 0 0 0 -5790 5790 0 0 0 0 -5791 5791 0 0 0 0 -5792 5792 0 0 0 0 -5793 5793 0 0 0 0 -5794 5794 0 0 0 0 -5795 5795 0 0 0 0 -5796 5796 0 0 0 0 -5797 5797 0 0 0 0 -5798 5798 0 0 0 0 -5799 5799 0 0 0 0 -5800 5800 0 0 0 0 -5801 5801 0 0 0 0 -5802 5802 0 0 0 0 -5803 5803 0 0 0 0 -5804 5804 0 0 0 0 -5805 5805 0 0 0 0 -5806 5806 0 0 0 0 -5807 5807 0 0 0 0 -5808 5808 0 0 0 0 -5809 5809 0 0 0 0 -5810 5810 0 0 0 0 -5811 5811 0 0 0 0 -5812 5812 0 0 0 0 -5813 5813 0 0 0 0 -5814 5814 0 0 0 0 -5815 5815 0 0 0 0 -5816 5816 0 0 0 0 -5817 5817 0 0 0 0 -5818 5818 0 0 0 0 -5819 5819 0 0 0 0 -5820 5820 0 0 0 0 -5821 5821 0 0 0 0 -5822 5822 0 0 0 0 -5823 5823 0 0 0 0 -5824 5824 0 0 0 0 -5825 5825 0 0 0 0 -5826 5826 0 0 0 0 -5827 5827 0 0 0 0 -5828 5828 0 0 0 0 -5829 5829 0 0 0 0 -5830 5830 0 0 0 0 -5831 5831 0 0 0 0 -5832 5832 0 0 0 0 -5833 5833 0 0 0 0 -5834 5834 0 0 0 0 -5835 5835 0 0 0 0 -5836 5836 0 0 0 0 -5837 5837 0 0 0 0 -5838 5838 0 0 0 0 -5839 5839 0 0 0 0 -5840 5840 0 0 0 0 -5841 5841 0 0 0 0 -5842 5842 0 0 0 0 -5843 5843 0 0 0 0 -5844 5844 0 0 0 0 -5845 5845 0 0 0 0 -5846 5846 0 0 0 0 -5847 5847 0 0 0 0 -5848 5848 0 0 0 0 -5849 5849 0 0 0 0 -5850 5850 0 0 0 0 -5851 5851 0 0 0 0 -5852 5852 0 0 0 0 -5853 5853 0 0 0 0 -5854 5854 0 0 0 0 -5855 5855 0 0 0 0 -5856 5856 0 0 0 0 -5857 5857 0 0 0 0 -5858 5858 0 0 0 0 -5859 5859 0 0 0 0 -5860 5860 0 0 0 0 -5861 5861 0 0 0 0 -5862 5862 0 0 0 0 -5863 5863 0 0 0 0 -5864 5864 0 0 0 0 -5865 5865 0 0 0 0 -5866 5866 0 0 0 0 -5867 5867 0 0 0 0 -5868 5868 0 0 0 0 -5869 5869 0 0 0 0 -5870 5870 0 0 0 0 -5871 5871 0 0 0 0 -5872 5872 0 0 0 0 -5873 5873 0 0 0 0 -5874 5874 0 0 0 0 -5875 5875 0 0 0 0 -5876 5876 0 0 0 0 -5877 5877 0 0 0 0 -5878 5878 0 0 0 0 -5879 5879 0 0 0 0 -5880 5880 0 0 0 0 -5881 5881 0 0 0 0 -5882 5882 0 0 0 0 -5883 5883 0 0 0 0 -5884 5884 0 0 0 0 -5885 5885 0 0 0 0 -5886 5886 0 0 0 0 -5887 5887 0 0 0 0 -5888 5888 0 0 0 0 -5889 5889 0 0 0 0 -5890 5890 0 0 0 0 -5891 5891 0 0 0 0 -5892 5892 0 0 0 0 -5893 5893 0 0 0 0 -5894 5894 0 0 0 0 -5895 5895 0 0 0 0 -5896 5896 0 0 0 0 -5897 5897 0 0 0 0 -5898 5898 0 0 0 0 -5899 5899 0 0 0 0 -5900 5900 0 0 0 0 -5901 5901 0 0 0 0 -5902 5902 0 0 0 0 -5903 5903 0 0 0 0 -5904 5904 0 0 0 0 -5905 5905 0 0 0 0 -5906 5906 0 0 0 0 -5907 5907 0 0 0 0 -5908 5908 0 0 0 0 -5909 5909 0 0 0 0 -5910 5910 0 0 0 0 -5911 5911 0 0 0 0 -5912 5912 0 0 0 0 -5913 5913 0 0 0 0 -5914 5914 0 0 0 0 -5915 5915 0 0 0 0 -5916 5916 0 0 0 0 -5917 5917 0 0 0 0 -5918 5918 0 0 0 0 -5919 5919 0 0 0 0 -5920 5920 0 0 0 0 -5921 5921 0 0 0 0 -5922 5922 0 0 0 0 -5923 5923 0 0 0 0 -5924 5924 0 0 0 0 -5925 5925 0 0 0 0 -5926 5926 0 0 0 0 -5927 5927 0 0 0 0 -5928 5928 0 0 0 0 -5929 5929 0 0 0 0 -5930 5930 0 0 0 0 -5931 5931 0 0 0 0 -5932 5932 0 0 0 0 -5933 5933 0 0 0 0 -5934 5934 0 0 0 0 -5935 5935 0 0 0 0 -5936 5936 0 0 0 0 -5937 5937 0 0 0 0 -5938 5938 0 0 0 0 -5939 5939 0 0 0 0 -5940 5940 0 0 0 0 -5941 5941 0 0 0 0 -5942 5942 0 0 0 0 -5943 5943 0 0 0 0 -5944 5944 0 0 0 0 -5945 5945 0 0 0 0 -5946 5946 0 0 0 0 -5947 5947 0 0 0 0 -5948 5948 0 0 0 0 -5949 5949 0 0 0 0 -5950 5950 0 0 0 0 -5951 5951 0 0 0 0 -5952 5952 0 0 0 0 -5953 5953 0 0 0 0 -5954 5954 0 0 0 0 -5955 5955 0 0 0 0 -5956 5956 0 0 0 0 -5957 5957 0 0 0 0 -5958 5958 0 0 0 0 -5959 5959 0 0 0 0 -5960 5960 0 0 0 0 -5961 5961 0 0 0 0 -5962 5962 0 0 0 0 -5963 5963 0 0 0 0 -5964 5964 0 0 0 0 -5965 5965 0 0 0 0 -5966 5966 0 0 0 0 -5967 5967 0 0 0 0 -5968 5968 0 0 0 0 -5969 5969 0 0 0 0 -5970 5970 0 0 0 0 -5971 5971 0 0 0 0 -5972 5972 0 0 0 0 -5973 5973 0 0 0 0 -5974 5974 0 0 0 0 -5975 5975 0 0 0 0 -5976 5976 0 0 0 0 -5977 5977 0 0 0 0 -5978 5978 0 0 0 0 -5979 5979 0 0 0 0 -5980 5980 0 0 0 0 -5981 5981 0 0 0 0 -5982 5982 0 0 0 0 -5983 5983 0 0 0 0 -5984 5984 0 0 0 0 -5985 5985 0 0 0 0 -5986 5986 0 0 0 0 -5987 5987 0 0 0 0 -5988 5988 0 0 0 0 -5989 5989 0 0 0 0 -5990 5990 0 0 0 0 -5991 5991 0 0 0 0 -5992 5992 0 0 0 0 -5993 5993 0 0 0 0 -5994 5994 0 0 0 0 -5995 5995 0 0 0 0 -5996 5996 0 0 0 0 -5997 5997 0 0 0 0 -5998 5998 0 0 0 0 -5999 5999 0 0 0 0 -6000 6000 0 0 0 0 -6001 6001 0 0 0 0 -6002 6002 0 0 0 0 -6003 6003 0 0 0 0 -6004 6004 0 0 0 0 -6005 6005 0 0 0 0 -6006 6006 0 0 0 0 -6007 6007 0 0 0 0 -6008 6008 0 0 0 0 -6009 6009 0 0 0 0 -6010 6010 0 0 0 0 -6011 6011 0 0 0 0 -6012 6012 0 0 0 0 -6013 6013 0 0 0 0 -6014 6014 0 0 0 0 -6015 6015 0 0 0 0 -6016 6016 0 0 0 0 -6017 6017 0 0 0 0 -6018 6018 0 0 0 0 -6019 6019 0 0 0 0 -6020 6020 0 0 0 0 -6021 6021 0 0 0 0 -6022 6022 0 0 0 0 -6023 6023 0 0 0 0 -6024 6024 0 0 0 0 -6025 6025 0 0 0 0 -6026 6026 0 0 0 0 -6027 6027 0 0 0 0 -6028 6028 0 0 0 0 -6029 6029 0 0 0 0 -6030 6030 0 0 0 0 -6031 6031 0 0 0 0 -6032 6032 0 0 0 0 -6033 6033 0 0 0 0 -6034 6034 0 0 0 0 -6035 6035 0 0 0 0 -6036 6036 0 0 0 0 -6037 6037 0 0 0 0 -6038 6038 0 0 0 0 -6039 6039 0 0 0 0 -6040 6040 0 0 0 0 -6041 6041 0 0 0 0 -6042 6042 0 0 0 0 -6043 6043 0 0 0 0 -6044 6044 0 0 0 0 -6045 6045 0 0 0 0 -6046 6046 0 0 0 0 -6047 6047 0 0 0 0 -6048 6048 0 0 0 0 -6049 6049 0 0 0 0 -6050 6050 0 0 0 0 -6051 6051 0 0 0 0 -6052 6052 0 0 0 0 -6053 6053 0 0 0 0 -6054 6054 0 0 0 0 -6055 6055 0 0 0 0 -6056 6056 0 0 0 0 -6057 6057 0 0 0 0 -6058 6058 0 0 0 0 -6059 6059 0 0 0 0 -6060 6060 0 0 0 0 -6061 6061 0 0 0 0 -6062 6062 0 0 0 0 -6063 6063 0 0 0 0 -6064 6064 0 0 0 0 -6065 6065 0 0 0 0 -6066 6066 0 0 0 0 -6067 6067 0 0 0 0 -6068 6068 0 0 0 0 -6069 6069 0 0 0 0 -6070 6070 0 0 0 0 -6071 6071 0 0 0 0 -6072 6072 0 0 0 0 -6073 6073 0 0 0 0 -6074 6074 0 0 0 0 -6075 6075 0 0 0 0 -6076 6076 0 0 0 0 -6077 6077 0 0 0 0 -6078 6078 0 0 0 0 -6079 6079 0 0 0 0 -6080 6080 0 0 0 0 -6081 6081 0 0 0 0 -6082 6082 0 0 0 0 -6083 6083 0 0 0 0 -6084 6084 0 0 0 0 -6085 6085 0 0 0 0 -6086 6086 0 0 0 0 -6087 6087 0 0 0 0 -6088 6088 0 0 0 0 -6089 6089 0 0 0 0 -6090 6090 0 0 0 0 -6091 6091 0 0 0 0 -6092 6092 0 0 0 0 -6093 6093 0 0 0 0 -6094 6094 0 0 0 0 -6095 6095 0 0 0 0 -6096 6096 0 0 0 0 -6097 6097 0 0 0 0 -6098 6098 0 0 0 0 -6099 6099 0 0 0 0 -6100 6100 0 0 0 0 -6101 6101 0 0 0 0 -6102 6102 0 0 0 0 -6103 6103 0 0 0 0 -6104 6104 0 0 0 0 -6105 6105 0 0 0 0 -6106 6106 0 0 0 0 -6107 6107 0 0 0 0 -6108 6108 0 0 0 0 -6109 6109 0 0 0 0 -6110 6110 0 0 0 0 -6111 6111 0 0 0 0 -6112 6112 0 0 0 0 -6113 6113 0 0 0 0 -6114 6114 0 0 0 0 -6115 6115 0 0 0 0 -6116 6116 0 0 0 0 -6117 6117 0 0 0 0 -6118 6118 0 0 0 0 -6119 6119 0 0 0 0 -6120 6120 0 0 0 0 -6121 6121 0 0 0 0 -6122 6122 0 0 0 0 -6123 6123 0 0 0 0 -6124 6124 0 0 0 0 -6125 6125 0 0 0 0 -6126 6126 0 0 0 0 -6127 6127 0 0 0 0 -6128 6128 0 0 0 0 -6129 6129 0 0 0 0 -6130 6130 0 0 0 0 -6131 6131 0 0 0 0 -6132 6132 0 0 0 0 -6133 6133 0 0 0 0 -6134 6134 0 0 0 0 -6135 6135 0 0 0 0 -6136 6136 0 0 0 0 -6137 6137 0 0 0 0 -6138 6138 0 0 0 0 -6139 6139 0 0 0 0 -6140 6140 0 0 0 0 -6141 6141 0 0 0 0 -6142 6142 0 0 0 0 -6143 6143 0 0 0 0 -6144 6144 0 0 0 0 -6145 6145 0 0 0 0 -6146 6146 0 0 0 0 -6147 6147 0 0 0 0 -6148 6148 0 0 0 0 -6149 6149 0 0 0 0 -6150 6150 0 0 0 0 -6151 6151 0 0 0 0 -6152 6152 0 0 0 0 -6153 6153 0 0 0 0 -6154 6154 0 0 0 0 -6155 6155 0 0 0 0 -6156 6156 0 0 0 0 -6157 6157 0 0 0 0 -6158 6158 0 0 0 0 -6159 6159 0 0 0 0 -6160 6160 0 0 0 0 -6161 6161 0 0 0 0 -6162 6162 0 0 0 0 -6163 6163 0 0 0 0 -6164 6164 0 0 0 0 -6165 6165 0 0 0 0 -6166 6166 0 0 0 0 -6167 6167 0 0 0 0 -6168 6168 0 0 0 0 -6169 6169 0 0 0 0 -6170 6170 0 0 0 0 -6171 6171 0 0 0 0 -6172 6172 0 0 0 0 -6173 6173 0 0 0 0 -6174 6174 0 0 0 0 -6175 6175 0 0 0 0 -6176 6176 0 0 0 0 -6177 6177 0 0 0 0 -6178 6178 0 0 0 0 -6179 6179 0 0 0 0 -6180 6180 0 0 0 0 -6181 6181 0 0 0 0 -6182 6182 0 0 0 0 -6183 6183 0 0 0 0 -6184 6184 0 0 0 0 -6185 6185 0 0 0 0 -6186 6186 0 0 0 0 -6187 6187 0 0 0 0 -6188 6188 0 0 0 0 -6189 6189 0 0 0 0 -6190 6190 0 0 0 0 -6191 6191 0 0 0 0 -6192 6192 0 0 0 0 -6193 6193 0 0 0 0 -6194 6194 0 0 0 0 -6195 6195 0 0 0 0 -6196 6196 0 0 0 0 -6197 6197 0 0 0 0 -6198 6198 0 0 0 0 -6199 6199 0 0 0 0 -6200 6200 0 0 0 0 -6201 6201 0 0 0 0 -6202 6202 0 0 0 0 -6203 6203 0 0 0 0 -6204 6204 0 0 0 0 -6205 6205 0 0 0 0 -6206 6206 0 0 0 0 -6207 6207 0 0 0 0 -6208 6208 0 0 0 0 -6209 6209 0 0 0 0 -6210 6210 0 0 0 0 -6211 6211 0 0 0 0 -6212 6212 0 0 0 0 -6213 6213 0 0 0 0 -6214 6214 0 0 0 0 -6215 6215 0 0 0 0 -6216 6216 0 0 0 0 -6217 6217 0 0 0 0 -6218 6218 0 0 0 0 -6219 6219 0 0 0 0 -6220 6220 0 0 0 0 -6221 6221 0 0 0 0 -6222 6222 0 0 0 0 -6223 6223 0 0 0 0 -6224 6224 0 0 0 0 -6225 6225 0 0 0 0 -6226 6226 0 0 0 0 -6227 6227 0 0 0 0 -6228 6228 0 0 0 0 -6229 6229 0 0 0 0 -6230 6230 0 0 0 0 -6231 6231 0 0 0 0 -6232 6232 0 0 0 0 -6233 6233 0 0 0 0 -6234 6234 0 0 0 0 -6235 6235 0 0 0 0 -6236 6236 0 0 0 0 -6237 6237 0 0 0 0 -6238 6238 0 0 0 0 -6239 6239 0 0 0 0 -6240 6240 0 0 0 0 -6241 6241 0 0 0 0 -6242 6242 0 0 0 0 -6243 6243 0 0 0 0 -6244 6244 0 0 0 0 -6245 6245 0 0 0 0 -6246 6246 0 0 0 0 -6247 6247 0 0 0 0 -6248 6248 0 0 0 0 -6249 6249 0 0 0 0 -6250 6250 0 0 0 0 -6251 6251 0 0 0 0 -6252 6252 0 0 0 0 -6253 6253 0 0 0 0 -6254 6254 0 0 0 0 -6255 6255 0 0 0 0 -6256 6256 0 0 0 0 -6257 6257 0 0 0 0 -6258 6258 0 0 0 0 -6259 6259 0 0 0 0 -6260 6260 0 0 0 0 -6261 6261 0 0 0 0 -6262 6262 0 0 0 0 -6263 6263 0 0 0 0 -6264 6264 0 0 0 0 -6265 6265 0 0 0 0 -6266 6266 0 0 0 0 -6267 6267 0 0 0 0 -6268 6268 0 0 0 0 -6269 6269 0 0 0 0 -6270 6270 0 0 0 0 -6271 6271 0 0 0 0 -6272 6272 0 0 0 0 -6273 6273 0 0 0 0 -6274 6274 0 0 0 0 -6275 6275 0 0 0 0 -6276 6276 0 0 0 0 -6277 6277 0 0 0 0 -6278 6278 0 0 0 0 -6279 6279 0 0 0 0 -6280 6280 0 0 0 0 -6281 6281 0 0 0 0 -6282 6282 0 0 0 0 -6283 6283 0 0 0 0 -6284 6284 0 0 0 0 -6285 6285 0 0 0 0 -6286 6286 0 0 0 0 -6287 6287 0 0 0 0 -6288 6288 0 0 0 0 -6289 6289 0 0 0 0 -6290 6290 0 0 0 0 -6291 6291 0 0 0 0 -6292 6292 0 0 0 0 -6293 6293 0 0 0 0 -6294 6294 0 0 0 0 -6295 6295 0 0 0 0 -6296 6296 0 0 0 0 -6297 6297 0 0 0 0 -6298 6298 0 0 0 0 -6299 6299 0 0 0 0 -6300 6300 0 0 0 0 -6301 6301 0 0 0 0 -6302 6302 0 0 0 0 -6303 6303 0 0 0 0 -6304 6304 0 0 0 0 -6305 6305 0 0 0 0 -6306 6306 0 0 0 0 -6307 6307 0 0 0 0 -6308 6308 0 0 0 0 -6309 6309 0 0 0 0 -6310 6310 0 0 0 0 -6311 6311 0 0 0 0 -6312 6312 0 0 0 0 -6313 6313 0 0 0 0 -6314 6314 0 0 0 0 -6315 6315 0 0 0 0 -6316 6316 0 0 0 0 -6317 6317 0 0 0 0 -6318 6318 0 0 0 0 -6319 6319 0 0 0 0 -6320 6320 0 0 0 0 -6321 6321 0 0 0 0 -6322 6322 0 0 0 0 -6323 6323 0 0 0 0 -6324 6324 0 0 0 0 -6325 6325 0 0 0 0 -6326 6326 0 0 0 0 -6327 6327 0 0 0 0 -6328 6328 0 0 0 0 -6329 6329 0 0 0 0 -6330 6330 0 0 0 0 -6331 6331 0 0 0 0 -6332 6332 0 0 0 0 -6333 6333 0 0 0 0 -6334 6334 0 0 0 0 -6335 6335 0 0 0 0 -6336 6336 0 0 0 0 -6337 6337 0 0 0 0 -6338 6338 0 0 0 0 -6339 6339 0 0 0 0 -6340 6340 0 0 0 0 -6341 6341 0 0 0 0 -6342 6342 0 0 0 0 -6343 6343 0 0 0 0 -6344 6344 0 0 0 0 -6345 6345 0 0 0 0 -6346 6346 0 0 0 0 -6347 6347 0 0 0 0 -6348 6348 0 0 0 0 -6349 6349 0 0 0 0 -6350 6350 0 0 0 0 -6351 6351 0 0 0 0 -6352 6352 0 0 0 0 -6353 6353 0 0 0 0 -6354 6354 0 0 0 0 -6355 6355 0 0 0 0 -6356 6356 0 0 0 0 -6357 6357 0 0 0 0 -6358 6358 0 0 0 0 -6359 6359 0 0 0 0 -6360 6360 0 0 0 0 -6361 6361 0 0 0 0 -6362 6362 0 0 0 0 -6363 6363 0 0 0 0 -6364 6364 0 0 0 0 -6365 6365 0 0 0 0 -6366 6366 0 0 0 0 -6367 6367 0 0 0 0 -6368 6368 0 0 0 0 -6369 6369 0 0 0 0 -6370 6370 0 0 0 0 -6371 6371 0 0 0 0 -6372 6372 0 0 0 0 -6373 6373 0 0 0 0 -6374 6374 0 0 0 0 -6375 6375 0 0 0 0 -6376 6376 0 0 0 0 -6377 6377 0 0 0 0 -6378 6378 0 0 0 0 -6379 6379 0 0 0 0 -6380 6380 0 0 0 0 -6381 6381 0 0 0 0 -6382 6382 0 0 0 0 -6383 6383 0 0 0 0 -6384 6384 0 0 0 0 -6385 6385 0 0 0 0 -6386 6386 0 0 0 0 -6387 6387 0 0 0 0 -6388 6388 0 0 0 0 -6389 6389 0 0 0 0 -6390 6390 0 0 0 0 -6391 6391 0 0 0 0 -6392 6392 0 0 0 0 -6393 6393 0 0 0 0 -6394 6394 0 0 0 0 -6395 6395 0 0 0 0 -6396 6396 0 0 0 0 -6397 6397 0 0 0 0 -6398 6398 0 0 0 0 -6399 6399 0 0 0 0 -6400 6400 0 0 0 0 -6401 6401 0 0 0 0 -6402 6402 0 0 0 0 -6403 6403 0 0 0 0 -6404 6404 0 0 0 0 -6405 6405 0 0 0 0 -6406 6406 0 0 0 0 -6407 6407 0 0 0 0 -6408 6408 0 0 0 0 -6409 6409 0 0 0 0 -6410 6410 0 0 0 0 -6411 6411 0 0 0 0 -6412 6412 0 0 0 0 -6413 6413 0 0 0 0 -6414 6414 0 0 0 0 -6415 6415 0 0 0 0 -6416 6416 0 0 0 0 -6417 6417 0 0 0 0 -6418 6418 0 0 0 0 -6419 6419 0 0 0 0 -6420 6420 0 0 0 0 -6421 6421 0 0 0 0 -6422 6422 0 0 0 0 -6423 6423 0 0 0 0 -6424 6424 0 0 0 0 -6425 6425 0 0 0 0 -6426 6426 0 0 0 0 -6427 6427 0 0 0 0 -6428 6428 0 0 0 0 -6429 6429 0 0 0 0 -6430 6430 0 0 0 0 -6431 6431 0 0 0 0 -6432 6432 0 0 0 0 -6433 6433 0 0 0 0 -6434 6434 0 0 0 0 -6435 6435 0 0 0 0 -6436 6436 0 0 0 0 -6437 6437 0 0 0 0 -6438 6438 0 0 0 0 -6439 6439 0 0 0 0 -6440 6440 0 0 0 0 -6441 6441 0 0 0 0 -6442 6442 0 0 0 0 -6443 6443 0 0 0 0 -6444 6444 0 0 0 0 -6445 6445 0 0 0 0 -6446 6446 0 0 0 0 -6447 6447 0 0 0 0 -6448 6448 0 0 0 0 -6449 6449 0 0 0 0 -6450 6450 0 0 0 0 -6451 6451 0 0 0 0 -6452 6452 0 0 0 0 -6453 6453 0 0 0 0 -6454 6454 0 0 0 0 -6455 6455 0 0 0 0 -6456 6456 0 0 0 0 -6457 6457 0 0 0 0 -6458 6458 0 0 0 0 -6459 6459 0 0 0 0 -6460 6460 0 0 0 0 -6461 6461 0 0 0 0 -6462 6462 0 0 0 0 -6463 6463 0 0 0 0 -6464 6464 0 0 0 0 -6465 6465 0 0 0 0 -6466 6466 0 0 0 0 -6467 6467 0 0 0 0 -6468 6468 0 0 0 0 -6469 6469 0 0 0 0 -6470 6470 0 0 0 0 -6471 6471 0 0 0 0 -6472 6472 0 0 0 0 -6473 6473 0 0 0 0 -6474 6474 0 0 0 0 -6475 6475 0 0 0 0 -6476 6476 0 0 0 0 -6477 6477 0 0 0 0 -6478 6478 0 0 0 0 -6479 6479 0 0 0 0 -6480 6480 0 0 0 0 -6481 6481 0 0 0 0 -6482 6482 0 0 0 0 -6483 6483 0 0 0 0 -6484 6484 0 0 0 0 -6485 6485 0 0 0 0 -6486 6486 0 0 0 0 -6487 6487 0 0 0 0 -6488 6488 0 0 0 0 -6489 6489 0 0 0 0 -6490 6490 0 0 0 0 -6491 6491 0 0 0 0 -6492 6492 0 0 0 0 -6493 6493 0 0 0 0 -6494 6494 0 0 0 0 -6495 6495 0 0 0 0 -6496 6496 0 0 0 0 -6497 6497 0 0 0 0 -6498 6498 0 0 0 0 -6499 6499 0 0 0 0 -6500 6500 0 0 0 0 -6501 6501 0 0 0 0 -6502 6502 0 0 0 0 -6503 6503 0 0 0 0 -6504 6504 0 0 0 0 -6505 6505 0 0 0 0 -6506 6506 0 0 0 0 -6507 6507 0 0 0 0 -6508 6508 0 0 0 0 -6509 6509 0 0 0 0 -6510 6510 0 0 0 0 -6511 6511 0 0 0 0 -6512 6512 0 0 0 0 -6513 6513 0 0 0 0 -6514 6514 0 0 0 0 -6515 6515 0 0 0 0 -6516 6516 0 0 0 0 -6517 6517 0 0 0 0 -6518 6518 0 0 0 0 -6519 6519 0 0 0 0 -6520 6520 0 0 0 0 -6521 6521 0 0 0 0 -6522 6522 0 0 0 0 -6523 6523 0 0 0 0 -6524 6524 0 0 0 0 -6525 6525 0 0 0 0 -6526 6526 0 0 0 0 -6527 6527 0 0 0 0 -6528 6528 0 0 0 0 -6529 6529 0 0 0 0 -6530 6530 0 0 0 0 -6531 6531 0 0 0 0 -6532 6532 0 0 0 0 -6533 6533 0 0 0 0 -6534 6534 0 0 0 0 -6535 6535 0 0 0 0 -6536 6536 0 0 0 0 -6537 6537 0 0 0 0 -6538 6538 0 0 0 0 -6539 6539 0 0 0 0 -6540 6540 0 0 0 0 -6541 6541 0 0 0 0 -6542 6542 0 0 0 0 -6543 6543 0 0 0 0 -6544 6544 0 0 0 0 -6545 6545 0 0 0 0 -6546 6546 0 0 0 0 -6547 6547 0 0 0 0 -6548 6548 0 0 0 0 -6549 6549 0 0 0 0 -6550 6550 0 0 0 0 -6551 6551 0 0 0 0 -6552 6552 0 0 0 0 -6553 6553 0 0 0 0 -6554 6554 0 0 0 0 -6555 6555 0 0 0 0 -6556 6556 0 0 0 0 -6557 6557 0 0 0 0 -6558 6558 0 0 0 0 -6559 6559 0 0 0 0 -6560 6560 0 0 0 0 -6561 6561 0 0 0 0 -6562 6562 0 0 0 0 -6563 6563 0 0 0 0 -6564 6564 0 0 0 0 -6565 6565 0 0 0 0 -6566 6566 0 0 0 0 -6567 6567 0 0 0 0 -6568 6568 0 0 0 0 -6569 6569 0 0 0 0 -6570 6570 0 0 0 0 -6571 6571 0 0 0 0 -6572 6572 0 0 0 0 -6573 6573 0 0 0 0 -6574 6574 0 0 0 0 -6575 6575 0 0 0 0 -6576 6576 0 0 0 0 -6577 6577 0 0 0 0 -6578 6578 0 0 0 0 -6579 6579 0 0 0 0 -6580 6580 0 0 0 0 -6581 6581 0 0 0 0 -6582 6582 0 0 0 0 -6583 6583 0 0 0 0 -6584 6584 0 0 0 0 -6585 6585 0 0 0 0 -6586 6586 0 0 0 0 -6587 6587 0 0 0 0 -6588 6588 0 0 0 0 -6589 6589 0 0 0 0 -6590 6590 0 0 0 0 -6591 6591 0 0 0 0 -6592 6592 0 0 0 0 -6593 6593 0 0 0 0 -6594 6594 0 0 0 0 -6595 6595 0 0 0 0 -6596 6596 0 0 0 0 -6597 6597 0 0 0 0 -6598 6598 0 0 0 0 -6599 6599 0 0 0 0 -6600 6600 0 0 0 0 -6601 6601 0 0 0 0 -6602 6602 0 0 0 0 -6603 6603 0 0 0 0 -6604 6604 0 0 0 0 -6605 6605 0 0 0 0 -6606 6606 0 0 0 0 -6607 6607 0 0 0 0 -6608 6608 0 0 0 0 -6609 6609 0 0 0 0 -6610 6610 0 0 0 0 -6611 6611 0 0 0 0 -6612 6612 0 0 0 0 -6613 6613 0 0 0 0 -6614 6614 0 0 0 0 -6615 6615 0 0 0 0 -6616 6616 0 0 0 0 -6617 6617 0 0 0 0 -6618 6618 0 0 0 0 -6619 6619 0 0 0 0 -6620 6620 0 0 0 0 -6621 6621 0 0 0 0 -6622 6622 0 0 0 0 -6623 6623 0 0 0 0 -6624 6624 0 0 0 0 -6625 6625 0 0 0 0 -6626 6626 0 0 0 0 -6627 6627 0 0 0 0 -6628 6628 0 0 0 0 -6629 6629 0 0 0 0 -6630 6630 0 0 0 0 -6631 6631 0 0 0 0 -6632 6632 0 0 0 0 -6633 6633 0 0 0 0 -6634 6634 0 0 0 0 -6635 6635 0 0 0 0 -6636 6636 0 0 0 0 -6637 6637 0 0 0 0 -6638 6638 0 0 0 0 -6639 6639 0 0 0 0 -6640 6640 0 0 0 0 -6641 6641 0 0 0 0 -6642 6642 0 0 0 0 -6643 6643 0 0 0 0 -6644 6644 0 0 0 0 -6645 6645 0 0 0 0 -6646 6646 0 0 0 0 -6647 6647 0 0 0 0 -6648 6648 0 0 0 0 -6649 6649 0 0 0 0 -6650 6650 0 0 0 0 -6651 6651 0 0 0 0 -6652 6652 0 0 0 0 -6653 6653 0 0 0 0 -6654 6654 0 0 0 0 -6655 6655 0 0 0 0 -6656 6656 0 0 0 0 -6657 6657 0 0 0 0 -6658 6658 0 0 0 0 -6659 6659 0 0 0 0 -6660 6660 0 0 0 0 -6661 6661 0 0 0 0 -6662 6662 0 0 0 0 -6663 6663 0 0 0 0 -6664 6664 0 0 0 0 -6665 6665 0 0 0 0 -6666 6666 0 0 0 0 -6667 6667 0 0 0 0 -6668 6668 0 0 0 0 -6669 6669 0 0 0 0 -6670 6670 0 0 0 0 -6671 6671 0 0 0 0 -6672 6672 0 0 0 0 -6673 6673 0 0 0 0 -6674 6674 0 0 0 0 -6675 6675 0 0 0 0 -6676 6676 0 0 0 0 -6677 6677 0 0 0 0 -6678 6678 0 0 0 0 -6679 6679 0 0 0 0 -6680 6680 0 0 0 0 -6681 6681 0 0 0 0 -6682 6682 0 0 0 0 -6683 6683 0 0 0 0 -6684 6684 0 0 0 0 -6685 6685 0 0 0 0 -6686 6686 0 0 0 0 -6687 6687 0 0 0 0 -6688 6688 0 0 0 0 -6689 6689 0 0 0 0 -6690 6690 0 0 0 0 -6691 6691 0 0 0 0 -6692 6692 0 0 0 0 -6693 6693 0 0 0 0 -6694 6694 0 0 0 0 -6695 6695 0 0 0 0 -6696 6696 0 0 0 0 -6697 6697 0 0 0 0 -6698 6698 0 0 0 0 -6699 6699 0 0 0 0 -6700 6700 0 0 0 0 -6701 6701 0 0 0 0 -6702 6702 0 0 0 0 -6703 6703 0 0 0 0 -6704 6704 0 0 0 0 -6705 6705 0 0 0 0 -6706 6706 0 0 0 0 -6707 6707 0 0 0 0 -6708 6708 0 0 0 0 -6709 6709 0 0 0 0 -6710 6710 0 0 0 0 -6711 6711 0 0 0 0 -6712 6712 0 0 0 0 -6713 6713 0 0 0 0 -6714 6714 0 0 0 0 -6715 6715 0 0 0 0 -6716 6716 0 0 0 0 -6717 6717 0 0 0 0 -6718 6718 0 0 0 0 -6719 6719 0 0 0 0 -6720 6720 0 0 0 0 -6721 6721 0 0 0 0 -6722 6722 0 0 0 0 -6723 6723 0 0 0 0 -6724 6724 0 0 0 0 -6725 6725 0 0 0 0 -6726 6726 0 0 0 0 -6727 6727 0 0 0 0 -6728 6728 0 0 0 0 -6729 6729 0 0 0 0 -6730 6730 0 0 0 0 -6731 6731 0 0 0 0 -6732 6732 0 0 0 0 -6733 6733 0 0 0 0 -6734 6734 0 0 0 0 -6735 6735 0 0 0 0 -6736 6736 0 0 0 0 -6737 6737 0 0 0 0 -6738 6738 0 0 0 0 -6739 6739 0 0 0 0 -6740 6740 0 0 0 0 -6741 6741 0 0 0 0 -6742 6742 0 0 0 0 -6743 6743 0 0 0 0 -6744 6744 0 0 0 0 -6745 6745 0 0 0 0 -6746 6746 0 0 0 0 -6747 6747 0 0 0 0 -6748 6748 0 0 0 0 -6749 6749 0 0 0 0 -6750 6750 0 0 0 0 -6751 6751 0 0 0 0 -6752 6752 0 0 0 0 -6753 6753 0 0 0 0 -6754 6754 0 0 0 0 -6755 6755 0 0 0 0 -6756 6756 0 0 0 0 -6757 6757 0 0 0 0 -6758 6758 0 0 0 0 -6759 6759 0 0 0 0 -6760 6760 0 0 0 0 -6761 6761 0 0 0 0 -6762 6762 0 0 0 0 -6763 6763 0 0 0 0 -6764 6764 0 0 0 0 -6765 6765 0 0 0 0 -6766 6766 0 0 0 0 -6767 6767 0 0 0 0 -6768 6768 0 0 0 0 -6769 6769 0 0 0 0 -6770 6770 0 0 0 0 -6771 6771 0 0 0 0 -6772 6772 0 0 0 0 -6773 6773 0 0 0 0 -6774 6774 0 0 0 0 -6775 6775 0 0 0 0 -6776 6776 0 0 0 0 -6777 6777 0 0 0 0 -6778 6778 0 0 0 0 -6779 6779 0 0 0 0 -6780 6780 0 0 0 0 -6781 6781 0 0 0 0 -6782 6782 0 0 0 0 -6783 6783 0 0 0 0 -6784 6784 0 0 0 0 -6785 6785 0 0 0 0 -6786 6786 0 0 0 0 -6787 6787 0 0 0 0 -6788 6788 0 0 0 0 -6789 6789 0 0 0 0 -6790 6790 0 0 0 0 -6791 6791 0 0 0 0 -6792 6792 0 0 0 0 -6793 6793 0 0 0 0 -6794 6794 0 0 0 0 -6795 6795 0 0 0 0 -6796 6796 0 0 0 0 -6797 6797 0 0 0 0 -6798 6798 0 0 0 0 -6799 6799 0 0 0 0 -6800 6800 0 0 0 0 -6801 6801 0 0 0 0 -6802 6802 0 0 0 0 -6803 6803 0 0 0 0 -6804 6804 0 0 0 0 -6805 6805 0 0 0 0 -6806 6806 0 0 0 0 -6807 6807 0 0 0 0 -6808 6808 0 0 0 0 -6809 6809 0 0 0 0 -6810 6810 0 0 0 0 -6811 6811 0 0 0 0 -6812 6812 0 0 0 0 -6813 6813 0 0 0 0 -6814 6814 0 0 0 0 -6815 6815 0 0 0 0 -6816 6816 0 0 0 0 -6817 6817 0 0 0 0 -6818 6818 0 0 0 0 -6819 6819 0 0 0 0 -6820 6820 0 0 0 0 -6821 6821 0 0 0 0 -6822 6822 0 0 0 0 -6823 6823 0 0 0 0 -6824 6824 0 0 0 0 -6825 6825 0 0 0 0 -6826 6826 0 0 0 0 -6827 6827 0 0 0 0 -6828 6828 0 0 0 0 -6829 6829 0 0 0 0 -6830 6830 0 0 0 0 -6831 6831 0 0 0 0 -6832 6832 0 0 0 0 -6833 6833 0 0 0 0 -6834 6834 0 0 0 0 -6835 6835 0 0 0 0 -6836 6836 0 0 0 0 -6837 6837 0 0 0 0 -6838 6838 0 0 0 0 -6839 6839 0 0 0 0 -6840 6840 0 0 0 0 -6841 6841 0 0 0 0 -6842 6842 0 0 0 0 -6843 6843 0 0 0 0 -6844 6844 0 0 0 0 -6845 6845 0 0 0 0 -6846 6846 0 0 0 0 -6847 6847 0 0 0 0 -6848 6848 0 0 0 0 -6849 6849 0 0 0 0 -6850 6850 0 0 0 0 -6851 6851 0 0 0 0 -6852 6852 0 0 0 0 -6853 6853 0 0 0 0 -6854 6854 0 0 0 0 -6855 6855 0 0 0 0 -6856 6856 0 0 0 0 -6857 6857 0 0 0 0 -6858 6858 0 0 0 0 -6859 6859 0 0 0 0 -6860 6860 0 0 0 0 -6861 6861 0 0 0 0 -6862 6862 0 0 0 0 -6863 6863 0 0 0 0 -6864 6864 0 0 0 0 -6865 6865 0 0 0 0 -6866 6866 0 0 0 0 -6867 6867 0 0 0 0 -6868 6868 0 0 0 0 -6869 6869 0 0 0 0 -6870 6870 0 0 0 0 -6871 6871 0 0 0 0 -6872 6872 0 0 0 0 -6873 6873 0 0 0 0 -6874 6874 0 0 0 0 -6875 6875 0 0 0 0 -6876 6876 0 0 0 0 -6877 6877 0 0 0 0 -6878 6878 0 0 0 0 -6879 6879 0 0 0 0 -6880 6880 0 0 0 0 -6881 6881 0 0 0 0 -6882 6882 0 0 0 0 -6883 6883 0 0 0 0 -6884 6884 0 0 0 0 -6885 6885 0 0 0 0 -6886 6886 0 0 0 0 -6887 6887 0 0 0 0 -6888 6888 0 0 0 0 -6889 6889 0 0 0 0 -6890 6890 0 0 0 0 -6891 6891 0 0 0 0 -6892 6892 0 0 0 0 -6893 6893 0 0 0 0 -6894 6894 0 0 0 0 -6895 6895 0 0 0 0 -6896 6896 0 0 0 0 -6897 6897 0 0 0 0 -6898 6898 0 0 0 0 -6899 6899 0 0 0 0 -6900 6900 0 0 0 0 -6901 6901 0 0 0 0 -6902 6902 0 0 0 0 -6903 6903 0 0 0 0 -6904 6904 0 0 0 0 -6905 6905 0 0 0 0 -6906 6906 0 0 0 0 -6907 6907 0 0 0 0 -6908 6908 0 0 0 0 -6909 6909 0 0 0 0 -6910 6910 0 0 0 0 -6911 6911 0 0 0 0 -6912 6912 0 0 0 0 -6913 6913 0 0 0 0 -6914 6914 0 0 0 0 -6915 6915 0 0 0 0 -6916 6916 0 0 0 0 -6917 6917 0 0 0 0 -6918 6918 0 0 0 0 -6919 6919 0 0 0 0 -6920 6920 0 0 0 0 -6921 6921 0 0 0 0 -6922 6922 0 0 0 0 -6923 6923 0 0 0 0 -6924 6924 0 0 0 0 -6925 6925 0 0 0 0 -6926 6926 0 0 0 0 -6927 6927 0 0 0 0 -6928 6928 0 0 0 0 -6929 6929 0 0 0 0 -6930 6930 0 0 0 0 -6931 6931 0 0 0 0 -6932 6932 0 0 0 0 -6933 6933 0 0 0 0 -6934 6934 0 0 0 0 -6935 6935 0 0 0 0 -6936 6936 0 0 0 0 -6937 6937 0 0 0 0 -6938 6938 0 0 0 0 -6939 6939 0 0 0 0 -6940 6940 0 0 0 0 -6941 6941 0 0 0 0 -6942 6942 0 0 0 0 -6943 6943 0 0 0 0 -6944 6944 0 0 0 0 -6945 6945 0 0 0 0 -6946 6946 0 0 0 0 -6947 6947 0 0 0 0 -6948 6948 0 0 0 0 -6949 6949 0 0 0 0 -6950 6950 0 0 0 0 -6951 6951 0 0 0 0 -6952 6952 0 0 0 0 -6953 6953 0 0 0 0 -6954 6954 0 0 0 0 -6955 6955 0 0 0 0 -6956 6956 0 0 0 0 -6957 6957 0 0 0 0 -6958 6958 0 0 0 0 -6959 6959 0 0 0 0 -6960 6960 0 0 0 0 -6961 6961 0 0 0 0 -6962 6962 0 0 0 0 -6963 6963 0 0 0 0 -6964 6964 0 0 0 0 -6965 6965 0 0 0 0 -6966 6966 0 0 0 0 -6967 6967 0 0 0 0 -6968 6968 0 0 0 0 -6969 6969 0 0 0 0 -6970 6970 0 0 0 0 -6971 6971 0 0 0 0 -6972 6972 0 0 0 0 -6973 6973 0 0 0 0 -6974 6974 0 0 0 0 -6975 6975 0 0 0 0 -6976 6976 0 0 0 0 -6977 6977 0 0 0 0 -6978 6978 0 0 0 0 -6979 6979 0 0 0 0 -6980 6980 0 0 0 0 -6981 6981 0 0 0 0 -6982 6982 0 0 0 0 -6983 6983 0 0 0 0 -6984 6984 0 0 0 0 -6985 6985 0 0 0 0 -6986 6986 0 0 0 0 -6987 6987 0 0 0 0 -6988 6988 0 0 0 0 -6989 6989 0 0 0 0 -6990 6990 0 0 0 0 -6991 6991 0 0 0 0 -6992 6992 0 0 0 0 -6993 6993 0 0 0 0 -6994 6994 0 0 0 0 -6995 6995 0 0 0 0 -6996 6996 0 0 0 0 -6997 6997 0 0 0 0 -6998 6998 0 0 0 0 -6999 6999 0 0 0 0 -7000 7000 0 0 0 0 -7001 7001 0 0 0 0 -7002 7002 0 0 0 0 -7003 7003 0 0 0 0 -7004 7004 0 0 0 0 -7005 7005 0 0 0 0 -7006 7006 0 0 0 0 -7007 7007 0 0 0 0 -7008 7008 0 0 0 0 -7009 7009 0 0 0 0 -7010 7010 0 0 0 0 -7011 7011 0 0 0 0 -7012 7012 0 0 0 0 -7013 7013 0 0 0 0 -7014 7014 0 0 0 0 -7015 7015 0 0 0 0 -7016 7016 0 0 0 0 -7017 7017 0 0 0 0 -7018 7018 0 0 0 0 -7019 7019 0 0 0 0 -7020 7020 0 0 0 0 -7021 7021 0 0 0 0 -7022 7022 0 0 0 0 -7023 7023 0 0 0 0 -7024 7024 0 0 0 0 -7025 7025 0 0 0 0 -7026 7026 0 0 0 0 -7027 7027 0 0 0 0 -7028 7028 0 0 0 0 -7029 7029 0 0 0 0 -7030 7030 0 0 0 0 -7031 7031 0 0 0 0 -7032 7032 0 0 0 0 -7033 7033 0 0 0 0 -7034 7034 0 0 0 0 -7035 7035 0 0 0 0 -7036 7036 0 0 0 0 -7037 7037 0 0 0 0 -7038 7038 0 0 0 0 -7039 7039 0 0 0 0 -7040 7040 0 0 0 0 -7041 7041 0 0 0 0 -7042 7042 0 0 0 0 -7043 7043 0 0 0 0 -7044 7044 0 0 0 0 -7045 7045 0 0 0 0 -7046 7046 0 0 0 0 -7047 7047 0 0 0 0 -7048 7048 0 0 0 0 -7049 7049 0 0 0 0 -7050 7050 0 0 0 0 -7051 7051 0 0 0 0 -7052 7052 0 0 0 0 -7053 7053 0 0 0 0 -7054 7054 0 0 0 0 -7055 7055 0 0 0 0 -7056 7056 0 0 0 0 -7057 7057 0 0 0 0 -7058 7058 0 0 0 0 -7059 7059 0 0 0 0 -7060 7060 0 0 0 0 -7061 7061 0 0 0 0 -7062 7062 0 0 0 0 -7063 7063 0 0 0 0 -7064 7064 0 0 0 0 -7065 7065 0 0 0 0 -7066 7066 0 0 0 0 -7067 7067 0 0 0 0 -7068 7068 0 0 0 0 -7069 7069 0 0 0 0 -7070 7070 0 0 0 0 -7071 7071 0 0 0 0 -7072 7072 0 0 0 0 -7073 7073 0 0 0 0 -7074 7074 0 0 0 0 -7075 7075 0 0 0 0 -7076 7076 0 0 0 0 -7077 7077 0 0 0 0 -7078 7078 0 0 0 0 -7079 7079 0 0 0 0 -7080 7080 0 0 0 0 -7081 7081 0 0 0 0 -7082 7082 0 0 0 0 -7083 7083 0 0 0 0 -7084 7084 0 0 0 0 -7085 7085 0 0 0 0 -7086 7086 0 0 0 0 -7087 7087 0 0 0 0 -7088 7088 0 0 0 0 -7089 7089 0 0 0 0 -7090 7090 0 0 0 0 -7091 7091 0 0 0 0 -7092 7092 0 0 0 0 -7093 7093 0 0 0 0 -7094 7094 0 0 0 0 -7095 7095 0 0 0 0 -7096 7096 0 0 0 0 -7097 7097 0 0 0 0 -7098 7098 0 0 0 0 -7099 7099 0 0 0 0 -7100 7100 0 0 0 0 -7101 7101 0 0 0 0 -7102 7102 0 0 0 0 -7103 7103 0 0 0 0 -7104 7104 0 0 0 0 -7105 7105 0 0 0 0 -7106 7106 0 0 0 0 -7107 7107 0 0 0 0 -7108 7108 0 0 0 0 -7109 7109 0 0 0 0 -7110 7110 0 0 0 0 -7111 7111 0 0 0 0 -7112 7112 0 0 0 0 -7113 7113 0 0 0 0 -7114 7114 0 0 0 0 -7115 7115 0 0 0 0 -7116 7116 0 0 0 0 -7117 7117 0 0 0 0 -7118 7118 0 0 0 0 -7119 7119 0 0 0 0 -7120 7120 0 0 0 0 -7121 7121 0 0 0 0 -7122 7122 0 0 0 0 -7123 7123 0 0 0 0 -7124 7124 0 0 0 0 -7125 7125 0 0 0 0 -7126 7126 0 0 0 0 -7127 7127 0 0 0 0 -7128 7128 0 0 0 0 -7129 7129 0 0 0 0 -7130 7130 0 0 0 0 -7131 7131 0 0 0 0 -7132 7132 0 0 0 0 -7133 7133 0 0 0 0 -7134 7134 0 0 0 0 -7135 7135 0 0 0 0 -7136 7136 0 0 0 0 -7137 7137 0 0 0 0 -7138 7138 0 0 0 0 -7139 7139 0 0 0 0 -7140 7140 0 0 0 0 -7141 7141 0 0 0 0 -7142 7142 0 0 0 0 -7143 7143 0 0 0 0 -7144 7144 0 0 0 0 -7145 7145 0 0 0 0 -7146 7146 0 0 0 0 -7147 7147 0 0 0 0 -7148 7148 0 0 0 0 -7149 7149 0 0 0 0 -7150 7150 0 0 0 0 -7151 7151 0 0 0 0 -7152 7152 0 0 0 0 -7153 7153 0 0 0 0 -7154 7154 0 0 0 0 -7155 7155 0 0 0 0 -7156 7156 0 0 0 0 -7157 7157 0 0 0 0 -7158 7158 0 0 0 0 -7159 7159 0 0 0 0 -7160 7160 0 0 0 0 -7161 7161 0 0 0 0 -7162 7162 0 0 0 0 -7163 7163 0 0 0 0 -7164 7164 0 0 0 0 -7165 7165 0 0 0 0 -7166 7166 0 0 0 0 -7167 7167 0 0 0 0 -7168 7168 0 0 0 0 -7169 7169 0 0 0 0 -7170 7170 0 0 0 0 -7171 7171 0 0 0 0 -7172 7172 0 0 0 0 -7173 7173 0 0 0 0 -7174 7174 0 0 0 0 -7175 7175 0 0 0 0 -7176 7176 0 0 0 0 -7177 7177 0 0 0 0 -7178 7178 0 0 0 0 -7179 7179 0 0 0 0 -7180 7180 0 0 0 0 -7181 7181 0 0 0 0 -7182 7182 0 0 0 0 -7183 7183 0 0 0 0 -7184 7184 0 0 0 0 -7185 7185 0 0 0 0 -7186 7186 0 0 0 0 -7187 7187 0 0 0 0 -7188 7188 0 0 0 0 -7189 7189 0 0 0 0 -7190 7190 0 0 0 0 -7191 7191 0 0 0 0 -7192 7192 0 0 0 0 -7193 7193 0 0 0 0 -7194 7194 0 0 0 0 -7195 7195 0 0 0 0 -7196 7196 0 0 0 0 -7197 7197 0 0 0 0 -7198 7198 0 0 0 0 -7199 7199 0 0 0 0 -7200 7200 0 0 0 0 -7201 7201 0 0 0 0 -7202 7202 0 0 0 0 -7203 7203 0 0 0 0 -7204 7204 0 0 0 0 -7205 7205 0 0 0 0 -7206 7206 0 0 0 0 -7207 7207 0 0 0 0 -7208 7208 0 0 0 0 -7209 7209 0 0 0 0 -7210 7210 0 0 0 0 -7211 7211 0 0 0 0 -7212 7212 0 0 0 0 -7213 7213 0 0 0 0 -7214 7214 0 0 0 0 -7215 7215 0 0 0 0 -7216 7216 0 0 0 0 -7217 7217 0 0 0 0 -7218 7218 0 0 0 0 -7219 7219 0 0 0 0 -7220 7220 0 0 0 0 -7221 7221 0 0 0 0 -7222 7222 0 0 0 0 -7223 7223 0 0 0 0 -7224 7224 0 0 0 0 -7225 7225 0 0 0 0 -7226 7226 0 0 0 0 -7227 7227 0 0 0 0 -7228 7228 0 0 0 0 -7229 7229 0 0 0 0 -7230 7230 0 0 0 0 -7231 7231 0 0 0 0 -7232 7232 0 0 0 0 -7233 7233 0 0 0 0 -7234 7234 0 0 0 0 -7235 7235 0 0 0 0 -7236 7236 0 0 0 0 -7237 7237 0 0 0 0 -7238 7238 0 0 0 0 -7239 7239 0 0 0 0 -7240 7240 0 0 0 0 -7241 7241 0 0 0 0 -7242 7242 0 0 0 0 -7243 7243 0 0 0 0 -7244 7244 0 0 0 0 -7245 7245 0 0 0 0 -7246 7246 0 0 0 0 -7247 7247 0 0 0 0 -7248 7248 0 0 0 0 -7249 7249 0 0 0 0 -7250 7250 0 0 0 0 -7251 7251 0 0 0 0 -7252 7252 0 0 0 0 -7253 7253 0 0 0 0 -7254 7254 0 0 0 0 -7255 7255 0 0 0 0 -7256 7256 0 0 0 0 -7257 7257 0 0 0 0 -7258 7258 0 0 0 0 -7259 7259 0 0 0 0 -7260 7260 0 0 0 0 -7261 7261 0 0 0 0 -7262 7262 0 0 0 0 -7263 7263 0 0 0 0 -7264 7264 0 0 0 0 -7265 7265 0 0 0 0 -7266 7266 0 0 0 0 -7267 7267 0 0 0 0 -7268 7268 0 0 0 0 -7269 7269 0 0 0 0 -7270 7270 0 0 0 0 -7271 7271 0 0 0 0 -7272 7272 0 0 0 0 -7273 7273 0 0 0 0 -7274 7274 0 0 0 0 -7275 7275 0 0 0 0 -7276 7276 0 0 0 0 -7277 7277 0 0 0 0 -7278 7278 0 0 0 0 -7279 7279 0 0 0 0 -7280 7280 0 0 0 0 -7281 7281 0 0 0 0 -7282 7282 0 0 0 0 -7283 7283 0 0 0 0 -7284 7284 0 0 0 0 -7285 7285 0 0 0 0 -7286 7286 0 0 0 0 -7287 7287 0 0 0 0 -7288 7288 0 0 0 0 -7289 7289 0 0 0 0 -7290 7290 0 0 0 0 -7291 7291 0 0 0 0 -7292 7292 0 0 0 0 -7293 7293 0 0 0 0 -7294 7294 0 0 0 0 -7295 7295 0 0 0 0 -7296 7296 0 0 0 0 -7297 7297 0 0 0 0 -7298 7298 0 0 0 0 -7299 7299 0 0 0 0 -7300 7300 0 0 0 0 -7301 7301 0 0 0 0 -7302 7302 0 0 0 0 -7303 7303 0 0 0 0 -7304 7304 0 0 0 0 -7305 7305 0 0 0 0 -7306 7306 0 0 0 0 -7307 7307 0 0 0 0 -7308 7308 0 0 0 0 -7309 7309 0 0 0 0 -7310 7310 0 0 0 0 -7311 7311 0 0 0 0 -7312 7312 0 0 0 0 -7313 7313 0 0 0 0 -7314 7314 0 0 0 0 -7315 7315 0 0 0 0 -7316 7316 0 0 0 0 -7317 7317 0 0 0 0 -7318 7318 0 0 0 0 -7319 7319 0 0 0 0 -7320 7320 0 0 0 0 -7321 7321 0 0 0 0 -7322 7322 0 0 0 0 -7323 7323 0 0 0 0 -7324 7324 0 0 0 0 -7325 7325 0 0 0 0 -7326 7326 0 0 0 0 -7327 7327 0 0 0 0 -7328 7328 0 0 0 0 -7329 7329 0 0 0 0 -7330 7330 0 0 0 0 -7331 7331 0 0 0 0 -7332 7332 0 0 0 0 -7333 7333 0 0 0 0 -7334 7334 0 0 0 0 -7335 7335 0 0 0 0 -7336 7336 0 0 0 0 -7337 7337 0 0 0 0 -7338 7338 0 0 0 0 -7339 7339 0 0 0 0 -7340 7340 0 0 0 0 -7341 7341 0 0 0 0 -7342 7342 0 0 0 0 -7343 7343 0 0 0 0 -7344 7344 0 0 0 0 -7345 7345 0 0 0 0 -7346 7346 0 0 0 0 -7347 7347 0 0 0 0 -7348 7348 0 0 0 0 -7349 7349 0 0 0 0 -7350 7350 0 0 0 0 -7351 7351 0 0 0 0 -7352 7352 0 0 0 0 -7353 7353 0 0 0 0 -7354 7354 0 0 0 0 -7355 7355 0 0 0 0 -7356 7356 0 0 0 0 -7357 7357 0 0 0 0 -7358 7358 0 0 0 0 -7359 7359 0 0 0 0 -7360 7360 0 0 0 0 -7361 7361 0 0 0 0 -7362 7362 0 0 0 0 -7363 7363 0 0 0 0 -7364 7364 0 0 0 0 -7365 7365 0 0 0 0 -7366 7366 0 0 0 0 -7367 7367 0 0 0 0 -7368 7368 0 0 0 0 -7369 7369 0 0 0 0 -7370 7370 0 0 0 0 -7371 7371 0 0 0 0 -7372 7372 0 0 0 0 -7373 7373 0 0 0 0 -7374 7374 0 0 0 0 -7375 7375 0 0 0 0 -7376 7376 0 0 0 0 -7377 7377 0 0 0 0 -7378 7378 0 0 0 0 -7379 7379 0 0 0 0 -7380 7380 0 0 0 0 -7381 7381 0 0 0 0 -7382 7382 0 0 0 0 -7383 7383 0 0 0 0 -7384 7384 0 0 0 0 -7385 7385 0 0 0 0 -7386 7386 0 0 0 0 -7387 7387 0 0 0 0 -7388 7388 0 0 0 0 -7389 7389 0 0 0 0 -7390 7390 0 0 0 0 -7391 7391 0 0 0 0 -7392 7392 0 0 0 0 -7393 7393 0 0 0 0 -7394 7394 0 0 0 0 -7395 7395 0 0 0 0 -7396 7396 0 0 0 0 -7397 7397 0 0 0 0 -7398 7398 0 0 0 0 -7399 7399 0 0 0 0 -7400 7400 0 0 0 0 -7401 7401 0 0 0 0 -7402 7402 0 0 0 0 -7403 7403 0 0 0 0 -7404 7404 0 0 0 0 -7405 7405 0 0 0 0 -7406 7406 0 0 0 0 -7407 7407 0 0 0 0 -7408 7408 0 0 0 0 -7409 7409 0 0 0 0 -7410 7410 0 0 0 0 -7411 7411 0 0 0 0 -7412 7412 0 0 0 0 -7413 7413 0 0 0 0 -7414 7414 0 0 0 0 -7415 7415 0 0 0 0 -7416 7416 0 0 0 0 -7417 7417 0 0 0 0 -7418 7418 0 0 0 0 -7419 7419 0 0 0 0 -7420 7420 0 0 0 0 -7421 7421 0 0 0 0 -7422 7422 0 0 0 0 -7423 7423 0 0 0 0 -7424 7424 0 0 0 0 -7425 7425 0 0 0 0 -7426 7426 0 0 0 0 -7427 7427 0 0 0 0 -7428 7428 0 0 0 0 -7429 7429 0 0 0 0 -7430 7430 0 0 0 0 -7431 7431 0 0 0 0 -7432 7432 0 0 0 0 -7433 7433 0 0 0 0 -7434 7434 0 0 0 0 -7435 7435 0 0 0 0 -7436 7436 0 0 0 0 -7437 7437 0 0 0 0 -7438 7438 0 0 0 0 -7439 7439 0 0 0 0 -7440 7440 0 0 0 0 -7441 7441 0 0 0 0 -7442 7442 0 0 0 0 -7443 7443 0 0 0 0 -7444 7444 0 0 0 0 -7445 7445 0 0 0 0 -7446 7446 0 0 0 0 -7447 7447 0 0 0 0 -7448 7448 0 0 0 0 -7449 7449 0 0 0 0 -7450 7450 0 0 0 0 -7451 7451 0 0 0 0 -7452 7452 0 0 0 0 -7453 7453 0 0 0 0 -7454 7454 0 0 0 0 -7455 7455 0 0 0 0 -7456 7456 0 0 0 0 -7457 7457 0 0 0 0 -7458 7458 0 0 0 0 -7459 7459 0 0 0 0 -7460 7460 0 0 0 0 -7461 7461 0 0 0 0 -7462 7462 0 0 0 0 -7463 7463 0 0 0 0 -7464 7464 0 0 0 0 -7465 7465 0 0 0 0 -7466 7466 0 0 0 0 -7467 7467 0 0 0 0 -7468 7468 0 0 0 0 -7469 7469 0 0 0 0 -7470 7470 0 0 0 0 -7471 7471 0 0 0 0 -7472 7472 0 0 0 0 -7473 7473 0 0 0 0 -7474 7474 0 0 0 0 -7475 7475 0 0 0 0 -7476 7476 0 0 0 0 -7477 7477 0 0 0 0 -7478 7478 0 0 0 0 -7479 7479 0 0 0 0 -7480 7480 0 0 0 0 -7481 7481 0 0 0 0 -7482 7482 0 0 0 0 -7483 7483 0 0 0 0 -7484 7484 0 0 0 0 -7485 7485 0 0 0 0 -7486 7486 0 0 0 0 -7487 7487 0 0 0 0 -7488 7488 0 0 0 0 -7489 7489 0 0 0 0 -7490 7490 0 0 0 0 -7491 7491 0 0 0 0 -7492 7492 0 0 0 0 -7493 7493 0 0 0 0 -7494 7494 0 0 0 0 -7495 7495 0 0 0 0 -7496 7496 0 0 0 0 -7497 7497 0 0 0 0 -7498 7498 0 0 0 0 -7499 7499 0 0 0 0 -7500 7500 0 0 0 0 -7501 7501 0 0 0 0 -7502 7502 0 0 0 0 -7503 7503 0 0 0 0 -7504 7504 0 0 0 0 -7505 7505 0 0 0 0 -7506 7506 0 0 0 0 -7507 7507 0 0 0 0 -7508 7508 0 0 0 0 -7509 7509 0 0 0 0 -7510 7510 0 0 0 0 -7511 7511 0 0 0 0 -7512 7512 0 0 0 0 -7513 7513 0 0 0 0 -7514 7514 0 0 0 0 -7515 7515 0 0 0 0 -7516 7516 0 0 0 0 -7517 7517 0 0 0 0 -7518 7518 0 0 0 0 -7519 7519 0 0 0 0 -7520 7520 0 0 0 0 -7521 7521 0 0 0 0 -7522 7522 0 0 0 0 -7523 7523 0 0 0 0 -7524 7524 0 0 0 0 -7525 7525 0 0 0 0 -7526 7526 0 0 0 0 -7527 7527 0 0 0 0 -7528 7528 0 0 0 0 -7529 7529 0 0 0 0 -7530 7530 0 0 0 0 -7531 7531 0 0 0 0 -7532 7532 0 0 0 0 -7533 7533 0 0 0 0 -7534 7534 0 0 0 0 -7535 7535 0 0 0 0 -7536 7536 0 0 0 0 -7537 7537 0 0 0 0 -7538 7538 0 0 0 0 -7539 7539 0 0 0 0 -7540 7540 0 0 0 0 -7541 7541 0 0 0 0 -7542 7542 0 0 0 0 -7543 7543 0 0 0 0 -7544 7544 0 0 0 0 -7545 7545 0 0 0 0 -7546 7546 0 0 0 0 -7547 7547 0 0 0 0 -7548 7548 0 0 0 0 -7549 7549 0 0 0 0 -7550 7550 0 0 0 0 -7551 7551 0 0 0 0 -7552 7552 0 0 0 0 -7553 7553 0 0 0 0 -7554 7554 0 0 0 0 -7555 7555 0 0 0 0 -7556 7556 0 0 0 0 -7557 7557 0 0 0 0 -7558 7558 0 0 0 0 -7559 7559 0 0 0 0 -7560 7560 0 0 0 0 -7561 7561 0 0 0 0 -7562 7562 0 0 0 0 -7563 7563 0 0 0 0 -7564 7564 0 0 0 0 -7565 7565 0 0 0 0 -7566 7566 0 0 0 0 -7567 7567 0 0 0 0 -7568 7568 0 0 0 0 -7569 7569 0 0 0 0 -7570 7570 0 0 0 0 -7571 7571 0 0 0 0 -7572 7572 0 0 0 0 -7573 7573 0 0 0 0 -7574 7574 0 0 0 0 -7575 7575 0 0 0 0 -7576 7576 0 0 0 0 -7577 7577 0 0 0 0 -7578 7578 0 0 0 0 -7579 7579 0 0 0 0 -7580 7580 0 0 0 0 -7581 7581 0 0 0 0 -7582 7582 0 0 0 0 -7583 7583 0 0 0 0 -7584 7584 0 0 0 0 -7585 7585 0 0 0 0 -7586 7586 0 0 0 0 -7587 7587 0 0 0 0 -7588 7588 0 0 0 0 -7589 7589 0 0 0 0 -7590 7590 0 0 0 0 -7591 7591 0 0 0 0 -7592 7592 0 0 0 0 -7593 7593 0 0 0 0 -7594 7594 0 0 0 0 -7595 7595 0 0 0 0 -7596 7596 0 0 0 0 -7597 7597 0 0 0 0 -7598 7598 0 0 0 0 -7599 7599 0 0 0 0 -7600 7600 0 0 0 0 -7601 7601 0 0 0 0 -7602 7602 0 0 0 0 -7603 7603 0 0 0 0 -7604 7604 0 0 0 0 -7605 7605 0 0 0 0 -7606 7606 0 0 0 0 -7607 7607 0 0 0 0 -7608 7608 0 0 0 0 -7609 7609 0 0 0 0 -7610 7610 0 0 0 0 -7611 7611 0 0 0 0 -7612 7612 0 0 0 0 -7613 7613 0 0 0 0 -7614 7614 0 0 0 0 -7615 7615 0 0 0 0 -7616 7616 0 0 0 0 -7617 7617 0 0 0 0 -7618 7618 0 0 0 0 -7619 7619 0 0 0 0 -7620 7620 0 0 0 0 -7621 7621 0 0 0 0 -7622 7622 0 0 0 0 -7623 7623 0 0 0 0 -7624 7624 0 0 0 0 -7625 7625 0 0 0 0 -7626 7626 0 0 0 0 -7627 7627 0 0 0 0 -7628 7628 0 0 0 0 -7629 7629 0 0 0 0 -7630 7630 0 0 0 0 -7631 7631 0 0 0 0 -7632 7632 0 0 0 0 -7633 7633 0 0 0 0 -7634 7634 0 0 0 0 -7635 7635 0 0 0 0 -7636 7636 0 0 0 0 -7637 7637 0 0 0 0 -7638 7638 0 0 0 0 -7639 7639 0 0 0 0 -7640 7640 0 0 0 0 -7641 7641 0 0 0 0 -7642 7642 0 0 0 0 -7643 7643 0 0 0 0 -7644 7644 0 0 0 0 -7645 7645 0 0 0 0 -7646 7646 0 0 0 0 -7647 7647 0 0 0 0 -7648 7648 0 0 0 0 -7649 7649 0 0 0 0 -7650 7650 0 0 0 0 -7651 7651 0 0 0 0 -7652 7652 0 0 0 0 -7653 7653 0 0 0 0 -7654 7654 0 0 0 0 -7655 7655 0 0 0 0 -7656 7656 0 0 0 0 -7657 7657 0 0 0 0 -7658 7658 0 0 0 0 -7659 7659 0 0 0 0 -7660 7660 0 0 0 0 -7661 7661 0 0 0 0 -7662 7662 0 0 0 0 -7663 7663 0 0 0 0 -7664 7664 0 0 0 0 -7665 7665 0 0 0 0 -7666 7666 0 0 0 0 -7667 7667 0 0 0 0 -7668 7668 0 0 0 0 -7669 7669 0 0 0 0 -7670 7670 0 0 0 0 -7671 7671 0 0 0 0 -7672 7672 0 0 0 0 -7673 7673 0 0 0 0 -7674 7674 0 0 0 0 -7675 7675 0 0 0 0 -7676 7676 0 0 0 0 -7677 7677 0 0 0 0 -7678 7678 0 0 0 0 -7679 7679 0 0 0 0 -7680 7680 0 0 0 0 -7681 7681 0 0 0 0 -7682 7682 0 0 0 0 -7683 7683 0 0 0 0 -7684 7684 0 0 0 0 -7685 7685 0 0 0 0 -7686 7686 0 0 0 0 -7687 7687 0 0 0 0 -7688 7688 0 0 0 0 -7689 7689 0 0 0 0 -7690 7690 0 0 0 0 -7691 7691 0 0 0 0 -7692 7692 0 0 0 0 -7693 7693 0 0 0 0 -7694 7694 0 0 0 0 -7695 7695 0 0 0 0 -7696 7696 0 0 0 0 -7697 7697 0 0 0 0 -7698 7698 0 0 0 0 -7699 7699 0 0 0 0 -7700 7700 0 0 0 0 -7701 7701 0 0 0 0 -7702 7702 0 0 0 0 -7703 7703 0 0 0 0 -7704 7704 0 0 0 0 -7705 7705 0 0 0 0 -7706 7706 0 0 0 0 -7707 7707 0 0 0 0 -7708 7708 0 0 0 0 -7709 7709 0 0 0 0 -7710 7710 0 0 0 0 -7711 7711 0 0 0 0 -7712 7712 0 0 0 0 -7713 7713 0 0 0 0 -7714 7714 0 0 0 0 -7715 7715 0 0 0 0 -7716 7716 0 0 0 0 -7717 7717 0 0 0 0 -7718 7718 0 0 0 0 -7719 7719 0 0 0 0 -7720 7720 0 0 0 0 -7721 7721 0 0 0 0 -7722 7722 0 0 0 0 -7723 7723 0 0 0 0 -7724 7724 0 0 0 0 -7725 7725 0 0 0 0 -7726 7726 0 0 0 0 -7727 7727 0 0 0 0 -7728 7728 0 0 0 0 -7729 7729 0 0 0 0 -7730 7730 0 0 0 0 -7731 7731 0 0 0 0 -7732 7732 0 0 0 0 -7733 7733 0 0 0 0 -7734 7734 0 0 0 0 -7735 7735 0 0 0 0 -7736 7736 0 0 0 0 -7737 7737 0 0 0 0 -7738 7738 0 0 0 0 -7739 7739 0 0 0 0 -7740 7740 0 0 0 0 -7741 7741 0 0 0 0 -7742 7742 0 0 0 0 -7743 7743 0 0 0 0 -7744 7744 0 0 0 0 -7745 7745 0 0 0 0 -7746 7746 0 0 0 0 -7747 7747 0 0 0 0 -7748 7748 0 0 0 0 -7749 7749 0 0 0 0 -7750 7750 0 0 0 0 -7751 7751 0 0 0 0 -7752 7752 0 0 0 0 -7753 7753 0 0 0 0 -7754 7754 0 0 0 0 -7755 7755 0 0 0 0 -7756 7756 0 0 0 0 -7757 7757 0 0 0 0 -7758 7758 0 0 0 0 -7759 7759 0 0 0 0 -7760 7760 0 0 0 0 -7761 7761 0 0 0 0 -7762 7762 0 0 0 0 -7763 7763 0 0 0 0 -7764 7764 0 0 0 0 -7765 7765 0 0 0 0 -7766 7766 0 0 0 0 -7767 7767 0 0 0 0 -7768 7768 0 0 0 0 -7769 7769 0 0 0 0 -7770 7770 0 0 0 0 -7771 7771 0 0 0 0 -7772 7772 0 0 0 0 -7773 7773 0 0 0 0 -7774 7774 0 0 0 0 -7775 7775 0 0 0 0 -7776 7776 0 0 0 0 -7777 7777 0 0 0 0 -7778 7778 0 0 0 0 -7779 7779 0 0 0 0 -7780 7780 0 0 0 0 -7781 7781 0 0 0 0 -7782 7782 0 0 0 0 -7783 7783 0 0 0 0 -7784 7784 0 0 0 0 -7785 7785 0 0 0 0 -7786 7786 0 0 0 0 -7787 7787 0 0 0 0 -7788 7788 0 0 0 0 -7789 7789 0 0 0 0 -7790 7790 0 0 0 0 -7791 7791 0 0 0 0 -7792 7792 0 0 0 0 -7793 7793 0 0 0 0 -7794 7794 0 0 0 0 -7795 7795 0 0 0 0 -7796 7796 0 0 0 0 -7797 7797 0 0 0 0 -7798 7798 0 0 0 0 -7799 7799 0 0 0 0 -7800 7800 0 0 0 0 -7801 7801 0 0 0 0 -7802 7802 0 0 0 0 -7803 7803 0 0 0 0 -7804 7804 0 0 0 0 -7805 7805 0 0 0 0 -7806 7806 0 0 0 0 -7807 7807 0 0 0 0 -7808 7808 0 0 0 0 -7809 7809 0 0 0 0 -7810 7810 0 0 0 0 -7811 7811 0 0 0 0 -7812 7812 0 0 0 0 -7813 7813 0 0 0 0 -7814 7814 0 0 0 0 -7815 7815 0 0 0 0 -7816 7816 0 0 0 0 -7817 7817 0 0 0 0 -7818 7818 0 0 0 0 -7819 7819 0 0 0 0 -7820 7820 0 0 0 0 -7821 7821 0 0 0 0 -7822 7822 0 0 0 0 -7823 7823 0 0 0 0 -7824 7824 0 0 0 0 -7825 7825 0 0 0 0 -7826 7826 0 0 0 0 -7827 7827 0 0 0 0 -7828 7828 0 0 0 0 -7829 7829 0 0 0 0 -7830 7830 0 0 0 0 -7831 7831 0 0 0 0 -7832 7832 0 0 0 0 -7833 7833 0 0 0 0 -7834 7834 0 0 0 0 -7835 7835 0 0 0 0 -7836 7836 0 0 0 0 -7837 7837 0 0 0 0 -7838 7838 0 0 0 0 -7839 7839 0 0 0 0 -7840 7840 0 0 0 0 -7841 7841 0 0 0 0 -7842 7842 0 0 0 0 -7843 7843 0 0 0 0 -7844 7844 0 0 0 0 -7845 7845 0 0 0 0 -7846 7846 0 0 0 0 -7847 7847 0 0 0 0 -7848 7848 0 0 0 0 -7849 7849 0 0 0 0 -7850 7850 0 0 0 0 -7851 7851 0 0 0 0 -7852 7852 0 0 0 0 -7853 7853 0 0 0 0 -7854 7854 0 0 0 0 -7855 7855 0 0 0 0 -7856 7856 0 0 0 0 -7857 7857 0 0 0 0 -7858 7858 0 0 0 0 -7859 7859 0 0 0 0 -7860 7860 0 0 0 0 -7861 7861 0 0 0 0 -7862 7862 0 0 0 0 -7863 7863 0 0 0 0 -7864 7864 0 0 0 0 -7865 7865 0 0 0 0 -7866 7866 0 0 0 0 -7867 7867 0 0 0 0 -7868 7868 0 0 0 0 -7869 7869 0 0 0 0 -7870 7870 0 0 0 0 -7871 7871 0 0 0 0 -7872 7872 0 0 0 0 -7873 7873 0 0 0 0 -7874 7874 0 0 0 0 -7875 7875 0 0 0 0 -7876 7876 0 0 0 0 -7877 7877 0 0 0 0 -7878 7878 0 0 0 0 -7879 7879 0 0 0 0 -7880 7880 0 0 0 0 -7881 7881 0 0 0 0 -7882 7882 0 0 0 0 -7883 7883 0 0 0 0 -7884 7884 0 0 0 0 -7885 7885 0 0 0 0 -7886 7886 0 0 0 0 -7887 7887 0 0 0 0 -7888 7888 0 0 0 0 -7889 7889 0 0 0 0 -7890 7890 0 0 0 0 -7891 7891 0 0 0 0 -7892 7892 0 0 0 0 -7893 7893 0 0 0 0 -7894 7894 0 0 0 0 -7895 7895 0 0 0 0 -7896 7896 0 0 0 0 -7897 7897 0 0 0 0 -7898 7898 0 0 0 0 -7899 7899 0 0 0 0 -7900 7900 0 0 0 0 -7901 7901 0 0 0 0 -7902 7902 0 0 0 0 -7903 7903 0 0 0 0 -7904 7904 0 0 0 0 -7905 7905 0 0 0 0 -7906 7906 0 0 0 0 -7907 7907 0 0 0 0 -7908 7908 0 0 0 0 -7909 7909 0 0 0 0 -7910 7910 0 0 0 0 -7911 7911 0 0 0 0 -7912 7912 0 0 0 0 -7913 7913 0 0 0 0 -7914 7914 0 0 0 0 -7915 7915 0 0 0 0 -7916 7916 0 0 0 0 -7917 7917 0 0 0 0 -7918 7918 0 0 0 0 -7919 7919 0 0 0 0 -7920 7920 0 0 0 0 -7921 7921 0 0 0 0 -7922 7922 0 0 0 0 -7923 7923 0 0 0 0 -7924 7924 0 0 0 0 -7925 7925 0 0 0 0 -7926 7926 0 0 0 0 -7927 7927 0 0 0 0 -7928 7928 0 0 0 0 -7929 7929 0 0 0 0 -7930 7930 0 0 0 0 -7931 7931 0 0 0 0 -7932 7932 0 0 0 0 -7933 7933 0 0 0 0 -7934 7934 0 0 0 0 -7935 7935 0 0 0 0 -7936 7936 0 0 0 0 -7937 7937 0 0 0 0 -7938 7938 0 0 0 0 -7939 7939 0 0 0 0 -7940 7940 0 0 0 0 -7941 7941 0 0 0 0 -7942 7942 0 0 0 0 -7943 7943 0 0 0 0 -7944 7944 0 0 0 0 -7945 7945 0 0 0 0 -7946 7946 0 0 0 0 -7947 7947 0 0 0 0 -7948 7948 0 0 0 0 -7949 7949 0 0 0 0 -7950 7950 0 0 0 0 -7951 7951 0 0 0 0 -7952 7952 0 0 0 0 -7953 7953 0 0 0 0 -7954 7954 0 0 0 0 -7955 7955 0 0 0 0 -7956 7956 0 0 0 0 -7957 7957 0 0 0 0 -7958 7958 0 0 0 0 -7959 7959 0 0 0 0 -7960 7960 0 0 0 0 -7961 7961 0 0 0 0 -7962 7962 0 0 0 0 -7963 7963 0 0 0 0 -7964 7964 0 0 0 0 -7965 7965 0 0 0 0 -7966 7966 0 0 0 0 -7967 7967 0 0 0 0 -7968 7968 0 0 0 0 -7969 7969 0 0 0 0 -7970 7970 0 0 0 0 -7971 7971 0 0 0 0 -7972 7972 0 0 0 0 -7973 7973 0 0 0 0 -7974 7974 0 0 0 0 -7975 7975 0 0 0 0 -7976 7976 0 0 0 0 -7977 7977 0 0 0 0 -7978 7978 0 0 0 0 -7979 7979 0 0 0 0 -7980 7980 0 0 0 0 -7981 7981 0 0 0 0 -7982 7982 0 0 0 0 -7983 7983 0 0 0 0 -7984 7984 0 0 0 0 -7985 7985 0 0 0 0 -7986 7986 0 0 0 0 -7987 7987 0 0 0 0 -7988 7988 0 0 0 0 -7989 7989 0 0 0 0 -7990 7990 0 0 0 0 -7991 7991 0 0 0 0 -7992 7992 0 0 0 0 -7993 7993 0 0 0 0 -7994 7994 0 0 0 0 -7995 7995 0 0 0 0 -7996 7996 0 0 0 0 -7997 7997 0 0 0 0 -7998 7998 0 0 0 0 -7999 7999 0 0 0 0 -8000 8000 0 0 0 0 -8001 8001 0 0 0 0 -8002 8002 0 0 0 0 -8003 8003 0 0 0 0 -8004 8004 0 0 0 0 -8005 8005 0 0 0 0 -8006 8006 0 0 0 0 -8007 8007 0 0 0 0 -8008 8008 0 0 0 0 -8009 8009 0 0 0 0 -8010 8010 0 0 0 0 -8011 8011 0 0 0 0 -8012 8012 0 0 0 0 -8013 8013 0 0 0 0 -8014 8014 0 0 0 0 -8015 8015 0 0 0 0 -8016 8016 0 0 0 0 -8017 8017 0 0 0 0 -8018 8018 0 0 0 0 -8019 8019 0 0 0 0 -8020 8020 0 0 0 0 -8021 8021 0 0 0 0 -8022 8022 0 0 0 0 -8023 8023 0 0 0 0 -8024 8024 0 0 0 0 -8025 8025 0 0 0 0 -8026 8026 0 0 0 0 -8027 8027 0 0 0 0 -8028 8028 0 0 0 0 -8029 8029 0 0 0 0 -8030 8030 0 0 0 0 -8031 8031 0 0 0 0 -8032 8032 0 0 0 0 -8033 8033 0 0 0 0 -8034 8034 0 0 0 0 -8035 8035 0 0 0 0 -8036 8036 0 0 0 0 -8037 8037 0 0 0 0 -8038 8038 0 0 0 0 -8039 8039 0 0 0 0 -8040 8040 0 0 0 0 -8041 8041 0 0 0 0 -8042 8042 0 0 0 0 -8043 8043 0 0 0 0 -8044 8044 0 0 0 0 -8045 8045 0 0 0 0 -8046 8046 0 0 0 0 -8047 8047 0 0 0 0 -8048 8048 0 0 0 0 -8049 8049 0 0 0 0 -8050 8050 0 0 0 0 -8051 8051 0 0 0 0 -8052 8052 0 0 0 0 -8053 8053 0 0 0 0 -8054 8054 0 0 0 0 -8055 8055 0 0 0 0 -8056 8056 0 0 0 0 -8057 8057 0 0 0 0 -8058 8058 0 0 0 0 -8059 8059 0 0 0 0 -8060 8060 0 0 0 0 -8061 8061 0 0 0 0 -8062 8062 0 0 0 0 -8063 8063 0 0 0 0 -8064 8064 0 0 0 0 -8065 8065 0 0 0 0 -8066 8066 0 0 0 0 -8067 8067 0 0 0 0 -8068 8068 0 0 0 0 -8069 8069 0 0 0 0 -8070 8070 0 0 0 0 -8071 8071 0 0 0 0 -8072 8072 0 0 0 0 -8073 8073 0 0 0 0 -8074 8074 0 0 0 0 -8075 8075 0 0 0 0 -8076 8076 0 0 0 0 -8077 8077 0 0 0 0 -8078 8078 0 0 0 0 -8079 8079 0 0 0 0 -8080 8080 0 0 0 0 -8081 8081 0 0 0 0 -8082 8082 0 0 0 0 -8083 8083 0 0 0 0 -8084 8084 0 0 0 0 -8085 8085 0 0 0 0 -8086 8086 0 0 0 0 -8087 8087 0 0 0 0 -8088 8088 0 0 0 0 -8089 8089 0 0 0 0 -8090 8090 0 0 0 0 -8091 8091 0 0 0 0 -8092 8092 0 0 0 0 -8093 8093 0 0 0 0 -8094 8094 0 0 0 0 -8095 8095 0 0 0 0 -8096 8096 0 0 0 0 -8097 8097 0 0 0 0 -8098 8098 0 0 0 0 -8099 8099 0 0 0 0 -8100 8100 0 0 0 0 -8101 8101 0 0 0 0 -8102 8102 0 0 0 0 -8103 8103 0 0 0 0 -8104 8104 0 0 0 0 -8105 8105 0 0 0 0 -8106 8106 0 0 0 0 -8107 8107 0 0 0 0 -8108 8108 0 0 0 0 -8109 8109 0 0 0 0 -8110 8110 0 0 0 0 -8111 8111 0 0 0 0 -8112 8112 0 0 0 0 -8113 8113 0 0 0 0 -8114 8114 0 0 0 0 -8115 8115 0 0 0 0 -8116 8116 0 0 0 0 -8117 8117 0 0 0 0 -8118 8118 0 0 0 0 -8119 8119 0 0 0 0 -8120 8120 0 0 0 0 -8121 8121 0 0 0 0 -8122 8122 0 0 0 0 -8123 8123 0 0 0 0 -8124 8124 0 0 0 0 -8125 8125 0 0 0 0 -8126 8126 0 0 0 0 -8127 8127 0 0 0 0 -8128 8128 0 0 0 0 -8129 8129 0 0 0 0 -8130 8130 0 0 0 0 -8131 8131 0 0 0 0 -8132 8132 0 0 0 0 -8133 8133 0 0 0 0 -8134 8134 0 0 0 0 -8135 8135 0 0 0 0 -8136 8136 0 0 0 0 -8137 8137 0 0 0 0 -8138 8138 0 0 0 0 -8139 8139 0 0 0 0 -8140 8140 0 0 0 0 -8141 8141 0 0 0 0 -8142 8142 0 0 0 0 -8143 8143 0 0 0 0 -8144 8144 0 0 0 0 -8145 8145 0 0 0 0 -8146 8146 0 0 0 0 -8147 8147 0 0 0 0 -8148 8148 0 0 0 0 -8149 8149 0 0 0 0 -8150 8150 0 0 0 0 -8151 8151 0 0 0 0 -8152 8152 0 0 0 0 -8153 8153 0 0 0 0 -8154 8154 0 0 0 0 -8155 8155 0 0 0 0 -8156 8156 0 0 0 0 -8157 8157 0 0 0 0 -8158 8158 0 0 0 0 -8159 8159 0 0 0 0 -8160 8160 0 0 0 0 -8161 8161 0 0 0 0 -8162 8162 0 0 0 0 -8163 8163 0 0 0 0 -8164 8164 0 0 0 0 -8165 8165 0 0 0 0 -8166 8166 0 0 0 0 -8167 8167 0 0 0 0 -8168 8168 0 0 0 0 -8169 8169 0 0 0 0 -8170 8170 0 0 0 0 -8171 8171 0 0 0 0 -8172 8172 0 0 0 0 -8173 8173 0 0 0 0 -8174 8174 0 0 0 0 -8175 8175 0 0 0 0 -8176 8176 0 0 0 0 -8177 8177 0 0 0 0 -8178 8178 0 0 0 0 -8179 8179 0 0 0 0 -8180 8180 0 0 0 0 -8181 8181 0 0 0 0 -8182 8182 0 0 0 0 -8183 8183 0 0 0 0 -8184 8184 0 0 0 0 -8185 8185 0 0 0 0 -8186 8186 0 0 0 0 -8187 8187 0 0 0 0 -8188 8188 0 0 0 0 -8189 8189 0 0 0 0 -8190 8190 0 0 0 0 -8191 8191 0 0 0 0 -8192 8192 0 0 0 0 -8193 8193 0 0 0 0 -8194 8194 0 0 0 0 -8195 8195 0 0 0 0 -8196 8196 0 0 0 0 -8197 8197 0 0 0 0 -8198 8198 0 0 0 0 -8199 8199 0 0 0 0 -8200 8200 0 0 0 0 -8201 8201 0 0 0 0 -8202 8202 0 0 0 0 -8203 8203 0 0 0 0 -8204 8204 0 0 0 0 -8205 8205 0 0 0 0 -8206 8206 0 0 0 0 -8207 8207 0 0 0 0 -8208 8208 0 0 0 0 -8209 8209 0 0 0 0 -8210 8210 0 0 0 0 -8211 8211 0 0 0 0 -8212 8212 0 0 0 0 -8213 8213 0 0 0 0 -8214 8214 0 0 0 0 -8215 8215 0 0 0 0 -8216 8216 0 0 0 0 -8217 8217 0 0 0 0 -8218 8218 0 0 0 0 -8219 8219 0 0 0 0 -8220 8220 0 0 0 0 -8221 8221 0 0 0 0 -8222 8222 0 0 0 0 -8223 8223 0 0 0 0 -8224 8224 0 0 0 0 -8225 8225 0 0 0 0 -8226 8226 0 0 0 0 -8227 8227 0 0 0 0 -8228 8228 0 0 0 0 -8229 8229 0 0 0 0 -8230 8230 0 0 0 0 -8231 8231 0 0 0 0 -8232 8232 0 0 0 0 -8233 8233 0 0 0 0 -8234 8234 0 0 0 0 -8235 8235 0 0 0 0 -8236 8236 0 0 0 0 -8237 8237 0 0 0 0 -8238 8238 0 0 0 0 -8239 8239 0 0 0 0 -8240 8240 0 0 0 0 -8241 8241 0 0 0 0 -8242 8242 0 0 0 0 -8243 8243 0 0 0 0 -8244 8244 0 0 0 0 -8245 8245 0 0 0 0 -8246 8246 0 0 0 0 -8247 8247 0 0 0 0 -8248 8248 0 0 0 0 -8249 8249 0 0 0 0 -8250 8250 0 0 0 0 -8251 8251 0 0 0 0 -8252 8252 0 0 0 0 -8253 8253 0 0 0 0 -8254 8254 0 0 0 0 -8255 8255 0 0 0 0 -8256 8256 0 0 0 0 -8257 8257 0 0 0 0 -8258 8258 0 0 0 0 -8259 8259 0 0 0 0 -8260 8260 0 0 0 0 -8261 8261 0 0 0 0 -8262 8262 0 0 0 0 -8263 8263 0 0 0 0 -8264 8264 0 0 0 0 -8265 8265 0 0 0 0 -8266 8266 0 0 0 0 -8267 8267 0 0 0 0 -8268 8268 0 0 0 0 -8269 8269 0 0 0 0 -8270 8270 0 0 0 0 -8271 8271 0 0 0 0 -8272 8272 0 0 0 0 -8273 8273 0 0 0 0 -8274 8274 0 0 0 0 -8275 8275 0 0 0 0 -8276 8276 0 0 0 0 -8277 8277 0 0 0 0 -8278 8278 0 0 0 0 -8279 8279 0 0 0 0 -8280 8280 0 0 0 0 -8281 8281 0 0 0 0 -8282 8282 0 0 0 0 -8283 8283 0 0 0 0 -8284 8284 0 0 0 0 -8285 8285 0 0 0 0 -8286 8286 0 0 0 0 -8287 8287 0 0 0 0 -8288 8288 0 0 0 0 -8289 8289 0 0 0 0 -8290 8290 0 0 0 0 -8291 8291 0 0 0 0 -8292 8292 0 0 0 0 -8293 8293 0 0 0 0 -8294 8294 0 0 0 0 -8295 8295 0 0 0 0 -8296 8296 0 0 0 0 -8297 8297 0 0 0 0 -8298 8298 0 0 0 0 -8299 8299 0 0 0 0 -8300 8300 0 0 0 0 -8301 8301 0 0 0 0 -8302 8302 0 0 0 0 -8303 8303 0 0 0 0 -8304 8304 0 0 0 0 -8305 8305 0 0 0 0 -8306 8306 0 0 0 0 -8307 8307 0 0 0 0 -8308 8308 0 0 0 0 -8309 8309 0 0 0 0 -8310 8310 0 0 0 0 -8311 8311 0 0 0 0 -8312 8312 0 0 0 0 -8313 8313 0 0 0 0 -8314 8314 0 0 0 0 -8315 8315 0 0 0 0 -8316 8316 0 0 0 0 -8317 8317 0 0 0 0 -8318 8318 0 0 0 0 -8319 8319 0 0 0 0 -8320 8320 0 0 0 0 -8321 8321 0 0 0 0 -8322 8322 0 0 0 0 -8323 8323 0 0 0 0 -8324 8324 0 0 0 0 -8325 8325 0 0 0 0 -8326 8326 0 0 0 0 -8327 8327 0 0 0 0 -8328 8328 0 0 0 0 -8329 8329 0 0 0 0 -8330 8330 0 0 0 0 -8331 8331 0 0 0 0 -8332 8332 0 0 0 0 -8333 8333 0 0 0 0 -8334 8334 0 0 0 0 -8335 8335 0 0 0 0 -8336 8336 0 0 0 0 -8337 8337 0 0 0 0 -8338 8338 0 0 0 0 -8339 8339 0 0 0 0 -8340 8340 0 0 0 0 -8341 8341 0 0 0 0 -8342 8342 0 0 0 0 -8343 8343 0 0 0 0 -8344 8344 0 0 0 0 -8345 8345 0 0 0 0 -8346 8346 0 0 0 0 -8347 8347 0 0 0 0 -8348 8348 0 0 0 0 -8349 8349 0 0 0 0 -8350 8350 0 0 0 0 -8351 8351 0 0 0 0 -8352 8352 0 0 0 0 -8353 8353 0 0 0 0 -8354 8354 0 0 0 0 -8355 8355 0 0 0 0 -8356 8356 0 0 0 0 -8357 8357 0 0 0 0 -8358 8358 0 0 0 0 -8359 8359 0 0 0 0 -8360 8360 0 0 0 0 -8361 8361 0 0 0 0 -8362 8362 0 0 0 0 -8363 8363 0 0 0 0 -8364 8364 0 0 0 0 -8365 8365 0 0 0 0 -8366 8366 0 0 0 0 -8367 8367 0 0 0 0 -8368 8368 0 0 0 0 -8369 8369 0 0 0 0 -8370 8370 0 0 0 0 -8371 8371 0 0 0 0 -8372 8372 0 0 0 0 -8373 8373 0 0 0 0 -8374 8374 0 0 0 0 -8375 8375 0 0 0 0 -8376 8376 0 0 0 0 -8377 8377 0 0 0 0 -8378 8378 0 0 0 0 -8379 8379 0 0 0 0 -8380 8380 0 0 0 0 -8381 8381 0 0 0 0 -8382 8382 0 0 0 0 -8383 8383 0 0 0 0 -8384 8384 0 0 0 0 -8385 8385 0 0 0 0 -8386 8386 0 0 0 0 -8387 8387 0 0 0 0 -8388 8388 0 0 0 0 -8389 8389 0 0 0 0 -8390 8390 0 0 0 0 -8391 8391 0 0 0 0 -8392 8392 0 0 0 0 -8393 8393 0 0 0 0 -8394 8394 0 0 0 0 -8395 8395 0 0 0 0 -8396 8396 0 0 0 0 -8397 8397 0 0 0 0 -8398 8398 0 0 0 0 -8399 8399 0 0 0 0 -8400 8400 0 0 0 0 -8401 8401 0 0 0 0 -8402 8402 0 0 0 0 -8403 8403 0 0 0 0 -8404 8404 0 0 0 0 -8405 8405 0 0 0 0 -8406 8406 0 0 0 0 -8407 8407 0 0 0 0 -8408 8408 0 0 0 0 -8409 8409 0 0 0 0 -8410 8410 0 0 0 0 -8411 8411 0 0 0 0 -8412 8412 0 0 0 0 -8413 8413 0 0 0 0 -8414 8414 0 0 0 0 -8415 8415 0 0 0 0 -8416 8416 0 0 0 0 -8417 8417 0 0 0 0 -8418 8418 0 0 0 0 -8419 8419 0 0 0 0 -8420 8420 0 0 0 0 -8421 8421 0 0 0 0 -8422 8422 0 0 0 0 -8423 8423 0 0 0 0 -8424 8424 0 0 0 0 -8425 8425 0 0 0 0 -8426 8426 0 0 0 0 -8427 8427 0 0 0 0 -8428 8428 0 0 0 0 -8429 8429 0 0 0 0 -8430 8430 0 0 0 0 -8431 8431 0 0 0 0 -8432 8432 0 0 0 0 -8433 8433 0 0 0 0 -8434 8434 0 0 0 0 -8435 8435 0 0 0 0 -8436 8436 0 0 0 0 -8437 8437 0 0 0 0 -8438 8438 0 0 0 0 -8439 8439 0 0 0 0 -8440 8440 0 0 0 0 -8441 8441 0 0 0 0 -8442 8442 0 0 0 0 -8443 8443 0 0 0 0 -8444 8444 0 0 0 0 -8445 8445 0 0 0 0 -8446 8446 0 0 0 0 -8447 8447 0 0 0 0 -8448 8448 0 0 0 0 -8449 8449 0 0 0 0 -8450 8450 0 0 0 0 -8451 8451 0 0 0 0 -8452 8452 0 0 0 0 -8453 8453 0 0 0 0 -8454 8454 0 0 0 0 -8455 8455 0 0 0 0 -8456 8456 0 0 0 0 -8457 8457 0 0 0 0 -8458 8458 0 0 0 0 -8459 8459 0 0 0 0 -8460 8460 0 0 0 0 -8461 8461 0 0 0 0 -8462 8462 0 0 0 0 -8463 8463 0 0 0 0 -8464 8464 0 0 0 0 -8465 8465 0 0 0 0 -8466 8466 0 0 0 0 -8467 8467 0 0 0 0 -8468 8468 0 0 0 0 -8469 8469 0 0 0 0 -8470 8470 0 0 0 0 -8471 8471 0 0 0 0 -8472 8472 0 0 0 0 -8473 8473 0 0 0 0 -8474 8474 0 0 0 0 -8475 8475 0 0 0 0 -8476 8476 0 0 0 0 -8477 8477 0 0 0 0 -8478 8478 0 0 0 0 -8479 8479 0 0 0 0 -8480 8480 0 0 0 0 -8481 8481 0 0 0 0 -8482 8482 0 0 0 0 -8483 8483 0 0 0 0 -8484 8484 0 0 0 0 -8485 8485 0 0 0 0 -8486 8486 0 0 0 0 -8487 8487 0 0 0 0 -8488 8488 0 0 0 0 -8489 8489 0 0 0 0 -8490 8490 0 0 0 0 -8491 8491 0 0 0 0 -8492 8492 0 0 0 0 -8493 8493 0 0 0 0 -8494 8494 0 0 0 0 -8495 8495 0 0 0 0 -8496 8496 0 0 0 0 -8497 8497 0 0 0 0 -8498 8498 0 0 0 0 -8499 8499 0 0 0 0 -8500 8500 0 0 0 0 -8501 8501 0 0 0 0 -8502 8502 0 0 0 0 -8503 8503 0 0 0 0 -8504 8504 0 0 0 0 -8505 8505 0 0 0 0 -8506 8506 0 0 0 0 -8507 8507 0 0 0 0 -8508 8508 0 0 0 0 -8509 8509 0 0 0 0 -8510 8510 0 0 0 0 -8511 8511 0 0 0 0 -8512 8512 0 0 0 0 -8513 8513 0 0 0 0 -8514 8514 0 0 0 0 -8515 8515 0 0 0 0 -8516 8516 0 0 0 0 -8517 8517 0 0 0 0 -8518 8518 0 0 0 0 -8519 8519 0 0 0 0 -8520 8520 0 0 0 0 -8521 8521 0 0 0 0 -8522 8522 0 0 0 0 -8523 8523 0 0 0 0 -8524 8524 0 0 0 0 -8525 8525 0 0 0 0 -8526 8526 0 0 0 0 -8527 8527 0 0 0 0 -8528 8528 0 0 0 0 -8529 8529 0 0 0 0 -8530 8530 0 0 0 0 -8531 8531 0 0 0 0 -8532 8532 0 0 0 0 -8533 8533 0 0 0 0 -8534 8534 0 0 0 0 -8535 8535 0 0 0 0 -8536 8536 0 0 0 0 -8537 8537 0 0 0 0 -8538 8538 0 0 0 0 -8539 8539 0 0 0 0 -8540 8540 0 0 0 0 -8541 8541 0 0 0 0 -8542 8542 0 0 0 0 -8543 8543 0 0 0 0 -8544 8544 0 0 0 0 -8545 8545 0 0 0 0 -8546 8546 0 0 0 0 -8547 8547 0 0 0 0 -8548 8548 0 0 0 0 -8549 8549 0 0 0 0 -8550 8550 0 0 0 0 -8551 8551 0 0 0 0 -8552 8552 0 0 0 0 -8553 8553 0 0 0 0 -8554 8554 0 0 0 0 -8555 8555 0 0 0 0 -8556 8556 0 0 0 0 -8557 8557 0 0 0 0 -8558 8558 0 0 0 0 -8559 8559 0 0 0 0 -8560 8560 0 0 0 0 -8561 8561 0 0 0 0 -8562 8562 0 0 0 0 -8563 8563 0 0 0 0 -8564 8564 0 0 0 0 -8565 8565 0 0 0 0 -8566 8566 0 0 0 0 -8567 8567 0 0 0 0 -8568 8568 0 0 0 0 -8569 8569 0 0 0 0 -8570 8570 0 0 0 0 -8571 8571 0 0 0 0 -8572 8572 0 0 0 0 -8573 8573 0 0 0 0 -8574 8574 0 0 0 0 -8575 8575 0 0 0 0 -8576 8576 0 0 0 0 -8577 8577 0 0 0 0 -8578 8578 0 0 0 0 -8579 8579 0 0 0 0 -8580 8580 0 0 0 0 -8581 8581 0 0 0 0 -8582 8582 0 0 0 0 -8583 8583 0 0 0 0 -8584 8584 0 0 0 0 -8585 8585 0 0 0 0 -8586 8586 0 0 0 0 -8587 8587 0 0 0 0 -8588 8588 0 0 0 0 -8589 8589 0 0 0 0 -8590 8590 0 0 0 0 -8591 8591 0 0 0 0 -8592 8592 0 0 0 0 -8593 8593 0 0 0 0 -8594 8594 0 0 0 0 -8595 8595 0 0 0 0 -8596 8596 0 0 0 0 -8597 8597 0 0 0 0 -8598 8598 0 0 0 0 -8599 8599 0 0 0 0 -8600 8600 0 0 0 0 -8601 8601 0 0 0 0 -8602 8602 0 0 0 0 -8603 8603 0 0 0 0 -8604 8604 0 0 0 0 -8605 8605 0 0 0 0 -8606 8606 0 0 0 0 -8607 8607 0 0 0 0 -8608 8608 0 0 0 0 -8609 8609 0 0 0 0 -8610 8610 0 0 0 0 -8611 8611 0 0 0 0 -8612 8612 0 0 0 0 -8613 8613 0 0 0 0 -8614 8614 0 0 0 0 -8615 8615 0 0 0 0 -8616 8616 0 0 0 0 -8617 8617 0 0 0 0 -8618 8618 0 0 0 0 -8619 8619 0 0 0 0 -8620 8620 0 0 0 0 -8621 8621 0 0 0 0 -8622 8622 0 0 0 0 -8623 8623 0 0 0 0 -8624 8624 0 0 0 0 -8625 8625 0 0 0 0 -8626 8626 0 0 0 0 -8627 8627 0 0 0 0 -8628 8628 0 0 0 0 -8629 8629 0 0 0 0 -8630 8630 0 0 0 0 -8631 8631 0 0 0 0 -8632 8632 0 0 0 0 -8633 8633 0 0 0 0 -8634 8634 0 0 0 0 -8635 8635 0 0 0 0 -8636 8636 0 0 0 0 -8637 8637 0 0 0 0 -8638 8638 0 0 0 0 -8639 8639 0 0 0 0 -8640 8640 0 0 0 0 -8641 8641 0 0 0 0 -8642 8642 0 0 0 0 -8643 8643 0 0 0 0 -8644 8644 0 0 0 0 -8645 8645 0 0 0 0 -8646 8646 0 0 0 0 -8647 8647 0 0 0 0 -8648 8648 0 0 0 0 -8649 8649 0 0 0 0 -8650 8650 0 0 0 0 -8651 8651 0 0 0 0 -8652 8652 0 0 0 0 -8653 8653 0 0 0 0 -8654 8654 0 0 0 0 -8655 8655 0 0 0 0 -8656 8656 0 0 0 0 -8657 8657 0 0 0 0 -8658 8658 0 0 0 0 -8659 8659 0 0 0 0 -8660 8660 0 0 0 0 -8661 8661 0 0 0 0 -8662 8662 0 0 0 0 -8663 8663 0 0 0 0 -8664 8664 0 0 0 0 -8665 8665 0 0 0 0 -8666 8666 0 0 0 0 -8667 8667 0 0 0 0 -8668 8668 0 0 0 0 -8669 8669 0 0 0 0 -8670 8670 0 0 0 0 -8671 8671 0 0 0 0 -8672 8672 0 0 0 0 -8673 8673 0 0 0 0 -8674 8674 0 0 0 0 -8675 8675 0 0 0 0 -8676 8676 0 0 0 0 -8677 8677 0 0 0 0 -8678 8678 0 0 0 0 -8679 8679 0 0 0 0 -8680 8680 0 0 0 0 -8681 8681 0 0 0 0 -8682 8682 0 0 0 0 -8683 8683 0 0 0 0 -8684 8684 0 0 0 0 -8685 8685 0 0 0 0 -8686 8686 0 0 0 0 -8687 8687 0 0 0 0 -8688 8688 0 0 0 0 -8689 8689 0 0 0 0 -8690 8690 0 0 0 0 -8691 8691 0 0 0 0 -8692 8692 0 0 0 0 -8693 8693 0 0 0 0 -8694 8694 0 0 0 0 -8695 8695 0 0 0 0 -8696 8696 0 0 0 0 -8697 8697 0 0 0 0 -8698 8698 0 0 0 0 -8699 8699 0 0 0 0 -8700 8700 0 0 0 0 -8701 8701 0 0 0 0 -8702 8702 0 0 0 0 -8703 8703 0 0 0 0 -8704 8704 0 0 0 0 -8705 8705 0 0 0 0 -8706 8706 0 0 0 0 -8707 8707 0 0 0 0 -8708 8708 0 0 0 0 -8709 8709 0 0 0 0 -8710 8710 0 0 0 0 -8711 8711 0 0 0 0 -8712 8712 0 0 0 0 -8713 8713 0 0 0 0 -8714 8714 0 0 0 0 -8715 8715 0 0 0 0 -8716 8716 0 0 0 0 -8717 8717 0 0 0 0 -8718 8718 0 0 0 0 -8719 8719 0 0 0 0 -8720 8720 0 0 0 0 -8721 8721 0 0 0 0 -8722 8722 0 0 0 0 -8723 8723 0 0 0 0 -8724 8724 0 0 0 0 -8725 8725 0 0 0 0 -8726 8726 0 0 0 0 -8727 8727 0 0 0 0 -8728 8728 0 0 0 0 -8729 8729 0 0 0 0 -8730 8730 0 0 0 0 -8731 8731 0 0 0 0 -8732 8732 0 0 0 0 -8733 8733 0 0 0 0 -8734 8734 0 0 0 0 -8735 8735 0 0 0 0 -8736 8736 0 0 0 0 -8737 8737 0 0 0 0 -8738 8738 0 0 0 0 -8739 8739 0 0 0 0 -8740 8740 0 0 0 0 -8741 8741 0 0 0 0 -8742 8742 0 0 0 0 -8743 8743 0 0 0 0 -8744 8744 0 0 0 0 -8745 8745 0 0 0 0 -8746 8746 0 0 0 0 -8747 8747 0 0 0 0 -8748 8748 0 0 0 0 -8749 8749 0 0 0 0 -8750 8750 0 0 0 0 -8751 8751 0 0 0 0 -8752 8752 0 0 0 0 -8753 8753 0 0 0 0 -8754 8754 0 0 0 0 -8755 8755 0 0 0 0 -8756 8756 0 0 0 0 -8757 8757 0 0 0 0 -8758 8758 0 0 0 0 -8759 8759 0 0 0 0 -8760 8760 0 0 0 0 -8761 8761 0 0 0 0 -8762 8762 0 0 0 0 -8763 8763 0 0 0 0 -8764 8764 0 0 0 0 -8765 8765 0 0 0 0 -8766 8766 0 0 0 0 -8767 8767 0 0 0 0 -8768 8768 0 0 0 0 -8769 8769 0 0 0 0 -8770 8770 0 0 0 0 -8771 8771 0 0 0 0 -8772 8772 0 0 0 0 -8773 8773 0 0 0 0 -8774 8774 0 0 0 0 -8775 8775 0 0 0 0 -8776 8776 0 0 0 0 -8777 8777 0 0 0 0 -8778 8778 0 0 0 0 -8779 8779 0 0 0 0 -8780 8780 0 0 0 0 -8781 8781 0 0 0 0 -8782 8782 0 0 0 0 -8783 8783 0 0 0 0 -8784 8784 0 0 0 0 -8785 8785 0 0 0 0 -8786 8786 0 0 0 0 -8787 8787 0 0 0 0 -8788 8788 0 0 0 0 -8789 8789 0 0 0 0 -8790 8790 0 0 0 0 -8791 8791 0 0 0 0 -8792 8792 0 0 0 0 -8793 8793 0 0 0 0 -8794 8794 0 0 0 0 -8795 8795 0 0 0 0 -8796 8796 0 0 0 0 -8797 8797 0 0 0 0 -8798 8798 0 0 0 0 -8799 8799 0 0 0 0 -8800 8800 0 0 0 0 -8801 8801 0 0 0 0 -8802 8802 0 0 0 0 -8803 8803 0 0 0 0 -8804 8804 0 0 0 0 -8805 8805 0 0 0 0 -8806 8806 0 0 0 0 -8807 8807 0 0 0 0 -8808 8808 0 0 0 0 -8809 8809 0 0 0 0 -8810 8810 0 0 0 0 -8811 8811 0 0 0 0 -8812 8812 0 0 0 0 -8813 8813 0 0 0 0 -8814 8814 0 0 0 0 -8815 8815 0 0 0 0 -8816 8816 0 0 0 0 -8817 8817 0 0 0 0 -8818 8818 0 0 0 0 -8819 8819 0 0 0 0 -8820 8820 0 0 0 0 -8821 8821 0 0 0 0 -8822 8822 0 0 0 0 -8823 8823 0 0 0 0 -8824 8824 0 0 0 0 -8825 8825 0 0 0 0 -8826 8826 0 0 0 0 -8827 8827 0 0 0 0 -8828 8828 0 0 0 0 -8829 8829 0 0 0 0 -8830 8830 0 0 0 0 -8831 8831 0 0 0 0 -8832 8832 0 0 0 0 -8833 8833 0 0 0 0 -8834 8834 0 0 0 0 -8835 8835 0 0 0 0 -8836 8836 0 0 0 0 -8837 8837 0 0 0 0 -8838 8838 0 0 0 0 -8839 8839 0 0 0 0 -8840 8840 0 0 0 0 -8841 8841 0 0 0 0 -8842 8842 0 0 0 0 -8843 8843 0 0 0 0 -8844 8844 0 0 0 0 -8845 8845 0 0 0 0 -8846 8846 0 0 0 0 -8847 8847 0 0 0 0 -8848 8848 0 0 0 0 -8849 8849 0 0 0 0 -8850 8850 0 0 0 0 -8851 8851 0 0 0 0 -8852 8852 0 0 0 0 -8853 8853 0 0 0 0 -8854 8854 0 0 0 0 -8855 8855 0 0 0 0 -8856 8856 0 0 0 0 -8857 8857 0 0 0 0 -8858 8858 0 0 0 0 -8859 8859 0 0 0 0 -8860 8860 0 0 0 0 -8861 8861 0 0 0 0 -8862 8862 0 0 0 0 -8863 8863 0 0 0 0 -8864 8864 0 0 0 0 -8865 8865 0 0 0 0 -8866 8866 0 0 0 0 -8867 8867 0 0 0 0 -8868 8868 0 0 0 0 -8869 8869 0 0 0 0 -8870 8870 0 0 0 0 -8871 8871 0 0 0 0 -8872 8872 0 0 0 0 -8873 8873 0 0 0 0 -8874 8874 0 0 0 0 -8875 8875 0 0 0 0 -8876 8876 0 0 0 0 -8877 8877 0 0 0 0 -8878 8878 0 0 0 0 -8879 8879 0 0 0 0 -8880 8880 0 0 0 0 -8881 8881 0 0 0 0 -8882 8882 0 0 0 0 -8883 8883 0 0 0 0 -8884 8884 0 0 0 0 -8885 8885 0 0 0 0 -8886 8886 0 0 0 0 -8887 8887 0 0 0 0 -8888 8888 0 0 0 0 -8889 8889 0 0 0 0 -8890 8890 0 0 0 0 -8891 8891 0 0 0 0 -8892 8892 0 0 0 0 -8893 8893 0 0 0 0 -8894 8894 0 0 0 0 -8895 8895 0 0 0 0 -8896 8896 0 0 0 0 -8897 8897 0 0 0 0 -8898 8898 0 0 0 0 -8899 8899 0 0 0 0 -8900 8900 0 0 0 0 -8901 8901 0 0 0 0 -8902 8902 0 0 0 0 -8903 8903 0 0 0 0 -8904 8904 0 0 0 0 -8905 8905 0 0 0 0 -8906 8906 0 0 0 0 -8907 8907 0 0 0 0 -8908 8908 0 0 0 0 -8909 8909 0 0 0 0 -8910 8910 0 0 0 0 -8911 8911 0 0 0 0 -8912 8912 0 0 0 0 -8913 8913 0 0 0 0 -8914 8914 0 0 0 0 -8915 8915 0 0 0 0 -8916 8916 0 0 0 0 -8917 8917 0 0 0 0 -8918 8918 0 0 0 0 -8919 8919 0 0 0 0 -8920 8920 0 0 0 0 -8921 8921 0 0 0 0 -8922 8922 0 0 0 0 -8923 8923 0 0 0 0 -8924 8924 0 0 0 0 -8925 8925 0 0 0 0 -8926 8926 0 0 0 0 -8927 8927 0 0 0 0 -8928 8928 0 0 0 0 -8929 8929 0 0 0 0 -8930 8930 0 0 0 0 -8931 8931 0 0 0 0 -8932 8932 0 0 0 0 -8933 8933 0 0 0 0 -8934 8934 0 0 0 0 -8935 8935 0 0 0 0 -8936 8936 0 0 0 0 -8937 8937 0 0 0 0 -8938 8938 0 0 0 0 -8939 8939 0 0 0 0 -8940 8940 0 0 0 0 -8941 8941 0 0 0 0 -8942 8942 0 0 0 0 -8943 8943 0 0 0 0 -8944 8944 0 0 0 0 -8945 8945 0 0 0 0 -8946 8946 0 0 0 0 -8947 8947 0 0 0 0 -8948 8948 0 0 0 0 -8949 8949 0 0 0 0 -8950 8950 0 0 0 0 -8951 8951 0 0 0 0 -8952 8952 0 0 0 0 -8953 8953 0 0 0 0 -8954 8954 0 0 0 0 -8955 8955 0 0 0 0 -8956 8956 0 0 0 0 -8957 8957 0 0 0 0 -8958 8958 0 0 0 0 -8959 8959 0 0 0 0 -8960 8960 0 0 0 0 -8961 8961 0 0 0 0 -8962 8962 0 0 0 0 -8963 8963 0 0 0 0 -8964 8964 0 0 0 0 -8965 8965 0 0 0 0 -8966 8966 0 0 0 0 -8967 8967 0 0 0 0 -8968 8968 0 0 0 0 -8969 8969 0 0 0 0 -8970 8970 0 0 0 0 -8971 8971 0 0 0 0 -8972 8972 0 0 0 0 -8973 8973 0 0 0 0 -8974 8974 0 0 0 0 -8975 8975 0 0 0 0 -8976 8976 0 0 0 0 -8977 8977 0 0 0 0 -8978 8978 0 0 0 0 -8979 8979 0 0 0 0 -8980 8980 0 0 0 0 -8981 8981 0 0 0 0 -8982 8982 0 0 0 0 -8983 8983 0 0 0 0 -8984 8984 0 0 0 0 -8985 8985 0 0 0 0 -8986 8986 0 0 0 0 -8987 8987 0 0 0 0 -8988 8988 0 0 0 0 -8989 8989 0 0 0 0 -8990 8990 0 0 0 0 -8991 8991 0 0 0 0 -8992 8992 0 0 0 0 -8993 8993 0 0 0 0 -8994 8994 0 0 0 0 -8995 8995 0 0 0 0 -8996 8996 0 0 0 0 -8997 8997 0 0 0 0 -8998 8998 0 0 0 0 -8999 8999 0 0 0 0 -9000 9000 0 0 0 0 -9001 9001 0 0 0 0 -9002 9002 0 0 0 0 -9003 9003 0 0 0 0 -9004 9004 0 0 0 0 -9005 9005 0 0 0 0 -9006 9006 0 0 0 0 -9007 9007 0 0 0 0 -9008 9008 0 0 0 0 -9009 9009 0 0 0 0 -9010 9010 0 0 0 0 -9011 9011 0 0 0 0 -9012 9012 0 0 0 0 -9013 9013 0 0 0 0 -9014 9014 0 0 0 0 -9015 9015 0 0 0 0 -9016 9016 0 0 0 0 -9017 9017 0 0 0 0 -9018 9018 0 0 0 0 -9019 9019 0 0 0 0 -9020 9020 0 0 0 0 -9021 9021 0 0 0 0 -9022 9022 0 0 0 0 -9023 9023 0 0 0 0 -9024 9024 0 0 0 0 -9025 9025 0 0 0 0 -9026 9026 0 0 0 0 -9027 9027 0 0 0 0 -9028 9028 0 0 0 0 -9029 9029 0 0 0 0 -9030 9030 0 0 0 0 -9031 9031 0 0 0 0 -9032 9032 0 0 0 0 -9033 9033 0 0 0 0 -9034 9034 0 0 0 0 -9035 9035 0 0 0 0 -9036 9036 0 0 0 0 -9037 9037 0 0 0 0 -9038 9038 0 0 0 0 -9039 9039 0 0 0 0 -9040 9040 0 0 0 0 -9041 9041 0 0 0 0 -9042 9042 0 0 0 0 -9043 9043 0 0 0 0 -9044 9044 0 0 0 0 -9045 9045 0 0 0 0 -9046 9046 0 0 0 0 -9047 9047 0 0 0 0 -9048 9048 0 0 0 0 -9049 9049 0 0 0 0 -9050 9050 0 0 0 0 -9051 9051 0 0 0 0 -9052 9052 0 0 0 0 -9053 9053 0 0 0 0 -9054 9054 0 0 0 0 -9055 9055 0 0 0 0 -9056 9056 0 0 0 0 -9057 9057 0 0 0 0 -9058 9058 0 0 0 0 -9059 9059 0 0 0 0 -9060 9060 0 0 0 0 -9061 9061 0 0 0 0 -9062 9062 0 0 0 0 -9063 9063 0 0 0 0 -9064 9064 0 0 0 0 -9065 9065 0 0 0 0 -9066 9066 0 0 0 0 -9067 9067 0 0 0 0 -9068 9068 0 0 0 0 -9069 9069 0 0 0 0 -9070 9070 0 0 0 0 -9071 9071 0 0 0 0 -9072 9072 0 0 0 0 -9073 9073 0 0 0 0 -9074 9074 0 0 0 0 -9075 9075 0 0 0 0 -9076 9076 0 0 0 0 -9077 9077 0 0 0 0 -9078 9078 0 0 0 0 -9079 9079 0 0 0 0 -9080 9080 0 0 0 0 -9081 9081 0 0 0 0 -9082 9082 0 0 0 0 -9083 9083 0 0 0 0 -9084 9084 0 0 0 0 -9085 9085 0 0 0 0 -9086 9086 0 0 0 0 -9087 9087 0 0 0 0 -9088 9088 0 0 0 0 -9089 9089 0 0 0 0 -9090 9090 0 0 0 0 -9091 9091 0 0 0 0 -9092 9092 0 0 0 0 -9093 9093 0 0 0 0 -9094 9094 0 0 0 0 -9095 9095 0 0 0 0 -9096 9096 0 0 0 0 -9097 9097 0 0 0 0 -9098 9098 0 0 0 0 -9099 9099 0 0 0 0 -9100 9100 0 0 0 0 -9101 9101 0 0 0 0 -9102 9102 0 0 0 0 -9103 9103 0 0 0 0 -9104 9104 0 0 0 0 -9105 9105 0 0 0 0 -9106 9106 0 0 0 0 -9107 9107 0 0 0 0 -9108 9108 0 0 0 0 -9109 9109 0 0 0 0 -9110 9110 0 0 0 0 -9111 9111 0 0 0 0 -9112 9112 0 0 0 0 -9113 9113 0 0 0 0 -9114 9114 0 0 0 0 -9115 9115 0 0 0 0 -9116 9116 0 0 0 0 -9117 9117 0 0 0 0 -9118 9118 0 0 0 0 -9119 9119 0 0 0 0 -9120 9120 0 0 0 0 -9121 9121 0 0 0 0 -9122 9122 0 0 0 0 -9123 9123 0 0 0 0 -9124 9124 0 0 0 0 -9125 9125 0 0 0 0 -9126 9126 0 0 0 0 -9127 9127 0 0 0 0 -9128 9128 0 0 0 0 -9129 9129 0 0 0 0 -9130 9130 0 0 0 0 -9131 9131 0 0 0 0 -9132 9132 0 0 0 0 -9133 9133 0 0 0 0 -9134 9134 0 0 0 0 -9135 9135 0 0 0 0 -9136 9136 0 0 0 0 -9137 9137 0 0 0 0 -9138 9138 0 0 0 0 -9139 9139 0 0 0 0 -9140 9140 0 0 0 0 -9141 9141 0 0 0 0 -9142 9142 0 0 0 0 -9143 9143 0 0 0 0 -9144 9144 0 0 0 0 -9145 9145 0 0 0 0 -9146 9146 0 0 0 0 -9147 9147 0 0 0 0 -9148 9148 0 0 0 0 -9149 9149 0 0 0 0 -9150 9150 0 0 0 0 -9151 9151 0 0 0 0 -9152 9152 0 0 0 0 -9153 9153 0 0 0 0 -9154 9154 0 0 0 0 -9155 9155 0 0 0 0 -9156 9156 0 0 0 0 -9157 9157 0 0 0 0 -9158 9158 0 0 0 0 -9159 9159 0 0 0 0 -9160 9160 0 0 0 0 -9161 9161 0 0 0 0 -9162 9162 0 0 0 0 -9163 9163 0 0 0 0 -9164 9164 0 0 0 0 -9165 9165 0 0 0 0 -9166 9166 0 0 0 0 -9167 9167 0 0 0 0 -9168 9168 0 0 0 0 -9169 9169 0 0 0 0 -9170 9170 0 0 0 0 -9171 9171 0 0 0 0 -9172 9172 0 0 0 0 -9173 9173 0 0 0 0 -9174 9174 0 0 0 0 -9175 9175 0 0 0 0 -9176 9176 0 0 0 0 -9177 9177 0 0 0 0 -9178 9178 0 0 0 0 -9179 9179 0 0 0 0 -9180 9180 0 0 0 0 -9181 9181 0 0 0 0 -9182 9182 0 0 0 0 -9183 9183 0 0 0 0 -9184 9184 0 0 0 0 -9185 9185 0 0 0 0 -9186 9186 0 0 0 0 -9187 9187 0 0 0 0 -9188 9188 0 0 0 0 -9189 9189 0 0 0 0 -9190 9190 0 0 0 0 -9191 9191 0 0 0 0 -9192 9192 0 0 0 0 -9193 9193 0 0 0 0 -9194 9194 0 0 0 0 -9195 9195 0 0 0 0 -9196 9196 0 0 0 0 -9197 9197 0 0 0 0 -9198 9198 0 0 0 0 -9199 9199 0 0 0 0 -9200 9200 0 0 0 0 -9201 9201 0 0 0 0 -9202 9202 0 0 0 0 -9203 9203 0 0 0 0 -9204 9204 0 0 0 0 -9205 9205 0 0 0 0 -9206 9206 0 0 0 0 -9207 9207 0 0 0 0 -9208 9208 0 0 0 0 -9209 9209 0 0 0 0 -9210 9210 0 0 0 0 -9211 9211 0 0 0 0 -9212 9212 0 0 0 0 -9213 9213 0 0 0 0 -9214 9214 0 0 0 0 -9215 9215 0 0 0 0 -9216 9216 0 0 0 0 -9217 9217 0 0 0 0 -9218 9218 0 0 0 0 -9219 9219 0 0 0 0 -9220 9220 0 0 0 0 -9221 9221 0 0 0 0 -9222 9222 0 0 0 0 -9223 9223 0 0 0 0 -9224 9224 0 0 0 0 -9225 9225 0 0 0 0 -9226 9226 0 0 0 0 -9227 9227 0 0 0 0 -9228 9228 0 0 0 0 -9229 9229 0 0 0 0 -9230 9230 0 0 0 0 -9231 9231 0 0 0 0 -9232 9232 0 0 0 0 -9233 9233 0 0 0 0 -9234 9234 0 0 0 0 -9235 9235 0 0 0 0 -9236 9236 0 0 0 0 -9237 9237 0 0 0 0 -9238 9238 0 0 0 0 -9239 9239 0 0 0 0 -9240 9240 0 0 0 0 -9241 9241 0 0 0 0 -9242 9242 0 0 0 0 -9243 9243 0 0 0 0 -9244 9244 0 0 0 0 -9245 9245 0 0 0 0 -9246 9246 0 0 0 0 -9247 9247 0 0 0 0 -9248 9248 0 0 0 0 -9249 9249 0 0 0 0 -9250 9250 0 0 0 0 -9251 9251 0 0 0 0 -9252 9252 0 0 0 0 -9253 9253 0 0 0 0 -9254 9254 0 0 0 0 -9255 9255 0 0 0 0 -9256 9256 0 0 0 0 -9257 9257 0 0 0 0 -9258 9258 0 0 0 0 -9259 9259 0 0 0 0 -9260 9260 0 0 0 0 -9261 9261 0 0 0 0 -9262 9262 0 0 0 0 -9263 9263 0 0 0 0 -9264 9264 0 0 0 0 -9265 9265 0 0 0 0 -9266 9266 0 0 0 0 -9267 9267 0 0 0 0 -9268 9268 0 0 0 0 -9269 9269 0 0 0 0 -9270 9270 0 0 0 0 -9271 9271 0 0 0 0 -9272 9272 0 0 0 0 -9273 9273 0 0 0 0 -9274 9274 0 0 0 0 -9275 9275 0 0 0 0 -9276 9276 0 0 0 0 -9277 9277 0 0 0 0 -9278 9278 0 0 0 0 -9279 9279 0 0 0 0 -9280 9280 0 0 0 0 -9281 9281 0 0 0 0 -9282 9282 0 0 0 0 -9283 9283 0 0 0 0 -9284 9284 0 0 0 0 -9285 9285 0 0 0 0 -9286 9286 0 0 0 0 -9287 9287 0 0 0 0 -9288 9288 0 0 0 0 -9289 9289 0 0 0 0 -9290 9290 0 0 0 0 -9291 9291 0 0 0 0 -9292 9292 0 0 0 0 -9293 9293 0 0 0 0 -9294 9294 0 0 0 0 -9295 9295 0 0 0 0 -9296 9296 0 0 0 0 -9297 9297 0 0 0 0 -9298 9298 0 0 0 0 -9299 9299 0 0 0 0 -9300 9300 0 0 0 0 -9301 9301 0 0 0 0 -9302 9302 0 0 0 0 -9303 9303 0 0 0 0 -9304 9304 0 0 0 0 -9305 9305 0 0 0 0 -9306 9306 0 0 0 0 -9307 9307 0 0 0 0 -9308 9308 0 0 0 0 -9309 9309 0 0 0 0 -9310 9310 0 0 0 0 -9311 9311 0 0 0 0 -9312 9312 0 0 0 0 -9313 9313 0 0 0 0 -9314 9314 0 0 0 0 -9315 9315 0 0 0 0 -9316 9316 0 0 0 0 -9317 9317 0 0 0 0 -9318 9318 0 0 0 0 -9319 9319 0 0 0 0 -9320 9320 0 0 0 0 -9321 9321 0 0 0 0 -9322 9322 0 0 0 0 -9323 9323 0 0 0 0 -9324 9324 0 0 0 0 -9325 9325 0 0 0 0 -9326 9326 0 0 0 0 -9327 9327 0 0 0 0 -9328 9328 0 0 0 0 -9329 9329 0 0 0 0 -9330 9330 0 0 0 0 -9331 9331 0 0 0 0 -9332 9332 0 0 0 0 -9333 9333 0 0 0 0 -9334 9334 0 0 0 0 -9335 9335 0 0 0 0 -9336 9336 0 0 0 0 -9337 9337 0 0 0 0 -9338 9338 0 0 0 0 -9339 9339 0 0 0 0 -9340 9340 0 0 0 0 -9341 9341 0 0 0 0 -9342 9342 0 0 0 0 -9343 9343 0 0 0 0 -9344 9344 0 0 0 0 -9345 9345 0 0 0 0 -9346 9346 0 0 0 0 -9347 9347 0 0 0 0 -9348 9348 0 0 0 0 -9349 9349 0 0 0 0 -9350 9350 0 0 0 0 -9351 9351 0 0 0 0 -9352 9352 0 0 0 0 -9353 9353 0 0 0 0 -9354 9354 0 0 0 0 -9355 9355 0 0 0 0 -9356 9356 0 0 0 0 -9357 9357 0 0 0 0 -9358 9358 0 0 0 0 -9359 9359 0 0 0 0 -9360 9360 0 0 0 0 -9361 9361 0 0 0 0 -9362 9362 0 0 0 0 -9363 9363 0 0 0 0 -9364 9364 0 0 0 0 -9365 9365 0 0 0 0 -9366 9366 0 0 0 0 -9367 9367 0 0 0 0 -9368 9368 0 0 0 0 -9369 9369 0 0 0 0 -9370 9370 0 0 0 0 -9371 9371 0 0 0 0 -9372 9372 0 0 0 0 -9373 9373 0 0 0 0 -9374 9374 0 0 0 0 -9375 9375 0 0 0 0 -9376 9376 0 0 0 0 -9377 9377 0 0 0 0 -9378 9378 0 0 0 0 -9379 9379 0 0 0 0 -9380 9380 0 0 0 0 -9381 9381 0 0 0 0 -9382 9382 0 0 0 0 -9383 9383 0 0 0 0 -9384 9384 0 0 0 0 -9385 9385 0 0 0 0 -9386 9386 0 0 0 0 -9387 9387 0 0 0 0 -9388 9388 0 0 0 0 -9389 9389 0 0 0 0 -9390 9390 0 0 0 0 -9391 9391 0 0 0 0 -9392 9392 0 0 0 0 -9393 9393 0 0 0 0 -9394 9394 0 0 0 0 -9395 9395 0 0 0 0 -9396 9396 0 0 0 0 -9397 9397 0 0 0 0 -9398 9398 0 0 0 0 -9399 9399 0 0 0 0 -9400 9400 0 0 0 0 -9401 9401 0 0 0 0 -9402 9402 0 0 0 0 -9403 9403 0 0 0 0 -9404 9404 0 0 0 0 -9405 9405 0 0 0 0 -9406 9406 0 0 0 0 -9407 9407 0 0 0 0 -9408 9408 0 0 0 0 -9409 9409 0 0 0 0 -9410 9410 0 0 0 0 -9411 9411 0 0 0 0 -9412 9412 0 0 0 0 -9413 9413 0 0 0 0 -9414 9414 0 0 0 0 -9415 9415 0 0 0 0 -9416 9416 0 0 0 0 -9417 9417 0 0 0 0 -9418 9418 0 0 0 0 -9419 9419 0 0 0 0 -9420 9420 0 0 0 0 -9421 9421 0 0 0 0 -9422 9422 0 0 0 0 -9423 9423 0 0 0 0 -9424 9424 0 0 0 0 -9425 9425 0 0 0 0 -9426 9426 0 0 0 0 -9427 9427 0 0 0 0 -9428 9428 0 0 0 0 -9429 9429 0 0 0 0 -9430 9430 0 0 0 0 -9431 9431 0 0 0 0 -9432 9432 0 0 0 0 -9433 9433 0 0 0 0 -9434 9434 0 0 0 0 -9435 9435 0 0 0 0 -9436 9436 0 0 0 0 -9437 9437 0 0 0 0 -9438 9438 0 0 0 0 -9439 9439 0 0 0 0 -9440 9440 0 0 0 0 -9441 9441 0 0 0 0 -9442 9442 0 0 0 0 -9443 9443 0 0 0 0 -9444 9444 0 0 0 0 -9445 9445 0 0 0 0 -9446 9446 0 0 0 0 -9447 9447 0 0 0 0 -9448 9448 0 0 0 0 -9449 9449 0 0 0 0 -9450 9450 0 0 0 0 -9451 9451 0 0 0 0 -9452 9452 0 0 0 0 -9453 9453 0 0 0 0 -9454 9454 0 0 0 0 -9455 9455 0 0 0 0 -9456 9456 0 0 0 0 -9457 9457 0 0 0 0 -9458 9458 0 0 0 0 -9459 9459 0 0 0 0 -9460 9460 0 0 0 0 -9461 9461 0 0 0 0 -9462 9462 0 0 0 0 -9463 9463 0 0 0 0 -9464 9464 0 0 0 0 -9465 9465 0 0 0 0 -9466 9466 0 0 0 0 -9467 9467 0 0 0 0 -9468 9468 0 0 0 0 -9469 9469 0 0 0 0 -9470 9470 0 0 0 0 -9471 9471 0 0 0 0 -9472 9472 0 0 0 0 -9473 9473 0 0 0 0 -9474 9474 0 0 0 0 -9475 9475 0 0 0 0 -9476 9476 0 0 0 0 -9477 9477 0 0 0 0 -9478 9478 0 0 0 0 -9479 9479 0 0 0 0 -9480 9480 0 0 0 0 -9481 9481 0 0 0 0 -9482 9482 0 0 0 0 -9483 9483 0 0 0 0 -9484 9484 0 0 0 0 -9485 9485 0 0 0 0 -9486 9486 0 0 0 0 -9487 9487 0 0 0 0 -9488 9488 0 0 0 0 -9489 9489 0 0 0 0 -9490 9490 0 0 0 0 -9491 9491 0 0 0 0 -9492 9492 0 0 0 0 -9493 9493 0 0 0 0 -9494 9494 0 0 0 0 -9495 9495 0 0 0 0 -9496 9496 0 0 0 0 -9497 9497 0 0 0 0 -9498 9498 0 0 0 0 -9499 9499 0 0 0 0 -9500 9500 0 0 0 0 -9501 9501 0 0 0 0 -9502 9502 0 0 0 0 -9503 9503 0 0 0 0 -9504 9504 0 0 0 0 -9505 9505 0 0 0 0 -9506 9506 0 0 0 0 -9507 9507 0 0 0 0 -9508 9508 0 0 0 0 -9509 9509 0 0 0 0 -9510 9510 0 0 0 0 -9511 9511 0 0 0 0 -9512 9512 0 0 0 0 -9513 9513 0 0 0 0 -9514 9514 0 0 0 0 -9515 9515 0 0 0 0 -9516 9516 0 0 0 0 -9517 9517 0 0 0 0 -9518 9518 0 0 0 0 -9519 9519 0 0 0 0 -9520 9520 0 0 0 0 -9521 9521 0 0 0 0 -9522 9522 0 0 0 0 -9523 9523 0 0 0 0 -9524 9524 0 0 0 0 -9525 9525 0 0 0 0 -9526 9526 0 0 0 0 -9527 9527 0 0 0 0 -9528 9528 0 0 0 0 -9529 9529 0 0 0 0 -9530 9530 0 0 0 0 -9531 9531 0 0 0 0 -9532 9532 0 0 0 0 -9533 9533 0 0 0 0 -9534 9534 0 0 0 0 -9535 9535 0 0 0 0 -9536 9536 0 0 0 0 -9537 9537 0 0 0 0 -9538 9538 0 0 0 0 -9539 9539 0 0 0 0 -9540 9540 0 0 0 0 -9541 9541 0 0 0 0 -9542 9542 0 0 0 0 -9543 9543 0 0 0 0 -9544 9544 0 0 0 0 -9545 9545 0 0 0 0 -9546 9546 0 0 0 0 -9547 9547 0 0 0 0 -9548 9548 0 0 0 0 -9549 9549 0 0 0 0 -9550 9550 0 0 0 0 -9551 9551 0 0 0 0 -9552 9552 0 0 0 0 -9553 9553 0 0 0 0 -9554 9554 0 0 0 0 -9555 9555 0 0 0 0 -9556 9556 0 0 0 0 -9557 9557 0 0 0 0 -9558 9558 0 0 0 0 -9559 9559 0 0 0 0 -9560 9560 0 0 0 0 -9561 9561 0 0 0 0 -9562 9562 0 0 0 0 -9563 9563 0 0 0 0 -9564 9564 0 0 0 0 -9565 9565 0 0 0 0 -9566 9566 0 0 0 0 -9567 9567 0 0 0 0 -9568 9568 0 0 0 0 -9569 9569 0 0 0 0 -9570 9570 0 0 0 0 -9571 9571 0 0 0 0 -9572 9572 0 0 0 0 -9573 9573 0 0 0 0 -9574 9574 0 0 0 0 -9575 9575 0 0 0 0 -9576 9576 0 0 0 0 -9577 9577 0 0 0 0 -9578 9578 0 0 0 0 -9579 9579 0 0 0 0 -9580 9580 0 0 0 0 -9581 9581 0 0 0 0 -9582 9582 0 0 0 0 -9583 9583 0 0 0 0 -9584 9584 0 0 0 0 -9585 9585 0 0 0 0 -9586 9586 0 0 0 0 -9587 9587 0 0 0 0 -9588 9588 0 0 0 0 -9589 9589 0 0 0 0 -9590 9590 0 0 0 0 -9591 9591 0 0 0 0 -9592 9592 0 0 0 0 -9593 9593 0 0 0 0 -9594 9594 0 0 0 0 -9595 9595 0 0 0 0 -9596 9596 0 0 0 0 -9597 9597 0 0 0 0 -9598 9598 0 0 0 0 -9599 9599 0 0 0 0 -9600 9600 0 0 0 0 -9601 9601 0 0 0 0 -9602 9602 0 0 0 0 -9603 9603 0 0 0 0 -9604 9604 0 0 0 0 -9605 9605 0 0 0 0 -9606 9606 0 0 0 0 -9607 9607 0 0 0 0 -9608 9608 0 0 0 0 -9609 9609 0 0 0 0 -9610 9610 0 0 0 0 -9611 9611 0 0 0 0 -9612 9612 0 0 0 0 -9613 9613 0 0 0 0 -9614 9614 0 0 0 0 -9615 9615 0 0 0 0 -9616 9616 0 0 0 0 -9617 9617 0 0 0 0 -9618 9618 0 0 0 0 -9619 9619 0 0 0 0 -9620 9620 0 0 0 0 -9621 9621 0 0 0 0 -9622 9622 0 0 0 0 -9623 9623 0 0 0 0 -9624 9624 0 0 0 0 -9625 9625 0 0 0 0 -9626 9626 0 0 0 0 -9627 9627 0 0 0 0 -9628 9628 0 0 0 0 -9629 9629 0 0 0 0 -9630 9630 0 0 0 0 -9631 9631 0 0 0 0 -9632 9632 0 0 0 0 -9633 9633 0 0 0 0 -9634 9634 0 0 0 0 -9635 9635 0 0 0 0 -9636 9636 0 0 0 0 -9637 9637 0 0 0 0 -9638 9638 0 0 0 0 -9639 9639 0 0 0 0 -9640 9640 0 0 0 0 -9641 9641 0 0 0 0 -9642 9642 0 0 0 0 -9643 9643 0 0 0 0 -9644 9644 0 0 0 0 -9645 9645 0 0 0 0 -9646 9646 0 0 0 0 -9647 9647 0 0 0 0 -9648 9648 0 0 0 0 -9649 9649 0 0 0 0 -9650 9650 0 0 0 0 -9651 9651 0 0 0 0 -9652 9652 0 0 0 0 -9653 9653 0 0 0 0 -9654 9654 0 0 0 0 -9655 9655 0 0 0 0 -9656 9656 0 0 0 0 -9657 9657 0 0 0 0 -9658 9658 0 0 0 0 -9659 9659 0 0 0 0 -9660 9660 0 0 0 0 -9661 9661 0 0 0 0 -9662 9662 0 0 0 0 diff --git a/data-raw/ideas/allele_sharing.R b/data-raw/ideas/allele_sharing.R new file mode 100644 index 00000000..95d94bc9 --- /dev/null +++ b/data-raw/ideas/allele_sharing.R @@ -0,0 +1,40 @@ +library(hierfstat) +set.seed(123) +dos<-matrix(sample(0:2,size=10000,replace=TRUE),ncol=100) +pop=rep(1:5,each=20) +fs.dosage(dos,pop=pop) + +dos_match <- matching(dos) + +#### +test_genotypes <- rbind(c(1,1,0,1,1,0), + c(2,1,0,NA,0,0), + c(2,NA,0,0,1,1)) +test_indiv_meta <- data.frame (id=c("a","b","c"), + population = c("pop1","pop1","pop2")) +test_loci <- data.frame(name=paste0("rs",1:6), + chromosome=paste0("chr",c(1,1,1,1,2,2)), + position=as.integer(c(3,5,65,343,23,456)), + genetic_dist = as.integer(rep(0,6)), + allele_ref = c("A","T","C","G","C","T"), + allele_alt = c("T","C", NA,"C","G","A")) + +test_gt <- gen_tibble(x = test_genotypes, loci = test_loci, indiv_meta = test_indiv_meta, quiet = TRUE) + + + +dos_hier_match <- hierfstat::matching(test_genotypes) + +test_fbm <- tidypopgen:::.gt_get_bigsnp(test_gt)$genotypes +test_as <- snp_allele_sharing(test_fbm) + + + +dos <- test_genotypes + +na <- matrix(rep(1,prod(dim(dos))),ncol=ncol(dos)) +ina<-which(is.na(dos)) +na[ina]<-0 +dos[ina]<-1 +Mij <- 1/2 * (1+1/tcrossprod(na) * tcrossprod(dos-1)) +# Mij is the allele sharing matrix diff --git a/data-raw/ideas/fst_gt_compare_to_hier.R b/data-raw/ideas/fst_gt_compare_to_hier.R new file mode 100644 index 00000000..7cba7867 --- /dev/null +++ b/data-raw/ideas/fst_gt_compare_to_hier.R @@ -0,0 +1,111 @@ +test_genotypes <- rbind(c(1,1,0,1,1,0), + c(2,1,0,NA,0,0), + c(2,NA,0,0,1,1), + c(1,0,0,1,0,0), + c(1,2,0,1,2,1), + c(0,0,0,0,NA,1), + c(0,1,1,0,1,NA)) +test_indiv_meta <- data.frame (id=c("a","b","c","d","e","f","g"), + population = c("pop1","pop1","pop2","pop2","pop1","pop3","pop3")) +test_loci <- data.frame(name=paste0("rs",1:6), + chromosome=paste0("chr",c(1,1,1,1,2,2)), + position=as.integer(c(3,5,65,343,23,456)), + genetic_dist = as.integer(rep(0,6)), + allele_ref = c("A","T","C","G","C","T"), + allele_alt = c("T","C", NA,"C","G","A")) + +test_gt <- gen_tibble(x = test_genotypes, loci = test_loci, indiv_meta = test_indiv_meta, quiet = TRUE) +test_gt <- test_gt %>% group_by(population) + +# a developer function to create various count summaries of a population, used to +# compute more complex statistics (e.g. pairwise fst, etc.). +# Specifically, we compute: +# sums_alt sum alleles for alt +# sums_ref sums alleles for ref +# n sums of all alleles +# het_obs observed heterozygosity +# het_exp expected heterozygosity +.gt_pop_freqs <- function(.x){ + counts <- bigstatsr::big_counts( .gt_get_bigsnp(.x)$genotypes, + ind.row =.gt_bigsnp_rows(.x), + ind.col = .gt_bigsnp_cols(.x)) + sums_alt <- apply(counts,2,function(x) x[2]+2*x[3]) + n <- apply(counts,2,function(x) sum(x[1:3])*2) + sums_ref <- n - sums_alt + freq_alt <- sums_alt/n + freq_ref <- 1- freq_alt +# het_count <- apply(counts,2,function(x) x[2]) # This should be simply a row from the counts matrix + het_obs <- apply(counts,2,function(x) x[2]/sum(x[1:3])) + #het_exp <- 2 * sums_alt/n * sums_ref/n + return (list(#sums_alt = sums_alt, + #sums_ref = sums_ref, + freq_alt = freq_alt, + freq_ref = freq_ref, + #het_count = het_count, + n = n, + het_obs = het_obs)) +} + + +pairwise_pop_fst_nei83 <- function(.x, by_locus = FALSE){ + # get the populations + .group_levels = .x %>% group_keys() + # create all combinations + pairwise_combn <- utils::combn(nrow(.group_levels),2) + # vector and matrix to store Fst for total and by locus + Fst_tot <- rep(NA_real_, ncol(pairwise_combn)) + if (by_locus){ + Fst_locus <- matrix(NA_real_, nrow = count_loci(.x), ncol = ncol(pairwise_combn)) + } + # summarise population frequencies + pop_freqs_df <- group_map(.x, .f=~.gt_pop_freqs(.x)) + for (i_col in seq_len(ncol(pairwise_combn))){ + pop1 <- pairwise_combn[1,i_col] + pop2 <- pairwise_combn[2,i_col] + + n <-cbind(pop_freqs_df[[pop1]]$n,pop_freqs_df[[pop2]]$n)/2 + sHo <-cbind(pop_freqs_df[[pop1]]$het_obs,pop_freqs_df[[pop2]]$het_obs) + mHo <- apply(sHo, 1, mean, na.rm = TRUE) + freq_alt <- cbind(pop_freqs_df[[pop1]]$freq_alt, pop_freqs_df[[pop2]]$freq_alt) + freq_ref <- cbind(pop_freqs_df[[pop1]]$freq_ref, pop_freqs_df[[pop2]]$freq_ref) + + # sum of squared frequencies + sp2 <- freq_alt^2+freq_ref^2 + Hs <- (1 - sp2 - sHo/2/n) + Hs <- n/(n - 1) * Hs + np <- apply(n, 1, fun <- function(x) sum(!is.na(x))) + # mean sample size over the populations + mn <- apply(n, 1, fun <- function(x) { + sum(!is.na(x))/sum(1/x[!is.na(x)]) + }) + # mean sum of square frequencies + msp2 <- apply(sp2, 1, mean, na.rm = TRUE) + mp2 <- rowMeans(freq_alt)^2+rowMeans(freq_ref)^2 + mHs <- mn/(mn - 1) * (1 - msp2 - mHo/2/mn) + Ht <- 1 - mp2 + mHs/mn/np - mHo/2/mn/np + + Dst <- Ht - mHs + if (by_locus){ + Fst_locus[,i_col] = Dst/Ht + } + Fst_tot[i_col]<-mean(Dst)/mean(Ht) + } + # format nicely the objects + group_combinations <- cbind(.group_levels[pairwise_combn[1,],],.group_levels[pairwise_combn[2,],]) + names(group_combinations) <- c(paste0(dplyr::group_vars(.x),"_1"),paste0(dplyr::group_vars(.x),"_2")) + Fst_tot <- data.frame(group_combinations,value=Fst_tot) + if (by_locus){ + rownames(Fst_locus)<-loci_names(.x) + colnames(Fst_locus)<- apply(group_combinations,1,function(x)paste(x,collapse = ".")) + } + if (by_locus){ + return(list(Fst_by_locus = Fst_locus, Fst_total = Fst_tot)) + } else{ + return(Fst_tot) + } +} + +pairwise_pop_fst_nei83(test_gt, by_locus = TRUE) + + + diff --git a/data-raw/ideas/fst_hier.R b/data-raw/ideas/fst_hier.R new file mode 100644 index 00000000..82f28be4 --- /dev/null +++ b/data-raw/ideas/fst_hier.R @@ -0,0 +1,121 @@ +## a full break down of the fst function, which includes Nei Fst + +test_genotypes <- rbind(c(1,1,0,1,1,0), + c(2,1,0,NA,0,0), + c(2,NA,0,0,1,1), + c(1,0,0,1,0,0), + c(1,2,0,1,2,1), + c(0,0,0,0,NA,1), + c(0,1,1,0,1,NA)) +test_indiv_meta <- data.frame (id=c("a","b","c","d","e","f","g"), + population = c("pop1","pop1","pop2","pop2","pop1","pop3","pop3")) +test_loci <- data.frame(name=paste0("rs",1:6), + chromosome=paste0("chr",c(1,1,1,1,2,2)), + position=as.integer(c(3,5,65,343,23,456)), + genetic_dist = as.integer(rep(0,6)), + allele_ref = c("A","T","C","G","C","T"), + allele_alt = c("T","C", NA,"C","G","A")) + +test_gt <- gen_tibble(x = test_genotypes, loci = test_loci, indiv_meta = test_indiv_meta, quiet = TRUE) +test_gt <- test_gt %>% group_by(population) +test_sub_gt <- test_gt %>% filter(population%in%c("pop1","pop2")) + +# convert to hierfstat +test_hier <- gt_as_hierfstat(test_sub_gt) + +#hier_basic <- hierfstat::basic.stats(test_hier) +# note that Fstp, FIS and Dest are not simply averages + +#hier_fst_wc <- hierfstat::pairwise.WCfst(test_hier) +#hier_fst_nei <- hierfstat::pairwise.neifst(test_hier) + +######################################################## +data<-test_hier +diploid = TRUE +digits=10 +dum.pop<-FALSE +if (length(table(data[, 1])) < 2){ + data[dim(data)[1] + 1, 1] <- "DumPop" + dum.pop<-TRUE +} +if (dim(data)[2] == 2) + data <- data.frame(data, dummy.loc = data[, 2]) +loc.names <- names(data)[-1] +p <- hierfstat:::pop.freq(data, diploid) +n <- t(hierfstat:::ind.count(data)) +if (diploid) { + dum <- hierfstat::getal.b(data[, -1]) + Ho <- dum[, , 1] == dum[, , 2] + sHo <- (1 - t(apply(Ho, 2, fun <- function(x) tapply(x, + data[, 1], mean, na.rm = TRUE)))) + mHo <- apply(sHo, 1, mean, na.rm = TRUE) +} else { + sHo <- NA + mHo <- NA +} +sp2 <- lapply(p, fun <- function(x) apply(x, 2, fun2 <- function(x) sum(x^2))) # cols sums of squares +sp2 <- matrix(unlist(sp2), nrow = dim(data[, -1])[2], byrow = TRUE) +if (diploid) { + Hs <- (1 - sp2 - sHo/2/n) + Hs <- n/(n - 1) * Hs + Fis = 1 - sHo/Hs +} else { + Hs <- n/(n - 1) * (1 - sp2) + Fis <- NA +} +np <- apply(n, 1, fun <- function(x) sum(!is.na(x))) +mn <- apply(n, 1, fun <- function(x) { + np <- sum(!is.na(x)) + np/sum(1/x[!is.na(x)]) +}) +msp2 <- apply(sp2, 1, mean, na.rm = TRUE) +mp <- lapply(p, fun <- function(x) apply(x, 1, mean, na.rm = TRUE)) +mp2 <- unlist(lapply(mp, fun1 <- function(x) sum(x^2))) +if (diploid) { + mHs <- mn/(mn - 1) * (1 - msp2 - mHo/2/mn) + Ht <- 1 - mp2 + mHs/mn/np - mHo/2/mn/np + mFis = 1 - mHo/mHs +} else { + mHs <- mn/(mn - 1) * (1 - msp2) + Ht <- 1 - mp2 + mHs/mn/np + mFis <- NA +} +Dst <- Ht - mHs +Dstp <- np/(np - 1) * Dst +Htp = mHs + Dstp +Fst = Dst/Ht +Fstp = Dstp/Htp +Dest <- Dstp/(1 - mHs) +res <- data.frame(cbind(mHo, mHs, Ht, Dst, Htp, Dstp, Fst, + Fstp, mFis, Dest)) +names(res) <- c("Ho", "Hs", "Ht", "Dst", "Htp", "Dstp", + "Fst", "Fstp", "Fis", "Dest") +if (diploid) { + rownames(sHo) <- loc.names + rownames(Fis) <- loc.names +} +is.na(res) <- do.call(cbind, lapply(res, is.infinite)) +overall <- apply(res, 2, mean, na.rm = TRUE) +overall[7] <- overall[4]/overall[3] +overall[8] <- overall[6]/overall[5] +overall[9] <- 1 - overall[1]/overall[2] +overall[10] <- overall[6]/(1 - overall[2]) +names(overall) <- names(res) +if (!diploid) { + overall[c(1, 9)] <- NA +} +if(dum.pop){ + ToBeRemoved<-which(dimnames(Hs)[[2]]=="DumPop") + n<-n[,-ToBeRemoved,drop=FALSE] + Hs<-Hs[,-ToBeRemoved,drop=FALSE] + if (diploid) sHo<-sHo[,-ToBeRemoved,drop=FALSE] + Fis<-Fis[,-ToBeRemoved,drop=FALSE] + p<-lapply(p,function(x) x[,-ToBeRemoved,drop=FALSE]) +} +all.res <- list(n.ind.samp = n, pop.freq = lapply(p, round, + digits), Ho = round(sHo, digits), Hs = round(Hs, digits), + Fis = round(Fis, digits), perloc = round(res, digits), + overall = round(overall, digits)) +class(all.res) <- "basic.stats" +all.res + diff --git a/data-raw/ideas/fst_pairwise_wc_nei_something_is_wrong.R b/data-raw/ideas/fst_pairwise_wc_nei_something_is_wrong.R new file mode 100644 index 00000000..4fafde10 --- /dev/null +++ b/data-raw/ideas/fst_pairwise_wc_nei_something_is_wrong.R @@ -0,0 +1,93 @@ + +pairwise_pop_fst_wc <- function(.x, by_locus=FALSE){ + + message("this function is not properly tested yet!!!") + message("if you have time, test the results against something like hierfstat and create a unit test") + # get the populations + .group_levels = .x %>% group_keys() + # create all combinations + pairwise_combn <- utils::combn(nrow(.group_levels),2) + # vector and matrix to store Fst for total and by locus + Fst_tot <- rep(NA_real_, ncol(pairwise_combn)) + if (by_locus){ + Fst_locus <- matrix(NA_real_, nrow = count_loci(.x), ncol = ncol(pairwise_combn)) + } + # summarise population frequencies + pop_freqs_df <- group_map(.x, .f=~.gt_pop_freqs(.x)) + for (i_col in seq_len(ncol(pairwise_combn))){ + pop1 <- pairwise_combn[1,i_col] + pop2 <- pairwise_combn[2,i_col] + n1 <- pop_freqs_df[[pop1]]$n + n2 <- pop_freqs_df[[pop2]]$n + p1 <- pop_freqs_df[[pop1]]$freq_alt + p2 <- pop_freqs_df[[pop2]]$freq_alt + q1 <- pop_freqs_df[[pop1]]$freq_ref + q2 <- pop_freqs_df[[pop2]]$freq_ref + a <- (n1*n2)/(n1+n2) + b <- (1/(n1+n2-2))*((n1*p1*q1)+(n2*p2*q2)) + c <- (p1-p2)^2 + numerator <- 2*a*b + denominator <- a*c+(2*a-1)*b + if (by_locus){ + Fst_locus[,i_col] = 1-numerator/denominator + } + Fst_tot[i_col]<-1-mean(numerator)/mean(denominator) + } + # format nicely the objects + group_combinations <- cbind(.group_levels[pairwise_combn[1,],],.group_levels[pairwise_combn[2,],]) + names(group_combinations) <- c(paste0(dplyr::group_vars(.x),"_1"),paste0(dplyr::group_vars(.x),"_2")) + Fst_tot <- tibble::tibble(group_combinations,value=Fst_tot) + if (by_locus){ + rownames(Fst_locus)<-loci_names(.x) + colnames(Fst_locus)<- apply(group_combinations,1,function(x)paste(x,collapse = ".")) + } + if (by_locus){ + return(list(Fst_by_locus = Fst_locus, Fst = Fst_tot)) + } else{ + return(Fst_tot) + } +} + +pairwise_pop_fst_nei86 <- function(.x, by_locus=FALSE){ + + message("this function is not properly tested yet!!!") + message("if you have time, test the results against something like hierfstat and create a unit test") + # get the populations + .group_levels = .x %>% group_keys() + # create all combinations + pairwise_combn <- utils::combn(nrow(.group_levels),2) + # vector and matrix to store Fst for total and by locus + Fst_tot <- rep(NA_real_, ncol(pairwise_combn)) + if (by_locus){ + Fst_locus <- matrix(NA_real_, nrow = count_loci(.x), ncol = ncol(pairwise_combn)) + } + # summarise population frequencies + pop_freqs_df <- group_map(.x, .f=~.gt_pop_freqs(.x)) + for (i_col in seq_len(ncol(pairwise_combn))){ + pop1 <- pairwise_combn[1,i_col] + pop2 <- pairwise_combn[2,i_col] + p1 <- pop_freqs_df[[pop1]]$freq_alt + p2 <- pop_freqs_df[[pop2]]$freq_alt + pbar <- (p1+p2)/2 + numerator <- ((p1-p2)^2) + denominator <- (2*pbar*(1-pbar)) + if (by_locus){ + Fst_locus[,i_col] = numerator/denominator + } + Fst_tot[i_col]<-mean(numerator)/mean(denominator) + } + # format nicely the objects + group_combinations <- cbind(.group_levels[pairwise_combn[1,],],.group_levels[pairwise_combn[2,],]) + names(group_combinations) <- c(paste0(dplyr::group_vars(.x),"_1"),paste0(dplyr::group_vars(.x),"_2")) + Fst_tot <- tibble::tibble(group_combinations,value=Fst_tot) + if (by_locus){ + rownames(Fst_locus)<-loci_names(.x) + colnames(Fst_locus)<- apply(group_combinations,1,function(x)paste(x,collapse = ".")) + } + if (by_locus){ + return(list(Fst_by_locus = Fst_locus, Fst = Fst_tot)) + } else{ + return(Fst_tot) + } +} + diff --git a/data-raw/ideas/fst_wc.R b/data-raw/ideas/fst_wc.R new file mode 100644 index 00000000..4d583c1b --- /dev/null +++ b/data-raw/ideas/fst_wc.R @@ -0,0 +1,263 @@ +test_genotypes <- rbind(c(1,1,0,1,1,0), + c(2,1,0,NA,0,0), + c(2,NA,0,0,1,1), + c(1,0,0,1,0,0), + c(1,2,0,1,2,1), + c(0,0,0,0,NA,1), + c(0,1,1,0,1,NA)) +test_indiv_meta <- data.frame (id=c("a","b","c","d","e","f","g"), + population = c("pop1","pop1","pop2","pop2","pop1","pop3","pop3")) +test_loci <- data.frame(name=paste0("rs",1:6), + chromosome=paste0("chr",c(1,1,1,1,2,2)), + position=as.integer(c(3,5,65,343,23,456)), + genetic_dist = as.integer(rep(0,6)), + allele_ref = c("A","T","C","G","C","T"), + allele_alt = c("T","C", NA,"C","G","A")) + +test_gt <- gen_tibble(x = test_genotypes, loci = test_loci, indiv_meta = test_indiv_meta, quiet = TRUE) +test_gt <- test_gt %>% group_by(population) + +# convert to hierfstat +test_hier <- gt_as_hierfstat(test_gt) + +hier_basic <- hierfstat::basic.stats(test_hier) +# note that Fstp, FIS and Dest are not simply averages + +hier_fst_wc <- hierfstat::pairwise.WCfst(test_hier) +hier_fst_nei <- hierfstat::pairwise.neifst(test_hier) + +# a developer function to create various count summaries of a population, used to +# compute more complex statistics (e.g. pairwise fst, etc.). +# Specifically, we compute: +# sums_alt sum alleles for alt +# sums_ref sums alleles for ref +# n sums of all alleles +# het_obs observed heterozygosity +# het_exp expected heterozygosity +.gt_pop_counts <- function(.x){ + counts <- bigstatsr::big_counts( .gt_get_bigsnp(.x)$genotypes, + ind.row =.gt_bigsnp_rows(.x), + ind.col = .gt_bigsnp_cols(.x)) + sums_alt <- apply(counts,2,function(x) x[2]+2*x[3]) + n <- apply(counts,2,function(x) sum(x[1:3])*2) + sums_ref <- n - sums_alt + freq_alt <- sums_alt/n + freq_ref <- 1- freq_alt + het_count <- apply(counts,2,function(x) x[2]) # This should be simply a row from the counts matrix + het_obs <- apply(counts,2,function(x) x[2]/sum(x[1:3])) + het_exp <- 2 * sums_alt/n * sums_ref/n + return (list(sums_alt = sums_alt, + sums_ref = sums_ref, + freq_alt = freq_alt, + freq_ref = freq_ref, + het_count = het_count, + n = n, + het_obs = het_obs, + het_exp = het_exp)) +} + +pairwise_pop_fst_nei73 <- function(.x, by_locus = FALSE){ + browser() + pop_counts_df <- group_map(.x, .f=~.gt_pop_counts(.x)) + # get the grouping column, and create all pairwise combination of indices + .group_levels = .x %>% group_keys() + pairwise_combn <- utils::combn(nrow(.group_levels),2) + n_loci <- count_loci(.x) + Hs_pair <- matrix(NA_real_, nrow = n_loci, ncol = ncol(pairwise_combn)) + Ht_pair <- matrix(NA_real_, nrow = n_loci, ncol = ncol(pairwise_combn)) + for (i_col in seq_len(ncol(pairwise_combn))){ + pop1 <- pairwise_combn[1,i_col] + pop2 <- pairwise_combn[2,i_col] + Hs_pair[,i_col] <- (pop_counts_df[[pop1]]$het_exp + pop_counts_df[[pop2]]$het_exp)/2 + # Ht_pair is 1-p_bar^2 - q_bar^2 + Ht_pair[, i_col] <- + 1 - ((pop_counts_df[[pop1]]$sums_alt + pop_counts_df[[pop2]]$sums_alt) / + (pop_counts_df[[pop1]]$n + pop_counts_df[[pop2]]$n)) ^ 2 - + ((pop_counts_df[[pop1]]$sums_ref + pop_counts_df[[pop2]]$sums_ref) / + (pop_counts_df[[pop1]]$n + pop_counts_df[[pop2]]$n)) ^ 2 + } + if (by_locus){ + 1-(Hs_pair/Ht_pair) + # tidy it properly + #TODO + } else { + 1-(colSums(Hs_pair,na.rm=TRUE)/colSums(Ht_pair,na.rm=TRUE)) + # TODO TIDY IT PROPERLY + } +} + +pairwise_pop_fst_nei83 <- function(.x, by_locus = FALSE){ + pop_counts_df <- group_map(.x, .f=~.gt_pop_counts(.x)) + # get the grouping column, and create all pairwise combination of indices + .group_levels = .x %>% group_keys() + pairwise_combn <- utils::combn(nrow(.group_levels),2) + n_loci <- count_loci(.x) +# Hs_pair <- matrix(NA_real_, nrow = n_loci, ncol = ncol(pairwise_combn)) +# Ht_pair <- matrix(NA_real_, nrow = n_loci, ncol = ncol(pairwise_combn)) + for (i_col in seq_len(ncol(pairwise_combn))){ + pop1 <- pairwise_combn[1,i_col] + pop2 <- pairwise_combn[2,i_col] + Hs_pair <- (pop_counts_df[[pop1]]$het_count + pop_counts_df[[pop2]]$het_count)/ + (pop_counts_df[[pop1]]$n + pop_counts_df[[pop2]]$n) + # Ht_pair is 1-p_bar^2 - q_bar^2 + Ht_pair[, i_col] <- + 1 - ((pop_counts_df[[pop1]]$sums_alt + pop_counts_df[[pop2]]$sums_alt) / + (pop_counts_df[[pop1]]$n + pop_counts_df[[pop2]]$n)) ^ 2 - + ((pop_counts_df[[pop1]]$sums_ref + pop_counts_df[[pop2]]$sums_ref) / + (pop_counts_df[[pop1]]$n + pop_counts_df[[pop2]]$n)) ^ 2 + Nar <- n <- 2.0 / ((1.0 / (pop_counts_df[[pop1]]$n/2.0)) + (1.0 / (pop_counts_df[[pop2]]$n/2.0))) + Hs_pair_est=Hs_pair*((2.0*Nar)/(2.0*Nar-1)) + Ht_pair_est=Ht_pair+(Hs_pair_est/(4.0*Nar)) + } + if (by_locus){ + 1-(Hs_pair_est/Ht_pair_est) + # tidy it properly + #TODO + } else { + 1-(colSums(Hs_pair_est,na.rm=TRUE)/colSums(Ht_pair_est,na.rm=TRUE)) + # TODO TIDY IT PROPERLY + } +} + + + +pairwise_pop_fst_nei73(test_gt) + +pop1<- test_gt %>%filter(population=="pop1") +pop1_hier <- gt_as_hierfstat(pop1) + +test_gt%>%group_by(population)->.x +pop_counts_df <- group_map(.x, .f=~.gt_pop_counts(.x)) + +hierfstat::basic.stats(test_hier)->foo + +######################################################## +data<-test_sub_hier +diploid = TRUE +dum.pop<-FALSE +if (length(table(data[, 1])) < 2){ + data[dim(data)[1] + 1, 1] <- "DumPop" + dum.pop<-TRUE +} +if (dim(data)[2] == 2) + data <- data.frame(data, dummy.loc = data[, 2]) +loc.names <- names(data)[-1] +p <- hierfstat:::pop.freq(data, diploid) +n <- t(hierfstat:::ind.count(data)) +if (diploid) { + dum <- hierfstat::getal.b(data[, -1]) + Ho <- dum[, , 1] == dum[, , 2] + sHo <- (1 - t(apply(Ho, 2, fun <- function(x) tapply(x, + data[, 1], mean, na.rm = TRUE)))) + mHo <- apply(sHo, 1, mean, na.rm = TRUE) +} else { + sHo <- NA + mHo <- NA +} +sp2 <- lapply(p, fun <- function(x) apply(x, 2, fun2 <- function(x) sum(x^2))) # cols sums of squares +sp2 <- matrix(unlist(sp2), nrow = dim(data[, -1])[2], byrow = TRUE) +if (diploid) { + Hs <- (1 - sp2 - sHo/2/n) + Hs <- n/(n - 1) * Hs + Fis = 1 - sHo/Hs +} else { + Hs <- n/(n - 1) * (1 - sp2) + Fis <- NA +} +np <- apply(n, 1, fun <- function(x) sum(!is.na(x))) +mn <- apply(n, 1, fun <- function(x) { + np <- sum(!is.na(x)) + np/sum(1/x[!is.na(x)]) +}) +msp2 <- apply(sp2, 1, mean, na.rm = TRUE) +mp <- lapply(p, fun <- function(x) apply(x, 1, mean, na.rm = TRUE)) +mp2 <- unlist(lapply(mp, fun1 <- function(x) sum(x^2))) +if (diploid) { + mHs <- mn/(mn - 1) * (1 - msp2 - mHo/2/mn) + Ht <- 1 - mp2 + mHs/mn/np - mHo/2/mn/np + mFis = 1 - mHo/mHs +} else { + mHs <- mn/(mn - 1) * (1 - msp2) + Ht <- 1 - mp2 + mHs/mn/np + mFis <- NA +} +Dst <- Ht - mHs +Dstp <- np/(np - 1) * Dst +Htp = mHs + Dstp +Fst = Dst/Ht +Fstp = Dstp/Htp +Dest <- Dstp/(1 - mHs) +res <- data.frame(cbind(mHo, mHs, Ht, Dst, Htp, Dstp, Fst, + Fstp, mFis, Dest)) +names(res) <- c("Ho", "Hs", "Ht", "Dst", "Htp", "Dstp", + "Fst", "Fstp", "Fis", "Dest") +if (diploid) { + rownames(sHo) <- loc.names + rownames(Fis) <- loc.names +} +is.na(res) <- do.call(cbind, lapply(res, is.infinite)) +overall <- apply(res, 2, mean, na.rm = TRUE) +overall[7] <- overall[4]/overall[3] +overall[8] <- overall[6]/overall[5] +overall[9] <- 1 - overall[1]/overall[2] +overall[10] <- overall[6]/(1 - overall[2]) +names(overall) <- names(res) +if (!diploid) { + overall[c(1, 9)] <- NA +} +if(dum.pop){ + ToBeRemoved<-which(dimnames(Hs)[[2]]=="DumPop") + n<-n[,-ToBeRemoved,drop=FALSE] + Hs<-Hs[,-ToBeRemoved,drop=FALSE] + if (diploid) sHo<-sHo[,-ToBeRemoved,drop=FALSE] + Fis<-Fis[,-ToBeRemoved,drop=FALSE] + p<-lapply(p,function(x) x[,-ToBeRemoved,drop=FALSE]) +} +all.res <- list(n.ind.samp = n, pop.freq = lapply(p, round, + digits), Ho = round(sHo, digits), Hs = round(Hs, digits), + Fis = round(Fis, digits), perloc = round(res, digits), + overall = round(overall, digits)) +class(all.res) <- "basic.stats" +all.res + + + +## steps +# create a hierfstat object with just two populations +test_sub_gt <- test_gt %>% filter(population%in%c("pop1","pop2")) +# contrast our estimates with Jerome's estimates, making sure that we use all the appropriate corrections as implemented in hierfstat +test_sub_hier <- test_sub_gt %>% gt_as_hierfstat() +# rename the dataset to the internal name in the functions to follow the estimates +data <- test_sub_hier +.x <- test_sub_gt %>% group_by(population) + +n <- do.call(cbind, lapply(pop_counts_df, function(X) X[["n"]])) +sHo <- do.call(cbind, lapply(pop_counts_df, function(X) X[["het_obs"]])) +# sum of squared frequencies +sp2 <- lapply(pop_counts_df, fun <- function(x) ((x$freq_alt)^2+(x$freq_ref)^2)) +sp2 <- matrix(unlist(sp2, use.names = FALSE), ncol=2, byrow = FALSE) + +# square of mean frequency +mp <- lapply(p, fun <- function(x) apply(x, 1, mean, na.rm = TRUE)) +sp2 <- lapply(pop_counts_df, fun <- function(x) ((x$freq_alt)+(x$freq_ref))/2) + +mp2 <- unlist(lapply(mp, fun1 <- function(x) sum(x^2))) + +Hs <- (1 - sp2 - sHo/2/n) +Hs <- n/(n - 1) * Hs + +np <- apply(n, 1, fun <- function(x) sum(!is.na(x))) +mn <- apply(n, 1, fun <- function(x) { + np <- sum(!is.na(x)) + np/sum(1/x[!is.na(x)]) +}) +msp2 <- apply(sp2, 1, mean, na.rm = TRUE) +mp <- lapply(p, fun <- function(x) apply(x, 1, mean, na.rm = TRUE)) +mp2 <- unlist(lapply(mp, fun1 <- function(x) sum(x^2))) +mHs <- mn/(mn - 1) * (1 - msp2 - mHo/2/mn) +Ht <- 1 - mp2 + mHs/mn/np - mHo/2/mn/np + +Dst <- Ht - mHs +Dstp <- np/(np - 1) * Dst +Htp = mHs + Dstp +Fst = Dst/Ht diff --git a/data-raw/ideas/fst_wc2.R b/data-raw/ideas/fst_wc2.R new file mode 100644 index 00000000..4d583c1b --- /dev/null +++ b/data-raw/ideas/fst_wc2.R @@ -0,0 +1,263 @@ +test_genotypes <- rbind(c(1,1,0,1,1,0), + c(2,1,0,NA,0,0), + c(2,NA,0,0,1,1), + c(1,0,0,1,0,0), + c(1,2,0,1,2,1), + c(0,0,0,0,NA,1), + c(0,1,1,0,1,NA)) +test_indiv_meta <- data.frame (id=c("a","b","c","d","e","f","g"), + population = c("pop1","pop1","pop2","pop2","pop1","pop3","pop3")) +test_loci <- data.frame(name=paste0("rs",1:6), + chromosome=paste0("chr",c(1,1,1,1,2,2)), + position=as.integer(c(3,5,65,343,23,456)), + genetic_dist = as.integer(rep(0,6)), + allele_ref = c("A","T","C","G","C","T"), + allele_alt = c("T","C", NA,"C","G","A")) + +test_gt <- gen_tibble(x = test_genotypes, loci = test_loci, indiv_meta = test_indiv_meta, quiet = TRUE) +test_gt <- test_gt %>% group_by(population) + +# convert to hierfstat +test_hier <- gt_as_hierfstat(test_gt) + +hier_basic <- hierfstat::basic.stats(test_hier) +# note that Fstp, FIS and Dest are not simply averages + +hier_fst_wc <- hierfstat::pairwise.WCfst(test_hier) +hier_fst_nei <- hierfstat::pairwise.neifst(test_hier) + +# a developer function to create various count summaries of a population, used to +# compute more complex statistics (e.g. pairwise fst, etc.). +# Specifically, we compute: +# sums_alt sum alleles for alt +# sums_ref sums alleles for ref +# n sums of all alleles +# het_obs observed heterozygosity +# het_exp expected heterozygosity +.gt_pop_counts <- function(.x){ + counts <- bigstatsr::big_counts( .gt_get_bigsnp(.x)$genotypes, + ind.row =.gt_bigsnp_rows(.x), + ind.col = .gt_bigsnp_cols(.x)) + sums_alt <- apply(counts,2,function(x) x[2]+2*x[3]) + n <- apply(counts,2,function(x) sum(x[1:3])*2) + sums_ref <- n - sums_alt + freq_alt <- sums_alt/n + freq_ref <- 1- freq_alt + het_count <- apply(counts,2,function(x) x[2]) # This should be simply a row from the counts matrix + het_obs <- apply(counts,2,function(x) x[2]/sum(x[1:3])) + het_exp <- 2 * sums_alt/n * sums_ref/n + return (list(sums_alt = sums_alt, + sums_ref = sums_ref, + freq_alt = freq_alt, + freq_ref = freq_ref, + het_count = het_count, + n = n, + het_obs = het_obs, + het_exp = het_exp)) +} + +pairwise_pop_fst_nei73 <- function(.x, by_locus = FALSE){ + browser() + pop_counts_df <- group_map(.x, .f=~.gt_pop_counts(.x)) + # get the grouping column, and create all pairwise combination of indices + .group_levels = .x %>% group_keys() + pairwise_combn <- utils::combn(nrow(.group_levels),2) + n_loci <- count_loci(.x) + Hs_pair <- matrix(NA_real_, nrow = n_loci, ncol = ncol(pairwise_combn)) + Ht_pair <- matrix(NA_real_, nrow = n_loci, ncol = ncol(pairwise_combn)) + for (i_col in seq_len(ncol(pairwise_combn))){ + pop1 <- pairwise_combn[1,i_col] + pop2 <- pairwise_combn[2,i_col] + Hs_pair[,i_col] <- (pop_counts_df[[pop1]]$het_exp + pop_counts_df[[pop2]]$het_exp)/2 + # Ht_pair is 1-p_bar^2 - q_bar^2 + Ht_pair[, i_col] <- + 1 - ((pop_counts_df[[pop1]]$sums_alt + pop_counts_df[[pop2]]$sums_alt) / + (pop_counts_df[[pop1]]$n + pop_counts_df[[pop2]]$n)) ^ 2 - + ((pop_counts_df[[pop1]]$sums_ref + pop_counts_df[[pop2]]$sums_ref) / + (pop_counts_df[[pop1]]$n + pop_counts_df[[pop2]]$n)) ^ 2 + } + if (by_locus){ + 1-(Hs_pair/Ht_pair) + # tidy it properly + #TODO + } else { + 1-(colSums(Hs_pair,na.rm=TRUE)/colSums(Ht_pair,na.rm=TRUE)) + # TODO TIDY IT PROPERLY + } +} + +pairwise_pop_fst_nei83 <- function(.x, by_locus = FALSE){ + pop_counts_df <- group_map(.x, .f=~.gt_pop_counts(.x)) + # get the grouping column, and create all pairwise combination of indices + .group_levels = .x %>% group_keys() + pairwise_combn <- utils::combn(nrow(.group_levels),2) + n_loci <- count_loci(.x) +# Hs_pair <- matrix(NA_real_, nrow = n_loci, ncol = ncol(pairwise_combn)) +# Ht_pair <- matrix(NA_real_, nrow = n_loci, ncol = ncol(pairwise_combn)) + for (i_col in seq_len(ncol(pairwise_combn))){ + pop1 <- pairwise_combn[1,i_col] + pop2 <- pairwise_combn[2,i_col] + Hs_pair <- (pop_counts_df[[pop1]]$het_count + pop_counts_df[[pop2]]$het_count)/ + (pop_counts_df[[pop1]]$n + pop_counts_df[[pop2]]$n) + # Ht_pair is 1-p_bar^2 - q_bar^2 + Ht_pair[, i_col] <- + 1 - ((pop_counts_df[[pop1]]$sums_alt + pop_counts_df[[pop2]]$sums_alt) / + (pop_counts_df[[pop1]]$n + pop_counts_df[[pop2]]$n)) ^ 2 - + ((pop_counts_df[[pop1]]$sums_ref + pop_counts_df[[pop2]]$sums_ref) / + (pop_counts_df[[pop1]]$n + pop_counts_df[[pop2]]$n)) ^ 2 + Nar <- n <- 2.0 / ((1.0 / (pop_counts_df[[pop1]]$n/2.0)) + (1.0 / (pop_counts_df[[pop2]]$n/2.0))) + Hs_pair_est=Hs_pair*((2.0*Nar)/(2.0*Nar-1)) + Ht_pair_est=Ht_pair+(Hs_pair_est/(4.0*Nar)) + } + if (by_locus){ + 1-(Hs_pair_est/Ht_pair_est) + # tidy it properly + #TODO + } else { + 1-(colSums(Hs_pair_est,na.rm=TRUE)/colSums(Ht_pair_est,na.rm=TRUE)) + # TODO TIDY IT PROPERLY + } +} + + + +pairwise_pop_fst_nei73(test_gt) + +pop1<- test_gt %>%filter(population=="pop1") +pop1_hier <- gt_as_hierfstat(pop1) + +test_gt%>%group_by(population)->.x +pop_counts_df <- group_map(.x, .f=~.gt_pop_counts(.x)) + +hierfstat::basic.stats(test_hier)->foo + +######################################################## +data<-test_sub_hier +diploid = TRUE +dum.pop<-FALSE +if (length(table(data[, 1])) < 2){ + data[dim(data)[1] + 1, 1] <- "DumPop" + dum.pop<-TRUE +} +if (dim(data)[2] == 2) + data <- data.frame(data, dummy.loc = data[, 2]) +loc.names <- names(data)[-1] +p <- hierfstat:::pop.freq(data, diploid) +n <- t(hierfstat:::ind.count(data)) +if (diploid) { + dum <- hierfstat::getal.b(data[, -1]) + Ho <- dum[, , 1] == dum[, , 2] + sHo <- (1 - t(apply(Ho, 2, fun <- function(x) tapply(x, + data[, 1], mean, na.rm = TRUE)))) + mHo <- apply(sHo, 1, mean, na.rm = TRUE) +} else { + sHo <- NA + mHo <- NA +} +sp2 <- lapply(p, fun <- function(x) apply(x, 2, fun2 <- function(x) sum(x^2))) # cols sums of squares +sp2 <- matrix(unlist(sp2), nrow = dim(data[, -1])[2], byrow = TRUE) +if (diploid) { + Hs <- (1 - sp2 - sHo/2/n) + Hs <- n/(n - 1) * Hs + Fis = 1 - sHo/Hs +} else { + Hs <- n/(n - 1) * (1 - sp2) + Fis <- NA +} +np <- apply(n, 1, fun <- function(x) sum(!is.na(x))) +mn <- apply(n, 1, fun <- function(x) { + np <- sum(!is.na(x)) + np/sum(1/x[!is.na(x)]) +}) +msp2 <- apply(sp2, 1, mean, na.rm = TRUE) +mp <- lapply(p, fun <- function(x) apply(x, 1, mean, na.rm = TRUE)) +mp2 <- unlist(lapply(mp, fun1 <- function(x) sum(x^2))) +if (diploid) { + mHs <- mn/(mn - 1) * (1 - msp2 - mHo/2/mn) + Ht <- 1 - mp2 + mHs/mn/np - mHo/2/mn/np + mFis = 1 - mHo/mHs +} else { + mHs <- mn/(mn - 1) * (1 - msp2) + Ht <- 1 - mp2 + mHs/mn/np + mFis <- NA +} +Dst <- Ht - mHs +Dstp <- np/(np - 1) * Dst +Htp = mHs + Dstp +Fst = Dst/Ht +Fstp = Dstp/Htp +Dest <- Dstp/(1 - mHs) +res <- data.frame(cbind(mHo, mHs, Ht, Dst, Htp, Dstp, Fst, + Fstp, mFis, Dest)) +names(res) <- c("Ho", "Hs", "Ht", "Dst", "Htp", "Dstp", + "Fst", "Fstp", "Fis", "Dest") +if (diploid) { + rownames(sHo) <- loc.names + rownames(Fis) <- loc.names +} +is.na(res) <- do.call(cbind, lapply(res, is.infinite)) +overall <- apply(res, 2, mean, na.rm = TRUE) +overall[7] <- overall[4]/overall[3] +overall[8] <- overall[6]/overall[5] +overall[9] <- 1 - overall[1]/overall[2] +overall[10] <- overall[6]/(1 - overall[2]) +names(overall) <- names(res) +if (!diploid) { + overall[c(1, 9)] <- NA +} +if(dum.pop){ + ToBeRemoved<-which(dimnames(Hs)[[2]]=="DumPop") + n<-n[,-ToBeRemoved,drop=FALSE] + Hs<-Hs[,-ToBeRemoved,drop=FALSE] + if (diploid) sHo<-sHo[,-ToBeRemoved,drop=FALSE] + Fis<-Fis[,-ToBeRemoved,drop=FALSE] + p<-lapply(p,function(x) x[,-ToBeRemoved,drop=FALSE]) +} +all.res <- list(n.ind.samp = n, pop.freq = lapply(p, round, + digits), Ho = round(sHo, digits), Hs = round(Hs, digits), + Fis = round(Fis, digits), perloc = round(res, digits), + overall = round(overall, digits)) +class(all.res) <- "basic.stats" +all.res + + + +## steps +# create a hierfstat object with just two populations +test_sub_gt <- test_gt %>% filter(population%in%c("pop1","pop2")) +# contrast our estimates with Jerome's estimates, making sure that we use all the appropriate corrections as implemented in hierfstat +test_sub_hier <- test_sub_gt %>% gt_as_hierfstat() +# rename the dataset to the internal name in the functions to follow the estimates +data <- test_sub_hier +.x <- test_sub_gt %>% group_by(population) + +n <- do.call(cbind, lapply(pop_counts_df, function(X) X[["n"]])) +sHo <- do.call(cbind, lapply(pop_counts_df, function(X) X[["het_obs"]])) +# sum of squared frequencies +sp2 <- lapply(pop_counts_df, fun <- function(x) ((x$freq_alt)^2+(x$freq_ref)^2)) +sp2 <- matrix(unlist(sp2, use.names = FALSE), ncol=2, byrow = FALSE) + +# square of mean frequency +mp <- lapply(p, fun <- function(x) apply(x, 1, mean, na.rm = TRUE)) +sp2 <- lapply(pop_counts_df, fun <- function(x) ((x$freq_alt)+(x$freq_ref))/2) + +mp2 <- unlist(lapply(mp, fun1 <- function(x) sum(x^2))) + +Hs <- (1 - sp2 - sHo/2/n) +Hs <- n/(n - 1) * Hs + +np <- apply(n, 1, fun <- function(x) sum(!is.na(x))) +mn <- apply(n, 1, fun <- function(x) { + np <- sum(!is.na(x)) + np/sum(1/x[!is.na(x)]) +}) +msp2 <- apply(sp2, 1, mean, na.rm = TRUE) +mp <- lapply(p, fun <- function(x) apply(x, 1, mean, na.rm = TRUE)) +mp2 <- unlist(lapply(mp, fun1 <- function(x) sum(x^2))) +mHs <- mn/(mn - 1) * (1 - msp2 - mHo/2/mn) +Ht <- 1 - mp2 + mHs/mn/np - mHo/2/mn/np + +Dst <- Ht - mHs +Dstp <- np/(np - 1) * Dst +Htp = mHs + Dstp +Fst = Dst/Ht diff --git a/data-raw/ideas/fst_within_from_bigsnpr.R b/data-raw/ideas/fst_within_from_bigsnpr.R new file mode 100644 index 00000000..9ca96bad --- /dev/null +++ b/data-raw/ideas/fst_within_from_bigsnpr.R @@ -0,0 +1,16 @@ + +# this is equivalent to --fst --within +# TODO this needs to be formatted in a manner similar to Hudson fst +pairwise_pop_fst_wc <- function(.x, by_locus=FALSE){ + # simple function to create a dataframe with af and N (allele freq and number of valid alleles) + make_ac_df <- function(x){ + n_tot <- nrow(x)*2 + x %>% reframe(af = loci_maf(x),N= n_tot - loci_missingness(x, as_counts=TRUE)*2) + } + ac_list <- group_map(.x, .f=~make_ac_df(.x)) + browser() + bigsnpr::snp_fst(ac_list,overall=!by_locus) + +} + + diff --git a/data-raw/ideas/gt_roh.R b/data-raw/ideas/gt_roh.R index 42f09c19..cd81bfd6 100644 --- a/data-raw/ideas/gt_roh.R +++ b/data-raw/ideas/gt_roh.R @@ -84,7 +84,7 @@ gt_roh <- function(x, window_size = 15, threshold = 0.05, # naively process it by row (the parallelism is implemented within individual) # access time is horrible, but I don't think this is the bottleneck # it needs some profiling - X <- gt_get_bigsnp(x)$genotypes # pointer for the FBM + X <- .gt_get_bigsnp(x)$genotypes # pointer for the FBM for (i in seq_len(nrow(x))){ this_genotype <- X[i,] this_indiv <- list(FID=groups[i], IID=x$id[i]) diff --git a/data-raw/ideas/hierfstat_summary_stats.R b/data-raw/ideas/hierfstat_summary_stats.R new file mode 100644 index 00000000..7b96187f --- /dev/null +++ b/data-raw/ideas/hierfstat_summary_stats.R @@ -0,0 +1,13 @@ +# hierfstat notes +fis.dosage(dos_hier_match,matching=TRUE, pop=test_indiv_meta$population) + +fst.dosage(dos_hier_match,matching=TRUE, pop=test_indiv_meta$population) + +# these return a vector of n populations plus a global value +# write a function that returns the n vector, and add a parameter that allows the inclusion +# of the global value + + +## For Hudson Fst, we could check against: +# https://www.rdocumentation.org/packages/KRIS/versions/1.1.6/topics/fst.hudson +# also have a look at fst4pg diff --git a/data-raw/ideas/ibd_r.R b/data-raw/ideas/ibd_r.R index de4f5ca1..30400181 100644 --- a/data-raw/ideas/ibd_r.R +++ b/data-raw/ideas/ibd_r.R @@ -1,108 +1,160 @@ -# ibd with matrix operations - -# dataset -test_indiv_meta <- data.frame (id=c("a","b","c"), - population = c("pop1","pop1","pop2")) -test_genotypes <- rbind(c(1,1,0,1,0,0), - c(2,1,0,0,0,0), - c(2,2,0,0,1,1)) -test_loci <- data.frame(name=paste0("rs",1:6), - chromosome=paste0("chr",c(1,1,1,1,2,2)), - position=as.integer(c(3,5,65,343,23,456)), - genetic_dist = as.integer(rep(0,6)), - allele_ref = c("A","T","C","G","C","T"), - allele_alt = c("T","C", NA,"C","G","A")) -bed_path <- gt_write_bed_from_dfs(genotypes = test_genotypes, - loci = test_loci, - indiv_meta = test_indiv_meta, - path_out = tempfile('test_data_')) -test_gt <- gen_tibble(bed_path, quiet = TRUE) +# now test with missing data +test_na_gt <- gen_tibble(system.file("extdata/related/families.bed", package="tidypopgen"), quiet = TRUE, + backingfile = tempfile(), valid_alleles = c(1,2)) + ########################### -X <- test_genotypes - -ibs0 <- (X==0) %*% t(X==0) -ibs1 <- (X==1) %*% t(X==1) -ibs2 <- (X==2) %*% t(X==2) - -genos <- table(X) -n_valid_alleles <- ibs0 + ibs1 + ibs2 - - -## start by computing the expect probability of ibd - -CorrectFactor <- TRUE -nValid <- 0 # counter of valid snps for which we have estimates - -# iterate over each locus -for (i in 1:ncol(X)){ - p <- sum(X[,i])/(nrow(X)*2) - # Second, the expected probability of IBS i, given by IBD - q = 1-p - this_geno <- c(sum(X[,i]==0), sum(X[,i]==1),sum(X[,i]==2)) - Na = n = sum(this_geno) - x = 2*this_geno[1] + this_geno[2] ## AA AB - y = 2*this_geno[3] + this_geno[2] ## BB AB - a00 =a01 =a02=a11=a12 = 0 - - if (CorrectFactor) { - a00 = - 2*p*p*q*q * ( (x-1)/x * (y-1)/y * - (Na/(Na-1)) *(Na/(Na-2)) * (Na/(Na-3)) ); - a01 = - 4*p*p*p*q * ( (x-1)/x * (x-2)/x * (Na/(Na-1)) * - (Na/(Na-2)) * (Na/(Na-3)) ) + 4*p*q*q*q * ( (y-1)/y * (y-2)/y * - (Na/(Na-1)) * (Na/(Na-2)) * (Na/(Na-3)) ); - a02 = - q*q*q*q * ( (y-1)/y * (y-2)/y * (y-3)/y * - (Na/(Na-1)) * (Na/(Na-2)) * (Na/(Na-3)) ) + p*p*p*p * - ( (x-1)/x * (x-2)/x * (x-3)/x * (Na/(Na-1)) * (Na/(Na-2)) * - (Na/(Na-3)) ) + 4*p*p*q*q * ( (x-1)/x * (y-1)/y * (Na/(Na-1)) * - (Na/(Na-2)) * (Na/(Na-3)) ); - a11 = - 2*p*p*q * ( (x-1)/x * Na/(Na-1) * Na/(Na-2) ) + - 2*p*q*q * ( (y-1)/y * Na/(Na-1) * Na/(Na-2) ); - a12 = - p*p*p * ((x-1)/x * (x-2)/x * Na/(Na-1) * Na/(Na-2)) + - q*q*q * ( (y-1)/y * (y-2)/y * Na/(Na-1) * Na/(Na-2)) + - p*p*q * ( (x-1)/x * Na/(Na-1) * Na/(Na-2) ) + - p*q*q * ((y-1)/y * Na/(Na-1) * Na/(Na-2)); - } else { - a00 = 2*p*p*q*q; - a01 = 4*p*p*p*q + 4*p*q*q*q; - a02 = q*q*q*q + p*p*p*p + 4*p*p*q*q; - a11 = 2*p*p*q + 2*p*q*q; - a12 = p*p*p + q*q*q + p*p*q + p*q*q; - } +X_mat <- show_genotypes(test_na_gt) + +## start by computing the expect probability of ibs given ibd +compute_EPrIBS_IBD <- function (X, CorrectFactor = TRUE){ + # matrix to store the expect probabilities + EPrIBS_IBD <- matrix(0,ncol=3,nrow=3) + nValid <- 0 # counter of valid snps for which we have estimates + + # iterate over each locus + for (i in 1:ncol(X)){ + p <- sum(X[,i],na.rm = TRUE)/(sum(!is.na(X[,i]))*2) + # Second, the expected probability of IBS i, given by IBD + q = 1-p + this_geno <- c(sum(X[,i]==0,na.rm = TRUE), sum(X[,i]==1, na.rm=TRUE),sum(X[,i]==2, na.rm=TRUE)) + Na = n = sum(this_geno) + x = 2*this_geno[1] + this_geno[2] ## AA AB + y = 2*this_geno[3] + this_geno[2] ## BB AB + a00 =a01 =a02=a11=a12 = 0 + + if (CorrectFactor) { + a00 = + 2*p*p*q*q * ( (x-1)/x * (y-1)/y * + (Na/(Na-1)) *(Na/(Na-2)) * (Na/(Na-3)) ); + a01 = + 4*p*p*p*q * ( (x-1)/x * (x-2)/x * (Na/(Na-1)) * + (Na/(Na-2)) * (Na/(Na-3)) ) + 4*p*q*q*q * ( (y-1)/y * (y-2)/y * + (Na/(Na-1)) * (Na/(Na-2)) * (Na/(Na-3)) ); + a02 = + q*q*q*q * ( (y-1)/y * (y-2)/y * (y-3)/y * + (Na/(Na-1)) * (Na/(Na-2)) * (Na/(Na-3)) ) + p*p*p*p * + ( (x-1)/x * (x-2)/x * (x-3)/x * (Na/(Na-1)) * (Na/(Na-2)) * + (Na/(Na-3)) ) + 4*p*p*q*q * ( (x-1)/x * (y-1)/y * (Na/(Na-1)) * + (Na/(Na-2)) * (Na/(Na-3)) ); + a11 = + 2*p*p*q * ( (x-1)/x * Na/(Na-1) * Na/(Na-2) ) + + 2*p*q*q * ( (y-1)/y * Na/(Na-1) * Na/(Na-2) ); + a12 = + p*p*p * ((x-1)/x * (x-2)/x * Na/(Na-1) * Na/(Na-2)) + + q*q*q * ( (y-1)/y * (y-2)/y * Na/(Na-1) * Na/(Na-2)) + + p*p*q * ( (x-1)/x * Na/(Na-1) * Na/(Na-2) ) + + p*q*q * ((y-1)/y * Na/(Na-1) * Na/(Na-2)); + } else { + a00 = 2*p*p*q*q; + a01 = 4*p*p*p*q + 4*p*q*q*q; + a02 = q*q*q*q + p*p*p*p + 4*p*p*q*q; + a11 = 2*p*p*q + 2*p*q*q; + a12 = p*p*p + q*q*q + p*p*q + p*q*q; + } - # now check that a00, a.. all finite, then add them - # this is only an issue when we use the correction factor - # alternatively, couldn't we check that Na>3 and x and y >1??? - # it should be much faster than check for finite values - - # TO TRANSLATE INTO R - if (R_FINITE(a00) && R_FINITE(a01) && - R_FINITE(a02) && R_FINITE(a11) && R_FINITE(a12)) - { - EPrIBS_IBD[0][0] += a00; - EPrIBS_IBD[0][1] += a01; - EPrIBS_IBD[0][2] += a02; - EPrIBS_IBD[1][1] += a11; - EPrIBS_IBD[1][2] += a12; - nValid++; + # now check that a00, a.. all finite, then add them + # this is only an issue when we use the correction factor + # alternatively, couldn't we check that Na>3 and x and y >1??? + # it should be much faster than check for finite values + + # TO TRANSLATE INTO R + if (!is.nan(a00) && !is.nan(a01) && + !is.nan(a02) && !is.nan(a11) && !is.nan(a12)) + { + EPrIBS_IBD[1,1] = EPrIBS_IBD[1,1] + a00; + EPrIBS_IBD[1,2] = EPrIBS_IBD[1,2] + a01; + EPrIBS_IBD[1,3] = EPrIBS_IBD[1,3] + a02; + EPrIBS_IBD[2,2] = EPrIBS_IBD[2,2] + a11; + EPrIBS_IBD[2,3] = EPrIBS_IBD[2,3] + a12; + nValid = nValid + 1 + } } + + EPrIBS_IBD[1,1] = EPrIBS_IBD[1,1]/ nValid; + EPrIBS_IBD[2,1] = 0; + EPrIBS_IBD[3,1] = 0; + EPrIBS_IBD[1,2] = EPrIBS_IBD[1,2]/nValid; + EPrIBS_IBD[2,2] = EPrIBS_IBD[2,2]/nValid; + EPrIBS_IBD[3,2] = 0; + EPrIBS_IBD[1,3] = EPrIBS_IBD[1,3]/ nValid; + EPrIBS_IBD[2,3] = EPrIBS_IBD[2,3]/ nValid; + EPrIBS_IBD[3,3] = 1 + return(EPrIBS_IBD) } -EPrIBS_IBD[0][0] /= nValid; -EPrIBS_IBD[1][0] = 0; -EPrIBS_IBD[2][0] = 0; -EPrIBS_IBD[0][1] /= nValid; -EPrIBS_IBD[1][1] /= nValid; -EPrIBS_IBD[2][1] = 0; -EPrIBS_IBD[0][2] /= nValid; -EPrIBS_IBD[1][2] /= nValid; -EPrIBS_IBD[2][2] = 1; +EPrIBS_IBD <- compute_EPrIBS_IBD(X_mat) + +## compute the ibs counts +X_mat0 <- X_mat==0 +X_mat0[is.na(X_mat0)]<-0 +X_mat1 <-X_mat==1 +X_mat1[is.na(X_mat1)]<-0 +X_mat2 <-X_mat==2 +X_mat2[is.na(X_mat2)]<-0 + +ibs0 <- (X_mat0) %*% t(X_mat2) + (X_mat2) %*% t(X_mat0) +ibs1 = (X_mat1) %*% t(X_mat0 | X_mat2) + (X_mat0 | X_mat2) %*% t(X_mat1) +ibs2 = (X_mat2) %*% t(X_mat2) + (X_mat1) %*% t(X_mat1) + (X_mat0) %*% t(X_mat0) + +n_ind <- nrow(X_mat) +# function to compute the quantities +Est_PLINK_Kinship <- function(IBS0, IBS1, IBS2, EPrIBS_IBD, constraint = FALSE) { + # AM expected counts (p of each genotype times the total number of overlapping alleles) + nIBS012 <- IBS0 + IBS1 + IBS2 + e00 <- EPrIBS_IBD[1, 1] * nIBS012 + e01 <- EPrIBS_IBD[1, 2] * nIBS012 + e11 <- EPrIBS_IBD[2, 2] * nIBS012 + e02 <- EPrIBS_IBD[1, 3] * nIBS012 + e12 <- EPrIBS_IBD[2, 3] * nIBS012 + e22 <- EPrIBS_IBD[3, 3] * nIBS012 + + #browser() + k0 <- IBS0 / e00 + k1 <- (IBS1 - k0 * e01) / e11 + k2 <- (IBS2 - k0 * e02 - k1 * e12) / e22 + + # Bound IBD estimates to sum to 1, and fall within 0-1 range + if (k0 > 1) { k0 <- 1; k1 <- k2 <- 0 } + if (k1 > 1) { k1 <- 1; k0 <- k2 <- 0 } + if (k2 > 1) { k2 <- 1; k0 <- k1 <- 0 } + if (k0 < 0) { S <- k1 + k2; k1 <- k1 / S; k2 <- k2 / S; k0 <- 0 } + if (k1 < 0) { S <- k0 + k2; k0 <- k0 / S; k2 <- k2 / S; k1 <- 0 } + if (k2 < 0) { S <- k0 + k1; k0 <- k0 / S; k1 <- k1 / S; k2 <- 0 } + + if (constraint) { + # Possibly constrain IBD estimates to within possible triangle + # i.e. 0.5 0.0 0.5 is invalid + # + # Constraint : z1^2 - 4 z0 z2 >= 0 + # : x^2 - 2 pi x + z2 = 0 + # where pi = (z1 + 2 z2) / 2 + # + # So the constaint can also be written as + # pi^2 >= z2 + k2 <- 1 - k0 - k1 + pihat <- k1 / 2 + k2 + if (pihat^2 < k2) { + k0 <- (1 - pihat) * (1 - pihat) + k1 <- 2 * pihat * (1 - pihat) + } + } + + return(c(k0, k1, k2)) } + +Est_PLINK_Kinship_pair <- function(x, ibs0, ibs1,ibs2, EPrIBS_IBD){ + Est_PLINK_Kinship(ibs0[x[1],x[2]],ibs1[x[1],x[2]],ibs2[x[1],x[2]], EPrIBS_IBD) +} + +k0_mat <- matrix(0,ncol=n_ind, nrow=n_ind) +k1_mat <- matrix(0,ncol=n_ind, nrow=n_ind) +k2_mat <- matrix(0,ncol=n_ind, nrow=n_ind) + +ibd_df <- Est_PLINK_Kinship(ibs0[1,2],ibs1[1,2],ibs2[1,2], EPrIBS_IBD) + +indiv_comb <- combn(1:n_ind, 2) +foo <- t(apply(indiv_comb,2,Est_PLINK_Kinship_pair , ibs0, ibs1,ibs2, EPrIBS_IBD)) diff --git a/data-raw/ideas/packages_to_look_into b/data-raw/ideas/packages_to_look_into index 4294920e..0a8691c2 100644 --- a/data-raw/ideas/packages_to_look_into +++ b/data-raw/ideas/packages_to_look_into @@ -25,4 +25,12 @@ Plot dapc with ggplot2 https://luisdva.github.io/rstats/dapc-plot/ +# Paper showing how to use Hail (with tutorials). Can we match them in tidypopgen? +https://www.ncbi.nlm.nih.gov/pmc/articles/PMC9900804/ + +#Implementation of pairwise hudson Fst (to validate ours) +https://github.com/OchoaLab/popkinsuppl + + + diff --git a/data-raw/ideas/pop_within_stats.R b/data-raw/ideas/pop_within_stats.R index 6b6d12b2..a753f39f 100644 --- a/data-raw/ideas/pop_within_stats.R +++ b/data-raw/ideas/pop_within_stats.R @@ -2,7 +2,7 @@ .x <- .x[1:5,] %>% select_loci(1:10) # we compute quantities by locus (the can then be combined for individuals later) # counts of genotypes -.counts <- bigstatsr::big_counts(gt_get_bigsnp(.x)$genotypes, +.counts <- bigstatsr::big_counts(.gt_get_bigsnp(.x)$genotypes, ind.row = .gt_bigsnp_rows(.x), ind.col = .gt_bigsnp_cols(.x)) # number of alleles diff --git a/data-raw/ideas/read_ped.R b/data-raw/ideas/read_ped.R new file mode 100644 index 00000000..f162ffc1 --- /dev/null +++ b/data-raw/ideas/read_ped.R @@ -0,0 +1,204 @@ +## this is wrong. The code already reads in data as raw, so we could simply put values directly into a filebacked matrix +# if we first figure out the size (number of individuals and number of loci) + + +gen_tibble_ped <- function(x, ..., + valid_alleles = c("A", "T", "C", "G"), + missing_alleles = c("0","."), + backingfile = NULL, quiet = FALSE) { + # Substitute .ped with .map + map_file <- sub("\\.ped$", ".map", x) + if (!file.exists(map_file)){ + stop("map file ",map_file," does not exist") + } + + + res <- read.pedfile(file =x , snps = map_file, + na.string = missing_alleles) + # using the gen_tibble.matrix method + new_gen_tbl <- gen_tibble(x = res$genotypes, + indiv_meta = res$fam, + loci = res$map, + backingfile = backingfile) + check_allele_alphabet (new_gen_tbl, valid_alleles = valid_alleles, + missing_alleles = missing_alleles) + show_loci(new_gen_tbl) <- harmonise_missing_values(show_loci(new_gen_tbl), missing_alleles = missing_alleles) + return(new_gen_tbl) + +} + + + + + +# read ped using snpStats::read.pedfile + +read.pedfile <- function(file, n, snps, which, split="\t| +", sep=".", + na.strings="0", lex.order=FALSE, quiet = FALSE) { + ## Constants +# r0 <- as.raw(0) +# r1 <- as.raw(1) +# r2 <- as.raw(2) +# r3 <- as.raw(3) + + r0 <- 0 + r1 <- 1 + r2 <- 2 + r3 <- 3 + + ## Input file + con <- gzfile(file) + open(con) + ## If no line count, find out + if (missing(n)) { + n <- 0 + repeat { + line <- readLines(con, n=1) + if (length(line)==0) break; + n <- n+1; + } + if (n==0) + stop("Nothing read") + seek(con, 0) + } + ## Find snp names + gen <- missing(snps) + map <- NULL + if (!gen) { + m <- length(snps) + if (m==1) { + map <- read.table(snps, comment.char="") + m <- nrow(map) + if (missing(which)) { + which <- 1 + repeat { + snps <- map[,which] + if (!any(duplicated(snps))) + break + if (which==ncol(map)) + stop("No unambiguous snp names found on file") + which <- which+1 + } + } + else { + snps <- map[,which] + } + } + } + else { + line <- readLines(con, n=1) + fields <- strsplit(line, split)[[1]] + nf <- length(fields) + if (nf%%2!=0) + stop("Odd number of fields") + m <- (nf - 6)/2 + seek(con, 0) + } + nf <- 6+2*m + ## Generate empty matrix + result <- matrix(rep(NA,n*m), nrow=n) + ## Columns of subject dataframe + ped <- character(n) + mem <- character(n) + pa <- character(n) + ma <- character(n) + sex <- numeric(n) + aff <- numeric(n) + rownms <- character(n) + a1 <- a2 <- rep(NA, m) + a1m <- a2m <- rep(TRUE, m) + mallelic <- rep(FALSE, m) ## Multiallelic? + for (i in 1:n) { + line <- readLines(con, n=1) + fields <- strsplit(line, "\t| +")[[1]] + to.na <- fields %in% na.strings + fields[to.na] <- NA + ped[i] <- fields[1] + mem[i] <- fields[2] + pa[i] <- fields[3] + ma[i] <- fields[4] + sex[i] <- as.numeric(fields[5]) + aff[i] <- as.numeric(fields[6]) + alleles <- matrix(fields[7:nf], byrow=TRUE, ncol=2) + one <- two <- rep(FALSE, m) + for (k in 1:2) { + ak <- alleles[,k] + akm <- is.na(ak) + br1 <- !akm & a1m + a1[br1] <- ak[br1] + a1m[br1] <- FALSE + br2 <- !akm & (a1==ak) + one[br2] <- TRUE + br3 <- !akm & !a1m & (a1!=ak) + br4 <- br3 & a2m + a2[br4] <- ak[br4] + a2m[br4] <- FALSE + br5 <- br3 & (a2==ak) + two[br5] <- TRUE + mallelic <- mallelic | !(akm|one|two) + } + gt <- rep(r0, m) + gt[one&!two] <- r1 + gt[one&two] <- r2 + gt[two&!one] <- r3 + result[i,] <- gt + } + close(con) + ## Warnin messages + mono <-(a2m & !a1m) + + if (any(mallelic)) { + result[,mallelic] <- r0; + } + if (!quiet){ + if (any(a1m)) + message("no data for ", sum(a1m), " loci") + if (any(mono)) + message(sum(mono), " loci were monomorphic") + if (any(mallelic)) { + message(sum(mallelic), " loci were multi-allelic --- set to NA") + } + } + + ## SnpMatrix result + if (gen) + snps <- paste("locus", 1:m, sep=sep) + if (any(duplicated(ped))) { + if (any(duplicated(mem))) { + rnames <- paste(ped, mem, sep=sep) + if (any(duplicated(rnames))) + stop("could not create unique subject identifiers") + } + else + rnames <- mem + } + else + rnames <- ped + dimnames(result) <- list(rnames, snps) +# result <- new("SnpMatrix", result) + ## Switch alleles if requested and necessary + if (lex.order) { + swa<- (!(is.na(a1)|is.na(a2)) & (a1>a2)) + switch.alleles(result, swa) + a1n <- a1 + a1n[swa] <- a2[swa] + a2[swa] <- a1[swa] + a1 <- a1n + } + ## Subject support file + fam <- data.frame(row.names=rnames, population=ped, id=mem, + father=pa, mother=ma, sex=sex, phenotype=aff) + ## map data frame + if (is.null(map)) + map <- data.frame(row.names=snps, snp.name=snps, + allele.1=a1, allele.2=a2) + else { + # mapfile + names(map) <- c('chromosome', 'name', 'genetic_dist','position') + map$allele_ref <- a1 + map$allele_alt <- a2 + #names(map)[which] <- "snp.names" + map + } + list(genotypes=result, fam=fam, map=map) +} diff --git a/data-raw/ideas/roh_ideas.R b/data-raw/ideas/roh_ideas.R index 653c1e35..b5056a9f 100644 --- a/data-raw/ideas/roh_ideas.R +++ b/data-raw/ideas/roh_ideas.R @@ -27,7 +27,7 @@ slidingRUNS.run <- function(x, windowSize = 15, threshold = 0.05, } # pointer to the FBM - X <- gt_get_bigsnp(x)$genotypes + X <- .gt_get_bigsnp(x)$genotypes for (i_chromosome in chromosomes){ # get loci for this chromosome diff --git a/R/temp/as_gen_tibble.R b/data-raw/old_functions_to_scavenge/as_gen_tibble.R similarity index 100% rename from R/temp/as_gen_tibble.R rename to data-raw/old_functions_to_scavenge/as_gen_tibble.R diff --git a/R/temp/gt_dapc.R b/data-raw/old_functions_to_scavenge/gt_dapc.R similarity index 90% rename from R/temp/gt_dapc.R rename to data-raw/old_functions_to_scavenge/gt_dapc.R index 8954258a..88f13a50 100644 --- a/R/temp/gt_dapc.R +++ b/data-raw/old_functions_to_scavenge/gt_dapc.R @@ -2,7 +2,7 @@ #' #' This function implements the Discriminant Analysis of Principal Components #' (DAPC, Jombart et al. 2010). This method descibes the diversity between -#' pre-defined groups. When groups are unknown, use [gt_pca_find_clusters()] to +#' pre-defined groups. When groups are unknown, use [gt_cluster_pca()] to #' infer genetic clusters. See 'details' section for a succint #' description of the method, and the vignette in the package `adegenet` #' ("adegenet-dapc") for a @@ -26,11 +26,11 @@ #' structured populations. BMC Genetics 11:94. doi:10.1186/1471-2156-11-94 #' -#' @param x an object of class `gt_pca`, or its subclass `gt_pca_clust` +#' @param x an object of class `gt_pca`, or its subclass `gt_cluster_pca` #' @param pop either a factor indicating the group membership of individuals; -#' or an integer defining the desired *k* if x is a `gt_pca_clust`; or NULL, if -#' 'x' is a `gt_pca_clust` and contain an element 'best_k', -#' usually generated with [gt_pca_clust_best_k()], +#' or an integer defining the desired *k* if x is a `gt_cluster_pca`; or NULL, if +#' 'x' is a `gt_cluster_pca` and contain an element 'best_k', +#' usually generated with [gt_cluster_pca_best_k()], #' which will be used to select the clustering level. #' @param n_pca number of principal components to be used in the Discriminant #' Analysis. If NULL, all components will be used. @@ -61,20 +61,20 @@ gt_dapc <- function(x, pop = NULL, n_pca = NULL, n_da=NULL, } if(is.null(pop)) { # if no pop was given, use best_k - if (any(!inherits(x,"gt_pca_clust"),is.null(x$best_k))){ - stop("if 'pop' is not set, 'x' should be a 'gt_pca_clust ") + if (any(!inherits(x,"gt_cluster_pca"),is.null(x$best_k))){ + stop("if 'pop' is not set, 'x' should be a 'gt_cluster_pca ") } pop.fac <- as.factor(x$clusters$groups[[x$best_k]]) } else if (is.factor(pop)) { # if a factor with all assignments was given pop.fac <- pop - } else if (is.numeric(pop) & inherits(x,"gt_pca_clust")) { # if pop is the k value + } else if (is.numeric(pop) & inherits(x,"gt_cluster_pca")) { # if pop is the k value pop.fac <- as.factor(x$clusters$groups[[pop]]) } if(is.null(pop.fac)) stop("x does not include pre-defined populations, and `pop' is not provided") if (is.null(n_pca) ){ - if (inherits(x,"gt_pca_clust")){ # if we generated clusters, use the same pca + if (inherits(x,"gt_cluster_pca")){ # if we generated clusters, use the same pca n_pca <- x$clusters$n_pca } else { # use all principal components n_pca <- length(x$d) diff --git a/R/temp/gt_pca_best_k.R b/data-raw/old_functions_to_scavenge/gt_pca_best_k.R similarity index 93% rename from R/temp/gt_pca_best_k.R rename to data-raw/old_functions_to_scavenge/gt_pca_best_k.R index 44960d57..4d00547c 100644 --- a/R/temp/gt_pca_best_k.R +++ b/data-raw/old_functions_to_scavenge/gt_pca_best_k.R @@ -4,7 +4,7 @@ #' It is equivalent to plotting the metric against the *k* values, and selecting #' the *k* that fulfils a given criterion (see details for an explanation of #' each criterion). This function simply adds an element 'best_k' to the -#' `gt_pca_clust` returned by [gt_pca_find_clusters()]. The choice can be +#' `gt_cluster_pca` returned by [gt_cluster_pca()]. The choice can be #' over-ridden simply by assigning a different value to that element (e.g. #' for an object x and a desired *k* of 8, simply use `x$best_k <- 8`) #' @@ -59,21 +59,21 @@ #' principal components: a new method for the analysis of genetically #' structured populations. BMC Genetics 11:94. doi:10.1186/1471-2156-11-94 #' -#' @param x a `gt_pca_clust` object obtained with [gt_pca_find_clusters()] +#' @param x a `gt_cluster_pca` object obtained with [gt_cluster_pca()] #' @param stat a statistics, one of "BIC", "AIC" or "WSS" #' @param criterion one of "diffNgroup", "min", "goesup", "smoothNgoesup", "goodfit", #' see details for a discussion of each approach. #' @param quiet boolean on whether to silence outputting information to the #' screen (defaults to FALSE) -#' @returns a 'gt_pca_clust' object with an added element 'best_k' +#' @returns a 'gt_cluster_pca' object with an added element 'best_k' #' @export -gt_pca_clust_best_k <- function(x, stat = c("BIC", "AIC", "WSS"), +gt_cluster_pca_best_k <- function(x, stat = c("BIC", "AIC", "WSS"), criterion = c("diffNgroup", "min", "goesup", "smoothNgoesup", "goodfit"), quiet=FALSE){ - if (!inherits(x, "gt_pca_clust")){ - stop("'x' should be a 'gt_pca_clusters' object generated with 'gt_pca_find_clusters()'") + if (!inherits(x, "gt_cluster_pca")){ + stop("'x' should be a 'gt_cluster_pcaers' object generated with 'gt_cluster_pca()'") } stat <- match.arg(stat) diff --git a/R/temp/gt_pca_find_cluster.R b/data-raw/old_functions_to_scavenge/gt_pca_find_cluster.R similarity index 95% rename from R/temp/gt_pca_find_cluster.R rename to data-raw/old_functions_to_scavenge/gt_pca_find_cluster.R index 5d6b5eae..685c6495 100644 --- a/R/temp/gt_pca_find_cluster.R +++ b/data-raw/old_functions_to_scavenge/gt_pca_find_cluster.R @@ -7,7 +7,7 @@ #' a principal component analysis (PCA). For each model, #' several statistical measures of goodness of fit #' are computed, which allows to choose the optimal k using the function -#' [gt_pca_clust_best_k()]. +#' [gt_cluster_pca_best_k()]. #' See details for a description of how to select the optimal k #' and vignette("adegenet-dapc") for a tutorial. #' @param x an object of class `gt_pca`, generated with [gt_pca()]. @@ -20,7 +20,7 @@ #' @param n_start number of starting points for kmeans (only used if `method="kmeans"`) #' @param quiet boolean on whether to silence outputting information to the #' screen (defaults to FALSE) -#' @returns a `gt_pca_clust` object, which is a subclass of [`gt_pca`] with +#' @returns a `gt_cluster_pca` object, which is a subclass of [`gt_pca`] with #' an additional element 'cluster', a list with elements: #' - 'method' the clustering method (either kmeans or ward) #' - 'n_pca' number of principal components used for clustering @@ -31,7 +31,7 @@ #' - 'groups' a list, with each element giving the group assignments for a given k #' @export -gt_pca_find_clusters <- function(x = NULL, n_pca = NULL, +gt_cluster_pca <- function(x = NULL, n_pca = NULL, k_clusters = c(1,round(nrow(x$scores)/10)), method=c("kmeans","ward"), n_iter = 1e5, n_start = 10, @@ -115,7 +115,7 @@ gt_pca_find_clusters <- function(x = NULL, n_pca = NULL, names(cluster_list$groups)<-nbClust x$clusters <- cluster_list - class(x) <- c("gt_pca_clust", class(x)) + class(x) <- c("gt_cluster_pca", class(x)) return(x) } diff --git a/R/temp/gt_read_plink.R b/data-raw/old_functions_to_scavenge/gt_read_plink.R similarity index 100% rename from R/temp/gt_read_plink.R rename to data-raw/old_functions_to_scavenge/gt_read_plink.R diff --git a/R/temp/gt_write_plink.R b/data-raw/old_functions_to_scavenge/gt_write_plink.R similarity index 97% rename from R/temp/gt_write_plink.R rename to data-raw/old_functions_to_scavenge/gt_write_plink.R index 6a2ade7a..4a1bcdfe 100644 --- a/R/temp/gt_write_plink.R +++ b/data-raw/old_functions_to_scavenge/gt_write_plink.R @@ -19,7 +19,7 @@ #' @export -gt_write_plink <- function(x, file, plink_format = c("raw","ped"), chunk_size = 10000, overwrite = TRUE){ +gt_as_plink <- function(x, file, plink_format = c("raw","ped"), chunk_size = 10000, overwrite = TRUE){ plink_format <- match.arg(plink_format) if (tolower(adegenet::.readExt(file))!=plink_format){ diff --git a/R/temp/rbind_gen_tibble.R b/data-raw/old_functions_to_scavenge/rbind_gen_tibble.R similarity index 100% rename from R/temp/rbind_gen_tibble.R rename to data-raw/old_functions_to_scavenge/rbind_gen_tibble.R diff --git a/R/temp/read_plink_raw_loci.R b/data-raw/old_functions_to_scavenge/read_plink_raw_loci.R similarity index 100% rename from R/temp/read_plink_raw_loci.R rename to data-raw/old_functions_to_scavenge/read_plink_raw_loci.R diff --git a/R/temp/select_swap_snpbin.R b/data-raw/old_functions_to_scavenge/select_swap_snpbin.R similarity index 100% rename from R/temp/select_swap_snpbin.R rename to data-raw/old_functions_to_scavenge/select_swap_snpbin.R diff --git a/R/temp/show_ploidy.R b/data-raw/old_functions_to_scavenge/show_ploidy.R similarity index 100% rename from R/temp/show_ploidy.R rename to data-raw/old_functions_to_scavenge/show_ploidy.R diff --git a/data-raw/plink_king_outputs.Rmd b/data-raw/plink_king_outputs.Rmd new file mode 100644 index 00000000..3d98f9a7 --- /dev/null +++ b/data-raw/plink_king_outputs.Rmd @@ -0,0 +1,26 @@ +--- +title: "create plink and king outputs" +output: html_document +date: "2024-05-01" +--- + +```{r setup, include=FALSE} +knitr::opts_chunk$set(echo = TRUE) + +path <- system.file("extdata/related", package="tidypopgen") +knitr::opts_knit$set(root.dir = path) +``` + +# IBS + +```{bash} +plink --bfile families --distance flat-missing square ibs --out test_plinkIBS +``` +# KING + +```{bash} +king -b families.bed --kinship --prefix test_king +``` + + + diff --git a/inst/extdata/related/families.bed b/inst/extdata/related/families.bed new file mode 100644 index 00000000..bf8d4c44 Binary files /dev/null and b/inst/extdata/related/families.bed differ diff --git a/inst/extdata/related/families.bim b/inst/extdata/related/families.bim new file mode 100644 index 00000000..fc73cf4f --- /dev/null +++ b/inst/extdata/related/families.bim @@ -0,0 +1,961 @@ +1 1 0 1 2 1 +1 2 0 2 2 1 +1 3 0 3 2 1 +1 4 0 4 2 1 +1 5 0 5 2 1 +1 6 0 6 2 1 +1 7 0 7 2 1 +1 8 0 8 2 1 +1 9 0 9 2 1 +1 10 0 10 2 1 +1 11 0 11 2 1 +1 12 0 12 2 1 +1 13 0 13 2 1 +1 14 0 14 2 1 +1 15 0 15 2 1 +1 16 0 16 2 1 +1 17 0 17 2 1 +1 18 0 18 2 1 +1 19 0 19 2 1 +1 20 0 20 2 1 +1 21 0 21 2 1 +1 22 0 22 2 1 +1 23 0 23 2 1 +1 24 0 24 2 1 +1 25 0 25 2 1 +1 26 0 26 2 1 +1 27 0 27 2 1 +1 28 0 28 2 1 +1 29 0 29 2 1 +1 30 0 30 2 1 +1 31 0 31 2 1 +1 32 0 32 2 1 +1 33 0 33 2 1 +1 34 0 34 2 1 +1 35 0 35 2 1 +1 36 0 36 2 1 +1 37 0 37 2 1 +1 38 0 38 2 1 +1 39 0 39 2 1 +1 40 0 40 2 1 +1 41 0 41 2 1 +1 42 0 42 2 1 +1 43 0 43 2 1 +1 44 0 44 2 1 +1 45 0 45 2 1 +1 46 0 46 2 1 +1 47 0 47 2 1 +1 48 0 48 2 1 +1 49 0 49 2 1 +1 50 0 50 2 1 +1 51 0 51 2 1 +1 52 0 52 2 1 +1 53 0 53 2 1 +1 54 0 54 2 1 +1 55 0 55 2 1 +1 56 0 56 2 1 +1 57 0 57 2 1 +1 58 0 58 2 1 +1 59 0 59 2 1 +1 60 0 60 2 1 +1 61 0 61 2 1 +1 62 0 62 2 1 +1 63 0 63 2 1 +1 64 0 64 2 1 +1 65 0 65 2 1 +1 66 0 66 2 1 +1 67 0 67 2 1 +1 68 0 68 2 1 +1 69 0 69 2 1 +1 70 0 70 2 1 +1 71 0 71 2 1 +1 72 0 72 2 1 +1 73 0 73 2 1 +1 74 0 74 2 1 +1 75 0 75 2 1 +1 76 0 76 2 1 +1 77 0 77 2 1 +1 78 0 78 2 1 +1 79 0 79 2 1 +1 80 0 80 2 1 +1 81 0 81 2 1 +1 82 0 82 2 1 +1 83 0 83 2 1 +1 84 0 84 2 1 +1 85 0 85 2 1 +1 86 0 86 2 1 +1 87 0 87 2 1 +1 88 0 88 2 1 +1 89 0 89 2 1 +1 90 0 90 2 1 +1 91 0 91 2 1 +1 92 0 92 2 1 +1 93 0 93 2 1 +1 94 0 94 2 1 +1 95 0 95 2 1 +1 96 0 96 2 1 +1 97 0 97 2 1 +1 98 0 98 2 1 +1 99 0 99 2 1 +1 100 0 100 2 1 +1 101 0 101 2 1 +1 102 0 102 2 1 +1 103 0 103 2 1 +1 104 0 104 2 1 +1 105 0 105 2 1 +1 106 0 106 2 1 +1 107 0 107 2 1 +1 108 0 108 2 1 +1 109 0 109 2 1 +1 110 0 110 2 1 +1 111 0 111 2 1 +1 112 0 112 2 1 +1 113 0 113 2 1 +1 114 0 114 2 1 +1 115 0 115 2 1 +1 116 0 116 2 1 +1 117 0 117 2 1 +1 118 0 118 2 1 +1 119 0 119 2 1 +1 120 0 120 2 1 +1 121 0 121 2 1 +1 122 0 122 2 1 +1 123 0 123 2 1 +1 124 0 124 2 1 +1 125 0 125 2 1 +1 126 0 126 2 1 +1 127 0 127 2 1 +1 128 0 128 2 1 +1 129 0 129 2 1 +1 130 0 130 2 1 +1 131 0 131 2 1 +1 132 0 132 2 1 +1 133 0 133 2 1 +1 134 0 134 2 1 +1 135 0 135 2 1 +1 136 0 136 2 1 +1 137 0 137 2 1 +1 138 0 138 2 1 +1 139 0 139 2 1 +1 140 0 140 2 1 +1 141 0 141 2 1 +1 142 0 142 2 1 +1 143 0 143 2 1 +1 144 0 144 2 1 +1 145 0 145 2 1 +1 146 0 146 2 1 +1 147 0 147 2 1 +1 148 0 148 2 1 +1 149 0 149 2 1 +1 150 0 150 2 1 +1 151 0 151 2 1 +1 152 0 152 2 1 +1 153 0 153 2 1 +1 154 0 154 2 1 +1 155 0 155 2 1 +1 156 0 156 2 1 +1 157 0 157 2 1 +1 158 0 158 2 1 +1 159 0 159 2 1 +1 160 0 160 2 1 +1 161 0 161 2 1 +1 162 0 162 2 1 +1 163 0 163 2 1 +1 164 0 164 2 1 +1 165 0 165 2 1 +1 166 0 166 2 1 +1 167 0 167 2 1 +1 168 0 168 2 1 +1 169 0 169 2 1 +1 170 0 170 2 1 +1 171 0 171 2 1 +1 172 0 172 2 1 +1 173 0 173 2 1 +1 174 0 174 2 1 +1 175 0 175 2 1 +1 176 0 176 2 1 +1 177 0 177 2 1 +1 178 0 178 2 1 +1 179 0 179 2 1 +1 180 0 180 2 1 +1 181 0 181 2 1 +1 182 0 182 2 1 +1 183 0 183 2 1 +1 184 0 184 2 1 +1 185 0 185 2 1 +1 186 0 186 2 1 +1 187 0 187 2 1 +1 188 0 188 2 1 +1 189 0 189 2 1 +1 190 0 190 2 1 +1 191 0 191 2 1 +1 192 0 192 2 1 +1 193 0 193 2 1 +1 194 0 194 2 1 +1 195 0 195 2 1 +1 196 0 196 2 1 +1 197 0 197 2 1 +1 198 0 198 2 1 +1 199 0 199 2 1 +1 200 0 200 2 1 +1 201 0 201 2 1 +1 202 0 202 2 1 +1 203 0 203 2 1 +1 204 0 204 2 1 +1 205 0 205 2 1 +1 206 0 206 2 1 +1 207 0 207 2 1 +1 208 0 208 2 1 +1 209 0 209 2 1 +1 210 0 210 2 1 +1 211 0 211 2 1 +1 212 0 212 2 1 +1 213 0 213 2 1 +1 214 0 214 2 1 +1 215 0 215 2 1 +1 216 0 216 2 1 +1 217 0 217 2 1 +1 218 0 218 2 1 +1 219 0 219 2 1 +1 220 0 220 2 1 +1 221 0 221 2 1 +1 222 0 222 2 1 +1 223 0 223 2 1 +1 224 0 224 2 1 +1 225 0 225 2 1 +1 226 0 226 2 1 +1 227 0 227 2 1 +1 228 0 228 2 1 +1 229 0 229 2 1 +1 230 0 230 2 1 +1 231 0 231 2 1 +1 232 0 232 2 1 +1 233 0 233 2 1 +1 234 0 234 2 1 +1 235 0 235 2 1 +1 236 0 236 2 1 +1 237 0 237 2 1 +1 238 0 238 2 1 +1 239 0 239 2 1 +1 240 0 240 2 1 +1 241 0 241 2 1 +1 242 0 242 2 1 +1 243 0 243 2 1 +1 244 0 244 2 1 +1 245 0 245 2 1 +1 246 0 246 2 1 +1 247 0 247 2 1 +1 248 0 248 2 1 +1 249 0 249 2 1 +1 250 0 250 2 1 +1 251 0 251 2 1 +1 252 0 252 2 1 +1 253 0 253 2 1 +1 254 0 254 2 1 +1 255 0 255 2 1 +1 256 0 256 2 1 +1 257 0 257 2 1 +1 258 0 258 2 1 +1 259 0 259 2 1 +1 260 0 260 2 1 +1 261 0 261 2 1 +1 262 0 262 2 1 +1 263 0 263 2 1 +1 264 0 264 2 1 +1 265 0 265 2 1 +1 266 0 266 2 1 +1 267 0 267 2 1 +1 268 0 268 2 1 +1 269 0 269 2 1 +1 270 0 270 2 1 +1 271 0 271 2 1 +1 272 0 272 2 1 +1 273 0 273 2 1 +1 274 0 274 2 1 +1 275 0 275 2 1 +1 276 0 276 2 1 +1 277 0 277 2 1 +1 278 0 278 2 1 +1 279 0 279 2 1 +1 280 0 280 2 1 +1 281 0 281 2 1 +1 282 0 282 2 1 +1 283 0 283 2 1 +1 284 0 284 2 1 +1 285 0 285 2 1 +1 286 0 286 2 1 +1 287 0 287 2 1 +1 288 0 288 2 1 +1 289 0 289 2 1 +1 290 0 290 2 1 +1 291 0 291 2 1 +1 292 0 292 2 1 +1 293 0 293 2 1 +1 294 0 294 2 1 +1 295 0 295 2 1 +1 296 0 296 2 1 +1 297 0 297 2 1 +1 298 0 298 2 1 +1 299 0 299 2 1 +1 300 0 300 2 1 +1 301 0 301 2 1 +1 302 0 302 2 1 +1 303 0 303 2 1 +1 304 0 304 2 1 +1 305 0 305 2 1 +1 306 0 306 2 1 +1 307 0 307 2 1 +1 308 0 308 2 1 +1 309 0 309 2 1 +1 310 0 310 2 1 +1 311 0 311 2 1 +1 312 0 312 2 1 +1 313 0 313 2 1 +1 314 0 314 2 1 +1 315 0 315 2 1 +1 316 0 316 2 1 +1 317 0 317 2 1 +1 318 0 318 2 1 +1 319 0 319 2 1 +1 320 0 320 2 1 +1 321 0 321 2 1 +1 322 0 322 2 1 +1 323 0 323 2 1 +1 324 0 324 2 1 +1 325 0 325 2 1 +1 326 0 326 2 1 +1 327 0 327 2 1 +1 328 0 328 2 1 +1 329 0 329 2 1 +1 330 0 330 2 1 +1 331 0 331 2 1 +1 332 0 332 2 1 +1 333 0 333 2 1 +1 334 0 334 2 1 +1 335 0 335 2 1 +1 336 0 336 2 1 +1 337 0 337 2 1 +1 338 0 338 2 1 +1 339 0 339 2 1 +1 340 0 340 2 1 +1 341 0 341 2 1 +1 342 0 342 2 1 +1 343 0 343 2 1 +1 344 0 344 2 1 +1 345 0 345 2 1 +1 346 0 346 2 1 +1 347 0 347 2 1 +1 348 0 348 2 1 +1 349 0 349 2 1 +1 350 0 350 2 1 +1 351 0 351 2 1 +1 352 0 352 2 1 +1 353 0 353 2 1 +1 354 0 354 2 1 +1 355 0 355 2 1 +1 356 0 356 2 1 +1 357 0 357 2 1 +1 358 0 358 2 1 +1 359 0 359 2 1 +1 360 0 360 2 1 +1 361 0 361 2 1 +1 362 0 362 2 1 +1 363 0 363 2 1 +1 364 0 364 2 1 +1 365 0 365 2 1 +1 366 0 366 2 1 +1 367 0 367 2 1 +1 368 0 368 2 1 +1 369 0 369 2 1 +1 370 0 370 2 1 +1 371 0 371 2 1 +1 372 0 372 2 1 +1 373 0 373 2 1 +1 374 0 374 2 1 +1 375 0 375 2 1 +1 376 0 376 2 1 +1 377 0 377 2 1 +1 378 0 378 2 1 +1 379 0 379 2 1 +1 380 0 380 2 1 +1 381 0 381 2 1 +1 382 0 382 2 1 +1 383 0 383 2 1 +1 384 0 384 2 1 +1 385 0 385 2 1 +1 386 0 386 2 1 +1 387 0 387 2 1 +1 388 0 388 2 1 +1 389 0 389 2 1 +1 390 0 390 2 1 +1 391 0 391 2 1 +1 392 0 392 2 1 +1 393 0 393 2 1 +1 394 0 394 2 1 +1 395 0 395 2 1 +1 396 0 396 2 1 +1 397 0 397 2 1 +1 398 0 398 2 1 +1 399 0 399 2 1 +1 400 0 400 2 1 +1 401 0 401 2 1 +1 402 0 402 2 1 +1 403 0 403 2 1 +1 404 0 404 2 1 +1 405 0 405 2 1 +1 406 0 406 2 1 +1 407 0 407 2 1 +1 408 0 408 2 1 +1 409 0 409 2 1 +1 410 0 410 2 1 +1 411 0 411 2 1 +1 412 0 412 2 1 +1 413 0 413 2 1 +1 414 0 414 2 1 +1 415 0 415 2 1 +1 416 0 416 2 1 +1 417 0 417 2 1 +1 418 0 418 2 1 +1 419 0 419 2 1 +1 420 0 420 2 1 +1 421 0 421 2 1 +1 422 0 422 2 1 +1 423 0 423 2 1 +1 424 0 424 2 1 +1 425 0 425 2 1 +1 426 0 426 2 1 +1 427 0 427 2 1 +1 428 0 428 2 1 +1 429 0 429 2 1 +1 430 0 430 2 1 +1 431 0 431 2 1 +1 432 0 432 2 1 +1 433 0 433 2 1 +1 434 0 434 2 1 +1 435 0 435 2 1 +1 436 0 436 2 1 +1 437 0 437 2 1 +1 438 0 438 2 1 +1 439 0 439 2 1 +1 440 0 440 2 1 +1 441 0 441 2 1 +1 442 0 442 2 1 +1 443 0 443 2 1 +1 444 0 444 2 1 +1 445 0 445 2 1 +1 446 0 446 2 1 +1 447 0 447 2 1 +1 448 0 448 2 1 +1 449 0 449 2 1 +1 450 0 450 2 1 +1 451 0 451 2 1 +1 452 0 452 2 1 +1 453 0 453 2 1 +1 454 0 454 2 1 +1 455 0 455 2 1 +1 456 0 456 2 1 +1 457 0 457 2 1 +1 458 0 458 2 1 +1 459 0 459 2 1 +1 460 0 460 2 1 +1 461 0 461 2 1 +1 462 0 462 2 1 +1 463 0 463 2 1 +1 464 0 464 2 1 +1 465 0 465 2 1 +1 466 0 466 2 1 +1 467 0 467 2 1 +1 468 0 468 2 1 +1 469 0 469 2 1 +1 470 0 470 2 1 +1 471 0 471 2 1 +1 472 0 472 2 1 +1 473 0 473 2 1 +1 474 0 474 2 1 +1 475 0 475 2 1 +1 476 0 476 2 1 +1 477 0 477 2 1 +1 478 0 478 2 1 +1 479 0 479 2 1 +1 480 0 480 2 1 +1 481 0 481 2 1 +1 482 0 482 2 1 +1 483 0 483 2 1 +1 484 0 484 2 1 +1 485 0 485 2 1 +1 486 0 486 2 1 +1 487 0 487 2 1 +1 488 0 488 2 1 +1 489 0 489 2 1 +1 490 0 490 2 1 +1 491 0 491 2 1 +1 492 0 492 2 1 +1 493 0 493 2 1 +1 494 0 494 2 1 +1 495 0 495 2 1 +1 496 0 496 2 1 +1 497 0 497 2 1 +1 498 0 498 2 1 +1 499 0 499 2 1 +1 500 0 500 2 1 +1 501 0 501 2 1 +1 502 0 502 2 1 +1 503 0 503 2 1 +1 504 0 504 2 1 +1 505 0 505 2 1 +1 506 0 506 2 1 +1 507 0 507 2 1 +1 508 0 508 2 1 +1 509 0 509 2 1 +1 510 0 510 2 1 +1 511 0 511 2 1 +1 512 0 512 2 1 +1 513 0 513 2 1 +1 514 0 514 2 1 +1 515 0 515 2 1 +1 516 0 516 2 1 +1 517 0 517 2 1 +1 518 0 518 2 1 +1 519 0 519 2 1 +1 520 0 520 2 1 +1 521 0 521 2 1 +1 522 0 522 2 1 +1 523 0 523 2 1 +1 524 0 524 2 1 +1 525 0 525 2 1 +1 526 0 526 2 1 +1 527 0 527 2 1 +1 528 0 528 2 1 +1 529 0 529 2 1 +1 530 0 530 2 1 +1 531 0 531 2 1 +1 532 0 532 2 1 +1 533 0 533 2 1 +1 534 0 534 2 1 +1 535 0 535 2 1 +1 536 0 536 2 1 +1 537 0 537 2 1 +1 538 0 538 2 1 +1 539 0 539 2 1 +1 540 0 540 2 1 +1 541 0 541 2 1 +1 542 0 542 2 1 +1 543 0 543 2 1 +1 544 0 544 2 1 +1 545 0 545 2 1 +1 546 0 546 2 1 +1 547 0 547 2 1 +1 548 0 548 2 1 +1 549 0 549 2 1 +1 550 0 550 2 1 +1 551 0 551 2 1 +1 552 0 552 2 1 +1 553 0 553 2 1 +1 554 0 554 2 1 +1 555 0 555 2 1 +1 556 0 556 2 1 +1 557 0 557 2 1 +1 558 0 558 2 1 +1 559 0 559 2 1 +1 560 0 560 2 1 +1 561 0 561 2 1 +1 562 0 562 2 1 +1 563 0 563 2 1 +1 564 0 564 2 1 +1 565 0 565 2 1 +1 566 0 566 2 1 +1 567 0 567 2 1 +1 568 0 568 2 1 +1 569 0 569 2 1 +1 570 0 570 2 1 +1 571 0 571 2 1 +1 572 0 572 2 1 +1 573 0 573 2 1 +1 574 0 574 2 1 +1 575 0 575 2 1 +1 576 0 576 2 1 +1 577 0 577 2 1 +1 578 0 578 2 1 +1 579 0 579 2 1 +1 580 0 580 2 1 +1 581 0 581 2 1 +1 582 0 582 2 1 +1 583 0 583 2 1 +1 584 0 584 2 1 +1 585 0 585 2 1 +1 586 0 586 2 1 +1 587 0 587 2 1 +1 588 0 588 2 1 +1 589 0 589 2 1 +1 590 0 590 2 1 +1 591 0 591 2 1 +1 592 0 592 2 1 +1 593 0 593 2 1 +1 594 0 594 2 1 +1 595 0 595 2 1 +1 596 0 596 2 1 +1 597 0 597 2 1 +1 598 0 598 2 1 +1 599 0 599 2 1 +1 600 0 600 2 1 +1 601 0 601 2 1 +1 602 0 602 2 1 +1 603 0 603 2 1 +1 604 0 604 2 1 +1 605 0 605 2 1 +1 606 0 606 2 1 +1 607 0 607 2 1 +1 608 0 608 2 1 +1 609 0 609 2 1 +1 610 0 610 2 1 +1 611 0 611 2 1 +1 612 0 612 2 1 +1 613 0 613 2 1 +1 614 0 614 2 1 +1 615 0 615 2 1 +1 616 0 616 2 1 +1 617 0 617 2 1 +1 618 0 618 2 1 +1 619 0 619 2 1 +1 620 0 620 2 1 +1 621 0 621 2 1 +1 622 0 622 2 1 +1 623 0 623 2 1 +1 624 0 624 2 1 +1 625 0 625 2 1 +1 626 0 626 2 1 +1 627 0 627 2 1 +1 628 0 628 2 1 +1 629 0 629 2 1 +1 630 0 630 2 1 +1 631 0 631 2 1 +1 632 0 632 2 1 +1 633 0 633 2 1 +1 634 0 634 2 1 +1 635 0 635 2 1 +1 636 0 636 2 1 +1 637 0 637 2 1 +1 638 0 638 2 1 +1 639 0 639 2 1 +1 640 0 640 2 1 +1 641 0 641 2 1 +1 642 0 642 2 1 +1 643 0 643 2 1 +1 644 0 644 2 1 +1 645 0 645 2 1 +1 646 0 646 2 1 +1 647 0 647 2 1 +1 648 0 648 2 1 +1 649 0 649 2 1 +1 650 0 650 2 1 +1 651 0 651 2 1 +1 652 0 652 2 1 +1 653 0 653 2 1 +1 654 0 654 2 1 +1 655 0 655 2 1 +1 656 0 656 2 1 +1 657 0 657 2 1 +1 658 0 658 2 1 +1 659 0 659 2 1 +1 660 0 660 2 1 +1 661 0 661 2 1 +1 662 0 662 2 1 +1 663 0 663 2 1 +1 664 0 664 2 1 +1 665 0 665 2 1 +1 666 0 666 2 1 +1 667 0 667 2 1 +1 668 0 668 2 1 +1 669 0 669 2 1 +1 670 0 670 2 1 +1 671 0 671 2 1 +1 672 0 672 2 1 +1 673 0 673 2 1 +1 674 0 674 2 1 +1 675 0 675 2 1 +1 676 0 676 2 1 +1 677 0 677 2 1 +1 678 0 678 2 1 +1 679 0 679 2 1 +1 680 0 680 2 1 +1 681 0 681 2 1 +1 682 0 682 2 1 +1 683 0 683 2 1 +1 684 0 684 2 1 +1 685 0 685 2 1 +1 686 0 686 2 1 +1 687 0 687 2 1 +1 688 0 688 2 1 +1 689 0 689 2 1 +1 690 0 690 2 1 +1 691 0 691 2 1 +1 692 0 692 2 1 +1 693 0 693 2 1 +1 694 0 694 2 1 +1 695 0 695 2 1 +1 696 0 696 2 1 +1 697 0 697 2 1 +1 698 0 698 2 1 +1 699 0 699 2 1 +1 700 0 700 2 1 +1 701 0 701 2 1 +1 702 0 702 2 1 +1 703 0 703 2 1 +1 704 0 704 2 1 +1 705 0 705 2 1 +1 706 0 706 2 1 +1 707 0 707 2 1 +1 708 0 708 2 1 +1 709 0 709 2 1 +1 710 0 710 2 1 +1 711 0 711 2 1 +1 712 0 712 2 1 +1 713 0 713 2 1 +1 714 0 714 2 1 +1 715 0 715 2 1 +1 716 0 716 2 1 +1 717 0 717 2 1 +1 718 0 718 2 1 +1 719 0 719 2 1 +1 720 0 720 2 1 +1 721 0 721 2 1 +1 722 0 722 2 1 +1 723 0 723 2 1 +1 724 0 724 2 1 +1 725 0 725 2 1 +1 726 0 726 2 1 +1 727 0 727 2 1 +1 728 0 728 2 1 +1 729 0 729 2 1 +1 730 0 730 2 1 +1 731 0 731 2 1 +1 732 0 732 2 1 +1 733 0 733 2 1 +1 734 0 734 2 1 +1 735 0 735 2 1 +1 736 0 736 2 1 +1 737 0 737 2 1 +1 738 0 738 2 1 +1 739 0 739 2 1 +1 740 0 740 2 1 +1 741 0 741 2 1 +1 742 0 742 2 1 +1 743 0 743 2 1 +1 744 0 744 2 1 +1 745 0 745 2 1 +1 746 0 746 2 1 +1 747 0 747 2 1 +1 748 0 748 2 1 +1 749 0 749 2 1 +1 750 0 750 2 1 +1 751 0 751 2 1 +1 752 0 752 2 1 +1 753 0 753 2 1 +1 754 0 754 2 1 +1 755 0 755 2 1 +1 756 0 756 2 1 +1 757 0 757 2 1 +1 758 0 758 2 1 +1 759 0 759 2 1 +1 760 0 760 2 1 +1 761 0 761 2 1 +1 762 0 762 2 1 +1 763 0 763 2 1 +1 764 0 764 2 1 +1 765 0 765 2 1 +1 766 0 766 2 1 +1 767 0 767 2 1 +1 768 0 768 2 1 +1 769 0 769 2 1 +1 770 0 770 2 1 +1 771 0 771 2 1 +1 772 0 772 2 1 +1 773 0 773 2 1 +1 774 0 774 2 1 +1 775 0 775 2 1 +1 776 0 776 2 1 +1 777 0 777 2 1 +1 778 0 778 2 1 +1 779 0 779 2 1 +1 780 0 780 2 1 +1 781 0 781 2 1 +1 782 0 782 2 1 +1 783 0 783 2 1 +1 784 0 784 2 1 +1 785 0 785 2 1 +1 786 0 786 2 1 +1 787 0 787 2 1 +1 788 0 788 2 1 +1 789 0 789 2 1 +1 790 0 790 2 1 +1 791 0 791 2 1 +1 792 0 792 2 1 +1 793 0 793 2 1 +1 794 0 794 2 1 +1 795 0 795 2 1 +1 796 0 796 2 1 +1 797 0 797 2 1 +1 798 0 798 2 1 +1 799 0 799 2 1 +1 800 0 800 2 1 +1 801 0 801 2 1 +1 802 0 802 2 1 +1 803 0 803 2 1 +1 804 0 804 2 1 +1 805 0 805 2 1 +1 806 0 806 2 1 +1 807 0 807 2 1 +1 808 0 808 2 1 +1 809 0 809 2 1 +1 810 0 810 2 1 +1 811 0 811 2 1 +1 812 0 812 2 1 +1 813 0 813 2 1 +1 814 0 814 2 1 +1 815 0 815 2 1 +1 816 0 816 2 1 +1 817 0 817 2 1 +1 818 0 818 2 1 +1 819 0 819 2 1 +1 820 0 820 2 1 +1 821 0 821 2 1 +1 822 0 822 2 1 +1 823 0 823 2 1 +1 824 0 824 2 1 +1 825 0 825 2 1 +1 826 0 826 2 1 +1 827 0 827 2 1 +1 828 0 828 2 1 +1 829 0 829 2 1 +1 830 0 830 2 1 +1 831 0 831 2 1 +1 832 0 832 2 1 +1 833 0 833 2 1 +1 834 0 834 2 1 +1 835 0 835 2 1 +1 836 0 836 2 1 +1 837 0 837 2 1 +1 838 0 838 2 1 +1 839 0 839 2 1 +1 840 0 840 2 1 +1 841 0 841 2 1 +1 842 0 842 2 1 +1 843 0 843 2 1 +1 844 0 844 2 1 +1 845 0 845 2 1 +1 846 0 846 2 1 +1 847 0 847 2 1 +1 848 0 848 2 1 +1 849 0 849 2 1 +1 850 0 850 2 1 +1 851 0 851 2 1 +1 852 0 852 2 1 +1 853 0 853 2 1 +1 854 0 854 2 1 +1 855 0 855 2 1 +1 856 0 856 2 1 +1 857 0 857 2 1 +1 858 0 858 2 1 +1 859 0 859 2 1 +1 860 0 860 2 1 +1 861 0 861 2 1 +1 862 0 862 2 1 +1 863 0 863 2 1 +1 864 0 864 2 1 +1 865 0 865 2 1 +1 866 0 866 2 1 +1 867 0 867 2 1 +1 868 0 868 2 1 +1 869 0 869 2 1 +1 870 0 870 2 1 +1 871 0 871 2 1 +1 872 0 872 2 1 +1 873 0 873 2 1 +1 874 0 874 2 1 +1 875 0 875 2 1 +1 876 0 876 2 1 +1 877 0 877 2 1 +1 878 0 878 2 1 +1 879 0 879 2 1 +1 880 0 880 2 1 +1 881 0 881 2 1 +1 882 0 882 2 1 +1 883 0 883 2 1 +1 884 0 884 2 1 +1 885 0 885 2 1 +1 886 0 886 2 1 +1 887 0 887 2 1 +1 888 0 888 2 1 +1 889 0 889 2 1 +1 890 0 890 2 1 +1 891 0 891 2 1 +1 892 0 892 2 1 +1 893 0 893 2 1 +1 894 0 894 2 1 +1 895 0 895 2 1 +1 896 0 896 2 1 +1 897 0 897 2 1 +1 898 0 898 2 1 +1 899 0 899 2 1 +1 900 0 900 2 1 +1 901 0 901 2 1 +1 902 0 902 2 1 +1 903 0 903 2 1 +1 904 0 904 2 1 +1 905 0 905 2 1 +1 906 0 906 2 1 +1 907 0 907 2 1 +1 908 0 908 2 1 +1 909 0 909 2 1 +1 910 0 910 2 1 +1 911 0 911 2 1 +1 912 0 912 2 1 +1 913 0 913 2 1 +1 914 0 914 2 1 +1 915 0 915 2 1 +1 916 0 916 2 1 +1 917 0 917 2 1 +1 918 0 918 2 1 +1 919 0 919 2 1 +1 920 0 920 2 1 +1 921 0 921 2 1 +1 922 0 922 2 1 +1 923 0 923 2 1 +1 924 0 924 2 1 +1 925 0 925 2 1 +1 926 0 926 2 1 +1 927 0 927 2 1 +1 928 0 928 2 1 +1 929 0 929 2 1 +1 930 0 930 2 1 +1 931 0 931 2 1 +1 932 0 932 2 1 +1 933 0 933 2 1 +1 934 0 934 2 1 +1 935 0 935 2 1 +1 936 0 936 2 1 +1 937 0 937 2 1 +1 938 0 938 2 1 +1 939 0 939 2 1 +1 940 0 940 2 1 +1 941 0 941 2 1 +1 942 0 942 2 1 +1 943 0 943 2 1 +1 944 0 944 2 1 +1 945 0 945 2 1 +1 946 0 946 2 1 +1 947 0 947 2 1 +1 948 0 948 2 1 +1 949 0 949 2 1 +1 950 0 950 2 1 +1 951 0 951 2 1 +1 952 0 952 2 1 +1 953 0 953 2 1 +1 954 0 954 2 1 +1 955 0 955 2 1 +1 956 0 956 2 1 +1 957 0 957 2 1 +1 958 0 958 2 1 +1 959 0 959 2 1 +1 960 0 960 2 1 +1 961 0 961 2 1 diff --git a/inst/extdata/related/families.fam b/inst/extdata/related/families.fam new file mode 100644 index 00000000..f5875bb0 --- /dev/null +++ b/inst/extdata/related/families.fam @@ -0,0 +1,12 @@ +1 1 0 0 0 0 +2 2 0 0 0 0 +3 3 0 0 0 0 +4 4 0 0 0 0 +5 5 0 0 0 0 +6 6 0 0 0 0 +7 7 0 0 0 0 +8 8 0 0 0 0 +9 9 0 0 0 0 +10 10 0 0 0 0 +11 11 0 0 0 0 +12 12 0 0 0 0 diff --git a/inst/extdata/related/test_king.kin0 b/inst/extdata/related/test_king.kin0 new file mode 100644 index 00000000..4deaadf2 --- /dev/null +++ b/inst/extdata/related/test_king.kin0 @@ -0,0 +1,66 @@ +1 1 2 2 895 0.1453 0.0905 -0.0655 +1 1 3 3 886 0.1332 0.0643 -0.0086 +1 1 4 4 896 0.1417 0.0737 -0.0170 +1 1 5 5 902 0.1652 0.0732 0.0113 +1 1 6 6 891 0.1358 0.0696 -0.0100 +1 1 7 7 895 0.1531 0.0682 0.0038 +1 1 8 8 892 0.1401 0.0740 -0.0182 +1 1 9 9 888 0.1453 0.0800 -0.0264 +1 1 10 10 889 0.1631 0.0742 -0.0015 +1 1 11 11 894 0.1588 0.0817 -0.0261 +1 1 12 12 895 0.1408 0.0771 -0.0210 +2 2 3 3 883 0.1427 0.0759 -0.0350 +2 2 4 4 890 0.1348 0.0798 -0.0539 +2 2 5 5 897 0.1382 0.0870 -0.0722 +2 2 6 6 889 0.1417 0.0765 -0.0366 +2 2 7 7 894 0.1387 0.0761 -0.0579 +2 2 8 8 888 0.1250 0.0890 -0.0987 +2 2 9 9 883 0.1393 0.0906 -0.0795 +2 2 10 10 885 0.1514 0.0780 -0.0455 +2 2 11 11 893 0.1579 0.0773 -0.0357 +2 2 12 12 892 0.1413 0.0874 -0.0721 +3 3 4 4 881 0.1589 0.0613 0.0470 +3 3 5 5 891 0.1526 0.0707 0.0096 +3 3 6 6 881 0.1464 0.0692 0.0098 +3 3 7 7 882 0.1689 0.0703 0.0278 +3 3 8 8 880 0.1659 0.0807 0.0008 +3 3 9 9 877 0.1391 0.0707 -0.0141 +3 3 10 10 877 0.1539 0.0661 0.0150 +3 3 11 11 882 0.1485 0.0714 -0.0099 +3 3 12 12 883 0.1518 0.0713 0.0084 +4 4 5 5 899 0.1524 0.0701 0.0090 +4 4 6 6 888 0.1532 0.0766 0.0000 +4 4 7 7 891 0.1504 0.0797 -0.0295 +4 4 8 8 888 0.1430 0.0709 0.0000 +4 4 9 9 886 0.1456 0.0643 0.0183 +4 4 10 10 888 0.1599 0.0732 -0.0008 +4 4 11 11 891 0.1627 0.0774 -0.0045 +4 4 12 12 890 0.1326 0.0685 -0.0120 +5 5 6 6 895 0.1687 0.0358 0.1224 +5 5 7 7 899 0.1669 0.0734 0.0188 +5 5 8 8 895 0.1598 0.0715 0.0176 +5 5 9 9 889 0.1462 0.0585 0.0268 +5 5 10 10 892 0.1614 0.0661 0.0291 +5 5 11 11 897 0.1650 0.0747 0.0130 +5 5 12 12 897 0.1572 0.0747 0.0073 +6 6 7 7 890 0.1607 0.0809 -0.0111 +6 6 8 8 885 0.1559 0.0678 0.0228 +6 6 9 9 880 0.1261 0.0648 -0.0101 +6 6 10 10 883 0.1540 0.0702 0.0090 +6 6 11 11 890 0.1528 0.0730 -0.0090 +6 6 12 12 887 0.1533 0.0767 -0.0008 +7 7 8 8 887 0.1894 0.0361 0.1443 +7 7 9 9 882 0.1395 0.0726 -0.0285 +7 7 10 10 887 0.1725 0.0654 0.0503 +7 7 11 11 891 0.1650 0.0808 -0.0021 +7 7 12 12 890 0.1843 0.0876 -0.0022 +8 8 9 9 880 0.1375 0.0705 -0.0164 +8 8 10 10 883 0.1484 0.0680 0.0015 +8 8 11 11 886 0.1693 0.0767 0.0030 +8 8 12 12 889 0.1631 0.0866 -0.0236 +9 9 10 10 878 0.2301 0.0080 0.2741 +9 9 11 11 882 0.1531 0.0816 -0.0367 +9 9 12 12 883 0.1200 0.0815 -0.0734 +10 10 11 11 884 0.1708 0.0713 0.0348 +10 10 12 12 885 0.1322 0.0780 -0.0437 +11 11 12 12 889 0.2261 0.0225 0.2248 diff --git a/inst/extdata/related/test_plinkIBS.log b/inst/extdata/related/test_plinkIBS.log new file mode 100644 index 00000000..547dcc40 --- /dev/null +++ b/inst/extdata/related/test_plinkIBS.log @@ -0,0 +1,26 @@ +PLINK v1.90b7.2 64-bit (11 Dec 2023) +Options in effect: + --bfile families + --distance flat-missing square ibs + --out test_plinkIBS + +Hostname: LAPTOP-S7R1KB1T +Working directory: C:\Users\eviec\Git\tidypopgen\inst\extdata\related +Start time: Wed May 01 09:03:43 2024 + +Random number seed: 1714550623 +8080 MB RAM detected; reserving 4040 MB for main workspace. +961 variants loaded from .bim file. +12 people (0 males, 0 females, 12 ambiguous) loaded from .fam. +Ambiguous sex IDs written to test_plinkIBS.nosex . +Using up to 4 threads (change this with --threads). +Before main variant filters, 12 founders and 0 nonfounders present. +Calculating allele frequencies... done. +Total genotyping rate is 0.961325. +961 variants and 12 people pass filters and QC. +Note: No phenotypes present. +Distance matrix calculation complete. +IDs written to test_plinkIBS.mibs.id . +IBS matrix written to test_plinkIBS.mibs . + +End time: Wed May 01 09:03:43 2024 diff --git a/inst/extdata/related/test_plinkIBS.mibs b/inst/extdata/related/test_plinkIBS.mibs new file mode 100644 index 00000000..4c4f6c91 --- /dev/null +++ b/inst/extdata/related/test_plinkIBS.mibs @@ -0,0 +1,12 @@ +1 0.7 0.69921 0.700893 0.712306 0.696409 0.698883 0.691704 0.698198 0.701912 0.68736 0.689385 +0.7 1 0.703851 0.698876 0.685061 0.705849 0.687919 0.672297 0.69026 0.698305 0.699328 0.68722 +0.69921 0.703851 1 0.716799 0.699776 0.700908 0.713719 0.709659 0.695553 0.697834 0.693311 0.704983 +0.700893 0.698876 0.716799 1 0.704116 0.701577 0.68743 0.695946 0.708804 0.699887 0.700337 0.68427 +0.712306 0.685061 0.699776 0.704116 1 0.749721 0.704116 0.705028 0.710349 0.702915 0.697882 0.698997 +0.696409 0.705849 0.700908 0.701577 0.749721 1 0.691573 0.712994 0.692614 0.697622 0.693258 0.701804 +0.698883 0.687919 0.713719 0.68743 0.704116 0.691573 1 0.766629 0.683107 0.702368 0.685185 0.709551 +0.691704 0.672297 0.709659 0.695946 0.705028 0.712994 0.766629 1 0.69375 0.693092 0.705418 0.700225 +0.698198 0.69026 0.695553 0.708804 0.710349 0.692614 0.683107 0.69375 1 0.842255 0.683673 0.665912 +0.701912 0.698305 0.697834 0.699887 0.702915 0.697622 0.702368 0.693092 0.842255 1 0.700792 0.670056 +0.68736 0.699328 0.693311 0.700337 0.697882 0.693258 0.685185 0.705418 0.683673 0.700792 1 0.813836 +0.689385 0.68722 0.704983 0.68427 0.698997 0.701804 0.709551 0.700225 0.665912 0.670056 0.813836 1 diff --git a/inst/extdata/related/test_plinkIBS.mibs.id b/inst/extdata/related/test_plinkIBS.mibs.id new file mode 100644 index 00000000..22ee7fca --- /dev/null +++ b/inst/extdata/related/test_plinkIBS.mibs.id @@ -0,0 +1,12 @@ +1 1 +2 2 +3 3 +4 4 +5 5 +6 6 +7 7 +8 8 +9 9 +10 10 +11 11 +12 12 diff --git a/inst/extdata/related/test_plinkIBS.nosex b/inst/extdata/related/test_plinkIBS.nosex new file mode 100644 index 00000000..22ee7fca --- /dev/null +++ b/inst/extdata/related/test_plinkIBS.nosex @@ -0,0 +1,12 @@ +1 1 +2 2 +3 3 +4 4 +5 5 +6 6 +7 7 +8 8 +9 9 +10 10 +11 11 +12 12 diff --git a/inst/extdata/sheep.bed b/inst/extdata/sheep.bed deleted file mode 100644 index d7846e74..00000000 Binary files a/inst/extdata/sheep.bed and /dev/null differ diff --git a/inst/extdata/sheep.bim b/inst/extdata/sheep.bim deleted file mode 100644 index dab68c13..00000000 --- a/inst/extdata/sheep.bim +++ /dev/null @@ -1,4841 +0,0 @@ -2 locus.1 1.94626 158066 C T -2 locus.2 1.95 167018 G A -2 locus.3 2.16081 354035 T C -2 locus.4 2.43067 544617 A G -2 locus.5 2.62141 679324 T C -2 locus.6 2.93648 901838 G A -2 locus.7 2.99701 945715 G A -2 locus.8 3.05065 985851 G A -2 locus.9 3.12113 1038580 T C -2 locus.10 3.40236 1248985 T C -2 locus.11 3.53884 1351094 C A -2 locus.12 3.64017 1426911 A G -2 locus.13 3.65471 1437784 G A -2 locus.14 3.71455 1482554 A G -2 locus.15 3.79076 1539578 A T -2 locus.16 3.79849 1545361 A G -2 locus.17 3.8802 1606489 C T -2 locus.18 3.90541 1625350 C T -2 locus.19 3.93258 1645676 A G -2 locus.20 3.97179 1675016 G T -2 locus.21 4.0287 1717596 C T -2 locus.22 4.10431 1774162 T C -2 locus.23 4.15944 1815412 C T -2 locus.24 4.28178 1906939 T A -2 locus.25 4.45159 2033983 A G -2 locus.26 4.69174 2157185 A G -2 locus.27 4.81522 2208964 A G -2 locus.28 4.85487 2225592 A C -2 locus.29 4.982 2278905 G T -2 locus.30 5.02741 2297946 C T -2 locus.31 5.11681 2335437 G A -2 locus.32 5.23065 2383174 G A -2 locus.33 5.39351 2451471 A G -2 locus.34 5.45113 2475632 G A -2 locus.35 5.54666 2515692 T G -2 locus.36 5.68691 2574507 G A -2 locus.37 5.80271 2623066 T C -2 locus.38 5.86707 2650054 G A -2 locus.39 6.00433 2707614 A C -2 locus.40 6.05387 2728390 G A -2 locus.41 6.12092 2756505 C T -2 locus.42 6.14312 2765814 G T -2 locus.43 6.24494 2808512 C T -2 locus.44 6.34521 2850561 T C -2 locus.45 6.40876 2877210 T C -2 locus.46 6.51786 2922962 G A -2 locus.47 6.68198 2991783 C T -2 locus.48 6.95022 3104266 T C -2 locus.49 7.19306 3206104 A G -2 locus.50 7.19962 3208854 T C -2 locus.51 7.35877 3275593 G A -2 locus.52 7.39579 3291115 G T -2 locus.53 7.50538 3337073 C T -2 locus.54 7.57865 3367799 G A -2 locus.55 7.82402 3470694 T C -2 locus.56 7.86923 3489649 A G -2 locus.57 8.04594 3563752 A C -2 locus.58 8.14053 3603417 A G -2 locus.59 8.26069 3653809 C T -2 locus.60 8.3392 3686730 T C -2 locus.61 8.58877 3791385 C T -2 locus.62 8.63889 3812405 A G -2 locus.63 8.77709 3870359 T C -2 locus.64 8.92118 3930781 C T -2 locus.65 8.99454 3961544 G A -2 locus.66 9.10714 4008763 C T -2 locus.67 9.27937 4080987 A C -2 locus.68 9.48425 4166902 A G -2 locus.69 9.54619 4192875 G A -2 locus.70 9.68837 4252497 A G -2 locus.71 9.73307 4271242 T C -2 locus.72 9.82528 4309913 C T -2 locus.73 9.92498 4351718 A G -2 locus.74 9.96973 4370486 G A -2 locus.75 10.1152 4431496 A G -2 locus.76 10.1751 4456589 T G -2 locus.77 10.263 4493454 T G -2 locus.78 10.3669 4537029 C T -2 locus.79 10.4133 4556476 C T -2 locus.80 10.6102 4639058 G T -2 locus.81 10.64 4670884 G A -2 locus.82 10.64 4697573 C T -2 locus.83 10.72 4739830 G A -2 locus.84 10.7806 4764715 G A -2 locus.85 10.8221 4781740 G T -2 locus.86 10.9524 4835268 C T -2 locus.87 11.3826 5011935 A G -2 locus.88 11.4497 5039528 A G -2 locus.89 11.5838 5094572 A G -2 locus.90 11.6801 5134126 A G -2 locus.91 11.7895 5179079 C T -2 locus.92 11.8785 5215635 G A -2 locus.93 12.1574 5330154 T C -2 locus.94 12.2895 5384426 A G -2 locus.95 12.5035 5472326 G T -2 locus.96 12.5953 5509991 C T -2 locus.97 12.6345 5526115 A C -2 locus.98 12.7386 5568873 G T -2 locus.99 12.7983 5593383 A G -2 locus.100 13.0374 5691565 A G -2 locus.101 13.0859 5711505 A G -2 locus.102 13.1528 5738989 A G -2 locus.103 13.2433 5776150 A 0 -2 locus.104 13.2969 5798140 T G -2 locus.105 13.6442 5940814 G A -2 locus.106 13.7547 5986185 T C -2 locus.107 13.7963 6003251 T C -2 locus.108 13.9448 6064231 T C -2 locus.109 14.0136 6092514 G A -2 locus.110 14.1528 6149666 C T -2 locus.111 14.2371 6184281 A G -2 locus.112 14.3815 6243606 C T -2 locus.113 14.5098 6296290 C T -2 locus.114 14.5896 6329070 T C -2 locus.115 14.6384 6349125 G A -2 locus.116 15.0229 6507028 G A -2 locus.117 15.19 6587778 G A -2 locus.118 15.19 6625835 C T -2 locus.119 15.3458 6740866 A G -2 locus.120 15.4691 6774351 G A -2 locus.121 15.6025 6810581 A G -2 locus.122 15.7847 6860059 A G -2 locus.123 15.9388 6901892 G A -2 locus.124 16.1119 6948895 G A -2 locus.125 16.202 6973371 C T -2 locus.126 16.3434 7011767 T G -2 locus.127 16.5777 7075387 T C -2 locus.128 16.7484 7121740 C A -2 locus.129 16.915 7166969 C T -2 locus.130 17.0132 7193642 G T -2 locus.131 17.1951 7243025 A G -2 locus.132 17.3776 7292599 G T -2 locus.133 17.5804 7347673 T C -2 locus.134 17.8223 7413337 A C -2 locus.135 17.8971 7433654 T C -2 locus.136 18.1064 7490500 T C -2 locus.137 18.7769 7672558 C T -2 locus.138 18.979 7727437 C A -2 locus.139 19.4797 7925142 A G -2 locus.140 19.5898 7973431 T C -2 locus.141 19.7309 8023190 C T -2 locus.142 20 8127552 C A -2 locus.143 20.1857 8180894 T C -2 locus.144 20.3753 8218127 A C -2 locus.145 20.8108 8303627 A G -2 locus.146 21.0002 8340807 T C -2 locus.147 21.9046 8518359 T C -2 locus.148 21.9705 8531299 T C -2 locus.149 22.1257 8561759 G A -2 locus.150 22.73 8726614 G A -2 locus.151 22.8259 8846903 A G -2 locus.152 22.914 8910387 A G -2 locus.153 22.9587 8942592 A G -2 locus.154 23.0176 8985061 G A -2 locus.155 23.0483 9007180 T C -2 locus.156 23.2574 9157918 G A -2 locus.157 23.3122 9266747 A G -2 locus.158 23.3127 9281432 A G -2 locus.159 23.3154 9369266 T C -2 locus.160 23.3162 9392243 G A -2 locus.161 23.3175 9434535 A G -2 locus.162 23.3192 9490117 G A -2 locus.163 23.3198 9507409 T C -2 locus.164 23.4759 9542771 C T -2 locus.165 23.6904 9581760 C T -2 locus.166 23.7333 9589549 A G -2 locus.167 23.9158 9622724 G A -2 locus.168 24.3494 9701540 G A -2 locus.169 24.5344 9735180 C T -2 locus.170 24.9071 9792510 C T -2 locus.171 25.3789 9850522 A G -2 locus.172 25.4854 9877191 C T -2 locus.173 25.6362 9940812 C T -2 locus.174 25.6926 9964594 A G -2 locus.175 25.8973 10051003 C A -2 locus.176 26.028 10106137 G A -2 locus.177 26.1386 10152821 A G -2 locus.178 26.265 10206141 A G -2 locus.179 26.3548 10244038 T G -2 locus.180 26.4091 10266961 A C -2 locus.181 26.5424 10323184 A G -2 locus.182 26.6308 10360499 A G -2 locus.183 26.6692 10376684 G T -2 locus.184 26.8382 10448019 G A -2 locus.185 26.8882 10469108 G 0 -2 locus.186 26.9309 10487132 C A -2 locus.187 27.0493 10537097 G A -2 locus.188 27.2238 10610698 T G -2 locus.189 27.3167 10649928 A G -2 locus.190 27.6302 10782174 A G -2 locus.191 27.6578 10793827 A G -2 locus.192 27.6852 10805401 C T -2 locus.193 27.6894 10807181 C T -2 locus.194 27.7563 10835399 G A -2 locus.195 27.8805 10887825 C T -2 locus.196 27.9857 10932216 A C -2 locus.197 28.0689 10967299 T G -2 locus.198 28.2671 11050939 T C -2 locus.199 28.5016 11151650 A G -2 locus.200 28.5597 11180986 A C -2 locus.201 28.6591 11231159 C T -2 locus.202 28.813 11308855 G A -2 locus.203 28.995 11400715 T C -2 locus.204 29.0914 11449399 G A -2 locus.205 29.1453 11476553 T C -2 locus.206 29.3097 11555842 A C -2 locus.207 29.4967 11640198 G A -2 locus.208 29.6241 11697656 A G -2 locus.209 29.7414 11728531 T C -2 locus.210 30.2808 11834382 A C -2 locus.211 30.6923 11979482 A G -2 locus.212 30.847 12034058 G A -2 locus.213 30.9868 12083349 C T -2 locus.214 31.163 12145471 T C -2 locus.215 31.2618 12180292 A G -2 locus.216 31.3354 12206258 G 0 -2 locus.217 31.689 12330936 T G -2 locus.218 31.9368 12418291 C T -2 locus.219 32.1483 12492887 A G -2 locus.220 32.1741 12501983 T C -2 locus.221 32.3349 12558695 C T -2 locus.222 32.4454 12597644 G A -2 locus.223 32.4834 12611034 G A -2 locus.224 32.5555 12636461 C 0 -2 locus.225 32.7287 12697516 C T -2 locus.226 32.8419 12737462 A C -2 locus.227 32.9815 12786681 A G -2 locus.228 33.1526 12846994 G A -2 locus.229 33.3015 12899497 A G -2 locus.230 33.4556 12988767 A 0 -2 locus.231 33.4886 13010406 A C -2 locus.232 33.5928 13078663 G A -2 locus.233 33.7651 13191445 T C -2 locus.234 33.873 13262121 C T -2 locus.235 33.9416 13307050 C T -2 locus.236 34.0306 13365322 G A -2 locus.237 34.1963 13473852 C T -2 locus.238 34.248 13507694 G A -2 locus.239 34.346 13571895 T G -2 locus.240 34.4003 13607497 T C -2 locus.241 34.4517 13641165 C T -2 locus.242 34.47 13659995 A G -2 locus.243 34.47 13727715 A G -2 locus.244 34.47 13747683 G A -2 locus.245 34.47 13769727 C T -2 locus.246 34.47 13794213 C T -2 locus.247 34.47 13824172 C A -2 locus.248 34.47 13836112 T C -2 locus.249 34.47 13928073 A G -2 locus.250 34.47 13932966 A C -2 locus.251 34.47 14016254 G T -2 locus.252 34.47 14080986 G A -2 locus.253 34.47 14159758 A G -2 locus.254 34.47 14272947 T G -2 locus.255 34.5084 14359717 A G -2 locus.256 34.5416 14402382 G A -2 locus.257 34.5862 14459533 T C -2 locus.258 34.6151 14496716 G A -2 locus.259 34.6244 14508559 G A -2 locus.260 34.6363 14523912 A G -2 locus.261 34.746 14664664 T C -2 locus.262 34.7543 14675375 G T -2 locus.263 34.8019 14736373 G A -2 locus.264 34.8729 14827510 A G -2 locus.265 34.8809 14837808 A G -2 locus.266 34.8883 14847285 G A -2 locus.267 34.941 14914968 A G -2 locus.268 34.9763 14960242 A G -2 locus.269 35.035 15035660 G A -2 locus.270 35.0552 15061596 A G -2 locus.271 35.1174 15141339 T C -2 locus.272 35.2189 15181363 C T -2 locus.273 35.316 15217338 T C -2 locus.274 35.4304 15259730 A G -2 locus.275 35.4878 15281005 A G -2 locus.276 35.5829 15316224 A G -2 locus.277 35.5987 15322091 A G -2 locus.278 35.777 15388156 G A -2 locus.279 35.8764 15424986 A G -2 locus.280 36.019 15477809 C T -2 locus.281 36.2637 15568475 T C -2 locus.282 36.2975 15581003 C T -2 locus.283 36.73 15741288 T C -2 locus.284 36.8947 15802281 G A -2 locus.285 37.134 15890951 G T -2 locus.286 37.1524 15897797 C T -2 locus.287 37.3984 15988919 C T -2 locus.288 37.543 16042496 T C -2 locus.289 37.6884 16096373 C T -2 locus.290 37.7666 16125371 G A -2 locus.291 37.8943 16172689 T C -2 locus.292 38.1412 16264144 G A -2 locus.293 38.348 16340791 C T -2 locus.294 38.4398 16374818 C T -2 locus.295 38.5514 16416165 A G -2 locus.296 38.6564 16455041 G A -2 locus.297 38.7427 16487040 A G -2 locus.298 39.1075 16622194 G A -2 locus.299 39.2847 16687851 C T -2 locus.300 39.2971 16692470 T C -2 locus.301 39.3832 16743751 A G -2 locus.302 39.4154 16774412 C T -2 locus.303 39.4477 16805125 G A -2 locus.304 39.4732 16829483 A G -2 locus.305 39.5166 16870828 C T -2 locus.306 39.6263 16975392 G A -2 locus.307 39.6875 17033754 C T -2 locus.308 39.7293 17073547 T C -2 locus.309 39.7491 17092421 A G -2 locus.310 39.7758 17117909 G A -2 locus.311 39.7998 17140743 T G -2 locus.312 39.8072 17147759 A G -2 locus.313 39.8779 17215166 T C -2 locus.314 39.96 17397244 T C -2 locus.315 39.96 17482057 G A -2 locus.316 39.96 17525275 C T -2 locus.317 39.96 17567075 G A -2 locus.318 39.96 17599102 T C -2 locus.319 39.96 17626139 G A -2 locus.320 39.96 17681852 T C -2 locus.321 39.96 17733005 C T -2 locus.322 39.96 17773538 G A -2 locus.323 39.96 17834999 C T -2 locus.324 39.96 17858301 A C -2 locus.325 39.96 17909542 C T -2 locus.326 39.96 17969084 C T -2 locus.327 39.96 18001962 G A -2 locus.328 39.96 18057959 G A -2 locus.329 39.96 18063564 T C -2 locus.330 39.96 18083119 T G -2 locus.331 40.0325 18138094 C T -2 locus.332 40.0631 18149828 A G -2 locus.333 41.0384 18555382 C A -2 locus.334 41.058 18584559 A G -2 locus.335 41.0857 18625870 C T -2 locus.336 41.1012 18649148 C T -2 locus.337 41.1326 18695910 A G -2 locus.338 41.1509 18723310 G A -2 locus.339 41.2033 18801493 A G -2 locus.340 41.2159 18820353 T C -2 locus.341 41.255 18878677 A G -2 locus.342 41.2717 18903649 C T -2 locus.343 41.2764 18910726 A G -2 locus.344 41.2834 18921102 A G -2 locus.345 41.3125 18964597 T C -2 locus.346 41.3618 19038121 T C -2 locus.347 41.4041 19101369 T C -2 locus.348 41.4224 19128677 C T -2 locus.349 41.4338 19145768 T C -2 locus.350 41.4459 19163821 G A -2 locus.351 41.4911 19231312 C G -2 locus.352 41.5188 19272653 A G -2 locus.353 41.5247 19281367 G A -2 locus.354 41.6069 19404154 T C -2 locus.355 41.6286 19436541 A G -2 locus.356 41.6779 19510169 A G -2 locus.357 41.7747 19654697 T C -2 locus.358 41.7844 19666564 T C -2 locus.359 41.9053 19774453 T C -2 locus.360 42.0896 19846803 T C -2 locus.361 42.2193 19882673 C T -2 locus.362 42.3925 19930587 T G -2 locus.363 42.503 19961132 T C -2 locus.364 42.7014 20016014 G A -2 locus.365 42.8126 20046763 T C -2 locus.366 42.9495 20084638 A G -2 locus.367 43.1087 20128661 T C -2 locus.368 43.2112 20157007 G 0 -2 locus.369 43.3759 20209570 T A -2 locus.370 43.5717 20301857 C T -2 locus.371 43.6421 20335054 T G -2 locus.372 43.737 20379763 C A -2 locus.373 43.804 20422624 T C -2 locus.374 43.8516 20460742 A G -2 locus.375 43.9183 20514245 G A -2 locus.376 43.9953 20575920 G C -2 locus.377 44.0413 20612791 T C -2 locus.378 44.1379 20690263 C T -2 locus.379 44.2347 20767838 T C -2 locus.380 44.2957 20816743 T C -2 locus.381 44.3318 20845627 T C -2 locus.382 44.4 20900296 A G -2 locus.383 44.4262 20921329 T C -2 locus.384 44.4705 20956866 A G -2 locus.385 44.5295 21004170 C T -2 locus.386 44.5701 21036650 T C -2 locus.387 44.6242 21080059 T C -2 locus.388 44.686 21129571 A G -2 locus.389 44.7313 21165923 T G -2 locus.390 44.839 21252248 C T -2 locus.391 44.8914 21294271 A G -2 locus.392 44.9421 21334859 G A -2 locus.393 45.0894 21459378 A G -2 locus.394 45.2416 21614658 A G -2 locus.395 45.3159 21690410 T C -2 locus.396 45.3802 21756019 T C -2 locus.397 45.4134 21789864 C A -2 locus.398 45.4487 21825858 A G -2 locus.399 45.4803 21858053 C T -2 locus.400 45.5055 21883834 C T -2 locus.401 45.5489 21928040 G A -2 locus.402 45.5717 21951298 G A -2 locus.403 45.5994 21979508 T C -2 locus.404 45.6411 22022061 T C -2 locus.405 45.7271 22109813 G A -2 locus.406 45.7612 22144624 T C -2 locus.407 45.8032 22187452 G A -2 locus.408 45.8573 22242606 G A -2 locus.409 45.93 22316785 C T -2 locus.410 46.008 22396321 G T -2 locus.411 46.0371 22426012 T C -2 locus.412 46.063 22452363 G A -2 locus.413 46.1035 22493681 G A -2 locus.414 46.2192 22630114 C T -2 locus.415 46.2437 22664271 A G -2 locus.416 46.3144 22762869 A G -2 locus.417 46.3301 22784701 A G -2 locus.418 46.3482 22809937 A C -2 locus.419 46.3843 22860326 A C -2 locus.420 46.4584 22963619 C T -2 locus.421 46.4764 22988626 T C -2 locus.422 46.5029 23025632 A C -2 locus.423 46.5236 23054535 T C -2 locus.424 46.5992 23090794 T C -2 locus.425 46.7585 23127005 A G -2 locus.426 46.8823 23155150 T C -2 locus.427 47.1292 23229992 A G -2 locus.428 47.2073 23277528 T C -2 locus.429 47.3348 23355101 T C -2 locus.430 47.3531 23366203 A G -2 locus.431 47.5086 23460849 A G -2 locus.432 47.552 23487206 C T -2 locus.433 47.6793 23564647 C T -2 locus.434 47.7281 23594340 T C -2 locus.435 47.7773 23681326 T G -2 locus.436 47.7893 23727919 T C -2 locus.437 47.805 23789150 G A -2 locus.438 47.8091 23805106 A G -2 locus.439 47.8219 23855122 A G -2 locus.440 47.8287 23881589 A G -2 locus.441 47.8497 23963448 C A -2 locus.442 47.8604 24005033 G T -2 locus.443 47.8766 24068349 G T -2 locus.444 47.8829 24092677 T C -2 locus.445 47.8995 24157644 T C -2 locus.446 47.9133 24211190 A C -2 locus.447 47.9274 24266089 C T -2 locus.448 47.9348 24295074 T C -2 locus.449 47.9588 24388649 C T -2 locus.450 47.98 24524166 C T -2 locus.451 47.98 24549718 C T -2 locus.452 47.98 24596472 A C -2 locus.453 47.98 24646366 C T -2 locus.454 47.98 24728194 C A -2 locus.455 47.98 24756265 A G -2 locus.456 47.98 24839164 G A -2 locus.457 47.98 24861755 T C -2 locus.458 47.98 24888334 T C -2 locus.459 47.98 24921180 G T -2 locus.460 47.98 24966147 C T -2 locus.461 47.98 25007252 C T -2 locus.462 47.9804 25031318 A G -2 locus.463 47.9812 25066702 G A -2 locus.464 47.9819 25100399 C T -2 locus.465 47.9825 25125263 C T -2 locus.466 47.9847 25224133 C T -2 locus.467 47.9851 25243715 G A -2 locus.468 47.9863 25298543 A G -2 locus.469 47.9877 25359294 C T -2 locus.470 47.989 25419602 A G -2 locus.471 48.0196 25481746 A C -2 locus.472 48.163 25563222 C A -2 locus.473 48.4203 25709378 A G -2 locus.474 48.5191 25765503 G A -2 locus.475 48.6003 25811615 G A -2 locus.476 48.668 25850068 A G -2 locus.477 48.8246 25939009 G T -2 locus.478 48.9264 25996861 A G -2 locus.479 49.1088 26100485 T C -2 locus.480 49.1997 26152087 T G -2 locus.481 49.3959 26263538 T C -2 locus.482 49.4604 26300198 G A -2 locus.483 49.47 26315932 C T -2 locus.484 49.47 26438460 A G -2 locus.485 49.47 26480124 C T -2 locus.486 49.47 26520393 C T -2 locus.487 49.47 26572518 T G -2 locus.488 49.6189 26664802 G A -2 locus.489 49.7335 26737340 G A -2 locus.490 49.8341 26807018 C T -2 locus.491 49.9016 26853708 A G -2 locus.492 49.9674 26899343 A G -2 locus.493 50.0155 26932618 C T -2 locus.494 50.1044 26994236 C T -2 locus.495 50.3212 27144318 A G -2 locus.496 50.3633 27209958 G T -2 locus.497 50.367 27218367 G A -2 locus.498 50.3961 27284017 C T -2 locus.499 50.4082 27311358 C T -2 locus.500 50.4277 27355362 T G -2 locus.501 50.4714 27453783 T C -2 locus.502 50.4892 27493960 C A -2 locus.503 50.5125 27546603 T G -2 locus.504 50.5272 27579879 T C -2 locus.505 50.5495 27629998 A G -2 locus.506 50.5526 27637045 A G -2 locus.507 50.618 27784609 A C -2 locus.508 50.6489 27854385 T G -2 locus.509 50.7867 28165366 G A -2 locus.510 50.8253 28252533 G A -2 locus.511 50.8563 28322438 C T -2 locus.512 50.8734 28360954 G A -2 locus.513 50.9139 28452400 C A -2 locus.514 50.94 28578328 G A -2 locus.515 50.94 28627130 C T -2 locus.516 50.94 28670127 T C -2 locus.517 50.94 29002361 G A -2 locus.518 50.94 29052799 T C -2 locus.519 50.9469 29070544 G A -2 locus.520 51.0454 29118515 A G -2 locus.521 51.4302 29305877 A G -2 locus.522 51.48 29338389 A G -2 locus.523 51.48 29392361 A G -2 locus.524 51.48 29409606 A G -2 locus.525 51.5842 29489753 T G -2 locus.526 51.7274 29550469 A G -2 locus.527 51.775 29570650 G A -2 locus.528 51.9252 29634330 A G -2 locus.529 51.9915 29662453 C T -2 locus.530 52.1216 29717625 A G -2 locus.531 52.2386 29767246 A C -2 locus.532 52.2789 29784325 T G -2 locus.533 52.5978 29912263 T C -2 locus.534 52.729 29960448 G A -2 locus.535 52.9063 30026978 A G -2 locus.536 52.9485 30051860 A G -2 locus.537 53.047 30109974 T C -2 locus.538 53.1547 30173541 A G -2 locus.539 53.3363 30280645 T G -2 locus.540 53.6461 30463448 G A -2 locus.541 53.6833 30485387 A G -2 locus.542 53.6954 30492514 T C -2 locus.543 53.8593 30589213 G A -2 locus.544 53.9434 30638836 T C -2 locus.545 54.0445 30698479 T C -2 locus.546 54.0623 30708966 T C -2 locus.547 54.1609 30767128 A G -2 locus.548 54.1928 30785949 G T -2 locus.549 54.2075 30794612 G C -2 locus.550 54.3008 30849683 C T -2 locus.551 54.3298 30866797 C T -2 locus.552 54.3458 30876192 A C -2 locus.553 54.4198 30919873 A C -2 locus.554 54.5565 31018254 A G -2 locus.555 54.7784 31144311 C T -2 locus.556 54.8568 31189089 C T -2 locus.557 55.026 31285745 T C -2 locus.558 55.0963 31312523 C T -2 locus.559 55.2077 31353780 G A -2 locus.560 55.2222 31362675 C A -2 locus.561 55.2619 31388914 T A -2 locus.562 55.3927 31519390 A G -2 locus.563 55.41 31564277 C T -2 locus.564 55.4397 31641648 T C -2 locus.565 55.4457 31657214 G A -2 locus.566 55.4667 31712060 C A -2 locus.567 55.4842 31757466 G A -2 locus.568 55.5214 31854280 T C -2 locus.569 55.5432 31911076 G T -2 locus.570 55.5639 31964986 T C -2 locus.571 55.5692 31978915 T C -2 locus.572 55.5744 31992177 A G -2 locus.573 55.5865 32023745 C T -2 locus.574 55.6209 32113281 T G -2 locus.575 55.6585 32211152 C T -2 locus.576 55.6741 32251867 A G -2 locus.577 55.6806 32268777 T G -2 locus.578 55.693 32300993 T G -2 locus.579 55.7046 32331174 C T -2 locus.580 55.7232 32379564 G A -2 locus.581 55.7294 32395885 A G -2 locus.582 55.7964 32570209 T C -2 locus.583 55.8364 32674404 C T -2 locus.584 55.8843 32798936 A G -2 locus.585 55.8948 32826395 T C -2 locus.586 55.9205 32893038 C A -2 locus.587 55.9282 32913281 G A -2 locus.588 55.9421 32949467 T C -2 locus.589 55.9571 32988451 A G -2 locus.590 55.9599 32995715 C T -2 locus.591 55.9706 33023686 G A -2 locus.592 56.0147 33138364 T C -2 locus.593 56.1203 33270908 C G -2 locus.594 56.2272 33332770 A C -2 locus.595 56.3851 33424102 A G -2 locus.596 56.6439 33573804 T C -2 locus.597 56.9005 33722263 C T -2 locus.598 56.9837 33770371 A G -2 locus.599 57.0119 33786687 C T -2 locus.600 57.0991 33837135 G A -2 locus.601 57.1443 33863299 A G -2 locus.602 57.2317 33913809 G A -2 locus.603 57.3107 33959555 G T -2 locus.604 57.3468 33980393 C A -2 locus.605 57.3997 34011044 C T -2 locus.606 57.536 34089866 C T -2 locus.607 57.547 34096217 T C -2 locus.608 57.8331 34261707 A G -2 locus.609 57.9003 34303557 A G -2 locus.610 57.9845 34376030 T C -2 locus.611 58.0122 34399837 A T -2 locus.612 58.0774 34455995 C A -2 locus.613 58.1102 34484259 G A -2 locus.614 58.1939 34556260 T C -2 locus.615 58.2263 34584226 C T -2 locus.616 58.2629 34615665 G A -2 locus.617 58.4677 34792034 C A -2 locus.618 58.4801 34802714 A G -2 locus.619 58.5094 34827963 A T -2 locus.620 58.5596 34871175 C T -2 locus.621 58.6192 34922497 G A -2 locus.622 58.6929 34985894 A G -2 locus.623 58.7578 35041747 G C -2 locus.624 58.7855 35065670 T C -2 locus.625 58.8537 35124377 T G -2 locus.626 58.9435 35201638 A C -2 locus.627 59.0119 35260588 A C -2 locus.628 59.0609 35302706 G T -2 locus.629 59.0832 35321932 T C -2 locus.630 59.0927 35330121 C T -2 locus.631 59.1881 35412247 C T -2 locus.632 59.2367 35454072 A G -2 locus.633 59.2505 35465947 G A -2 locus.634 59.3654 35564869 T G -2 locus.635 59.3853 35582012 C T -2 locus.636 59.4702 35655097 G A -2 locus.637 59.5089 35688408 C T -2 locus.638 59.5609 35733197 T C -2 locus.639 59.5749 35745263 A G -2 locus.640 59.6107 35776120 T G -2 locus.641 59.661 35819432 A G -2 locus.642 59.7469 35929894 T G -2 locus.643 59.7847 36013842 A G -2 locus.644 59.8124 36075528 G A -2 locus.645 59.8334 36122230 T C -2 locus.646 59.8417 36140443 C T -2 locus.647 59.8682 36199379 C A -2 locus.648 59.8813 36228409 G A -2 locus.649 59.8971 36263527 C T -2 locus.650 59.9076 36286992 A G -2 locus.651 59.9829 36454190 G A -2 locus.652 60.1638 36544130 A G -2 locus.653 60.4812 36644729 T C -2 locus.654 60.6857 36709532 C A -2 locus.655 60.9448 36791645 A G -2 locus.656 61.077 36833542 G A -2 locus.657 61.1957 36871168 A G -2 locus.658 61.3764 36934577 A G -2 locus.659 61.4051 36971592 G A -2 locus.660 61.5548 37164388 G A -2 locus.661 61.7016 37353417 A G -2 locus.662 61.7758 37448982 C T -2 locus.663 61.854 37549686 G A -2 locus.664 61.9074 37618402 G A -2 locus.665 61.9478 37670422 A G -2 locus.666 62.6714 37926248 T C -2 locus.667 62.8152 37991496 A C -2 locus.668 62.9444 38050036 T C -2 locus.669 63.1223 38134680 A G -2 locus.670 63.1418 38146975 C T -2 locus.671 63.1558 38155780 T C -2 locus.672 63.2003 38183817 T C -2 locus.673 63.2947 38243345 C T -2 locus.674 63.4387 38334113 G T -2 locus.675 63.5849 38506443 C T -2 locus.676 63.6144 38545616 C T -2 locus.677 63.6574 38602691 A G -2 locus.678 63.6841 38638193 A C -2 locus.679 63.7643 38744795 G A -2 locus.680 63.7752 38759231 G A -2 locus.681 63.8028 38795830 C T -2 locus.682 63.8752 38892010 T C -2 locus.683 63.8859 38906300 A G -2 locus.684 63.9284 38962682 T C -2 locus.685 63.9703 39018351 G A -2 locus.686 64.0755 39158136 A G -2 locus.687 64.1058 39198369 A G -2 locus.688 64.1375 39240476 A G -2 locus.689 64.2033 39327845 T C -2 locus.690 64.2661 39411236 G A -2 locus.691 64.2702 39416648 G A -2 locus.692 64.3398 39509173 T C -2 locus.693 64.359 39534629 A G -2 locus.694 64.3977 39586061 G T -2 locus.695 64.4192 39614644 G A -2 locus.696 64.5136 39740026 G A -2 locus.697 64.5545 39794344 T C -2 locus.698 64.6033 39859117 T C -2 locus.699 64.6299 39894509 T C -2 locus.700 64.7011 39989047 C A -2 locus.701 64.7273 40023789 A C -2 locus.702 64.7669 40076474 T C -2 locus.703 64.7842 40099347 C T -2 locus.704 64.8237 40151930 A G -2 locus.705 64.8644 40205877 T C -2 locus.706 64.9126 40269973 G A -2 locus.707 64.9735 40350901 C G -2 locus.708 65.0258 40420241 T C -2 locus.709 65.062 40468426 A G -2 locus.710 65.1749 40652249 G T -2 locus.711 65.2299 40753889 T G -2 locus.712 65.2495 40790032 G T -2 locus.713 65.2763 40839676 C 0 -2 locus.714 65.2957 40875507 C T -2 locus.715 65.3215 40923200 T C -2 locus.716 65.3261 40931803 C T -2 locus.717 65.3978 41064340 A G -2 locus.718 65.4508 41162381 A G -2 locus.719 65.5007 41254670 C A -2 locus.720 65.5048 41262244 G A -2 locus.721 65.5256 41300594 A G -2 locus.722 65.6499 41530444 A G -2 locus.723 65.6699 41567516 C T -2 locus.724 65.686 41597285 C T -2 locus.725 65.6955 41614741 T C -2 locus.726 65.7301 41678848 G T -2 locus.727 65.7659 41726358 T C -2 locus.728 65.95 41851792 A G -2 locus.729 65.9824 41873907 A G -2 locus.730 66.1687 42000792 T C -2 locus.731 66.2768 42074440 C T -2 locus.732 66.3936 42153984 G T -2 locus.733 66.461 42199949 G A -2 locus.734 66.5729 42276176 G A -2 locus.735 66.8631 42499181 C T -2 locus.736 66.8832 42535118 A G -2 locus.737 66.8916 42550059 T C -2 locus.738 66.9141 42590125 G A -2 locus.739 66.9582 42668778 A G -2 locus.740 67.0058 42753420 A G -2 locus.741 67.0242 42786287 C T -2 locus.742 67.0474 42827556 T C -2 locus.743 67.376 43014492 C T -2 locus.744 67.5591 43109801 A G -2 locus.745 67.6422 43153034 G A -2 locus.746 67.7019 43184130 T C -2 locus.747 67.8485 43260410 T C -2 locus.748 68.0032 43340923 A T -2 locus.749 68.1935 43439988 C T -2 locus.750 68.301 43495949 G T -2 locus.751 68.374 43558237 C T -2 locus.752 68.4211 43603937 C T -2 locus.753 68.486 43666919 A C -2 locus.754 68.5334 43712947 C T -2 locus.755 68.55 43735061 A G -2 locus.756 68.55 43795555 T C -2 locus.757 68.55 43852045 C T -2 locus.758 68.55 43903372 T C -2 locus.759 68.5724 43932768 T C -2 locus.760 68.8234 43991873 G T -2 locus.761 68.899 44046382 G A -2 locus.762 68.966 44103905 A G -2 locus.763 69.001 44133953 T C -2 locus.764 69.0251 44154644 G A -2 locus.765 69.1441 44256688 G A -2 locus.766 69.2175 44319632 C T -2 locus.767 69.3471 44430836 A G -2 locus.768 69.3823 44461037 G T -2 locus.769 69.4495 44518718 C T -2 locus.770 69.473 44538846 A G -2 locus.771 69.6145 44660277 T G -2 locus.772 69.6473 44688436 A 0 -2 locus.773 69.694 44728489 C T -2 locus.774 69.7313 44760451 C T -2 locus.775 69.7912 44811895 G C -2 locus.776 69.8468 44859584 T C -2 locus.777 69.8704 44879828 A G -2 locus.778 69.9283 44929471 A G -2 locus.779 70.0124 45001647 T G -2 locus.780 70.0287 45015658 G A -2 locus.781 70.0477 45031982 G A -2 locus.782 70.1187 45092839 C T -2 locus.783 70.1856 45150277 C T -2 locus.784 70.2217 45181206 T G -2 locus.785 70.306 45253559 C T -2 locus.786 70.3846 45320994 C T -2 locus.787 70.4277 45357951 G A -2 locus.788 70.586 45493819 T C -2 locus.789 70.5941 45500785 T C -2 locus.790 70.654 45552152 G T -2 locus.791 70.7776 45658202 C T -2 locus.792 70.8335 45686718 G A -2 locus.793 71.0242 45739882 G A -2 locus.794 71.6536 45936539 C A -2 locus.795 71.6917 45959888 G T -2 locus.796 71.8315 46045582 G A -2 locus.797 72.0125 46146229 C T -2 locus.798 72.0586 46163449 C T -2 locus.799 72.2098 46219946 G A -2 locus.800 72.2707 46242713 T C -2 locus.801 72.4004 46294279 A G -2 locus.802 72.4578 46318275 G A -2 locus.803 72.5875 46372459 C T -2 locus.804 72.6679 46420641 T C -2 locus.805 72.7255 46491700 T C -2 locus.806 72.7789 46557607 A G -2 locus.807 72.8118 46598180 A C -2 locus.808 72.8526 46648569 G A -2 locus.809 73.0025 46833373 G A -2 locus.810 73.0666 46912545 C T -2 locus.811 73.3906 47312229 T C -2 locus.812 73.4236 47352919 G T -2 locus.813 73.5027 47450537 T C -2 locus.814 73.6742 47662062 C T -2 locus.815 73.7323 47733694 A G -2 locus.816 73.7751 47786515 A G -2 locus.817 73.8296 47853771 G A -2 locus.818 73.8586 47889542 T C -2 locus.819 73.9691 48025916 T C -2 locus.820 73.9912 48053161 T C -2 locus.821 74.0394 48112634 G A -2 locus.822 74.0676 48147405 T C -2 locus.823 74.1108 48200678 A G -2 locus.824 74.1472 48245538 A G -2 locus.825 74.1683 48271657 T C -2 locus.826 74.2187 48333814 C T -2 locus.827 74.3139 48451220 C 0 -2 locus.828 74.3547 48501546 C A -2 locus.829 74.3841 48537833 T C -2 locus.830 74.4239 48586900 T C -2 locus.831 74.4407 48607730 T C -2 locus.832 74.4749 48649872 A C -2 locus.833 74.5407 48731082 G A -2 locus.834 74.5665 48762835 A G -2 locus.835 74.6096 48816011 G A -2 locus.836 74.6162 48824104 C T -2 locus.837 74.7021 48930164 C G -2 locus.838 74.7662 49009193 G T -2 locus.839 74.7887 49036920 A G -2 locus.840 74.8169 49071753 C T -2 locus.841 74.8959 49169218 C T -2 locus.842 74.9219 49201260 G A -2 locus.843 74.9307 49212174 C A -2 locus.844 74.9373 49220327 G A -2 locus.845 74.9556 49242884 G A -2 locus.846 75.0067 49305946 A G -2 locus.847 75.0372 49343576 A G -2 locus.848 75.0465 49355077 C T -2 locus.849 75.1247 49451490 G T -2 locus.850 75.1511 49484087 C T -2 locus.851 75.1686 49505669 G T -2 locus.852 75.2192 49568110 T C -2 locus.853 75.2265 49577068 C T -2 locus.854 75.2394 49592974 C A -2 locus.855 75.2467 49602010 A G -2 locus.856 75.2826 49646230 C A -2 locus.857 75.3137 49684622 G A -2 locus.858 75.4134 49807637 G A -2 locus.859 75.4408 49841409 T C -2 locus.860 75.4681 49875068 A G -2 locus.861 75.5643 49993837 C A -2 locus.862 75.5711 50002207 A G -2 locus.863 75.6029 50041365 T C -2 locus.864 75.6344 50080258 A T -2 locus.865 75.6883 50146804 T C -2 locus.866 75.7058 50168392 G A -2 locus.867 75.761 50236460 C A -2 locus.868 75.7712 50248977 T G -2 locus.869 75.8593 50357777 T C -2 locus.870 75.8851 50389489 C T -2 locus.871 75.9747 50500110 A C -2 locus.872 76.0281 50565924 C A -2 locus.873 76.1603 50729007 G C -2 locus.874 76.2288 50813590 C T -2 locus.875 76.3389 50949347 T C -2 locus.876 76.3899 51012330 C T -2 locus.877 76.4659 51106073 T C -2 locus.878 76.4717 51143878 G A -2 locus.879 76.5957 51291515 T C -2 locus.880 76.6129 51312024 T C -2 locus.881 76.6741 51384849 G A -2 locus.882 76.7957 51529698 A G -2 locus.883 76.8602 51606428 C T -2 locus.884 76.9557 51720147 A G -2 locus.885 77.0035 51777053 T C -2 locus.886 77.043 51824098 G A -2 locus.887 77.1052 51898098 T C -2 locus.888 77.1504 51952002 T C -2 locus.889 77.1798 51986915 T C -2 locus.890 77.2118 52025095 C T -2 locus.891 77.2328 52050037 A G -2 locus.892 77.2755 52100951 C A -2 locus.893 77.3162 52149425 T C -2 locus.894 77.3399 52177597 T C -2 locus.895 77.3746 52218919 C T -2 locus.896 77.4146 52266474 G T -2 locus.897 77.4662 52327990 G A -2 locus.898 77.5346 52409379 A G -2 locus.899 77.5619 52441926 C T -2 locus.900 77.6325 52525954 T C -2 locus.901 77.6829 52585897 A G -2 locus.902 77.7295 52641482 C T -2 locus.903 77.7804 52702060 C T -2 locus.904 77.791 52714676 C T -2 locus.905 77.8055 52731947 A C -2 locus.906 77.8544 52790093 A G -2 locus.907 77.8947 52838095 G A -2 locus.908 77.9272 52876829 T C -2 locus.909 77.9668 52924011 A G -2 locus.910 77.979 52938537 G A -2 locus.911 78.029 52997998 C T -2 locus.912 78.0674 53043790 G C -2 locus.913 78.1221 53108836 A G -2 locus.914 78.1627 53157157 C T -2 locus.915 78.2634 53277077 C T -2 locus.916 78.2862 53304271 C G -2 locus.917 78.3381 53366034 G A -2 locus.918 78.36 53415584 C T -2 locus.919 78.36 53528684 C T -2 locus.920 78.36 53563082 G A -2 locus.921 78.36 53600737 A G -2 locus.922 78.36 53670410 G A -2 locus.923 78.36 53725483 A G -2 locus.924 78.36 53797807 C T -2 locus.925 78.36 53837176 C T -2 locus.926 78.36 53879233 G T -2 locus.927 78.36 53986551 T C -2 locus.928 78.36 53991275 A G -2 locus.929 78.36 54047306 T G -2 locus.930 78.36 54061950 T G -2 locus.931 78.36 54086367 A G -2 locus.932 78.36 54125041 G A -2 locus.933 78.36 54135888 A G -2 locus.934 78.36 54173591 C T -2 locus.935 78.36 54213818 A G -2 locus.936 78.36 54240741 C A -2 locus.937 78.36 54249685 T G -2 locus.938 78.36 54365821 G T -2 locus.939 78.36 54386685 A G -2 locus.940 78.36 54485977 T C -2 locus.941 78.3892 54596587 C T -2 locus.942 78.4234 54637271 G T -2 locus.943 78.4504 54669270 G A -2 locus.944 78.461 54681929 C T -2 locus.945 78.466 54687816 C 0 -2 locus.946 78.5135 54744188 A G -2 locus.947 78.5326 54766935 A G -2 locus.948 78.5614 54801135 C A -2 locus.949 78.633 54886112 A C -2 locus.950 78.6643 54923300 A C -2 locus.951 78.6758 54936988 C A -2 locus.952 78.7167 54985554 A G -2 locus.953 78.7535 55029305 A G -2 locus.954 78.8058 55091374 C T -2 locus.955 78.844 55136707 G T -2 locus.956 78.8644 55160910 G A -2 locus.957 79.0784 55415073 A G -2 locus.958 79.0869 55425163 C T -2 locus.959 79.1442 55493174 A G -2 locus.960 79.1649 55517816 G T -2 locus.961 79.1904 55548084 C T -2 locus.962 79.2111 55572624 G T -2 locus.963 79.3263 55709509 G T -2 locus.964 79.3674 55758208 T G -2 locus.965 79.4585 55866403 A G -2 locus.966 79.4939 55908488 A C -2 locus.967 79.5263 55946911 T C -2 locus.968 79.5496 55974621 C T -2 locus.969 79.5676 55995982 A G -2 locus.970 79.6045 56039866 G A -2 locus.971 79.6271 56066709 C T -2 locus.972 79.701 56154368 C T -2 locus.973 79.7319 56191129 A C -2 locus.974 79.8023 56274688 C T -2 locus.975 79.827 56304104 G A -2 locus.976 79.8698 56354875 A G -2 locus.977 79.9191 56413369 C 0 -2 locus.978 79.9472 56446750 A G -2 locus.979 80.0102 56521561 C T -2 locus.980 80.0394 56556228 T C -2 locus.981 80.1096 56639600 C T -2 locus.982 80.1431 56679411 A C -2 locus.983 80.2034 56751008 C 0 -2 locus.984 80.2484 56804497 C T -2 locus.985 80.2792 56840997 C A -2 locus.986 80.3401 56913417 C T -2 locus.987 80.3538 56929568 T C -2 locus.988 80.3638 56941505 C T -2 locus.989 80.403 56988016 G A -2 locus.990 80.4212 57009664 G T -2 locus.991 80.5242 57131975 G A -2 locus.992 80.5666 57182355 T C -2 locus.993 80.6363 57265076 T C -2 locus.994 80.6721 57307599 G A -2 locus.995 80.7023 57343523 A G -2 locus.996 80.7302 57376604 G A -2 locus.997 80.7544 57405297 T C -2 locus.998 80.8489 57495366 C T -2 locus.999 80.8867 57528055 A G -2 locus.1000 80.9231 57559602 C T -2 locus.1001 80.9725 57602365 T G -2 locus.1002 81.0424 57662874 T C -2 locus.1003 81.0808 57696058 G A -2 locus.1004 81.0944 57707823 T C -2 locus.1005 81.111 57722227 C T -2 locus.1006 81.1511 57756898 C T -2 locus.1007 81.2065 57804814 C T -2 locus.1008 81.2281 57823523 A G -2 locus.1009 81.2722 57861735 A G -2 locus.1010 81.3297 57911484 C T -2 locus.1011 81.3634 57940647 T C -2 locus.1012 81.4201 57989729 G T -2 locus.1013 81.7 58078003 C T -2 locus.1014 81.7 58102980 G T -2 locus.1015 81.7 58123258 C A -2 locus.1016 81.7 58178945 C T -2 locus.1017 81.7 58198123 A G -2 locus.1018 81.7 58258740 C T -2 locus.1019 81.7 58368498 C T -2 locus.1020 81.7 58413160 A G -2 locus.1021 81.7 58421191 C T -2 locus.1022 81.7 58445254 A G -2 locus.1023 81.7 58497237 G C -2 locus.1024 81.7 58549671 G A -2 locus.1025 81.7 58600330 C T -2 locus.1026 81.7 58643869 C T -2 locus.1027 81.7 58698919 G A -2 locus.1028 81.7 58746494 T C -2 locus.1029 81.7 58791324 G A -2 locus.1030 81.7 58830280 G A -2 locus.1031 81.7 58896602 C 0 -2 locus.1032 81.7 58905801 A G -2 locus.1033 81.7 58918403 C T -2 locus.1034 81.8327 58996361 T C -2 locus.1035 82.22 59112309 G A -2 locus.1036 82.33 59231945 T C -2 locus.1037 82.33 59306755 G T -2 locus.1038 82.33 59340110 G T -2 locus.1039 82.337 59379002 C T -2 locus.1040 82.3482 59401325 T C -2 locus.1041 82.3837 59471881 T C -2 locus.1042 82.433 59569826 A G -2 locus.1043 82.4549 59613195 C T -2 locus.1044 82.4761 59655308 G T -2 locus.1045 82.4979 59698643 A G -2 locus.1046 82.5173 59737174 A G -2 locus.1047 82.5303 59762935 A G -2 locus.1048 82.5687 59839348 C T -2 locus.1049 82.5896 59880834 G A -2 locus.1050 82.6104 59918057 C T -2 locus.1051 82.6448 59972946 A G -2 locus.1052 82.6648 60004909 G A -2 locus.1053 82.6894 60044110 C T -2 locus.1054 82.7213 60095030 T C -2 locus.1055 82.7443 60131740 G A -2 locus.1056 82.7632 60161996 C T -2 locus.1057 82.8199 60252367 C T -2 locus.1058 82.9308 60273537 T G -2 locus.1059 83.2278 60329655 A G -2 locus.1060 83.2552 60340361 C T -2 locus.1061 83.37 60434007 T C -2 locus.1062 83.3861 60509054 G A -2 locus.1063 83.4423 60592862 G A -2 locus.1064 83.5123 60634939 C T -2 locus.1065 83.56 60722037 T C -2 locus.1066 83.6534 60817124 T C -2 locus.1067 83.7056 60869601 T C -2 locus.1068 83.7791 60943630 G T -2 locus.1069 83.8283 60993141 T C -2 locus.1070 83.834 60998882 C T -2 locus.1071 83.871 61036097 C T -2 locus.1072 83.912 61077368 A C -2 locus.1073 83.9278 61093230 T A -2 locus.1074 83.98 61166920 T C -2 locus.1075 83.98 61227472 T C -2 locus.1076 83.98 61245971 A G -2 locus.1077 83.98 61275543 A G -2 locus.1078 83.98 61449429 C T -2 locus.1079 83.98 61456748 A G -2 locus.1080 83.98 61578504 C A -2 locus.1081 83.98 61621077 G A -2 locus.1082 83.98 61657597 G A -2 locus.1083 83.98 61735560 T C -2 locus.1084 83.98 61743310 T C -2 locus.1085 83.98 61875935 T G -2 locus.1086 83.98 61921092 C T -2 locus.1087 83.98 61969211 G A -2 locus.1088 83.98 61982604 G 0 -2 locus.1089 83.98 62022903 T C -2 locus.1090 84.0089 62064028 T C -2 locus.1091 84.0564 62107494 A G -2 locus.1092 84.1225 62167958 G T -2 locus.1093 84.1646 62206448 T C -2 locus.1094 84.201 62239788 C T -2 locus.1095 84.2971 62327753 C T -2 locus.1096 84.3551 62380854 G A -2 locus.1097 84.3945 62416830 G A -2 locus.1098 84.4523 62469767 A G -2 locus.1099 84.4665 62482737 C T -2 locus.1100 84.5124 62524786 A G -2 locus.1101 84.5713 62578658 T C -2 locus.1102 84.5906 62596308 A G -2 locus.1103 84.6739 62762794 T G -2 locus.1104 84.6762 62820094 A G -2 locus.1105 84.6796 62901797 C A -2 locus.1106 84.6806 62915181 A G -2 locus.1107 84.6977 63038076 T C -2 locus.1108 84.7012 63063096 A T -2 locus.1109 84.7032 63077240 G A -2 locus.1110 84.7105 63129338 T C -2 locus.1111 84.7215 63208513 T C -2 locus.1112 84.7292 63263649 A G -2 locus.1113 84.7465 63387842 G T -2 locus.1114 84.7502 63414624 T C -2 locus.1115 84.7548 63447389 C T -2 locus.1116 84.7592 63479215 T C -2 locus.1117 84.7641 63514459 C T -2 locus.1118 84.7684 63545507 A G -2 locus.1119 84.781 63635636 A G -2 locus.1120 84.7846 63661844 C T -2 locus.1121 84.7866 63675988 T C -2 locus.1122 84.7927 63720116 T C -2 locus.1123 84.7998 63770877 G A -2 locus.1124 84.8059 63814688 A 0 -2 locus.1125 84.8092 63837976 C T -2 locus.1126 84.8174 63897300 C T -2 locus.1127 84.8241 63945220 G A -2 locus.1128 84.8266 63963544 A G -2 locus.1129 84.8367 64035694 C T -2 locus.1130 84.8569 64180531 C T -2 locus.1131 84.8584 64191842 A C -2 locus.1132 84.8624 64219976 C T -2 locus.1133 84.8679 64259874 A C -2 locus.1134 84.8733 64298787 A G -2 locus.1135 84.8761 64318489 T G -2 locus.1136 84.8778 64331154 G T -2 locus.1137 84.8914 64428484 C T -2 locus.1138 84.8957 64459393 C T -2 locus.1139 84.9528 64504436 A G -2 locus.1140 85.0961 64542824 G A -2 locus.1141 85.1428 64555321 T C -2 locus.1142 85.3312 64622544 T C -2 locus.1143 85.5289 64722049 A G -2 locus.1144 85.5674 64741376 C T -2 locus.1145 85.6272 64771512 C T -2 locus.1146 85.8101 64863508 A G -2 locus.1147 85.846 64881603 T C -2 locus.1148 85.855 64886088 G A -2 locus.1149 85.9856 64951832 C T -2 locus.1150 86.1164 65017658 G A -2 locus.1151 86.1618 65040471 C A -2 locus.1152 86.4064 65163534 C T -2 locus.1153 86.4864 65203824 G A -2 locus.1154 86.6314 65276764 C A -2 locus.1155 86.727 65324896 C A -2 locus.1156 86.8822 65402955 A C -2 locus.1157 86.9327 65428369 A G -2 locus.1158 87.0222 65473406 G A -2 locus.1159 87.1275 65523417 C T -2 locus.1160 87.2373 65574894 A G -2 locus.1161 87.2839 65596735 G A -2 locus.1162 87.4092 65655522 G A -2 locus.1163 87.4442 65671920 G A -2 locus.1164 87.5645 65728353 G A -2 locus.1165 87.8427 65876876 A G -2 locus.1166 87.847 65921056 A G -2 locus.1167 87.8622 65962375 G A -2 locus.1168 87.8758 65974765 A G -2 locus.1169 87.9792 66079196 C 0 -2 locus.1170 88.0103 66143622 G A -2 locus.1171 88.0194 66162528 C T -2 locus.1172 88.05 66226023 C T -2 locus.1173 88.0957 66320518 G A -2 locus.1174 88.188 66511711 G A -2 locus.1175 88.2502 66543498 A G -2 locus.1176 88.7235 66608553 G A -2 locus.1177 89.119 66676291 T C -2 locus.1178 89.1523 66730561 A G -2 locus.1179 89.1686 66756988 T C -2 locus.1180 89.231 66858417 G A -2 locus.1181 89.24 66930441 C T -2 locus.1182 89.24 66963261 C T -2 locus.1183 89.24 67012655 A G -2 locus.1184 89.24 67051796 G A -2 locus.1185 89.24 67096899 T C -2 locus.1186 89.24 67126344 T G -2 locus.1187 89.24 67168555 G A -2 locus.1188 89.2905 67223689 A G -2 locus.1189 89.6564 67387676 C T -2 locus.1190 89.747 67428296 G A -2 locus.1191 89.881 67488344 A C -2 locus.1192 89.9844 67534697 T C -2 locus.1193 90.125 67597692 C T -2 locus.1194 90.1876 67625735 T C -2 locus.1195 90.3004 67676280 G A -2 locus.1196 90.3819 67709618 T C -2 locus.1197 90.521 67763382 C T -2 locus.1198 90.8446 67888429 T C -2 locus.1199 90.9468 67927937 C T -2 locus.1200 91.0388 67963504 C A -2 locus.1201 91.23 68055389 G A -2 locus.1202 91.23 68081340 A G -2 locus.1203 91.3298 68216266 G A -2 locus.1204 91.368 68263699 T C -2 locus.1205 91.3742 68271351 A G -2 locus.1206 91.4186 68326509 A G -2 locus.1207 91.4883 68412890 T C -2 locus.1208 91.5101 68440045 G A -2 locus.1209 91.5173 68448937 A G -2 locus.1210 91.5732 68518231 T C -2 locus.1211 91.6013 68553052 A G -2 locus.1212 91.6634 68630164 G A -2 locus.1213 91.6956 68670063 C T -2 locus.1214 91.735 68718997 T C -2 locus.1215 91.748 68735113 A G -2 locus.1216 91.7581 68747661 T C -2 locus.1217 91.8226 68827600 G A -2 locus.1218 91.902 68926087 T G -2 locus.1219 91.9486 68983881 G A -2 locus.1220 91.9969 69043837 A C -2 locus.1221 92.0253 69079036 G A -2 locus.1222 92.0787 69145328 A C -2 locus.1223 92.1239 69201411 G A -2 locus.1224 92.1642 69251399 T C -2 locus.1225 92.2091 69307056 C A -2 locus.1226 92.2479 69355202 G A -2 locus.1227 92.2708 69383584 A T -2 locus.1228 92.3173 69441272 G A -2 locus.1229 92.467 69626926 A G -2 locus.1230 92.4886 69653694 C A -2 locus.1231 92.4942 69660591 C T -2 locus.1232 92.5596 69741689 T G -2 locus.1233 92.5841 69772059 T C -2 locus.1234 92.6718 69880623 G A -2 locus.1235 92.6798 69890535 T C -2 locus.1236 92.7056 69922573 T C -2 locus.1237 92.7614 69991657 G A -2 locus.1238 92.8011 70040931 A G -2 locus.1239 92.86 70126155 G A -2 locus.1240 92.86 70160330 T C -2 locus.1241 92.86 70294503 T C -2 locus.1242 92.9354 70470527 C T -2 locus.1243 92.9947 70548455 C A -2 locus.1244 93.3012 70664942 T C -2 locus.1245 93.4565 70721438 G C -2 locus.1246 93.5707 70762985 T C -2 locus.1247 93.6781 70802060 C T -2 locus.1248 93.8484 70863996 G A -2 locus.1249 93.96 70904581 A G -2 locus.1250 94.0756 70946621 A C -2 locus.1251 94.1585 70976797 C T -2 locus.1252 94.7129 71178447 G 0 -2 locus.1253 94.7332 71185838 T C -2 locus.1254 94.8226 71218360 C T -2 locus.1255 95.2166 71361665 G A -2 locus.1256 95.2878 71387561 A G -2 locus.1257 95.416 71434200 T 0 -2 locus.1258 95.5718 71490850 C T -2 locus.1259 95.7713 71563408 G A -2 locus.1260 96.0698 71671999 A G -2 locus.1261 96.1702 71708492 T C -2 locus.1262 96.2552 71739429 A C -2 locus.1263 96.3985 71793127 A G -2 locus.1264 96.4923 71844617 T C -2 locus.1265 96.6237 71916747 C A -2 locus.1266 96.7992 72013096 C T -2 locus.1267 96.8569 72044787 C T -2 locus.1268 96.8806 72057797 G A -2 locus.1269 97.0434 72147185 C 0 -2 locus.1270 97.2 72254024 G A -2 locus.1271 97.2 72284971 C T -2 locus.1272 97.2 72338391 A C -2 locus.1273 97.2 72436861 G A -2 locus.1274 97.2 72460390 A G -2 locus.1275 97.2 72500691 G A -2 locus.1276 97.2 72607674 G A -2 locus.1277 97.2 72644072 A G -2 locus.1278 97.2 72709484 C T -2 locus.1279 97.2 72759408 T C -2 locus.1280 97.2 72769457 A G -2 locus.1281 97.2 72790181 G A -2 locus.1282 97.2 72875158 A G -2 locus.1283 97.2 72891678 C T -2 locus.1284 97.2 73046724 T 0 -2 locus.1285 97.2 73109758 C T -2 locus.1286 97.2 73142522 A C -2 locus.1287 97.2 73188664 C T -2 locus.1288 97.2 73226330 A G -2 locus.1289 97.2521 73287723 A G -2 locus.1290 97.3789 73333474 C T -2 locus.1291 97.4582 73362047 G T -2 locus.1292 97.7083 73475221 T C -2 locus.1293 97.753 73508928 A G -2 locus.1294 97.827 73564678 T C -2 locus.1295 97.8724 73598907 T C -2 locus.1296 97.9295 73642000 A G -2 locus.1297 98.0566 73737829 A G -2 locus.1298 98.177 73828642 A G -2 locus.1299 98.1909 73839087 G A -2 locus.1300 98.3075 73926990 T C -2 locus.1301 98.4109 74004954 G A -2 locus.1302 98.4885 74063494 T G -2 locus.1303 98.5243 74090507 G A -2 locus.1304 98.6576 74190969 G A -2 locus.1305 98.7197 74237807 A G -2 locus.1306 98.8609 74344292 T C -2 locus.1307 99.007 74454438 A G -2 locus.1308 99.1494 74561789 A C -2 locus.1309 99.2058 74604332 C A -2 locus.1310 99.2254 74619113 T C -2 locus.1311 99.2863 74665004 C T -2 locus.1312 99.3328 74700075 T C -2 locus.1313 99.4466 74785937 G T -2 locus.1314 99.4973 74824143 C T -2 locus.1315 99.5425 74858201 C T -2 locus.1316 99.5867 74891548 C A -2 locus.1317 99.6124 74910946 A G -2 locus.1318 99.6583 74945550 G A -2 locus.1319 99.7866 75042274 C T -2 locus.1320 99.9197 75142623 T C -2 locus.1321 99.9861 75192672 G A -2 locus.1322 100.01 75220286 A G -2 locus.1323 100.05 75271694 G A -2 locus.1324 100.236 75507684 G T -2 locus.1325 100.29 75574972 A C -2 locus.1326 100.33 75626143 C A -2 locus.1327 100.345 75644823 T C -2 locus.1328 100.368 75674121 T C -2 locus.1329 100.424 75745623 G A -2 locus.1330 100.467 75799552 G A -2 locus.1331 100.505 75848139 A G -2 locus.1332 100.537 75887757 C T -2 locus.1333 100.602 75970858 T C -2 locus.1334 100.622 75995889 G T -2 locus.1335 100.66 76044554 A C -2 locus.1336 100.685 76075819 T C -2 locus.1337 100.738 76142734 G A -2 locus.1338 100.752 76161143 T C -2 locus.1339 100.95 76411172 A G -2 locus.1340 100.992 76464705 T C -2 locus.1341 101.032 76515135 A G -2 locus.1342 101.07 76562755 T G -2 locus.1343 101.096 76595968 C T -2 locus.1344 101.121 76627899 C T -2 locus.1345 101.204 76732322 G A -2 locus.1346 101.216 76748382 G A -2 locus.1347 101.244 76783372 T C -2 locus.1348 101.28 76829310 G A -2 locus.1349 101.286 76836434 T C -2 locus.1350 101.291 76843058 C T -2 locus.1351 101.333 76896048 G A -2 locus.1352 101.367 76939378 G T -2 locus.1353 101.399 76979186 C T -2 locus.1354 101.502 77110445 A G -2 locus.1355 101.55 77170481 T G -2 locus.1356 101.573 77200457 T C -2 locus.1357 101.647 77293547 C T -2 locus.1358 101.674 77328509 T C -2 locus.1359 101.703 77364875 T G -2 locus.1360 101.708 77370812 C A -2 locus.1361 101.744 77416440 G A -2 locus.1362 101.759 77435455 A 0 -2 locus.1363 101.775 77455684 A G -2 locus.1364 101.847 77547185 A G -2 locus.1365 101.88 77588602 C T -2 locus.1366 101.959 77688427 G A -2 locus.1367 101.99 77727582 T G -2 locus.1368 102.004 77745712 C A -2 locus.1369 102.035 77784682 A G -2 locus.1370 102.061 77817637 C A -2 locus.1371 102.068 77826947 T G -2 locus.1372 102.076 77836297 T C -2 locus.1373 102.105 77874168 G A -2 locus.1374 102.133 77908933 G A -2 locus.1375 102.141 77918896 C T -2 locus.1376 102.188 77978409 A G -2 locus.1377 102.227 78028594 C T -2 locus.1378 102.239 78043749 T C -2 locus.1379 102.262 78072799 T C -2 locus.1380 102.379 78221205 T G -2 locus.1381 102.422 78274575 A G -2 locus.1382 102.455 78316809 C T -2 locus.1383 102.471 78336631 T G -2 locus.1384 102.49 78360957 C T -2 locus.1385 102.5 78426196 T G -2 locus.1386 102.5 78462604 C T -2 locus.1387 102.5 78498558 A G -2 locus.1388 102.508 78561076 T C -2 locus.1389 102.526 78693837 G A -2 locus.1390 102.539 78792339 C T -2 locus.1391 102.581 78854385 A G -2 locus.1392 102.603 78884015 T C -2 locus.1393 102.618 78903649 A T -2 locus.1394 102.646 78939960 A G -2 locus.1395 102.691 79000514 A G -2 locus.1396 102.704 79017511 A G -2 locus.1397 103.004 79120023 A G -2 locus.1398 103.078 79143799 C T -2 locus.1399 103.2 79183271 T C -2 locus.1400 103.221 79189919 A G -2 locus.1401 103.332 79225836 T C -2 locus.1402 103.429 79285145 T C -2 locus.1403 103.447 79298450 C T -2 locus.1404 103.461 79309290 T C -2 locus.1405 103.862 79603684 T C -2 locus.1406 103.888 79645779 G A -2 locus.1407 103.914 79733979 A G -2 locus.1408 103.927 79778675 C T -2 locus.1409 103.993 80001308 G C -2 locus.1410 104.002 80032995 G A -2 locus.1411 104.009 80058733 C T -2 locus.1412 104.014 80075988 G A -2 locus.1413 104.029 80125390 G A -2 locus.1414 104.035 80147386 C A -2 locus.1415 104.037 80154541 G A -2 locus.1416 105.37 80262318 G A -2 locus.1417 105.37 80304321 A G -2 locus.1418 105.37 80343267 A C -2 locus.1419 105.383 80376822 A G -2 locus.1420 105.416 80421373 T C -2 locus.1421 105.492 80521412 C T -2 locus.1422 105.496 80526524 C T -2 locus.1423 105.506 80540524 A G -2 locus.1424 105.543 80589921 G A -2 locus.1425 105.609 80676880 A G -2 locus.1426 105.627 80701449 A G -2 locus.1427 105.649 80731070 T G -2 locus.1428 105.656 80740441 T C -2 locus.1429 105.697 80794265 G A -2 locus.1430 105.71 80811295 A C -2 locus.1431 105.745 80857803 T C -2 locus.1432 105.779 80904183 G A -2 locus.1433 105.808 80942245 C T -2 locus.1434 105.827 80967126 G A -2 locus.1435 105.84 80984252 G A -2 locus.1436 105.867 81020251 C T -2 locus.1437 105.904 81069569 A G -2 locus.1438 105.966 81153054 T C -2 locus.1439 105.978 81167921 A G -2 locus.1440 106.057 81273844 T C -2 locus.1441 106.135 81377249 G A -2 locus.1442 106.158 81407809 C T -2 locus.1443 106.192 81452694 G A -2 locus.1444 106.212 81479903 G A -2 locus.1445 106.248 81527473 G A -2 locus.1446 106.274 81562596 A C -2 locus.1447 106.297 81592497 A G -2 locus.1448 106.352 81666272 G A -2 locus.1449 106.37 81689824 C T -2 locus.1450 106.413 81746910 G A -2 locus.1451 106.422 81758958 T C -2 locus.1452 106.442 81785728 G A -2 locus.1453 106.467 81819011 C T -2 locus.1454 106.518 81887124 A C -2 locus.1455 106.551 81930808 T C -2 locus.1456 106.58 81968762 A C -2 locus.1457 106.614 82013700 C 0 -2 locus.1458 106.748 82192970 C T -2 locus.1459 106.807 82270637 C T -2 locus.1460 106.822 82290592 C T -2 locus.1461 106.864 82346323 T C -2 locus.1462 106.984 82507056 G A -2 locus.1463 107.022 82557618 G A -2 locus.1464 107.03 82633584 G A -2 locus.1465 107.03 82692589 G A -2 locus.1466 107.03 82706925 G A -2 locus.1467 107.053 82856320 A G -2 locus.1468 107.092 82891061 C T -2 locus.1469 107.209 82997639 C T -2 locus.1470 107.312 83090209 A G -2 locus.1471 107.34 83115753 T G -2 locus.1472 107.427 83194854 G A -2 locus.1473 107.449 83214641 A G -2 locus.1474 107.559 83341689 C T -2 locus.1475 107.564 83348252 G A -2 locus.1476 107.622 83424768 C A -2 locus.1477 107.647 83457472 G 0 -2 locus.1478 107.704 83531972 A G -2 locus.1479 107.73 83566969 G A -2 locus.1480 107.752 83612541 T C -2 locus.1481 107.755 83644533 G A -2 locus.1482 107.761 83702496 C T -2 locus.1483 107.773 83819936 C A -2 locus.1484 107.778 83877361 G A -2 locus.1485 107.781 83899783 T C -2 locus.1486 107.787 83965632 G A -2 locus.1487 107.796 84054194 T C -2 locus.1488 107.797 84069275 C T -2 locus.1489 107.805 84141589 T C -2 locus.1490 107.818 84279797 C T -2 locus.1491 107.827 84368094 A G -2 locus.1492 107.843 84530797 C T -2 locus.1493 107.848 84580673 A G -2 locus.1494 107.854 84640849 G A -2 locus.1495 107.861 84705740 G A -2 locus.1496 107.863 84732669 G A -2 locus.1497 107.869 84791414 G T -2 locus.1498 107.871 84802665 T C -2 locus.1499 107.88 84891847 A G -2 locus.1500 107.88 84923794 A G -2 locus.1501 107.894 84938566 A G -2 locus.1502 108.213 85150906 C T -2 locus.1503 108.373 85201974 C A -2 locus.1504 108.501 85242819 G A -2 locus.1505 108.73 85316091 G A -2 locus.1506 108.805 85339910 T C -2 locus.1507 109.243 85508894 A G -2 locus.1508 109.32 85539011 T 0 -2 locus.1509 109.451 85589367 A G -2 locus.1510 109.638 85661724 A G -2 locus.1511 109.955 85784542 G A -2 locus.1512 110.11 85852779 C T -2 locus.1513 110.11 85875802 C T -2 locus.1514 110.12 85956091 T C -2 locus.1515 110.131 85982773 C A -2 locus.1516 110.16 86057456 G A -2 locus.1517 110.179 86104148 G T -2 locus.1518 110.182 86113413 G A -2 locus.1519 110.202 86164251 T G -2 locus.1520 110.218 86204211 G A -2 locus.1521 110.224 86217927 T C -2 locus.1522 110.243 86266274 G A -2 locus.1523 110.255 86297890 C A -2 locus.1524 110.269 86333486 A G -2 locus.1525 110.288 86380895 G A -2 locus.1526 110.322 86465561 G A -2 locus.1527 110.347 86530501 C T -2 locus.1528 110.368 86582074 C T -2 locus.1529 110.402 86669812 A 0 -2 locus.1530 110.453 86798921 G A -2 locus.1531 110.462 86821025 T C -2 locus.1532 110.485 86861359 G A -2 locus.1533 110.52 86907702 G A -2 locus.1534 110.561 86962920 A 0 -2 locus.1535 110.575 86981313 T C -2 locus.1536 110.608 87026101 T G -2 locus.1537 110.647 87077242 A G -2 locus.1538 110.674 87113994 G A -2 locus.1539 110.693 87138916 T C -2 locus.1540 110.722 87177434 C T -2 locus.1541 110.756 87222916 T C -2 locus.1542 110.781 87257501 A G -2 locus.1543 110.825 87315599 T C -2 locus.1544 110.884 87394092 C A -2 locus.1545 110.9 87415354 A G -2 locus.1546 110.947 87478446 G A -2 locus.1547 111.068 87640092 C T -2 locus.1548 111.146 87744101 A G -2 locus.1549 111.168 87773564 C T -2 locus.1550 111.2 87816239 C T -2 locus.1551 111.208 87827444 C T -2 locus.1552 111.247 87879884 T C -2 locus.1553 111.267 87906063 G A -2 locus.1554 111.275 87916949 C T -2 locus.1555 111.314 87968708 G A -2 locus.1556 111.339 88002164 G A -2 locus.1557 111.373 88047469 A G -2 locus.1558 111.397 88080464 G A -2 locus.1559 111.448 88147512 G A -2 locus.1560 111.466 88172646 C T -2 locus.1561 111.535 88218618 C A -2 locus.1562 111.566 88233994 G T -2 locus.1563 111.775 88339215 A G -2 locus.1564 111.831 88367759 G A -2 locus.1565 111.861 88382410 T C -2 locus.1566 111.991 88447935 C T -2 locus.1567 112.019 88553200 A G -2 locus.1568 112.023 88593814 A G -2 locus.1569 112.027 88630138 G A -2 locus.1570 112.032 88681374 G A -2 locus.1571 112.034 88708060 A G -2 locus.1572 112.038 88752095 A G -2 locus.1573 112.042 88784524 T C -2 locus.1574 112.042 88789712 T 0 -2 locus.1575 112.045 88818925 T C -2 locus.1576 112.048 88851122 C T -2 locus.1577 112.053 88900607 G 0 -2 locus.1578 112.062 88992392 G A -2 locus.1579 112.097 89359755 C T -2 locus.1580 112.104 89429616 A G -2 locus.1581 112.117 89567061 T C -2 locus.1582 112.121 89610253 G A -2 locus.1583 112.141 89810015 T C -2 locus.1584 112.141 89818428 A G -2 locus.1585 112.159 89995144 C T -2 locus.1586 112.179 90205014 C A -2 locus.1587 112.181 90224606 A G -2 locus.1588 112.194 90362958 T C -2 locus.1589 112.197 90395737 C T -2 locus.1590 112.213 90557732 G T -2 locus.1591 112.224 90670931 T C -2 locus.1592 112.227 90698706 A C -2 locus.1593 112.23 90731512 G 0 -2 locus.1594 112.232 90752876 G A -2 locus.1595 112.235 90790187 G A -2 locus.1596 112.238 90820561 G A -2 locus.1597 112.251 90945684 T C -2 locus.1598 112.254 90977972 T C -2 locus.1599 112.257 91015456 C T -2 locus.1600 112.261 91053562 G A -2 locus.1601 112.262 91063757 T G -2 locus.1602 112.27 91143985 A G -2 locus.1603 112.273 91180532 C T -2 locus.1604 112.277 91219621 C A -2 locus.1605 112.279 91245530 A G -2 locus.1606 112.282 91276899 C T -2 locus.1607 112.288 91333600 C T -2 locus.1608 112.289 91347435 G T -2 locus.1609 112.295 91410193 C A -2 locus.1610 112.3 91455790 A C -2 locus.1611 112.303 91488289 C T -2 locus.1612 112.307 91529465 A G -2 locus.1613 112.317 91636753 C T -2 locus.1614 112.321 91679618 T C -2 locus.1615 112.335 91817102 G A -2 locus.1616 112.342 91896870 G T -2 locus.1617 112.344 91914814 A G -2 locus.1618 112.351 91982774 G A -2 locus.1619 112.352 91996530 T C -2 locus.1620 112.359 92063431 G A -2 locus.1621 112.362 92095417 G A -2 locus.1622 112.365 92132718 A C -2 locus.1623 112.368 92162531 G A -2 locus.1624 112.373 92213984 G A -2 locus.1625 112.396 92454972 T A -2 locus.1626 112.402 92511501 T C -2 locus.1627 112.407 92566981 C A -2 locus.1628 112.413 92631842 A G -2 locus.1629 112.416 92655859 A 0 -2 locus.1630 112.439 92891269 C T -2 locus.1631 112.442 92931933 A G -2 locus.1632 112.446 92971937 G A -2 locus.1633 112.45 93013077 A G -2 locus.1634 112.459 93102704 A 0 -2 locus.1635 112.464 93152913 A G -2 locus.1636 112.47 93217367 T G -2 locus.1637 112.473 93251002 T C -2 locus.1638 112.475 93271249 C T -2 locus.1639 112.478 93295195 C T -2 locus.1640 112.483 93349246 C T -2 locus.1641 112.486 93383608 T G -2 locus.1642 112.49 93425673 T G -2 locus.1643 112.493 93451281 A G -2 locus.1644 112.499 93513090 A G -2 locus.1645 112.499 93520861 C A -2 locus.1646 112.501 93536704 A T -2 locus.1647 112.507 93601809 C T -2 locus.1648 112.526 93795001 C A -2 locus.1649 112.532 93856462 T C -2 locus.1650 112.535 93890508 C T -2 locus.1651 112.539 93932795 A G -2 locus.1652 112.541 93947207 T C -2 locus.1653 112.549 94035823 G A -2 locus.1654 112.553 94075848 T C -2 locus.1655 112.555 94096225 A C -2 locus.1656 112.558 94125675 T C -2 locus.1657 112.57 94251657 C T -2 locus.1658 112.575 94299450 T C -2 locus.1659 112.592 94478102 T C -2 locus.1660 112.596 94525031 T C -2 locus.1661 112.6 94561848 G T -2 locus.1662 112.605 94609125 G A -2 locus.1663 112.608 94646139 G A -2 locus.1664 112.61 94662326 G T -2 locus.1665 112.614 94710125 G A -2 locus.1666 112.619 94761838 A C -2 locus.1667 112.62 94768669 C T -2 locus.1668 112.621 94779456 T C -2 locus.1669 112.627 94840194 G A -2 locus.1670 112.628 94846978 T C -2 locus.1671 112.632 94894157 G A -2 locus.1672 112.641 94981400 C T -2 locus.1673 112.641 94987252 C A -2 locus.1674 112.645 95025579 C T -2 locus.1675 112.65 95077650 G A -2 locus.1676 112.655 95129267 G A -2 locus.1677 112.661 95194173 G 0 -2 locus.1678 112.666 95244510 G A -2 locus.1679 112.678 95367228 A G -2 locus.1680 112.68 95385937 G A -2 locus.1681 112.681 95395889 C T -2 locus.1682 112.688 95471424 C T -2 locus.1683 112.691 95502833 T C -2 locus.1684 112.702 95621490 C T -2 locus.1685 112.706 95657911 T C -2 locus.1686 112.713 95731895 A G -2 locus.1687 112.736 95965733 C T -2 locus.1688 112.741 96022899 C T -2 locus.1689 112.746 96074249 T C -2 locus.1690 112.751 96123359 A C -2 locus.1691 112.759 96209271 G C -2 locus.1692 112.762 96242133 A G -2 locus.1693 112.764 96254860 C T -2 locus.1694 112.769 96309972 A G -2 locus.1695 112.771 96330247 A G -2 locus.1696 112.781 96439757 G A -2 locus.1697 112.794 96566325 T C -2 locus.1698 112.799 96618831 A G -2 locus.1699 112.804 96675181 T G -2 locus.1700 112.808 96713126 A G -2 locus.1701 112.808 96717906 C T -2 locus.1702 112.819 96824814 A G -2 locus.1703 112.832 96963289 C T -2 locus.1704 112.836 97004902 G A -2 locus.1705 112.844 97087779 A G -2 locus.1706 112.846 97108165 G A -2 locus.1707 112.856 97210014 G A -2 locus.1708 112.862 97270408 A C -2 locus.1709 112.863 97279160 A G -2 locus.1710 112.864 97293376 G A -2 locus.1711 112.868 97338136 T 0 -2 locus.1712 112.879 97446440 T C -2 locus.1713 112.885 97513382 T C -2 locus.1714 112.896 97627322 A C -2 locus.1715 112.909 97685376 C T -2 locus.1716 112.933 97741243 G T -2 locus.1717 112.963 97811722 G A -2 locus.1718 112.99 97872964 G A -2 locus.1719 113.007 97914066 C A -2 locus.1720 113.021 97946326 A G -2 locus.1721 113.048 98008059 G A -2 locus.1722 113.112 98156393 G A -2 locus.1723 113.161 98270309 A G -2 locus.1724 113.193 98343444 A G -2 locus.1725 113.497 98483096 A G -2 locus.1726 113.534 98542246 A G -2 locus.1727 113.603 98652142 T G -2 locus.1728 113.622 98682513 G A -2 locus.1729 113.692 98793101 T C -2 locus.1730 113.707 98817919 C T -2 locus.1731 113.752 98889659 T C -2 locus.1732 113.81 98982634 C T -2 locus.1733 113.83 99013601 G A -2 locus.1734 113.899 99123385 C T -2 locus.1735 113.927 99168998 G A -2 locus.1736 113.958 99217880 T C -2 locus.1737 113.981 99255163 C G -2 locus.1738 114.011 99302002 G A -2 locus.1739 114.034 99339620 A G -2 locus.1740 114.072 99399983 A C -2 locus.1741 114.089 99427585 C T -2 locus.1742 114.127 99487592 C A -2 locus.1743 114.144 99514588 A G -2 locus.1744 114.184 99578900 C T -2 locus.1745 114.213 99623937 C T -2 locus.1746 114.266 99708718 A G -2 locus.1747 114.309 99777496 T C -2 locus.1748 114.328 99808715 G A -2 locus.1749 114.342 99830078 A G -2 locus.1750 114.378 99887361 C T -2 locus.1751 114.541 100147522 T G -2 locus.1752 114.604 100248742 C T -2 locus.1753 114.639 100304513 T C -2 locus.1754 114.671 100355484 T C -2 locus.1755 114.677 100364649 T G -2 locus.1756 114.753 100486244 C T -2 locus.1757 114.8 100561224 A 0 -2 locus.1758 114.827 100603953 T C -2 locus.1759 114.928 100697530 A G -2 locus.1760 114.951 100718159 C T -2 locus.1761 114.99 100753683 C A -2 locus.1762 115.013 100774009 T C -2 locus.1763 115.055 100812455 G A -2 locus.1764 115.07 100825688 A T -2 locus.1765 115.149 100897755 G T -2 locus.1766 115.18 100925737 T C -2 locus.1767 115.19 100934715 G T -2 locus.1768 115.208 100951258 C A -2 locus.1769 115.257 100995339 A G -2 locus.1770 115.296 101030254 C T -2 locus.1771 115.349 101078351 A G -2 locus.1772 115.411 101134453 G A -2 locus.1773 115.451 101171470 C T -2 locus.1774 115.464 101183181 G A -2 locus.1775 115.486 101202708 T G -2 locus.1776 115.57 101278341 A G -2 locus.1777 115.616 101320194 G A -2 locus.1778 115.691 101388496 T G -2 locus.1779 115.761 101452217 G 0 -2 locus.1780 115.809 101494926 C T -2 locus.1781 115.838 101521231 C 0 -2 locus.1782 115.887 101566165 C T -2 locus.1783 115.91 101586395 T C -2 locus.1784 115.926 101600940 C T -2 locus.1785 115.955 101627632 G A -2 locus.1786 116.018 101684673 T C -2 locus.1787 116.045 101709271 A G -2 locus.1788 116.13 101985195 G A -2 locus.1789 116.13 102036345 C T -2 locus.1790 116.13 102087094 A G -2 locus.1791 116.13 102143483 G A -2 locus.1792 116.13 102214294 T G -2 locus.1793 116.13 102270504 C A -2 locus.1794 116.13 102278536 A G -2 locus.1795 116.13 102400550 G A -2 locus.1796 116.13 102413838 T C -2 locus.1797 116.13 102476216 C T -2 locus.1798 116.183 102541063 G A -2 locus.1799 116.261 102590239 T C -2 locus.1800 116.385 102667770 G A -2 locus.1801 116.601 102804384 A G -2 locus.1802 116.798 102979198 T G -2 locus.1803 116.855 103049092 G A -2 locus.1804 116.903 103106335 A G -2 locus.1805 116.906 103110138 T C -2 locus.1806 116.91 103115962 C T -2 locus.1807 116.933 103143424 G T -2 locus.1808 116.985 103206844 G T -2 locus.1809 117.005 103230310 T C -2 locus.1810 117.01 103237040 A G -2 locus.1811 117.09 103331488 C T -2 locus.1812 117.168 103407822 C T -2 locus.1813 117.228 103466624 C T -2 locus.1814 117.383 103618164 C A -2 locus.1815 117.395 103629915 C T -2 locus.1816 117.406 103640034 C T -2 locus.1817 117.484 103716573 G A -2 locus.1818 117.548 103778735 T C -2 locus.1819 117.566 103796345 C T -2 locus.1820 117.619 103848254 A 0 -2 locus.1821 117.676 103904068 C 0 -2 locus.1822 117.683 103910743 T C -2 locus.1823 117.791 104016758 A G -2 locus.1824 117.878 104101891 A G -2 locus.1825 117.933 104155746 A C -2 locus.1826 118.03 104249934 T C -2 locus.1827 118.046 104265752 C A -2 locus.1828 118.062 104281644 G A -2 locus.1829 118.147 104364614 G T -2 locus.1830 118.168 104385023 T C -2 locus.1831 118.224 104440205 T G -2 locus.1832 118.26 104524885 A G -2 locus.1833 118.26 104820996 A G -2 locus.1834 118.26 104876321 C A -2 locus.1835 118.468 105083320 T G -2 locus.1836 118.575 105189556 T G -2 locus.1837 118.609 105223487 T A -2 locus.1838 118.678 105291364 T C -2 locus.1839 118.714 105327346 A C -2 locus.1840 118.752 105365243 A G -2 locus.1841 118.812 105424198 G A -2 locus.1842 118.908 105519434 G A -2 locus.1843 118.986 105595874 A C -2 locus.1844 119.093 105702129 C T -2 locus.1845 119.161 105769436 C T -2 locus.1846 119.222 105829770 G A -2 locus.1847 119.378 105984105 G A -2 locus.1848 119.442 106047192 A G -2 locus.1849 119.504 106109303 G A -2 locus.1850 119.543 106147795 T G -2 locus.1851 119.577 106181469 A G -2 locus.1852 119.602 106205323 C T -2 locus.1853 119.7 106302944 C T -2 locus.1854 119.793 106394595 C T -2 locus.1855 119.87 106470676 C T -2 locus.1856 119.921 106521892 A G -2 locus.1857 119.977 106577040 T C -2 locus.1858 119.986 106585530 G T -2 locus.1859 120.039 106642333 G A -2 locus.1860 120.078 106686708 C 0 -2 locus.1861 120.105 106716452 G A -2 locus.1862 120.134 106749240 C T -2 locus.1863 120.206 106830369 G A -2 locus.1864 120.234 106862056 T G -2 locus.1865 120.273 106906477 G T -2 locus.1866 120.295 106930518 G A -2 locus.1867 120.334 106975218 A G -2 locus.1868 120.388 107035638 C T -2 locus.1869 120.427 107079601 A G -2 locus.1870 120.508 107171359 A G -2 locus.1871 120.558 107227866 T C -2 locus.1872 120.586 107258684 T C -2 locus.1873 120.645 107325100 C T -2 locus.1874 120.65 107331590 C T -2 locus.1875 120.659 107340814 G T -2 locus.1876 120.705 107393533 C T -2 locus.1877 120.754 107448488 A G -2 locus.1878 120.785 107483942 C T -2 locus.1879 120.809 107510683 G A -2 locus.1880 120.857 107564404 T C -2 locus.1881 120.865 107573497 T G -2 locus.1882 120.913 107627876 A G -2 locus.1883 120.943 107661834 A G -2 locus.1884 120.969 107690483 C T -2 locus.1885 120.985 107709004 C T -2 locus.1886 120.99 107745785 C T -2 locus.1887 121.032 107805210 A C -2 locus.1888 121.166 107866879 C A -2 locus.1889 121.264 107911874 T C -2 locus.1890 121.287 107922518 T G -2 locus.1891 121.432 107989499 T G -2 locus.1892 121.494 108017934 A G -2 locus.1893 121.613 108072803 T C -2 locus.1894 121.742 108132547 A G -2 locus.1895 121.966 108235636 C T -2 locus.1896 122.028 108264568 C T -2 locus.1897 122.126 108309773 C T -2 locus.1898 122.133 108312936 C T -2 locus.1899 122.146 108334038 A G -2 locus.1900 122.17 108402458 T G -2 locus.1901 122.193 108470142 G 0 -2 locus.1902 122.213 108527356 G A -2 locus.1903 122.223 108557476 A G -2 locus.1904 122.264 108678217 T C -2 locus.1905 122.284 108736660 G A -2 locus.1906 122.289 108750425 C T -2 locus.1907 122.298 108775514 C A -2 locus.1908 122.299 108780371 A G -2 locus.1909 122.302 108787194 G A -2 locus.1910 122.334 108880907 G A -2 locus.1911 122.343 108906253 A T -2 locus.1912 122.359 108954373 C T -2 locus.1913 122.377 109007567 C T -2 locus.1914 122.42 109132360 T 0 -2 locus.1915 122.456 109236972 C T -2 locus.1916 122.467 109268737 C T -2 locus.1917 122.502 109369155 C T -2 locus.1918 122.51 109394432 G A -2 locus.1919 122.519 109420304 T C -2 locus.1920 122.542 109487038 A G -2 locus.1921 122.593 109633672 A G -2 locus.1922 122.626 109731343 C G -2 locus.1923 122.638 109766460 A C -2 locus.1924 122.66 109829764 A G -2 locus.1925 122.673 109869230 A G -2 locus.1926 122.728 110029030 A G -2 locus.1927 122.747 110083416 C T -2 locus.1928 122.797 110228019 G T -2 locus.1929 122.805 110252253 G A -2 locus.1930 122.816 110284541 C T -2 locus.1931 122.888 110493567 A G -2 locus.1932 122.906 110546279 A G -2 locus.1933 122.927 110606314 G A -2 locus.1934 122.941 110647312 G A -2 locus.1935 122.958 110699239 T C -2 locus.1936 122.974 110743186 C T -2 locus.1937 122.978 110755031 G A -2 locus.1938 122.981 110765081 A G -2 locus.1939 123.002 110827578 T G -2 locus.1940 123.019 110875234 C 0 -2 locus.1941 123.041 110941391 A G -2 locus.1942 123.053 110973427 T C -2 locus.1943 123.062 111002455 C T -2 locus.1944 123.194 111172962 A G -2 locus.1945 123.262 111217617 A G -2 locus.1946 123.365 111284594 G A -2 locus.1947 123.39 111301234 G T -2 locus.1948 123.444 111335990 C T -2 locus.1949 124.581 112190964 A C -2 locus.1950 124.709 112294892 T C -2 locus.1951 124.899 112551575 A G -2 locus.1952 124.938 112664522 A G -2 locus.1953 124.984 112766526 T C -2 locus.1954 125.05 112843515 C T -2 locus.1955 125.096 112897395 C T -2 locus.1956 125.136 112943535 A T -2 locus.1957 125.196 113014357 G A -2 locus.1958 125.281 113113775 A G -2 locus.1959 125.306 113142696 T C -2 locus.1960 125.4 113364458 G A -2 locus.1961 125.4 113394834 A G -2 locus.1962 125.4 113664053 T C -2 locus.1963 125.4 113697861 C T -2 locus.1964 125.542 113897647 G A -2 locus.1965 125.563 113916007 A C -2 locus.1966 125.778 114106580 C G -2 locus.1967 125.912 114224745 C T -2 locus.1968 125.972 114279784 T C -2 locus.1969 126.104 114411448 C T -2 locus.1970 126.139 114446076 C T -2 locus.1971 126.237 114542990 G T -2 locus.1972 126.253 114558942 C T -2 locus.1973 126.371 114676373 T C -2 locus.1974 126.458 114763217 A C -2 locus.1975 126.501 114806145 C T -2 locus.1976 126.557 114861327 C A -2 locus.1977 126.58 114883685 C A -2 locus.1978 126.944 114938633 C A -2 locus.1979 126.951 114955024 T C -2 locus.1980 126.974 115008897 T C -2 locus.1981 127.006 115083516 G A -2 locus.1982 127.116 115340878 C T -2 locus.1983 127.174 115476148 A G -2 locus.1984 127.195 115525483 C T -2 locus.1985 127.22 115583068 T C -2 locus.1986 127.235 115618240 G A -2 locus.1987 127.255 115665643 A G -2 locus.1988 127.275 115710764 T C -2 locus.1989 127.288 115743360 T C -2 locus.1990 127.306 115784285 A G -2 locus.1991 127.311 115796966 G A -2 locus.1992 127.329 115838143 C A -2 locus.1993 127.342 115867889 T C -2 locus.1994 127.35 115887593 T 0 -2 locus.1995 127.361 115912934 T C -2 locus.1996 127.432 116040763 G A -2 locus.1997 127.475 116108127 A C -2 locus.1998 127.511 116166895 T G -2 locus.1999 127.534 116203332 G A -2 locus.2000 127.573 116265153 T C -2 locus.2001 127.627 116350674 C T -2 locus.2002 127.698 116465257 A G -2 locus.2003 127.721 116500683 T G -2 locus.2004 127.742 116534114 A G -2 locus.2005 127.78 116594826 A C -2 locus.2006 127.805 116635922 T C -2 locus.2007 127.898 116784013 A C -2 locus.2008 128.005 116953479 T C -2 locus.2009 128.01 116961397 C T -2 locus.2010 128.029 116992107 G A -2 locus.2011 128.07 117115355 T C -2 locus.2012 128.07 117158936 G A -2 locus.2013 128.07 117196730 A G -2 locus.2014 128.07 117229990 G A -2 locus.2015 128.07 117274596 C T -2 locus.2016 128.07 117295185 C T -2 locus.2017 128.082 117314510 G A -2 locus.2018 128.138 117341513 T A -2 locus.2019 128.196 117369115 G A -2 locus.2020 128.29 117413762 C 0 -2 locus.2021 128.395 117464089 T C -2 locus.2022 128.44 117485350 G A -2 locus.2023 128.55 117537624 C T -2 locus.2024 128.579 117573048 C T -2 locus.2025 128.593 117612053 G A -2 locus.2026 128.624 117702396 G A -2 locus.2027 128.636 117736662 G T -2 locus.2028 128.657 117795421 C T -2 locus.2029 128.671 117835621 A G -2 locus.2030 128.705 117934792 C A -2 locus.2031 128.763 118099428 A C -2 locus.2032 128.775 118134501 A G -2 locus.2033 128.791 118180362 T C -2 locus.2034 128.856 118365256 T C -2 locus.2035 128.886 118453748 G A -2 locus.2036 128.902 118497369 C T -2 locus.2037 128.943 118616974 A G -2 locus.2038 128.976 118713796 T C -2 locus.2039 129.007 118809710 T C -2 locus.2040 129.046 118930604 T C -2 locus.2041 129.083 119046294 T C -2 locus.2042 129.095 119081713 C T -2 locus.2043 129.111 119130920 T A -2 locus.2044 129.122 119165943 G T -2 locus.2045 129.124 119171511 C T -2 locus.2046 129.142 119227215 A G -2 locus.2047 129.152 119257594 T C -2 locus.2048 129.157 119272611 A G -2 locus.2049 129.169 119309807 A G -2 locus.2050 129.179 119340905 G A -2 locus.2051 129.194 119388364 G A -2 locus.2052 129.214 119450094 T C -2 locus.2053 129.224 119481104 G A -2 locus.2054 129.227 119490716 A C -2 locus.2055 129.28 119654696 T C -2 locus.2056 129.31 119745206 C T -2 locus.2057 129.345 119854666 G T -2 locus.2058 129.35 119870969 T C -2 locus.2059 129.375 119947174 C T -2 locus.2060 129.387 119985337 T C -2 locus.2061 129.394 120004439 A G -2 locus.2062 129.416 120073154 A G -2 locus.2063 129.456 120196892 A G -2 locus.2064 129.461 120213312 C T -2 locus.2065 129.468 120234154 C T -2 locus.2066 129.488 120295764 A G -2 locus.2067 129.516 120383406 C T -2 locus.2068 129.53 120426576 A 0 -2 locus.2069 129.554 120501335 G A -2 locus.2070 129.569 120544893 G A -2 locus.2071 129.589 120609452 C A -2 locus.2072 129.597 120634348 C T -2 locus.2073 129.613 120680668 A G -2 locus.2074 129.628 120728828 A G -2 locus.2075 129.635 120750078 A C -2 locus.2076 129.646 120782917 T C -2 locus.2077 129.649 120792330 C T -2 locus.2078 129.671 120860413 G A -2 locus.2079 129.838 120915913 A G -2 locus.2080 130.118 120963211 G A -2 locus.2081 130.456 121020438 C T -2 locus.2082 130.586 121042412 T A -2 locus.2083 131.1 121129404 A C -2 locus.2084 131.263 121156989 G A -2 locus.2085 131.509 121198565 T C -2 locus.2086 131.703 121231306 A G -2 locus.2087 131.754 121239876 C T -2 locus.2088 131.921 121299744 G A -2 locus.2089 132.003 121330712 A C -2 locus.2090 132.49 121402278 G A -2 locus.2091 132.66 121455578 G A -2 locus.2092 132.66 121484489 A G -2 locus.2093 132.673 121515740 T C -2 locus.2094 132.831 121590788 A G -2 locus.2095 132.866 121607287 G A -2 locus.2096 132.963 121653170 T G -2 locus.2097 133.044 121691343 A G -2 locus.2098 133.136 121734938 G T -2 locus.2099 133.223 121776284 G A -2 locus.2100 133.267 121796989 C A -2 locus.2101 133.7 122001925 A G -2 locus.2102 133.824 122060498 A G -2 locus.2103 133.9 122096448 G A -2 locus.2104 134.078 122192823 C A -2 locus.2105 134.167 122244312 T G -2 locus.2106 134.264 122301320 T C -2 locus.2107 134.295 122319337 A G -2 locus.2108 134.483 122429181 G A -2 locus.2109 134.587 122489988 C T -2 locus.2110 134.646 122524397 A G -2 locus.2111 134.978 122918820 A C -2 locus.2112 135.019 123048197 A G -2 locus.2113 135.055 123160652 A G -2 locus.2114 135.086 123259113 C T -2 locus.2115 135.091 123274303 C A -2 locus.2116 135.112 123341559 C A -2 locus.2117 135.119 123362485 T C -2 locus.2118 135.141 123432784 T G -2 locus.2119 135.145 123446725 A G -2 locus.2120 135.161 123494681 G C -2 locus.2121 135.171 123528595 G C -2 locus.2122 135.175 123541288 C A -2 locus.2123 135.185 123573014 A C -2 locus.2124 135.208 123644129 A G -2 locus.2125 135.217 123671526 G A -2 locus.2126 135.222 123688719 G A -2 locus.2127 135.238 123740047 T G -2 locus.2128 135.256 123794330 A G -2 locus.2129 135.287 123893782 T G -2 locus.2130 135.398 124027070 C T -2 locus.2131 135.437 124053980 C T -2 locus.2132 135.553 124133864 T G -2 locus.2133 135.608 124171406 T C -2 locus.2134 135.739 124262151 G A -2 locus.2135 135.781 124290905 T C -2 locus.2136 135.927 124391349 C T -2 locus.2137 136.002 124443428 G A -2 locus.2138 136.037 124467465 A C -2 locus.2139 136.133 124533614 A C -2 locus.2140 136.149 124544623 G A -2 locus.2141 136.168 124557619 G A -2 locus.2142 136.186 124570403 C T -2 locus.2143 136.263 124623290 T C -2 locus.2144 136.313 124657483 G A -2 locus.2145 136.342 124677512 G A -2 locus.2146 136.368 124695516 T A -2 locus.2147 136.556 124825010 A G -2 locus.2148 136.676 124907852 C T -2 locus.2149 136.854 125030378 T C -2 locus.2150 136.899 125061750 T C -2 locus.2151 136.909 125068275 T C -2 locus.2152 137.003 125133489 G A -2 locus.2153 137.049 125164918 C T -2 locus.2154 137.144 125230366 C T -2 locus.2155 137.188 125261082 G A -2 locus.2156 137.197 125267291 T C -2 locus.2157 137.207 125273857 A C -2 locus.2158 137.226 125287060 G T -2 locus.2159 137.308 125343919 C T -2 locus.2160 137.321 125352833 C 0 -2 locus.2161 137.366 125383356 T C -2 locus.2162 137.451 125442142 A G -2 locus.2163 137.564 125520146 A G -2 locus.2164 137.62 125571722 T G -2 locus.2165 137.62 125629276 C A -2 locus.2166 137.62 125776688 C T -2 locus.2167 137.62 125796992 T C -2 locus.2168 137.62 125825598 T C -2 locus.2169 137.62 125866209 G T -2 locus.2170 137.62 125884996 C T -2 locus.2171 137.62 125922359 T C -2 locus.2172 137.62 125938718 C T -2 locus.2173 137.62 125977687 T C -2 locus.2174 137.62 126069131 T C -2 locus.2175 137.633 126125592 T G -2 locus.2176 137.7 126165852 A G -2 locus.2177 137.775 126209935 A G -2 locus.2178 137.824 126239415 T C -2 locus.2179 137.888 126277306 A G -2 locus.2180 137.923 126298276 C T -2 locus.2181 138.001 126344239 A G -2 locus.2182 138.069 126384559 G A -2 locus.2183 138.132 126422144 A G -2 locus.2184 138.271 126504764 G A -2 locus.2185 138.36 126557600 A G -2 locus.2186 138.47 126622908 A C -2 locus.2187 138.535 126661548 G A -2 locus.2188 138.583 126690181 T C -2 locus.2189 138.659 126734704 C T -2 locus.2190 138.773 126802631 C T -2 locus.2191 138.981 126926047 G A -2 locus.2192 139.043 126963279 C T -2 locus.2193 139.13 127014456 C T -2 locus.2194 139.178 127043193 T C -2 locus.2195 139.223 127070041 G A -2 locus.2196 139.254 127088467 C T -2 locus.2197 139.319 127126633 G A -2 locus.2198 139.398 127173649 A G -2 locus.2199 139.481 127222749 C T -2 locus.2200 139.522 127247478 G A -2 locus.2201 139.549 127263178 A G -2 locus.2202 139.621 127306102 C T -2 locus.2203 139.764 127390949 C T -2 locus.2204 139.939 127495017 C T -2 locus.2205 140.284 127699622 C A -2 locus.2206 140.375 127753578 G A -2 locus.2207 140.476 127813744 G T -2 locus.2208 140.48 127836876 G A -2 locus.2209 140.48 127910434 A G -2 locus.2210 140.507 127997234 G A -2 locus.2211 140.514 128003376 G T -2 locus.2212 140.605 128092161 T C -2 locus.2213 140.642 128127458 A G -2 locus.2214 140.701 128184467 A G -2 locus.2215 140.733 128216445 T C -2 locus.2216 140.772 128253639 C T -2 locus.2217 140.812 128292892 G A -2 locus.2218 140.881 128359488 A C -2 locus.2219 140.932 128408760 T C -2 locus.2220 140.974 128449623 C T -2 locus.2221 140.983 128458841 G A -2 locus.2222 141.023 128497278 G T -2 locus.2223 141.036 128510347 A T -2 locus.2224 141.155 128625705 C T -2 locus.2225 141.296 128762227 C T -2 locus.2226 141.38 128843993 G T -2 locus.2227 141.478 128938914 T C -2 locus.2228 141.512 128972285 T C -2 locus.2229 141.56 129018506 C T -2 locus.2230 141.588 129045322 C T -2 locus.2231 141.618 129075107 G T -2 locus.2232 141.654 129109277 T C -2 locus.2233 141.67 129124862 A G -2 locus.2234 141.719 129172835 A G -2 locus.2235 141.743 129196314 T C -2 locus.2236 141.81 129261490 T C -2 locus.2237 141.845 129295009 G A -2 locus.2238 141.905 129353026 G A -2 locus.2239 141.957 129403743 A G -2 locus.2240 141.976 129421996 C 0 -2 locus.2241 142.015 129460225 C T -2 locus.2242 142.026 129471116 C A -2 locus.2243 142.095 129537914 G T -2 locus.2244 142.121 129562985 G A -2 locus.2245 142.162 129602869 C T -2 locus.2246 142.305 129740367 A G -2 locus.2247 142.403 129831656 C T -2 locus.2248 142.459 129883962 A G -2 locus.2249 142.524 129945082 T C -2 locus.2250 142.593 130009715 T C -2 locus.2251 142.68 130091425 T G -2 locus.2252 142.739 130145934 G A -2 locus.2253 142.803 130206119 A G -2 locus.2254 142.828 130229606 C T -2 locus.2255 142.94 130334245 A G -2 locus.2256 142.977 130368989 C T -2 locus.2257 143.036 130424187 G A -2 locus.2258 143.144 130525336 G A -2 locus.2259 143.231 130606432 T C -2 locus.2260 143.263 130636386 C T -2 locus.2261 143.302 130673052 G A -2 locus.2262 143.429 130791754 G A -2 locus.2263 143.458 130818423 C T -2 locus.2264 143.471 130831021 A G -2 locus.2265 143.524 130880304 C A -2 locus.2266 143.574 130926896 G A -2 locus.2267 143.615 130965527 A G -2 locus.2268 143.721 131064734 G A -2 locus.2269 143.742 131084439 T C -2 locus.2270 143.829 131165894 A G -2 locus.2271 143.876 131210129 T C -2 locus.2272 143.923 131253322 C A -2 locus.2273 144.077 131397735 A G -2 locus.2274 144.159 131474019 T G -2 locus.2275 144.277 131584922 T C -2 locus.2276 144.289 131596312 C A -2 locus.2277 144.346 131649580 A G -2 locus.2278 144.382 131682707 T C -2 locus.2279 144.43 131727936 G T -2 locus.2280 144.466 131761141 T C -2 locus.2281 144.5 131793590 C 0 -2 locus.2282 144.544 131834108 A G -2 locus.2283 144.564 131853074 C A -2 locus.2284 144.613 131898873 C T -2 locus.2285 144.631 131916165 C T -2 locus.2286 144.69 131970725 C T -2 locus.2287 144.781 132056189 A G -2 locus.2288 144.798 132071815 C T -2 locus.2289 144.811 132084034 A G -2 locus.2290 144.869 132138166 G A -2 locus.2291 144.876 132145321 A G -2 locus.2292 144.943 132208083 A G -2 locus.2293 145.03 132289224 T C -2 locus.2294 145.067 132323750 C T -2 locus.2295 145.086 132341140 T C -2 locus.2296 145.139 132391474 C T -2 locus.2297 145.237 132483073 C T -2 locus.2298 145.284 132526868 T G -2 locus.2299 145.31 132550706 T G -2 locus.2300 145.371 132608113 G A -2 locus.2301 145.4 132635669 T C -2 locus.2302 145.484 132713568 C T -2 locus.2303 145.522 132749103 T C -2 locus.2304 145.579 132802249 A G -2 locus.2305 145.621 132841528 A C -2 locus.2306 145.65 132868782 G T -2 locus.2307 145.688 132904756 T G -2 locus.2308 145.717 132934057 T C -2 locus.2309 145.743 132967710 G T -2 locus.2310 145.776 133009157 G A -2 locus.2311 145.8 133040292 A G -2 locus.2312 145.812 133055858 A C -2 locus.2313 145.873 133133629 C A -2 locus.2314 145.897 133164317 C T -2 locus.2315 145.948 133229013 C A -2 locus.2316 145.982 133272817 A G -2 locus.2317 146.084 133402369 A G -2 locus.2318 146.128 133459225 C T -2 locus.2319 146.154 133492755 C T -2 locus.2320 146.19 133538199 A G -2 locus.2321 146.209 133563038 G A -2 locus.2322 146.22 133577022 A G -2 locus.2323 146.237 133594324 C T -2 locus.2324 146.295 133655932 C T -2 locus.2325 146.382 133748186 G A -2 locus.2326 146.459 133830068 G A -2 locus.2327 146.565 133942420 G A -2 locus.2328 146.969 134094336 A G -2 locus.2329 147.037 134127818 A G -2 locus.2330 147.174 134194138 C T -2 locus.2331 147.259 134235520 C T -2 locus.2332 147.277 134244380 G A -2 locus.2333 147.394 134301618 G A -2 locus.2334 147.462 134334411 C T -2 locus.2335 147.633 134417645 C T -2 locus.2336 148.004 134598112 G A -2 locus.2337 148.146 134667278 A G -2 locus.2338 148.358 134770618 G A -2 locus.2339 148.389 134785518 T C -2 locus.2340 148.437 134809036 G T -2 locus.2341 148.537 134857756 G A -2 locus.2342 148.643 134953909 C T -2 locus.2343 148.657 134979525 C T -2 locus.2344 148.686 135032294 A 0 -2 locus.2345 148.702 135063522 C T -2 locus.2346 148.714 135084325 T C -2 locus.2347 148.742 135136548 G A -2 locus.2348 148.765 135178922 G A -2 locus.2349 148.834 135304995 C T -2 locus.2350 148.851 135337045 A G -2 locus.2351 148.881 135391568 A G -2 locus.2352 148.91 135446006 C T -2 locus.2353 148.913 135451498 C T -2 locus.2354 148.926 135474064 G T -2 locus.2355 148.959 135536214 C T -2 locus.2356 148.981 135576714 G A -2 locus.2357 148.989 135590631 T C -2 locus.2358 149.014 135636519 G A -2 locus.2359 149.046 135695576 T C -2 locus.2360 149.101 135796714 T C -2 locus.2361 149.123 135836770 T C -2 locus.2362 149.21 135996954 C T -2 locus.2363 149.234 136042199 T C -2 locus.2364 149.282 136130379 G A -2 locus.2365 149.302 136166662 T G -2 locus.2366 149.394 136336816 T C -2 locus.2367 149.408 136362050 C T -2 locus.2368 149.435 136412426 G T -2 locus.2369 149.452 136442416 G A -2 locus.2370 149.475 136485296 C T -2 locus.2371 149.49 136512593 G A -2 locus.2372 149.518 136565040 A G -2 locus.2373 149.549 136632758 T C -2 locus.2374 149.556 136654969 A G -2 locus.2375 149.586 136745970 A G -2 locus.2376 149.597 136780869 G T -2 locus.2377 149.617 136842711 A G -2 locus.2378 149.631 136887323 C T -2 locus.2379 149.634 136896296 C T -2 locus.2380 149.647 136934029 T C -2 locus.2381 149.66 137024724 C T -2 locus.2382 149.66 137059006 T G -2 locus.2383 149.66 137106359 A G -2 locus.2384 149.66 137179079 C T -2 locus.2385 149.66 137229176 T G -2 locus.2386 149.66 137271011 A G -2 locus.2387 149.683 137308235 A G -2 locus.2388 149.738 137377502 G A -2 locus.2389 149.758 137403728 A G -2 locus.2390 149.8 137456787 G A -2 locus.2391 149.882 137510411 G T -2 locus.2392 149.984 137576137 A G -2 locus.2393 150.134 137672630 C T -2 locus.2394 150.303 137781188 A G -2 locus.2395 150.38 137832529 C T -2 locus.2396 150.38 137891951 G A -2 locus.2397 150.38 137918745 T C -2 locus.2398 150.408 138081646 T G -2 locus.2399 150.452 138151463 A G -2 locus.2400 150.457 138159566 C T -2 locus.2401 150.551 138277903 G A -2 locus.2402 150.593 138318697 C T -2 locus.2403 150.704 138425722 G T -2 locus.2404 150.903 138618372 C T -2 locus.2405 151.105 138813572 C T -2 locus.2406 151.165 138871425 G A -2 locus.2407 151.206 138910812 C T -2 locus.2408 151.264 138966957 C T -2 locus.2409 151.298 139000215 A G -2 locus.2410 151.323 139023574 A G -2 locus.2411 151.356 139056162 A G -2 locus.2412 151.383 139082187 A G -2 locus.2413 151.434 139131096 A G -2 locus.2414 151.468 139163515 A G -2 locus.2415 151.505 139199714 G A -2 locus.2416 151.558 139250845 T C -2 locus.2417 151.6 139291706 G A -2 locus.2418 151.741 139427894 A G -2 locus.2419 151.81 139494558 A G -2 locus.2420 151.837 139520902 C T -2 locus.2421 151.876 139558160 T C -2 locus.2422 151.917 139597601 A G -2 locus.2423 151.96 139718962 T C -2 locus.2424 151.96 139738611 T C -2 locus.2425 151.96 139774896 A C -2 locus.2426 151.96 139800218 C T -2 locus.2427 151.96 139823095 G T -2 locus.2428 151.96 139846639 A G -2 locus.2429 151.96 139889289 C T -2 locus.2430 151.96 139939771 C 0 -2 locus.2431 151.96 140044111 G T -2 locus.2432 151.96 140085604 T C -2 locus.2433 151.96 140104951 G A -2 locus.2434 151.96 140158515 T C -2 locus.2435 151.96 140211633 C A -2 locus.2436 151.96 140273577 T G -2 locus.2437 152.001 140326973 A G -2 locus.2438 152.044 140376913 G A -2 locus.2439 152.101 140442104 T C -2 locus.2440 152.124 140468415 A G -2 locus.2441 152.167 140518458 G A -2 locus.2442 152.204 140560157 A G -2 locus.2443 152.221 140579617 T C -2 locus.2444 152.258 140622573 A G -2 locus.2445 152.286 140655290 C T -2 locus.2446 152.4 140785606 G A -2 locus.2447 152.436 140827873 G A -2 locus.2448 152.497 140897169 T C -2 locus.2449 152.532 140937497 C T -2 locus.2450 152.593 141007423 T C -2 locus.2451 152.657 141063223 A G -2 locus.2452 152.728 141118387 C T -2 locus.2453 152.809 141180010 C T -2 locus.2454 152.825 141192562 C T -2 locus.2455 152.885 141238618 A G -2 locus.2456 152.905 141254340 G A -2 locus.2457 152.965 141299872 C T -2 locus.2458 153.102 141439586 A G -2 locus.2459 153.103 141459036 G A -2 locus.2460 153.105 141512548 G A -2 locus.2461 153.107 141539548 T C -2 locus.2462 153.107 141557795 T G -2 locus.2463 153.109 141604180 T C -2 locus.2464 153.164 141695271 T C -2 locus.2465 153.184 141725733 C T -2 locus.2466 153.212 141766599 T C -2 locus.2467 153.328 141941687 A G -2 locus.2468 153.348 141971484 G A -2 locus.2469 153.376 142014226 C T -2 locus.2470 153.397 142045818 C T -2 locus.2471 153.409 142063966 G T -2 locus.2472 153.435 142123229 T C -2 locus.2473 153.507 142192657 A G -2 locus.2474 153.567 142250151 G T -2 locus.2475 153.588 142270405 G A -2 locus.2476 153.616 142298118 A C -2 locus.2477 153.801 142475803 G A -2 locus.2478 153.832 142506224 G A -2 locus.2479 153.864 142536604 G A -2 locus.2480 153.923 142593638 G A -2 locus.2481 153.988 142656135 T C -2 locus.2482 154.009 142676162 A G -2 locus.2483 154.044 142709866 T C -2 locus.2484 154.203 142863809 T C -2 locus.2485 154.243 142902297 T 0 -2 locus.2486 154.307 142963793 A G -2 locus.2487 154.437 143089159 T C -2 locus.2488 154.529 143177828 T C -2 locus.2489 154.555 143203167 C T -2 locus.2490 154.585 143232237 G T -2 locus.2491 154.614 143259398 C T -2 locus.2492 154.653 143297335 A G -2 locus.2493 154.742 143383002 C T -2 locus.2494 154.856 143493147 A G -2 locus.2495 154.892 143527942 T C -2 locus.2496 154.923 143557270 G A -2 locus.2497 154.962 143595306 A C -2 locus.2498 154.98 143612771 T C -2 locus.2499 155.11 143738072 C T -2 locus.2500 155.224 143847759 C T -2 locus.2501 155.242 143864562 T C -2 locus.2502 155.298 143918492 T C -2 locus.2503 155.404 144021471 T C -2 locus.2504 155.474 144088879 T C -2 locus.2505 155.559 144170136 C T -2 locus.2506 155.618 144227691 C T -2 locus.2507 155.737 144342270 A G -2 locus.2508 155.776 144379920 G A -2 locus.2509 155.824 144426232 G A -2 locus.2510 155.857 144457580 G T -2 locus.2511 155.901 144500078 A G -2 locus.2512 155.934 144532167 T G -2 locus.2513 155.98 144572606 T C -2 locus.2514 156.034 144603941 G A -2 locus.2515 156.054 144615833 T C -2 locus.2516 156.15 144672338 C T -2 locus.2517 156.367 144798807 T C -2 locus.2518 156.383 144808348 G T -2 locus.2519 156.593 144931308 T C -2 locus.2520 156.696 144991653 T C -2 locus.2521 156.786 145044081 A C -2 locus.2522 156.866 145090781 C T -2 locus.2523 156.922 145123492 C T -2 locus.2524 157.112 145234800 C A -2 locus.2525 157.19 145308492 G A -2 locus.2526 157.19 145336020 T C -2 locus.2527 157.19 145351705 G A -2 locus.2528 157.19 145398841 A G -2 locus.2529 157.19 145444039 C T -2 locus.2530 157.19 145463813 A C -2 locus.2531 157.19 145628424 A G -2 locus.2532 157.19 145648041 C T -2 locus.2533 157.19 145693768 A G -2 locus.2534 157.19 145745763 A C -2 locus.2535 157.19 145780059 G T -2 locus.2536 157.19 145813854 T C -2 locus.2537 157.19 145915965 T C -2 locus.2538 157.19 145982961 T C -2 locus.2539 157.19 145994402 G A -2 locus.2540 157.19 146061735 G T -2 locus.2541 157.19 146124955 T C -2 locus.2542 157.19 146181891 G A -2 locus.2543 157.19 146243868 G A -2 locus.2544 157.19 146287395 G A -2 locus.2545 157.19 146295242 G A -2 locus.2546 157.19 146361193 G A -2 locus.2547 157.19 146381974 C T -2 locus.2548 157.19 146455202 C T -2 locus.2549 157.19 146506155 T C -2 locus.2550 157.19 146534580 T G -2 locus.2551 157.19 146616690 T C -2 locus.2552 157.19 146705022 C T -2 locus.2553 157.199 146734798 C T -2 locus.2554 157.247 146856560 T C -2 locus.2555 157.264 146898327 T C -2 locus.2556 157.298 146984282 C T -2 locus.2557 157.308 147007898 C T -2 locus.2558 157.33 147064058 A G -2 locus.2559 157.341 147091016 C T -2 locus.2560 157.389 147210213 T G -2 locus.2561 157.437 147331372 T C -2 locus.2562 157.681 147650770 G A -2 locus.2563 157.768 147722365 G A -2 locus.2564 157.814 147759341 T C -2 locus.2565 157.89 147821995 T C -2 locus.2566 157.946 147867692 T C -2 locus.2567 157.998 147910340 C T -2 locus.2568 158.103 147996276 T 0 -2 locus.2569 158.124 148013217 A G -2 locus.2570 158.15 148034421 C A -2 locus.2571 158.182 148060618 T G -2 locus.2572 158.305 148161757 C T -2 locus.2573 158.35 148213917 T C -2 locus.2574 158.35 148274554 A G -2 locus.2575 158.35 148323473 G A -2 locus.2576 158.35 148441596 G A -2 locus.2577 158.35 148479250 G A -2 locus.2578 158.35 148550506 T 0 -2 locus.2579 158.356 148581376 T C -2 locus.2580 158.378 148597613 A G -2 locus.2581 158.526 148711192 C T -2 locus.2582 158.542 148723045 A C -2 locus.2583 158.589 148758742 A G -2 locus.2584 158.647 148802744 T C -2 locus.2585 158.844 148953266 T G -2 locus.2586 158.887 148986290 G A -2 locus.2587 158.948 149033013 G A -2 locus.2588 159.058 149116857 G A -2 locus.2589 159.137 149177234 A C -2 locus.2590 159.15 149186801 A G -2 locus.2591 159.201 149225860 G A -2 locus.2592 159.249 149262014 A G -2 locus.2593 159.333 149326740 G T -2 locus.2594 159.404 149380990 C T -2 locus.2595 159.439 149407092 T C -2 locus.2596 159.497 149451928 G A -2 locus.2597 159.522 149470913 G A -2 locus.2598 159.568 149505811 T C -2 locus.2599 159.612 149539226 T C -2 locus.2600 159.622 149546970 C T -2 locus.2601 159.631 149553962 A C -2 locus.2602 159.704 149609364 T C -2 locus.2603 159.779 149666645 A G -2 locus.2604 159.85 149720801 G A -2 locus.2605 159.912 149768329 A G -2 locus.2606 160.044 149869064 C T -2 locus.2607 160.115 149923043 A G -2 locus.2608 160.223 150005415 T C -2 locus.2609 160.293 150059057 C A -2 locus.2610 160.32 150079803 T G -2 locus.2611 160.452 150180541 C A -2 locus.2612 160.47 150193599 T C -2 locus.2613 160.543 150249776 G A -2 locus.2614 160.595 150289375 G T -2 locus.2615 160.699 150368811 T C -2 locus.2616 160.813 150455781 T G -2 locus.2617 160.856 150532984 A G -2 locus.2618 160.876 150572256 C A -2 locus.2619 160.898 150615300 C T -2 locus.2620 160.926 150670921 C T -2 locus.2621 160.936 150690254 A T -2 locus.2622 160.969 150755823 A G -2 locus.2623 160.996 150809428 A G -2 locus.2624 161.027 150870966 C T -2 locus.2625 161.049 150913889 C T -2 locus.2626 161.066 150948753 G T -2 locus.2627 161.167 151148561 A G -2 locus.2628 161.194 151200968 T C -2 locus.2629 161.22 151253363 A C -2 locus.2630 161.267 151345671 G A -2 locus.2631 161.291 151393717 T G -2 locus.2632 161.315 151441381 C T -2 locus.2633 161.371 151545534 C T -2 locus.2634 161.402 151588637 T C -2 locus.2635 161.451 151657676 G A -2 locus.2636 161.522 151758178 T 0 -2 locus.2637 161.548 151793561 A G -2 locus.2638 161.569 151823456 C T -2 locus.2639 161.602 151870611 G T -2 locus.2640 161.614 151888029 G A -2 locus.2641 161.682 151983292 C T -2 locus.2642 161.728 152048567 A C -2 locus.2643 161.783 152124905 G A -2 locus.2644 161.808 152160860 C T -2 locus.2645 161.839 152203740 C A -2 locus.2646 161.847 152215629 G A -2 locus.2647 161.916 152312317 T G -2 locus.2648 161.93 152332629 A C -2 locus.2649 161.949 152359296 C A -2 locus.2650 162.005 152437856 T C -2 locus.2651 162.069 152529090 G A -2 locus.2652 162.165 152662992 T C -2 locus.2653 162.212 152729213 A G -2 locus.2654 162.243 152773944 T C -2 locus.2655 162.286 152834616 A G -2 locus.2656 162.329 152895588 A G -2 locus.2657 162.406 153002900 G T -2 locus.2658 162.494 153128082 G A -2 locus.2659 162.523 153167948 A G -2 locus.2660 162.545 153199229 C T -2 locus.2661 162.565 153227475 T C -2 locus.2662 162.63 153319604 A G -2 locus.2663 162.675 153382973 T C -2 locus.2664 162.72 153446387 T C -2 locus.2665 162.807 153569061 T C -2 locus.2666 162.852 153632369 G A -2 locus.2667 162.928 153738593 G A -2 locus.2668 162.947 153765602 C T -2 locus.2669 162.997 153835740 G A -2 locus.2670 163.069 153937847 G A -2 locus.2671 163.094 153972547 A G -2 locus.2672 163.129 154021672 G A -2 locus.2673 163.151 154052685 A C -2 locus.2674 163.252 154194950 G A -2 locus.2675 163.27 154256628 T C -2 locus.2676 163.27 154323965 A C -2 locus.2677 163.27 154331314 C T -2 locus.2678 163.27 154389565 C T -2 locus.2679 163.27 154431209 C T -2 locus.2680 163.27 154485606 A C -2 locus.2681 163.27 154545138 A G -2 locus.2682 163.27 154579541 G A -2 locus.2683 163.27 154598966 G C -2 locus.2684 163.27 154712159 C T -2 locus.2685 163.278 154723424 C A -2 locus.2686 163.591 154876398 C T -2 locus.2687 163.719 154939017 T G -2 locus.2688 163.898 155026089 A G -2 locus.2689 163.976 155064316 G A -2 locus.2690 164.064 155107453 A C -2 locus.2691 164.103 155126465 T C -2 locus.2692 164.169 155158608 A G -2 locus.2693 164.236 155191187 T C -2 locus.2694 164.318 155231390 G A -2 locus.2695 164.33 155237297 C T -2 locus.2696 164.534 155337073 T G -2 locus.2697 164.708 155421873 T C -2 locus.2698 165.004 155566465 A G -2 locus.2699 165.085 155606280 G A -2 locus.2700 165.176 155650761 G A -2 locus.2701 165.181 155677780 T C -2 locus.2702 165.184 155789140 G A -2 locus.2703 165.184 155797260 A G -2 locus.2704 165.185 155818508 T C -2 locus.2705 165.185 155833687 A G -2 locus.2706 165.187 155889712 A G -2 locus.2707 165.188 155927328 C T -2 locus.2708 165.189 155969590 G A -2 locus.2709 165.224 156032096 C T -2 locus.2710 165.276 156095039 C T -2 locus.2711 165.389 156230655 G A -2 locus.2712 165.404 156249505 G A -2 locus.2713 165.483 156344475 A G -2 locus.2714 165.534 156405688 G A -2 locus.2715 165.585 156467512 G A -2 locus.2716 165.659 156555652 A G -2 locus.2717 165.684 156586072 T C -2 locus.2718 165.761 156678409 A G -2 locus.2719 165.827 156758029 G A -2 locus.2720 165.86 156798220 C T -2 locus.2721 165.885 156827682 A G -2 locus.2722 165.929 156881594 G A -2 locus.2723 165.974 156935814 A C -2 locus.2724 166.016 156985451 T A -2 locus.2725 166.036 157010221 C T -2 locus.2726 166.054 157031272 T C -2 locus.2727 166.103 157090967 C T -2 locus.2728 166.125 157117567 T C -2 locus.2729 166.147 157143434 T C -2 locus.2730 166.237 157252102 G A -2 locus.2731 166.293 157319697 C T -2 locus.2732 166.333 157367793 C T -2 locus.2733 166.412 157462596 A G -2 locus.2734 166.445 157502973 C T -2 locus.2735 166.505 157574569 G A -2 locus.2736 166.564 157646578 A G -2 locus.2737 166.607 157697393 A G -2 locus.2738 166.626 157720616 T C -2 locus.2739 166.794 157923669 G A -2 locus.2740 166.822 157956484 T C -2 locus.2741 166.89 158038867 C T -2 locus.2742 166.91 158062510 A G -2 locus.2743 166.927 158083725 C T -2 locus.2744 166.969 158134308 A G -2 locus.2745 167.013 158187310 C T -2 locus.2746 167.018 158192547 G A -2 locus.2747 167.099 158290735 A G -2 locus.2748 167.125 158321802 A G -2 locus.2749 167.134 158332883 A C -2 locus.2750 167.321 158558328 T C -2 locus.2751 167.41 158665480 A G -2 locus.2752 167.48 158749266 C A -2 locus.2753 167.506 158780390 C T -2 locus.2754 167.538 158818859 T C -2 locus.2755 167.545 158827485 C T -2 locus.2756 167.655 158959971 G A -2 locus.2757 167.79 159122199 C T -2 locus.2758 167.902 159257460 G A -2 locus.2759 167.91 159278703 G A -2 locus.2760 167.91 159389044 G T -2 locus.2761 167.91 159437585 T C -2 locus.2762 167.91 159513893 A G -2 locus.2763 167.91 159571624 G T -2 locus.2764 167.91 159609492 C T -2 locus.2765 167.91 159641790 T C -2 locus.2766 167.91 159823824 T 0 -2 locus.2767 167.91 159857007 C A -2 locus.2768 167.91 159909085 A G -2 locus.2769 167.91 159916624 G A -2 locus.2770 167.91 159949279 A G -2 locus.2771 167.91 160059996 T C -2 locus.2772 167.91 160096561 T C -2 locus.2773 167.91 160104016 A T -2 locus.2774 167.91 160185941 A G -2 locus.2775 167.91 160233220 G A -2 locus.2776 168.077 160394807 A C -2 locus.2777 168.12 160492222 T G -2 locus.2778 168.145 160549720 G A -2 locus.2779 168.164 160592549 G A -2 locus.2780 168.196 160665575 G A -2 locus.2781 168.209 160694589 T C -2 locus.2782 168.233 160748450 C T -2 locus.2783 168.285 160867028 C T -2 locus.2784 168.303 160907059 T C -2 locus.2785 168.323 160952943 A G -2 locus.2786 168.344 160999199 G A -2 locus.2787 168.362 161039913 C T -2 locus.2788 168.58 161137278 A G -2 locus.2789 168.596 161172554 A G -2 locus.2790 168.657 161305078 T C -2 locus.2791 168.671 161335278 A G -2 locus.2792 168.684 161365880 A G -2 locus.2793 168.692 161381940 C T -2 locus.2794 168.717 161437744 G A -2 locus.2795 168.769 161551477 T G -2 locus.2796 168.778 161570453 A G -2 locus.2797 168.781 161578678 G A -2 locus.2798 168.828 161680371 C T -2 locus.2799 168.842 161710993 C T -2 locus.2800 168.859 161748310 A G -2 locus.2801 168.874 161781989 G A -2 locus.2802 168.897 161832617 A G -2 locus.2803 168.91 161860600 T C -2 locus.2804 168.938 161921750 C T -2 locus.2805 168.947 161940627 T C -2 locus.2806 168.973 161998965 T C -2 locus.2807 168.991 162037008 C T -2 locus.2808 169.02 162101758 A G -2 locus.2809 169.028 162119562 A G -2 locus.2810 169.051 162169519 G A -2 locus.2811 169.074 162219631 T C -2 locus.2812 169.094 162262392 C T -2 locus.2813 169.121 162321953 A C -2 locus.2814 169.149 162383470 A C -2 locus.2815 169.178 162447574 A G -2 locus.2816 169.186 162464392 A G -2 locus.2817 169.194 162481939 G 0 -2 locus.2818 169.198 162492078 C A -2 locus.2819 169.208 162513140 C T -2 locus.2820 169.235 162572509 T C -2 locus.2821 169.288 162689295 T C -2 locus.2822 169.323 162765073 G T -2 locus.2823 169.332 162785577 C T -2 locus.2824 169.367 162861327 T C -2 locus.2825 169.371 162869558 G A -2 locus.2826 169.446 163035015 G A -2 locus.2827 169.463 163070840 G A -2 locus.2828 169.48 163109337 T C -2 locus.2829 169.494 163140231 G A -2 locus.2830 169.508 163170710 A G -2 locus.2831 169.533 163224716 T G -2 locus.2832 169.542 163243988 C T -2 locus.2833 169.568 163302364 G A -2 locus.2834 169.58 163334761 G A -2 locus.2835 169.58 163412648 G A -2 locus.2836 169.58 163489017 C T -2 locus.2837 169.58 163509922 C T -2 locus.2838 169.851 163564272 T G -2 locus.2839 170.275 163695948 T C -2 locus.2840 170.281 163790869 C T -2 locus.2841 170.282 163803071 C A -2 locus.2842 170.285 163845372 C A -2 locus.2843 170.292 163957063 G T -2 locus.2844 170.295 163988362 A G -2 locus.2845 170.298 164035357 A G -2 locus.2846 170.3 164074984 T 0 -2 locus.2847 170.306 164152670 G T -2 locus.2848 170.308 164188754 C A -2 locus.2849 170.312 164241805 A G -2 locus.2850 170.312 164250208 T C -2 locus.2851 170.316 164308657 G T -2 locus.2852 170.319 164349110 C A -2 locus.2853 170.323 164411911 C T -2 locus.2854 170.327 164455974 T C -2 locus.2855 170.329 164494551 A G -2 locus.2856 170.331 164516447 A G -2 locus.2857 170.336 164594319 T C -2 locus.2858 170.34 164654408 A G -2 locus.2859 170.343 164700933 G A -2 locus.2860 170.346 164745318 A G -2 locus.2861 170.349 164780655 G A -2 locus.2862 170.357 164903825 T G -2 locus.2863 170.358 164923059 G A -2 locus.2864 170.359 164930370 C T -2 locus.2865 170.365 165027582 C T -2 locus.2866 170.367 165057681 G T -2 locus.2867 170.37 165093971 A G -2 locus.2868 170.375 165169157 C T -2 locus.2869 170.379 165226892 T C -2 locus.2870 170.381 165259467 C T -2 locus.2871 170.383 165285830 C T -2 locus.2872 170.391 165399749 C A -2 locus.2873 170.394 165447554 T G -2 locus.2874 170.397 165486783 C T -2 locus.2875 170.449 165546958 A G -2 locus.2876 170.523 165564298 G A -2 locus.2877 170.645 165592936 A C -2 locus.2878 170.832 165636711 A G -2 locus.2879 170.965 165667917 G 0 -2 locus.2880 171 165706066 T G -2 locus.2881 171 165740847 C T -2 locus.2882 171 165789749 C T -2 locus.2883 171 165826500 G A -2 locus.2884 171 165913508 C T -2 locus.2885 171 165941483 G A -2 locus.2886 171 165991579 C T -2 locus.2887 171 166140810 A G -2 locus.2888 171 166231789 A T -2 locus.2889 171.007 166276060 G A -2 locus.2890 171.026 166302056 T C -2 locus.2891 171.106 166417984 G A -2 locus.2892 171.127 166464243 T C -2 locus.2893 171.164 166545439 A G -2 locus.2894 171.241 166712109 T C -2 locus.2895 171.254 166741056 G A -2 locus.2896 171.268 166770799 G T -2 locus.2897 171.299 166839484 G A -2 locus.2898 171.343 166934813 T C -2 locus.2899 171.372 166996675 G A -2 locus.2900 171.417 167096123 C A -2 locus.2901 171.424 167111471 G A -2 locus.2902 171.449 167164682 G A -2 locus.2903 171.488 167249075 C A -2 locus.2904 171.508 167292275 T C -2 locus.2905 171.517 167312385 T G -2 locus.2906 171.538 167358125 G A -2 locus.2907 171.572 167432552 G T -2 locus.2908 171.58 167450410 C T -2 locus.2909 171.608 167511192 A G -2 locus.2910 171.619 167533866 A C -2 locus.2911 171.633 167564146 T C -2 locus.2912 171.729 167649386 G A -2 locus.2913 171.776 167686312 G A -2 locus.2914 171.836 167736523 A C -2 locus.2915 171.975 167855866 G T -2 locus.2916 172.027 167901271 G A -2 locus.2917 172.091 167955730 C T -2 locus.2918 172.222 168068688 C T -2 locus.2919 172.271 168110792 T C -2 locus.2920 172.339 168169508 T C -2 locus.2921 172.373 168198361 C A -2 locus.2922 172.399 168220661 C T -2 locus.2923 172.449 168264380 C T -2 locus.2924 172.459 168272499 C T -2 locus.2925 172.525 168329589 A G -2 locus.2926 172.555 168355070 T C -2 locus.2927 172.655 168438851 A G -2 locus.2928 172.725 168486466 T C -2 locus.2929 172.862 168580284 T C -2 locus.2930 172.986 168665722 C T -2 locus.2931 173.042 168704054 A G -2 locus.2932 173.064 168719169 C T -2 locus.2933 173.181 168799360 C A -2 locus.2934 173.219 168825749 A G -2 locus.2935 173.377 168933988 G A -2 locus.2936 173.457 168988977 A G -2 locus.2937 173.501 169019218 C T -2 locus.2938 173.603 169088679 A G -2 locus.2939 173.62 169100303 T C -2 locus.2940 173.662 169129216 A G -2 locus.2941 173.72 169169208 G A -2 locus.2942 173.842 169252458 A G -2 locus.2943 173.883 169280735 A G -2 locus.2944 173.944 169322461 T C -2 locus.2945 173.993 169356165 G A -2 locus.2946 174.173 169479946 C T -2 locus.2947 174.195 169494537 A G -2 locus.2948 174.277 169551058 G A -2 locus.2949 174.44 169663024 T C -2 locus.2950 174.571 169752566 A G -2 locus.2951 174.687 169832257 C T -2 locus.2952 174.828 169929278 G A -2 locus.2953 174.896 169975893 C T -2 locus.2954 174.932 170000512 A G -2 locus.2955 175.017 170058634 G T -2 locus.2956 175.06 170087722 T C -2 locus.2957 175.217 170195998 A G -2 locus.2958 175.25 170218116 A G -2 locus.2959 175.254 170221187 C T -2 locus.2960 175.374 170303370 T G -2 locus.2961 175.62 170471855 A G -2 locus.2962 175.753 170563260 A G -2 locus.2963 175.81 170602376 A G -2 locus.2964 175.861 170637499 C T -2 locus.2965 176.059 170773169 G A -2 locus.2966 176.137 170826814 A G -2 locus.2967 176.18 170856163 G A -2 locus.2968 176.391 171000571 C T -2 locus.2969 176.422 171022019 A G -2 locus.2970 176.777 171123855 C T -2 locus.2971 177.088 171171929 G T -2 locus.2972 177.283 171206036 C T -2 locus.2973 177.301 171228786 G A -2 locus.2974 177.343 171282022 T C -2 locus.2975 177.405 171362036 C A -2 locus.2976 177.434 171398254 G A -2 locus.2977 177.501 171485026 T G -2 locus.2978 177.565 171566398 C T -2 locus.2979 177.58 171585407 A G -2 locus.2980 177.663 171691706 A G -2 locus.2981 177.769 171827045 C T -2 locus.2982 177.793 171858694 T G -2 locus.2983 177.817 171889296 T C -2 locus.2984 177.937 172042303 G A -2 locus.2985 177.97 172085406 G A -2 locus.2986 177.977 172093994 T C -2 locus.2987 177.98 172139840 T C -2 locus.2988 177.98 172151603 G A -2 locus.2989 177.98 172236843 A G -2 locus.2990 177.98 172272878 C T -2 locus.2991 178.014 172298751 C A -2 locus.2992 178.031 172311083 T G -2 locus.2993 178.108 172366485 C T -2 locus.2994 178.19 172424726 T C -2 locus.2995 178.279 172488904 G T -2 locus.2996 178.318 172516697 A G -2 locus.2997 178.345 172536035 A G -2 locus.2998 178.428 172594808 T C -2 locus.2999 178.458 172616581 A G -2 locus.3000 178.574 172699752 C T -2 locus.3001 178.637 172745053 A G -2 locus.3002 178.781 172847864 G A -2 locus.3003 178.793 172856263 G A -2 locus.3004 178.879 172917684 C T -2 locus.3005 179.043 173034908 T C -2 locus.3006 179.152 173113086 A G -2 locus.3007 179.206 173151952 G A -2 locus.3008 179.329 173239873 C T -2 locus.3009 179.381 173277109 A G -2 locus.3010 179.422 173306250 T C -2 locus.3011 179.487 173352916 C T -2 locus.3012 179.519 173375520 A G -2 locus.3013 179.613 173442788 C T -2 locus.3014 179.679 173490171 G A -2 locus.3015 179.738 173532404 A G -2 locus.3016 179.811 173584797 G A -2 locus.3017 179.888 173639847 C T -2 locus.3018 179.929 173668937 T C -2 locus.3019 179.951 173684339 C T -2 locus.3020 180.129 173812044 T C -2 locus.3021 180.267 173910913 G A -2 locus.3022 180.367 173981940 C T -2 locus.3023 180.466 174053098 G A -2 locus.3024 180.509 174083790 T C -2 locus.3025 180.587 174139621 A G -2 locus.3026 180.602 174150382 A G -2 locus.3027 180.898 174361658 C T -2 locus.3028 181.022 174450323 C T -2 locus.3029 181.262 174622219 A G -2 locus.3030 181.291 174643035 C T -2 locus.3031 181.39 174714091 T C -2 locus.3032 181.411 174728989 T C -2 locus.3033 181.583 174851815 G A -2 locus.3034 181.643 174894506 G A -2 locus.3035 181.764 174981099 A G -2 locus.3036 181.885 175068089 C T -2 locus.3037 181.915 175089477 G A -2 locus.3038 181.964 175124550 A G -2 locus.3039 182.023 175176500 A G -2 locus.3040 182.035 175228526 T C -2 locus.3041 182.04 175247582 C T -2 locus.3042 182.054 175305722 A G -2 locus.3043 182.063 175346551 G A -2 locus.3044 182.068 175367255 G A -2 locus.3045 182.073 175389096 A G -2 locus.3046 182.081 175418941 C T -2 locus.3047 182.097 175486267 C T -2 locus.3048 182.102 175509855 T G -2 locus.3049 182.118 175575976 T G -2 locus.3050 182.126 175610830 G A -2 locus.3051 182.136 175650501 A C -2 locus.3052 182.14 175670044 A G -2 locus.3053 182.169 175790038 T A -2 locus.3054 182.304 175936054 A G -2 locus.3055 182.325 175951645 A T -2 locus.3056 182.51 176088887 A C -2 locus.3057 182.573 176135485 G A -2 locus.3058 182.59 176148104 G A -2 locus.3059 182.845 176336744 G T -2 locus.3060 182.889 176369323 T G -2 locus.3061 182.938 176405730 T C -2 locus.3062 182.999 176450447 C A -2 locus.3063 183.33 176695897 T C -2 locus.3064 183.424 176765339 C A -2 locus.3065 183.441 176778128 G A -2 locus.3066 183.696 176966473 A G -2 locus.3067 183.757 177011834 A G -2 locus.3068 183.868 177093757 A G -2 locus.3069 183.91 177124764 C T -2 locus.3070 183.97 177169727 T G -2 locus.3071 184.064 177239161 G A -2 locus.3072 184.2 177339480 C T -2 locus.3073 184.217 177352101 G A -2 locus.3074 184.335 177439223 T C -2 locus.3075 184.399 177487231 G A -2 locus.3076 184.456 177529206 C T -2 locus.3077 184.526 177580706 G A -2 locus.3078 184.715 177720664 C T -2 locus.3079 184.834 177809053 T G -2 locus.3080 184.92 177872397 T C -2 locus.3081 184.984 177920217 C A -2 locus.3082 185.026 177951142 A G -2 locus.3083 185.107 178010644 T C -2 locus.3084 185.153 178045098 A C -2 locus.3085 185.253 178119127 G A -2 locus.3086 185.296 178150411 G A -2 locus.3087 185.3 178203148 G A -2 locus.3088 185.3 178210156 C A -2 locus.3089 185.3 178361652 T G -2 locus.3090 185.3 178388511 C A -2 locus.3091 185.3 178434313 G A -2 locus.3092 185.3 178456524 C T -2 locus.3093 185.3 178581383 G A -2 locus.3094 185.3 178647607 G A -2 locus.3095 185.3 178676541 C T -2 locus.3096 185.3 178703837 T C -2 locus.3097 185.3 178741258 G A -2 locus.3098 185.3 178764936 G T -2 locus.3099 185.3 178922457 T C -2 locus.3100 185.3 179033953 A G -2 locus.3101 185.3 179079150 C A -2 locus.3102 185.3 179122335 C A -2 locus.3103 185.3 179348624 C 0 -2 locus.3104 185.311 179386745 T C -2 locus.3105 185.38 179521559 G A -2 locus.3106 185.456 179673400 T C -2 locus.3107 185.52 179799000 C T -2 locus.3108 185.542 179842775 A G -2 locus.3109 185.545 179849479 A C -2 locus.3110 185.551 179860090 G A -2 locus.3111 185.591 179939993 G A -2 locus.3112 185.604 179965972 T G -2 locus.3113 185.648 180052852 T C -2 locus.3114 185.662 180080977 A G -2 locus.3115 185.714 180183585 G A -2 locus.3116 185.721 180196846 G A -2 locus.3117 185.753 180259505 G A -2 locus.3118 185.809 180371082 G A -2 locus.3119 185.825 180402840 T C -2 locus.3120 185.86 180470510 C A -2 locus.3121 185.867 180484178 T C -2 locus.3122 185.944 180637163 T C -2 locus.3123 186.035 180818063 T C -2 locus.3124 186.097 180940592 T C -2 locus.3125 186.157 181058200 C A -2 locus.3126 186.211 181165187 A G -2 locus.3127 186.238 181217794 C T -2 locus.3128 186.26 181260925 T C -2 locus.3129 186.268 181277164 C T -2 locus.3130 186.286 181313613 C T -2 locus.3131 186.302 181344800 G A -2 locus.3132 186.345 181430377 G A -2 locus.3133 186.377 181493704 A G -2 locus.3134 186.433 181602937 T G -2 locus.3135 186.454 181645416 G A -2 locus.3136 186.508 181751292 A G -2 locus.3137 186.545 181824786 C T -2 locus.3138 186.614 181909538 A C -2 locus.3139 186.778 182039142 G A -2 locus.3140 186.852 182097199 C T -2 locus.3141 186.887 182124730 T C -2 locus.3142 186.931 182159410 T C -2 locus.3143 187.009 182220823 G A -2 locus.3144 187.092 182286302 C T -2 locus.3145 187.166 182345280 A G -2 locus.3146 187.229 182395047 C T -2 locus.3147 187.306 182455753 A C -2 locus.3148 187.363 182500225 C T -2 locus.3149 187.368 182504249 C T -2 locus.3150 187.426 182550024 G A -2 locus.3151 187.46 182577330 G A -2 locus.3152 187.498 182607165 C T -2 locus.3153 187.581 182672296 G C -2 locus.3154 187.626 182707776 G A -2 locus.3155 187.702 182781972 A C -2 locus.3156 187.727 182811100 T C -2 locus.3157 187.76 182851435 G A -2 locus.3158 187.82 182923305 T C -2 locus.3159 187.874 182989336 C A -2 locus.3160 188.008 183150772 G T -2 locus.3161 188.019 183164212 T C -2 locus.3162 188.048 183199219 G A -2 locus.3163 188.092 183252529 G A -2 locus.3164 188.112 183275504 C T -2 locus.3165 188.206 183389553 A G -2 locus.3166 188.213 183398031 G A -2 locus.3167 188.298 183500266 T G -2 locus.3168 188.312 183517244 T C -2 locus.3169 188.33 183539540 C T -2 locus.3170 188.446 183679720 A G -2 locus.3171 188.481 183721180 A G -2 locus.3172 188.514 183760932 T C -2 locus.3173 188.541 183793517 T C -2 locus.3174 188.571 183830160 C A -2 locus.3175 188.599 183863327 A G -2 locus.3176 188.765 183999143 A G -2 locus.3177 188.774 184005979 A G -2 locus.3178 188.837 184054016 T C -2 locus.3179 188.858 184070090 A G -2 locus.3180 188.982 184163884 T C -2 locus.3181 189.054 184299224 G A -2 locus.3182 189.071 184369548 C T -2 locus.3183 189.085 184429500 G A -2 locus.3184 189.093 184462588 A C -2 locus.3185 189.104 184507559 G C -2 locus.3186 189.118 184565642 C T -2 locus.3187 189.125 184594600 A G -2 locus.3188 189.143 184673171 T C -2 locus.3189 189.164 184760567 C T -2 locus.3190 189.176 184813524 T C -2 locus.3191 189.192 184885519 G A -2 locus.3192 189.202 184927416 A G -2 locus.3193 189.242 185100575 A G -2 locus.3194 189.245 185118014 T C -2 locus.3195 189.256 185165569 C T -2 locus.3196 189.264 185200109 T C -2 locus.3197 189.283 185282431 C T -2 locus.3198 189.367 185649193 T C -2 locus.3199 189.376 185689966 A C -2 locus.3200 189.393 185762880 T C -2 locus.3201 189.403 185805112 T C -2 locus.3202 189.416 185861913 T C -2 locus.3203 189.424 185900144 T C -2 locus.3204 189.438 185974821 G A -2 locus.3205 189.45 186047042 C T -2 locus.3206 189.456 186085351 T C -2 locus.3207 189.465 186136333 T G -2 locus.3208 189.474 186193337 G A -2 locus.3209 189.479 186224877 T C -2 locus.3210 189.493 186306661 A G -2 locus.3211 189.502 186366683 A C -2 locus.3212 189.51 186410235 T C -2 locus.3213 189.52 186476153 G A -2 locus.3214 189.525 186504933 C A -2 locus.3215 189.542 186610279 C T -2 locus.3216 189.552 186668765 T C -2 locus.3217 189.558 186705958 T C -2 locus.3218 189.583 186858300 C A -2 locus.3219 189.594 186925871 T C -2 locus.3220 189.599 186955900 T C -2 locus.3221 189.601 186972217 G A -2 locus.3222 189.617 187065342 A G -2 locus.3223 189.623 187104069 G A -2 locus.3224 189.628 187131720 C T -2 locus.3225 189.631 187153020 T G -2 locus.3226 189.644 187234853 T C -2 locus.3227 189.649 187259707 G T -2 locus.3228 189.66 187328947 C A -2 locus.3229 189.666 187366378 T G -2 locus.3230 189.684 187478444 C T -2 locus.3231 189.687 187496409 G A -2 locus.3232 189.691 187517826 A G -2 locus.3233 189.702 187586755 T C -2 locus.3234 189.728 187741752 A G -2 locus.3235 189.743 187836750 T C -2 locus.3236 189.746 187856073 A G -2 locus.3237 189.756 187916592 C A -2 locus.3238 189.78 188009826 G C -2 locus.3239 189.79 188042496 G A -2 locus.3240 189.81 188109777 A C -2 locus.3241 189.837 188204145 T C -2 locus.3242 189.858 188274636 G A -2 locus.3243 189.87 188317494 T C -2 locus.3244 189.891 188388816 G A -2 locus.3245 189.921 188490584 A G -2 locus.3246 189.934 188536820 G A -2 locus.3247 189.96 188623575 C A -2 locus.3248 189.976 188679426 T C -2 locus.3249 189.98 188693526 G A -2 locus.3250 189.996 188747122 A G -2 locus.3251 190.007 188785740 T C -2 locus.3252 190.019 188826201 A C -2 locus.3253 190.051 188937017 A G -2 locus.3254 190.064 188979493 C T -2 locus.3255 190.086 189054231 T G -2 locus.3256 190.104 189117884 A G -2 locus.3257 190.111 189139931 G A -2 locus.3258 190.124 189186475 C A -2 locus.3259 190.133 189215783 G A -2 locus.3260 190.207 189470005 G A -2 locus.3261 190.227 189539157 A G -2 locus.3262 190.243 189593772 C A -2 locus.3263 190.261 189653550 C A -2 locus.3264 190.274 189700143 T G -2 locus.3265 190.277 189708780 G T -2 locus.3266 190.303 189799453 A G -2 locus.3267 190.315 189839836 C T -2 locus.3268 190.331 189895425 T C -2 locus.3269 190.342 189930696 T C -2 locus.3270 190.368 190019411 A G -2 locus.3271 190.378 190055596 C T -2 locus.3272 190.414 190136076 G A -2 locus.3273 190.422 190154694 T C -2 locus.3274 190.46 190239376 C T -2 locus.3275 190.473 190267950 C T -2 locus.3276 190.489 190302285 A G -2 locus.3277 190.535 190405455 A C -2 locus.3278 190.552 190441232 C T -2 locus.3279 190.575 190493275 T C -2 locus.3280 190.596 190539572 C T -2 locus.3281 190.612 190574847 T G -2 locus.3282 190.643 190643587 G A -2 locus.3283 190.668 190697862 C T -2 locus.3284 190.688 190742274 G A -2 locus.3285 190.708 190786458 C T -2 locus.3286 190.734 190844815 G A -2 locus.3287 190.762 190906604 A G -2 locus.3288 190.776 190937309 A G -2 locus.3289 190.794 190978310 G 0 -2 locus.3290 190.829 191042331 T C -2 locus.3291 190.881 191137287 A G -2 locus.3292 190.905 191179157 C T -2 locus.3293 190.911 191191216 G A -2 locus.3294 190.932 191228738 C A -2 locus.3295 190.976 191307142 C T -2 locus.3296 190.992 191319781 T C -2 locus.3297 191.125 191377210 C T -2 locus.3298 191.184 191402600 C T -2 locus.3299 191.246 191429278 T C -2 locus.3300 191.405 191497969 T C -2 locus.3301 191.409 191499918 A G -2 locus.3302 191.531 191552560 T C -2 locus.3303 191.604 191583896 G A -2 locus.3304 191.757 191650061 T C -2 locus.3305 191.811 191673164 C T -2 locus.3306 192.028 191766740 A G -2 locus.3307 192.186 191834956 C T -2 locus.3308 192.362 191910639 G A -2 locus.3309 192.399 191926843 T C -2 locus.3310 192.536 191986047 C A -2 locus.3311 192.581 192005075 A G -2 locus.3312 192.78 192149660 A G -2 locus.3313 192.78 192175692 G A -2 locus.3314 192.78 192204002 C T -2 locus.3315 192.78 192231314 T C -2 locus.3316 192.78 192288626 T C -2 locus.3317 192.78 192337018 G A -2 locus.3318 192.78 192375306 T C -2 locus.3319 192.813 192440428 T C -2 locus.3320 193.172 192473907 G A -2 locus.3321 193.78 192530617 G A -2 locus.3322 194.13 192631979 C T -2 locus.3323 194.13 192702857 G A -2 locus.3324 194.13 192751339 A G -2 locus.3325 194.13 192818899 A G -2 locus.3326 194.13 192841087 C T -2 locus.3327 194.13 192869029 A C -2 locus.3328 194.13 192989350 G A -2 locus.3329 194.13 192996230 A G -2 locus.3330 194.13 193045812 T C -2 locus.3331 194.343 193088861 C T -2 locus.3332 194.388 193151043 G A -2 locus.3333 194.391 193176635 C A -2 locus.3334 194.394 193197692 A T -2 locus.3335 194.406 193285527 T C -2 locus.3336 194.41 193318025 C T -2 locus.3337 194.418 193374050 T C -2 locus.3338 194.425 193433380 T C -2 locus.3339 194.433 193489164 T C -2 locus.3340 194.436 193512121 C A -2 locus.3341 194.441 193547722 A G -2 locus.3342 194.447 193596846 A G -2 locus.3343 194.457 193669537 C T -2 locus.3344 194.473 193793369 G T -2 locus.3345 194.479 193834776 C T -2 locus.3346 194.489 193912783 G A -2 locus.3347 194.499 193984737 C A -2 locus.3348 194.501 193999697 G C -2 locus.3349 194.512 194084442 T C -2 locus.3350 194.529 194210327 T C -2 locus.3351 194.537 194270296 G A -2 locus.3352 194.544 194324700 C T -2 locus.3353 194.551 194376158 G A -2 locus.3354 194.556 194412436 C T -2 locus.3355 194.558 194426528 C A -2 locus.3356 194.569 194513282 A C -2 locus.3357 194.576 194563518 C T -2 locus.3358 194.582 194608315 G A -2 locus.3359 194.601 194755163 T C -2 locus.3360 194.607 194797883 C A -2 locus.3361 194.615 194853812 T C -2 locus.3362 194.625 194928608 A G -2 locus.3363 194.63 195022844 T G -2 locus.3364 194.63 195087922 G T -2 locus.3365 194.63 195098599 A G -2 locus.3366 194.63 195245620 C T -2 locus.3367 194.735 195428641 G A -2 locus.3368 194.783 195475557 T C -2 locus.3369 194.809 195500654 T G -2 locus.3370 194.952 195639218 C T -2 locus.3371 195.015 195699869 A G -2 locus.3372 195.182 195861753 A G -2 locus.3373 195.212 195890936 G A -2 locus.3374 195.255 195932423 C A -2 locus.3375 195.358 196032831 C T -2 locus.3376 195.455 196126874 A G -2 locus.3377 195.501 196171793 T C -2 locus.3378 195.617 196283661 T C -2 locus.3379 195.63 196296541 T C -2 locus.3380 195.734 196397256 G A -2 locus.3381 195.791 196452321 C T -2 locus.3382 195.827 196487903 C T -2 locus.3383 195.85 196510086 C A -2 locus.3384 195.982 196637530 C T -2 locus.3385 196.014 196669044 G A -2 locus.3386 196.025 196679215 A T -2 locus.3387 196.07 196723189 C T -2 locus.3388 196.18 196829899 C T -2 locus.3389 196.24 197031457 C T -2 locus.3390 196.24 197036841 C T -2 locus.3391 196.24 197056568 G A -2 locus.3392 196.24 197093416 G A -2 locus.3393 196.24 197148559 C T -2 locus.3394 196.24 197177610 C T -2 locus.3395 196.24 197246689 C T -2 locus.3396 196.412 197415364 T C -2 locus.3397 196.477 197468568 T C -2 locus.3398 196.51 197513871 T C -2 locus.3399 196.51 197584723 G A -2 locus.3400 196.51 197614216 T C -2 locus.3401 196.51 197649148 A G -2 locus.3402 196.51 197668001 A G -2 locus.3403 196.51 197705689 G A -2 locus.3404 196.51 197733427 C A -2 locus.3405 196.51 197770194 A G -2 locus.3406 196.51 197816906 G A -2 locus.3407 196.51 197866290 T C -2 locus.3408 196.51 197933976 A G -2 locus.3409 196.51 198116050 A G -2 locus.3410 196.51 198155571 G A -2 locus.3411 196.51 198176953 C T -2 locus.3412 196.51 198217868 C T -2 locus.3413 196.51 198262211 A G -2 locus.3414 196.51 198313398 C 0 -2 locus.3415 196.51 198339772 A C -2 locus.3416 196.51 198422883 C T -2 locus.3417 196.51 198495174 T C -2 locus.3418 196.51 198563117 G T -2 locus.3419 196.51 198596572 T C -2 locus.3420 196.51 198629088 T G -2 locus.3421 196.51 198634249 C T -2 locus.3422 196.51 198662718 A G -2 locus.3423 196.51 198704442 G A -2 locus.3424 196.51 198718954 T C -2 locus.3425 196.51 198824819 G A -2 locus.3426 196.51 198875303 G A -2 locus.3427 196.529 198928938 T C -2 locus.3428 196.613 198967974 G A -2 locus.3429 196.727 199020889 G A -2 locus.3430 196.848 199076879 G A -2 locus.3431 196.92 199110298 T C -2 locus.3432 197.027 199160121 C T -2 locus.3433 197.103 199195240 G A -2 locus.3434 197.168 199225518 T C -2 locus.3435 197.242 199260136 C A -2 locus.3436 197.356 199312723 C A -2 locus.3437 197.578 199432096 G A -2 locus.3438 197.607 199498132 A G -2 locus.3439 197.627 199546123 G A -2 locus.3440 197.653 199606841 C T -2 locus.3441 197.661 199626176 C T -2 locus.3442 197.685 199681176 G A -2 locus.3443 197.717 199777656 G A -2 locus.3444 197.731 199848525 A G -2 locus.3445 197.738 199890020 T G -2 locus.3446 197.748 199942549 T G -2 locus.3447 197.763 200017570 C A -2 locus.3448 197.768 200044698 T G -2 locus.3449 197.777 200095669 A G -2 locus.3450 197.783 200125811 G A -2 locus.3451 197.79 200160117 G A -2 locus.3452 197.815 200294436 C T -2 locus.3453 197.848 200468402 G T -2 locus.3454 197.864 200554450 A C -2 locus.3455 197.902 200658492 T C -2 locus.3456 197.998 200749064 G A -2 locus.3457 198.043 200791746 C T -2 locus.3458 198.089 200835122 A G -2 locus.3459 198.154 200897370 C T -2 locus.3460 198.228 200967287 G A -2 locus.3461 198.27 201007261 C T -2 locus.3462 198.305 201039949 C A -2 locus.3463 198.33 201064060 A G -2 locus.3464 198.411 201140943 G A -2 locus.3465 198.425 201153924 C A -2 locus.3466 198.587 201307412 T G -2 locus.3467 198.627 201345538 G A -2 locus.3468 198.66 201430616 A G -2 locus.3469 198.66 201481038 G T -2 locus.3470 198.66 201496886 C T -2 locus.3471 198.66 201514161 T C -2 locus.3472 198.671 201656850 G A -2 locus.3473 198.719 201718089 T G -2 locus.3474 198.741 201746518 T C -2 locus.3475 198.781 201797379 G A -2 locus.3476 198.799 201820485 G T -2 locus.3477 198.823 201852389 G A -2 locus.3478 198.859 201897529 G A -2 locus.3479 198.9 201951137 G A -2 locus.3480 198.919 201975543 C T -2 locus.3481 198.946 202010235 A 0 -2 locus.3482 198.981 202054228 G A -2 locus.3483 199.001 202080321 T C -2 locus.3484 199.007 202088645 T C -2 locus.3485 199.132 202249334 C T -2 locus.3486 199.136 202253568 G A -2 locus.3487 199.241 202389170 G A -2 locus.3488 199.316 202447133 A G -2 locus.3489 199.582 202508165 A G -2 locus.3490 199.729 202579559 T C -2 locus.3491 199.749 202623989 G A -2 locus.3492 199.769 202668868 C T -2 locus.3493 199.821 202722334 G T -2 locus.3494 199.855 202755341 A G -2 locus.3495 199.874 202773507 C T -2 locus.3496 199.933 202832216 G A -2 locus.3497 199.962 202860600 T C -2 locus.3498 199.981 202879462 A G -2 locus.3499 200.001 202899103 G T -2 locus.3500 200.012 202909283 G T -2 locus.3501 200.046 202942570 T C -2 locus.3502 200.092 202988076 G A -2 locus.3503 200.118 203014352 G A -2 locus.3504 200.159 203054255 T C -2 locus.3505 200.165 203060394 G A -2 locus.3506 200.236 203129937 G C -2 locus.3507 200.279 203171974 G A -2 locus.3508 200.327 203219228 C T -2 locus.3509 200.354 203246163 G T -2 locus.3510 200.412 203303306 G A -2 locus.3511 200.461 203351007 C T -2 locus.3512 200.497 203423604 T C -2 locus.3513 200.501 203437004 T C -2 locus.3514 200.51 203462825 G A -2 locus.3515 200.523 203503630 A G -2 locus.3516 200.574 203665902 T C -2 locus.3517 200.588 203708072 T C -2 locus.3518 200.593 203724644 A C -2 locus.3519 200.602 203751286 T C -2 locus.3520 200.613 203788683 T C -2 locus.3521 200.627 203829884 G A -2 locus.3522 200.637 203860878 C A -2 locus.3523 200.642 203877619 G A -2 locus.3524 200.662 203942104 A G -2 locus.3525 200.678 203989901 A C -2 locus.3526 200.7 204059432 T G -2 locus.3527 200.702 204064678 C T -2 locus.3528 200.704 204071553 C T -2 locus.3529 200.737 204175654 A T -2 locus.3530 200.779 204306790 T G -2 locus.3531 200.797 204364546 G A -2 locus.3532 200.827 204458542 A C -2 locus.3533 200.83 204502491 C T -2 locus.3534 200.863 204560879 A G -2 locus.3535 200.887 204602444 T C -2 locus.3536 200.958 204702992 G A -2 locus.3537 200.997 204726565 A G -2 locus.3538 201.054 204761784 C T -2 locus.3539 201.125 204804430 G A -2 locus.3540 201.252 204881765 T C -2 locus.3541 201.286 204902549 C T -2 locus.3542 201.443 204997139 C T -2 locus.3543 201.486 205023204 C A -2 locus.3544 201.564 205069983 T G -2 locus.3545 201.669 205132747 C T -2 locus.3546 201.82 205223167 C T -2 locus.3547 201.855 205244432 C T -2 locus.3548 201.957 205305554 T G -2 locus.3549 202.009 205336831 T C -2 locus.3550 202.104 205403175 C A -2 locus.3551 202.178 205454966 G A -2 locus.3552 202.289 205532679 G A -2 locus.3553 202.346 205572258 T C -2 locus.3554 202.396 205607678 G A -2 locus.3555 202.475 205662501 G A -2 locus.3556 202.506 205684630 G A -2 locus.3557 202.596 205747203 C T -2 locus.3558 202.62 205764146 G A -2 locus.3559 202.632 205773047 T C -2 locus.3560 202.885 205949338 A G -2 locus.3561 203.127 206118959 A G -2 locus.3562 203.215 206180550 T C -2 locus.3563 203.251 206205591 G A -2 locus.3564 203.352 206276753 A G -2 locus.3565 203.402 206311785 G A -2 locus.3566 203.441 206338485 A G -2 locus.3567 203.452 206346660 C T -2 locus.3568 203.503 206382108 T C -2 locus.3569 203.568 206427786 G A -2 locus.3570 203.687 206510663 T C -2 locus.3571 203.734 206543760 G T -2 locus.3572 203.876 206643029 T C -2 locus.3573 204.059 206821701 G A -2 locus.3574 204.105 206886750 T C -2 locus.3575 204.166 206974495 C T -2 locus.3576 204.202 207025377 G A -2 locus.3577 204.213 207040648 A C -2 locus.3578 204.222 207066911 T C -2 locus.3579 204.231 207120290 A C -2 locus.3580 204.249 207231826 T C -2 locus.3581 204.338 207322502 C T -2 locus.3582 204.388 207369466 C T -2 locus.3583 204.442 207420807 G A -2 locus.3584 204.539 207512168 G T -2 locus.3585 204.578 207548922 C A -2 locus.3586 204.607 207575434 G A -2 locus.3587 204.643 207609417 A G -2 locus.3588 204.733 207694488 G A -2 locus.3589 204.789 207747048 C A -2 locus.3590 204.847 207802311 T C -2 locus.3591 204.872 207849417 G A -2 locus.3592 204.875 207906491 G T -2 locus.3593 204.879 207957291 C T -2 locus.3594 204.88 207971469 T C -2 locus.3595 204.892 208020229 G A -2 locus.3596 204.899 208045227 G A -2 locus.3597 204.909 208078929 C T -2 locus.3598 204.928 208140584 G A -2 locus.3599 204.937 208170752 T C -2 locus.3600 204.947 208202599 G A -2 locus.3601 204.956 208232368 C T -2 locus.3602 204.994 208358342 A G -2 locus.3603 205.03 208478108 C A -2 locus.3604 205.043 208511844 A G -2 locus.3605 205.106 208564435 T G -2 locus.3606 205.123 208579059 A G -2 locus.3607 205.145 208597501 C G -2 locus.3608 205.234 208671645 G A -2 locus.3609 205.239 208676009 C A -2 locus.3610 205.456 208857297 A G -2 locus.3611 205.519 208910057 A G -2 locus.3612 205.549 208935076 T C -2 locus.3613 205.606 208982685 A G -2 locus.3614 205.646 209015882 T G -2 locus.3615 205.687 209050239 G T -2 locus.3616 205.853 209188995 G A -2 locus.3617 205.897 209225353 C A -2 locus.3618 205.937 209259024 G A -2 locus.3619 206.085 209382745 G A -2 locus.3620 206.108 209401403 C T -2 locus.3621 206.175 209457612 C T -2 locus.3622 206.3 209572523 A G -2 locus.3623 206.3 209637524 A G -2 locus.3624 206.3 209655826 G T -2 locus.3625 206.3 209703200 T C -2 locus.3626 206.3 209719454 G A -2 locus.3627 206.3 209765359 G C -2 locus.3628 206.3 209799239 T C -2 locus.3629 206.3 209830001 C T -2 locus.3630 206.3 209901734 C T -2 locus.3631 206.3 209927999 A G -2 locus.3632 206.327 209994504 G A -2 locus.3633 206.363 210045166 G A -2 locus.3634 206.413 210115127 G A -2 locus.3635 206.442 210156039 G A -2 locus.3636 206.504 210244152 T G -2 locus.3637 206.51 210274307 T C -2 locus.3638 206.51 210299865 C T -2 locus.3639 206.51 210418618 C T -2 locus.3640 206.51 210557713 C T -2 locus.3641 206.51 210595456 A G -2 locus.3642 206.51 210626872 A G -2 locus.3643 206.51 210644328 G A -2 locus.3644 206.554 210708881 A 0 -2 locus.3645 206.589 210753781 A G -2 locus.3646 206.638 210816816 G A -2 locus.3647 206.741 210948623 G A -2 locus.3648 206.762 210975950 G A -2 locus.3649 206.798 211021394 G A -2 locus.3650 206.835 211068237 T C -2 locus.3651 206.868 211110677 G A -2 locus.3652 206.899 211151124 A G -2 locus.3653 206.904 211157123 T C -2 locus.3654 206.937 211198857 G T -2 locus.3655 206.971 211242184 T C -2 locus.3656 206.996 211274257 C T -2 locus.3657 207.046 211338580 A G -2 locus.3658 207.078 211379220 C T -2 locus.3659 207.102 211410448 G A -2 locus.3660 207.159 211482350 G A -2 locus.3661 207.182 211512445 C A -2 locus.3662 207.203 211539866 A G -2 locus.3663 207.259 211611196 G A -2 locus.3664 207.325 211695755 T G -2 locus.3665 207.356 211735126 A G -2 locus.3666 207.381 211767237 G A -2 locus.3667 207.471 211881765 T G -2 locus.3668 207.49 211906297 C A -2 locus.3669 207.522 211946831 C T -2 locus.3670 207.605 212039903 G A -2 locus.3671 207.861 212232636 T C -2 locus.3672 208.007 212342465 C T -2 locus.3673 208.122 212429211 C T -2 locus.3674 208.156 212454285 A G -2 locus.3675 208.269 212539644 G T -2 locus.3676 208.363 212609913 C A -2 locus.3677 208.44 212668173 T C -2 locus.3678 208.453 212677830 G A -2 locus.3679 208.531 212736318 C T -2 locus.3680 208.548 212749665 C T -2 locus.3681 208.606 212793217 T C -2 locus.3682 208.624 212806608 G A -2 locus.3683 208.71 212871248 C T -2 locus.3684 208.937 213042193 G A -2 locus.3685 208.993 213083920 A G -2 locus.3686 209.053 213129568 A C -2 locus.3687 209.078 213148055 T C -2 locus.3688 209.095 213160521 A C -2 locus.3689 209.16 213219804 G A -2 locus.3690 209.16 213245108 C T -2 locus.3691 209.16 213286306 T C -2 locus.3692 209.16 213315379 C A -2 locus.3693 209.16 213339285 C T -2 locus.3694 209.16 213355261 C T -2 locus.3695 209.16 213448235 C T -2 locus.3696 209.225 213505877 G A -2 locus.3697 209.449 213674776 G T -2 locus.3698 209.557 213756591 G A -2 locus.3699 209.602 213790888 A G -2 locus.3700 209.834 213965644 G A -2 locus.3701 209.886 214005350 A G -2 locus.3702 209.894 214011024 G T -2 locus.3703 209.906 214020092 G T -2 locus.3704 210.043 214123761 G T -2 locus.3705 210.087 214156795 T C -2 locus.3706 210.182 214228529 A G -2 locus.3707 210.957 215098553 A G -2 locus.3708 211.015 215147086 G A -2 locus.3709 211.095 215214415 A G -2 locus.3710 211.139 215251657 C T -2 locus.3711 211.208 215309338 A G -2 locus.3712 211.237 215333769 A G -2 locus.3713 211.278 215368972 A G -2 locus.3714 211.324 215407265 A G -2 locus.3715 211.367 215443702 C T -2 locus.3716 211.398 215469328 A G -2 locus.3717 211.433 215498705 A G -2 locus.3718 211.488 215545833 C T -2 locus.3719 211.547 215594803 A C -2 locus.3720 211.603 215641893 G A -2 locus.3721 211.649 215680487 C T -2 locus.3722 211.682 215708924 T C -2 locus.3723 211.72 215740869 G A -2 locus.3724 211.76 215774413 A G -2 locus.3725 211.805 215812352 C T -2 locus.3726 211.844 215844761 C T -2 locus.3727 212.021 215994089 G A -2 locus.3728 212.066 216032030 T C -2 locus.3729 213.723 216677650 A G -2 locus.3730 213.885 216807667 T 0 -2 locus.3731 214.407 217217036 A C -2 locus.3732 214.714 217457102 G A -2 locus.3733 214.787 217514986 C T -2 locus.3734 214.846 217560789 G T -2 locus.3735 215.076 217653015 C T -2 locus.3736 215.625 217719922 G A -2 locus.3737 215.646 217736927 G T -2 locus.3738 215.837 217890987 G T -2 locus.3739 215.881 217925961 G A -2 locus.3740 215.944 217976690 C T -2 locus.3741 216.01 218058406 A G -2 locus.3742 216.01 218095888 T C -2 locus.3743 216.01 218118782 G A -2 locus.3744 216.01 218186557 T C -2 locus.3745 216.074 218298640 C T -2 locus.3746 216.123 218309332 A G -2 locus.3747 216.627 218418759 G T -2 locus.3748 216.666 218427149 A G -2 locus.3749 217.016 218592494 C T -2 locus.3750 217.148 218677776 G T -2 locus.3751 217.163 218687224 G A -2 locus.3752 217.608 218974561 C T -2 locus.3753 217.671 219015064 C T -2 locus.3754 217.9 219162459 C T -2 locus.3755 218.108 219296559 A G -2 locus.3756 218.126 219307961 A G -2 locus.3757 218.202 219357404 C 0 -2 locus.3758 218.275 219404288 G A -2 locus.3759 218.374 219468105 T G -2 locus.3760 218.725 219694019 A G -2 locus.3761 218.85 219774612 C A -2 locus.3762 218.938 219831281 T C -2 locus.3763 218.962 219847222 T C -2 locus.3764 219.097 219933911 A G -2 locus.3765 219.79 220083076 A G -2 locus.3766 219.887 220103004 G A -2 locus.3767 220.137 220154626 G T -2 locus.3768 220.51 220231872 T C -2 locus.3769 221.049 220343269 G T -2 locus.3770 221.124 220358664 T C -2 locus.3771 221.36 220473716 T C -2 locus.3772 221.368 220517661 A G -2 locus.3773 221.386 220556620 T C -2 locus.3774 221.455 220702849 A G -2 locus.3775 221.492 220780799 T C -2 locus.3776 221.51 220818676 C A -2 locus.3777 221.525 220852308 T G -2 locus.3778 221.549 220903491 T C -2 locus.3779 221.587 220955491 A G -2 locus.3780 221.594 220963516 T C -2 locus.3781 221.677 221052836 A G -2 locus.3782 221.735 221078667 G A -2 locus.3783 221.832 221117283 T C -2 locus.3784 221.922 221153389 G A -2 locus.3785 222.079 221216169 A G -2 locus.3786 222.151 221245334 G T -2 locus.3787 222.225 221274691 A G -2 locus.3788 222.424 221354646 A C -2 locus.3789 222.537 221399780 T C -2 locus.3790 222.572 221413661 G A -2 locus.3791 222.713 221470275 G A -2 locus.3792 222.816 221511252 G A -2 locus.3793 222.875 221534982 G A -2 locus.3794 222.975 221574841 T C -2 locus.3795 223.098 221624187 G A -2 locus.3796 223.121 221633575 G C -2 locus.3797 223.317 221711968 C T -2 locus.3798 223.744 221773273 T C -2 locus.3799 223.761 221826962 C A -2 locus.3800 223.887 221892049 A G -2 locus.3801 223.982 221940916 A G -2 locus.3802 224.049 221975498 T C -2 locus.3803 224.15 222027261 A G -2 locus.3804 224.254 222080667 G T -2 locus.3805 224.544 222230265 A G -2 locus.3806 224.8 222362020 G A -2 locus.3807 224.85 222387632 C T -2 locus.3808 224.87 222404982 T C -2 locus.3809 224.889 222438632 A C -2 locus.3810 224.968 222552458 A G -2 locus.3811 225.006 222606287 C T -2 locus.3812 225.027 222636869 T C -2 locus.3813 225.042 222658932 T G -2 locus.3814 225.065 222691552 T C -2 locus.3815 225.09 222728012 C A -2 locus.3816 225.118 222768405 T C -2 locus.3817 225.147 222800960 C T -2 locus.3818 225.187 222837413 G A -2 locus.3819 225.26 222904015 C T -2 locus.3820 225.278 222919932 G A -2 locus.3821 225.349 223012717 C T -2 locus.3822 225.419 223051978 G T -2 locus.3823 225.53 223113662 C T -2 locus.3824 225.62 223164278 G T -2 locus.3825 225.656 223184373 T C -2 locus.3826 225.72 223219808 C T -2 locus.3827 225.796 223262207 T C -2 locus.3828 225.876 223306849 T C -2 locus.3829 225.893 223316019 G A -2 locus.3830 225.98 223364912 G A -2 locus.3831 226.031 223393423 T C -2 locus.3832 226.118 223460997 G T -2 locus.3833 226.241 223564458 C A -2 locus.3834 226.34 223647440 G A -2 locus.3835 226.384 223685042 C T -2 locus.3836 226.476 223762044 G A -2 locus.3837 226.536 223812677 A G -2 locus.3838 226.588 223856449 C A -2 locus.3839 226.611 223876023 T C -2 locus.3840 226.65 223908949 G T -2 locus.3841 226.744 223987501 C T -2 locus.3842 226.791 224027318 T C -2 locus.3843 226.851 224077986 A G -2 locus.3844 226.924 224139429 A G -2 locus.3845 226.973 224180466 A G -2 locus.3846 227.013 224213503 A G -2 locus.3847 227.098 224283993 G A -2 locus.3848 227.146 224323379 C T -2 locus.3849 227.17 224378119 G A -2 locus.3850 227.17 224402156 C T -2 locus.3851 227.201 224438092 T C -2 locus.3852 227.207 224444800 T G -2 locus.3853 227.283 224527713 G A -2 locus.3854 227.409 224665736 G A -2 locus.3855 227.429 224687471 G A -2 locus.3856 227.473 224734870 T C -2 locus.3857 227.556 224825575 T C -2 locus.3858 227.592 224864722 A C -2 locus.3859 227.619 224894551 C T -2 locus.3860 227.715 224998163 C G -2 locus.3861 227.777 225065614 G A -2 locus.3862 227.8 225090704 C A -2 locus.3863 227.845 225139551 T C -2 locus.3864 227.894 225193189 G 0 -2 locus.3865 227.929 225231192 G A -2 locus.3866 227.972 225277646 A C -2 locus.3867 228.004 225312697 T C -2 locus.3868 228.07 225384071 A G -2 locus.3869 228.109 225426509 G A -2 locus.3870 228.172 225459025 A G -2 locus.3871 228.218 225482288 C T -2 locus.3872 228.32 225533687 C T -2 locus.3873 228.5 225623998 G A -2 locus.3874 228.602 225710000 C T -2 locus.3875 228.637 225747110 G 0 -2 locus.3876 228.671 225783164 G A -2 locus.3877 228.727 225842690 T G -2 locus.3878 228.815 225936196 G A -2 locus.3879 228.879 226003694 T C -2 locus.3880 228.918 226044848 A G -2 locus.3881 228.95 226078982 T C -2 locus.3882 228.99 226120818 G A -2 locus.3883 229.052 226196223 C T -2 locus.3884 229.07 226295512 G A -2 locus.3885 229.078 226339053 C A -2 locus.3886 229.084 226370467 T C -2 locus.3887 229.103 226477839 A G -2 locus.3888 229.108 226508293 C T -2 locus.3889 229.12 226569909 T C -2 locus.3890 229.128 226617529 T C -2 locus.3891 229.146 226717840 G A -2 locus.3892 229.184 226784844 T C -2 locus.3893 229.215 226828226 G A -2 locus.3894 229.253 226880698 A G -2 locus.3895 229.301 226946779 G A -2 locus.3896 229.309 226958743 C T -2 locus.3897 229.402 227044476 T C -2 locus.3898 229.443 227072901 G A -2 locus.3899 229.471 227091775 G A -2 locus.3900 229.522 227127050 T A -2 locus.3901 229.619 227194969 G A -2 locus.3902 229.683 227238603 G A -2 locus.3903 229.917 227373381 G A -2 locus.3904 229.942 227380600 T G -2 locus.3905 229.992 227394567 A G -2 locus.3906 230.084 227420511 G C -2 locus.3907 230.53 227644968 C A -2 locus.3908 230.551 227694352 A G -2 locus.3909 230.569 227734587 C T -2 locus.3910 230.587 227775576 T C -2 locus.3911 230.589 227781732 A G -2 locus.3912 230.611 227830415 G A -2 locus.3913 230.622 227856440 T C -2 locus.3914 230.65 227921207 A C -2 locus.3915 230.789 228019818 G A -2 locus.3916 230.91 228074336 A G -2 locus.3917 231.034 228130504 T C -2 locus.3918 231.159 228186635 T C -2 locus.3919 231.218 228213023 A G -2 locus.3920 231.347 228271382 C T -2 locus.3921 231.381 228286467 A G -2 locus.3922 231.502 228341253 A G -2 locus.3923 231.629 228398190 A G -2 locus.3924 231.689 228425531 G A -2 locus.3925 231.748 228451875 C T -2 locus.3926 231.823 228485892 G A -2 locus.3927 231.924 228531586 G T -2 locus.3928 232.21 228660388 A G -2 locus.3929 232.245 228676010 T 0 -2 locus.3930 232.43 228759482 C T -2 locus.3931 232.496 228789081 T C -2 locus.3932 232.629 228848890 T C -2 locus.3933 232.736 228897020 A G -2 locus.3934 232.913 228977129 A G -2 locus.3935 233.017 229023952 C T -2 locus.3936 233.055 229040784 A T -2 locus.3937 233.177 229097219 A G -2 locus.3938 233.28 229150336 T C -2 locus.3939 233.355 229189424 C T -2 locus.3940 233.417 229221395 T C -2 locus.3941 233.47 229248722 T C -2 locus.3942 233.665 229349932 T C -2 locus.3943 233.756 229397259 A G -2 locus.3944 233.771 229404707 C T -2 locus.3945 233.807 229423565 G A -2 locus.3946 234.009 229623371 T G -2 locus.3947 234.096 229721318 G A -2 locus.3948 234.195 229832513 A G -2 locus.3949 234.222 229862097 G A -2 locus.3950 234.239 229880901 T C -2 locus.3951 234.281 229928223 G A -2 locus.3952 234.298 229947078 A G -2 locus.3953 234.326 229965518 T G -2 locus.3954 234.467 230006689 G A -2 locus.3955 234.846 230129750 A G -2 locus.3956 234.885 230144578 G A -2 locus.3957 234.976 230179317 T A -2 locus.3958 235.132 230238912 T C -2 locus.3959 235.238 230279194 C T -2 locus.3960 235.292 230323317 C T -2 locus.3961 235.413 230439460 C T -2 locus.3962 235.449 230473538 A G -2 locus.3963 235.482 230505362 T C -2 locus.3964 235.681 230657435 G T -2 locus.3965 235.752 230692645 C T -2 locus.3966 235.865 230748446 T C -2 locus.3967 235.948 230789586 A G -2 locus.3968 236.016 230823473 T C -2 locus.3969 236.225 230926690 T C -2 locus.3970 236.432 231029291 T C -2 locus.3971 236.495 231060457 G A -2 locus.3972 236.514 231069887 A G -2 locus.3973 236.718 231170715 C T -2 locus.3974 236.862 231242200 G A -2 locus.3975 236.956 231288643 A G -2 locus.3976 237.06 231340317 T C -2 locus.3977 237.196 231407490 G T -2 locus.3978 237.231 231424947 G A -2 locus.3979 237.399 231507809 G A -2 locus.3980 237.47 231543005 G A -2 locus.3981 237.498 231557166 A 0 -2 locus.3982 237.608 231611560 G A -2 locus.3983 237.926 231769134 A G -2 locus.3984 238.058 231834142 C 0 -2 locus.3985 238.18 231894811 T C -2 locus.3986 238.212 231910590 G A -2 locus.3987 238.22 231931202 T A -2 locus.3988 238.29 232022650 A T -2 locus.3989 238.394 232136092 A 0 -2 locus.3990 238.427 232172409 A G -2 locus.3991 238.457 232206156 T C -2 locus.3992 238.507 232260867 A G -2 locus.3993 238.558 232316480 G T -2 locus.3994 238.599 232361606 C T -2 locus.3995 238.647 232414241 T A -2 locus.3996 238.698 232469995 T C -2 locus.3997 238.712 232485668 A C -2 locus.3998 238.734 232510155 G A -2 locus.3999 238.775 232554453 G A -2 locus.4000 238.809 232591652 G A -2 locus.4001 238.897 232688816 C T -2 locus.4002 238.972 232771356 T C -2 locus.4003 238.991 232791702 G A -2 locus.4004 239.089 232898869 A G -2 locus.4005 239.143 232957928 G A -2 locus.4006 239.16 232977026 G A -2 locus.4007 239.198 233019342 G A -2 locus.4008 239.828 233341008 G A -2 locus.4009 239.927 233377856 C T -2 locus.4010 240.042 233429712 A G -2 locus.4011 240.071 233461442 C T -2 locus.4012 240.104 233497913 T C -2 locus.4013 240.154 233552984 C T -2 locus.4014 240.187 233589543 T G -2 locus.4015 240.218 233623788 G A -2 locus.4016 240.413 233703675 T C -2 locus.4017 240.552 233741862 T C -2 locus.4018 240.676 233775867 C T -2 locus.4019 240.812 233813983 G A -2 locus.4020 241.04 233988816 T C -2 locus.4021 241.277 234119904 C A -2 locus.4022 241.299 234128663 T C -2 locus.4023 241.649 234269471 A G -2 locus.4024 241.808 234333283 G A -2 locus.4025 242.062 234435209 T G -2 locus.4026 242.395 234569167 G A -2 locus.4027 242.479 234602983 T C -2 locus.4028 242.495 234609188 G A -2 locus.4029 242.61 234655615 C T -2 locus.4030 242.647 234670354 A G -2 locus.4031 242.766 234718375 G A -2 locus.4032 242.872 234760640 T C -2 locus.4033 242.99 234808295 A G -2 locus.4034 243.311 234937102 C T -2 locus.4035 243.338 234947844 T C -2 locus.4036 243.484 235006576 A G -2 locus.4037 243.548 235032427 A G -2 locus.4038 243.584 235046820 G T -2 locus.4039 243.737 235108351 T C -2 locus.4040 243.869 235161178 C T -2 locus.4041 243.927 235184763 T C -2 locus.4042 244.03 235225978 G A -2 locus.4043 244.115 235260287 T C -2 locus.4044 244.147 235273207 A G -2 locus.4045 244.301 235334922 G A -2 locus.4046 244.331 235347013 G T -2 locus.4047 244.457 235397729 T C -2 locus.4048 244.523 235424219 A G -2 locus.4049 244.683 235488224 C T -2 locus.4050 244.732 235508043 T C -2 locus.4051 244.738 235510648 A G -2 locus.4052 244.864 235561284 G A -2 locus.4053 245.012 235620686 C T -2 locus.4054 245.049 235635626 C A -2 locus.4055 245.158 235679148 C T -2 locus.4056 245.319 235723972 G A -2 locus.4057 245.396 235741975 A G -2 locus.4058 245.518 235770523 A G -2 locus.4059 245.728 235819515 A G -2 locus.4060 245.89 235857471 A G -2 locus.4061 246.147 235917576 A G -2 locus.4062 246.167 235922123 T C -2 locus.4063 246.419 235981086 G A -2 locus.4064 246.619 236027912 T C -2 locus.4065 247.014 236120162 C T -2 locus.4066 247.145 236150845 T C -2 locus.4067 247.423 236215993 A G -2 locus.4068 247.445 236221140 C A -2 locus.4069 247.721 236285593 C T -2 locus.4070 247.763 236347543 C T -2 locus.4071 247.766 236398303 G A -2 locus.4072 247.769 236449805 G A -2 locus.4073 247.787 236470812 G A -2 locus.4074 247.883 236541718 G A -2 locus.4075 247.912 236562748 A G -2 locus.4076 248.191 236768061 T C -2 locus.4077 248.212 236783616 C 0 -2 locus.4078 248.465 236977003 G A -2 locus.4079 248.515 237017179 T C -2 locus.4080 248.587 237076010 G A -2 locus.4081 248.698 237165096 A G -2 locus.4082 248.767 237221424 A G -2 locus.4083 248.817 237261566 T C -2 locus.4084 248.883 237315458 C A -2 locus.4085 248.908 237335144 A G -2 locus.4086 249.098 237488816 G A -2 locus.4087 249.212 237563114 G A -2 locus.4088 249.321 237613535 C T -2 locus.4089 249.652 237761321 A G -2 locus.4090 249.804 237813990 C T -2 locus.4091 249.828 237822440 A G -2 locus.4092 250.103 237918106 T C -2 locus.4093 250.173 237942267 G A -2 locus.4094 250.458 238041313 G A -2 locus.4095 250.571 238080519 C T -2 locus.4096 250.733 238137087 G A -2 locus.4097 250.779 238152888 G A -2 locus.4098 251.057 238249575 G A -2 locus.4099 251.087 238259883 A G -2 locus.4100 251.38 238361583 C T -2 locus.4101 251.476 238395201 G A -2 locus.4102 251.535 238415692 A G -2 locus.4103 251.781 238501227 G A -2 locus.4104 251.956 238567116 T C -2 locus.4105 252.047 238602466 T C -2 locus.4106 252.153 238643447 T C -2 locus.4107 252.236 238675170 C T -2 locus.4108 252.64 238831242 T C -2 locus.4109 252.817 238899861 A G -2 locus.4110 252.922 238940445 T 0 -2 locus.4111 253.054 238991301 A G -2 locus.4112 253.071 238997920 T C -2 locus.4113 253.159 239031909 A C -2 locus.4114 253.401 239125341 T C -2 locus.4115 253.443 239141565 G A -2 locus.4116 253.464 239149511 G A -2 locus.4117 253.57 239190554 A T -2 locus.4118 253.706 239243237 T C -2 locus.4119 253.823 239288339 C T -2 locus.4120 253.919 239325418 C T -2 locus.4121 254.088 239390747 C A -2 locus.4122 254.397 239510065 C T -2 locus.4123 254.537 239564082 A G -2 locus.4124 254.673 239616700 A C -2 locus.4125 254.773 239655117 T C -2 locus.4126 254.835 239679240 C T -2 locus.4127 255.085 239775862 C T -2 locus.4128 255.43 239908885 G A -2 locus.4129 255.49 239932238 C T -2 locus.4130 255.559 239958619 A G -2 locus.4131 255.593 239971864 C A -2 locus.4132 255.697 240012290 G A -2 locus.4133 255.888 240085853 G A -2 locus.4134 256.251 240226237 G A -2 locus.4135 256.394 240281174 C T -2 locus.4136 256.54 240337875 T C -2 locus.4137 256.725 240409281 A G -2 locus.4138 256.902 240477448 T C -2 locus.4139 257.119 240556049 A C -2 locus.4140 257.568 240647987 C T -2 locus.4141 257.721 240684120 G A -2 locus.4142 257.855 240721994 C A -2 locus.4143 258.052 240777646 C T -2 locus.4144 258.226 240833247 C T -2 locus.4145 258.364 240897051 G A -2 locus.4146 258.467 240944410 T C -2 locus.4147 258.517 240967385 C T -2 locus.4148 258.637 241022806 A G -2 locus.4149 258.713 241057841 A G -2 locus.4150 258.933 241159297 T C -2 locus.4151 259.235 241298301 G A -2 locus.4152 259.393 241371128 A G -2 locus.4153 259.434 241390178 T C -2 locus.4154 259.687 241506698 T C -2 locus.4155 259.768 241543820 A C -2 locus.4156 259.895 241602404 A G -2 locus.4157 259.916 241612246 C T -2 locus.4158 259.997 241649475 T C -2 locus.4159 260.213 241748973 A G -2 locus.4160 260.41 241839716 G A -2 locus.4161 260.65 241950529 A G -2 locus.4162 260.841 242038424 A G -2 locus.4163 261.046 242132753 A G -2 locus.4164 261.085 242150818 C T -2 locus.4165 261.161 242185853 T C -2 locus.4166 261.445 242316517 G A -2 locus.4167 261.621 242397946 A G -2 locus.4168 261.761 242462366 G A -2 locus.4169 261.913 242532287 G A -2 locus.4170 261.998 242571670 C T -2 locus.4171 262.101 242619137 A G -2 locus.4172 262.226 242676521 T C -2 locus.4173 262.294 242707969 T C -2 locus.4174 262.361 242738945 C T -2 locus.4175 262.479 242793050 T C -2 locus.4176 262.573 242836595 A G -2 locus.4177 262.863 242970195 T C -2 locus.4178 262.877 242976702 A G -2 locus.4179 262.939 243005095 A G -2 locus.4180 263.037 243050370 G A -2 locus.4181 263.133 243094464 A G -2 locus.4182 263.26 243153063 C T -2 locus.4183 263.409 243221593 C T -2 locus.4184 263.467 243248420 C T -2 locus.4185 263.552 243287504 C T -2 locus.4186 263.585 243302892 T C -2 locus.4187 263.721 243365308 C T -2 locus.4188 263.902 243449101 G A -2 locus.4189 263.993 243490742 G A -2 locus.4190 264.093 243537018 G A -2 locus.4191 264.221 243595757 G A -2 locus.4192 264.413 243684242 T C -2 locus.4193 264.897 243907649 A C -2 locus.4194 265.126 244012987 A G -2 locus.4195 265.242 244066362 T G -2 locus.4196 265.378 244129054 G A -2 locus.4197 265.458 244165892 G A -2 locus.4198 265.56 244212834 A C -2 locus.4199 265.658 244258056 T C -2 locus.4200 265.826 244335478 C T -2 locus.4201 266.247 244529459 T C -2 locus.4202 266.418 244608420 A G -2 locus.4203 266.449 244622796 T C -2 locus.4204 266.531 244660561 C T -2 locus.4205 266.584 244684889 G A -2 locus.4206 266.685 244731375 T C -2 locus.4207 266.768 244769858 G A -2 locus.4208 266.865 244814221 C T -2 locus.4209 267.049 244899259 C T -2 locus.4210 267.154 244947713 G A -2 locus.4211 267.187 244962782 C T -2 locus.4212 267.284 245007283 C T -2 locus.4213 267.304 245016588 T C -2 locus.4214 267.333 245030239 T C -2 locus.4215 267.492 245103217 C T -2 locus.4216 267.593 245149683 G A -2 locus.4217 267.715 245206162 G A -2 locus.4218 267.806 245248045 C T -2 locus.4219 267.94 245309611 G A -2 locus.4220 268.025 245349075 C A -2 locus.4221 268.632 245628655 A G -2 locus.4222 268.75 245683288 A G -2 locus.4223 268.869 245737846 C T -2 locus.4224 269.072 245831454 G A -2 locus.4225 269.193 245887292 T C -2 locus.4226 269.316 245943905 C A -2 locus.4227 269.418 245990733 T G -2 locus.4228 269.691 246116878 G A -2 locus.4229 269.702 246121938 A C -2 locus.4230 269.737 246138023 C T -2 locus.4231 269.895 246210686 T C -2 locus.4232 269.98 246249900 G T -2 locus.4233 270.126 246317098 T C -2 locus.4234 270.236 246367835 G A -2 locus.4235 270.356 246423360 T C -2 locus.4236 270.475 246478010 A G -2 locus.4237 270.495 246487220 G A -2 locus.4238 270.583 246527777 A G -2 locus.4239 270.673 246569288 T C -2 locus.4240 270.729 246595049 C T -2 locus.4241 270.772 246615094 G A -2 locus.4242 270.917 246681817 G A -2 locus.4243 270.959 246701174 A G -2 locus.4244 271.038 246737445 A G -2 locus.4245 271.201 246812583 T C -2 locus.4246 271.257 246838210 A G -2 locus.4247 271.37 246890646 T C -2 locus.4248 271.43 246918062 G A -2 locus.4249 271.527 246962852 A G -2 locus.4250 271.619 247005105 A C -2 locus.4251 271.659 247023852 C T -2 locus.4252 271.779 247079021 G A -2 locus.4253 272.14 247245173 T C -2 locus.4254 272.179 247263247 A G -2 locus.4255 272.596 247455331 T C -2 locus.4256 272.688 247498052 T C -2 locus.4257 272.799 247548978 T C -2 locus.4258 272.986 247635266 T C -2 locus.4259 273.11 247692239 A G -2 locus.4260 273.228 247746861 T C -2 locus.4261 273.272 247767065 G A -2 locus.4262 273.611 247922953 A G -2 locus.4263 273.682 247955981 A G -2 locus.4264 273.77 247996448 A G -2 locus.4265 273.859 248037266 G A -2 locus.4266 273.915 248063253 C A -2 locus.4267 273.928 248069420 G A -2 locus.4268 274.061 248130533 A G -2 locus.4269 274.148 248170807 T C -2 locus.4270 274.247 248216094 A G -2 locus.4271 274.339 248258462 C T -2 locus.4272 274.545 248353647 G A -2 locus.4273 274.957 248543195 C T -2 locus.4274 275.058 248590000 T C -2 locus.4275 275.074 248597460 C A -2 locus.4276 275.175 248643714 A G -2 locus.4277 275.189 248650282 G A -2 locus.4278 275.512 248799264 C T -24 locus.4279 0 96467 C T -24 locus.4280 0 203039 C 0 -24 locus.4281 0 335894 A G -24 locus.4282 0 347365 A T -24 locus.4283 0 355727 A T -24 locus.4284 0 481794 A G -24 locus.4285 0 702665 A G -24 locus.4286 0 794098 C T -24 locus.4287 0 884092 G A -24 locus.4288 0 962868 T C -24 locus.4289 0 1012093 G A -24 locus.4290 0 1049988 A G -24 locus.4291 0 1152766 C T -24 locus.4292 0 1211676 T C -24 locus.4293 0 1244496 A G -24 locus.4294 0 1303692 A G -24 locus.4295 0 1377045 T C -24 locus.4296 0 1435916 T C -24 locus.4297 0 1459984 C T -24 locus.4298 0 1527822 T A -24 locus.4299 0 1807272 A G -24 locus.4300 0 1938133 G A -24 locus.4301 0 2043961 C T -24 locus.4302 0 2191707 A G -24 locus.4303 0 2381978 C T -24 locus.4304 0 2416588 T C -24 locus.4305 0 2532451 T G -24 locus.4306 0 2578020 C T -24 locus.4307 0 2613669 G A -24 locus.4308 0 2661190 A G -24 locus.4309 0 2748756 T C -24 locus.4310 0 2758943 G A -24 locus.4311 0 2818844 C T -24 locus.4312 0 2843599 G T -24 locus.4313 0 2920403 C T -24 locus.4314 0 2973822 A G -24 locus.4315 0 3031957 G A -24 locus.4316 0 3214984 C T -24 locus.4317 0 3333012 G A -24 locus.4318 0 3439178 C T -24 locus.4319 0 3446498 T C -24 locus.4320 0 3507572 C T -24 locus.4321 0 3580800 A G -24 locus.4322 0 3698354 A G -24 locus.4323 0 3791894 T C -24 locus.4324 0 3807645 G A -24 locus.4325 0 4000350 C T -24 locus.4326 0 4116377 C A -24 locus.4327 0 4276981 G A -24 locus.4328 0 4325906 G A -24 locus.4329 0 4398926 G A -24 locus.4330 0 4435644 T C -24 locus.4331 0 4492779 A G -24 locus.4332 0 4542556 G A -24 locus.4333 0 4674353 T C -24 locus.4334 0 4734623 C T -24 locus.4335 0 4766009 T C -24 locus.4336 0 4866988 C T -24 locus.4337 0 4936555 C A -24 locus.4338 0 4990613 A G -24 locus.4339 0 5039185 T C -24 locus.4340 0 5075204 G A -24 locus.4341 0 5176310 T C -24 locus.4342 0 5232180 G A -24 locus.4343 0 5384735 T C -24 locus.4344 0 5433186 A G -24 locus.4345 0 5485098 G T -24 locus.4346 0 5495363 A C -24 locus.4347 0 5593329 C T -24 locus.4348 0 5621749 G 0 -24 locus.4349 0 5726120 T 0 -24 locus.4350 0 5785403 A G -24 locus.4351 0 5874652 G A -24 locus.4352 0 5908734 G A -24 locus.4353 0 5951054 G A -24 locus.4354 0 5978910 A G -24 locus.4355 0 6001198 G T -24 locus.4356 0 6101314 T C -24 locus.4357 0 6155793 G 0 -24 locus.4358 0 6189670 A G -24 locus.4359 0 6222497 C A -24 locus.4360 0 6265369 G A -24 locus.4361 0 6405344 T C -24 locus.4362 0 6415384 T C -24 locus.4363 0 6434392 T C -24 locus.4364 0 6468168 C T -24 locus.4365 0 6526499 G A -24 locus.4366 0 6612546 T C -24 locus.4367 0 6647168 T C -24 locus.4368 0 6753316 C T -24 locus.4369 0 6783196 T C -24 locus.4370 0 6819203 A G -24 locus.4371 0 6891468 G A -24 locus.4372 0 6926756 A T -24 locus.4373 0 6976657 A G -24 locus.4374 0 7107585 A G -24 locus.4375 0 7213312 C T -24 locus.4376 0 7245176 T C -24 locus.4377 0 7279523 G A -24 locus.4378 0 7366298 A G -24 locus.4379 0 7454516 G A -24 locus.4380 0 7483090 G T -24 locus.4381 0 7564606 T G -24 locus.4382 0 7615311 G A -24 locus.4383 0 7667607 G A -24 locus.4384 0 7721963 G A -24 locus.4385 0 7796684 C T -24 locus.4386 0 7833106 C T -24 locus.4387 0 7862681 C T -24 locus.4388 0 7935697 A G -24 locus.4389 0 7967370 G A -24 locus.4390 0 8064215 C T -24 locus.4391 0 8113486 C T -24 locus.4392 0 8170749 C T -24 locus.4393 0 8224303 T C -24 locus.4394 0 8251305 T C -24 locus.4395 0 8314969 C T -24 locus.4396 0 8339627 A G -24 locus.4397 0 8379806 C T -24 locus.4398 0 8460459 T C -24 locus.4399 0 8489860 T C -24 locus.4400 0 8556294 G A -24 locus.4401 0 8579698 G T -24 locus.4402 0 8622723 G T -24 locus.4403 0 8673109 T C -24 locus.4404 0 8741291 T C -24 locus.4405 0 8842899 G A -24 locus.4406 0 8874963 C T -24 locus.4407 0 8960592 A G -24 locus.4408 0 9010958 C T -24 locus.4409 0 9054794 T C -24 locus.4410 0 9076208 C T -24 locus.4411 0 9101635 T C -24 locus.4412 0 9165564 T C -24 locus.4413 0 9191451 G 0 -24 locus.4414 0 9268996 C T -24 locus.4415 0 9299002 C T -24 locus.4416 0 9352754 T C -24 locus.4417 0 9399031 C T -24 locus.4418 0 9460076 C T -24 locus.4419 0 9658771 G A -24 locus.4420 0 9721533 G A -24 locus.4421 0 9865712 G A -24 locus.4422 0 9942134 G A -24 locus.4423 0 10130446 G A -24 locus.4424 0 10176168 C T -24 locus.4425 0 10208845 G A -24 locus.4426 0 10429322 A G -24 locus.4427 0 10471141 C T -24 locus.4428 0 10709974 C T -24 locus.4429 0 10802789 T C -24 locus.4430 0 10977878 T C -24 locus.4431 0 11007102 T C -24 locus.4432 0 11076801 C T -24 locus.4433 0 11127323 A G -24 locus.4434 0 11232313 G A -24 locus.4435 0 11326321 C T -24 locus.4436 0 11366060 T A -24 locus.4437 0 11451480 A G -24 locus.4438 0 11526475 G A -24 locus.4439 0 11611963 A G -24 locus.4440 0 11682465 G A -24 locus.4441 0 11828268 T C -24 locus.4442 0 11837275 T G -24 locus.4443 0 12036238 A G -24 locus.4444 0 12065734 G A -24 locus.4445 0 12129478 G A -24 locus.4446 0 12181694 C T -24 locus.4447 0 12335936 G A -24 locus.4448 0 12387404 G A -24 locus.4449 0 12496861 T G -24 locus.4450 0 12550566 C 0 -24 locus.4451 0 12558998 C T -24 locus.4452 0 12722014 A G -24 locus.4453 0 12817574 T C -24 locus.4454 0 12909856 G A -24 locus.4455 0 12952274 T C -24 locus.4456 0 12978326 A G -24 locus.4457 0 13170165 T C -24 locus.4458 0 13231049 G 0 -24 locus.4459 0 13299441 T G -24 locus.4460 0 13326931 T C -24 locus.4461 0 13558686 C T -24 locus.4462 0 13647199 G A -24 locus.4463 0 13702846 T C -24 locus.4464 0 13724802 A G -24 locus.4465 0 13761594 C A -24 locus.4466 0 13767641 T G -24 locus.4467 0 13900804 G A -24 locus.4468 0 13922554 T G -24 locus.4469 0 13980455 A G -24 locus.4470 0 14043458 C T -24 locus.4471 0 14091247 C T -24 locus.4472 0 14101008 T C -24 locus.4473 0 14275553 G A -24 locus.4474 0 14407738 T C -24 locus.4475 0 14492312 T C -24 locus.4476 0 14504777 C T -24 locus.4477 0 14573998 C T -24 locus.4478 0 14625661 T C -24 locus.4479 0 14654934 A G -24 locus.4480 0 14774974 C T -24 locus.4481 0 14838850 G A -24 locus.4482 0 14870639 T C -24 locus.4483 0 14945620 A G -24 locus.4484 0 15019403 A G -24 locus.4485 0 15078704 G A -24 locus.4486 0 15100676 T G -24 locus.4487 0 15151258 A G -24 locus.4488 0 15217815 G A -24 locus.4489 0 15234910 T G -24 locus.4490 0 15279664 T C -24 locus.4491 0 15324479 A G -24 locus.4492 0 15367865 C T -24 locus.4493 0 15510478 A G -24 locus.4494 0 15551549 C T -24 locus.4495 0 15589004 T C -24 locus.4496 0 15617705 T C -24 locus.4497 0 15637488 T C -24 locus.4498 0 15762894 G A -24 locus.4499 0 15821681 A G -24 locus.4500 0 15865169 T C -24 locus.4501 0 15893121 C T -24 locus.4502 0 16041579 C T -24 locus.4503 0 16077497 A G -24 locus.4504 0 16114681 C T -24 locus.4505 0 16147749 G T -24 locus.4506 0 16310285 A C -24 locus.4507 0 16351007 C T -24 locus.4508 0 16573702 G A -24 locus.4509 0 16686431 C 0 -24 locus.4510 0 16811910 C T -24 locus.4511 0 16892562 A C -24 locus.4512 0 16957079 C T -24 locus.4513 0 17040364 G A -24 locus.4514 0 17133716 C T -24 locus.4515 0 17159602 T C -24 locus.4516 0 17177139 G A -24 locus.4517 0 17253902 T C -24 locus.4518 0 17307132 C T -24 locus.4519 0 17438055 C T -24 locus.4520 0 17460873 T C -24 locus.4521 0 17514108 T C -24 locus.4522 0 17578852 T G -24 locus.4523 0 17642594 A G -24 locus.4524 0 17809880 A G -24 locus.4525 0 17848975 T C -24 locus.4526 0 17916525 C T -24 locus.4527 0 17996334 G C -24 locus.4528 0 18027756 G A -24 locus.4529 0 18035114 A G -24 locus.4530 0 18056244 A G -24 locus.4531 0 18135719 C T -24 locus.4532 0 18235931 T C -24 locus.4533 0 18272045 C T -24 locus.4534 0 18523650 A G -24 locus.4535 0 18591348 G A -24 locus.4536 0 18669354 T G -24 locus.4537 0 18697488 A G -24 locus.4538 0 18834056 C T -24 locus.4539 0 18875112 G A -24 locus.4540 0 18888717 A G -24 locus.4541 0 19034754 C T -24 locus.4542 0 19223435 G T -24 locus.4543 0 19247160 A G -24 locus.4544 0 19347886 A G -24 locus.4545 0 19357253 C T -24 locus.4546 0 19579841 T C -24 locus.4547 0 19683887 T C -24 locus.4548 0 19741398 A G -24 locus.4549 0 19819848 T C -24 locus.4550 0 19946691 T C -24 locus.4551 0 20005048 G A -24 locus.4552 0 20189283 G T -24 locus.4553 0 20395301 T C -24 locus.4554 0 20406106 C T -24 locus.4555 0 20442734 G T -24 locus.4556 0 20480133 A G -24 locus.4557 0 20513392 G A -24 locus.4558 0 20687733 A G -24 locus.4559 0 20734455 G A -24 locus.4560 0 20838669 G A -24 locus.4561 0 20909487 T C -24 locus.4562 0 20918106 G A -24 locus.4563 0 20978925 T C -24 locus.4564 0 21019195 C T -24 locus.4565 0 21176747 A C -24 locus.4566 0 21392558 G 0 -24 locus.4567 0 21460746 T G -24 locus.4568 0 21554660 T C -24 locus.4569 0 21581821 C T -24 locus.4570 0 21629724 A G -24 locus.4571 0 21762352 G A -24 locus.4572 0 21836004 G A -24 locus.4573 0 21878624 G A -24 locus.4574 0 21910840 C T -24 locus.4575 0 22222030 C T -24 locus.4576 0 22329952 A G -24 locus.4577 0 22377381 C A -24 locus.4578 0 22419138 G A -24 locus.4579 0 22479026 C A -24 locus.4580 0 22486632 G C -24 locus.4581 0 22561935 G A -24 locus.4582 0 22600531 C T -24 locus.4583 0 22769125 G A -24 locus.4584 0 22855134 C 0 -24 locus.4585 0 22948393 C T -24 locus.4586 0 23002452 C T -24 locus.4587 0 23184425 C T -24 locus.4588 0 23209530 C T -24 locus.4589 0 23312288 T C -24 locus.4590 0 23418622 A G -24 locus.4591 0 23497703 C T -24 locus.4592 0 23509895 C T -24 locus.4593 0 23664552 A G -24 locus.4594 0 23689555 A G -24 locus.4595 0 23828331 G A -24 locus.4596 0 24040495 T C -24 locus.4597 0 24060526 T G -24 locus.4598 0 24062352 G A -24 locus.4599 0 24106007 C T -24 locus.4600 0 24148552 G A -24 locus.4601 0 24190286 A G -24 locus.4602 0 24314975 T G -24 locus.4603 0 24472703 T C -24 locus.4604 0 24493823 T C -24 locus.4605 0 24591560 C T -24 locus.4606 0 24629625 G A -24 locus.4607 0 24690825 C T -24 locus.4608 0 24740555 G A -24 locus.4609 0 24776080 C T -24 locus.4610 0 24846522 G A -24 locus.4611 0 24859938 T C -24 locus.4612 0 24925070 A G -24 locus.4613 0 24989534 C A -24 locus.4614 0 25017904 C T -24 locus.4615 0 25107237 C T -24 locus.4616 0 25240220 C T -24 locus.4617 0 25421718 G A -24 locus.4618 0 25474118 C T -24 locus.4619 0 25523363 C T -24 locus.4620 0 25614223 T C -24 locus.4621 0 25638494 T C -24 locus.4622 0 25700691 G C -24 locus.4623 0 25710129 C T -24 locus.4624 0 25809786 G 0 -24 locus.4625 0 25884487 A G -24 locus.4626 0 25909650 A G -24 locus.4627 0 25961188 A G -24 locus.4628 0 26018761 G A -24 locus.4629 0 26068027 G A -24 locus.4630 0 26142394 A G -24 locus.4631 0 26210836 A C -24 locus.4632 0 26493858 C T -24 locus.4633 0 26558782 T C -24 locus.4634 0 26681408 A G -24 locus.4635 0 26759068 G A -24 locus.4636 0 26824139 G T -24 locus.4637 0 27091483 A C -24 locus.4638 0 27159621 A 0 -24 locus.4639 0 27416389 A G -24 locus.4640 0 27419408 G A -24 locus.4641 0 27526097 T C -24 locus.4642 0 27533351 A G -24 locus.4643 0 27613295 G A -24 locus.4644 0 27620251 A G -24 locus.4645 0 27680635 T C -24 locus.4646 0 27739247 G A -24 locus.4647 0 27928201 G T -24 locus.4648 0 28037384 G C -24 locus.4649 0 28078898 A G -24 locus.4650 0 28178738 C T -24 locus.4651 0 28198419 A C -24 locus.4652 0 28227369 A G -24 locus.4653 0 28291169 A G -24 locus.4654 0 28348997 T G -24 locus.4655 0 28405516 A G -24 locus.4656 0 28424137 G 0 -24 locus.4657 0 28474045 T C -24 locus.4658 0 28511321 C T -24 locus.4659 0 28591252 G A -24 locus.4660 0 28644720 T C -24 locus.4661 0 28677855 A G -24 locus.4662 0 28745899 T C -24 locus.4663 0 28840429 C T -24 locus.4664 0 28877449 G A -24 locus.4665 0 29155367 A G -24 locus.4666 0 29197813 C T -24 locus.4667 0 29314003 C T -24 locus.4668 0 29343449 A C -24 locus.4669 0 29375887 T C -24 locus.4670 0 29475441 T C -24 locus.4671 0 29487180 T C -24 locus.4672 0 29525075 C T -24 locus.4673 0 29566674 A G -24 locus.4674 0 29571057 T G -24 locus.4675 0 29652597 C T -24 locus.4676 0 29910952 C T -24 locus.4677 0 29927667 G A -24 locus.4678 0 29970616 A G -24 locus.4679 0 30012896 C T -24 locus.4680 0 30083398 C T -24 locus.4681 0 30103953 G T -24 locus.4682 0 30202253 G A -24 locus.4683 0 30412150 G A -24 locus.4684 0 30456600 G A -24 locus.4685 0 30463028 T G -24 locus.4686 0 30478163 C T -24 locus.4687 0 30690033 A G -24 locus.4688 0 30808769 A G -24 locus.4689 0 30843847 A G -24 locus.4690 0 30875675 C T -24 locus.4691 0 30939595 A T -24 locus.4692 0 30998948 T 0 -24 locus.4693 0 31093416 T C -24 locus.4694 0 31117811 A G -24 locus.4695 0 31215558 T C -24 locus.4696 0 31229367 A G -24 locus.4697 0 31309854 G A -24 locus.4698 0 31359697 C T -24 locus.4699 0 31556086 A G -24 locus.4700 0 31568788 T C -24 locus.4701 0 31774063 G A -24 locus.4702 0 31821433 A G -24 locus.4703 0 31899729 A G -24 locus.4704 0 31943864 G A -24 locus.4705 0 31947993 G A -24 locus.4706 0 31953567 C T -24 locus.4707 0 32103135 G A -24 locus.4708 0 32163368 G A -24 locus.4709 0 32221432 A G -24 locus.4710 0 32236767 A C -24 locus.4711 0 32294099 C T -24 locus.4712 0 32349389 G A -24 locus.4713 0 32354842 A G -24 locus.4714 0 32390507 T C -24 locus.4715 0 32495625 C T -24 locus.4716 0 32552648 A G -24 locus.4717 0 32598869 C T -24 locus.4718 0 32623905 G A -24 locus.4719 0 32681863 C T -24 locus.4720 0 32800970 G A -24 locus.4721 0 32827227 C T -24 locus.4722 0 32984246 A G -24 locus.4723 0 33056732 G A -24 locus.4724 0 33159082 C T -24 locus.4725 0 33172658 T C -24 locus.4726 0 33225361 C T -24 locus.4727 0 33313461 A G -24 locus.4728 0 33343694 A G -24 locus.4729 0 33397677 C T -24 locus.4730 0 33413892 C T -24 locus.4731 0 33438700 C T -24 locus.4732 0 33483609 G A -24 locus.4733 0 33503397 A G -24 locus.4734 0 33631100 A G -24 locus.4735 0 33643979 T C -24 locus.4736 0 33692582 C T -24 locus.4737 0 33740824 C T -24 locus.4738 0 33780315 T C -24 locus.4739 0 33798780 T C -24 locus.4740 0 33879086 A G -24 locus.4741 0 33934482 A C -24 locus.4742 0 33953578 T C -24 locus.4743 0 33961710 T C -24 locus.4744 0 34039464 A G -24 locus.4745 0 34113252 A G -24 locus.4746 0 34176391 G A -24 locus.4747 0 34225118 T C -24 locus.4748 0 34312321 A C -24 locus.4749 0 34345815 C T -24 locus.4750 0 34460565 G A -24 locus.4751 0 34553003 C T -24 locus.4752 0 34607110 G A -24 locus.4753 0 34666650 G A -24 locus.4754 0 34985988 G A -24 locus.4755 0 35106020 C G -24 locus.4756 0 35216176 C 0 -24 locus.4757 0 35272492 T C -24 locus.4758 0 35459203 C A -24 locus.4759 0 35558717 A G -24 locus.4760 0 35582464 G A -24 locus.4761 0 35585230 A G -24 locus.4762 0 35833919 C T -24 locus.4763 0 35878194 G A -24 locus.4764 0 35991517 G A -24 locus.4765 0 36036418 G A -24 locus.4766 0 36076909 C T -24 locus.4767 0 36160755 A G -24 locus.4768 0 36250095 C T -24 locus.4769 0 36394143 A G -24 locus.4770 0 36425274 G A -24 locus.4771 0 36791669 C A -24 locus.4772 0 36938439 G A -24 locus.4773 0 36962278 A G -24 locus.4774 0 37015852 G A -24 locus.4775 0 37103553 C T -24 locus.4776 0 37161456 T C -24 locus.4777 0 37202588 G A -24 locus.4778 0 37258914 G T -24 locus.4779 0 37267443 T C -24 locus.4780 0 37284788 C T -24 locus.4781 0 37349126 G A -24 locus.4782 0 37404374 A G -24 locus.4783 0 37523464 T C -24 locus.4784 0 37613659 A C -24 locus.4785 0 37661519 C T -24 locus.4786 0 37690077 C A -24 locus.4787 0 37716648 C T -24 locus.4788 0 37753985 G A -24 locus.4789 0 37808477 T C -24 locus.4790 0 37923367 A G -24 locus.4791 0 37965791 G A -24 locus.4792 0 38056567 T C -24 locus.4793 0 38125663 T C -24 locus.4794 0 38162634 T C -24 locus.4795 0 38184103 G C -24 locus.4796 0 38268540 A G -24 locus.4797 0 38357380 A C -24 locus.4798 0 38459023 A G -24 locus.4799 0 38615161 G A -24 locus.4800 0 38671665 T C -24 locus.4801 0 38763760 A G -24 locus.4802 0 38840214 T C -24 locus.4803 0 38916880 T C -24 locus.4804 0 38974331 A G -24 locus.4805 0 38985778 C T -24 locus.4806 0 39101148 T C -24 locus.4807 0 39137763 C 0 -24 locus.4808 0 39214598 T C -24 locus.4809 0 39246209 T C -24 locus.4810 0 39300789 T C -24 locus.4811 0 39432711 G A -24 locus.4812 0 39537744 T C -24 locus.4813 0 39603557 G 0 -24 locus.4814 0 39623269 A G -24 locus.4815 0 39651791 G A -24 locus.4816 0 39711452 G A -24 locus.4817 0 39726323 T C -24 locus.4818 0 39735778 G A -24 locus.4819 0 39950630 C T -24 locus.4820 0 39996737 G T -24 locus.4821 0 40031027 T C -24 locus.4822 0 40075324 A G -24 locus.4823 0 40193947 C T -24 locus.4824 0 40256403 A G -24 locus.4825 0 40336394 T C -24 locus.4826 0 40371552 G A -24 locus.4827 0 40395382 T C -24 locus.4828 0 40431914 G A -24 locus.4829 0 40501449 G A -24 locus.4830 0 40717526 A G -24 locus.4831 0 40762840 G A -24 locus.4832 0 40817958 G A -24 locus.4833 0 40882153 T C -24 locus.4834 0 40933388 G A -24 locus.4835 0 41008043 C T -24 locus.4836 0 41034970 G A -24 locus.4837 0 41143981 A G -24 locus.4838 0 41295400 T C -24 locus.4839 0 41600515 T C -24 locus.4840 0 41924374 C A -24 locus.4841 0 42027686 T C diff --git a/inst/extdata/sheep.fam b/inst/extdata/sheep.fam deleted file mode 100644 index 9ed2a16b..00000000 --- a/inst/extdata/sheep.fam +++ /dev/null @@ -1,100 +0,0 @@ -Jacobs H114 0 0 2 0 -Jacobs H115 0 0 2 0 -Jacobs H116 0 0 2 0 -Jacobs H26 0 0 2 0 -Jacobs H32 0 0 2 0 -Navajo-Churro H38 0 0 2 0 -Navajo-Churro H44 0 0 1 0 -Navajo-Churro H56 0 0 2 0 -Jacobs H50 0 0 2 0 -Jacobs H27 0 0 2 0 -Navajo-Churro H33 0 0 2 0 -Navajo-Churro H39 0 0 2 0 -Navajo-Churro H45 0 0 2 0 -Jacobs H51 0 0 2 0 -Jacobs H57 0 0 2 0 -Navajo-Churro H28 0 0 2 0 -Navajo-Churro H34 0 0 2 0 -Jacobs H40 0 0 2 0 -Jacobs H46 0 0 2 0 -Navajo-Churro H52 0 0 2 0 -Navajo-Churro H58 0 0 2 0 -Navajo-Churro H29 0 0 2 0 -Jacobs H35 0 0 2 0 -Navajo-Churro H41 0 0 2 0 -Jacobs H47 0 0 2 0 -Navajo-Churro H53 0 0 2 0 -Jacobs H59 0 0 2 0 -Navajo-Churro H30 0 0 2 0 -Navajo-Churro H42 0 0 2 0 -Jacobs H48 0 0 2 0 -Jacobs H54 0 0 2 0 -Navajo-Churro H60 0 0 1 0 -Navajo-Churro H31 0 0 2 0 -Navajo-Churro H37 0 0 2 0 -Navajo-Churro H43 0 0 2 0 -Navajo-Churro H49 0 0 2 0 -Jacobs H55 0 0 1 0 -Navajo-Churro H1 0 0 2 0 -Navajo-Churro H9 0 0 1 0 -Jacobs H17 0 0 2 0 -Navajo-Churro H2 0 0 2 0 -Navajo-Churro H10 0 0 1 0 -Navajo-Churro H19 0 0 2 0 -Navajo-Churro H3 0 0 2 0 -Navajo-Churro H11 0 0 1 0 -Jacobs H20 0 0 2 0 -Navajo-Churro H4 0 0 2 0 -Navajo-Churro H12 0 0 2 0 -Jacobs H21 0 0 2 0 -Jacobs H13 0 0 2 0 -Jacobs H22 0 0 2 0 -Navajo-Churro H6 0 0 2 0 -Navajo-Churro H14 0 0 2 0 -Jacobs H7 0 0 2 0 -Navajo-Churro H15 0 0 2 0 -Navajo-Churro H24 0 0 2 0 -Navajo-Churro H8 0 0 2 0 -Jacobs H16 0 0 2 0 -Navajo-Churro H25 0 0 2 0 -Jacobs H64 0 0 1 0 -Jacobs H62 0 0 2 0 -Navajo-Churro H63 0 0 2 0 -Jacobs H118 0 0 2 0 -Jacobs H119 0 0 1 0 -Jacobs H120 0 0 1 0 -Jacobs H121 0 0 2 0 -Jacobs H122 0 0 2 0 -Jacobs H123 0 0 1 0 -Jacobs H124 0 0 2 0 -Jacobs H125 0 0 2 0 -Jacobs H126 0 0 2 0 -Jacobs H127 0 0 2 0 -Jacobs H128 0 0 1 0 -Jacobs H129 0 0 1 0 -Jacobs H130 0 0 2 0 -Jacobs H131 0 0 2 0 -Jacobs H132 0 0 2 0 -Jacobs H133 0 0 2 0 -Jacobs H134 0 0 1 0 -Jacobs H135 0 0 1 0 -Jacobs H136 0 0 1 0 -Jacobs H137 0 0 2 0 -Jacobs H138 0 0 2 0 -Jacobs H139 0 0 2 0 -Jacobs H140 0 0 1 0 -Jacobs H141 0 0 2 0 -Jacobs H142 0 0 2 0 -Jacobs H143 0 0 2 0 -Jacobs H144 0 0 2 0 -Jacobs H145 0 0 2 0 -Jacobs H146 0 0 1 0 -Jacobs H147 0 0 1 0 -Jacobs H148 0 0 2 0 -Jacobs H149 0 0 1 0 -Jacobs H150 0 0 1 0 -Jacobs H151 0 0 2 0 -Jacobs H152 0 0 2 0 -Jacobs H153 0 0 1 0 -Jacobs H154 0 0 2 0 -Jacobs H155 0 0 2 0 diff --git a/man/augment_loci.Rd b/man/augment_loci.Rd index 9339a419..b1254818 100644 --- a/man/augment_loci.Rd +++ b/man/augment_loci.Rd @@ -7,14 +7,14 @@ augment_loci(x, data, ...) } \arguments{ -\item{x}{A \code{gt_pca} object returned by one of the \verb{gt_pca_*} functions.} +\item{x}{An object returned by one of the \code{gt_} functions (e.g. \code{\link[=gt_pca]{gt_pca()}}).} \item{data}{the \code{gen_tibble} used to run the PCA.} -\item{...}{Additional paramters passed to the individual methods.} +\item{...}{Additional parameters passed to the individual methods.} } \value{ -A \link{gen_tibble} with additiona columns added to the loci tibble (accessible +A \link{gen_tibble} with additional columns added to the loci tibble (accessible with \code{\link[=show_loci]{show_loci()}}. If \code{data} is missing, a tibble of the information, with a column \code{.rownames} giving the loci names. } diff --git a/man/autoplot.qc_report_indiv.Rd b/man/autoplot.qc_report_indiv.Rd new file mode 100644 index 00000000..e87735e8 --- /dev/null +++ b/man/autoplot.qc_report_indiv.Rd @@ -0,0 +1,42 @@ +% Generated by roxygen2: do not edit by hand +% Please edit documentation in R/qc_report_indiv.R +\name{autoplot.qc_report_indiv} +\alias{autoplot.qc_report_indiv} +\title{Autoplots for \code{qc_report_indiv} objects} +\usage{ +\method{autoplot}{qc_report_indiv}( + object, + type = c("scatter", "relatedness"), + miss_threshold = NULL, + kings_threshold = kings_threshold, + ... +) +} +\arguments{ +\item{object}{an object of class \code{qc_report_indiv}} + +\item{type}{the type of plot (\code{scatter})} + +\item{miss_threshold}{a threshold for the accepted rate of missingness within +individuals} + +\item{kings_threshold}{an optional numeric, a threshold of relatedness for the sample} + +\item{...}{not currently used.} +} +\value{ +a \code{ggplot2} object +} +\description{ +For \code{qc_report_indiv}, the following types of plots are available: +\itemize{ +\item \code{scatter}: a plot of missingness and observed heterozygosity within +individuals. +\item \code{relatedness}: a histogram of paired kinship coefficients +} +} +\details{ +\code{autoplot} produces simple plots to quickly inspect an object. They are +not customisable; we recommend that you use \code{ggplot2} to produce publication +ready plots. +} diff --git a/man/autoplot.qc_report_loci.Rd b/man/autoplot.qc_report_loci.Rd new file mode 100644 index 00000000..66f90c9a --- /dev/null +++ b/man/autoplot.qc_report_loci.Rd @@ -0,0 +1,58 @@ +% Generated by roxygen2: do not edit by hand +% Please edit documentation in R/qc_report_loci.R +\name{autoplot.qc_report_loci} +\alias{autoplot.qc_report_loci} +\title{Autoplots for \code{qc_report_loci} objects} +\usage{ +\method{autoplot}{qc_report_loci}( + object, + type = c("overview", "all", "missing", "missing low maf", "missing high maf", "maf", + "hwe", "significant hwe"), + maf_threshold = NULL, + miss_threshold = NULL, + hwe_p = NULL, + ... +) +} +\arguments{ +\item{object}{an object of class \code{qc_report_loci}} + +\item{type}{the type of plot (one of \code{overview}, \code{all}, \code{missing}, +\verb{missing low maf}, \verb{missing high maf}, \code{maf}, \code{hwe}, and \verb{significant hwe})} + +\item{maf_threshold}{a threshold for the accepted rate of minor allele +frequency of loci} + +\item{miss_threshold}{a threshold for the accepted rate of missingness per +loci} + +\item{hwe_p}{a threshold of significance for Hardy-Weinberg exact p-values} + +\item{...}{not currently used.} +} +\value{ +a \code{ggplot2} object +} +\description{ +For \code{qc_report_loci}, the following types of plots are available: +\itemize{ +\item \code{overview}: an UpSet plot, giving counts of snps over the threshold for +missingness, minor allele frequency, and Hardy-Weinberg equilibrium P-value, +and visualising the interaction between these +\item \code{all}: a four panel plot, containing \verb{missing high maf}, \verb{missing low maf}, +\code{hwe}, and \verb{significant hwe} plots +\item \code{missing}: a histogram of proportion of missing data +\item \verb{missing low maf}: a histogram of the proportion of missing data for +snps with low minor allele freqency +\item \verb{missing high maf}:a histogram of the proportion of missing data for +snps with high minor allele freqency +\item \code{maf}: a histogram of minor allele frequency +\item \code{hwe}: a histogram of HWE exact test p-values +\item \verb{significant hwe}: a histogram of significant HWE exact test p-values +} +} +\details{ +\code{autoplot} produces simple plots to quickly inspect an object. They are +not customisable; we recommend that you use \code{ggplot2} to produce publication +ready plots. +} diff --git a/man/autoplot_gt_cluster_pca.Rd b/man/autoplot_gt_cluster_pca.Rd new file mode 100644 index 00000000..6a6e103c --- /dev/null +++ b/man/autoplot_gt_cluster_pca.Rd @@ -0,0 +1,34 @@ +% Generated by roxygen2: do not edit by hand +% Please edit documentation in R/gt_cluster_pca.R +\name{autoplot.gt_cluster_pca} +\alias{autoplot.gt_cluster_pca} +\title{Autoplots for \code{gt_cluster_pca} objects} +\usage{ +\method{autoplot}{gt_cluster_pca}(object, metric = c("BIC", "AIC", "WSS"), ...) +} +\arguments{ +\item{object}{an object of class \code{gt_dapc}} + +\item{metric}{the metric to plot on the y axies, one of 'BIC', 'AIC', or +'WSS' (with sum of squares)} + +\item{...}{not currently used.} +} +\value{ +a \code{ggplot2} object +} +\description{ +For \code{gt_cluster_pca}, \code{autoplot} produces a plot of a metric of choice ('BIC', +'AIC' or 'WSS') against the number of clusters (\emph{k}). This plot is can be +used to infer the best value of \emph{k}, which corresponds to the smallest +value of the metric (the minimum in an 'elbow' shaped curve). In some cases, +there is not 'elbow' and the metric keeps decreasing with increasing \emph{k}; +in such cases, it is customary to choose the value of \emph{k} at which the +decrease in the metric reaches as plateau. For a programmatic way of choosing +\emph{k}, use \code{\link[=gt_cluster_pca_best_k]{gt_cluster_pca_best_k()}}. +} +\details{ +\code{autoplot} produces simple plots to quickly inspect an object. They are +not customisable; we recommend that you use \code{ggplot2} to produce publication +ready plots. +} diff --git a/man/autoplot_gt_dapc.Rd b/man/autoplot_gt_dapc.Rd new file mode 100644 index 00000000..eaaad633 --- /dev/null +++ b/man/autoplot_gt_dapc.Rd @@ -0,0 +1,50 @@ +% Generated by roxygen2: do not edit by hand +% Please edit documentation in R/autoplot_gt_dapc.R +\name{autoplot.gt_dapc} +\alias{autoplot.gt_dapc} +\title{Autoplots for \code{gt_dapc} objects} +\usage{ +\method{autoplot}{gt_dapc}( + object, + type = c("screeplot", "scores", "loadings", "components"), + ld = NULL, + group = NULL, + n_col = 1, + ... +) +} +\arguments{ +\item{object}{an object of class \code{gt_dapc}} + +\item{type}{the type of plot (one of "screeplot", "scores" and "loadings")} + +\item{ld}{the principal components to be plotted: for scores, a pair of values +e.g. c(1,2); for \code{loadings} either one or more values.} + +\item{group}{a vector of group memberships to order the individuals +in "components" plot. If NULL, the +clusters used for the DAPC will be used.} + +\item{n_col}{for \code{loadings} plots, if multiple LD axis are plotted, how many +columns should be used.} + +\item{...}{not currently used.} +} +\value{ +a \code{ggplot2} object +} +\description{ +For \code{gt_dapc}, the following types of plots are available: +\itemize{ +\item \code{screeplot}: a plot of the eigenvalues of the discriminant axes +\item \code{scores} a scatterplot of the scores of each individual on two discriminant +axes (defined by \code{ld}) +\item \code{loadings} a plot of loadings of all loci for a discriminant axis (chosen with \code{ld}) +\item \code{components} a bar plot showing the probability of assignment to each cluster +} +} +\details{ +\code{autoplot} produces simple plots to quickly inspect an object. They are +not customisable; we recommend that you use \code{ggplot2} to produce publication +ready plots. +} diff --git a/man/autoplot_gt_pca.Rd b/man/autoplot_gt_pca.Rd index 6041e9f5..927624d4 100644 --- a/man/autoplot_gt_pca.Rd +++ b/man/autoplot_gt_pca.Rd @@ -1,65 +1,26 @@ % Generated by roxygen2: do not edit by hand -% Please edit documentation in R/autoplot_gt_dapc.R, R/autoplot_gt_pca.R, -% R/gt_pca_find_cluster.R -\name{autoplot.gt_dapc} -\alias{autoplot.gt_dapc} +% Please edit documentation in R/autoplot_gt_pca.R +\name{autoplot_gt_pca} +\alias{autoplot_gt_pca} \alias{autoplot.gt_pca} -\alias{autoplot.gt_pca_clust} -\title{Autoplots for \code{gt_dapc} objects} +\title{Autoplots for \code{gt_pca} objects} \usage{ -\method{autoplot}{gt_dapc}( - object, - type = c("screeplot", "scores", "loadings", "components"), - ld = NULL, - group = NULL, - n_col = 1, - ... -) - \method{autoplot}{gt_pca}(object, type = c("screeplot", "scores", "loadings"), k = NULL, ...) - -\method{autoplot}{gt_pca_clust}(object, metric = c("BIC", "AIC", "WSS"), ...) } \arguments{ -\item{object}{an object of class \code{gt_dapc}} +\item{object}{an object of class \code{gt_pca}} \item{type}{the type of plot (one of "screeplot", "scores" and "loadings")} -\item{ld}{the principal components to be plotted: for scores, a pair of values -e.g. c(1,2); for \code{loadings} either one or more values.} - -\item{group}{a vector of group memberships to order the individuals -in "components" plot. If NULL, the -clusters used for the DAPC will be used.} - -\item{n_col}{for \code{loadings} plots, if multiple LD axis are plotted, how many -columns should be used.} - -\item{...}{not currently used.} - \item{k}{the principal components to be plotted: for scores, a pair of values e.g. c(1,2); for \code{loadings} either one or more values.} -\item{metric}{the metric to plot on the y axies, one of 'BIC', 'AIC', or -'WSS' (with sum of squares)} +\item{...}{not currently used.} } \value{ -a \code{ggplot2} object - -a \code{ggplot2} object - a \code{ggplot2} object } \description{ -For \code{gt_dapc}, the following types of plots are available: -\itemize{ -\item \code{screeplot}: a plot of the eigenvalues of the discriminant axes -\item \code{scores} a scatterplot of the scores of each individual on two discriminant -axes (defined by \code{ld}) -\item \code{loadings} a plot of loadings of all loci for a discriminant axis (chosen with \code{ld}) -\item \code{components} a bar plot showing the probability of assignment to each cluster -} - For \code{gt_pca}, the following types of plots are available: \itemize{ \item \code{screeplot}: a plot of the eigenvalues of the principal components (currently @@ -68,25 +29,8 @@ it plots the singular value) components (defined by \code{pc}) \item \code{loadings} a plot of loadings of all loci for a given component (chosen with \code{pc}) } - -For \code{gt_pca_clust}, \code{autoplot} produces a plot of a metric of choice ('BIC', -'AIC' or 'WSS') against the number of clusters (\emph{k}). This plot is can be -used to infer the best value of \emph{k}, which corresponds to the smallest -value of the metric (the minimum in an 'elbow' shaped curve). In some cases, -there is not 'elbow' and the metric keeps decreasing with increasing \emph{k}; -in such cases, it is customary to choose the value of \emph{k} at which the -decrease in the metric reaches as plateau. For a programmatic way of choosing -\emph{k}, use \code{\link[=gt_pca_clust_best_k]{gt_pca_clust_best_k()}}. } \details{ -\code{autoplot} produces simple plots to quickly inspect an object. They are -not customisable; we recommend that you use \code{ggplot2} to produce publication -ready plots. - -\code{autoplot} produces simple plots to quickly inspect an object. They are -not customisable; we recommend that you use \code{ggplot2} to produce publication -ready plots. - \code{autoplot} produces simple plots to quickly inspect an object. They are not customisable; we recommend that you use \code{ggplot2} to produce publication ready plots. diff --git a/man/filter_high_relatedness.Rd b/man/filter_high_relatedness.Rd new file mode 100644 index 00000000..c9e29afd --- /dev/null +++ b/man/filter_high_relatedness.Rd @@ -0,0 +1,35 @@ +% Generated by roxygen2: do not edit by hand +% Please edit documentation in R/filter_high_relatedness.R +\name{filter_high_relatedness} +\alias{filter_high_relatedness} +\title{Filter individuals based on a relationship threshold} +\usage{ +filter_high_relatedness( + matrix, + .x = NULL, + kings_threshold = NULL, + verbose = FALSE +) +} +\arguments{ +\item{matrix}{a square symmetric matrix of individuals containing relationship coefficients} + +\item{.x}{a \code{\link{gen_tibble}} object} + +\item{kings_threshold}{a threshold over which} + +\item{verbose}{boolean whether to report to screen} +} +\value{ +a list where '1' is individual ID's to retain, '2' +is individual ID's to remove, and '3' is a boolean where individuals to keep +are TRUE and individuals to remove are FALSE +} +\description{ +This function takes a matrix of x by y individuals containing relatedness +coefficients and returns the maximum set of individuals that contains no +relationships above the given threshold. +} +\details{ +TODO this function needs a test +} diff --git a/man/gen_tibble.Rd b/man/gen_tibble.Rd index 333bc2e7..66afdb1f 100644 --- a/man/gen_tibble.Rd +++ b/man/gen_tibble.Rd @@ -38,7 +38,9 @@ gen_tibble( \arguments{ \item{x}{can be: \itemize{ -\item a string giving the path to a plink BED file, or a \code{\link[bigsnpr:bigSNP-class]{bigsnpr::bigSNP}} +\item a string giving the path to a PLINK BED or PED file. The correspective +BIM and FAM fiel for the BED, or MAP for PED are expected to be in the same +directory and have the same file name. \item a string giving the path to a RDS file storing a \code{bigSNP} object from the \code{bigsnpr} package (usually created with \code{\link[bigsnpr:snp_readBed]{bigsnpr::snp_readBed()}}) \item a string giving the path to a vcf file. Note that we currently read the whole @@ -56,7 +58,7 @@ passed to \code{\link[vcfR:io_vcfR]{vcfR::read.vcfR()}}. Otherwise, unused.} \item{missing_alleles}{a vector of values in the BIM file/loci dataframe that indicate a missing value for the allele value (e.g. when we have a monomorphic -locus with only one allele). It defalts to '0' and '.' (the same as PLINK 1.9).} +locus with only one allele). It defaults to '0' and '.' (the same as PLINK 1.9).} \item{backingfile}{the path, including the file name without extension, for backing files used to store the data (they will be given a .bk diff --git a/man/gt_as_genind.Rd b/man/gt_as_genind.Rd new file mode 100644 index 00000000..b6849e85 --- /dev/null +++ b/man/gt_as_genind.Rd @@ -0,0 +1,17 @@ +% Generated by roxygen2: do not edit by hand +% Please edit documentation in R/gt_as_genind.R +\name{gt_as_genind} +\alias{gt_as_genind} +\title{Convert a \code{gen_tibble} to a \code{genind} object from \code{adegenet}} +\usage{ +gt_as_genind(x) +} +\arguments{ +\item{x}{a \code{\link{gen_tibble}}, with population coded as 'population'} +} +\value{ +a \code{genind} object +} +\description{ +This function converts a \code{gen_tibble} to a \code{genind} object from \code{adegenet} +} diff --git a/man/gt_as_genlight.Rd b/man/gt_as_genlight.Rd new file mode 100644 index 00000000..07d4bb79 --- /dev/null +++ b/man/gt_as_genlight.Rd @@ -0,0 +1,17 @@ +% Generated by roxygen2: do not edit by hand +% Please edit documentation in R/gt_as_genlight.R +\name{gt_as_genlight} +\alias{gt_as_genlight} +\title{Convert a \code{gen_tibble} to a \code{genlight} object from \code{adegenet}} +\usage{ +gt_as_genlight(x) +} +\arguments{ +\item{x}{a \code{\link{gen_tibble}}, with population coded as 'population'} +} +\value{ +a \code{genlight} object +} +\description{ +This function converts a \code{gen_tibble} to a \code{genlight} object from \code{adegenet} +} diff --git a/man/gt_write_lea_geno.Rd b/man/gt_as_geno_lea.Rd similarity index 56% rename from man/gt_write_lea_geno.Rd rename to man/gt_as_geno_lea.Rd index 5600b925..d5b7eb64 100644 --- a/man/gt_write_lea_geno.Rd +++ b/man/gt_as_geno_lea.Rd @@ -1,10 +1,10 @@ % Generated by roxygen2: do not edit by hand -% Please edit documentation in R/gt_write_lea_geno.R -\name{gt_write_lea_geno} -\alias{gt_write_lea_geno} -\title{Write a geno file for sNMF from the LEA package} +% Please edit documentation in R/gt_as_geno_lea.R +\name{gt_as_geno_lea} +\alias{gt_as_geno_lea} +\title{Convert a \code{gentibble} to a .geno file for sNMF from the LEA package} \usage{ -gt_write_lea_geno(x, file = NULL) +gt_as_geno_lea(x, file = NULL) } \arguments{ \item{x}{a \code{\link{gen_tibble}}} @@ -16,7 +16,7 @@ location of the backing files.} the path of the .geno file } \description{ -This function writes a geno file fom a \code{\link{gen_tibble}}. Unless a file path is given, +This function writes a .geno file fom a \code{\link{gen_tibble}}. Unless a file path is given, a file with suffix .geno is written in the same location as the .rds and .bk files that underpin the \code{\link{gen_tibble}}. } diff --git a/man/gt_as_hierfstat.Rd b/man/gt_as_hierfstat.Rd new file mode 100644 index 00000000..bd189f8e --- /dev/null +++ b/man/gt_as_hierfstat.Rd @@ -0,0 +1,19 @@ +% Generated by roxygen2: do not edit by hand +% Please edit documentation in R/gt_as_hierfstat.R +\name{gt_as_hierfstat} +\alias{gt_as_hierfstat} +\title{Convert a \code{gen_tibble} to a data.frame compatible with \code{hierfstat}} +\usage{ +gt_as_hierfstat(x) +} +\arguments{ +\item{x}{a \code{\link{gen_tibble}}, with population coded as 'population'} +} +\value{ +a data.frame with a column 'pop' and further column representing +the genotypes (with alleles recoded as 1 and 2) +} +\description{ +This function converts a \code{gen_tibble} to a data.frame formatted +to be used by \code{hierfstat} functions. +} diff --git a/man/gt_write_plink.Rd b/man/gt_as_plink.Rd similarity index 75% rename from man/gt_write_plink.Rd rename to man/gt_as_plink.Rd index 962aed3b..f2665bcf 100644 --- a/man/gt_write_plink.Rd +++ b/man/gt_as_plink.Rd @@ -1,10 +1,10 @@ % Generated by roxygen2: do not edit by hand -% Please edit documentation in R/gt_write_plink.R -\name{gt_write_plink} -\alias{gt_write_plink} +% Please edit documentation in R/gt_as_plink.R +\name{gt_as_plink} +\alias{gt_as_plink} \title{Export a \code{gen_tibble} object to PLINK bed format} \usage{ -gt_write_plink(x, bedfile = NULL, overwrite = TRUE) +gt_as_plink(x, bedfile = NULL, overwrite = TRUE) } \arguments{ \item{x}{a \code{\link{gen_tibble}} object} diff --git a/man/gt_pca_find_clusters.Rd b/man/gt_cluster_pca.Rd similarity index 88% rename from man/gt_pca_find_clusters.Rd rename to man/gt_cluster_pca.Rd index 200a1818..c5982f9d 100644 --- a/man/gt_pca_find_clusters.Rd +++ b/man/gt_cluster_pca.Rd @@ -1,10 +1,10 @@ % Generated by roxygen2: do not edit by hand -% Please edit documentation in R/gt_pca_find_cluster.R -\name{gt_pca_find_clusters} -\alias{gt_pca_find_clusters} +% Please edit documentation in R/gt_cluster_pca.R +\name{gt_cluster_pca} +\alias{gt_cluster_pca} \title{Run K-clustering on principal components} \usage{ -gt_pca_find_clusters( +gt_cluster_pca( x = NULL, n_pca = NULL, k_clusters = c(1, round(nrow(x$u)/10)), @@ -33,7 +33,7 @@ it will use 1 to the number of pca components divided by 10 (a reasonable guess) screen (defaults to FALSE)} } \value{ -a \code{gt_pca_clust} object, which is a subclass of \code{gt_pca} with +a \code{gt_cluster_pca} object, which is a subclass of \code{gt_pca} with an additional element 'cluster', a list with elements: \itemize{ \item 'method' the clustering method (either kmeans or ward) @@ -53,7 +53,7 @@ increasing number of clusters (k), after transforming data using a principal component analysis (PCA). For each model, several statistical measures of goodness of fit are computed, which allows to choose the optimal k using the function -\code{\link[=gt_pca_clust_best_k]{gt_pca_clust_best_k()}}. +\code{\link[=gt_cluster_pca_best_k]{gt_cluster_pca_best_k()}}. See details for a description of how to select the optimal k and vignette("adegenet-dapc") for a tutorial. } diff --git a/man/gt_pca_clust_best_k.Rd b/man/gt_cluster_pca_best_k.Rd similarity index 91% rename from man/gt_pca_clust_best_k.Rd rename to man/gt_cluster_pca_best_k.Rd index c201ce8c..3d8d548a 100644 --- a/man/gt_pca_clust_best_k.Rd +++ b/man/gt_cluster_pca_best_k.Rd @@ -1,10 +1,10 @@ % Generated by roxygen2: do not edit by hand -% Please edit documentation in R/gt_pca_best_k.R -\name{gt_pca_clust_best_k} -\alias{gt_pca_clust_best_k} +% Please edit documentation in R/gt_cluster_pca_best_k.R +\name{gt_cluster_pca_best_k} +\alias{gt_cluster_pca_best_k} \title{Find the best number of clusters based on principal components} \usage{ -gt_pca_clust_best_k( +gt_cluster_pca_best_k( x, stat = c("BIC", "AIC", "WSS"), criterion = c("diffNgroup", "min", "goesup", "smoothNgoesup", "goodfit"), @@ -12,7 +12,7 @@ gt_pca_clust_best_k( ) } \arguments{ -\item{x}{a \code{gt_pca_clust} object obtained with \code{\link[=gt_pca_find_clusters]{gt_pca_find_clusters()}}} +\item{x}{a \code{gt_cluster_pca} object obtained with \code{\link[=gt_cluster_pca]{gt_cluster_pca()}}} \item{stat}{a statistics, one of "BIC", "AIC" or "WSS"} @@ -23,14 +23,14 @@ see details for a discussion of each approach.} screen (defaults to FALSE)} } \value{ -a 'gt_pca_clust' object with an added element 'best_k' +a 'gt_cluster_pca' object with an added element 'best_k' } \description{ This function selects the best k value based on a chosen metric and criterion. It is equivalent to plotting the metric against the \emph{k} values, and selecting the \emph{k} that fulfils a given criterion (see details for an explanation of each criterion). This function simply adds an element 'best_k' to the -\code{gt_pca_clust} returned by \code{\link[=gt_pca_find_clusters]{gt_pca_find_clusters()}}. The choice can be +\code{gt_cluster_pca} returned by \code{\link[=gt_cluster_pca]{gt_cluster_pca()}}. The choice can be over-ridden simply by assigning a different value to that element (e.g. for an object x and a desired \emph{k} of 8, simply use \code{x$best_k <- 8}) } diff --git a/man/gt_dapc.Rd b/man/gt_dapc.Rd index fef7c488..20e4ffe2 100644 --- a/man/gt_dapc.Rd +++ b/man/gt_dapc.Rd @@ -14,12 +14,12 @@ gt_dapc( ) } \arguments{ -\item{x}{an object of class \code{gt_pca}, or its subclass \code{gt_pca_clust}} +\item{x}{an object of class \code{gt_pca}, or its subclass \code{gt_cluster_pca}} \item{pop}{either a factor indicating the group membership of individuals; -or an integer defining the desired \emph{k} if x is a \code{gt_pca_clust}; or NULL, if -'x' is a \code{gt_pca_clust} and contain an element 'best_k', -usually generated with \code{\link[=gt_pca_clust_best_k]{gt_pca_clust_best_k()}}, +or an integer defining the desired \emph{k} if x is a \code{gt_cluster_pca}; or NULL, if +'x' is a \code{gt_cluster_pca} and contain an element 'best_k', +usually generated with \code{\link[=gt_cluster_pca_best_k]{gt_cluster_pca_best_k()}}, which will be used to select the clustering level.} \item{n_pca}{number of principal components to be used in the Discriminant @@ -45,7 +45,7 @@ an object of class \link[adegenet:dapc]{adegenet::dapc} \description{ This function implements the Discriminant Analysis of Principal Components (DAPC, Jombart et al. 2010). This method descibes the diversity between -pre-defined groups. When groups are unknown, use \code{\link[=gt_pca_find_clusters]{gt_pca_find_clusters()}} to +pre-defined groups. When groups are unknown, use \code{\link[=gt_cluster_pca]{gt_cluster_pca()}} to infer genetic clusters. See 'details' section for a succint description of the method, and the vignette in the package \code{adegenet} ("adegenet-dapc") for a diff --git a/man/gt_ibs.Rd b/man/gt_ibs.Rd deleted file mode 100644 index 5c891650..00000000 --- a/man/gt_ibs.Rd +++ /dev/null @@ -1,32 +0,0 @@ -% Generated by roxygen2: do not edit by hand -% Please edit documentation in R/gt_ibs.R -\name{gt_ibs} -\alias{gt_ibs} -\title{Compute the Identity by State Matrix for a \code{gen_tibble} object} -\usage{ -gt_ibs( - x, - as_counts = FALSE, - block_size = bigstatsr::block_size(length(show_loci_names(x))) * 2 -) -} -\arguments{ -\item{x}{a \code{gen_tibble} object.} - -\item{as_counts}{whether the counts of similar alleles, rather than the proportion, -should be returned (FALSE by default).} - -\item{block_size}{maximum number of loci read at once. More loci should improve speed, -but will tax memory.} -} -\value{ -a list of two \link[bigstatsr:FBM-class]{bigstatsr::FBM} matrices, one of counts of IBS by alleles (i.e. 2\emph{n loci), -and one of valid alleles (i.e. 2}n_loci - 2*missing_loci) -} -\description{ -This function computes the IBS matrix. -} -\details{ -Note that monomorphic sites are currently counted. Should we filter -them beforehand? What does plink do? -} diff --git a/man/gt_king.Rd b/man/gt_king.Rd index 386ec5c1..0ba5824b 100644 --- a/man/gt_king.Rd +++ b/man/gt_king.Rd @@ -1,14 +1,21 @@ % Generated by roxygen2: do not edit by hand -% Please edit documentation in R/gt_king.R +% Please edit documentation in R/pairwise_king.R \name{gt_king} \alias{gt_king} \title{Compute the KING-robust Matrix for a a \code{gen_tibble} object} \usage{ -gt_king(x, block_size = bigstatsr::block_size(length(show_loci_names(x)))) +gt_king( + x, + as_matrix = FALSE, + block_size = bigstatsr::block_size(length(loci_names(x))) +) } \arguments{ \item{x}{a \code{gen_tibble} object.} +\item{as_matrix}{boolean, determining whether the results should be a square symmetrical matrix (TRUE), +or a tidied tibble (FALSE, the default)} + \item{block_size}{maximum number of loci read at once. More loci should improve speed, but will tax memory.} } diff --git a/man/gt_roh_window.Rd b/man/gt_roh_window.Rd index c991aa8e..a569ba0b 100644 --- a/man/gt_roh_window.Rd +++ b/man/gt_roh_window.Rd @@ -76,8 +76,10 @@ column \examples{ # don't run the example if (FALSE) { -sheep_bed <- system.file("extdata/sheep.bed", package="tidypopgen") -sheep_gt <- tidypopgen::gen_tibble(sheep_bed, backingfile = tempfile(), quiet=TRUE) +sheep_ped <- system.file("extdata", "Kijas2016_Sheep_subset.ped", + package="detectRUNS") +sheep_gt <- tidypopgen::gen_tibble(sheep_ped, backingfile = tempfile(), + quiet=TRUE) sheep_gt <- sheep_gt \%>\% group_by(population) sheep_roh <- gt_roh_window(sheep_gt) detectRUNS::plot_Runs(runs = sheep_roh) diff --git a/man/gt_vcf_to_bed.Rd b/man/gt_vcf_to_bed.Rd deleted file mode 100644 index 83e353e4..00000000 --- a/man/gt_vcf_to_bed.Rd +++ /dev/null @@ -1,27 +0,0 @@ -% Generated by roxygen2: do not edit by hand -% Please edit documentation in R/gt_vcf_to_bed.R -\name{gt_vcf_to_bed} -\alias{gt_vcf_to_bed} -\title{Convert vcf to bed} -\usage{ -gt_vcf_to_bed(vcf_path, bed_path = NULL, quiet = TRUE, ...) -} -\arguments{ -\item{vcf_path}{the path to the vcf} - -\item{bed_path}{the path where the bed file should be saved. If left to null, -the vcf path will be used by switching the file type from .vcf to .bed} - -\item{quiet}{if TRUE, don't output information to screen} - -\item{...}{parameters to be passed to \link[vcfR:io_vcfR]{vcfR::read.vcfR}} -} -\value{ -the file path where the BED file was saved. -} -\description{ -This function quickly converts a smallish vcf to bed. The vcf needs to be -read into memory and manipulated in memory, so there are some serious limits -to this function. PLINK is a better option for converting vcf to BED, but -for small datasets, it should do the job. -} diff --git a/man/gt_write_bed_from_dfs.Rd b/man/gt_write_bed_from_dfs.Rd deleted file mode 100644 index 5db60c6c..00000000 --- a/man/gt_write_bed_from_dfs.Rd +++ /dev/null @@ -1,27 +0,0 @@ -% Generated by roxygen2: do not edit by hand -% Please edit documentation in R/gt_write_bed_from_dfs.R -\name{gt_write_bed_from_dfs} -\alias{gt_write_bed_from_dfs} -\title{Simple function to write a plink BED file from data.frames} -\usage{ -gt_write_bed_from_dfs(genotypes, loci, indiv_meta, path_out = NULL) -} -\arguments{ -\item{genotypes}{a matrix of genotype dosages} - -\item{loci}{a table of loci information (as used in \code{\link{gen_tibble}})} - -\item{indiv_meta}{a table with 'id' and 'population'} - -\item{path_out}{is the path and the prefix, to which '.bed', '.bim', and '.fam' -will be added.} -} -\value{ -NULL it writes the files -} -\description{ -This function write a bed file using information in tables with the same format -as they are stored in various parts of a \code{\link{gen_tibble}}. This is mostly used -for creating small test files, but could also be used to convert small datasets -manually into BED files (and the appropriate BIM and FAM companions). -} diff --git a/man/loci_chromosomes.Rd b/man/loci_chromosomes.Rd new file mode 100644 index 00000000..6a648d6b --- /dev/null +++ b/man/loci_chromosomes.Rd @@ -0,0 +1,27 @@ +% Generated by roxygen2: do not edit by hand +% Please edit documentation in R/loci_chromosomes.R +\name{loci_chromosomes} +\alias{loci_chromosomes} +\alias{loci_chromosomes.tbl_df} +\alias{loci_chromosomes.vctrs_bigSNP} +\title{Get the chromosomes of loci in a \code{gen_tibble}} +\usage{ +loci_chromosomes(.x, ...) + +\method{loci_chromosomes}{tbl_df}(.x, ...) + +\method{loci_chromosomes}{vctrs_bigSNP}(.x, ...) +} +\arguments{ +\item{.x}{a \code{\link{gen_tibble}}, or a vector of class \code{vctrs_bigSNP} (usually the \code{genotype} column of +a \code{\link{gen_tibble}} object).} + +\item{...}{currently unused.} +} +\value{ +a character vector of chromosomes +} +\description{ +Extract the loci chromosomes from a \code{gen_tibble} (or directly from its \code{genotype} +column). +} diff --git a/man/loci_ld_clump.Rd b/man/loci_ld_clump.Rd index c61d6dda..80a4a493 100644 --- a/man/loci_ld_clump.Rd +++ b/man/loci_ld_clump.Rd @@ -19,6 +19,7 @@ loci_ld_clump(.x, ...) exclude = NULL, use_positions = TRUE, n_cores = 1, + return_id = FALSE, ... ) @@ -53,9 +54,14 @@ can be for thresholding with respect to p-values associated with \code{S}.} size is the number of SNPs.} \item{n_cores}{number of cores to be used} + +\item{return_id}{boolean on whether the id of SNPs to keep should be returned. +It defaults to FALSE, which returns a vector of booleans (TRUE or FALSE)} } \value{ -a vector of snp indices to be kept +a boolean vector indicating whether the SNP should be kept (if +'return_id = FALSE', the default), else a vector of SNP indices to be kept (if +'return_id = TRUE') } \description{ This function uses clumping to remove SNPs at high LD. When used with its @@ -65,8 +71,5 @@ spread of SNPs over the chromosome. } \details{ Any missing values in the genotypes of a \code{gen_tibble} passed to \code{loci_ld_clump} -will cause an error. To deal with missingness, see \code{gt_impute_simple}. - -TODO we should really return a boolean rather than indices, so that it can -be easily used with \code{select_loci_if} +will cause an error. To deal with missingness, see \code{\link[=gt_impute_simple]{gt_impute_simple()}}. } diff --git a/man/show_loci_names.Rd b/man/loci_names.Rd similarity index 55% rename from man/show_loci_names.Rd rename to man/loci_names.Rd index 6e386f39..987e3762 100644 --- a/man/show_loci_names.Rd +++ b/man/loci_names.Rd @@ -1,16 +1,16 @@ % Generated by roxygen2: do not edit by hand -% Please edit documentation in R/show_loci_names.R -\name{show_loci_names} -\alias{show_loci_names} -\alias{show_loci_names.tbl_df} -\alias{show_loci_names.vctrs_bigSNP} -\title{Show the loci names of a \code{gen_tibble}} +% Please edit documentation in R/loci_names.R +\name{loci_names} +\alias{loci_names} +\alias{loci_names.tbl_df} +\alias{loci_names.vctrs_bigSNP} +\title{Get the names of loci in a \code{gen_tibble}} \usage{ -show_loci_names(.x, ...) +loci_names(.x, ...) -\method{show_loci_names}{tbl_df}(.x, ...) +\method{loci_names}{tbl_df}(.x, ...) -\method{show_loci_names}{vctrs_bigSNP}(.x, ...) +\method{loci_names}{vctrs_bigSNP}(.x, ...) } \arguments{ \item{.x}{a vector of class \code{vctrs_bigSNP} (usually the \code{genotype} column of diff --git a/man/pairwise_allele_sharing.Rd b/man/pairwise_allele_sharing.Rd new file mode 100644 index 00000000..0ebb122b --- /dev/null +++ b/man/pairwise_allele_sharing.Rd @@ -0,0 +1,31 @@ +% Generated by roxygen2: do not edit by hand +% Please edit documentation in R/pairwise_allele_sharing.R +\name{pairwise_allele_sharing} +\alias{pairwise_allele_sharing} +\title{Compute the Pairwise Allele Sharing Matrix for a \code{gen_tibble} object} +\usage{ +pairwise_allele_sharing( + x, + as_matrix = FALSE, + block_size = bigstatsr::block_size(count_loci(x)) +) +} +\arguments{ +\item{x}{a \code{gen_tibble} object.} + +\item{as_matrix}{boolean, determining whether the results should be a square symmetrical matrix (TRUE), +or a tidied tibble (FALSE, the default)} + +\item{block_size}{maximum number of loci read at once. More loci should improve speed, +but will tax memory.} +} +\value{ +a matrix of allele sharing between all pairs of individuals +} +\description{ +This function computes the Allele Sharing matrix. +Estimates Allele Sharing (matching in \code{hierfstat})) between pairs of individuals +(for each locus, gives 1 if the two individuals are homozygous +for the same allele, 0 if they are homozygous for a different allele, and 1/2 if at least one individual +is heterozygous. Matching is the average of these 0, 1/2 and 1s) +} diff --git a/man/pairwise_ibs.Rd b/man/pairwise_ibs.Rd new file mode 100644 index 00000000..4a639f30 --- /dev/null +++ b/man/pairwise_ibs.Rd @@ -0,0 +1,37 @@ +% Generated by roxygen2: do not edit by hand +% Please edit documentation in R/pairwise_ibs.R +\name{pairwise_ibs} +\alias{pairwise_ibs} +\title{Compute the Identity by State Matrix for a \code{gen_tibble} object} +\usage{ +pairwise_ibs( + x, + as_matrix = FALSE, + type = c("proportion", "adjusted_counts", "raw_counts"), + block_size = bigstatsr::block_size(count_loci(x)) +) +} +\arguments{ +\item{x}{a \code{gen_tibble} object.} + +\item{as_matrix}{boolean, determining whether the results should be a square symmetrical matrix (TRUE), +or a tidied tibble (FALSE, the default)} + +\item{type}{one of "proportion" (equivalent to "ibs" in PLINK), "adjusted_counts" ("distance" in PLINK), +and "raw_counts" (the counts of identical alleles and non-missing alleles, from which the two other quantities are computed)} + +\item{block_size}{maximum number of loci read at once. More loci should improve speed, +but will tax memory.} +} +\value{ +a \link[bigstatsr:FBM-class]{bigstatsr::FBM} of proportion or adjusted counts, or a list of +two \link[bigstatsr:FBM-class]{bigstatsr::FBM} matrices, one of counts of IBS by alleles, +and one of number of valid alleles (i.e. 2\emph{n_loci - 2}missing_loci) +} +\description{ +This function computes the IBS matrix. +} +\details{ +Note that monomorphic sites are currently counted. Should we filter +them beforehand? What does plink do? +} diff --git a/man/pairwise_pop_fst.Rd b/man/pairwise_pop_fst.Rd new file mode 100644 index 00000000..c35011b9 --- /dev/null +++ b/man/pairwise_pop_fst.Rd @@ -0,0 +1,49 @@ +% Generated by roxygen2: do not edit by hand +% Please edit documentation in R/pairwise_pop_fst.R +\name{pairwise_pop_fst} +\alias{pairwise_pop_fst} +\title{Compute pairwise population Fst} +\usage{ +pairwise_pop_fst( + .x, + by_locus = FALSE, + method = c("Hudson", "Nei87", "Nei86", "WC84") +) +} +\arguments{ +\item{.x}{a grouped \code{\link{gen_tibble}} (as obtained by using \code{\link[dplyr:group_by]{dplyr::group_by()}})} + +\item{by_locus}{boolean, determining whether Fst should be returned by locus(TRUE), +or as a single genome wide value obtained by taking the ratio of the mean numerator +and denominator (FALSE, the default).} + +\item{method}{one of 'Hudson', 'Nei86', 'Nei87', and 'WC84'} +} +\value{ +a tibble of genome-wide pairwise Fst values with each pairwise combination +as a row if "by_locus=FALSE", else +a list including the tibble of genome-wide values as well as a matrix with pairwise +Fst by locus with loci as rows and and pairwise +combinations as columns. +a matrix +} +\description{ +This function computes pairwise Fst. The following methods are implemented: +\itemize{ +\item 'Hudson': Hudson's formulation, as derived in Bhatia et al (2013) for diploids. +\item 'Nei86' : Gst according to Nei (1986), as derived in Bhatia et al (2013) for diploids. +\item 'Nei87' : Fst according to Nei (1987) - this is equivalent to \code{hierfstat::pairwise.neifst()}, +and includes the correction for heterozygosity when computing Ht +\item 'WC84' : Weir and Cockerham (1984), as derived in Bhatia et al (2013) for diploids. +} +} +\details{ +For all formulae, the genome wide estimate is obtained by taking the ratio of the mean +numerators and denominators over all relevant SNPs. +} +\references{ +Bhatia G, Patterson N, Sankararaman S, Price AL. Estimating and Interpreting +FST: The Impact of Rare Variants. Genome Research. 2013;23(9):1514–1521. + +Nei, M. (1987) Molecular Evolutionary Genetics. Columbia University Press +} diff --git a/man/pop_fis.Rd b/man/pop_fis.Rd new file mode 100644 index 00000000..0c41ba4c --- /dev/null +++ b/man/pop_fis.Rd @@ -0,0 +1,25 @@ +% Generated by roxygen2: do not edit by hand +% Please edit documentation in R/pop_fis.R +\name{pop_fis} +\alias{pop_fis} +\title{Compute population specific FIS} +\usage{ +pop_fis(.x, include_global = FALSE, allele_sharing_mat = NULL) +} +\arguments{ +\item{.x}{a grouped \code{\link{gen_tibble}} (as obtained by using \code{\link[dplyr:group_by]{dplyr::group_by()}})} + +\item{include_global}{boolean determining whether, besides the population specific fis, a global +fis should be appended. Note that this will return a vector of n populations plus 1 (the global value)} + +\item{allele_sharing_mat}{optional, the matrix of Allele Sharing returned by +\code{\link[=pairwise_allele_sharing]{pairwise_allele_sharing()}} with \code{as_matrix=TRUE}. As a number of statistics can be +derived from the Allele Sharing matrix, +it it sometimes more efficient to pre-compute this matrix.} +} +\value{ +a vector of population specific fis (plus the global value if \code{include_global=TRUE}) +} +\description{ +This function computes population specific FIS (as computed by \code{\link[hierfstat:fs.dosage]{hierfstat::fis.dosage()}}). +} diff --git a/man/pop_fst.Rd b/man/pop_fst.Rd new file mode 100644 index 00000000..f606c26c --- /dev/null +++ b/man/pop_fst.Rd @@ -0,0 +1,24 @@ +% Generated by roxygen2: do not edit by hand +% Please edit documentation in R/pop_fst.R +\name{pop_fst} +\alias{pop_fst} +\title{Compute population specific Fst} +\usage{ +pop_fst(.x, include_global = FALSE, allele_sharing_mat = NULL) +} +\arguments{ +\item{.x}{a grouped \code{\link{gen_tibble}} (as obtained by using \code{\link[dplyr:group_by]{dplyr::group_by()}})} + +\item{include_global}{boolean determining whether, besides the population specific Fst, a global +Fst should be appended. Note that this will return a vector of n populations plus 1 (the global value)} + +\item{allele_sharing_mat}{optional, the matrix of Allele Sharing returned by +\code{\link[=pairwise_allele_sharing]{pairwise_allele_sharing()}} with \code{as_matrix=TRUE}. As a number of statistics can be +derived from the Allele Sharing matrix,} +} +\value{ +a vector of population specific Fst (plus the global value if \code{include_global=TRUE}) +} +\description{ +This function computes population specific Fst (as computed by \code{\link[hierfstat:fs.dosage]{hierfstat::fst.dosage()}}). +} diff --git a/man/pop_pairwise_fst.Rd b/man/pop_pairwise_fst.Rd deleted file mode 100644 index 6cd14d91..00000000 --- a/man/pop_pairwise_fst.Rd +++ /dev/null @@ -1,21 +0,0 @@ -% Generated by roxygen2: do not edit by hand -% Please edit documentation in R/pop_pairwise_fst.R -\name{pop_pairwise_fst} -\alias{pop_pairwise_fst} -\title{Compute pairwise Hudson Fst} -\usage{ -pop_pairwise_fst(.x, by_locus = FALSE) -} -\arguments{ -\item{.x}{a grouped \code{\link{gen_tibble}} (as obtained by using \code{\link[dplyr:group_by]{dplyr::group_by()}})} - -\item{by_locus}{boolean, determining whether Fst should be returned by locus(TRUE), -or as a single genome wide value obtained by taking the ratio of the mean numerator -and denominator (FALSE, the default).} -} -\value{ -a tibble with each pairwise combination as a row -} -\description{ -This function computes pairwise Fst using the formulation by Hudson. -} diff --git a/man/indiv_qc_report.Rd b/man/qc_report_indiv.Rd similarity index 61% rename from man/indiv_qc_report.Rd rename to man/qc_report_indiv.Rd index 2e792eee..0638ece1 100644 --- a/man/indiv_qc_report.Rd +++ b/man/qc_report_indiv.Rd @@ -1,14 +1,16 @@ % Generated by roxygen2: do not edit by hand -% Please edit documentation in R/indiv_qc_report.R -\name{indiv_qc_report} -\alias{indiv_qc_report} +% Please edit documentation in R/qc_report_indiv.R +\name{qc_report_indiv} +\alias{qc_report_indiv} \title{Create a Quality Control report for individuals} \usage{ -indiv_qc_report(.x, ...) +qc_report_indiv(.x, kings_threshold = NULL, ...) } \arguments{ \item{.x}{a \code{\link{gen_tibble}} object.} +\item{kings_threshold}{an optional numeric, a threshold of relatedness for the sample} + \item{...}{further arguments to pass} } \value{ diff --git a/man/loci_qc_report.Rd b/man/qc_report_loci.Rd similarity index 75% rename from man/loci_qc_report.Rd rename to man/qc_report_loci.Rd index 8aa11ba2..ce55e633 100644 --- a/man/loci_qc_report.Rd +++ b/man/qc_report_loci.Rd @@ -1,10 +1,10 @@ % Generated by roxygen2: do not edit by hand -% Please edit documentation in R/loci_qc_report.R -\name{loci_qc_report} -\alias{loci_qc_report} +% Please edit documentation in R/qc_report_loci.R +\name{qc_report_loci} +\alias{qc_report_loci} \title{Create a Quality Control report for loci} \usage{ -loci_qc_report(.x, ...) +qc_report_loci(.x, ...) } \arguments{ \item{.x}{a \code{\link{gen_tibble}} object.} diff --git a/man/rbind.gen_tbl.Rd b/man/rbind.gen_tbl.Rd index 6ab44fa4..bc73f2d9 100644 --- a/man/rbind.gen_tbl.Rd +++ b/man/rbind.gen_tbl.Rd @@ -46,3 +46,9 @@ match alleles (often needed in human datasets from different SNP chips), and remove ambiguous alleles (C/G and A/T) where the correct strand can not be guessed. } +\details{ +rbind differs from merging data with plink, which swaps the order of allele1 +and allele2 according to minor allele frequency when merging datasets. rbind +flips and/or swaps alleles according to the reference dataset, not according +to allele frequency. +} diff --git a/man/select_loci_if.Rd b/man/select_loci_if.Rd index 0b6eca88..e309996a 100644 --- a/man/select_loci_if.Rd +++ b/man/select_loci_if.Rd @@ -10,7 +10,8 @@ select_loci_if(.data, .sel_logical) \item{.data}{a \code{gen_tibble}} \item{.sel_logical}{a logical vector of length equal to the number of loci, -or an expression that will tidy evaluate to such a vector.} +or an expression that will tidy evaluate to such a vector. Only loci +for which .sel_logical is TRUE will be selected; NA will be treated as FALSE.} } \description{ An equivalent to \code{\link[dplyr:select_all]{dplyr::select_if()}} that works on the \code{genotype} column diff --git a/man/snp_allele_sharing.Rd b/man/snp_allele_sharing.Rd new file mode 100644 index 00000000..24243f22 --- /dev/null +++ b/man/snp_allele_sharing.Rd @@ -0,0 +1,36 @@ +% Generated by roxygen2: do not edit by hand +% Please edit documentation in R/snp_allele_sharing.R +\name{snp_allele_sharing} +\alias{snp_allele_sharing} +\title{Compute the Pairwise Allele Sharing Matrix for a bigSNP object} +\usage{ +snp_allele_sharing( + X, + ind.row = bigstatsr::rows_along(X), + ind.col = bigstatsr::cols_along(X), + block.size = bigstatsr::block_size(nrow(X)) +) +} +\arguments{ +\item{X}{a \link[bigstatsr:FBM.code256-class]{bigstatsr::FBM.code256} matrix (as found in the \code{genotypes} +slot of a \link[bigsnpr:bigSNP-class]{bigsnpr::bigSNP} object).} + +\item{ind.row}{An optional vector of the row indices that are used. +If not specified, all rows are used. Don't use negative indices.} + +\item{ind.col}{An optional vector of the column indices that are used. If not +specified, all columns are used. Don't use negative indices.} + +\item{block.size}{maximum number of columns read at once. Note that, to optimise the +speed of matrix operations, we have to store in memory 3 times the columns.} +} +\value{ +a matrix of allele sharing between all pairs of individuals +} +\description{ +This function computes the Allele Sharing matrix. +Estimates Allele Sharing (matching in \code{hierfstat})) between pairs of individuals +(for each locus, gives 1 if the two individuals are homozygous +for the same allele, 0 if they are homozygous for a different allele, and 1/2 if at least one individual +is heterozygous. Matching is the average of these 0, 1/2 and 1s) +} diff --git a/man/snp_ibs.Rd b/man/snp_ibs.Rd index 82f246d0..6f8ed78f 100644 --- a/man/snp_ibs.Rd +++ b/man/snp_ibs.Rd @@ -8,7 +8,7 @@ snp_ibs( X, ind.row = bigstatsr::rows_along(X), ind.col = bigstatsr::cols_along(X), - as.counts = FALSE, + type = c("proportion", "adjusted_counts", "raw_counts"), block.size = bigstatsr::block_size(nrow(X)) ) } @@ -22,15 +22,15 @@ If not specified, all rows are used. Don't use negative indices.} \item{ind.col}{An optional vector of the column indices that are used. If not specified, all columns are used. Don't use negative indices.} -\item{as.counts}{whether the counts of similar alleles, rather than the proportion, -should be returned (FALSE by default). CURRENTLY ALWAYS RETURNS COUNTS!!!} +\item{type}{one of "proportion" (equivalent to "ibs" in PLINK), "adjusted_counts" ("distance" in PLINK), +and "raw_counts" (the counts of identical alleles and non-missing alleles, from which the two other quantities are computed)} \item{block.size}{maximum number of columns read at once. Note that, to optimise the speed of matrix operations, we have to store in memory 3 times the columns.} } \value{ -a list of two \link[bigstatsr:FBM-class]{bigstatsr::FBM} matrices, one of counts of IBS by alleles (i.e. 2\emph{n loci), -and one of valid alleles (i.e. 2}n_loci - 2*missing_loci) +if as.counts = TRUE function returns a list of two \link[bigstatsr:FBM-class]{bigstatsr::FBM} matrices, one of counts of IBS by alleles (i.e. 2*n loci), +and one of valid alleles (i.e. 2 * n_loci - 2 * missing_loci). If as.counts = FALSE returns a single matrix of IBS proportions. } \description{ This function computes the IBS matrix. diff --git a/man/snp_king.Rd b/man/snp_king.Rd index 1f98efef..52162505 100644 --- a/man/snp_king.Rd +++ b/man/snp_king.Rd @@ -8,7 +8,7 @@ snp_king( X, ind.row = bigstatsr::rows_along(X), ind.col = bigstatsr::cols_along(X), - block.size = bigstatsr::block_size(nrow(X)) * 3 + block.size = bigstatsr::block_size(nrow(X)) * 4 ) } \arguments{ diff --git a/src/RcppExports.cpp b/src/RcppExports.cpp index 352fc73b..75ed8959 100644 --- a/src/RcppExports.cpp +++ b/src/RcppExports.cpp @@ -53,6 +53,22 @@ BEGIN_RCPP return rcpp_result_gen; END_RCPP } +// increment_as_counts +void increment_as_counts(Environment k, Environment k2, arma::mat& na_mat, arma::mat& dos_mat, Environment BM, const IntegerVector& rowInd, const IntegerVector& colInd); +RcppExport SEXP _tidypopgen_increment_as_counts(SEXP kSEXP, SEXP k2SEXP, SEXP na_matSEXP, SEXP dos_matSEXP, SEXP BMSEXP, SEXP rowIndSEXP, SEXP colIndSEXP) { +BEGIN_RCPP + Rcpp::RNGScope rcpp_rngScope_gen; + Rcpp::traits::input_parameter< Environment >::type k(kSEXP); + Rcpp::traits::input_parameter< Environment >::type k2(k2SEXP); + Rcpp::traits::input_parameter< arma::mat& >::type na_mat(na_matSEXP); + Rcpp::traits::input_parameter< arma::mat& >::type dos_mat(dos_matSEXP); + Rcpp::traits::input_parameter< Environment >::type BM(BMSEXP); + Rcpp::traits::input_parameter< const IntegerVector& >::type rowInd(rowIndSEXP); + Rcpp::traits::input_parameter< const IntegerVector& >::type colInd(colIndSEXP); + increment_as_counts(k, k2, na_mat, dos_mat, BM, rowInd, colInd); + return R_NilValue; +END_RCPP +} // increment_ibs_counts void increment_ibs_counts(Environment k, Environment k2, arma::mat& genotype0, arma::mat& genotype1, arma::mat& genotype2, Environment BM, const IntegerVector& rowInd, const IntegerVector& colInd); RcppExport SEXP _tidypopgen_increment_ibs_counts(SEXP kSEXP, SEXP k2SEXP, SEXP genotype0SEXP, SEXP genotype1SEXP, SEXP genotype2SEXP, SEXP BMSEXP, SEXP rowIndSEXP, SEXP colIndSEXP) { @@ -71,18 +87,20 @@ BEGIN_RCPP END_RCPP } // increment_king_numerator -void increment_king_numerator(Environment k, arma::mat& genotype0, arma::mat& genotype1, arma::mat& genotype2, Environment BM, const IntegerVector& rowInd, const IntegerVector& colInd); -RcppExport SEXP _tidypopgen_increment_king_numerator(SEXP kSEXP, SEXP genotype0SEXP, SEXP genotype1SEXP, SEXP genotype2SEXP, SEXP BMSEXP, SEXP rowIndSEXP, SEXP colIndSEXP) { +void increment_king_numerator(Environment k, Environment n_Aa_i, arma::mat& genotype0, arma::mat& genotype1, arma::mat& genotype2, arma::mat& genotype_valid, Environment BM, const IntegerVector& rowInd, const IntegerVector& colInd); +RcppExport SEXP _tidypopgen_increment_king_numerator(SEXP kSEXP, SEXP n_Aa_iSEXP, SEXP genotype0SEXP, SEXP genotype1SEXP, SEXP genotype2SEXP, SEXP genotype_validSEXP, SEXP BMSEXP, SEXP rowIndSEXP, SEXP colIndSEXP) { BEGIN_RCPP Rcpp::RNGScope rcpp_rngScope_gen; Rcpp::traits::input_parameter< Environment >::type k(kSEXP); + Rcpp::traits::input_parameter< Environment >::type n_Aa_i(n_Aa_iSEXP); Rcpp::traits::input_parameter< arma::mat& >::type genotype0(genotype0SEXP); Rcpp::traits::input_parameter< arma::mat& >::type genotype1(genotype1SEXP); Rcpp::traits::input_parameter< arma::mat& >::type genotype2(genotype2SEXP); + Rcpp::traits::input_parameter< arma::mat& >::type genotype_valid(genotype_validSEXP); Rcpp::traits::input_parameter< Environment >::type BM(BMSEXP); Rcpp::traits::input_parameter< const IntegerVector& >::type rowInd(rowIndSEXP); Rcpp::traits::input_parameter< const IntegerVector& >::type colInd(colIndSEXP); - increment_king_numerator(k, genotype0, genotype1, genotype2, BM, rowInd, colInd); + increment_king_numerator(k, n_Aa_i, genotype0, genotype1, genotype2, genotype_valid, BM, rowInd, colInd); return R_NilValue; END_RCPP } @@ -91,8 +109,9 @@ static const R_CallMethodDef CallEntries[] = { {"_tidypopgen_SNPHWE2", (DL_FUNC) &_tidypopgen_SNPHWE2, 4}, {"_tidypopgen_SNPHWE_t", (DL_FUNC) &_tidypopgen_SNPHWE_t, 4}, {"_tidypopgen_SNPHWE_midp_t", (DL_FUNC) &_tidypopgen_SNPHWE_midp_t, 4}, + {"_tidypopgen_increment_as_counts", (DL_FUNC) &_tidypopgen_increment_as_counts, 7}, {"_tidypopgen_increment_ibs_counts", (DL_FUNC) &_tidypopgen_increment_ibs_counts, 8}, - {"_tidypopgen_increment_king_numerator", (DL_FUNC) &_tidypopgen_increment_king_numerator, 7}, + {"_tidypopgen_increment_king_numerator", (DL_FUNC) &_tidypopgen_increment_king_numerator, 9}, {NULL, NULL, 0} }; diff --git a/src/snp_as.cpp b/src/snp_as.cpp new file mode 100644 index 00000000..18d7c861 --- /dev/null +++ b/src/snp_as.cpp @@ -0,0 +1,70 @@ +/******************************************************************************/ + +#include +#include + +/******************************************************************************/ + +inline arma::mat FBM_RW2arma(Rcpp::Environment BM) { + + Rcpp::XPtr xpBM = BM["address_rw"]; + myassert(xpBM->matrix_type() == 8, + "Mapping to arma::mat is available for 'double' FBMs only."); + + return arma::mat((double*)xpBM->matrix(), xpBM->nrow(), xpBM->ncol(), false); +} + +/******************************************************************************/ + +/******************************************************************************/ + + // [[Rcpp::export]] + void increment_as_counts(Environment k, // to store tcrossprod(dos_mat-1) + Environment k2, // to store tcrossprod(na_mat) + arma::mat& na_mat, + arma::mat& dos_mat, + Environment BM, + const IntegerVector& rowInd, + const IntegerVector& colInd) { + + arma::mat K = FBM_RW2arma(k); + arma::mat K2 = FBM_RW2arma(k2); + + XPtr xpBM = BM["address"]; + SubBMAcc macc(xpBM, rowInd, colInd, 1); + + dos_mat.zeros(); + na_mat.zeros(); + na_mat = na_mat +1; // just reset it to one dirctly!!! + + + size_t n = macc.nrow(); + size_t m = macc.ncol(); + + for (int j = 0; j < m; j++) { + for (int i = 0; i < n; i++) { + int value = (macc(i,j)); + if (value <3){ + dos_mat(i, j) = value-1; // note that we want the matrix of (dos-1) + } else { + dos_mat(i, j) = 0; + na_mat(i, j) = 0; + } + }} + + // fill the rest with 0s (should be 1 column max) + int m2 = dos_mat.n_cols; + if (m2 > m) { + myassert(m2 == (m + 1), ERROR_BUG); + for (int i = 0; i < n; i++) { + dos_mat(i, m) = 1; + na_mat(i, m) = 0; + } + } + K += dos_mat * dos_mat.t(); + K2 += na_mat * na_mat.t(); + +} + +/******************************************************************************/ + diff --git a/src/snp_king.cpp b/src/snp_king.cpp index a8c010ea..1d51418a 100644 --- a/src/snp_king.cpp +++ b/src/snp_king.cpp @@ -19,14 +19,17 @@ inline arma::mat FBM_RW2arma(Rcpp::Environment BM) { /******************************************************************************/ // [[Rcpp::export]] void increment_king_numerator(Environment k, + Environment n_Aa_i, arma::mat& genotype0, arma::mat& genotype1, arma::mat& genotype2, + arma::mat& genotype_valid, Environment BM, const IntegerVector& rowInd, const IntegerVector& colInd) { arma::mat K = FBM_RW2arma(k); + arma::mat N_Aa_i = FBM_RW2arma(n_Aa_i); XPtr xpBM = BM["address"]; SubBMAcc macc(xpBM, rowInd, colInd, 1); @@ -34,6 +37,7 @@ inline arma::mat FBM_RW2arma(Rcpp::Environment BM) { genotype0.zeros(); genotype1.zeros(); genotype2.zeros(); + genotype_valid.zeros(); size_t n = macc.nrow(); size_t m = macc.ncol(); @@ -43,10 +47,13 @@ inline arma::mat FBM_RW2arma(Rcpp::Environment BM) { int value = (macc(i,j)); if (value == 0){ genotype0(i, j) = 1; + genotype_valid(i, j) +=1 ; } else if (value==1){ genotype1(i, j) = 1; + genotype_valid(i, j) +=1 ; } else if (value==2){ genotype2(i,j) = 1; + genotype_valid(i, j) +=1 ; } }} @@ -61,5 +68,7 @@ inline arma::mat FBM_RW2arma(Rcpp::Environment BM) { } } K += ( genotype1 * genotype1.t() -2 *(genotype0 * genotype2.t() + genotype2 * genotype0.t())); + // use genotype0 to store + N_Aa_i += (genotype1 * (genotype_valid).t()); } diff --git a/tests/testthat/archive/test_as_gen_tibble.R b/tests/testthat/archive/test_as_gen_tibble.R deleted file mode 100644 index 46972bfb..00000000 --- a/tests/testthat/archive/test_as_gen_tibble.R +++ /dev/null @@ -1,25 +0,0 @@ -testthat::test_that("as_gen_tibble works on genlight",{ -library(adegenet) -test_genlight <- new("genlight", list(indiv1=c(1,1,0,1,1,0), indiv2=c(2,1,1,0,0,0), - toto=c(2,2,0,0,4,4))) -test_gen <- as_gen_tibble(test_genlight) -# check that genotypes are preserved -expect_true (all.equal(as.matrix(test_genlight), - show_genotypes(test_gen), check.attributes = FALSE)) -# check that individual names (the only thing that was present) were preserved -expect_true (all.equal(test_genlight$ind.names, - test_gen$id, check.attributes = FALSE)) -# now check the error for empty slots -expect_error (as_gen_tibble(test_genlight,ignore_null_slots = FALSE), - "pop is null ") -}) - -testthat::test_that("as_gen_tibble works on genlight",{ - library(vcfR ,quietly = TRUE) - data(vcfR_test) - # cast it, we will get an error about biallelic - expect_warning(test_gt <- as_gen_tibble(vcfR_test)) - vcf_bi <- vcfR_test[is.biallelic(vcfR_test)] - expect_true(nrow(show_loci(test_gt))==nrow(vcf_bi@fix)) - expect_true(nrow(test_gt)==(ncol(vcf_bi@gt)-1)) -}) diff --git a/tests/testthat/archive/test_as_genlight.R b/tests/testthat/archive/test_as_genlight.R deleted file mode 100644 index 891ea788..00000000 --- a/tests/testthat/archive/test_as_genlight.R +++ /dev/null @@ -1,16 +0,0 @@ -testthat::test_that("as_genlight creates a valid object",{ - library(adegenet) - test_indiv_meta <- data.frame (id=c("a","b","c"), - population = c("pop1","pop1","pop2")) - test_genotypes <- rbind(c(1,1,0,1,1,0), - c(2,1,0,0,0,0), - c(2,2,0,0,1,1)) - test_loci <- data.frame(name=paste0("rs",1:6), - chromosome=c(1,1,1,1,2,2), - position=c(3,5,65,343,23,456), - allele_ref = c("a","t","c","g","c","t"), - allele_alt = c("t","c", NA,"c","g","a")) - test_gen <- gen_tibble(test_indiv_meta, test_genotypes, test_loci) - test_gl <- as_genlight(test_gen) - expect_true(validObject(test_gl)) -}) diff --git a/tests/testthat/archive/test_gt_dapc.R b/tests/testthat/archive/test_gt_dapc.R deleted file mode 100644 index 1179d117..00000000 --- a/tests/testthat/archive/test_gt_dapc.R +++ /dev/null @@ -1,20 +0,0 @@ -testthat::test_that("gt_pca is equivalent to adegenet glPca",{ - library(adegenet) - # simulate object - set.seed(123) - x <- glSim(50,4e3, 50, ploidy=2) - x_gt <- as_gen_tibble(x) - # fit gt_pca - test_pca <- gt_pca(x_gt, center = TRUE) - test_clusters <- gt_pca_find_clusters(test_pca) - # in the assignments for k=3, the maximum group id should be 3 - expect_true(max(test_clusters$clusters$groups[[3]])==3) - test_clusters <- gt_pca_clust_best_k(test_clusters, quiet=TRUE) - # check that we now have the info - expect_true(!is.null(test_clusters$best_k)) - # and now dapc - test_dapc <- gt_dapc(test_clusters) - # simple test - expect_true(nlevels(test_dapc$grp)==test_clusters$best_k) - # we should test that we get the expected results when we set pop manually -}) diff --git a/tests/testthat/archive/test_gt_pca.R b/tests/testthat/archive/test_gt_pca.R deleted file mode 100644 index 2d7e6a51..00000000 --- a/tests/testthat/archive/test_gt_pca.R +++ /dev/null @@ -1,16 +0,0 @@ -testthat::test_that("gt_pca is equivalent to adegenet glPca",{ -library(adegenet) - # simulate object - set.seed(123) - x <- glSim(50,4e3, 50, ploidy=2) - # fit pca in adegenet - pca_gl <- glPca(x, nf=2) - # convert object to gen_tibble - x_gt <- as_gen_tibble(x) - # use gt_pca - pca_gt <- gt_pca(x_gt, nf=2) - expect_true(all.equal(pca_gl$scores,pca_gt$scores, check.attributes = FALSE)) - # now use C to compute the dot product - pca_gt_c <- gt_pca(x_gt, nf=2, use_c = TRUE) - expect_identical(pca_gt$scores, pca_gt_c$scores) -}) diff --git a/tests/testthat/archive/test_gt_write_plink.R b/tests/testthat/archive/test_gt_write_plink.R deleted file mode 100644 index 3e3e461e..00000000 --- a/tests/testthat/archive/test_gt_write_plink.R +++ /dev/null @@ -1,28 +0,0 @@ -raw_path_pop_a <- system.file("extdata/pop_a.raw", package = "tidypopgen") -map_path_pop_a <- system.file("extdata/pop_a.map", package = "tidypopgen") -pop_a_gt <- read_plink_raw(file = raw_path_pop_a, map_file = map_path_pop_a, quiet = TRUE) -out_file <- tempfile() - -testthat::test_that("we can export to plink raw",{ - # delete any files if they already exists (unlikely) - unlink(paste0(out_file,"*")) - expect_true(gt_write_plink(pop_a_gt, file = out_file, chunk_size = 2)) - out_file_raw <- paste0(out_file,".raw") - expect_true(file.exists(out_file_raw)) - # check that the file that we generated is identical to the original - expect_true(tools::md5sum(out_file_raw)==tools::md5sum(raw_path_pop_a)) - - out_file_map <- paste0(out_file,".map") - expect_true(file.exists(out_file_map)) - new_pop_a_gt <- read_plink_raw(file = out_file_raw, - map_file = out_file_map, quiet = TRUE) - expect_identical(pop_a_gt, new_pop_a_gt) -}) - -testthat::test_that("we can export to plink ped",{ - # delete any files if they already exists - unlink(paste0(out_file,"*")) - expect_true(gt_write_plink(pop_a_gt, file = out_file, plink_format = "ped", chunk_size = 2)) - out_file_raw <- paste0(out_file,".ped") - expect_true(file.exists(out_file_raw)) -}) diff --git a/tests/testthat/archive/test_pairwise_fst.R b/tests/testthat/archive/test_pairwise_fst.R deleted file mode 100644 index 3493a29a..00000000 --- a/tests/testthat/archive/test_pairwise_fst.R +++ /dev/null @@ -1,19 +0,0 @@ -testthat::test_that("pop_pairwise_fst computes Hudson Fst correctly",{ - test_indiv_meta <- data.frame (id=c("a","b","c"), - population = c("pop1","pop1","pop2")) - test_genotypes <- rbind(c(1,1,0,1,1,2), - c(2,1,0,NA,0,NA), - c(2,2,0,0,1,0)) - test_loci <- data.frame(name=paste0("rs",1:6), - chromosome=c(1,1,1,1,2,2), - position=c(3,5,65,343,23,456), - allele_ref = c("a","t","c","g","c","t"), - allele_alt = c("t","c", NA,"c","g","a")) - test_gen <- gen_tibble(test_indiv_meta, test_genotypes, test_loci) - - grouped_gt <- test_gen %>% group_by(population) - #we need some tests! Are we happy with the above, or do we need a more complex test? - # ideally , we should look for an implementation that we can use a reference (hierfsta??) - fst <- grouped_gt %>% pop_pairwise_fst() - fst_by_locus <- grouped_gt %>% pop_pairwise_fst(by_locus = TRUE) -}) diff --git a/tests/testthat/archive/test_read_plink_raw_loci.R b/tests/testthat/archive/test_read_plink_raw_loci.R deleted file mode 100644 index 79c8ca12..00000000 --- a/tests/testthat/archive/test_read_plink_raw_loci.R +++ /dev/null @@ -1,11 +0,0 @@ -testthat::test_that("read_loc_raw correctly reads loc information", { - # a simple file - raw_path <- system.file("extdata/pop_b.raw", package = "tidypopgen") - map_path <- system.file("extdata/pop_b.map", package = "tidypopgen") - pop_b_gen <- read_plink_raw(file = raw_path, map_file = map_path, quiet = TRUE) - pop_b_loc_info <- read_plink_raw_loci(raw_path) - # check that loci names are the same irrespective of how we get them - - expect_identical(show_loci(pop_b_gen) %>% select(name,allele_ref,allele_alt), - pop_b_loc_info) -}) diff --git a/tests/testthat/archive/test_snpbin_list_count_na.R b/tests/testthat/archive/test_snpbin_list_count_na.R deleted file mode 100644 index 78c05f16..00000000 --- a/tests/testthat/archive/test_snpbin_list_count_na.R +++ /dev/null @@ -1,15 +0,0 @@ -testthat::test_that("snpbin_list_count_na computes correctly",{ - test_indiv_meta <- data.frame (id=c("a","b","c"), - population = c("pop1","pop1","pop2")) - test_genotypes <- rbind(c(1,1,0,1,1,NA), - c(2,NA,0,NA,0,NA), - c(2,NA,0,0,1,NA)) - test_loci <- data.frame(name=paste0("rs",1:6), - chromosome=c(1,1,1,1,2,2), - position=c(3,5,65,343,23,456), - allele_ref = c("a","t","c","g","c","t"), - allele_alt = c("t","c", NA,"c","g","a")) - test_gen <- gen_tibble(test_indiv_meta, test_genotypes, test_loci) - expect_true(all(snpbin_list_count_na(test_gen$genotypes,alleles_as_units = FALSE)==colSums(is.na(test_genotypes)))) - expect_true(all(snpbin_list_count_na(test_gen$genotypes,alleles_as_units = TRUE)==(colSums(is.na(test_genotypes))*2))) -}) diff --git a/tests/testthat/archive/test_snpbin_list_dot_prod.R b/tests/testthat/archive/test_snpbin_list_dot_prod.R deleted file mode 100644 index 681b461a..00000000 --- a/tests/testthat/archive/test_snpbin_list_dot_prod.R +++ /dev/null @@ -1,40 +0,0 @@ - - -testthat::test_that("snpbin_list_dot_prod computes correctly",{ - # tests taken from adegenet - # TESTING DOT PRODUCTS - set.seed(123) - M <- matrix(sample(c(0,1), 100*1e3, replace=TRUE), nrow=100) - n_loci <- ncol(M) - test_loci <- data.frame(name=paste0("rs",n_loci), - chromosome=rep(1,n_loci), - position=rep(0,n_loci), - allele_ref =rep("a",n_loci), - allele_alt = rep("t",n_loci)) - test_indiv_meta <- data.frame (id=paste0("ind",nrow(M)), - population = rep(c("pop1","pop2"),each=50)) - - test_gen <- gen_tibble(test_indiv_meta, M, test_loci, ploidy = rep(1,100)) - - - # not centred, not scaled - res1 <- snpbin_list_dot_prod(test_gen$genotypes,alleles_as_units=FALSE, center=FALSE, scale=FALSE) - res2 <- M %*% t(M) - expect_true(all.equal(res1, res2, check.attributes=FALSE)) - - # centred, not scaled - res1c <- snpbin_list_dot_prod(test_gen$genotypes,alleles_as_units=FALSE, center=TRUE, scale=FALSE) - M1 <- scalewt(M,center=TRUE,scale=FALSE) - res2c <- M1 %*% t(M1) - expect_true(all.equal(res1c,res2c, check.attributes=FALSE)) - - # centred, scaled - res1cs <- snpbin_list_dot_prod(test_gen$genotypes,alleles_as_units=FALSE, center=TRUE, scale=TRUE) - M2 <- scalewt(M,center=TRUE,scale=TRUE) - res2cs <- M2 %*% t(M2) - expect_true(all.equal(res1cs,res2cs, check.attributes=FALSE)) - - #TODO add tests for parallel version, testing against the serial objects - - -}) diff --git a/tests/testthat/archive/test_snpbin_list_means.R b/tests/testthat/archive/test_snpbin_list_means.R deleted file mode 100644 index 91234946..00000000 --- a/tests/testthat/archive/test_snpbin_list_means.R +++ /dev/null @@ -1,18 +0,0 @@ -testthat::test_that("snpbin_list_means computes correctly",{ - test_indiv_meta <- data.frame (id=c("a","b","c"), - population = c("pop1","pop1","pop2")) - test_genotypes <- rbind(c(1,1,0,1,1,2), - c(2,1,0,NA,0,NA), - c(2,2,0,0,1,NA)) - test_loci <- data.frame(name=paste0("rs",1:6), - chromosome=c(1,1,1,1,2,2), - position=c(3,5,65,343,23,456), - allele_ref = c("a","t","c","g","c","t"), - allele_alt = c("t","c", NA,"c","g","a")) - test_gen <- gen_tibble(test_indiv_meta, test_genotypes, test_loci) - - expect_true(all(snpbin_list_means(test_gen$genotypes, use_c = FALSE)== - colSums(test_genotypes, na.rm=TRUE)/(c(3,3,3,2,3,1)*2))) - expect_true(all(snpbin_list_means(test_gen$genotypes, use_c = TRUE)== - colSums(test_genotypes, na.rm=TRUE)/(c(3,3,3,2,3,1)*2))) -}) diff --git a/tests/testthat/archive/test_snpbin_list_n.R b/tests/testthat/archive/test_snpbin_list_n.R deleted file mode 100644 index 030289e6..00000000 --- a/tests/testthat/archive/test_snpbin_list_n.R +++ /dev/null @@ -1,15 +0,0 @@ -testthat::test_that("snpbin_list_count_na computes correctly",{ - test_indiv_meta <- data.frame (id=c("a","b","c"), - population = c("pop1","pop1","pop2")) - test_genotypes <- rbind(c(1,1,0,1,1,NA), - c(2,NA,0,NA,0,NA), - c(2,NA,0,0,1,NA)) - test_loci <- data.frame(name=paste0("rs",1:6), - chromosome=c(1,1,1,1,2,2), - position=c(3,5,65,343,23,456), - allele_ref = c("a","t","c","g","c","t"), - allele_alt = c("t","c", NA,"c","g","a")) - test_gen <- gen_tibble(test_indiv_meta, test_genotypes, test_loci) - expect_true(all(snpbin_list_n(test_gen$genotypes,alleles_as_units = FALSE)==colSums(!is.na(test_genotypes)))) - expect_true(all(snpbin_list_n(test_gen$genotypes,alleles_as_units = TRUE)==(colSums(!is.na(test_genotypes))*2))) -}) diff --git a/tests/testthat/archive/test_snpbin_list_sums.R b/tests/testthat/archive/test_snpbin_list_sums.R deleted file mode 100644 index 36f88b63..00000000 --- a/tests/testthat/archive/test_snpbin_list_sums.R +++ /dev/null @@ -1,15 +0,0 @@ -testthat::test_that("snpbin_list_sums computes correctly",{ - test_indiv_meta <- data.frame (id=c("a","b","c"), - population = c("pop1","pop1","pop2")) - test_genotypes <- rbind(c(1,1,0,1,1,NA), - c(2,1,0,NA,0,NA), - c(2,2,0,0,1,NA)) - test_loci <- data.frame(name=paste0("rs",1:6), - chromosome=c(1,1,1,1,2,2), - position=c(3,5,65,343,23,456), - allele_ref = c("a","t","c","g","c","t"), - allele_alt = c("t","c", NA,"c","g","a")) - test_gen <- gen_tibble(test_indiv_meta, test_genotypes, test_loci) - expect_true(all(snpbin_list_sums(test_gen$genotypes, use_c = FALSE)==colSums(test_genotypes, na.rm=TRUE))) - expect_true(all(snpbin_list_sums(test_gen$genotypes, use_c = TRUE)==colSums(test_genotypes,na.rm=TRUE))) -}) diff --git a/tests/testthat/archive/test_snpbin_list_vars.R b/tests/testthat/archive/test_snpbin_list_vars.R deleted file mode 100644 index b23cba3c..00000000 --- a/tests/testthat/archive/test_snpbin_list_vars.R +++ /dev/null @@ -1,39 +0,0 @@ -testthat::test_that("snpbin_list_vars computes correctly",{ - test_indiv_meta <- data.frame (id=c("a","b","c"), - population = c("pop1","pop1","pop2")) - test_loci <- data.frame(name=paste0("rs",1:6), - chromosome=c(1,1,1,1,2,2), - position=c(3,5,65,343,23,432), - allele_ref = c("a","t","g","c","t","a"), - allele_alt = c("t","c","c","g","a","g")) - - # tests adapted from adegenet - # same ploidy everywhere - test_genotypes <- rbind(c(0,0,1,1,0, NA), - c(1,1,1,0,0,1), - c(0,0,0,1,1,1)) - test_gen <- gen_tibble(test_indiv_meta, test_genotypes, test_loci,ploidy=c(1,1,1)) - f1 <- function(e) {return(mean((e-mean(e, na.rm=TRUE))^2, na.rm=TRUE))} - expect_true(all.equal(snpbin_list_vars(test_gen$genotypes), - apply(show_genotypes(test_gen, genotypes), 2, f1 ))) - expect_true(all.equal(snpbin_list_vars(test_gen$genotypes,FALSE), - apply(show_genotypes(test_gen, genotypes), 2, f1 ))) - - # differences in ploidy - test_genotypes <- rbind(c(0,0,1,1,0,NA), c(1,1,1,0,0,1), c(2,1,1,1,1,NA)) - test_gen <- gen_tibble(test_indiv_meta, test_genotypes, test_loci,ploidy=c(1,1,2)) - temp <- sweep(show_genotypes(test_gen, genotypes), 1, c(1,1,2), "/") - f2 <- function(e,w) { - mu <- weighted.mean(e, w, na.rm=TRUE) - res <- weighted.mean((e-mu)^2, w, na.rm=TRUE) - return(res) - } - expect_true(all.equal(snpbin_list_means(test_gen$genotypes), - apply(temp,2,weighted.mean, w=c(1,1,2), na.rm=TRUE))) - expect_true(all.equal(snpbin_list_vars(test_gen$genotypes), apply(temp, 2, f2,w=c(1,1,2) ))) - - expect_true(all.equal(snpbin_list_means(test_gen$genotypes,FALSE), - apply(temp,2,mean,na.rm=TRUE))) - expect_true(all.equal(snpbin_list_vars(test_gen$genotypes,FALSE), apply(temp,2,f1))) - -}) diff --git a/tests/testthat/test_filter_high_relatedness.R b/tests/testthat/test_filter_high_relatedness.R new file mode 100644 index 00000000..07799ced --- /dev/null +++ b/tests/testthat/test_filter_high_relatedness.R @@ -0,0 +1,25 @@ +test_that("filter_high_relatedness removes necessary individuals",{ + + #Create gentibble + bed_path <- system.file("extdata/related/families.bed", package = "tidypopgen") + families_bigsnp_path <- bigsnpr::snp_readBed(bed_path, backingfile = tempfile()) + families <- gen_tibble(families_bigsnp_path, quiet = TRUE, valid_alleles = c("1","2")) + + #Create an example relatedness matrix + families_fbm <- tidypopgen:::.gt_get_bigsnp(families)$genotypes + king_matrix <- snp_king(families_fbm) + + #Find which individuals are over an arbitrary relateness threshold + res <- filter_high_relatedness(king_matrix, kings_threshold = 0.2, verbose = FALSE) + + #individuals 11 and 12 at 0.2294 + #individuals 9 and 10 at 0.2742 + + #Subset the matrix using res[[1]] - the individuals to keep + sub_matrix <- king_matrix[c(as.numeric(res[[1]])),c(as.numeric(res[[1]]))] + + #If we rerun, all individuals should be retained (all TRUE in res2 output [[3]]) + res2 <- filter_high_relatedness(sub_matrix, kings_threshold = 0.2, verbose = FALSE) + expect_true(all(res2[[3]])) + +}) diff --git a/tests/testthat/test_gen_tibble.R b/tests/testthat/test_gen_tibble.R index 950e9781..2cf81aa5 100644 --- a/tests/testthat/test_gen_tibble.R +++ b/tests/testthat/test_gen_tibble.R @@ -10,11 +10,8 @@ test_loci <- data.frame(name=paste0("rs",1:6), genetic_dist = as.integer(rep(0,6)), allele_ref = c("A","T","C","G","C","T"), allele_alt = c("T","C", NA,"C","G","A")) -bed_path <- gt_write_bed_from_dfs(genotypes = test_genotypes, - loci = test_loci, - indiv_meta = test_indiv_meta, - path_out = tempfile('test_data_')) -test_gt <- gen_tibble(bed_path, quiet = TRUE) + +test_gt <- gen_tibble(x = test_genotypes, loci = test_loci, indiv_meta = test_indiv_meta, quiet = TRUE) # this also tests show_genotypes and show_loci test_that("create gen_tibble from bed",{ diff --git a/tests/testthat/test_gen_tibble_save_load.R b/tests/testthat/test_gen_tibble_save_load.R index 73cedc90..c867d3ff 100644 --- a/tests/testthat/test_gen_tibble_save_load.R +++ b/tests/testthat/test_gen_tibble_save_load.R @@ -10,11 +10,8 @@ test_loci <- data.frame(name=paste0("rs",1:6), genetic_dist = as.integer(rep(0,6)), allele_ref = c("A","T","C","G","C","T"), allele_alt = c("T","C", NA,"C","G","A")) -bed_path <- gt_write_bed_from_dfs(genotypes = test_genotypes, - loci = test_loci, - indiv_meta = test_indiv_meta, - path_out = tempfile('test_data_')) -test_gt <- gen_tibble(bed_path, quiet = TRUE) + +test_gt <- gen_tibble(x = test_genotypes, loci = test_loci, indiv_meta = test_indiv_meta, quiet = TRUE) # this also tests show_genotypes and show_loci test_that("save and load gt",{ diff --git a/tests/testthat/test_gt_as_.R b/tests/testthat/test_gt_as_.R new file mode 100644 index 00000000..bc8196f4 --- /dev/null +++ b/tests/testthat/test_gt_as_.R @@ -0,0 +1,29 @@ +test_that("show_loci gets and sets information",{ + test_genotypes <- rbind(c(1,1,0,1,1,0), + c(2,1,0,NA,0,0), + c(2,NA,0,0,1,1), + c(1,0,0,1,0,0), + c(1,2,0,1,2,1), + c(0,0,0,0,NA,1), + c(0,1,1,0,1,NA)) + test_indiv_meta <- data.frame (id=c("a","b","c","d","e","f","g"), + population = c("pop1","pop1","pop2","pop2","pop1","pop3","pop3")) + test_loci <- data.frame(name=paste0("rs",1:6), + chromosome=paste0("chr",c(1,1,1,1,2,2)), + position=as.integer(c(3,5,65,343,23,456)), + genetic_dist = as.integer(rep(0,6)), + allele_ref = c("A","T","C","G","C","T"), + allele_alt = c("T","C", NA,"C","G","A")) + + test_gt <- gen_tibble(x = test_genotypes, loci = test_loci, indiv_meta = test_indiv_meta, quiet = TRUE) + + test_hier <- gt_as_hierfstat(test_gt) + test_genind <- gt_as_genind(test_gt) + # now test that the two objects are identical (minus the row names, which are abritrary) + expect_true(all.equal(test_hier,hierfstat::genind2hierfstat(test_genind), + check.attributes=FALSE)) + + test_genlight <- gt_as_genlight(test_gt) + expect_true(all.equal(show_genotypes(test_gt), as.matrix(test_genlight), + check.attributes=FALSE)) +}) diff --git a/tests/testthat/test_gt_write_plink.R b/tests/testthat/test_gt_as_plink.R similarity index 71% rename from tests/testthat/test_gt_write_plink.R rename to tests/testthat/test_gt_as_plink.R index 238a4528..c43c1dfd 100644 --- a/tests/testthat/test_gt_write_plink.R +++ b/tests/testthat/test_gt_as_plink.R @@ -10,23 +10,25 @@ test_loci <- data.frame(name=paste0("rs",1:6), genetic_dist = as.integer(rep(0,6)), allele_ref = c("A","T","C","G","C","T"), allele_alt = c("T","C", NA,"C","G","A")) -bed_path <- gt_write_bed_from_dfs(genotypes = test_genotypes, - loci = test_loci, - indiv_meta = test_indiv_meta, - path_out = tempfile('test_data_')) -test_gt <- gen_tibble(bed_path, quiet = TRUE) + +test_gt <- gen_tibble(x = test_genotypes, loci = test_loci, indiv_meta = test_indiv_meta, quiet = TRUE) + # this also tests show_genotypes and show_loci test_that("write a bed file",{ - bed_path <- gt_write_plink(test_gt, bedfile = paste0(tempfile(),".bed")) + bed_path <- gt_as_plink(test_gt, bedfile = paste0(tempfile(),".bed")) # now read the file back in test_gt2 <- gen_tibble(bed_path, quiet=TRUE) ## continue here # because of the different backing file info, we cannot use identical on the whole object expect_true(identical(show_genotypes(test_gt), show_genotypes(test_gt2))) - expect_true(identical(show_loci(test_gt), show_loci(test_gt2))) expect_true(identical(test_gt %>% select(-genotypes), test_gt2 %>% select(-genotypes))) + + #check gt_as_plink converts the NA missing allele to 0 + expect_true(is.na(show_loci(test_gt2)$allele_alt[3])) + + }) diff --git a/tests/testthat/test_gt_snmf.R b/tests/testthat/test_gt_snmf.R index a24e247f..b97ede63 100644 --- a/tests/testthat/test_gt_snmf.R +++ b/tests/testthat/test_gt_snmf.R @@ -1,9 +1,8 @@ vcf_path <- system.file("/extdata/anolis/punctatus_t70_s10_n46_filtered.recode.vcf.gz", package = "tidypopgen") -bed_path <- gt_vcf_to_bed(vcf_path, bed_path = tempfile("anolis_")) -anole_gt <- gen_tibble(bed_path, quiet = TRUE) +anole_gt <- gen_tibble(vcf_path, quiet = TRUE, backingfile = tempfile()) test_that("snmf clusters correctly",{ - geno_file <- gt_write_lea_geno(anole_gt) + geno_file <- gt_as_geno_lea(anole_gt) snmf_project <- LEA::snmf(geno_file, K = 3) expect_true(inherits(snmf_project,"snmfProject")) }) diff --git a/tests/testthat/test_gt_vcf_to_bed.R b/tests/testthat/test_gt_vcf_to_bed.R deleted file mode 100644 index f49f084c..00000000 --- a/tests/testthat/test_gt_vcf_to_bed.R +++ /dev/null @@ -1,12 +0,0 @@ -test_that("vcf is correctly converted and imported",{ - vcf_path <- system.file("/extdata/anolis/punctatus_t70_s10_n46_filtered.recode.vcf.gz", - package = "tidypopgen") - bed_path <- gt_vcf_to_bed(vcf_path, bed_path = tempfile("anolis_")) - test_gt <- gen_tibble(bed_path,quiet = TRUE) - - vcf_test <- vcfR::read.vcfR(file = vcf_path, verbose = FALSE) - vcf_bi <- vcf_test[vcfR::is.biallelic(vcf_test)] - expect_true(nrow(show_loci(test_gt))==nrow(vcf_bi@fix)) - expect_true(nrow(test_gt)==(ncol(vcf_bi@gt)-1)) -}) - diff --git a/tests/testthat/test_indiv_het_obs.R b/tests/testthat/test_indiv_het_obs.R index 58b84469..1219f853 100644 --- a/tests/testthat/test_indiv_het_obs.R +++ b/tests/testthat/test_indiv_het_obs.R @@ -11,11 +11,9 @@ test_that("indiv_het_obs computes correctly",{ allele_ref = c("A","T","C","G","C","T"), allele_alt = c("T","C", NA,"C","G","A")) - bed_path <- gt_write_bed_from_dfs(genotypes = test_genotypes, - loci = test_loci, - indiv_meta = test_indiv_meta, - path_out = tempfile('test_data_')) - test_gt <- gen_tibble(bed_path, quiet = TRUE) + + test_gt <- gen_tibble(x = test_genotypes, loci = test_loci, indiv_meta = test_indiv_meta, quiet = TRUE) + # feeding the list of SNPbin directly expect_true(all(indiv_het_obs(test_gt$genotypes)== diff --git a/tests/testthat/test_indiv_missingness.R b/tests/testthat/test_indiv_missingness.R index fc8ffac9..f9b69a3c 100644 --- a/tests/testthat/test_indiv_missingness.R +++ b/tests/testthat/test_indiv_missingness.R @@ -10,11 +10,8 @@ test_loci <- data.frame(name=paste0("rs",1:6), allele_ref = c("A","T","C","G","C","T"), allele_alt = c("T","C", NA,"C","G","A")) -bed_path <- gt_write_bed_from_dfs(genotypes = test_genotypes, - loci = test_loci, - indiv_meta = test_indiv_meta, - path_out = tempfile('test_data_')) -test_gt <- gen_tibble(bed_path, quiet = TRUE) + +test_gt <- gen_tibble(x = test_genotypes, loci = test_loci, indiv_meta = test_indiv_meta, quiet = TRUE) test_that("indiv_missingness computes correctly",{ diff --git a/tests/testthat/test_loci_freq.R b/tests/testthat/test_loci_freq.R index 1ce9cabe..67d0aa37 100644 --- a/tests/testthat/test_loci_freq.R +++ b/tests/testthat/test_loci_freq.R @@ -10,11 +10,9 @@ test_that("snpbin_list_means computes correctly",{ genetic_dist = as.integer(rep(0,6)), allele_ref = c("A","T","C","G","C","T"), allele_alt = c("T","C", NA,"C","G","A")) - bed_path <- gt_write_bed_from_dfs(genotypes = test_genotypes, - loci = test_loci, - indiv_meta = test_indiv_meta, - path_out = tempfile('test_data_')) - test_gt <- gen_tibble(bed_path, quiet = TRUE) + + test_gt <- gen_tibble(x = test_genotypes, loci = test_loci, indiv_meta = test_indiv_meta, quiet = TRUE) + # raw frequencies freq <- colSums(test_genotypes, na.rm=TRUE)/(c(3,3,3,2,3,1)*2) diff --git a/tests/testthat/test_loci_ld_clump.R b/tests/testthat/test_loci_ld_clump.R index 0966bb10..eb97260e 100644 --- a/tests/testthat/test_loci_ld_clump.R +++ b/tests/testthat/test_loci_ld_clump.R @@ -14,7 +14,7 @@ test_gt <- gen_tibble(x = test_genotypes, indiv_meta = test_indiv_meta, loci = t test_that("ld clumping runs",{ - keep <- loci_ld_clump(test_gt, thr_r2 = 0.2) + keep <- loci_ld_clump(test_gt, thr_r2 = 0.2, return_id=TRUE) expect_true(all.equal(keep, c(1, 2, 3, 4, 6)) == TRUE) }) diff --git a/tests/testthat/test_loci_missingness.R b/tests/testthat/test_loci_missingness.R index 29cf17f0..f17f07ea 100644 --- a/tests/testthat/test_loci_missingness.R +++ b/tests/testthat/test_loci_missingness.R @@ -10,11 +10,9 @@ test_that("snpbin_list_means computes correctly",{ genetic_dist = as.integer(rep(0,6)), allele_ref = c("A","T","C","G","C","T"), allele_alt = c("T","C", NA,"C","G","A")) - bed_path <- gt_write_bed_from_dfs(genotypes = test_genotypes, - loci = test_loci, - indiv_meta = test_indiv_meta, - path_out = tempfile('test_data_')) - test_gt <- gen_tibble(bed_path, quiet = TRUE) + + test_gt <- gen_tibble(x = test_genotypes, loci = test_loci, indiv_meta = test_indiv_meta, quiet = TRUE) + # na counts count_na <- function(x){sum(is.na(x))} diff --git a/tests/testthat/test_pairwise_allele_sharing.R b/tests/testthat/test_pairwise_allele_sharing.R new file mode 100644 index 00000000..4075bbd8 --- /dev/null +++ b/tests/testthat/test_pairwise_allele_sharing.R @@ -0,0 +1,33 @@ +test_genotypes <- rbind(c(1,1,0,1,1,0), + c(2,1,0,NA,0,0), + c(2,NA,0,0,1,1)) +test_indiv_meta <- data.frame (id=c("a","b","c"), + population = c("pop1","pop1","pop2")) +test_loci <- data.frame(name=paste0("rs",1:6), + chromosome=paste0("chr",c(1,1,1,1,2,2)), + position=as.integer(c(3,5,65,343,23,456)), + genetic_dist = as.integer(rep(0,6)), + allele_ref = c("A","T","C","G","C","T"), + allele_alt = c("T","C", NA,"C","G","A")) + +test_gt <- gen_tibble(x = test_genotypes, loci = test_loci, indiv_meta = test_indiv_meta, quiet = TRUE) + + +test_that("snp_allele_sharing and pairwise_allele_sharing computes allele sharing correctly",{ + test_fbm <- tidypopgen:::.gt_get_bigsnp(test_gt)$genotypes + test_as <- snp_allele_sharing(test_fbm) + # use hierfstat to compute it + dos_hier_match <- hierfstat::matching(test_genotypes) + expect_true (all.equal(test_as, dos_hier_match)) + + # check that we get the same result if we split the operation into two blocks + test_as_2blocks <- snp_allele_sharing(test_fbm, block.size = 3) + expect_identical(test_as_2blocks[], test_as[]) + + # now estimate it with gen_tibble + test_as_gt <- pairwise_allele_sharing(test_gt, as_matrix=TRUE) + expect_true(all.equal(test_as, test_as_gt, + check.attributes=FALSE)) + + +}) diff --git a/tests/testthat/test_pairwise_pop_fst.R b/tests/testthat/test_pairwise_pop_fst.R new file mode 100644 index 00000000..ea97a6c5 --- /dev/null +++ b/tests/testthat/test_pairwise_pop_fst.R @@ -0,0 +1,32 @@ +test_genotypes <- rbind(c(1,1,0,1,1,0), + c(2,1,0,NA,0,0), + c(2,NA,0,0,1,1), + c(1,0,0,1,0,0), + c(1,2,0,1,2,1), + c(0,0,0,0,NA,1), + c(0,1,1,0,1,NA)) +test_indiv_meta <- data.frame (id=c("a","b","c","d","e","f","g"), + population = c("pop1","pop1","pop2","pop2","pop1","pop3","pop3")) +test_loci <- data.frame(name=paste0("rs",1:6), + chromosome=paste0("chr",c(1,1,1,1,2,2)), + position=as.integer(c(3,5,65,343,23,456)), + genetic_dist = as.integer(rep(0,6)), + allele_ref = c("A","T","C","G","C","T"), + allele_alt = c("T","C", NA,"C","G","A")) + +test_gt <- gen_tibble(x = test_genotypes, loci = test_loci, indiv_meta = test_indiv_meta, quiet = TRUE) + + +test_that("pop_fst and pop_fist compute correctly",{ + test_gt <- test_gt %>% dplyr::group_by(population) + test_hier <- gt_as_hierfstat(test_gt) + # compare results against hierfstat for Nei87 (Nei86 does not correct for Ho + # when computing Ht, so it gives a different result) + nei_gt <- test_gt %>% pairwise_pop_fst(method="Nei87") + nei_hier <- hierfstat::pairwise.neifst(test_hier) + # hiefstat values are rounded to 4 dp + expect_true(all.equal(tidy_dist_matrix(nei_hier)$value, round(nei_gt$value,4))) + + #pair_fst_locus <- test_gt %>% pairwise_pop_fst(by_locus = TRUE) + +}) diff --git a/tests/testthat/test_pop_fis_fst.R b/tests/testthat/test_pop_fis_fst.R new file mode 100644 index 00000000..017dfdfd --- /dev/null +++ b/tests/testthat/test_pop_fis_fst.R @@ -0,0 +1,41 @@ +test_genotypes <- rbind(c(1,1,0,1,1,0), + c(2,1,0,NA,0,0), + c(2,NA,0,0,1,1), + c(1,0,0,1,0,0), + c(1,2,0,1,2,1), + c(0,0,0,0,NA,1), + c(0,1,1,0,1,NA)) +test_indiv_meta <- data.frame (id=c("a","b","c","d","e","f","g"), + population = c("pop1","pop1","pop2","pop2","pop1","pop3","pop3")) +test_loci <- data.frame(name=paste0("rs",1:6), + chromosome=paste0("chr",c(1,1,1,1,2,2)), + position=as.integer(c(3,5,65,343,23,456)), + genetic_dist = as.integer(rep(0,6)), + allele_ref = c("A","T","C","G","C","T"), + allele_alt = c("T","C", NA,"C","G","A")) + +test_gt <- gen_tibble(x = test_genotypes, loci = test_loci, indiv_meta = test_indiv_meta, quiet = TRUE) + + +test_that("pop_fst and pop_fist compute correctly",{ + test_gt <- test_gt %>% dplyr::group_by(population) + + # compare results against raw hierfstat code + fis_by_pop <- test_gt %>% pop_fis(include_global=TRUE) + fis_by_pop_hier <- hierfstat::fis.dosage(test_genotypes,pop=test_indiv_meta$population) + expect_true(all.equal(fis_by_pop, fis_by_pop_hier,check.attributes = FALSE)) + # now check that we don't get the global + fis_by_pop_sub <- test_gt %>% pop_fis() + expect_true (all.equal(fis_by_pop[-length(fis_by_pop)], fis_by_pop_sub)) + + + + # compare results against raw hierfstat code + fst_by_pop <- test_gt %>% pop_fst(include_global=TRUE) + fst_by_pop_hier <- hierfstat::fst.dosage(test_genotypes,pop=test_indiv_meta$population) + expect_true(all.equal(fst_by_pop, fst_by_pop_hier,check.attributes = FALSE)) + # now check that we don't get the global + fst_by_pop_sub <- test_gt %>% pop_fst() + expect_true (all.equal(fst_by_pop[-length(fst_by_pop)], fst_by_pop_sub)) + +}) diff --git a/tests/testthat/test_rbind_gen_tibble.R b/tests/testthat/test_rbind_gen_tibble.R index e44316e2..7e0bb304 100644 --- a/tests/testthat/test_rbind_gen_tibble.R +++ b/tests/testthat/test_rbind_gen_tibble.R @@ -37,7 +37,7 @@ test_that("merge combines datasets correctly",{ #Check ambiguous SNPs are dropped (remove_ambiguous TRUE by default) - testthat::expect_false("rs1240719" %in% show_loci_names(merged_gen)) - testthat::expect_false("rs307354" %in% show_loci_names(merged_gen)) + testthat::expect_false("rs1240719" %in% loci_names(merged_gen)) + testthat::expect_false("rs307354" %in% loci_names(merged_gen)) }) diff --git a/tests/testthat/test_select_loci.R b/tests/testthat/test_select_loci.R index 91a9e1f4..a4136e9d 100644 --- a/tests/testthat/test_select_loci.R +++ b/tests/testthat/test_select_loci.R @@ -10,24 +10,22 @@ test_that("select_loci subsets correctly",{ genetic_dist = as.integer(rep(0,6)), allele_ref = c("A","T","C","G","C","T"), allele_alt = c("T","C", NA,"C","G","A")) - bed_path <- gt_write_bed_from_dfs(genotypes = test_genotypes, - loci = test_loci, - indiv_meta = test_indiv_meta, - path_out = tempfile('test_data_')) - test_gt <- gen_tibble(bed_path, quiet = TRUE) + + test_gt <- gen_tibble(x = test_genotypes, loci = test_loci, indiv_meta = test_indiv_meta, quiet = TRUE) + # select snps with an rs test_gt_sub <- test_gt %>% select_loci (starts_with("rs")) - expect_true(!any(c("x1","x2") %in% show_loci_names(test_gt_sub))) + expect_true(!any(c("x1","x2") %in% loci_names(test_gt_sub))) # subsetting by id with reordering test_gt_sub <- test_gt %>% select_loci (c(3,1,5)) - expect_identical(c("rs3","rs1","x1"), show_loci_names(test_gt_sub)) + expect_identical(c("rs3","rs1","x1"), loci_names(test_gt_sub)) # get everything test_gt_sub <- test_gt %>% select_loci (everything()) expect_identical(test_gt, test_gt_sub) # use 2:4 range expressions test_gt_sub <- test_gt %>% select_loci (2:4) - expect_identical(test_loci$name[2:4], show_loci_names(test_gt_sub)) + expect_identical(test_loci$name[2:4], loci_names(test_gt_sub)) }) diff --git a/tests/testthat/test_select_loci_if.R b/tests/testthat/test_select_loci_if.R index d8822860..503472cb 100644 --- a/tests/testthat/test_select_loci_if.R +++ b/tests/testthat/test_select_loci_if.R @@ -10,11 +10,9 @@ test_that("select_loci_if subsets correctly",{ genetic_dist = as.integer(rep(0,6)), allele_ref = c("A","T","C","G","C","T"), allele_alt = c("T","C", NA,"C","G","A")) - bed_path <- gt_write_bed_from_dfs(genotypes = test_genotypes, - loci = test_loci, - indiv_meta = test_indiv_meta, - path_out = tempfile('test_data_')) - test_gt <- gen_tibble(bed_path, quiet = TRUE) + + test_gt <- gen_tibble(x = test_genotypes, loci = test_loci, indiv_meta = test_indiv_meta, quiet = TRUE) + # raw frequencies @@ -29,6 +27,10 @@ test_that("select_loci_if subsets correctly",{ criterion <- c(TRUE, TRUE, FALSE, TRUE, TRUE, FALSE) expect_identical(test_gen_sub, test_gt %>% select_loci_if(criterion)) + # treat NA as if it was FALSE + criterion_na <- c(TRUE, TRUE, NA, TRUE, TRUE, FALSE) + expect_identical(test_gen_sub, + test_gt %>% select_loci_if(criterion_na)) #TODO test errors }) diff --git a/tests/testthat/test_show_loci.R b/tests/testthat/test_show_loci.R index 2a61b305..997c39a8 100644 --- a/tests/testthat/test_show_loci.R +++ b/tests/testthat/test_show_loci.R @@ -10,11 +10,8 @@ test_that("show_loci gets and sets information",{ genetic_dist = as.integer(rep(0,6)), allele_ref = c("A","T","C","G","C","T"), allele_alt = c("T","C", NA,"C","G","A")) - bed_path <- gt_write_bed_from_dfs(genotypes = test_genotypes, - loci = test_loci, - indiv_meta = test_indiv_meta, - path_out = tempfile('test_data_')) - test_gt <- gen_tibble(bed_path, quiet = TRUE) + + test_gt <- gen_tibble(x = test_genotypes, loci = test_loci, indiv_meta = test_indiv_meta, quiet = TRUE) # check that we retrieve the info we put in (as a tibble) expect_identical(show_loci(test_gt) %>% select(-big_index),as_tibble(test_loci)) diff --git a/tests/testthat/test_snp_ibs.R b/tests/testthat/test_snp_ibs.R index 40d48528..56294f4e 100644 --- a/tests/testthat/test_snp_ibs.R +++ b/tests/testthat/test_snp_ibs.R @@ -10,28 +10,74 @@ test_loci <- data.frame(name=paste0("rs",1:6), genetic_dist = as.integer(rep(0,6)), allele_ref = c("A","T","C","G","C","T"), allele_alt = c("T","C", NA,"C","G","A")) -bed_path <- gt_write_bed_from_dfs(genotypes = test_genotypes, - loci = test_loci, - indiv_meta = test_indiv_meta, - path_out = tempfile('test_data_')) -test_gt <- gen_tibble(bed_path, quiet = TRUE) +test_gt <- gen_tibble(x = test_genotypes, loci = test_loci, indiv_meta = test_indiv_meta, quiet = TRUE) -test_that("snp_ibs and gt_ibs computes ibs correctly",{ - test_fbm <- tidypopgen:::gt_get_bigsnp(test_gt)$genotypes - test_ibs <- snp_ibs(test_fbm, as.counts=TRUE) + + +test_that("snp_ibs and pairwise_ibs computes ibs correctly",{ + test_fbm <- tidypopgen:::.gt_get_bigsnp(test_gt)$genotypes + test_ibs <- snp_ibs(test_fbm, type="raw_counts") # compare indiv 1 vs 2 in_common<-sum(c(1,2,2,1,1,2)) expect_identical(in_common, test_ibs$ibs[1,2]) # check that we get the same result if we split the operation into two blocks - test_ibs_2blocks <- snp_ibs(test_fbm, block.size = 3) + test_ibs_2blocks <- snp_ibs(test_fbm, block.size = 3, type="raw_counts") expect_identical(test_ibs_2blocks$ibs[], test_ibs$ibs[]) - - # now estimate it with gen_tibble - test_ibs_gt <- gt_ibs(test_gt, as_counts = TRUE) + test_ibs_gt <- pairwise_ibs(test_gt, type="raw_counts") expect_true(all.equal(test_ibs$ibs[], test_ibs_gt$ibs[], check.attributes=FALSE)) + test_ibs_gt_prop <- pairwise_ibs(test_gt) + #expect_true (all.equal(test_ibs_gt_prop, test_ibs$ibs[]/test_ibs$valid_n[], check.attributes = FALSE)) + + #use raw_counts matrices to calculate proportion + by_hand <- as.data.frame(test_ibs$ibs[]/test_ibs$valid_n[]) + colnames(by_hand) <- c("a","b","c") + + #check against proportion value + expect_true(all.equal(test_ibs_gt_prop$value[1],by_hand$a[2])) #a and b + expect_true(all.equal(test_ibs_gt_prop$value[2],by_hand$a[3])) #a and c + expect_true(all.equal(test_ibs_gt_prop$value[3],by_hand$b[3])) #b and c + + # now subset to the first and second individual, and a subset of loci + test_gt_sub <- test_gt[c(1,3),] + loci_subset <- c(2,3,5,6) + in_common_1vs3 <- sum(c(1,1,2,1,2,1)[loci_subset]) + + test_gt_sub <- test_gt_sub %>% select_loci(dplyr::all_of(loci_subset)) + test_ibs_sub <- pairwise_ibs(test_gt_sub, type="raw_counts") + expect_identical(in_common_1vs3, test_ibs_sub$ibs[1,2]) +}) + + +test_that("snp_ibs as.counts = FALSE gives the same results as plink",{ + + #Read in results from plink --bfile families --distance square flat-missing ibs + plink_ibs <- read.table(system.file("extdata/related/test_plinkIBS.mibs", package = "tidypopgen"), header = FALSE) + #Transform to matrix + plink_matrix <- unname(as.matrix(plink_ibs)) + + #Create gentibble for the same data + bed_path <- system.file("extdata/related/families.bed", package = "tidypopgen") + families_bigsnp_path <- bigsnpr::snp_readBed(bed_path, backingfile = tempfile()) + families <- gen_tibble(families_bigsnp_path, quiet = TRUE, valid_alleles = c("1","2")) + + #Get snp_ibs results + families_fbm <- tidypopgen:::.gt_get_bigsnp(families)$genotypes + tidy_ibs <- snp_ibs(families_fbm) + + #Check both are numeric and round + tidy_ibs <- as.numeric(tidy_ibs) + plink_matrix <- as.numeric(plink_matrix) + tidy_ibs <- round(tidy_ibs, 6) + + #Check matrices are equal + expect_true(all.equal(tidy_ibs,plink_matrix)) + + }) + + diff --git a/tests/testthat/test_snp_king.R b/tests/testthat/test_snp_king.R index b3646670..ab184d17 100644 --- a/tests/testthat/test_snp_king.R +++ b/tests/testthat/test_snp_king.R @@ -10,31 +10,98 @@ test_loci <- data.frame(name=paste0("rs",1:6), genetic_dist = as.integer(rep(0,6)), allele_ref = c("A","T","C","G","C","T"), allele_alt = c("T","C", NA,"C","G","A")) -bed_path <- gt_write_bed_from_dfs(genotypes = test_genotypes, - loci = test_loci, - indiv_meta = test_indiv_meta, - path_out = tempfile('test_data_')) -test_gt <- gen_tibble(bed_path, quiet = TRUE) + +test_gt <- gen_tibble(x = test_genotypes, loci = test_loci, indiv_meta = test_indiv_meta, quiet = TRUE) + + +# function to compute robust king in R +king_r <- function(X_mat){ + X_mat0 <- X_mat==0 + X_mat0[is.na(X_mat0)]<-0 + X_mat1 <-X_mat==1 + X_mat1[is.na(X_mat1)]<-0 + X_mat2 <-X_mat==2 + X_mat2[is.na(X_mat2)]<-0 + king_num <- (X_mat1 %*% t(X_mat1) - 2* ((X_mat0) %*% t(X_mat2) + (X_mat2) %*% t(X_mat0)) ) + X_mat_valid <- !is.na(X_mat) + N_mat_Aa_i <- X_mat1 %*% t(X_mat_valid) + N_mat_Aa_j <- t(N_mat_Aa_i) + king_num/(2* pmin(N_mat_Aa_i,N_mat_Aa_j))+0.5-0.25*(N_mat_Aa_i+N_mat_Aa_j)/pmin(N_mat_Aa_i,N_mat_Aa_j) +} # this also tests show_genotypes and show_loci test_that("snp_king and gt_king compute king-robust correctly",{ - test_fbm <- tidypopgen:::gt_get_bigsnp(test_gt)$genotypes + test_fbm <- tidypopgen:::.gt_get_bigsnp(test_gt)$genotypes test_king <- snp_king(test_fbm) # king by hand - # code from https://www.mv.helsinki.fi/home/mjxpirin/GWAS_course/material/GWAS5.html - X <- test_genotypes - denominator = matrix(rep(rowSums(X==1), nrow(X)), nrow = nrow(X), byrow = T) + - matrix(rep(rowSums(X==1), nrow(X)), nrow = nrow(X), byrow = F) - king.r = ((X==1) %*% t(X==1) - 2* ((X==0) %*% t(X==2) + (X==2) %*% t(X==0)) ) / denominator - expect_identical(king.r, test_king) + test_king_r <- king_r(show_genotypes(test_gt)) + expect_identical(test_king_r, test_king) # check that we get the same result if we split the operation into two blocks test_king_2blocks <- snp_king(test_fbm, block.size = 3) expect_identical(test_king_2blocks, test_king) # now estimate it with gen_tibble - test_king_gt <- gt_king(test_gt) + test_king_gt <- gt_king(test_gt, as_matrix = TRUE) expect_true(all.equal(test_king, test_king_gt, check.attributes=FALSE)) + + # now test with missing data + test_na_gt <- gen_tibble(system.file("extdata/related/families.bed", package="tidypopgen"), quiet = TRUE, + backingfile = tempfile(), valid_alleles = c("1","2")) + test_na_fbm <- tidypopgen:::.gt_get_bigsnp(test_na_gt)$genotypes + test_na_king <- snp_king(test_na_fbm) + # king by hand + test_na_king_r <- king_r(show_genotypes(test_na_gt)) + expect_identical(test_na_king_r, test_na_king) + + # check that we get the same result if we split the operation into two blocks + test_na_king_2blocks <- snp_king(test_na_fbm, block.size = 300) + expect_identical(test_na_king_2blocks, test_na_king) + + +}) + +test_that("snp_king gives the same results as plink",{ + + #Create gentibble for our data + bed_path <- system.file("extdata/related/families.bed", package = "tidypopgen") + families_bigsnp_path <- bigsnpr::snp_readBed(bed_path, backingfile = tempfile()) #bigsnpr::sub_bed(bed_path) + #families_bigsnp_path <- system.file("extdata/related/families.rds", package = "tidypopgen") + families <- gen_tibble(families_bigsnp_path, quiet = TRUE, valid_alleles = c("1","2")) + + #Get snp_king results + families_fbm <- tidypopgen:::.gt_get_bigsnp(families)$genotypes + families_king <- snp_king(families_fbm) + + #Read in results from king -b families_k.bed --kinship + king <- read.table(system.file("extdata/related/test_king.kin0", package = "tidypopgen"),header = FALSE) + + #Create empty matrix + king_matrix <- matrix(nrow = 12, ncol = 12) + + #Fill matrix + for (i in 1:nrow(king)){ + + x <- as.numeric(king[i,2]) + y <- as.numeric(king[i,3]) + + king_matrix[x,y] <- king[i,8] + king_matrix[y,x] <- king[i, 8] + + } + + #Replace diagonal + diag(king_matrix) <- 0.5000 + + diff <- king_matrix - families_king + + result <- all.equal(king_matrix, families_king, tolerance = 0.06) + + #Check results are the same + expect_true(result) + }) + + diff --git a/vignettes/archive/example_workflow.Rmd b/vignettes/archive/example_workflow.Rmd deleted file mode 100644 index 9cf64e1e..00000000 --- a/vignettes/archive/example_workflow.Rmd +++ /dev/null @@ -1,151 +0,0 @@ ---- -title: "example workflow with tidypopgen" -output: rmarkdown::html_vignette - #pdf_document -vignette: > - %\VignetteIndexEntry{example_workflow} - %\VignetteEngine{knitr::rmarkdown} - %\VignetteEncoding{UTF-8} ---- - -```{r, include = FALSE} -knitr::opts_chunk$set( - collapse = TRUE, - comment = "#>" -) -``` - - -# Ideally redo this with a dataset that does have some intermediates (e.g. subset from the HGDP) - -## An example workflow with real data -We will us the example dataset from `vigsnpr`: -: -```{r} -library(tidypopgen) -library(bigsnpr) -bedfile <- system.file("extdata", "example.bed", package = "bigsnpr") -snp_file <- snp_readBed(bedfile, backingfile = tempfile()) -example_gt <- gen_tibble(snp_file) -``` - -Let us explore our table: -```{r} -example_gt -``` - -We can now explore the data a little bit. We could estimate observed heterozygosity: -```{r} -example_gt %>% group_by(population) %>% indiv_het_obs() -``` - - -That was easy. The loci had already been filtered and cleaned, so we don't need -to do any QC. Let us jump straight into analysis and run a PCA: -```{r} -example_pca <- example_gt %>% gt_pca() -``` - -We can get a quick summary of the resulting object: -```{r} -example_pca -``` - -Let us add the PC scores to our `gen_tibble`, and plot them: -```{r} -library(ggplot2) -example_pca %>% - augment( data = example_gt, k=2) %>% - ggplot(aes(.fittedPC1, .fittedPC2, color = population)) + - geom_point(size = 1.5) -``` -We can see that the population do separate nicely into 3 main groups on the PCA. - -# Explore population structure with DAPC - -DAPC is a powerful tool to investigate population structure. It has the advantage of -scaling well to very large datasets, and it does not have the assumptions of STRUCTURE or -ADMIXTURE (but that can also be a drawback). - -The first step is to determine the number of genetic clusters in the dataset. We will use -a k-clustering algorithm applied to the principal components (allowing us to reduce -the dimensions from the thousands of loci to just a few tens components). We need to decide how -many components to use; this decision is often made based on a plot of the cumulative -explained variance of the components. -Using `tidy` on the `gt_pca` object allows us easily obtain those quantities, and it is then -trivial to plot them: -```{r} -library(ggplot2) -tidy(example_pca,matrix="eigenvalues") %>% - ggplot(mapping =aes(x=PC, y=cumulative)) + - geom_point() - -``` - -Ideally, we are looking for the point where the curve starts flattening. As we only extracted -10 components (the default), we can see that the cumulative variance keeps increasing. We -have to go back and compute more components: -```{r} -example_pca <- example_gt %>% gt_pca(k=200) -``` - -And plot it again: -```{r} -library(ggplot2) -tidy(example_pca,matrix="eigenvalues") %>% - ggplot(mapping =aes(x=PC, y=cumulative)) + - geom_point() - -``` - -In this case, we can see that even with 200 components, we do not see a very clear flattening. Another -way to think about this is to consider the number of components that explain a large amount -of variation. We can get the number of components that explain at least 90% of variance with: -```{r} -tidy(example_pca,matrix="eigenvalues") %>% filter(cumulative<0.9) %>% nrow()+1 -``` - -Note that there isn't anything magical about 90%, and you might use another threshold. In -general, it is worth exploring the sensitivity of the results to any of these decisions. -For this analysis, we will go with 17 components: - -```{r} -example_clusters <- gt_pca_find_clusters(example_pca, n_pca = 165) -``` - -This object retains information about a large number of possible *k*. We can choose -the best k with `gt_pca_clust_choose_n()` (we will use the defaults, but there -are multiple statistics and criteria that we can use to choose *n*): -```{r} -example_clusters <- gt_pca_clust_best_k(example_clusters) -``` - -Now we can run a DAPC: -```{r eval=FALSE} -example_dapc <- gt_dapc(example_clusters) -``` - -Note that `gt_dapc()` takes automatically 3 clusters form the `example_clusters` object, -but can change that behaviour by setting some of its parameters (see the help -page for `gt_dapc()`). -`example_dapc` is of class `dapc`, so we can use the standard `adegenet` functions: -```{r eval=FALSE} -example_dapc -scatter(example_dapc) -``` -We can inspect the assignment by DAPC with `assignplot`, ordering the samples -by the original population label: -```{r eval=FALSE} -assignplot(example_dapc,subset=order(example_gt$population)) -``` - - -As one would expect from the clear separation in the PCA and DAPC scatterplots, -individuals are all fully assigned to a single cluster, with no individual with -mixed ancestry. - -```{r eval=FALSE} -compoplot(example_dapc, subset=order(example_gt$population), posi="bottomright", -txt.leg=paste("Cluster", 1:3), lab="", -ncol=2, xlab="individuals", col=funky(3)) -``` diff --git a/vignettes/archive/overview_old.Rmd b/vignettes/archive/overview_old.Rmd deleted file mode 100644 index 3028f6ef..00000000 --- a/vignettes/archive/overview_old.Rmd +++ /dev/null @@ -1,476 +0,0 @@ ---- -title: "overview" -output: rmarkdown::html_vignette - #pdf_document -vignette: > - %\VignetteIndexEntry{overview} - %\VignetteEngine{knitr::rmarkdown} - %\VignetteEncoding{UTF-8} ---- - -```{r, include = FALSE} -knitr::opts_chunk$set( - collapse = TRUE, - comment = "#>" -) -``` - -## tidy data in population genetics - -The fundamental tenet of tidy data that is that each observation should have its -own row and each variable its own column, such that each value has its own cell. -Applying this logic to population genetic data means that each individual should -have its own row, with individual metadata (such as its population, sex, phenotype, etc) -as the variables. Genotypes for each locus can also be thought as variables, however, due -to the large number of loci and the restricted values that each genotype can take, it would -be very inefficient to store them as individual standard columns. - -In `tidypopgen`, we represent data as a `gen_tbl`, a subclass of `tibble` which has -four compulsory columns: `id` of the individual (as a `character`, which must -be unique for each individual), `population` giving the population the -individuals belong to (a `factor`), and `genotypes` (stored in a compressed format -as a list, one -object per individual representing its genotypes for all loci). -In order to define the loci stored in the compressed objects in the `genotype` list, -we also require an additional tibble stored as the attribute `loci` to the column `genotypes`. -The `loci` tibble includes columns -`name` for the locus name (a `character`, which must be unique), `chromosome` for the chromosome (`a factor`, if known, -otherwise set to `NA`), `position` for the position on the chromosome (`numeric`, if known, -otherwise set to `NA`), `allele_ref` for the the reference allele (a character), -and `allele_alt` for the alternate allele (a character, which can be `NA` for -monomorphic loci). Additional individual metadata can be stored as columns in -the main `gen_tbl`, whilst additional loci information (such as the position in -centimorgans) can be added as columns in the `loci` attribute table. - -In principle, it is possible to use use multiple ways to compress the genotypes. -`tidypopgen` currently uses `SNPBin` from the package `adegenet`. It is very -memory efficient, and it is flexible in representing multiple ploidy. But the -infrastructure is present to adopt alternative compression approaches in the future -the only constraint is that the data have to be representable as a list of n elements -where n is the number of individuals (i.e. one object per individual). - -## The grammar of population genetics - -### The `gen_tibble` - -Given information about the individuals, their genotypes, and the loci: -```{r} -#library(tidypopgen) -library(vctrs) -example_indiv_meta <- data.frame (id=c("a","b","c"), - population = c("pop1","pop1","pop2")) -example_genotypes <- rbind(c(1, 1, 0, 1, 1, 0), - c(2, 0, 0, 0,NA, 0), - c(1, 2, 0, 0, 1, 1)) -example_loci <- data.frame(name=c("rs1","rs2","rs3","rs4","x1","x2"), - chromosome=c(1,1,1,1,2,2), - position=c(3,5,65,343,23,456), - allele_ref = c("a","t","c","g","c","t"), - allele_alt = c("t","c", NA,"c","g","a")) -``` - -We create a plink BED file: -```{r} -bed_prefix <- tempfile('test_data_') -gt_write_bed_from_dfs(example_genotypes, example_loci, example_indiv_meta, bed_prefix) -bed_path <- paste0(bed_prefix,".bed") - -``` - -We convert the BED file into a bigSNP file format (this will generate a backing file and an RDS file, -with prefix "test_bigfile_": -```{r} -bigsnp_path <- bigsnpr::snp_readBed(bed_path, backingfile = tempfile("test_bigfile_")) -``` - -We can create a simple `gen_tibble` object (of class `gen_tbl`) with -```{r} -example_gt <- gen_tibble(genotypes=bigsnp_path) -example_gt -``` -As discussed above, in this tibble, genotypes are stored as a list of -compressed `SNPbin` objects. - - -Note that, if we are passing a `gen_tibble` to a function that works on -genotypes, it is not necessary to pass the column `genotypes` in the call. -However, if such a function is used within a `dplyr` verb such as `mutate`, -we need to pass the `genotype` column to the function: - -```{r} -example_gt %>% mutate (ploidy = indiv_missingness(.data$genotypes)) -``` -Or, more simply: -```{r} -example_gt %>% mutate (ploidy = show_ploidy(genotypes)) -``` - -To retrieve the genotypes (which are compressed), we use: -```{r} -example_gt %>% show_genotypes() -``` - -If we want to extract the information about the loci for which we have genotypes -(which are stored as an attribute of that column), -we say: -```{r} -example_gt %>% show_loci() -``` - -## Standard `dplyr` verbs to manipulate the tibble - -The individual metadata can then be processed with the usual `tidiverse` grammar. -So, we can filter individuals by population with -```{r} -example_pop1 <- example_gt %>% filter (population=="pop1") -example_pop1 -``` - -There are a number of functions that compute population genetics quantities for each -individual, such as individual observed heterozygosity. We can compute them simply with: -```{r} -example_gt %>% ind_H_obs() -``` - -We can use `mutate` to add observed heterozygosity as a column to our -`gen_tibble` (again, note that functions that work on genotypes don't need -to be passed any arguments if the tibble is passed directly to them, but -the column `genotypes` has to be provided when they are used within -`dplyr` verbs such as `mutate`): -```{r} -example_gt %>% mutate(het_obs = ind_H_obs(genotypes)) -``` - -# Using verbs on loci - -Since the genotypes of the loci are stored as a compressed list in one column, -it is not possible to use standard `dplyr` verbs on them. However, `tidypopgen` provides -a number of specialised verbs, postfixed by `_loci`, to manipulate loci. - -A key operation on loci is their selection (and removal). The compressed nature -of genotypes imposes some constraints on the possible grammar. -For selection, there are two verbs: `select_loci` and `select_loci_if`. -`select_loci` understands the concise-minilanguage spoken by standard `dplyr::select` -that allows to easily refer to variables by their names. However, `select_loci` -criteria can not be based on the actual genotypes (e.g. on heterozygosity or -missingness). For that, we have to use `select_loci_if`, which can operate on the -genotypes but is blind to the names of loci. - -Let us start by looking at the loci names in our simple dataset: -```{r} -show_loci_names(example_gt) - -``` - -We can see that there are two categories of loci, one starting with "rs" and -the other with "x". If we wanted to select only loci that have an "rs" code, -we would use: -```{r} -example_sub <- example_gt %>% select_loci (starts_with("rs")) -example_sub -``` -This gives us a `gen_tibble` with only 4 loci, as expected. We can confirm that -we have the correct loci with: -```{r} -show_loci_names(example_sub) -``` - -We can also subset and reorder by passing indices (note that we extract the loci -information, but in reality we have reordered and subsetted the genotypes -for all individuals): -```{r} -example_gt %>% select_loci (c(2,6,1)) %>% show_loci() -``` -This operation could be helpful when merging datasets that do not fully -overlap on their loci (more on that later). - -The limit of `select_loci` is that it can not directly summarise the genotypes. -We can do that separately and then feed the result as a set of indices. For -example, we might want to impose a minimum minor allele frequency. -`loci_alt_freq()` allows us to inspect the frequencies in a `gen_tibble`: -```{r} -example_gt %>% loci_alt_freq() -``` - -We can now create a vector of indices of loci with a minimum allele frequency -(MAF) larger than 0.2, and use it to select: - -```{r} -sel_indices <- which((example_gt %>% loci_alt_freq())>0.2) -example_gt %>% select_loci (all_of(sel_indices)) %>% show_loci() -``` - -Note that passing a variable direclty to `select` is deprecated, and so we have -to use `all_of` to wrap it. - -`select_loci_if` allows us to avoid creating a temporary variable to store indices: - -```{r} -example_gt_sub <- example_gt %>% select_loci_if(loci_alt_freq(genotypes)>0.2) -example_gt_sub %>% show_genotypes() -``` - -Note that, as we need to tidy evaluate `loci_alt_freq` within the `select_loci_if` verb, -we need to provide it with the column that we want to use (even though it has -to be `genotypes`). Also note that, with `select_loci_if`, we can not reorder -the loci. - -`select_loci_if` is very flexible; for example, we could filter loci with a MAF -greater than 0.2 that are also on chromosome 2 - -We can use a similar approach to select only alleles on a given chromosome: -```{r} -example_gt %>% select_loci_if(show_loci(genotypes)$chromosome==2 & - loci_alt_freq(genotypes)>0.2) %>% show_loci() -``` - -Sometimes it is also of interest to use a particular type of allele (the minor or -the major) when representing gentoypes, either for specific analysis -or for exporting data. The representation -we have used so far is arbitrary, but we can use an additional feature of -`select_loci` and `select_loci_if` to swap the reference and alternate allele. -Both functions include a `.swap_arg` and a `.swap_if_arg`. We case use either -of those parameters to perform select-like operations that define which loci are -swapped. `.swap_arg` is equivalent to `select_loci` in using the `select` mini-grammar -on loci name (but it is blidn to genotype content), whilst `.swap_if_arg` works -like `select_loci_if` (having access to the genotyes but not the names). - -Let us look at the genotypes in our dataset: -```{r} -example_gt %>% show_genotypes() -``` - -We can see that they are a mix of major and minor allele counts. We can turn -them into minor allele counts simply with: -```{r} -example_gt %>% - select_loci(everything(), - .swap_if_arg = loci_alt_freq(genotypes, minor=FALSE)>0.5) %>% - show_genotypes() -``` - -Note that we use `minor=FALSE` in `loci_alt_freq` to get the raw frequencies (earlier, -we used the default `minor=TRUE` which returns the minor allele frequencies). In -this case we selected all loci (`everything`). Alternatively, we could -generate major allele frequencies only for SNPs with an `rs` code: - -```{r} -example_gt %>% - select_loci(starts_with("rs"), - .swap_if_arg = loci_alt_freq(genotypes, minor=FALSE)<0.5) %>% - show_genotypes() - -``` - -Or only select and simultaneously swap all alleles on chromosome 2 (not sure -why you would want to do that, but it illustrates another combination of selecting -and swapping criteria: -```{r} -example_gt %>% - select_loci_if(show_loci(genotypes)$chromosome==2, - .swap_if_arg = show_loci(genotypes)$chromosome==2) %>% - show_genotypes() -``` - -# Grouping individuals in populations - -In population genetics, we are generally interested in computing quantities that -describe groups of individuals (i.e. populations). Grouping can be used in a -number of ways. - -As a starting point, we can group by population and get pop sizes: -```{r} -example_gt %>% group_by(population) %>% tally() -``` - -For functions that return one result per individual (such as -`ind_H_obs` that we used before), we can use summarise, which returns a -new `tibble` with one line per population. For example, we can count the number of individuals -per population, as well as their mean heterozygosity with : -```{r} -example_gt %>% group_by(population) %>% - summarise(n= n(), mean_het = mean(ind_H_obs(genotypes))) -``` - -For functions that return a quantity per locus (e.g. `loci_alt_freq`), we can use - `group_by` together with `group_map` to apply such functions over populations: -```{r} -example_gt %>% group_by(population) %>% group_map(.f = ~loci_alt_freq(.x)) -``` - -For more details on the syntax of `group_map`, see its help page. Some -functions, such as `loci_alt_freq()`, also have a method for grouped tibbles that -allows an even easier syntax: - -```{r} -example_gt %>% group_by(population) %>% loci_alt_freq() -``` - -In reality, such grouped methods are nothing more than a wrapper for the -the appropriate `group_map` syntax, but they do make life a little bit simpler. - -Certain metrics and analysis are naturally defined by a grouped tibble, such as -distance metrics among populations. For example: - -```{r} -example_gt %>% group_by(population) %>% pop_pairwise_fst() - -``` - -# Reading and exporting data - -Currently, `tidypopgen` can read data only from PLINK raw files generated with -the flags `--include-alt` and `--recodeA`. - -```{r} -raw_path <- system.file("extdata/pop_a.raw", package = "tidypopgen") -map_path <- system.file("extdata/pop_a.map", package = "tidypopgen") -plink_gt <- read_plink_raw(file = raw_path, map_file = map_path) -plink_gt -``` - -It can export data in the same format. We will save the dataset to -a file in the temporary directory: -```{r} -out_file <- tempfile() -gt_write_plink(plink_gt, file = out_file) -``` - -This will write both a `.raw` file as well as a `.map` file - -Alternatively, we can write a plink `.ped` instead ofa `.raw` file with: -```{r} -gt_write_plink(plink_gt, file = out_file, plink_format = "ped") -``` - -It is also possible to convert back and from from `adegenet::genelight` objects, which are -well integrated into a number of existing packages to explore the data with, for example, PCA and -clustering, as well as a wealth of export possibilities. - -```{r} -plink_gl <- as_genlight(plink_gt) -plink_gl -``` -And back to `gen_tibble` (note that we have lost the additional metadata (such -as sex) which are not coded in `genlight` objects: -```{r} -plink_back_gt <- as_gen_tibble(plink_gl) -plink_back_gt - -``` - -Furthermore, it is possible to import vcf files via `vcfR`. If we have a `vcfR` -object, we can simply: -```{r} -library(vcfR) -data(vcfR_test) -vcf_gt <- as_gen_tibble(vcfR_test) -vcf_gt - -``` - -# Merging data - -Merging data from different sources is a common problem, especially in human population -genetics where there is a wealth of SNP chips available. In `tidypopgen`, merging is -enacted with an `rbind` operation between `gen_tibbles`. If the datasets have the same -loci, then the merge is trivial. If not, then it is necessary to subset to the same -loci, and ensure that the data are coded with the same reference and alternate -alleles (or swap if needed). Additionally, if data come from SNP chips, there is -the added complication that the strand is not always consistent, so it might also -be necessary to flip strand (in that case, ambiguous SNPs have to be filtered). -The `rbind` method for `gen_tibbles` has a number of parameters that allow us to -control the behaviour of the merge. - -Let us start by bringing in an additional dataset: -```{r} -raw_path2 <- system.file("extdata/pop_b.raw", package = "tidypopgen") -map_path2 <- system.file("extdata/pop_b.map", package = "tidypopgen") -plink_gt2 <- read_plink_raw(file = raw_path2, map_file = map_path2) -plink_gt2 -``` - -Here we are using very small datasets, but in real life, `rbind` operations -are very demanding. Before performing such an operation, we can run -`rbind_dry_run`: -```{r} -report <- rbind_dry_run(plink_gt, plink_gt2, flip_strand = TRUE, - remove_ambiguous = TRUE) -``` - -Note that, by default, `rbind` will NOT flip strand or remove ambiguous SNPs -(as they are only relevant when merging different SNP chips), -you need to set those options to TRUE if you want to use them. - -The report object contains details about why each locus was either kept -or removed, but usually the report is sufficient to make decisions on whether -we want to go ahead. If we are happy with the likely outcome, we can -proceed with the `rbind`: -```{r} -plink_merged <- rbind(plink_gt, plink_gt2, flip_strand = TRUE, - remove_ambiguous = TRUE) - -``` - -We can look at the subsetted loci (using the first population as reference to -determine the strand and order of alleles): -```{r} -plink_merged %>% show_loci() -``` - -# Population genetics analyses - -Besides using various metrics to describe populations, we often want to perform -more complex analyses, such as Principal Component Analysis or clustering. - -For example, we can ran a PCA with: - -```{r} -pca_merged <- plink_merged %>% gt_pca(nf=2) -pca_merged -``` -Objects outputted by different packages and analyese can be difficult to manipulate. -The package `broom` from the tidyverse offers methods -to easily extract information in form of tibbles ('tidy') and merge some of those outputs with the -original data (`augment`). -`tidypopgen` implements such methods for objects created from its functions. So, -we can tidy the results as we would do for a standard PCA object from `prcomp`. -So, we can get the eigen values with: -```{r} -tidy(pca_merged, matrix="eigenvalues") -``` - -And the scores for each individual: -```{r} -tidy(pca_merged) -``` - -We can also integrate the scores back into our original dataframe with `augment`. -Note that, for objects generated by `tidypopgen`: -```{r} -merged_with_scores<- augment(pca_merged , data= plink_merged) -merged_with_scores -``` -Note that, by default, `augment` methods implemented in `tidypopgen` drop the 'genotype' -column, as it greatly reduces the memory footpring of the object. This makes manipulating the data -for plotting less onerous. This behaviour can be changed by setting `drop_genotypes=FALSE` -in `augment`. - -We can then easily plot our data with: -```{r} -library(ggplot2) -merged_with_scores %>% ggplot(aes(.fittedPC1, .fittedPC2, color = population)) + - geom_point(size = 1.5) -``` -We can further customise the plot with the usual `ggplot` functions. - -Note that the `merged_pca` object has both class `gt_pca` and `glPca` (the class for PCA -from `genlight` objects from the `adegenet` package): -```{r} -class(pca_merged) -``` - -This means that we can also use all functions from the `adegenet` package for exploring the PCA. E.g.: -```{r} -scatter(pca_merged) -``` diff --git a/vignettes/archive/overview_old2.Rmd b/vignettes/archive/overview_old2.Rmd deleted file mode 100644 index c55eb848..00000000 --- a/vignettes/archive/overview_old2.Rmd +++ /dev/null @@ -1,438 +0,0 @@ ---- -title: "overview" -output: rmarkdown::html_vignette - #pdf_document -vignette: > - %\VignetteIndexEntry{overview} - %\VignetteEngine{knitr::rmarkdown} - %\VignetteEncoding{UTF-8} ---- - -```{r, include = FALSE} -knitr::opts_chunk$set( - collapse = TRUE, - comment = "#>" -) -``` - -## tidy data in population genetics - -The fundamental tenet of tidy data that is that each observation should have its -own row and each variable its own column, such that each value has its own cell. -Applying this logic to population genetic data means that each individual should -have its own row, with individual metadata (such as its population, sex, phenotype, etc) -as the variables. Genotypes for each locus can also be thought as variables, however, due -to the large number of loci and the restricted values that each genotype can take, it would -be very inefficient to store them as individual standard columns. - -In `tidypopgen`, we represent data as a `gen_tbl`, a subclass of `tibble` which has -four compulsory columns: `id` of the individual (as a `character`, which must -be unique for each individual), `population` giving the population the -individuals belong to (a `factor`), and `genotypes` (stored in a compressed format -as a list, one -object per individual representing its genotypes for all loci). -In order to define the loci stored in the compressed objects in the `genotype` list, -we also require an additional tibble stored as the attribute `loci` to the column `genotypes`. -The `loci` tibble includes columns -`name` for the locus name (a `character`, which must be unique), `chromosome` for the chromosome (`a factor`, if known, -otherwise set to `NA`), `position` for the position on the chromosome (`numeric`, if known, -otherwise set to `NA`), `allele_ref` for the the reference allele (a character), -and `allele_alt` for the alternate allele (a character, which can be `NA` for -monomorphic loci). Additional individual metadata can be stored as columns in -the main `gen_tbl`, whilst additional loci information (such as the position in -centimorgans) can be added as columns in the `loci` attribute table. - -In principle, it is possible to use use multiple ways to compress the genotypes. -`tidypopgen` currently uses `SNPBin` from the package `adegenet`. It is very -memory efficient, and it is flexible in representing multiple ploidy. But the -infrastructure is present to adopt alternative compression approaches in the future -the only constraint is that the data have to be representable as a list of n elements -where n is the number of individuals (i.e. one object per individual). - -## The grammar of population genetics - -### The `gen_tibble` - -Given information about the individuals, their genotypes, and the loci: -```{r} -library(tidypopgen) -example_indiv_meta <- data.frame (id=c("a","b","c","d","e"), - population = c("pop1","pop1","pop2","pop2","pop2")) -example_genotypes <- rbind(c(1, 1, 0, 1, 1, 0), - c(2, 0, 0, 0,NA, 0), - c(1, 2, 0, 0, 1, 1), - c(0, 2, 0, 1, 2, 1), - c(1, 1,NA, 2, 1, 0)) -example_loci <- data.frame(name=c("rs1","rs2","rs3","rs4","x1","x2"), - chromosome=c(1,1,1,1,2,2), - position=c(3,5,65,343,23,456), - allele_ref = c("a","t","c","g","c","t"), - allele_alt = c("t","c", NA,"c","g","a")) -``` - -We create a plink BED file: -```{r} -bed_prefix <- tempfile('test_data_') -gt_write_bed_from_dfs(example_genotypes, example_loci, example_indiv_meta, bed_prefix) -bed_path <- paste0(bed_prefix,".bed") - -``` - -We convert the BED file into a bigSNP file format (this will generate a backing file and an RDS file, -with prefix "test_bigfile_": -```{r} -bigsnp_path <- bigsnpr::snp_readBed(bed_path, backingfile = tempfile("test_bigfile_")) -``` - -We can create a simple `gen_tibble` object (of class `gen_tbl`) with -```{r} -example_gt <- gen_tibble(bigsnp_path) -example_gt -``` -As discussed above, in this tibble, genotypes are stored as a list of -compressed `SNPbin` objects. - - -Note that, if we are passing a `gen_tibble` to a function that works on -genotypes, it is not necessary to pass the column `genotypes` in the call. -However, if such a function is used within a `dplyr` verb such as `mutate`, -we need to pass the `genotype` column to the function: - -```{r} -example_gt %>% mutate (het_obs = indiv_het_obs(.data$genotypes)) -``` -Or, more simply: -```{r} -example_gt %>% mutate (het_obs = indiv_het_obs(genotypes)) -``` - -To retrieve the genotypes (which are compressed), we use: -```{r} -example_gt %>% show_genotypes() -``` - -If we want to extract the information about the loci for which we have genotypes -(which are stored as an attribute of that column), -we say: -```{r} -example_gt %>% show_loci() -``` - -## Standard `dplyr` verbs to manipulate the tibble - -The individual metadata can then be processed with the usual `tidiverse` grammar. -So, we can filter individuals by population with -```{r} -example_pop1 <- example_gt %>% filter (population=="pop2") -example_pop1 -``` - -There are a number of functions that compute population genetics quantities for each -individual, such as individual observed heterozygosity. We can compute them simply with: -```{r} -example_gt %>% indiv_het_obs() -``` - -Or after filtering: -```{r} -example_gt %>% filter (population=="pop2") %>% indiv_het_obs() - -``` - -We can use `mutate` to add observed heterozygosity as a column to our -`gen_tibble` (again, note that functions that work on genotypes don't need -to be passed any arguments if the tibble is passed directly to them, but -the column `genotypes` has to be provided when they are used within -`dplyr` verbs such as `mutate`): -```{r} -example_gt %>% mutate(het_obs = indiv_het_obs(genotypes)) -``` - -# Using verbs on loci - -Since the genotypes of the loci are stored as a compressed list in one column, -it is not possible to use standard `dplyr` verbs on them. However, `tidypopgen` provides -a number of specialised verbs, postfixed by `_loci`, to manipulate loci. - -A key operation on loci is their selection (and removal). The compressed nature -of genotypes imposes some constraints on the possible grammar. -For selection, there are two verbs: `select_loci` and `select_loci_if`. -`select_loci` understands the concise-minilanguage spoken by standard `dplyr::select` -that allows to easily refer to variables by their names. However, `select_loci` -criteria can not be based on the actual genotypes (e.g. on heterozygosity or -missingness). For that, we have to use `select_loci_if`, which can operate on the -genotypes but is blind to the names of loci. - -Let us start by looking at the loci names in our simple dataset: -```{r} -show_loci_names(example_gt) - -``` - -We can see that there are two categories of loci, one starting with "rs" and -the other with "x". If we wanted to select only loci that have an "rs" code, -we would use: -```{r} -example_sub <- example_gt %>% select_loci (starts_with("rs")) -example_sub -``` -This gives us a `gen_tibble` with only 4 loci, as expected. We can confirm that -we have the correct loci with: -```{r} -show_loci_names(example_sub) -``` - -Let us check that this has indeed impacted the individual heterozygosity -```{r} -example_sub %>% indiv_het_obs() -``` - -We can also subset and reorder by passing indices (note that we extract the loci -information, but in reality we have reordered and subsetted the genotypes -for all individuals): -```{r} -example_gt %>% select_loci (c(2,6,1)) %>% show_loci() -``` -This operation could be helpful when merging datasets that do not fully -overlap on their loci (more on that later). - -```{r} -example_gt %>% select_loci (c(2,6,1)) %>% show_genotypes() -``` - - -The limit of `select_loci` is that it can not directly summarise the genotypes. -We can do that separately and then feed the result as a set of indices. For -example, we might want to impose a minimum minor allele frequency. -`loci_alt_freq()` allows us to inspect the frequencies in a `gen_tibble`: -```{r} -example_gt %>% loci_alt_freq() -``` - -We can now create a vector of indices of loci with a minimum allele frequency -(MAF) larger than 0.2, and use it to select: - -```{r} -sel_indices <- which((example_gt %>% loci_alt_freq())>0.2) -example_gt %>% select_loci (all_of(sel_indices)) %>% show_loci() -``` - -Note that passing a variable direclty to `select` is deprecated, and so we have -to use `all_of` to wrap it. - -`select_loci_if` allows us to avoid creating a temporary variable to store indices: - -```{r} -example_gt_sub <- example_gt %>% select_loci_if(loci_alt_freq(genotypes)>0.2) -example_gt_sub %>% show_genotypes() -``` - -Note that, as we need to tidy evaluate `loci_alt_freq` within the `select_loci_if` verb, -we need to provide it with the column that we want to use (even though it has -to be `genotypes`). Also note that, with `select_loci_if`, we can not reorder -the loci. - -`select_loci_if` is very flexible; for example, we could filter loci with a MAF -greater than 0.2 that are also on chromosome 2 - -We can use a similar approach to select only alleles on a given chromosome: -```{r} -example_gt %>% select_loci_if(show_loci(genotypes)$chromosome==2 & - loci_alt_freq(genotypes)>0.2) %>% show_loci() -``` - - -# Grouping individuals in populations - -In population genetics, we are generally interested in computing quantities that -describe groups of individuals (i.e. populations). Grouping can be used in a -number of ways. - -As a starting point, we can group by population and get pop sizes: -```{r} -example_gt %>% group_by(population) %>% tally() -``` - -For functions that return one result per individual (such as -`ind_H_obs` that we used before), we can use summarise, which returns a -new `tibble` with one line per population. For example, we can count the number of individuals -per population, as well as their mean heterozygosity with : -```{r} -example_gt %>% group_by(population) %>% - summarise(n= n(), mean_het = mean(indiv_het_obs(genotypes))) -``` - - - -For functions that return a quantity per locus (e.g. `loci_alt_freq`), we can use - `group_by` together with `group_map` to apply such functions over populations: -```{r} -example_gt %>% group_by(population) %>% group_map(.f = ~loci_alt_freq(.x)) -``` - -For more details on the syntax of `group_map`, see its help page. Some -functions, such as `loci_alt_freq()`, also have a method for grouped tibbles that -allows an even easier syntax: - -```{r} -example_gt %>% group_by(population) %>% loci_alt_freq() -``` - -In reality, such grouped methods are nothing more than a wrapper for the -the appropriate `group_map` syntax, but they do make life a little bit simpler. - -Certain metrics and analysis are naturally defined by a grouped tibble, such as -distance metrics among populations. For example: - -```{r} -example_gt %>% group_by(population) %>% pop_pairwise_fst() -``` - -# Reading and exporting data - -Currently, `tidypopgen` can read data only from PLINK bed files. Plink has the -ability to convert a large number of formats. - -It can export data in the same format. We will save the dataset to -a file in the temporary directory: -```{r} -out_file <- tempfile() -gt_write_plink(plink_gt, file = out_file) -``` - -This will write both a `.raw` file as well as a `.map` file - -Furthermore, it is possible to import vcf files via `vcfR`. If we have a `vcfR` -object, we can simply: -```{r} -library(vcfR) -data(vcfR_test) -vcf_gt <- as_gen_tibble(vcfR_test) -vcf_gt - -``` - -# Merging data - -Merging data from different sources is a common problem, especially in human population -genetics where there is a wealth of SNP chips available. In `tidypopgen`, merging is -enacted with an `rbind` operation between `gen_tibbles`. If the datasets have the same -loci, then the merge is trivial. If not, then it is necessary to subset to the same -loci, and ensure that the data are coded with the same reference and alternate -alleles (or swap if needed). Additionally, if data come from SNP chips, there is -the added complication that the strand is not always consistent, so it might also -be necessary to flip strand (in that case, ambiguous SNPs have to be filtered). -The `rbind` method for `gen_tibbles` has a number of parameters that allow us to -control the behaviour of the merge. - -Let us start by bringing in an additional dataset: -```{r} -raw_path2 <- system.file("extdata/pop_b.raw", package = "tidypopgen") -map_path2 <- system.file("extdata/pop_b.map", package = "tidypopgen") -plink_gt2 <- read_plink_raw(file = raw_path2, map_file = map_path2) -plink_gt2 -``` - -Here we are using very small datasets, but in real life, `rbind` operations -are very demanding. Before performing such an operation, we can run -`rbind_dry_run`: -```{r} -report <- rbind_dry_run(plink_gt, plink_gt2, flip_strand = TRUE, - remove_ambiguous = TRUE) -``` - -Note that, by default, `rbind` will NOT flip strand or remove ambiguous SNPs -(as they are only relevant when merging different SNP chips), -you need to set those options to TRUE if you want to use them. - -The report object contains details about why each locus was either kept -or removed, but usually the report is sufficient to make decisions on whether -we want to go ahead. If we are happy with the likely outcome, we can -proceed with the `rbind`: -```{r} -plink_merged <- rbind(plink_gt, plink_gt2, flip_strand = TRUE, - remove_ambiguous = TRUE) - -``` - -We can look at the subsetted loci (using the first population as reference to -determine the strand and order of alleles): -```{r} -plink_merged %>% show_loci() -``` - -# Population genetics analyses - -Besides using various metrics to describe populations, we often want to perform -more complex analyses, such as Principal Component Analysis or clustering. - -For example, we can ran a PCA with: - -```{r} -pca_merged <- plink_merged %>% gt_pca(nf=2) -pca_merged -``` -Objects outputted by different packages and analyese can be difficult to manipulate. -The package `broom` from the tidyverse offers methods -to easily extract information in form of tibbles ('tidy') and merge some of those outputs with the -original data (`augment`). -`tidypopgen` implements such methods for objects created from its functions. So, -we can tidy the results as we would do for a standard PCA object from `prcomp`. -So, we can get the eigen values with: -```{r} -tidy(pca_merged, matrix="eigenvalues") -``` - -And the scores for each individual: -```{r} -tidy(pca_merged) -``` - -We can also integrate the scores back into our original dataframe with `augment`. -Note that, for objects generated by `tidypopgen`: -```{r} -merged_with_scores<- augment(pca_merged , data= plink_merged) -merged_with_scores -``` -Note that, by default, `augment` methods implemented in `tidypopgen` drop the 'genotype' -column, as it greatly reduces the memory footpring of the object. This makes manipulating the data -for plotting less onerous. This behaviour can be changed by setting `drop_genotypes=FALSE` -in `augment`. - -We can then easily plot our data with: -```{r} -library(ggplot2) -merged_with_scores %>% ggplot(aes(.fittedPC1, .fittedPC2, color = population)) + - geom_point(size = 1.5) -``` -We can further customise the plot with the usual `ggplot` functions. - -Note that the `merged_pca` object has both class `gt_pca` and `glPca` (the class for PCA -from `genlight` objects from the `adegenet` package): -```{r} -class(pca_merged) -``` - -This means that we can also use all functions from the `adegenet` package for exploring the PCA. E.g.: -```{r} -scatter(pca_merged) -``` - -# Obsolete - -# This will have to be reconsidered, as swapping alleles on a file based system is VERY intensive -# we can implement it as part of the merging, but not as something to do on the fly -Sometimes it is also of interest to use a particular type of allele (the minor or -the major) when representing gentoypes, either for specific analysis -or for exporting data. The representation -we have used so far is arbitrary, but we can use an additional feature of -`select_loci` and `select_loci_if` to swap the reference and alternate allele. -Both functions include a `.swap_arg` and a `.swap_if_arg`. We case use either -of those parameters to perform select-like operations that define which loci are -swapped. `.swap_arg` is equivalent to `select_loci` in using the `select` mini-grammar -on loci name (but it is blidn to genotype content), whilst `.swap_if_arg` works -like `select_loci_if` (having access to the genotyes but not the names). - - - - diff --git a/vignettes/example_clustering_and_dapc.Rmd b/vignettes/example_clustering_and_dapc.Rmd index 8c5bddcb..49923c39 100644 --- a/vignettes/example_clustering_and_dapc.Rmd +++ b/vignettes/example_clustering_and_dapc.Rmd @@ -27,11 +27,9 @@ We read in the data from the compressed vcf with: library(tidypopgen) vcf_path <- system.file("/extdata/anolis/punctatus_t70_s10_n46_filtered.recode.vcf.gz", package = "tidypopgen") -bed_path <- gt_vcf_to_bed(vcf_path, bed_path = tempfile("anolis_")) -anole_gt <- gen_tibble(bed_path) +anole_gt <- gen_tibble(vcf_path, quiet = TRUE, backingfile = tempfile("anolis_")) + ``` -Note that the `gt_vcf_to_bed` function reads the whole vcf in memory before writing -the bed, so it is only suitable for smallish datasets. Now let's inspect our `gen_tibble`: ```{r} @@ -184,7 +182,7 @@ not see a very clear flattening, but by PC 10 the increase in explained variance decelerated. We can now find clusters based on those 10 PCs: ```{r} -anole_clusters <- gt_pca_find_clusters(anole_pca, n_pca = 10) +anole_clusters <- gt_cluster_pca(anole_pca, n_pca = 10) ``` As we did not define the *k* values to explore, the default 1 to 5 was used (we @@ -200,13 +198,13 @@ with increasing k). However, we notice that there is a quick levelling off in the decrease in BIC at 3 clusters. Arguably, these are sufficient to capture the main structure (and that makes sense given what we saw in the PCA). We can also use a number of algorithmic approaches (based on the original `find.clusters()` function in `adegenet`) to choose the best *k* value -from this plot through `gt_pca_clust_best_k()`. We will use the defaults (BIC with "diffNgroup", -see the help page for `gt_pca_clust_best_k()` for a description of the various options): +from this plot through `gt_cluster_pca_best_k()`. We will use the defaults (BIC with "diffNgroup", +see the help page for `gt_cluster_pca_best_k()` for a description of the various options): ```{r} -anole_clusters <- gt_pca_clust_best_k(anole_clusters) +anole_clusters <- gt_cluster_pca_best_k(anole_clusters) ``` The algorithm confirms our choice. Note that this function simply adds an element -`$best_k` to the `gt_pca_clust` object: +`$best_k` to the `gt_cluster_pca` object: ```{r} anole_clusters$best_k ``` @@ -248,7 +246,7 @@ tidy(anole_dapc, matrix="eigenvalues") %>% ``` We can plot the scores with: -```{r} +```{r plot_scatter_dapc} autoplot(anole_dapc, type="scores") ``` @@ -291,7 +289,7 @@ scatter(anole_dapc, posi.da="bottomright") sNMF is a fast clustering algorithm which provides results similar to STRUCTURE and ADMIXTURE. We can run it directly form R. We have first to generate a file with our genotype data: ```{r} -geno_file <- gt_write_lea_geno(anole_gt) +geno_file <- gt_as_geno_lea(anole_gt) geno_file ``` diff --git a/vignettes/overview.Rmd b/vignettes/overview.Rmd index d51ad212..f1051853 100644 --- a/vignettes/overview.Rmd +++ b/vignettes/overview.Rmd @@ -184,7 +184,7 @@ genotypes but is blind to the names of loci. Let us start by looking at the loci names in our simple dataset: ```{r} -show_loci_names(example_gt) +loci_names(example_gt) ``` We can see that there are two categories of loci, one starting with "rs" and @@ -197,7 +197,7 @@ example_sub This gives us a `gen_tibble` with only 4 loci, as expected. We can confirm that we have the correct loci with: ```{r} -show_loci_names(example_sub) +loci_names(example_sub) ``` Let us check that this has indeed impacted the individual heterozygosity @@ -253,7 +253,7 @@ greater than 0.2 that are also on chromosome 2. We can use a similar approach to select only alleles on a given chromosome: ```{r} -example_gt %>% select_loci_if(show_loci(genotypes)$chromosome==2 & +example_gt %>% select_loci_if(loci_chromosomes(genotypes)==2 & loci_maf(genotypes)>0.2) %>% show_loci() ``` @@ -314,7 +314,7 @@ distance metrics among populations. For example: ```{r} # not reimplemented yet! -example_gt %>% group_by(population) %>% pop_pairwise_fst() +example_gt %>% group_by(population) %>% pairwise_pop_fst() ``` These type of functions are prefixed with `pop`. @@ -344,9 +344,11 @@ new_example_gt %>% show_genotypes() We can see that our genotypes were recovered correctly. As we saw at the beginning of this vignette, it is possible to create a `gen_tibble` with data -in data.frames and tibbles. We can use that function to wrangle data in various formats (including -from vcf files via `vcfR`), but more commonly SNP data are stored as PLINK bed files. -`gen_tibble` can directly read bed files: +in data.frames and tibbles. We can use that function to wrangle small datasets +in custom formats, but more commonly SNP data are stored as PLINK bed files or VCF files. +`gen_tibble` can directly read both types of files (including gzipped vcf files), we just need to provide the +path to file as the first argument of `gen_tibble`; for example, if we want to +read a PLINK bed file, we can simply use: ```{r} bed_path_pop_a <- system.file("extdata/pop_a.bed", package = "tidypopgen") @@ -358,13 +360,20 @@ path for the backing files, but in normal instances, we can simply omit the `backinfile` parameter, and the `.rds` and `.bk` file will be saved with the same name and path as the original `.bed` file. -We can also export data to a .bed file. Note that, from the main tibble, only information -on `id`, `population` and `sex` will be preserved (TODO think about the other elements -of a fam file): +We can also export data into various formats with the family of functions `gt_as_*()`. +Some functions, such as `gt_as_hierfstat()`, `gt_as_genind()` or `gt_as_genlight()` return +an object of the appropriate type; other functions, such as `gt_as_plink()` or `gt_as_geno_lea()` +write a file in the appropriate format, and return the name of that file on completion. +For example, to export to a PLINK .bed file, we simply use: + ```{r} -gt_write_plink(example_gt, bedfile = tempfile("new_bed_")) +gt_as_plink(example_gt, bedfile = tempfile("new_bed_")) ``` +This will also write a .bim and .fam file and save them together with the .bed file. +Note that, from the main tibble, only +on `id`, `population` and `sex` will be preserved in the .fam file. + # Merging data Merging data from different sources is a common problem, especially in human population diff --git a/vignettes/plink_cheatsheet.Rmd b/vignettes/plink_cheatsheet.Rmd new file mode 100644 index 00000000..e58ae56f --- /dev/null +++ b/vignettes/plink_cheatsheet.Rmd @@ -0,0 +1,112 @@ +--- +title: "plink cheatsheet" +output: rmarkdown::html_vignette + #pdf_document +vignette: > + %\VignetteIndexEntry{plink cheatsheet} + %\VignetteEngine{knitr::rmarkdown} + %\VignetteEncoding{UTF-8} +--- + +```{r setup, include = FALSE} +knitr::opts_chunk$set( + collapse = TRUE, + comment = "#>" +) +``` + +```{r, include = FALSE} +library(tidypopgen) +#Create gen_tibble for examples +bed_path <- system.file("extdata/pop_a.bed", package = "tidypopgen") +bigsnp_path <- bigsnpr::snp_readBed(bed_path, backingfile = tempfile()) +data <- gen_tibble(bigsnp_path, quiet = TRUE) +``` + +## File management and reading data: + +| PLINK | `tidypopgen` | +|-------------------------------|----------------------------------------------| +| --make-bed --out | `gt_as_plink(data, bedfile = my_file)` | +| --recode | (TODO? generate .ped and .raw again) | +| --allele1234 and --alleleACGT | See `gen_tibble()` parameter 'valid_alleles' | + +PLINK flags --update-alleles, --allele1234, and --alleleACGT, all alter the coding of alleles. In `tidypopgen`, valid alleles are supplied when reading in a `gen_tibble`. + +## Quality control: + +| PLINK | `tidypopgen` | +|------------|---------------------------------| +| --maf | `data %\>% loci_maf()` | +| --geno | `data %\>% loci_missingness()` | +| --mind | `data %\>% indiv_missingness()` | +| --hwe | `data %\>% loci_hwe()` | +| --het | `data %\>% indiv_het_obs()` | +| --distance | `data %\>% gt_ibs()` | + +To filter out variants in `tidypopgen`, in a similar way to PLINK flags such as --extract or --autosome, it is necessary to use the `gen_tibble` with `select_loci_if()`. For example: + +```{r} +data %>% select_loci_if(loci_chromosomes(genotypes) %in% c(1:22)) +``` + +will select autosomal loci in the same way as --autosome. Or alternatively: + +```{r} +my_snps <- c("rs4477212","rs3094315","rs3131972","rs12124819","rs11240777") + +data %>% select_loci_if(loci_names(genotypes) %in% my_snps) %>% show_loci() +``` + +will select loci from a previously defined set in the same way as --extract. + +Similarly, to filter out individuals, as might be performed with --keep in PLINK, requires using filter: + +```{r} +my_individuals <- c("GRC14300079", "GRC14300142", "GRC14300159") + +data %>% filter(id %in% my_individuals) +``` + +## Quality control for linkage + +Linkage is managed through clumping in `tidypopgen` with loci_ld_clump(). + +This option is similar to the --indep-pairwise flag in PLINK, but results in a more even distribution of loci when compared to LD pruning. + +To explore why clumping is preferable to pruning, see + +## Quality control for relatedness (KING) + +| KING | `tidypopgen` | +|-------------|-----------------------------| +| --kinship | `gt_king()` | +| --unrelated | `filter_high_relatedness()` | + +gt_king() implements the KING-robust estimator of kinship equivalent to --kinship in KING. To remove related individuals, instead of using --unrelated --degree, the user can pass the resulting kinship matrix and a relatedness threshold to filter_high_relatedness, which will return the largest possible set of unrelated individuals. + +## Merging datasets: + +| PLINK | `tidypopgen` | +|-------------|--------------------------------------------------------| +| --bmerge | `rbind()` | +| --flip-scan | `rbind_dry_run()` | +| --flip | use 'flip_stran=TRUE' in `rbind()` | + +In PLINK, data merging can fail due to strand inconsistencies that are not addressed prior to merging. PLINK documentation suggests to users to try a 'trial flip' of data to address this, and then to 'unflip' any errors that remain. In `tidypopgen`, when data are merged with rbind, strand inconsistencies are identified and automatically flipped, avoiding multiple rounds of flipping before merging. + +PLINK does allow users to identify inconsistencies prior to merging with --flip-scan, and this functionality is included in the `tidypopgen` rbind_dry_run(). rbind_dry_run() reports the numeric overlap of datasets, alongside the number of SNPs to 'flip' in the new target dataset, as well as the number of ambiguous SNPs. + +Data are only merged one set at a time, there is no equivalent to --merge-list. + +## Analysis: + +| PLINK | `tidypopgen` | +|-----------|------------------------------------| +| --pca | See gt_pca() for pca options | +| --fst | pairwise_pop_fst() with group_by() | +| --homozyg | gt_roh_window() | + + + + diff --git a/vignettes/qc.Rmd b/vignettes/qc.Rmd new file mode 100644 index 00000000..94eba1b9 --- /dev/null +++ b/vignettes/qc.Rmd @@ -0,0 +1,183 @@ +--- +title: "QC" +output: rmarkdown::html_vignette + +vignette: > + %\VignetteIndexEntry{QC} + %\VignetteEngine{knitr::rmarkdown} + %\VignetteEncoding{UTF-8} +--- + +```{r setup, include=FALSE} +knitr::opts_chunk$set(echo = TRUE) +library(ggplot2) +``` + +# Quality control for SNP datasets + +tidypopgen has two key functions to examine the quality of data across loci and across individuals: `qc_report_loci` and `qc_report_indiv`. This vignette uses a simulated data set to illustrate these methods of data cleaning. + +# Read data into gen_tibble format + +```{r} +library(tidypopgen) +data <- gen_tibble(system.file("extdata/related/families.bed", package="tidypopgen"), quiet = TRUE, backingfile = tempfile(), valid_alleles = c("1","2")) +``` + +# Quality control for loci + +```{r} +loci_report <- qc_report_loci(data) +summary(loci_report) +``` + +The output of `qc_report_loci` supplies minor allele frequency, rate of missingness, and a Hardy-Weinberg exact p-value for each SNP. These data can be visualised in autoplot : + +```{r} +autoplot(loci_report, type = "overview") +``` + +The overview plot shows how many SNPs in the data set are affected by high missingness, with some also affected by low minor allele frequency and Hardy-Weinberg disequilibrium. The thresholds for each parameter, (level of missingness that is accepted etc) can be adjusted using the parameters provided in autoplot. For example: + +```{r} +autoplot(loci_report, type = "overview", miss_threshold = 0.03, maf_threshold = 0.02, hwe_p = 0.01) +``` + +To examine each QC measure in further detail, we can plot a different summary panel. + +```{r} +autoplot(loci_report, type = "all", miss_threshold = 0.03, maf_threshold = 0.02, hwe_p = 0.01) +``` + +We can then begin to consider how to quality control this raw data set. Let's start by filtering SNPs according to their minor allele frequency. We can visualise the MAF distribution using: + +```{r} +autoplot(loci_report, type = "maf") +``` + +Here we can see there are many monomorphic SNPs in the data set. Let's filter out loci with a minor allele frequency lower than 2%, by using `select_loci_if`. Here, we select all SNPs with a MAF greater than 2%. This operation is equivalent to plink --maf 0.02. + +```{r} +data <- data %>% select_loci_if(loci_maf(genotypes)>0.02) +count_loci(data) +``` + +Following this, we can remove SNPs with a high rate of missingness. Lets say we want to remove SNPs that are missing in more than 5% of individuals, equivalent to using plink --geno 0.05 + +```{r} +autoplot(loci_report, type = "missing",miss_threshold = 0.05) +``` + +We can see here that most SNPs have low missingness, under our 5% threshold, some do, however, have missingness over our kings_threshold. To remove these SNPs, we can again use `select_loci_if`. + +```{r} +data <- data %>% select_loci_if(loci_missingness(genotypes)<0.05) +count_loci(data) +``` + +Finally, if we may want to remove SNPs that show significant deviation from Hardy-Weinberg equilibrium, if our study design requires. To visualise SNPs with significant p-values in the Hardy-Weinberg exact test, we can again call autoplot: + +```{r} +autoplot(loci_report,type = "significant hwe", hwe_p = 0.01) +``` + +Few SNPs in our data have significant HWE p-values, however there may be circumstances where we would want to cut out the most extreme cases, if these data were real, these cases could indicate genotyping errors. + +```{r} +data <- data %>% select_loci_if(loci_hwe(genotypes)>0.01) +count_loci(data) + +``` + +Once we have quality controlled the SNPs in our data, we can turn to individual samples. + +#Quality control for individuals + +```{r} +individual_report <- qc_report_indiv(data) +summary(individual_report) +``` + +The output of `qc_report_loci` supplies observed heterozygosity per individual, and rate of missingness per individual as standard. + +These data can also be visualised using autoplot: + +```{r} +autoplot(individual_report) +``` + +Here we can see that most individuals have low missingness. If we wanted to filter individuals to remove those with more than 3% of their genotypes missing, we can use `filter`. + +```{r} +data <- data %>% filter(indiv_missingness(genotypes)<0.03) +nrow(data) +``` + +And if we wanted to remove outliers with particularly high or low heterozygosity, we can again do so by using `filter`. Here we remove observations that lie more than 3 standard deviations from the mean. + +```{r} +mean_val <- mean(individual_report$het_obs) +sd_val <- stats::sd(individual_report$het_obs) + +lower <- mean_val - 3*(sd_val) +upper <- mean_val + 3*(sd_val) + +data <- data %>% filter(indiv_het_obs(genotypes) > lower) +data <- data %>% filter(indiv_het_obs(genotypes) < upper) +nrow(data) +``` + +Next, we can look at relatedness within our sample. If the parameter `kings_threshold` is provided to `qc_report_indiv()`, then the report also calculates KING coefficient of relatedness of the sample. This threshold is used to create an output of the largest possible group with no related individuals, and the third boolean column `to_keep` recommends which individuals to remove to achieve this set. + +```{r} +individual_report <- qc_report_indiv(data, kings_threshold = 0.177) +summary(individual_report) +``` + +We can remove the recommended individuals by using: + +```{r} +data <- data %>% filter(id %in% individual_report$id & individual_report$to_keep == TRUE) +``` + +We can now view a summary of our cleaned data set again, showing that our data has reduced from 12 to 10 individuals. + +```{r} +summary(data) +``` + +# Linkage Disequilibrium + +For further analyses, it may be necessary to control for linkage in the data set. tidypopgen provides LD clumping. This option is similar to the --indep-pairwise flag in plink, but results in a more even distribution of loci when compared to LD pruning. + +To explore why clumping is preferable to pruning, see + +LD clumping requires a data set with no missingness. This means we need to create an imputed data set before LD pruning, which we can do quickly with `gt_impute_simple`. + +```{r} +imputed_data <- gt_impute_simple(data, method = "random") +``` + +In this example, if we want to remove SNPs with a correlation greater than 0.2 in windows of 10 SNPs at a time, we can set these parameters with `thr_r2` and `size` respectively. + +```{r} +to_keep_LD <- loci_ld_clump(imputed_data, thr_r2 = 0.2, size = 10) +``` + +`loci_ld_clump` then provides an output list of SNPs to keep in our data set. We can then use this list to create a pruned version of our data: + +```{r} +ld_data <- imputed_data %>% select_loci_if(loci_ld_clump(genotypes, thr_r2 = 0.2, size = 10)) +``` + + +# Save + +The benefit of operating on a `gen_tibble` is that each quality control step can be observed visually, and easily reversed if necessary. + +When we are happy with the quality of our data, we can create and save a final quality controlled version of our `gen_tibble` using `gt_save`. + +```{r} +gt_save(ld_data, file_name = tempfile()) +``` +