[med-svn] [Git][med-team/kma][master] 5 commits: Fix watch file

Andreas Tille (@tille) gitlab at salsa.debian.org
Wed Oct 12 16:52:53 BST 2022



Andreas Tille pushed to branch master at Debian Med / kma


Commits:
8561ab4b by Andreas Tille at 2022-10-12T17:50:22+02:00
Fix watch file

- - - - -
8f30a2e5 by Andreas Tille at 2022-10-12T17:50:45+02:00
New upstream version 1.4.7
- - - - -
ee09b8d4 by Andreas Tille at 2022-10-12T17:50:45+02:00
routine-update: New upstream version

- - - - -
e06ddcea by Andreas Tille at 2022-10-12T17:50:46+02:00
Update upstream source from tag 'upstream/1.4.7'

Update to upstream version '1.4.7'
with Debian dir 64bc40f7e2af1b5d3878871b22b2570da67dedb3
- - - - -
4b8c8c6a by Andreas Tille at 2022-10-12T17:51:44+02:00
routine-update: Ready to upload to unstable

- - - - -


13 changed files:

- align.c
- debian/changelog
- debian/watch
- filebuff.c
- kma.c
- mt1.c
- runkma.c
- sam.c
- savekmers.c
- seqmenttree.c
- seqmenttree.h
- seqparse.c
- version.h


Changes:

=====================================
align.c
=====================================
@@ -43,6 +43,10 @@ AlnScore skipLeadAln(Aln *aligned, Aln *Frag_align, const long unsigned *tseq, c
 	Stat.qGaps = 0;
 	Stat.pos = t_e;
 	
+	if(aligned) {
+		aligned->start = q_e;
+	}
+	
 	return Stat;
 }
 
