about summary refs log tree commit diff
diff options
context:
space:
mode:
-rw-r--r--.gitignore1
-rw-r--r--Makefile17
-rw-r--r--README.md51
-rw-r--r--VERSION1
-rwxr-xr-xscripts/gen_version_info.sh12
-rw-r--r--src/gemma.cpp37
-rw-r--r--src/lmm.cpp2
-rw-r--r--src/param.cpp13
8 files changed, 82 insertions, 52 deletions
diff --git a/.gitignore b/.gitignore
index ef520c8..059da73 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1,6 +1,7 @@
 *.o
 *.tar.gz
 src/Eigen
+src/version.h
 example/output
 test/output
 ./output
diff --git a/Makefile b/Makefile
index c57567b..2d91a49 100644
--- a/Makefile
+++ b/Makefile
@@ -38,10 +38,12 @@
 #
 #      https://github.com/genetics-statistics/GEMMA/blob/master/INSTALL.md
 
+GEMMA_VERSION = $(shell cat ./VERSION)
+
 # Set this variable to either LNX or MAC
 SYS                    = LNX # LNX|MAC (Linux is the default)
 # Leave blank after "=" to disable; put "= 1" to enable
-DIST_NAME              = gemma-0.97.3
+DIST_NAME              = gemma-$(GEMMA_VERSION)
 DEBUG                  = 1                # DEBUG mode, set DEBUG=0 for a release
 SHOW_COMPILER_WARNINGS =
 WITH_LAPACK            = 1
@@ -132,13 +134,16 @@ ifdef WITH_LAPACK
   endif
 endif
 
