Fixed a bug when primers would touch or overlap, producing amplicons of
size <= 0
This commit is contained in:
35
src/ecopcr.c
35
src/ecopcr.c
@ -6,7 +6,7 @@
|
||||
#include <getopt.h>
|
||||
|
||||
|
||||
#define VERSION "0.8.0"
|
||||
#define VERSION "1.0.0"
|
||||
|
||||
|
||||
/* ----------------------------------------------- */
|
||||
@ -80,7 +80,7 @@ static void PrintHelp()
|
||||
PP "column 21 : sequence\n");
|
||||
PP "column 22 : definition\n");
|
||||
PP "------------------------------------------\n");
|
||||
PP " http://www.grenoble.prabi.fr/trac/ecoPCR/\n");
|
||||
PP " https://git.metabarcoding.org/obitools/ecopcr/wikis/home\n");
|
||||
PP "------------------------------------------\n\n");
|
||||
PP "\n");
|
||||
|
||||
@ -566,11 +566,11 @@ int main(int argc, char **argv)
|
||||
)
|
||||
{
|
||||
|
||||
scname = taxonomy->taxons->taxon[seq->taxid].name;
|
||||
strncpy(head,seq->SQ,10);
|
||||
head[10]=0;
|
||||
strncpy(tail,seq->SQ+seq->SQ_length-10,10);
|
||||
tail[10]=0;
|
||||
//scname = taxonomy->taxons->taxon[seq->taxid].name;
|
||||
//strncpy(head,seq->SQ,10);
|
||||
//head[10]=0;
|
||||
//strncpy(tail,seq->SQ+seq->SQ_length-10,10);
|
||||
//tail[10]=0;
|
||||
|
||||
apatseq=ecoseq2apatseq(seq,apatseq,circular);
|
||||
|
||||
@ -613,15 +613,17 @@ int main(int argc, char **argv)
|
||||
errj =apatseq->hiterr[1]->val[j];
|
||||
length = 0;
|
||||
if (posj > posi)
|
||||
length=posj - posi - o1->patlen - o2->patlen;
|
||||
length = posj - posi - o1->patlen - o2->patlen;
|
||||
if (posj < posi)
|
||||
length= posj + apatseq->seqlen - posi - o1->patlen - o2->patlen;
|
||||
if (length &&
|
||||
//length = posj + apatseq->seqlen - posi - o1->patlen - o2->patlen; // TODO
|
||||
length = posi - posj - o1->patlen - o2->patlen;
|
||||
if ((length>0) && // For when primers touch or overlap
|
||||
(!lmin || (length >= lmin)) &&
|
||||
(!lmax || (length <= lmax)))
|
||||
{
|
||||
printRepeat(seq,oligo1,oligo2,&tparm,o1,o2c,'D',kingdom_mode,posi,posj,erri,errj,taxonomy,delta);
|
||||
//printf("%s\tD\t%s...%s (%d)\t%d\t%d\t%d\t%d\t%s\n",seq->AC,head,tail,seq->SQ_length,o1Hits,o2cHits,posi,posj,scname);
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -666,13 +668,15 @@ int main(int argc, char **argv)
|
||||
|
||||
length = 0;
|
||||
if (posj > posi)
|
||||
length=posj - posi + 1 - o2->patlen - o1->patlen; /* - o1->patlen : suppress by <EC> */
|
||||
//length = posj - posi + 1 - o2->patlen - o1->patlen; /* - o1->patlen : deleted by <EC> (prior to the OBITools3) */ TODO ????
|
||||
length = posj - posi - o2->patlen - o1->patlen;
|
||||
if (posj < posi)
|
||||
length= posj + apatseq->seqlen - posi - o1->patlen - o2->patlen;
|
||||
|
||||
if (length &&
|
||||
//length = posj + apatseq->seqlen - posi - o1->patlen - o2->patlen; TODO ????
|
||||
length = posi - posj - o2->patlen - o1->patlen;
|
||||
if ((length>0) && // For when primers touch or overlap
|
||||
(!lmin || (length >= lmin)) &&
|
||||
(!lmax || (length <= lmax)))
|
||||
{
|
||||
printRepeat(seq,oligo1,oligo2,&tparm,o2,o1c,'R',kingdom_mode,posi,posj,erri,errj,taxonomy,delta);
|
||||
//printf("%s\tR\t%s...%s (%d)\t%d\t%d\t%d\t%d\t%s\n",seq->AC,head,tail,seq->SQ_length,o2Hits,o1cHits,posi,posj,scname);
|
||||
}
|
||||
@ -680,6 +684,7 @@ int main(int argc, char **argv)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
} /* End of taxonomic selection */
|
||||
|
||||
|
Reference in New Issue
Block a user