[med-svn] [plink1.9] 01/05: New upstream version 1.90~b5.2-180109

Dylan Aïssi bob.dybian-guest at moszumanska.debian.org
Fri Jan 12 23:03:00 UTC 2018


This is an automated email from the git hooks/post-receive script.

bob.dybian-guest pushed a commit to branch master
in repository plink1.9.

commit f45c5633d64d1ed996773220b5d342537f5fdf8e
Author: Dylan Aïssi <bob.dybian at gmail.com>
Date:   Fri Jan 12 23:43:10 2018 +0100

    New upstream version 1.90~b5.2-180109
---
 plink.c         | 18 ++++++++++--------
 plink_assoc.c   | 18 ++++++------------
 plink_assoc.h   |  2 +-
 plink_calc.c    | 10 +++++-----
 plink_cluster.c |  4 ++--
 plink_cnv.c     |  2 +-
 plink_cnv.h     |  2 +-
 plink_common.c  |  2 +-
 plink_common.h  |  2 +-
 plink_data.c    |  2 +-
 plink_data.h    |  2 +-
 plink_dosage.c  |  8 ++++----
 plink_dosage.h  |  2 +-
 plink_family.c  |  6 +++---
 plink_family.h  |  2 +-
 plink_filter.c  |  8 ++++----
 plink_filter.h  |  2 +-
 plink_glm.c     | 16 ++++++++--------
 plink_glm.h     |  2 +-
 plink_help.c    |  2 +-
 plink_help.h    |  2 +-
 plink_homozyg.c |  5 ++---
 plink_homozyg.h |  2 +-
 plink_lasso.c   |  2 +-
 plink_lasso.h   |  2 +-
 plink_ld.c      |  2 +-
 plink_ld.h      |  2 +-
 plink_matrix.c  | 10 +++++-----
 plink_matrix.h  |  2 +-
 plink_misc.c    | 58 +++++++++++++++++++++++++++++++++++++++++++++------------
 plink_misc.h    |  2 +-
 plink_perm.c    |  2 +-
 plink_perm.h    |  3 ++-
 plink_rserve.c  |  4 ++--
 plink_rserve.h  |  2 +-
 plink_set.c     |  8 ++++----
 plink_set.h     |  2 +-
 plink_stats.c   |  6 +++---
 plink_stats.h   |  2 +-
 39 files changed, 130 insertions(+), 100 deletions(-)

diff --git a/plink.c b/plink.c
index 9a9e57c..26dc541 100644
--- a/plink.c
+++ b/plink.c
@@ -1,4 +1,4 @@
-// This file is part of PLINK 1.90, copyright (C) 2005-2017 Shaun Purcell,
+// This file is part of PLINK 1.90, copyright (C) 2005-2018 Shaun Purcell,
 // Christopher Chang.
 //
 // This program is free software: you can redistribute it and/or modify
@@ -93,7 +93,7 @@
 
 static const char ver_str[] =
 #ifdef STABLE_BUILD
-  "PLINK v1.90b5"
+  "PLINK v1.90b5.2"
 #else
   "PLINK v1.90p"
 #endif
@@ -105,12 +105,12 @@ static const char ver_str[] =
 #else
   " 32-bit"
 #endif
-  " (14 Nov 2017)";
+  " (9 Jan 2018)";
 static const char ver_str2[] =
   // include leading space if day < 10, so character length stays the same
-  ""
+  " "
 #ifdef STABLE_BUILD
-  "   " // (don't want this when version number has a trailing letter)
+  " " // (don't want this when version number has two trailing digits)
 #else
   "    " // (don't want this when version number has e.g. "b3" before "p")
 #endif
@@ -118,7 +118,7 @@ static const char ver_str2[] =
   "  "
 #endif
   "        www.cog-genomics.org/plink/1.9/\n"
-  "(C) 2005-2017 Shaun Purcell, Christopher Chang   GNU General Public License v3"
+  "(C) 2005-2018 Shaun Purcell, Christopher Chang   GNU General Public License v3"
 #if SPECIES_DEFAULT > 0
   "\nRecompiled with default species = "
   #if SPECIES_DEFAULT == SPECIES_COW
@@ -1441,7 +1441,7 @@ int32_t plink(char* outname, char* outname_end, char* bedname, char* bimname, ch
     } else {
       LOGPRINTFWW("%" PRIuPTR " variant%s filters and QC.\n", marker_ct, (marker_ct == 1)? " passes" : "s pass");
     }
-  } else if (!allow_no_variants) {
+  } else if ((!allow_no_variants) && ((calculation_type & (~CALC_ONLY_FAM)) || (filter_flags & FILTER_BIM_REQ))) {
     // defensive
     logerrprint("Error: No variants remaining.\n");
     goto plink_ret_ALL_MARKERS_EXCLUDED;
@@ -2001,8 +2001,10 @@ int32_t plink(char* outname, char* outname_end, char* bedname, char* bimname, ch
 	    pheno_d = nullptr;
 	  }
 	}
-	uii++;
+        // bugfix (9 Jan 2018): forgot to increment phenotype index when
+        // skipping empty pheno
       plink_skip_empty_pheno:
+	uii++;
 	rewind(phenofile);
 	outname_end[1] = '\0';
 	retval = load_pheno(phenofile, unfiltered_sample_ct, sample_exclude_ct, cptr, max_sample_id_len, uiptr, missing_pheno, (misc_flags / MISC_AFFECTION_01) & 1, uii, nullptr, pheno_nm, &pheno_c, &pheno_d, &(outname_end[1]), (uintptr_t)((&(outname[FNAMESIZE - 32])) - outname_end));
