Manage sequence circularity

git-svn-id: https://www.grenoble.prabi.fr/svn/LECASofts/ecoPCR/trunk@166 60f365c0-8329-0410-b2a4-ec073aeeaa1d
This commit is contained in:
2008-04-28 15:49:12 +00:00
parent 4b74056af8
commit d863b7e48e
6 changed files with 134 additions and 51 deletions
+1 -1
View File
@@ -251,7 +251,7 @@ int32_t delete_apatseq(SeqPtr pseq);
PatternPtr buildPattern(const char *pat, int32_t error_max);
PatternPtr complementPattern(PatternPtr pat);
SeqPtr ecoseq2apatseq(ecoseq_t *in,SeqPtr out);
SeqPtr ecoseq2apatseq(ecoseq_t *in,SeqPtr out,int32_t circular);
char *ecoComplementPattern(char *nucAcSeq);
char *ecoComplementSequence(char *nucAcSeq);
+13 -8
View File
@@ -54,6 +54,9 @@ void EncodeSequence(SeqPtr seq)
cseq++;
}
for (i=0,cseq=seq->cseq;i < seq->circular; i++,cseq++)
*data++ = (IS_UPPER(*cseq) ? *cseq - 'A' : 0x0);
for (i = 0 ; i < MAX_PATTERN ; i++)
seq->hitpos[i]->top = seq->hiterr[i]->top = 0;
@@ -63,7 +66,7 @@ void EncodeSequence(SeqPtr seq)
#undef IS_UPPER
SeqPtr ecoseq2apatseq(ecoseq_t *in,SeqPtr out)
SeqPtr ecoseq2apatseq(ecoseq_t *in,SeqPtr out,int32_t circular)
{
int i;
@@ -83,20 +86,22 @@ SeqPtr ecoseq2apatseq(ecoseq_t *in,SeqPtr out)
}
}
out->name = in->AC;
out->seqsiz = out->seqlen = in->SQ_length;
out->circular = circular;
if (!out->data)
{
out->data = ECOMALLOC(out->seqlen *sizeof(UInt8),
out->data = ECOMALLOC((out->seqlen+circular) *sizeof(UInt8),
"Error in Allocation of a new Seq data member");
out->datsiz= out->seqlen;
out->datsiz= out->seqlen+circular;
}
else if (out->seqlen >= out->datsiz)
else if ((out->seqlen +circular) >= out->datsiz)
{
out->data = ECOREALLOC(out->data,out->seqlen,
out->data = ECOREALLOC(out->data,(out->seqlen+circular),
"Error during Seq data buffer realloc");
out->datsiz= out->seqlen;
out->datsiz= out->seqlen+circular;
}
out->cseq = in->SQ;
@@ -191,4 +196,4 @@ PatternPtr complementPattern(PatternPtr pat)
return pattern;
}
}
+36 -14
View File
@@ -109,22 +109,44 @@ char *getSubSequence(char* nucAcSeq,int32_t begin,int32_t end)
static int32_t buffSize= 0;
int32_t length;
length = end - begin;
if (length >= buffSize)
if (begin < end)
{
buffSize = length+1;
if (buffer)
buffer=ECOREALLOC(buffer,buffSize,
"Error in reallocating sub sequence buffer");
else
buffer=ECOMALLOC(buffSize,
"Error in allocating sub sequence buffer");
length = end - begin;
if (length >= buffSize)
{
buffSize = length+1;
if (buffer)
buffer=ECOREALLOC(buffer,buffSize,
"Error in reallocating sub sequence buffer");
else
buffer=ECOMALLOC(buffSize,
"Error in allocating sub sequence buffer");
}
strncpy(buffer,nucAcSeq + begin,length);
buffer[length]=0;
}
else
{
length = end + strlen(nucAcSeq) - begin;
if (length >= buffSize)
{
buffSize = length+1;
if (buffer)
buffer=ECOREALLOC(buffer,buffSize,
"Error in reallocating sub sequence buffer");
else
buffer=ECOMALLOC(buffSize,
"Error in allocating sub sequence buffer");
}
strncpy(buffer,nucAcSeq+begin,length - end);
strncpy(buffer+(length-end),nucAcSeq ,end);
buffer[length]=0;
}
strncpy(buffer,nucAcSeq + begin,length);
buffer[length]=0;
return buffer;
}