Loading CMakeLists.txt +4 −2 Original line number Diff line number Diff line Loading @@ -51,7 +51,7 @@ add_definitions(-DIQ_TREE) # The version number. set (iqtree_VERSION_MAJOR 1) set (iqtree_VERSION_MINOR 6) set (iqtree_VERSION_PATCH "1") set (iqtree_VERSION_PATCH "3") set(BUILD_SHARED_LIBS OFF) Loading Loading @@ -277,7 +277,7 @@ if (NOT IQTREE_FLAGS MATCHES "single") set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fopenmp -pthread") elseif (CLANG) set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -pthread") set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fopenmp=libomp") set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fopenmp=libomp -pthread") endif() else() message("OpenMP : NONE") Loading Loading @@ -435,6 +435,8 @@ check_function_exists (gettimeofday HAVE_GETTIMEOFDAY) check_function_exists (getrusage HAVE_GETRUSAGE) check_function_exists (GlobalMemoryStatusEx HAVE_GLOBALMEMORYSTATUSEX) check_function_exists (strndup HAVE_STRNDUP) check_function_exists (strtok_r HAVE_STRTOK_R) find_package(Backtrace) # configure a header file to pass some of the CMake settings Loading alignment/alignment.cpp +31 −4 Original line number Diff line number Diff line Loading @@ -3006,15 +3006,29 @@ void Alignment::createBootstrapAlignment(Alignment *aln, IntVector* pattern_freq outError("Unsupported bootstrap feature, pls contact the developers"); } if (Params::getInstance().jackknife_prop > 0.0 && spec) { outError((string)"Unsupported jackknife with sampling " + spec); } IntVector site_vec; if (!spec) { // standard bootstrap int added_sites = 0; for (site = 0; site < nsite; site++) { int site_id = random_int(nsite); int site_id; if (Params::getInstance().jackknife_prop == 0.0) { // bootstrap sampling with replacement site_id = random_int(nsite); } else { // jacknife without replacement if (random_double() < Params::getInstance().jackknife_prop) continue; site_id = site; } int ptn_id = aln->getPatternID(site_id); Pattern pat = aln->at(ptn_id); int nptn = getNPattern(); addPattern(pat, site); addPattern(pat, added_sites); if (!aln->site_state_freq.empty() && getNPattern() > nptn) { // a new pattern is added, copy state frequency vector double *state_freq = new double[num_states]; Loading @@ -3022,7 +3036,10 @@ void Alignment::createBootstrapAlignment(Alignment *aln, IntVector* pattern_freq site_state_freq.push_back(state_freq); } if (pattern_freq) ((*pattern_freq)[ptn_id])++; added_sites++; } if (added_sites < nsite) site_pattern.resize(added_sites); } else if (strncmp(spec, "GENESITE,", 9) == 0) { // resampling genes, then resampling sites within resampled genes convert_int_vec(spec+9, site_vec); Loading Loading @@ -3115,6 +3132,9 @@ void Alignment::createBootstrapAlignment(int *pattern_freq, const char *spec, in int site, nsite = getNSite(); memset(pattern_freq, 0, getNPattern()*sizeof(int)); IntVector site_vec; if (Params::getInstance().jackknife_prop > 0.0 && spec) outError((string)"Unsupported jackknife with " + spec); if (!spec || strncmp(spec, "SCALE=", 6) == 0) { if (spec) { Loading @@ -3123,10 +3143,17 @@ void Alignment::createBootstrapAlignment(int *pattern_freq, const char *spec, in } int nptn = getNPattern(); if (nsite/8 < nptn) { if (nsite/8 < nptn || Params::getInstance().jackknife_prop > 0.0) { int orig_nsite = getNSite(); for (site = 0; site < nsite; site++) { int site_id = random_int(orig_nsite, rstream); int site_id; if (Params::getInstance().jackknife_prop == 0.0) site_id = random_int(orig_nsite, rstream); else { if (random_double() < Params::getInstance().jackknife_prop) continue; site_id = site; } int ptn_id = getPatternID(site_id); pattern_freq[ptn_id]++; } Loading alignment/superalignment.cpp +48 −4 Original line number Diff line number Diff line Loading @@ -679,10 +679,54 @@ Alignment *SuperAlignment::concatenateAlignments(set<int> &ids) { } Alignment *SuperAlignment::concatenateAlignments() { set<int> ids; for (int i = 0; i < partitions.size(); i++) ids.insert(i); return concatenateAlignments(ids); vector<SeqType> seq_types; vector<set<int> > ids; for (int i = 0; i < partitions.size(); i++) { bool found = false; for (int j = 0; j < seq_types.size(); j++) if (partitions[i]->seq_type == seq_types[j]) { ids[j].insert(i); found = true; break; } if (found) continue; // create a new partition seq_types.push_back(partitions[i]->seq_type); ids.push_back(set<int>()); ids.back().insert(i); } if (seq_types.size() == 1) return concatenateAlignments(ids[0]); // mixed data with >= 2 partitions SuperAlignment *saln = new SuperAlignment(); saln->max_num_states = 0; // first build taxa_index and partitions int site, seq, nsite = ids.size(); // BUG FIX 2016-11-29: when merging partitions with -m TESTMERGE, sequence order is changed // get the taxa names from existing tree saln->seq_names = seq_names; saln->taxa_index.resize(saln->seq_names.size()); for (auto it = saln->taxa_index.begin(); it != saln->taxa_index.end(); it++) it->resize(nsite, -1); for (site = 0; site != nsite; site++) { Alignment *part_aln = concatenateAlignments(ids[site]); saln->partitions.push_back(part_aln); int nseq = part_aln->getNSeq(); //cout << "nseq = " << nseq << endl; for (seq = 0; seq < nseq; seq++) { int id = saln->getSeqID(part_aln->getSeqName(seq)); ASSERT(id >= 0); saln->taxa_index[id][site] = seq; } } // now the patterns of sequence-genes presence/absence saln->buildPattern(); return saln; } void SuperAlignment::countConstSite() { Loading iqtree_config.h.in +2 −0 Original line number Diff line number Diff line Loading @@ -12,6 +12,8 @@ /*#cmakedefine HAVE_PCLOSE*/ /* does the platform provide GlobalMemoryStatusEx functions? */ #cmakedefine HAVE_GLOBALMEMORYSTATUSEX #cmakedefine HAVE_STRNDUP #cmakedefine HAVE_STRTOK_R /* does the platform provide backtrace functions? */ #cmakedefine Backtrace_FOUND lbfgsb/lbfgsb_new.cpp +1 −1 Original line number Diff line number Diff line Loading @@ -1031,7 +1031,7 @@ void mainlb(int n, int m, double *x, --ifun; --iback; } strcpy(task, "ERROR: ABNORMAL_TERMINATION_IN_LNSRCH"); strcpy(task, "WARNING: ABNORMAL_TERMINATION_IN_LNSRCH"); ++iter; goto L999; } else { Loading Loading
CMakeLists.txt +4 −2 Original line number Diff line number Diff line Loading @@ -51,7 +51,7 @@ add_definitions(-DIQ_TREE) # The version number. set (iqtree_VERSION_MAJOR 1) set (iqtree_VERSION_MINOR 6) set (iqtree_VERSION_PATCH "1") set (iqtree_VERSION_PATCH "3") set(BUILD_SHARED_LIBS OFF) Loading Loading @@ -277,7 +277,7 @@ if (NOT IQTREE_FLAGS MATCHES "single") set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fopenmp -pthread") elseif (CLANG) set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -pthread") set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fopenmp=libomp") set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fopenmp=libomp -pthread") endif() else() message("OpenMP : NONE") Loading Loading @@ -435,6 +435,8 @@ check_function_exists (gettimeofday HAVE_GETTIMEOFDAY) check_function_exists (getrusage HAVE_GETRUSAGE) check_function_exists (GlobalMemoryStatusEx HAVE_GLOBALMEMORYSTATUSEX) check_function_exists (strndup HAVE_STRNDUP) check_function_exists (strtok_r HAVE_STRTOK_R) find_package(Backtrace) # configure a header file to pass some of the CMake settings Loading
alignment/alignment.cpp +31 −4 Original line number Diff line number Diff line Loading @@ -3006,15 +3006,29 @@ void Alignment::createBootstrapAlignment(Alignment *aln, IntVector* pattern_freq outError("Unsupported bootstrap feature, pls contact the developers"); } if (Params::getInstance().jackknife_prop > 0.0 && spec) { outError((string)"Unsupported jackknife with sampling " + spec); } IntVector site_vec; if (!spec) { // standard bootstrap int added_sites = 0; for (site = 0; site < nsite; site++) { int site_id = random_int(nsite); int site_id; if (Params::getInstance().jackknife_prop == 0.0) { // bootstrap sampling with replacement site_id = random_int(nsite); } else { // jacknife without replacement if (random_double() < Params::getInstance().jackknife_prop) continue; site_id = site; } int ptn_id = aln->getPatternID(site_id); Pattern pat = aln->at(ptn_id); int nptn = getNPattern(); addPattern(pat, site); addPattern(pat, added_sites); if (!aln->site_state_freq.empty() && getNPattern() > nptn) { // a new pattern is added, copy state frequency vector double *state_freq = new double[num_states]; Loading @@ -3022,7 +3036,10 @@ void Alignment::createBootstrapAlignment(Alignment *aln, IntVector* pattern_freq site_state_freq.push_back(state_freq); } if (pattern_freq) ((*pattern_freq)[ptn_id])++; added_sites++; } if (added_sites < nsite) site_pattern.resize(added_sites); } else if (strncmp(spec, "GENESITE,", 9) == 0) { // resampling genes, then resampling sites within resampled genes convert_int_vec(spec+9, site_vec); Loading Loading @@ -3115,6 +3132,9 @@ void Alignment::createBootstrapAlignment(int *pattern_freq, const char *spec, in int site, nsite = getNSite(); memset(pattern_freq, 0, getNPattern()*sizeof(int)); IntVector site_vec; if (Params::getInstance().jackknife_prop > 0.0 && spec) outError((string)"Unsupported jackknife with " + spec); if (!spec || strncmp(spec, "SCALE=", 6) == 0) { if (spec) { Loading @@ -3123,10 +3143,17 @@ void Alignment::createBootstrapAlignment(int *pattern_freq, const char *spec, in } int nptn = getNPattern(); if (nsite/8 < nptn) { if (nsite/8 < nptn || Params::getInstance().jackknife_prop > 0.0) { int orig_nsite = getNSite(); for (site = 0; site < nsite; site++) { int site_id = random_int(orig_nsite, rstream); int site_id; if (Params::getInstance().jackknife_prop == 0.0) site_id = random_int(orig_nsite, rstream); else { if (random_double() < Params::getInstance().jackknife_prop) continue; site_id = site; } int ptn_id = getPatternID(site_id); pattern_freq[ptn_id]++; } Loading
alignment/superalignment.cpp +48 −4 Original line number Diff line number Diff line Loading @@ -679,10 +679,54 @@ Alignment *SuperAlignment::concatenateAlignments(set<int> &ids) { } Alignment *SuperAlignment::concatenateAlignments() { set<int> ids; for (int i = 0; i < partitions.size(); i++) ids.insert(i); return concatenateAlignments(ids); vector<SeqType> seq_types; vector<set<int> > ids; for (int i = 0; i < partitions.size(); i++) { bool found = false; for (int j = 0; j < seq_types.size(); j++) if (partitions[i]->seq_type == seq_types[j]) { ids[j].insert(i); found = true; break; } if (found) continue; // create a new partition seq_types.push_back(partitions[i]->seq_type); ids.push_back(set<int>()); ids.back().insert(i); } if (seq_types.size() == 1) return concatenateAlignments(ids[0]); // mixed data with >= 2 partitions SuperAlignment *saln = new SuperAlignment(); saln->max_num_states = 0; // first build taxa_index and partitions int site, seq, nsite = ids.size(); // BUG FIX 2016-11-29: when merging partitions with -m TESTMERGE, sequence order is changed // get the taxa names from existing tree saln->seq_names = seq_names; saln->taxa_index.resize(saln->seq_names.size()); for (auto it = saln->taxa_index.begin(); it != saln->taxa_index.end(); it++) it->resize(nsite, -1); for (site = 0; site != nsite; site++) { Alignment *part_aln = concatenateAlignments(ids[site]); saln->partitions.push_back(part_aln); int nseq = part_aln->getNSeq(); //cout << "nseq = " << nseq << endl; for (seq = 0; seq < nseq; seq++) { int id = saln->getSeqID(part_aln->getSeqName(seq)); ASSERT(id >= 0); saln->taxa_index[id][site] = seq; } } // now the patterns of sequence-genes presence/absence saln->buildPattern(); return saln; } void SuperAlignment::countConstSite() { Loading
iqtree_config.h.in +2 −0 Original line number Diff line number Diff line Loading @@ -12,6 +12,8 @@ /*#cmakedefine HAVE_PCLOSE*/ /* does the platform provide GlobalMemoryStatusEx functions? */ #cmakedefine HAVE_GLOBALMEMORYSTATUSEX #cmakedefine HAVE_STRNDUP #cmakedefine HAVE_STRTOK_R /* does the platform provide backtrace functions? */ #cmakedefine Backtrace_FOUND
lbfgsb/lbfgsb_new.cpp +1 −1 Original line number Diff line number Diff line Loading @@ -1031,7 +1031,7 @@ void mainlb(int n, int m, double *x, --ifun; --iback; } strcpy(task, "ERROR: ABNORMAL_TERMINATION_IN_LNSRCH"); strcpy(task, "WARNING: ABNORMAL_TERMINATION_IN_LNSRCH"); ++iter; goto L999; } else { Loading