diff --git a/plink_assoc.c b/plink_assoc.c
index 8679ab0..08651fd 100644
--- a/plink_assoc.c
+++ b/plink_assoc.c
@@ -1,4 +1,4 @@
-// This file is part of PLINK 1.90, copyright (C) 2005-2017 Shaun Purcell,
+// This file is part of PLINK 1.90, copyright (C) 2005-2018 Shaun Purcell,
 // Christopher Chang.
 //
 // This program is free software: you can redistribute it and/or modify
@@ -497,21 +497,15 @@ int32_t multcomp(char* outname, char* outname_end, uint32_t* marker_uidxs, uintp
 	}
       }
       // avoid catastrophic cancellation for small p-values
-      // 1 - (1-p)^c = 1 - (1 - cp + (c(c-1) / 2)p^2 + ...)
-      //             = cp - (c(c-1) / 2)p^2 + [stuff smaller than (c^3p^3)/6]
-      // current threshold is chosen to ensure at least 4 digits of precision
-      // in (1 - pval) if pow() is used, since 4 significant digits are printed
-      // in the .adjusted file.  but in theory we should take dct into account
-      // too: small dct lets us use a higher threshold.
-      if (pval >= RECIP_2_53 * 16384) {
+      // 1 - (1-p)^c = 1 - e^{c log(1-p)}
+      // 2^{-7} threshold is arbitrary
+      if (pval >= 0.0078125) {
 	pv_sidak_ss = 1 - pow(1 - pval, dct);
 	dyy = 1 - pow(1 - pval, dct - ((double)((int32_t)cur_idx)));
       } else {
-	// for very large dct, we might want to include the p^3 term of the
-	// binomial expansion as well
-	pv_sidak_ss = pval * (dct - pval * (dct - 1));
+	pv_sidak_ss = 1 - exp(dct * log1p(-pval));
 	dyy = dct - (double)((int32_t)cur_idx);
-	dyy = pval * (dyy - pval * (dyy - 1));
+	dyy = 1 - exp(dyy * log1p(-pval));
       }
       if (pv_sidak_sd < dyy) {
 	pv_sidak_sd = dyy;
diff --git a/plink_assoc.h b/plink_assoc.h
index c208e00..491f060 100644
--- a/plink_assoc.h
+++ b/plink_assoc.h
@@ -1,7 +1,7 @@
 #ifndef __PLINK_ASSOC_H__
 #define __PLINK_ASSOC_H__
 
-// This file is part of PLINK 1.90, copyright (C) 2005-2017 Shaun Purcell,
+// This file is part of PLINK 1.90, copyright (C) 2005-2018 Shaun Purcell,
 // Christopher Chang.
 //
 // This program is free software: you can redistribute it and/or modify
diff --git a/plink_calc.c b/plink_calc.c
index 868617a..606819f 100644
--- a/plink_calc.c
+++ b/plink_calc.c
@@ -1,4 +1,4 @@
-// This file is part of PLINK 1.90, copyright (C) 2005-2017 Shaun Purcell,
+// This file is part of PLINK 1.90, copyright (C) 2005-2018 Shaun Purcell,
 // Christopher Chang.
 //
 // This program is free software: you can redistribute it and/or modify
@@ -3255,7 +3255,7 @@ int32_t calc_regress_pcs(char* evecname, uint32_t regress_pcs_modifier, uint32_t
   if (alloc_collapsed_haploid_filters(sample_exclude, sex_male, unfiltered_sample_ct, sample_ct, hh_exists, 0, &sample_include2, &sample_male_include2)) {
     goto calc_regress_pcs_ret_NOMEM;
   }
-  
+
   // try unaltered filename.  If that fails and the unaltered filename didn't
   // have an .evec or .eigenvec extension, then also try appending .evec and
   // appending .eigenvec.
@@ -5563,7 +5563,7 @@ int32_t do_rel_cutoff(uint64_t calculation_type, double rel_cutoff, double* rel_
   int32_t kk;
   int32_t mm;
   int32_t retval;
-  
+
   // Algorithm:
   // - Whenever there is at least one sample with exactly one remaining
   //   too-close relation, prune the other side of that relationship, because
@@ -5786,7 +5786,7 @@ uint32_t rel_cutoff_batch_emitn(uint32_t overflow_ct, unsigned char* readbuf) {
       fflush(stdout);
     }
     col = 0;
-  }  
+  }
  rel_cutoff_batch_emitn_ret:
   g_rcb_row = row;
   g_rcb_col = col;
@@ -5868,7 +5868,7 @@ uint32_t rel_cutoff_batch_rbin_emitn(uint32_t overflow_ct, unsigned char* readbu
       fflush(stdout);
     }
     col = 0;
-  }  
+  }
  rel_cutoff_batch_rbin_emitn_ret:
   g_rcb_row = row;
   g_rcb_col = col;
diff --git a/plink_cluster.c b/plink_cluster.c
index 28f27ab..8a240bd 100644
--- a/plink_cluster.c
+++ b/plink_cluster.c
@@ -1,4 +1,4 @@
-// This file is part of PLINK 1.90, copyright (C) 2005-2017 Shaun Purcell,
+// This file is part of PLINK 1.90, copyright (C) 2005-2018 Shaun Purcell,
 // Christopher Chang.
 //
 // This program is free software: you can redistribute it and/or modify
