diff --git a/python/obitools3/version.py b/python/obitools3/version.py index d8a4269..5fa721c 100755 --- a/python/obitools3/version.py +++ b/python/obitools3/version.py @@ -1,5 +1,5 @@ major = 3 minor = 0 -serial= '0-beta14e' +serial= '0-beta15' version ="%d.%02d.%s" % (major,minor,serial) diff --git a/src/build_reference_db.c b/src/build_reference_db.c index b48fe98..f17a059 100755 --- a/src/build_reference_db.c +++ b/src/build_reference_db.c @@ -477,6 +477,8 @@ int build_reference_db(const char* dms_name, // Read alignment score score = obi_get_float_with_elt_idx_and_col_p_in_view(matrix_with_lca_view, matrix_score_column, i, 0); + //fprintf(stderr, "\n\ntaxid_lca=%d, score=%f, idx1=%d, idx2=%d", taxid_lca, score, idx1, idx2); + ///////////////// Compute for first sequence \\\\\\\\\\\\\\\\\\\\\\\ (TODO function) // Read arrays @@ -493,9 +495,11 @@ int build_reference_db(const char* dms_name, // return -1; // } + //fprintf(stderr, "\n1st sequence"); // If empty, add values if (taxid_array_length == 0) { + //fprintf(stderr, "\nEmpty, add value"); if (obi_set_array_with_col_p_in_view(o_view, final_lca_taxid_a_column, idx1, &taxid_lca, (uint8_t) (obi_sizeof(OBI_INT) * 8), 1) < 0) { obidebug(1, "\nError setting a LCA taxid array in a column when building a reference database"); @@ -509,6 +513,8 @@ int build_reference_db(const char* dms_name, } else { + //fprintf(stderr, "\nNot empty"); + j = 0; modified = false; while (j < taxid_array_length) @@ -522,6 +528,9 @@ int build_reference_db(const char* dms_name, memcpy(score_array_writable, score_array, score_array_length*sizeof(obifloat_t)); modified = true; + //fprintf(stderr, "\nSame LCA, replace %d and %f with %d and %f", lca_taxid_array_writable[j], + // score_array_writable[j], taxid_lca, score); + // Better score for the same LCA, replace this LCA/score pair lca_taxid_array_writable[j] = taxid_lca; score_array_writable[j] = score; @@ -548,6 +557,8 @@ int build_reference_db(const char* dms_name, { if (score > score_array[j]) { + //fprintf(stderr, "\nInsert new"); + memcpy(lca_taxid_array_writable, lca_taxid_array, taxid_array_length*sizeof(obiint_t)); memcpy(score_array_writable, score_array, score_array_length*sizeof(obifloat_t)); modified = true; @@ -592,10 +603,15 @@ int build_reference_db(const char* dms_name, memcpy(score_array_writable, score_array, score_array_length*sizeof(obifloat_t)); modified = true; + //fprintf(stderr, "\nAppend at the end"); + // Append LCA lca_taxid_array_writable[taxid_array_writable_length] = taxid_lca; score_array_writable[score_array_writable_length] = score; + taxid_array_writable_length++; + score_array_writable_length++; + // Remove the previous (children) LCAs from the array if their score is equal or lower while ((j>0) && (score_array_writable[j-1] <= score)) { @@ -616,6 +632,13 @@ int build_reference_db(const char* dms_name, // Write new arrays if (modified) { +// fprintf(stderr, "\n\nnew array:"); +// for (k=0;kname, score_array_writable[k]); +// } + if (obi_set_array_with_col_p_in_view(o_view, final_lca_taxid_a_column, idx1, lca_taxid_array_writable, (uint8_t) (obi_sizeof(OBI_INT) * 8), taxid_array_writable_length) < 0) { obidebug(1, "\nError setting a LCA taxid array in a column when building a reference database"); @@ -645,9 +668,13 @@ int build_reference_db(const char* dms_name, // return -1; // } + //fprintf(stderr, "\n2nd sequence"); + // If empty, add values if (taxid_array_length == 0) { + //fprintf(stderr, "\nEmpty, add value"); + if (obi_set_array_with_col_p_in_view(o_view, final_lca_taxid_a_column, idx2, &taxid_lca, (uint8_t) (obi_sizeof(OBI_INT) * 8), 1) < 0) { obidebug(1, "\nError setting a LCA taxid array in a column when building a reference database"); @@ -661,6 +688,8 @@ int build_reference_db(const char* dms_name, } else { + //fprintf(stderr, "\nNot empty"); + j = 0; modified = false; while (j < taxid_array_length) @@ -674,6 +703,9 @@ int build_reference_db(const char* dms_name, memcpy(score_array_writable, score_array, score_array_length*sizeof(obifloat_t)); modified = true; + //fprintf(stderr, "\nSame LCA, replace %d and %f with %d and %f", lca_taxid_array_writable[j], + // score_array_writable[j], taxid_lca, score); + // Better score for the same LCA, replace this LCA/score pair lca_taxid_array_writable[j] = taxid_lca; score_array_writable[j] = score; @@ -700,6 +732,8 @@ int build_reference_db(const char* dms_name, { if (score > score_array[j]) { + //fprintf(stderr, "\nInsert new"); + memcpy(lca_taxid_array_writable, lca_taxid_array, taxid_array_length*sizeof(obiint_t)); memcpy(score_array_writable, score_array, score_array_length*sizeof(obifloat_t)); modified = true; @@ -740,6 +774,8 @@ int build_reference_db(const char* dms_name, if (j == taxid_array_length) // same or parent LCA not found, need to be appended at the end { + //fprintf(stderr, "\nAppend at the end"); + memcpy(lca_taxid_array_writable, lca_taxid_array, taxid_array_length*sizeof(obiint_t)); memcpy(score_array_writable, score_array, score_array_length*sizeof(obifloat_t)); modified = true; @@ -748,6 +784,9 @@ int build_reference_db(const char* dms_name, lca_taxid_array_writable[taxid_array_writable_length] = taxid_lca; score_array_writable[score_array_writable_length] = score; + taxid_array_writable_length++; + score_array_writable_length++; + // Remove the previous (children) LCAs from the array if their score is equal or lower while ((j>0) && (score_array_writable[j-1] <= score)) {