-HDR          = $(wildcard src/*.h)
+HDR          = $(wildcard src/*.h) ./src/version.h
 SOURCES      = $(wildcard src/*.cpp)
 
 # all
 OBJS = $(SOURCES:.cpp=.o)
 
-all: $(OUTPUT)
+./src/version.h:
+	./scripts/gen_version_info.sh > src/version.h
+
+all: ./src/version.h $(OUTPUT)
 
 $(OUTPUT): $(OBJS)
 	$(CPP) $(CPPFLAGS) $(OBJS) $(LIBS) -o $(OUTPUT)
@@ -173,16 +178,18 @@ check: fast-check slow-check
 check-all: check lengthy-check
 
 clean:
+	rm $(SRC_DIR)/version.h
 	rm -vf $(SRC_DIR)/*.o
 	rm -vf $(SRC_DIR)/*~
 	rm -vf $(TEST_SRC_DIR)/*.o
 	rm -vf $(OUTPUT)
 	rm -vf ./bin/unittests-gemma
 
-DIST_COMMON = COPYING.txt README.txt Makefile
+DIST_COMMON = *.md LICENSE VERSION Makefile
 DIST_SUBDIRS = src doc example bin
 
-tar:
+tar: version all
+	@echo "Creating $(DIST_NAME)"
 	mkdir -p ./$(DIST_NAME)
 	cp $(DIST_COMMON) ./$(DIST_NAME)/
 	cp -r $(DIST_SUBDIRS) ./$(DIST_NAME)/
diff --git a/README.md b/README.md
index d5d2f38..20e2e16 100644
--- a/README.md
+++ b/README.md
@@ -17,7 +17,8 @@ encourage contributions, for example, by forking the repository,
 making your changes to the code, and issuing a pull request.
 
 Currently, GEMMA is supported for 64-bit Mac OS X and Linux
-platforms. *Windows is not currently supported.* If you are interested
+platforms. *Windows is not currently supported.* though you can
+run GEMMA in a Linux VM or [container](https://docs.docker.com/docker-for-windows/). If you are interested
 in helping to make GEMMA available on Windows platforms (e.g., by
 providing installation instructions for Windows, or by contributing
 Windows binaries) please post a note in the
@@ -174,27 +175,39 @@ found in [INSTALL.md](INSTALL.md).
 
 ## Reporting a GEMMA bug or issue
 
-GEMMA has an
+For bugs GEMMA has an
 [issue tracker](https://github.com/genetics-statistics/GEMMA/issues)
-on github. Before posting an issue search the issue tracker first. It
-is likely someone may have encountered something similiar. Also try
-running the latest version of GEMMA to make sure it has not been fixed
-already. When reporting an issue include the output of the program and
-the contents of the .log.txt file in the output directory. We may ask
-you for your data to resolve the issue (treated confidentially). Check
-list:
+on github. For general support GEMMA has a mailing list at
+[gemma-discussion](https://groups.google.com/forum/#!forum/gemma-discussion)
+
+Before posting an issue search the issue tracker and mailing list
+first. It is likely someone may have encountered something
+similiar. Also try running the latest version of GEMMA to make sure it
+has not been fixed already. Support/installation questions should be
+aimed at the mailing list. The issue tracker is for development issues
+around the software itself. When reporting an issue include the output
+of the program and the contents of the .log.txt file in the output
+directory.
+
+### Check list:
 
 1. [X] I have found and issue with GEMMA
-2. [ ] I have searched for it on the [issue tracker](https://github.com/genetics-statistics/GEMMA/issues) (incl. closed issues)
-3. [ ] I have tried the latest release of GEMMA
-4. [ ] I have posted a new issue on the issue tracker or added to an existing one
-5. [ ] I have included the output of GEMMA
-6. [ ] I have included the relevant .log.txt file in the output directory
-7. [ ] I have made available the data to reproduce the problem (optional)
-
-Please always remember that GEMMA is written and maintained by
-volunteers with good intentions. Our time is valuable too. By helping
-us as much as possible we can provide this tool for everyone to use.
+2. [ ] I have searched for it on the [issue tracker](https://github.com/genetics-statistics/GEMMA/issues?q=is%3Aissue) (incl. closed issues)
+3. [ ] I have searched for it on the [mailing list](https://groups.google.com/forum/#!forum/gemma-discussion)
+4. [ ] I have tried the latest [release](https://github.com/genetics-statistics/GEMMA/releases) of GEMMA
+5. [ ] I have read and agreed to below code of conduct
+6. [ ] If it is a support/install question I have posted it to the [mailing list](https://groups.google.com/forum/#!forum/gemma-discussion)
+7. [ ] If it is software development related I have posted a new issue on the [issue tracker](https://github.com/genetics-statistics/GEMMA/issues) or added to an existing one
+8. [ ] In the message I have included the output of my GEMMA run
+9. [ ] In the message I have included the relevant .log.txt file in the output directory
+10. [ ] I have made available the data to reproduce the problem (optional)
+
+To find bugs the GEMMA software developers may ask to install a
+development version of the software. They may also ask you for your
+data and will treat it confidentially.  Please always remember that
+GEMMA is written and maintained by volunteers with good
+intentions. Our time is valuable too. By helping us as much as
+possible we can provide this tool for everyone to use.
 
 ## Code of conduct
 
diff --git a/VERSION b/VERSION
new file mode 100644
index 0000000..09f968e
--- /dev/null
+++ b/VERSION
@@ -0,0 +1 @@
+0.97-pre3
diff --git a/scripts/gen_version_info.sh b/scripts/gen_version_info.sh
new file mode 100755
index 0000000..8a9e38d
--- /dev/null
+++ b/scripts/gen_version_info.sh
@@ -0,0 +1,12 @@
+#! /bin/bash
+#
+# Script to generate the version info of GEMMA and its environment
+# in ./src/version.h
+
+DATE=$(date "+%Y/%m/%d")
+YEAR=$(date "+%Y")
+
+echo // version.h generated by GEMMA $0
+echo \#define GEMMA_VERSION \"$(cat ./VERSION)\"
+echo \#define GEMMA_DATE \"$DATE\"
+echo \#define GEMMA_YEAR \"$YEAR\"
diff --git a/src/gemma.cpp b/src/gemma.cpp
index f9a2fc9..2c54672 100644
--- a/src/gemma.cpp
+++ b/src/gemma.cpp
@@ -57,10 +57,11 @@ extern "C" {
 #include "varcov.h"
 #include "vc.h"
 #include "debug.h"
+#include "version.h"
 
 using namespace std;
 
-GEMMA::GEMMA(void) : version("0.97.3"), date("10/10/2017"), year("2017") {}
+GEMMA::GEMMA(void) : version(GEMMA_VERSION), date(GEMMA_DATE), year(GEMMA_YEAR) {}
 
 void gemma_gsl_error_handler (const char * reason,
                               const char * file,
@@ -1989,8 +1990,8 @@ void GEMMA::BatchRun(PARAM &cPar) {
                   vec_weight, vec_z2, cPar.ni_total, cPar.ns_total,
                   cPar.ns_test);
     cout << "## number of total individuals = " << cPar.ni_total << endl;
-    cout << "## number of total SNPs = " << cPar.ns_total << endl;
-    cout << "## number of analyzed SNPs = " << cPar.ns_test << endl;
+    cout << "## number of total SNPs/var = " << cPar.ns_total << endl;
+    cout << "## number of analyzed SNPs/var = " << cPar.ns_test << endl;
     cout << "## number of variance components = " << cPar.n_vc << endl;
     cout << "Calculating the q vector ... " << endl;
     Calcq(cPar.n_block, vec_cat, vec_ni, vec_weight, vec_z2, Vq, q,
@@ -2119,8 +2120,8 @@ void GEMMA::BatchRun(PARAM &cPar) {
 
       cout << "Study Panel: " << endl;
       cout << "## number of total individuals = " << cPar.ni_study << endl;
-      cout << "## number of total SNPs = " << cPar.ns_study << endl;
-      cout << "## number of analyzed SNPs = " << cPar.ns_test << endl;
+      cout << "## number of total SNPs/var = " << cPar.ns_study << endl;
+      cout << "## number of analyzed SNPs/var = " << cPar.ns_test << endl;
       cout << "## number of variance components = " << cPar.n_vc << endl;
 
       // compute q
@@ -3053,7 +3054,7 @@ void GEMMA::BatchRun(PARAM &cPar) {
       }
 
       cout << "## number of blocks = " << BF.size() << endl;
-      cout << "## number of analyzed SNPs = " << vec_rs.size() << endl;
+      cout << "## number of analyzed SNPs/var = " << vec_rs.size() << endl;
       cout << "## grid size for hyperparameters = " << wab.size() << endl;
       cout << "## number of continuous annotations = " << kc << endl;
       cout << "## number of discrete annotations = " << kd << endl;
@@ -3103,7 +3104,7 @@ void GEMMA::WriteLog(int argc, char **argv, PARAM &cPar) {
   }
 
   outfile << "##" << endl;
-  outfile << "## GEMMA Version    = " << version << endl;
+  outfile << "## GEMMA Version    = " << version << " (" << date << ")" << endl;
   outfile << "## GSL Version      = " << GSL_VERSION << endl;
   outfile << "## Eigen Version    = " << EIGEN_WORLD_VERSION << "." << EIGEN_MAJOR_VERSION << "." << EIGEN_MINOR_VERSION << endl;
 #ifdef OPENBLAS
@@ -3132,7 +3133,6 @@ void GEMMA::WriteLog(int argc, char **argv, PARAM &cPar) {
   tm *ptm = localtime(&rawtime);
 
   outfile << "## Date = " << asctime(ptm);
-  // ptm->tm_year<<":"<<ptm->tm_month<<":"<<ptm->tm_day":"<<ptm->tm_hour<<":"<<ptm->tm_min<<endl;
 
   outfile << "##" << endl;
   outfile << "## Summary Statistics:" << endl;
@@ -3142,11 +3142,6 @@ void GEMMA::WriteLog(int argc, char **argv, PARAM &cPar) {
             << cPar.ni_study << endl;
     outfile << "## number of total individuals in the reference = "
             << cPar.ni_ref << endl;
-    // outfile<<"## number of total SNPs in the sample = "<<cPar.ns_study<<endl;
-    // outfile<<"## number of total SNPs in the reference panel =
-    // "<<cPar.ns_ref<<endl;
-    // outfile<<"## number of analyzed SNPs = "<<cPar.ns_test<<endl;
-    // outfile<<"## number of analyzed SNP pairs = "<<cPar.ns_pair<<endl;
     outfile << "## number of variance components = " << cPar.n_vc << endl;
 
     outfile << "## pve estimates = ";
@@ -3196,11 +3191,11 @@ void GEMMA::WriteLog(int argc, char **argv, PARAM &cPar) {
             << cPar.ni_study << endl;
     outfile << "## number of total individuals in the reference = "
             << cPar.ni_total << endl;
-    outfile << "## number of total SNPs in the sample = " << cPar.ns_study
+    outfile << "## number of total SNPs/var in the sample = " << cPar.ns_study
             << endl;
-    outfile << "## number of total SNPs in the reference panel = "
+    outfile << "## number of total SNPs/var in the reference panel = "
             << cPar.ns_total << endl;
-    outfile << "## number of analyzed SNPs = " << cPar.ns_test << endl;
+    outfile << "## number of analyzed SNPs/var = " << cPar.ns_test << endl;
     outfile << "## number of variance components = " << cPar.n_vc << endl;
   } else if (!cPar.file_beta.empty() &&
              (cPar.a_mode == 66 || cPar.a_mode == 67)) {
@@ -3208,9 +3203,9 @@ void GEMMA::WriteLog(int argc, char **argv, PARAM &cPar) {
             << cPar.ni_total << endl;
     outfile << "## number of total individuals in the reference = "
             << cPar.ni_ref << endl;
-    outfile << "## number of total SNPs in the sample = " << cPar.ns_total
+    outfile << "## number of total SNPs/var in the sample = " << cPar.ns_total
             << endl;
-    outfile << "## number of analyzed SNPs = " << cPar.ns_test << endl;
+    outfile << "## number of analyzed SNPs/var = " << cPar.ns_test << endl;
     outfile << "## number of variance components = " << cPar.n_vc << endl;
 
     outfile << "## pve estimates = ";
@@ -3280,10 +3275,10 @@ void GEMMA::WriteLog(int argc, char **argv, PARAM &cPar) {
       outfile << "## number of total genes = " << cPar.ng_total << endl;
       outfile << "## number of analyzed genes = " << cPar.ng_test << endl;
     } else if (cPar.file_epm.empty()) {
-      outfile << "## number of total SNPs = " << cPar.ns_total << endl;
-      outfile << "## number of analyzed SNPs = " << cPar.ns_test << endl;
+      outfile << "## number of total SNPs/var = " << cPar.ns_total << endl;
+      outfile << "## number of analyzed SNPs/var = " << cPar.ns_test << endl;
     } else {
-      outfile << "## number of analyzed SNPs = " << cPar.ns_test << endl;
+      outfile << "## number of analyzed SNPs/var = " << cPar.ns_test << endl;
     }
 
     if (cPar.a_mode == 13) {
diff --git a/src/lmm.cpp b/src/lmm.cpp
index ae8b747..6b07b6c 100644
--- a/src/lmm.cpp
+++ b/src/lmm.cpp
@@ -1525,7 +1525,7 @@ void LMM::AnalyzePlink(const gsl_matrix *U, const gsl_vector *eval,
     auto ci_total = 0;
     auto ci_test = 0;
     // ---- for all genotypes
-    for (int i = 0; i < n_bit; ++i) {
+    for (uint i = 0; i < n_bit; ++i) {
       infile.read(ch, 1);
       bset8 = ch[0];
 
diff --git a/src/param.cpp b/src/param.cpp
index 1a27a53..1f583e2 100644
--- a/src/param.cpp
+++ b/src/param.cpp
@@ -17,6 +17,7 @@
 */
 
 #include <iostream>
+#include <iomanip>
 #include <string>
 #include <algorithm>
 #include <cmath>
@@ -1136,15 +1137,15 @@ void PARAM::CheckData(void) {
       cout << "## number of total genes = " << ng_total << endl;
     } else if (file_epm.empty() && a_mode != 43 && a_mode != 5) {
       if (!loco.empty())
-        cout << "## leave one chromosome out (LOCO) = " << loco << endl;
-      cout << "## number of total SNPs    = " << ns_total << endl;
+        cout << "## leave one chromosome out (LOCO) = " << setw(8) << loco << endl;
+      cout << "## number of total SNPs/var        = " << setw(8) << ns_total << endl;
       if (setSnps.size())
-        cout << "## number of considered SNPS = " << setSnps.size() << endl;
+        cout << "## number of considered SNPS       = " << setw(8) << setSnps.size() << endl;
       if (setKSnps.size())
-        cout << "## number of SNPS for K    = " << setKSnps.size() << endl;
+        cout << "## number of SNPS for K            = " << setw(8) << setKSnps.size() << endl;
       if (setGWASnps.size())
-        cout << "## number of SNPS for GWAS = " << setGWASnps.size() << endl;
-      cout << "## number of analyzed SNPs = " << ns_test << endl;
+        cout << "## number of SNPS for GWAS         = " << setw(8) << setGWASnps.size() << endl;
+      cout << "## number of analyzed SNPs         = " << setw(8) << ns_test << endl;
     } else {
     }
   }