@@ -1510,7 +1510,7 @@ int32_t cluster_enforce_match(Cluster_info* cp, int32_t missing_pheno, uintptr_t
   if (retval) {
     goto cluster_enforce_match_ret_1;
   }
-  
+
   bigstack_mark2 = g_bigstack_base;
   g_textbuf[MAXLINELEN - 1] = ' ';
   if (cp->match_fname) {
diff --git a/plink_cnv.c b/plink_cnv.c
index 2bde162..76867d0 100644
--- a/plink_cnv.c
+++ b/plink_cnv.c
@@ -1,4 +1,4 @@
-// This file is part of PLINK 1.90, copyright (C) 2005-2017 Shaun Purcell,
+// This file is part of PLINK 1.90, copyright (C) 2005-2018 Shaun Purcell,
 // Christopher Chang.
 //
 // This program is free software: you can redistribute it and/or modify
diff --git a/plink_cnv.h b/plink_cnv.h
index fcb7a0e..81b3777 100644
--- a/plink_cnv.h
+++ b/plink_cnv.h
@@ -1,7 +1,7 @@
 #ifndef __PLINK_CNV_H__
 #define __PLINK_CNV_H__
 
-// This file is part of PLINK 1.90, copyright (C) 2005-2017 Shaun Purcell,
+// This file is part of PLINK 1.90, copyright (C) 2005-2018 Shaun Purcell,
 // Christopher Chang.
 //
 // This program is free software: you can redistribute it and/or modify
diff --git a/plink_common.c b/plink_common.c
index 7854f6c..d3ea1d9 100644
--- a/plink_common.c
+++ b/plink_common.c
@@ -1,4 +1,4 @@
-// This file is part of PLINK 1.90, copyright (C) 2005-2017 Shaun Purcell,
+// This file is part of PLINK 1.90, copyright (C) 2005-2018 Shaun Purcell,
 // Christopher Chang.
 //
 // This program is free software: you can redistribute it and/or modify
diff --git a/plink_common.h b/plink_common.h
index ee22f8f..0704d0b 100644
--- a/plink_common.h
+++ b/plink_common.h
@@ -1,7 +1,7 @@
 #ifndef __PLINK_COMMON_H__
 #define __PLINK_COMMON_H__
 
-// This file is part of PLINK 1.90, copyright (C) 2005-2017 Shaun Purcell,
+// This file is part of PLINK 1.90, copyright (C) 2005-2018 Shaun Purcell,
 // Christopher Chang.
 //
 // This program is free software: you can redistribute it and/or modify
diff --git a/plink_data.c b/plink_data.c
index 7c289f4..b42ae19 100644
--- a/plink_data.c
+++ b/plink_data.c
@@ -1,4 +1,4 @@
-// This file is part of PLINK 1.90, copyright (C) 2005-2017 Shaun Purcell,
+// This file is part of PLINK 1.90, copyright (C) 2005-2018 Shaun Purcell,
 // Christopher Chang.
 //
 // This program is free software: you can redistribute it and/or modify
diff --git a/plink_data.h b/plink_data.h
index 502bbe3..860a882 100644
--- a/plink_data.h
+++ b/plink_data.h
@@ -1,7 +1,7 @@
 #ifndef __PLINK_DATA_H__
 #define __PLINK_DATA_H__
 
-// This file is part of PLINK 1.90, copyright (C) 2005-2017 Shaun Purcell,
+// This file is part of PLINK 1.90, copyright (C) 2005-2018 Shaun Purcell,
 // Christopher Chang.
 //
 // This program is free software: you can redistribute it and/or modify
diff --git a/plink_dosage.c b/plink_dosage.c
index 6c7042e..0532f5a 100644
--- a/plink_dosage.c
+++ b/plink_dosage.c
@@ -1,4 +1,4 @@
-// This file is part of PLINK 1.90, copyright (C) 2005-2017 Shaun Purcell,
+// This file is part of PLINK 1.90, copyright (C) 2005-2018 Shaun Purcell,
 // Christopher Chang.
 //
 // This program is free software: you can redistribute it and/or modify
@@ -98,7 +98,7 @@ int32_t dosage_load_score_files(Score_info* sc_ip, char* outname, char* outname_
   if (retval) {
     goto dosage_load_score_files_ret_1;
   }
-  
+
   if (sc_ip->varid_col < sc_ip->allele_col) {
     first_col_m1 = sc_ip->varid_col;
     varid_idx = 0;
@@ -307,7 +307,7 @@ int32_t dosage_load_score_files(Score_info* sc_ip, char* outname, char* outname_
     if (is_eoln_kns(*bufptr)) {
       goto dosage_load_score_files_next3;
     }
-  }  
+  }
   if (fclose_null(&infile)) {
     goto dosage_load_score_files_ret_READ_FAIL;
   }
@@ -1947,7 +1947,7 @@ int32_t plink1_dosage(Dosage_info* doip, char* famname, char* mapname, char* out
 	      is_valid = glm_linear_dosage(sample_ct, cur_samples, sample_valid_ct, pheno_nm_collapsed, pheno_d_collapsed, perm_fails, covar_ct, covar_d, cur_dosages, pheno_d2, covars_cov_major_buf, covars_sample_major_buf, param_2d_buf, mi_buf, param_2d_buf2, regression_results, dgels_a, dgels_b, dgels_work, dgels_lwork, standard_beta, glm_vif_thresh, &beta, &se, &pval);
 	      if (is_valid == 2) {
 		// NOMEM special case
-		goto plink1_dosage_ret_NOMEM;              
+		goto plink1_dosage_ret_NOMEM;
 	      }
 	    } else {
 #endif
diff --git a/plink_dosage.h b/plink_dosage.h
index 605756c..1eab5de 100644
--- a/plink_dosage.h
+++ b/plink_dosage.h
@@ -1,7 +1,7 @@
 #ifndef __PLINK_DOSAGE_H__
 #define __PLINK_DOSAGE_H__
 
-// This file is part of PLINK 1.90, copyright (C) 2005-2017 Shaun Purcell,
+// This file is part of PLINK 1.90, copyright (C) 2005-2018 Shaun Purcell,
 // Christopher Chang.
 //
 // This program is free software: you can redistribute it and/or modify
diff --git a/plink_family.c b/plink_family.c
index b7bbb44..69befaa 100644
--- a/plink_family.c
+++ b/plink_family.c
@@ -1,4 +1,4 @@
-// This file is part of PLINK 1.90, copyright (C) 2005-2017 Shaun Purcell,
+// This file is part of PLINK 1.90, copyright (C) 2005-2018 Shaun Purcell,
 // Christopher Chang.
 //
 // This program is free software: you can redistribute it and/or modify
@@ -4356,7 +4356,7 @@ int32_t dfam(pthread_t* threads, FILE* bedfile, uintptr_t bed_offset, char* outn
     }
     g_perm_is_1bit = 1;
   }
-  
+
   fputs("0%", stdout);
   fflush(stdout);
   // ----- begin main loop -----
@@ -4924,7 +4924,7 @@ int32_t dfam(pthread_t* threads, FILE* bedfile, uintptr_t bed_offset, char* outn
     LOGPRINTFWW("Permutation test report written to %s .\n", outname);
   }
   // ...
-  
+
   while (0) {
   dfam_ret_NOMEM:
     retval = RET_NOMEM;
diff --git a/plink_family.h b/plink_family.h
index b1569e3..7e42642 100644
--- a/plink_family.h
+++ b/plink_family.h
@@ -1,7 +1,7 @@
 #ifndef __PLINK_FAMILY_H__
 #define __PLINK_FAMILY_H__
 
-// This file is part of PLINK 1.90, copyright (C) 2005-2017 Shaun Purcell,
+// This file is part of PLINK 1.90, copyright (C) 2005-2018 Shaun Purcell,
 // Christopher Chang.
 //
 // This program is free software: you can redistribute it and/or modify
diff --git a/plink_filter.c b/plink_filter.c
index aa63b5a..6afd2a0 100644
--- a/plink_filter.c
+++ b/plink_filter.c
@@ -1,4 +1,4 @@
-// This file is part of PLINK 1.90, copyright (C) 2005-2017 Shaun Purcell,
+// This file is part of PLINK 1.90, copyright (C) 2005-2018 Shaun Purcell,
 // Christopher Chang.
 //
 // This program is free software: you can redistribute it and/or modify
@@ -454,7 +454,7 @@ int32_t filter_attrib(char* fname, char* condition_str, uint32_t* id_htable, uin
   uint32_t item_uidx;
   uint32_t pos_match_needed;
   int32_t sorted_idx;
-  
+
   if (bigstack_alloc_ul(unfiltered_ctl, &exclude_arr_new) ||
       bigstack_calloc_ul(unfiltered_ctl, &already_seen)) {
     goto filter_attrib_ret_NOMEM;
@@ -689,7 +689,7 @@ int32_t filter_attrib_sample(char* fname, char* condition_str, char* sorted_ids,
 
   if (bigstack_alloc_ul(unfiltered_ctl, &exclude_arr_new) ||
       bigstack_calloc_ul(unfiltered_ctl, &already_seen) ||
-      bigstack_alloc_c(max_id_len, &id_buf)) { 
+      bigstack_alloc_c(max_id_len, &id_buf)) {
     goto filter_attrib_sample_ret_NOMEM;
   }
   fill_all_bits(unfiltered_ct, exclude_arr_new);
@@ -1301,7 +1301,7 @@ int32_t load_oblig_missing(FILE* bedfile, uintptr_t bed_offset, uintptr_t unfilt
     if (ii == -1) {
       continue;
     }
-    sample_uidx = sample_id_map[(uint32_t)ii];    
+    sample_uidx = sample_id_map[(uint32_t)ii];
     slen = strlen_se(bufptr2);
     // guaranteed to succeed
     ii = bsearch_str(bufptr2, slen, cluster_ids, max_cluster_id_len, cluster_ct);
diff --git a/plink_filter.h b/plink_filter.h
index df9c673..3abbed6 100644
--- a/plink_filter.h
+++ b/plink_filter.h
@@ -1,7 +1,7 @@
 #ifndef __PLINK_FILTER_H__
 #define __PLINK_FILTER_H__
 
-// This file is part of PLINK 1.90, copyright (C) 2005-2017 Shaun Purcell,
+// This file is part of PLINK 1.90, copyright (C) 2005-2018 Shaun Purcell,
 // Christopher Chang.
 //
 // This program is free software: you can redistribute it and/or modify
diff --git a/plink_glm.c b/plink_glm.c
index 2397cfe..01ed43d 100644
--- a/plink_glm.c
+++ b/plink_glm.c
@@ -1,4 +1,4 @@
-// This file is part of PLINK 1.90, copyright (C) 2005-2017 Shaun Purcell,
+// This file is part of PLINK 1.90, copyright (C) 2005-2018 Shaun Purcell,
 // Christopher Chang.
 //
 // This program is free software: you can redistribute it and/or modify
@@ -466,7 +466,7 @@ int32_t glm_check_vif(double vif_thresh, uintptr_t param_ct, uintptr_t sample_va
   for (param_idx = 0; param_idx < param_ct_m1; param_idx++) {
     param_2d_buf[param_idx * param_ct] = 1;
   }
-  
+
   if (invert_matrix(dim, param_2d_buf, mi_buf, param_2d_buf2)) {
     return 1;
   }
@@ -1597,7 +1597,7 @@ uint32_t logistic_regression(uint32_t sample_ct, uint32_t param_ct, float* vv, f
   // grad  = gradient buffer (length param_ct)
   // ll    = linear system buffer, param_ct x param_ct, rows 16-byte aligned
   // dcoef = current coefficient change buffer (length param_ct)
-  // 
+  //
   // Inputs:
   // xx    = covariate (and usually genotype) matrix, covariate-major, rows are
   //         16-byte aligned, trailing row elements must be zeroed out
@@ -1860,7 +1860,7 @@ uint32_t glm_fill_design(uintptr_t* loadbuf_collapsed, double* fixed_covars_cov_
 	}
 	ulptr_end++;
 	sample_idx_stop = sample_valid_ct;
-      }      
+      }
     } else if ((!(coding_flags & (GLM_HETHOM | GLM_RECESSIVE))) && (!is_nonx_haploid)) {
       if (!male_x_01) {
 	while (1) {
@@ -2280,7 +2280,7 @@ uint32_t glm_fill_design_float(uintptr_t* loadbuf_collapsed, float* fixed_covars
 	}
 	ulptr_end++;
 	sample_idx_stop = sample_valid_ct;
-      }      
+      }
     } else if ((!(coding_flags & (GLM_HETHOM | GLM_RECESSIVE))) && (!is_nonx_haploid)) {
       if (!male_x_01) {
 	while (1) {
@@ -3463,7 +3463,7 @@ THREAD_RET_TYPE glm_linear_set_thread(void* arg) {
       *msa_ptr++ = dxx;
     }
   }
-  THREAD_RETURN;  
+  THREAD_RETURN;
 }
 #endif
 
@@ -4288,7 +4288,7 @@ int32_t glm_linear_assoc_set_test(pthread_t* threads, FILE* bedfile, uintptr_t b
 	    dxx = MAX_INVERSE_CHIPROB_1DF;
 	  } else {
 	    dxx = inverse_chiprob(dxx, 1);
-	  }	  
+	  }
 	}
 	// this is cache-unfriendly, may want to update in-place instead and
 	// separate out the transpose
@@ -7629,7 +7629,7 @@ int32_t glm_linear_nosnp(pthread_t* threads, FILE* bedfile, uintptr_t bed_offset
       if (fwrite_checked(g_textbuf, wptr - g_textbuf, outfile)) {
 	goto glm_linear_nosnp_ret_WRITE_FAIL;
       }
-    }      
+    }
   }
   if (report_intercept) {
     wptr = memcpya(g_textbuf, " INTERCEPT ", 11);
diff --git a/plink_glm.h b/plink_glm.h
index d85011d..39db09f 100644
--- a/plink_glm.h
+++ b/plink_glm.h
@@ -1,7 +1,7 @@
 #ifndef __PLINK_GLM_H__
 #define __PLINK_GLM_H__
 
-// This file is part of PLINK 1.90, copyright (C) 2005-2017 Shaun Purcell,
+// This file is part of PLINK 1.90, copyright (C) 2005-2018 Shaun Purcell,
 // Christopher Chang.
 //
 // This program is free software: you can redistribute it and/or modify
diff --git a/plink_help.c b/plink_help.c
index 6fcd894..3bd437d 100644
--- a/plink_help.c
+++ b/plink_help.c
@@ -1,4 +1,4 @@
-// This file is part of PLINK 1.90, copyright (C) 2005-2017 Shaun Purcell,
+// This file is part of PLINK 1.90, copyright (C) 2005-2018 Shaun Purcell,
 // Christopher Chang.
 //
 // This program is free software: you can redistribute it and/or modify
diff --git a/plink_help.h b/plink_help.h
index de3232a..e09150c 100644
--- a/plink_help.h
+++ b/plink_help.h
@@ -1,7 +1,7 @@
 #ifndef __PLINK_HELP_H__
 #define __PLINK_HELP_H__
 
-// This file is part of PLINK 1.90, copyright (C) 2005-2017 Shaun Purcell,
+// This file is part of PLINK 1.90, copyright (C) 2005-2018 Shaun Purcell,
 // Christopher Chang.
 //
 // This program is free software: you can redistribute it and/or modify
diff --git a/plink_homozyg.c b/plink_homozyg.c
index 8d4f2af..0be056d 100644
--- a/plink_homozyg.c
+++ b/plink_homozyg.c
@@ -1,5 +1,4 @@
-
-// This file is part of PLINK 1.90, copyright (C) 2005-2017 Shaun Purcell,
+// This file is part of PLINK 1.90, copyright (C) 2005-2018 Shaun Purcell,
 // Christopher Chang.
 //
 // This program is free software: you can redistribute it and/or modify
@@ -1315,7 +1314,7 @@ void assign_allelic_match_groups(uint32_t pool_size, uint32_t* allelic_match_cts
       cur_pool[2 * pool_idx] = 0x80000000U | (group_idx++);
 #endif
     }
-  }  
+  }
 }
 
 char* roh_pool_write_middle(char* wptr, char* marker_ids, uintptr_t max_marker_id_len, uint32_t plink_maxsnp, uint32_t* marker_pos, uint32_t is_new_lengths, uint32_t marker_uidx1, uint32_t marker_uidx2) {
diff --git a/plink_homozyg.h b/plink_homozyg.h
index 1c31333..aec909d 100644
--- a/plink_homozyg.h
+++ b/plink_homozyg.h
@@ -1,7 +1,7 @@
 #ifndef __PLINK_HOMOZYG_H__
 #define __PLINK_HOMOZYG_H__
 
-// This file is part of PLINK 1.90, copyright (C) 2005-2017 Shaun Purcell,
+// This file is part of PLINK 1.90, copyright (C) 2005-2018 Shaun Purcell,
 // Christopher Chang.
 //
 // This program is free software: you can redistribute it and/or modify
diff --git a/plink_lasso.c b/plink_lasso.c
index 8338ca7..a4dafef 100644
--- a/plink_lasso.c
+++ b/plink_lasso.c
@@ -1,4 +1,4 @@
-// This file is part of PLINK 1.90, copyright (C) 2005-2017 Shaun Purcell,
+// This file is part of PLINK 1.90, copyright (C) 2005-2018 Shaun Purcell,
 // Christopher Chang.
 //
 // This program is free software: you can redistribute it and/or modify
diff --git a/plink_lasso.h b/plink_lasso.h
index 7c39e9a..20c296c 100644
--- a/plink_lasso.h
+++ b/plink_lasso.h
@@ -1,7 +1,7 @@
 #ifndef __PLINK_LASSO_H__
 #define __PLINK_LASSO_H__
 
-// This file is part of PLINK 1.90, copyright (C) 2005-2017 Shaun Purcell,
+// This file is part of PLINK 1.90, copyright (C) 2005-2018 Shaun Purcell,
 // Christopher Chang.
 //
 // This program is free software: you can redistribute it and/or modify
diff --git a/plink_ld.c b/plink_ld.c
index d14a719..fe8f228 100644
--- a/plink_ld.c
+++ b/plink_ld.c
@@ -1,4 +1,4 @@
-// This file is part of PLINK 1.90, copyright (C) 2005-2017 Shaun Purcell,
+// This file is part of PLINK 1.90, copyright (C) 2005-2018 Shaun Purcell,
 // Christopher Chang.
 //
 // This program is free software: you can redistribute it and/or modify
diff --git a/plink_ld.h b/plink_ld.h
index d4160cf..a5f13ef 100644
--- a/plink_ld.h
+++ b/plink_ld.h
@@ -1,7 +1,7 @@
 #ifndef __PLINK_LD_H__
 #define __PLINK_LD_H__
 
-// This file is part of PLINK 1.90, copyright (C) 2005-2017 Shaun Purcell,
+// This file is part of PLINK 1.90, copyright (C) 2005-2018 Shaun Purcell,
 // Christopher Chang.
 //
 // This program is free software: you can redistribute it and/or modify
diff --git a/plink_matrix.c b/plink_matrix.c
index 094ec82..1d79919 100644
--- a/plink_matrix.c
+++ b/plink_matrix.c
@@ -1,4 +1,4 @@
-// This file is part of PLINK 1.90, copyright (C) 2005-2017 Shaun Purcell,
+// This file is part of PLINK 1.90, copyright (C) 2005-2018 Shaun Purcell,
 // Christopher Chang.
 //
 // This program is free software: you can redistribute it and/or modify
@@ -32,7 +32,7 @@ static inline double SQR(const double a) {
 double pythag(const double a, const double b) {
   // PLINK stats.cpp pythag().
   double absa,absb;
- 
+
   absa=fabs(a);
   absb=fabs(b);
   if (absa > absb) return absa*sqrt(1.0+SQR(absb/absa));
@@ -184,7 +184,7 @@ int32_t svdcmp_c(int32_t m, double* a, double* w, double* v) {
 	}
 	break;
       }
-      if (its == 29) 
+      if (its == 29)
 	return 0; // cannot converge: multi-collinearity?
       x=w[l];
       nm=k-1;
@@ -265,14 +265,14 @@ int32_t invert_matrix(int32_t dim, double* matrix, MATRIX_INVERT_BUF1_TYPE* dbl_
   for (i=0; i<dim; i++) {
     dbl_1d_buf[i] = dbl_1d_buf[i] < wmin ? 0 : (1 / dbl_1d_buf[i]);
   }
-  
+
   for (i=0; i<dim; i++) {
     for (j=0; j<dim; j++) {
       matrix[i * dim + j] = matrix[i * dim + j] * dbl_1d_buf[j];
     }
   }
 
-  // [nxn].[t(v)] 
+  // [nxn].[t(v)]
   for (i=0; i<dim; i++) {
     fill_double_zero(dim, dbl_1d_buf);
     for (j=0; j<dim; j++) {
diff --git a/plink_matrix.h b/plink_matrix.h
index bc1e1ff..1a7b57a 100644
--- a/plink_matrix.h
+++ b/plink_matrix.h
@@ -1,7 +1,7 @@
 #ifndef __PLINK_MATRIX_H__
 #define __PLINK_MATRIX_H__
 
-// This file is part of PLINK 1.90, copyright (C) 2005-2017 Shaun Purcell,
+// This file is part of PLINK 1.90, copyright (C) 2005-2018 Shaun Purcell,
 // Christopher Chang.
 //
 // This program is free software: you can redistribute it and/or modify
diff --git a/plink_misc.c b/plink_misc.c
index 6ebff41..79de9e1 100644
--- a/plink_misc.c
+++ b/plink_misc.c
@@ -1,4 +1,4 @@
-// This file is part of PLINK 1.90, copyright (C) 2005-2017 Shaun Purcell,
+// This file is part of PLINK 1.90, copyright (C) 2005-2018 Shaun Purcell,
 // Christopher Chang.
 //
 // This program is free software: you can redistribute it and/or modify
@@ -5787,10 +5787,10 @@ int32_t meta_analysis(char* input_fnames, char* snpfield_search_order, char* a1f
     if (!final_variant_ct) {
       logerrprint("Error: No --meta-analysis variants.\n");
       goto meta_analysis_ret_INVALID_CMDLINE;
-  #ifdef __LP64__
+#ifdef __LP64__
     } else if (final_variant_ct > 0x7fffffff) {
       logerrprint("Error: Too many distinct --meta-analysis variants (max 2^31 - 1).\n");
-  #endif
+#endif
     }
     if (!no_allele) {
       combined_allele_len_byte_width = 4 - (__builtin_clz(max_combined_allele_len) / 8);
@@ -5923,11 +5923,11 @@ int32_t meta_analysis(char* input_fnames, char* snpfield_search_order, char* a1f
 	memcpy(&cur_file_ct_m1, bufptr2, file_ct_byte_width);
 	cur_data_slots = 0;
 	if (report_study_specific) {
-  #ifdef __LP64__
+#ifdef __LP64__
 	  cur_data_slots += file_ct64;
-  #else
+#else
 	  cur_data_slots += 2 * file_ct64;
-  #endif
+#endif
 	}
 	if (!no_allele) {
 	  cur_combined_allele_len = 0;
@@ -6102,9 +6102,9 @@ int32_t meta_analysis(char* input_fnames, char* snpfield_search_order, char* a1f
 	    if (ii == -1) {
 	      continue;
 	    }
-  #ifdef __LP64__
+#ifdef __LP64__
 	    cur_var_idx = 0; // clear high 32 bits
-  #endif
+#endif
 	    memcpy(&cur_var_idx, &(cur_window_marker_ids[(((uint32_t)ii) * max_var_id_len_p5) + max_var_id_len_p1]), 4);
 	  } else {
 	    bufptr[var_id_len] = '\0';
@@ -6310,10 +6310,44 @@ int32_t meta_analysis(char* input_fnames, char* snpfield_search_order, char* a1f
 	    wptr = dtoa_g_wxp4(MAXV(dxx, output_min_p), 11, wptr);
 	  }
 	} else {
-	  wptr = memcpya(wptr, "          NA          NA      NA      NA      NA      NA", 56);
-	  if (weighted_z) {
-	    wptr = memcpya(wptr, "          NA          NA", 24);
-	  }
+          // quasi-bugfix (20 Dec 2017): under 'report-all', report basic
+          // p/beta values when n=1 instead of forcing user to re-scrape their
+          // input files.
+          if (cur_file_ct) {
+            ii = ((int32_t)(1 + weighted_z)) * (-2);
+            cur_beta = cur_data_ptr[ii];
+            cur_se = cur_data_ptr[ii + 1];
+            summtest = cur_beta / cur_se;
+            p1 = chiprob_p(summtest * summtest, 1);
+            *wptr++ = ' ';
+            if (p1 >= 0.0) {
+              p1 = MAXV(p1, output_min_p);
+              wptr = dtoa_g_wxp4x(p1, 11, ' ', wptr);
+              wptr = dtoa_g_wxp4x(p1, 11, ' ', wptr);
+            } else {
+              wptr = memcpya(wptr, "         NA          NA ", 24);
+            }
+            if (!output_beta) {
+              cur_beta = exp(cur_beta);
+            }
+            wptr = dtoa_f_w7p4x(cur_beta, ' ', wptr);
+            wptr = dtoa_f_w7p4x(cur_beta, ' ', wptr);
+	    wptr = memcpya(wptr, "     NA      NA", 15);
+            if (weighted_z) {
+              numer = cur_data_ptr[-2];
+              denom2 = cur_data_ptr[-1];
+              dxx = numer / sqrt(denom2);
+              *wptr++ = ' ';
+              wptr = dtoa_g_wxp4x(dxx, 11, ' ', wptr);
+              dxx = 1.0 - 2 * fabs(normdist(fabs(dxx)) - 0.5);
+              wptr = dtoa_g_wxp4(MAXV(dxx, output_min_p), 11, wptr);
+            }
+          } else {
+	    wptr = memcpya(wptr, "          NA          NA      NA      NA      NA      NA", 56);
+            if (weighted_z) {
+	      wptr = memcpya(wptr, "          NA          NA", 24);
+            }
+          }
 	}
 	if (fwrite_checked(g_textbuf, wptr - g_textbuf, outfile)) {
 	  goto meta_analysis_ret_WRITE_FAIL;
diff --git a/plink_misc.h b/plink_misc.h
index f86f075..36c3332 100644
--- a/plink_misc.h
+++ b/plink_misc.h
@@ -1,7 +1,7 @@
 #ifndef __PLINK_MISC_H__
 #define __PLINK_MISC_H__
 
-// This file is part of PLINK 1.90, copyright (C) 2005-2017 Shaun Purcell,
+// This file is part of PLINK 1.90, copyright (C) 2005-2018 Shaun Purcell,
 // Christopher Chang.
 //
 // This program is free software: you can redistribute it and/or modify
diff --git a/plink_perm.c b/plink_perm.c
index eb4e24a..7e7f689 100644
--- a/plink_perm.c
+++ b/plink_perm.c
@@ -1,4 +1,4 @@
-// This file is part of PLINK 1.90, copyright (C) 2005-2017 Shaun Purcell,
+// This file is part of PLINK 1.90, copyright (C) 2005-2018 Shaun Purcell,
 // Christopher Chang.
 //
 // This program is free software: you can redistribute it and/or modify
diff --git a/plink_perm.h b/plink_perm.h
index 4744803..83654db 100644
--- a/plink_perm.h
+++ b/plink_perm.h
@@ -1,6 +1,7 @@
 #ifndef __PLINK_PERM_H__
+#define __PLINK_PERM_H__
 
-// This file is part of PLINK 1.90, copyright (C) 2005-2017 Shaun Purcell,
+// This file is part of PLINK 1.90, copyright (C) 2005-2018 Shaun Purcell,
 // Christopher Chang.
 //
 // This program is free software: you can redistribute it and/or modify
diff --git a/plink_rserve.c b/plink_rserve.c
index 7658a50..2b2b588 100644
--- a/plink_rserve.c
+++ b/plink_rserve.c
@@ -1,4 +1,4 @@
-// This file is part of PLINK 1.90, copyright (C) 2005-2017 Shaun Purcell,
+// This file is part of PLINK 1.90, copyright (C) 2005-2018 Shaun Purcell,
 // Christopher Chang.
 //
 // This program is free software: you can redistribute it and/or modify
@@ -191,7 +191,7 @@ int32_t rserve_call(char* rplugin_fname, char* rplugin_host_or_socket, int32_t r
       goto rserve_call_ret_NETWORK;
     }
     rc->eval("options(echo=F)");
-    
+
     r_s = new Rinteger(sample_to_cluster, pheno_nm_ct);
     r_p = new Rdouble(pheno_d2, pheno_nm_ct);
     r_n = new Rinteger((int32_t*)(&pheno_nm_ct), 1);
diff --git a/plink_rserve.h b/plink_rserve.h
index de9bdcc..ca7d5ab 100644
--- a/plink_rserve.h
+++ b/plink_rserve.h
@@ -1,7 +1,7 @@
 #ifndef __PLINK_RSERVE_H__
 #define __PLINK_RSERVE_H__
 
-// This file is part of PLINK 1.90, copyright (C) 2005-2017 Shaun Purcell,
+// This file is part of PLINK 1.90, copyright (C) 2005-2018 Shaun Purcell,
 // Christopher Chang.
 //
 // This program is free software: you can redistribute it and/or modify
diff --git a/plink_set.c b/plink_set.c
index 366ff97..901374a 100644
--- a/plink_set.c
+++ b/plink_set.c
@@ -1,4 +1,4 @@
-// This file is part of PLINK 1.90, copyright (C) 2005-2017 Shaun Purcell,
+// This file is part of PLINK 1.90, copyright (C) 2005-2018 Shaun Purcell,
 // Christopher Chang.
 //
 // This program is free software: you can redistribute it and/or modify
@@ -2956,7 +2956,7 @@ int32_t annotate(const Annot_info* aip, uint32_t allow_extra_chroms, char* outna
     if (!bufptr) {
       continue;
     }
-        
+
     if (need_pos) {
       // CHR
       // can't use get_chrom_code_destructive() due to later
@@ -3512,7 +3512,7 @@ int32_t gene_report(char* fname, char* glist, char* subset_fname, uint32_t borde
     if (!bufptr) {
       goto gene_report_load_loop;
     }
-    
+
     // CHR
     chrom_idx = get_chrom_code_counted(chrom_info_ptr, strlen_se(token_ptrs[0]), token_ptrs[0]);
     if (chrom_idx < 0) {
@@ -3611,7 +3611,7 @@ int32_t gene_report(char* fname, char* glist, char* subset_fname, uint32_t borde
       gene_idx = gene_nameidx_to_chridx[ulii];
       bufptr = &(gene_names[gene_idx * max_gene_name_len]);
       fputs(&(bufptr[4]), outfile);
-      // 53313 = ('0' * (1000 + 100 + 10)) + ('0' - 15) 
+      // 53313 = ('0' * (1000 + 100 + 10)) + ('0' - 15)
       chrom_idx = ((unsigned char)bufptr[0]) * 1000 + ((unsigned char)bufptr[1]) * 100 + ((unsigned char)bufptr[2]) * 10 + ((unsigned char)bufptr[3]) - 53313;
       strcpy(g_textbuf, " -- ");
       // plink 1.07 explicitly precedes chromosome codes with "chr" here.
diff --git a/plink_set.h b/plink_set.h
index 784fcb6..ed284fe 100644
--- a/plink_set.h
+++ b/plink_set.h
@@ -1,7 +1,7 @@
 #ifndef __PLINK_SET_H__
 #define __PLINK_SET_H__
 
-// This file is part of PLINK 1.90, copyright (C) 2005-2017 Shaun Purcell,
+// This file is part of PLINK 1.90, copyright (C) 2005-2018 Shaun Purcell,
 // Christopher Chang.
 //
 // This program is free software: you can redistribute it and/or modify
diff --git a/plink_stats.c b/plink_stats.c
index cbe976e..d364d46 100644
--- a/plink_stats.c
+++ b/plink_stats.c
@@ -1,4 +1,4 @@
-// This file is part of PLINK 1.90, copyright (C) 2005-2017 Shaun Purcell,
+// This file is part of PLINK 1.90, copyright (C) 2005-2018 Shaun Purcell,
 // Christopher Chang.
 //
 // This program is free software: you can redistribute it and/or modify
@@ -54,7 +54,7 @@ double inverse_chiprob(double qq, double df) {
   return xx;
 }
 
-double calc_tprob(double tt, double df) {  
+double calc_tprob(double tt, double df) {
   int32_t st = 0;
   int32_t ww = 1;
   double bnd = 1;
@@ -398,7 +398,7 @@ int32_t SNPHWE_t(int32_t obs_hets, int32_t obs_hom1, int32_t obs_hom2, double th
   // = 2 * (rare_copies / (2 * genotypes)) * (1 - rarefreq) * genotypes
   // = rare_copies * (1 - (rare_copies / (2 * genotypes)))
   // = (rare_copies * (2 * genotypes - rare_copies)) / (2 * genotypes)
-  // 
+  //
   // The computational identity is
   //   P(nhets == n) := P(nhets == n+2) * (n+2) * (n+1) /
   //                    (4 * homr(n) * homc(n))
diff --git a/plink_stats.h b/plink_stats.h
index 01da824..4fb1859 100644
--- a/plink_stats.h
+++ b/plink_stats.h
@@ -1,7 +1,7 @@
 #ifndef __PLINK_STATS_H__
 #define __PLINK_STATS_H__
 
-// This file is part of PLINK 1.90, copyright (C) 2005-2017 Shaun Purcell,
+// This file is part of PLINK 1.90, copyright (C) 2005-2018 Shaun Purcell,
 // Christopher Chang.
 //
 // This program is free software: you can redistribute it and/or modify

-- 
Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/debian-med/plink1.9.git



More information about the debian-med-commit mailing list