@@ -128,7 +132,7 @@ AlnScore leadTailAln(Aln *aligned, Aln *Frag_align, const long unsigned *tseq, c
 
 void skipTrailAln(Aln *aligned, Aln *Frag_align, AlnScore *Stat, const long unsigned *tseq, const unsigned char *qseq, int t_s, int t_len, int q_s, int q_len, const int bandwidth, NWmat *matrices) {
 	if(aligned) {
-		aligned->end = 0;
+		aligned->end = q_len - q_s;
 		Frag_align->end = 0;
 	}
 }
@@ -961,8 +965,17 @@ int anker_rc(const HashMapCCI *template_index, unsigned char *qseq, int q_len, i
 		bestScore = 0;
 		points->len = 0;
 	} else if(bestScore == score) {
+		/* forward match */
 		strrc(qseq, q_len);
 	} else {
+		/* apply sam-flag */
+		/* reverse match */
+		/*
+		if(flag | 64) { // Forward read
+			flag ^= 32;
+		}
+		flag ^= 16;
+		*/
 		/* move mems down */
 		if(points->len) {
 			intcpy(points->tStart, points->tStart + points->len, mem_count);


=====================================
debian/changelog
=====================================
@@ -1,3 +1,10 @@
+kma (1.4.7-1) unstable; urgency=medium
+
+  * Fix watch file
+  * New upstream version
+
+ -- Andreas Tille <tille at debian.org>  Wed, 12 Oct 2022 17:50:54 +0200
+
 kma (1.4.3-1) unstable; urgency=medium
 
   * Team Upload.


=====================================
debian/watch
=====================================
@@ -1,6 +1,6 @@
 version=4
 
-https://bitbucket.org/genomicepidemiology/kma/downloads/?tab=tags .*/@ANY_VERSION@\.tar\.gz
+opts="mode=git,gitmode=full,dversionmangle=auto" \
+  https://bitbucket.org/genomicepidemiology/kma.git refs/tags/([\d\.\d]+)
 
-#opts="mode=git,pretty=1.1.7+git%cd.%h" \
-#    https://bitbucket.org/genomicepidemiology/kma.git HEAD
+# https://bitbucket.org/genomicepidemiology/kma/downloads/?tab=tags .*/@ANY_VERSION@\.tar\.gz


=====================================
filebuff.c
=====================================
@@ -86,7 +86,8 @@ void init_gzFile(FileBuff *inputfile) {
 		inputfile->inBuffer = tmp;
 	} else {
 		inputfile->inBuffer = inputfile->buffer;
-		inputfile->buffer = smalloc(CHUNK);
+		inputfile->buffer = smalloc(inputfile->buffSize + 1);
+		inputfile->buffer[inputfile->buffSize] = 0;
 	}
 	inputfile->next = inputfile->buffer;
 	


=====================================
kma.c
=====================================
@@ -973,9 +973,9 @@ int kma_main(int argc, char *argv[]) {
 					}
 				}
 			} else if(strcmp(argv[args], "-nc") == 0) {
-				nc = 1;
+				nc |= 2;
 			} else if(strcmp(argv[args], "-na") == 0) {
-				nc = 2;
+				nc |= 1;
 			} else if(strcmp(argv[args], "-nf") == 0) {
 				nf = 1;
 			} else if(strcmp(argv[args], "-cge") == 0) {


=====================================
mt1.c
=====================================
@@ -65,14 +65,14 @@ void printFsa_pairMt1(Qseqs *header, Qseqs *qseq, Qseqs *qual, Qseqs *header_r,
 	if(header) {
 		buff[1] = qseq->len;
 		buff[6] = header->len;
-		buff[7] = 97;
+		buff[7] = 97; /* 64 32 1 FirstInPair MateRC PE */
 		sfwrite(buff, sizeof(int), 8, out);
 		sfwrite(qseq->seq, 1, qseq->len, out);
 		sfwrite(header->seq + 1, 1, header->len, out);
 		
 		buff[1] = qseq_r->len;
 		buff[6] = header_r->len;
-		buff[7] = 145;
+		buff[7] = 145; /* 128 16 1 LastInPair RC PE */
 		strrc(qseq_r->seq, qseq_r->len);
 		sfwrite(buff, sizeof(int), 8, out);
 		sfwrite(qseq_r->seq, 1, qseq_r->len, out);
@@ -138,21 +138,20 @@ void runKMA_Mt1(char *templatefilename, char *outputfilename, char *exePrev, int
 		} else {
 			frag_out = 0;
 		}
-		if(nc == 0) {
-			strcat(outputfilename, ".aln");
-			alignment_out = sfopen(outputfilename, "w");
-			outputfilename[file_len] = 0;
+		alignment_out = 0;
+		consensus_out = 0;
+		if((nc & 1) == 0) {
 			strcat(outputfilename, ".fsa");
 			consensus_out = sfopen(outputfilename, "w");
 			outputfilename[file_len] = 0;
-		} else if(nc == 2) {
-			alignment_out = 0;
+		}
+		if((nc & 2) == 0) {
+			strcat(outputfilename, ".aln");
+			alignment_out = sfopen(outputfilename, "w");
+			outputfilename[file_len] = 0;
 			strcat(outputfilename, ".fsa");
 			consensus_out = sfopen(outputfilename, "w");
 			outputfilename[file_len] = 0;
-		} else {
-			alignment_out = 0;
-			consensus_out = 0;
 		}
 		if(print_matrix) {
 			matrix_out = gzInitFileBuff(CHUNK);
@@ -439,7 +438,7 @@ void runKMA_Mt1(char *templatefilename, char *outputfilename, char *exePrev, int
 			if(tsv) {
 				printsv(tsv_out, tsv, thread->template_name, aligned_assem, t_len, aligned_assem->readCountAln, read_score, 0, (double) read_score, p_value, read_score);
 			}
-			if(nc != 1) {
+			if(consensus_out) {
 				printConsensus(aligned_assem, thread->template_name, alignment_out, consensus_out, ref_fsa);
 			}
 			/* print matrix */
@@ -480,9 +479,11 @@ void runKMA_Mt1(char *templatefilename, char *outputfilename, char *exePrev, int
 	if(tsv) {
 		fclose(tsv_out);
 	}
+	if(consensus_out) {
+		fclose(consensus_out);
+	}
 	if(alignment_out) {
 		fclose(alignment_out);
-		fclose(consensus_out);
 	}
 	if(frag_out) {
 		destroyGzFileBuff(frag_out);


=====================================
runkma.c
=====================================
@@ -239,21 +239,20 @@ int runKMA(char *templatefilename, char *outputfilename, char *exePrev, int ConC
 		} else {
 			frag_out = 0;
 		}
-		if(nc == 0) {
-			strcat(outputfilename, ".aln");
-			alignment_out = sfopen(outputfilename, "w");
-			outputfilename[file_len] = 0;
+		alignment_out = 0;
+		consensus_out = 0;
+		if((nc & 1) == 0) {
 			strcat(outputfilename, ".fsa");
 			consensus_out = sfopen(outputfilename, "w");
 			outputfilename[file_len] = 0;
-		} else if(nc == 2) {
-			alignment_out = 0;
+		}
+		if((nc & 2) == 0) {
+			strcat(outputfilename, ".aln");
+			alignment_out = sfopen(outputfilename, "w");
+			outputfilename[file_len] = 0;
 			strcat(outputfilename, ".fsa");
 			consensus_out = sfopen(outputfilename, "w");
 			outputfilename[file_len] = 0;
-		} else {
-			alignment_out = 0;
-			consensus_out = 0;
 		}
 		frag_out_raw = tmpF(0);
 		if(!frag_out_raw) {
@@ -585,14 +584,6 @@ int runKMA(char *templatefilename, char *outputfilename, char *exePrev, int ConC
 		template_tot_ulen += template_lengths[i];
 	}
 	
-	/* here */
-	/* debug scores */
-	/*
-	for(i = 1; i < DB_size; ++i) {
-		fprintf(stdout, "%lu\t%lu\t%d\n", alignment_scores[i], uniq_alignment_scores[i], readCounts[i]);
-	}
-	*/
-	
 	/* ConClave */
 	if(ConClave == 1) {
 		fileCount = ConClavePtr(frag_in_raw, &template_fragments, DB_size, w_scores, fragmentCounts, readCounts, alignment_scores, uniq_alignment_scores, template_lengths, header, qseq, bestTemplates, best_start_pos, best_end_pos, alignFrags);
@@ -795,7 +786,7 @@ int runKMA(char *templatefilename, char *outputfilename, char *exePrev, int ConC
 					if(tsv) {
 						printsv(tsv_out, tsv, thread->template_name, aligned_assem, t_len, readCounts[template], read_score, expected, q_value, p_value, alignment_scores[template]);
 					}
-					if(nc != 1) {
+					if(consensus_out) {
 						printConsensus(aligned_assem, thread->template_name, alignment_out, consensus_out, ref_fsa);
 					}
 					/* print matrix */
@@ -859,6 +850,8 @@ int runKMA(char *templatefilename, char *outputfilename, char *exePrev, int ConC
 	}
 	if(alignment_out) {
 		fclose(alignment_out);
+	}
+	if(consensus_out) {
 		fclose(consensus_out);
 	}
 	fclose(name_file);
@@ -1000,21 +993,20 @@ int runKMA_MEM(char *templatefilename, char *outputfilename, char *exePrev, int
 		} else {
 			frag_out = 0;
 		}
-		if(nc == 0) {
-			strcat(outputfilename, ".aln");
-			alignment_out = sfopen(outputfilename, "w");
-			outputfilename[file_len] = 0;
+		alignment_out = 0;
+		consensus_out = 0;
+		if((nc & 1) == 0) {
 			strcat(outputfilename, ".fsa");
 			consensus_out = sfopen(outputfilename, "w");
 			outputfilename[file_len] = 0;
-		} else if(nc == 2) {
-			alignment_out = 0;
+		}
+		if((nc & 2) == 0) {
+			strcat(outputfilename, ".aln");
+			alignment_out = sfopen(outputfilename, "w");
+			outputfilename[file_len] = 0;
 			strcat(outputfilename, ".fsa");
 			consensus_out = sfopen(outputfilename, "w");
 			outputfilename[file_len] = 0;
-		} else {
-			alignment_out = 0;
-			consensus_out = 0;
 		}
 		frag_out_raw = tmpF(0);
 		if(!frag_out_raw) {
@@ -1510,7 +1502,7 @@ int runKMA_MEM(char *templatefilename, char *outputfilename, char *exePrev, int
 					if(tsv) {
 						printsv(tsv_out, tsv, thread->template_name, aligned_assem, t_len, readCounts[template], read_score, expected, q_value, p_value, alignment_scores[template]);
 					}
-					if(nc != 1) {
+					if(consensus_out) {
 						printConsensus(aligned_assem, thread->template_name, alignment_out, consensus_out, ref_fsa);
 					}
 					/* print matrix */
@@ -1586,6 +1578,8 @@ int runKMA_MEM(char *templatefilename, char *outputfilename, char *exePrev, int
 	}
 	if(alignment_out) {
 		fclose(alignment_out);
+	}
+	if(consensus_out) {
 		fclose(consensus_out);
 	}
 	fclose(name_file);


=====================================
sam.c
=====================================
@@ -33,8 +33,8 @@ char * makeCigar(Qseqs *Cigar, const Aln *aligned) {
 	char op, pop, *s, *cigar;
 	unsigned char *t, *q;
 	
-	if(Cigar->size < (aligned->len << 1)) {
-		Cigar->size = (aligned->len << 1);
+	if(Cigar->size < (aligned->len << 1) + 20) {
+		Cigar->size = (aligned->len << 1) + 20;
 		free(Cigar->seq);
 		Cigar->seq = smalloc(Cigar->size);
 	} else if(aligned->len == 0) {
@@ -200,14 +200,9 @@ int samwrite(const Qseqs *qseq, const Qseqs *header, const Qseqs *Qual, char *rn
 	}
 	if(aligned) {
 		cigar = makeCigar(Cigar, aligned);
-		if(2 * sizeof(int) + 1 < header->len && header->seq[header->len - 2 * sizeof(int) - 1] == 0) {
-			cigar = (char *) Cigar->seq;
-			Cigar->len += sprintf(cigar, "%dS", *((int*) (header->seq + (header->len - 2 * sizeof(int)))));
-		}
 	}
 	size = fprintf(stdout, "%s\t%d\t%s\t%d\t%d\t%s\t%s\t%d\t%d\t%s\t%s\tET:i:%d\tAS:i:%d\n", qname, flag, rname, pos, mapQ, cigar, rnext, pnext, tlen, (char *) seq, qual, et, score);
 	unlock(lock);
-	
 	if(tab < 0) {
 		qname[-tab] = '\t';
 	}


=====================================
savekmers.c
=====================================
@@ -37,7 +37,7 @@
 #include "threader.h"
 
 void (*ankerPtr)(int*, int*, int*, char*, int*, unsigned**, unsigned**, int*, CompDNA*, int, int, int, int, Qseqs*, volatile int*, FILE*) = &ankerAndClean;
-int (*kmerScan)(const HashMapKMA *, const Penalties *, int*, int*, int*, int*, CompDNA*, CompDNA*, Qseqs*, int*, const int, volatile int*, FILE*) = &save_kmers_chain; /* here */ // = &save_kmers_HMM;
+int (*kmerScan)(const HashMapKMA *, const Penalties *, int*, int*, int*, int*, CompDNA*, CompDNA*, Qseqs*, int*, const int, volatile int*, FILE*) = &save_kmers_chain;
 int (*save_kmers_pair)(const HashMapKMA *, const Penalties *, int*, int*, int*, int*, int*, int*, CompDNA*, CompDNA*, const Qseqs*, const Qseqs*, int*, const int, volatile int*, FILE*) = &save_kmers_unionPair;
 int (*get_kmers_for_pair_ptr)(const HashMapKMA *, const Penalties *, int *, int *, int *, int *, CompDNA *, int *, int) = &get_kmers_for_pair;
 int (*getMatch)(int*, int*) = &getBestMatch;
@@ -5020,24 +5020,6 @@ void ankerAndClean_MEM(int *regionTemplates, int *Score, int *Score_r, char *inc
 	header->len = l;
 }
 
-/* here */
-void checker(int *bestTemplates) {
-	
-	int i, n, check;
-	
-	check = 0;
-	n = *bestTemplates;
-	for(i = 1; i < n; ++i) {
-		if(bestTemplates[i] == 1702 || bestTemplates[i] == -1702) {
-			++check;
-		}
-	}
-	
-	if(check > 1) {
-		fprintf(stderr, "NONO, %d\n", check);
-	}
-}
-
 int save_kmers_chain(const HashMapKMA *templates, const Penalties *rewards, int *bestTemplates, int *bestTemplates_r, int *Score, int *Score_r, CompDNA *qseq, CompDNA *qseq_r, Qseqs *header, int *extendScore, const int exhaustive, volatile int *excludeOut, FILE *out) {
 	
 	/* return 0 for match, 1 otherwise */
@@ -5048,7 +5030,7 @@ int save_kmers_chain(const HashMapKMA *templates, const Penalties *rewards, int
 	int i, j, j_u, rc, Wl, W1, U, M, MM, Ms, MMs, Us, W1s, score, gaps, HIT;
 	int start, end, pos, shifter, kmersize, mlen, cover, len, template, test;
 	int cStart, cStart_r, cPos, iPos, len_len, mPos, hLen, flag, seqend, SU;
-	int *bests;
+	int VF_start, VR_start, *bests;
 	unsigned DB_size, hitCounter, hitCounter_r, ties, ties_len;
 	unsigned *values, *last;
 	short unsigned *values_s;
@@ -5548,6 +5530,8 @@ int save_kmers_chain(const HashMapKMA *templates, const Penalties *rewards, int
 	}
 	
 	/* prune hits */
+	VF_start = VF_scores ? VF_scores->start : 0;
+	VR_start = VR_scores ? VR_scores->start : 0;
 	if(!(VF_scores = pruneAnkers(VF_scores, kmersize))) {
 		best_score->score = 0;
 	}
@@ -5570,7 +5554,6 @@ int save_kmers_chain(const HashMapKMA *templates, const Penalties *rewards, int
 		best_score_len_r = 0;
 	}
 	
-	/* here */
 	/* proxi might be off */
 	cStart = -1;
 	cStart_r = -1;
@@ -5595,46 +5578,6 @@ int save_kmers_chain(const HashMapKMA *templates, const Penalties *rewards, int
 		cStart_r = tmp_score->start;;
 		rc = chooseChain(best_score, best_score_r, cStart, cStart_r, &start, &len);
 	}
-	/*
-	if(best_score_r->score < best_score->score) {
-		tmp_score = getChainTemplates(best_score, rewards, template_lengths, qseq->seqlen, kmersize, bestTemplates, Score, extendScore, include);
-		score = best_score->score;
-		cStart = (start = tmp_score->start);
-		cStart_r = -1;
-		len = best_score->end - start;
-		rc = 1;
-	} else if(best_score->score < best_score_r->score) {
-		tmp_score = getChainTemplates(best_score_r, rewards, template_lengths, qseq->seqlen, kmersize, bestTemplates_r, Score, extendScore, include);
-		score = best_score_r->score;
-		cStart = -1;
-		cStart_r = (start = tmp_score->start);
-		len = best_score_r->end - start;
-		rc = 2;
-	} else if(best_score->end == best_score_r->end) {
-		tmp_score = getChainTemplates(best_score, rewards, template_lengths, qseq->seqlen, kmersize, bestTemplates, Score, extendScore, include);
-		cStart = (start = tmp_score->start);
-		len = best_score->end - start;
-		score = best_score->score;
-		tmp_score = getChainTemplates(best_score_r, rewards, template_lengths, qseq->seqlen, kmersize, bestTemplates_r, Score, extendScore, include);
-		cStart_r = tmp_score->start;
-		start = MIN(cStart, cStart_r);
-		rc = 3;
-	} else if(best_score->end < best_score_r->end) {
-		tmp_score = getChainTemplates(best_score_r, rewards, template_lengths, qseq->seqlen, kmersize, bestTemplates_r, Score, extendScore, include);
-		score = best_score_r->score;
-		cStart = -1;
-		cStart_r = (start = tmp_score->start);
-		len = best_score_r->end - start;
-		rc = 2;
-	} else {
-		tmp_score = getChainTemplates(best_score, rewards, template_lengths, qseq->seqlen, kmersize, bestTemplates, Score, extendScore, include);
-		score = best_score->score;
-		cStart = (start = tmp_score->start);
-		cStart_r = -1;
-		len = best_score->end - start;
-		rc = 1;
-	}
-	*/
 	
 	score = MAX(best_score->score, best_score_r->score);
 	if(len < minlen || score < kmersize) {
@@ -5650,7 +5593,7 @@ int save_kmers_chain(const HashMapKMA *templates, const Penalties *rewards, int
 			if(rc & 1) {
 				score = best_score->score;
 				V_score = best_score;
-				while((V_score = getTieAnker(start, V_score, best_score))) {
+				while((V_score = getTieAnker(start < VF_start ? VF_start : start, V_score, best_score))) {
 					/*
 					1. tie anker -> tie_len == best_len
 					2. Best match is last on seq -> tie_start < best_start
@@ -5690,7 +5633,7 @@ int save_kmers_chain(const HashMapKMA *templates, const Penalties *rewards, int
 			if(rc & 2) {
 				score = best_score_r->score;
 				V_score = best_score_r;
-				while((V_score = getTieAnker(start, V_score, best_score_r))) {
+				while((V_score = getTieAnker(start < VR_start ? VR_start : start, V_score, best_score_r))) {
 					/*
 					1. tie anker -> tie_len == best_len
 					2. Best match is last on seq -> tie_start < best_start
@@ -5766,16 +5709,12 @@ int save_kmers_chain(const HashMapKMA *templates, const Penalties *rewards, int
 					best_score_r->score = 0;
 					*bestTemplates_r = 0;
 				}
-				/* here */
-				//checker(bestTemplates);
 				lock(excludeOut);
 				i = deConPrintPtr(bestTemplates, qseq, best_score->score, header, 0, out);
 				unlock(excludeOut);
 				best_score->score = 0;
 				*bestTemplates = 0;
 			} else {
-				/* here */
-				//checker(bestTemplates_r);
 				lock(excludeOut);
 				i = deConPrintPtr(bestTemplates_r, qseq_r, best_score_r->score, header, 0, out);
 				unlock(excludeOut);
@@ -5874,51 +5813,12 @@ int save_kmers_chain(const HashMapKMA *templates, const Penalties *rewards, int
 				}
 			}
 		}
+		
 		if(!best_score && !best_score_r) {
 			*include = 0;
 			return 0;
 		} else if(best_score && best_score_r) {
-			/* here */
-			/*
-			if(!best_score->score || !best_score_r->score) {
-				if(best_score->score) {
-					start = cStart;
-					len = best_score->end - start;
-					rc = 1;
-				} else {
-					start = cStart_r;
-					len = best_score_r->end - start;
-					rc = 2;
-				}
-			} else {
-				rc = chooseChain(best_score, best_score_r, cStart, cStart_r, &start, &len);
-			}
-			*/
 			rc = chooseChain(best_score, best_score_r, cStart, cStart_r, &start, &len);
-			/* proxi might be off */
-			/*
-			if(best_score_r->score < best_score->score) {
-				rc = 1;
-				start = cStart;
-				len = best_score->end - start;
-			} else if(best_score->score < best_score_r->score) {
-				rc = 2;
-				start = cStart_r;
-				len = best_score_r->end - start;
-			} else if(best_score->end == best_score_r->end) {
-				rc = 3;
-				start = MIN(cStart, cStart_r);
-				len = best_score->end - start;
-			} else if(best_score->end < best_score_r->end) {
-				rc = 2;
-				start = cStart_r;
-				len = best_score_r->end - start;
-			} else {
-				rc = 1;
-				start = cStart;
-				len = best_score->end - start;
-			}
-			*/
 		} else if(best_score) {
 			rc = 1;
 			start = cStart;
@@ -5942,8 +5842,9 @@ int save_kmers_sparse_chain(const HashMapKMA *templates, const Penalties *reward
 	static KmerAnker **tVF_scores;
 	static SeqmentTree **tSeqments;
 	int i, j, j_u, shifter, prefix_shifter, kmersize, DB_size, pos, start;
-	int Wl, W1, U, M, MM, Ms, MMs, Us, W1s, end, len, gaps, template, test;
-	int len_len, mlen, tflag, cPos, iPos, mPos, hLen, seqend, score, *bests;
+	int Wl, W1, U, M, MM, Ms, MMs, Us, W1s, end, len, gaps, template, score;
+	int len_len, mlen, tflag, cPos, iPos, mPos, hLen, seqend, test, VF_start;
+	int *bests;
 	unsigned SU, HIT, cover, hitCounter, ties, ties_len, prefix_len, flag;
 	unsigned *values, *last;
 	short unsigned *values_s;
@@ -6445,6 +6346,7 @@ int save_kmers_sparse_chain(const HashMapKMA *templates, const Penalties *reward
 	}
 	
 	/* prune hits */
+	VF_start = VF_scores ? VF_scores->start : 0;
 	if(!(VF_scores = pruneAnkers(VF_scores, kmersize))) {
 		best_score->score = 0;
 		hitCounter = 0;
@@ -6477,7 +6379,7 @@ int save_kmers_sparse_chain(const HashMapKMA *templates, const Penalties *reward
 		if(ties) {
 			score = best_score->score;
 			V_score = best_score;
-			while((V_score = getTieAnker(start, V_score, best_score))) {
+			while((V_score = getTieAnker(start < VF_start ? VF_start : start, V_score, best_score))) {
 				/*
 				1. tie anker -> tie_len == best_len
 				2. Best match is last on seq -> tie_start < best_start


=====================================
seqmenttree.c
=====================================
@@ -51,12 +51,59 @@ SeqmentTree * initSeqmentTree(SeqmentTree *src, const unsigned start, const unsi
 	return src;
 }
 
-void reallocSeqmentTree(SeqmentTree *src) {
+SeqmentTrees * rcpSeqmentTree(SeqmentTree *src, SeqmentTrees *branch) {
 	
-	src->root = realloc(src->root, (src->size <<= 1) * sizeof(SeqmentTrees));
-	if(!src->root) {
-		ERROR();
+	SeqmentTrees *dest;
+	
+	/* cp branch */
+	dest = (src->root + src->n++);
+	*dest = *branch;
+	
+	/* add subtree of the branch */
+	if(*(branch->branch)) {
+		branch->branch[0] = rcpSeqmentTree(src, branch->branch[0]);
+		branch->branch[1] = rcpSeqmentTree(src, branch->branch[1]);
 	}
+	
+	return dest;
+}
+
+void reallocSeqmentTree(SeqmentTree *src, const long unsigned size) {
+	
+	SeqmentTrees *org;
+	
+	/* save old tree */
+	org = src->root;
+	
+	/* allocate new tree */
+	src->size = size;
+	src->root = smalloc(src->size * sizeof(SeqmentTrees));
+	
+	/* cp old tree into new */
+	src->n = 0;
+	src->root = rcpSeqmentTree(src, org);
+	
+	/* clean up */
+	free(org);
+}
+
+void resizeSeqmentTree(SeqmentTree *src) {
+	
+	SeqmentTrees *org;
+	
+	/* save old tree */
+	org = src->root;
+	
+	/* allocate new tree */
+	src->size <<= 1;
+	src->root = smalloc(src->size * sizeof(SeqmentTrees));
+	
+	/* cp old tree into new */
+	src->n = 0;
+	src->root = rcpSeqmentTree(src, org);
+	
+	/* clean up */
+	free(org);
 }
 
 unsigned addSeqmentTrees(SeqmentTrees *root, SeqmentTrees *node) {
@@ -139,7 +186,7 @@ int growSeqmentTree(SeqmentTree *src, const unsigned start, const unsigned end)
 	
 	/* make room for new anker */
 	if(src->size <= src->n + 2) {
-		reallocSeqmentTree(src);
+		resizeSeqmentTree(src);
 	} else if(src->n == 0) {
 		initSeqmentTree(src, start, end);
 		return end - start;


=====================================
seqmenttree.h
=====================================
@@ -17,7 +17,6 @@
  * limitations under the License.
 */
 #define _XOPEN_SOURCE 600
-//cc -Wall -O3 -std=c99 -c -o seqmenttree seqmenttree.c
 #ifndef SEQMENTTREE
 #define SEQMENTTREE 1
 typedef struct seqmentTree SeqmentTree;
@@ -31,13 +30,16 @@ struct seqmentTrees {
 	unsigned start;
 	unsigned end;
 	unsigned covered;
+	unsigned overhead; /* not used */
 	struct seqmentTrees *branch[2];
 };
 #endif
 
 SeqmentTree * initializeSeqmentTree(long unsigned size);
 SeqmentTree * initSeqmentTree(SeqmentTree *src, const unsigned start, const unsigned end);
-void reallocSeqmentTree(SeqmentTree *src);
+SeqmentTrees * rcpSeqmentTree(SeqmentTree *src, SeqmentTrees *branch);
+void reallocSeqmentTree(SeqmentTree *src, const long unsigned size);
+void resizeSeqmentTree(SeqmentTree *src);
 unsigned addSeqmentTrees(SeqmentTrees *root, SeqmentTrees *node);
 int growSeqmentTree(SeqmentTree *src, const unsigned start, const unsigned end);
 unsigned queSeqmentTree(SeqmentTrees *src, const unsigned start, const unsigned end);


=====================================
seqparse.c
=====================================
@@ -66,7 +66,7 @@ int openAndDetermine(FileBuff *inputfile, char *filename) {
 int FileBuffgetFsa(FileBuff *src, Qseqs *header, Qseqs *qseq, char *trans) {
 	
 	unsigned char *buff, *seq;
-	unsigned size, avail;
+	int size, avail;
 	
 	/* init */
 	avail = src->bytes;
@@ -161,7 +161,7 @@ int FileBuffgetFsa(FileBuff *src, Qseqs *header, Qseqs *qseq, char *trans) {
 int FileBuffgetFsaSeq(FileBuff *src, Qseqs *qseq, char *trans) {
 	
 	unsigned char *buff, *seq;
-	unsigned size, avail;
+	int size, avail;
 	
 	/* init */
 	avail = src->bytes;
@@ -241,7 +241,7 @@ int FileBuffgetFsaSeq(FileBuff *src, Qseqs *qseq, char *trans) {
 int FileBuffgetFq(FileBuff *src, Qseqs *header, Qseqs *qseq, Qseqs *qual, char *trans) {
 	
 	unsigned char *buff, *seq;
-	unsigned size, avail;
+	int size, avail;
 	
 	/* init */
 	avail = src->bytes;
@@ -396,7 +396,7 @@ int FileBuffgetFq(FileBuff *src, Qseqs *header, Qseqs *qseq, Qseqs *qual, char *
 int FileBuffgetFqSeq(FileBuff *src, Qseqs *qseq, Qseqs *qual, char *trans) {
 	
 	unsigned char *buff, *seq;
-	unsigned size, avail;
+	int size, avail;
 	
 	/* init */
 	avail = src->bytes;
@@ -532,11 +532,12 @@ int FileBuffgetFqSeq(FileBuff *src, Qseqs *qseq, Qseqs *qual, char *trans) {
 
 int getPhredFileBuff(FileBuff *dest) {
 	
-	int seek, avail, scale;
+	int seek, avail, scale, len, maxlen;
 	unsigned char *buff;
 	
 	avail = dest->bytes;
 	scale = 33;
+	maxlen = 0;
 	buff = dest->next;
 	
 	while(avail) {
@@ -547,6 +548,7 @@ int getPhredFileBuff(FileBuff *dest) {
 			}
 		}
 		
+		len = 0;
 		seek = avail ? 1 : 0;
 		while(seek && --avail) {
 			if(*++buff == '\n') {
@@ -558,8 +560,12 @@ int getPhredFileBuff(FileBuff *dest) {
 			} else if(94 < *buff) {
 				scale = 64;
 			}
+			++len;
+		}
+		if(maxlen < len) {
+			maxlen = len;
 		}
 	}
 	
-	return scale;
+	return maxlen <= 301 ? scale : 33;
 }


=====================================
version.h
=====================================
@@ -17,4 +17,4 @@
  * limitations under the License.
 */
 
-#define KMA_VERSION "1.4.3"
+#define KMA_VERSION "1.4.7"



View it on GitLab: https://salsa.debian.org/med-team/kma/-/compare/183dccfc91a675ced2023429d965243a98521a4f...4b8c8c6acf885daa794e5fbac78b7c170ef9cda5

-- 
View it on GitLab: https://salsa.debian.org/med-team/kma/-/compare/183dccfc91a675ced2023429d965243a98521a4f...4b8c8c6acf885daa794e5fbac78b7c170ef9cda5
You're receiving this email because of your account on salsa.debian.org.


-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://alioth-lists.debian.net/pipermail/debian-med-commit/attachments/20221012/c87fca3e/attachment-0001.htm>


More information about the debian-med-commit mailing list