/* searching for patterns in the analyzed sequence - filling MkrStart[] and MkrEnd[] */
NPatterns=-1;
if (IQStr==0 || IQStr==2) {
printf ("Direct strand ...\n");
for (L=1;L<=LSeq;++L) {
if ( L%100000==0 || L==LSeq ) printf ("%li kb , %li patterns found\n",L/1000,NPatterns+1);
for (IMkr=0;IMkr<=NMkr;++IMkr) {
if (Mkr[IMkr].IQStrand!=1) {
LP=IsWord(L,Mkr[IMkr].Seq,L,Mkr[IMkr].Seq,0,&NErr,&NGoodEnds,GoodEnds,GoodEndsErr);
if (IQOverlap==0) {
if (LP>Mkr[IMkr].LastEnd) {
if (L<=Mkr[IMkr].LastEnd) {
MkrEnd[NPatterns]=LP;
}
else {
++NPatterns;
if (NPatterns>=MAXPATTERNS) {
printf ("Pattern(s) too general\n");
exit(0);
};
MkrStart[NPatterns]=L;
MkrEnd[NPatterns]=LP;
MkrType[NPatterns]=IMkr+1;
};
Mkr[IMkr].LastEnd=LP;
};
}
else {
if (LP>0) {
for (I=0;I<=NGoodEnds;++I) {
++NPatterns;
if (NPatterns>=MAXPATTERNS) {
printf ("Pattern(s) too general\n");
exit(0);
};
MkrStart[NPatterns]=L;
MkrEnd[NPatterns]=GoodEnds[I];
fprintf (OFiM,"%10i%10i %3i\n",L,GoodEnds[I],IMkr+1);
};
};
};
};
};
};
};
if (IQStr==1 || IQStr==2) {
printf ("Complementary strand ...\n");
for (IMkr=0;IMkr<=NMkr;++IMkr) {
Mkr[IMkr].LastEnd=LSeq+1;
};
for (L=LSeq;L>=1;--L) {
if ( (LSeq-L)%100000==0 || L==1 ) printf ("%li kb , %li patterns found\n",(LSeq-L)/1000,NPatterns+1);
for (IMkr=0;IMkr<=NMkr;++IMkr) {
if (Mkr[IMkr].IQStrand!=0) {
LP=IsWordC(L,Mkr[IMkr].Seq,L,Mkr[IMkr].Seq,0,&NErr,&NGoodEnds,GoodEnds,GoodEndsErr);
if (IQOverlap==0) {
if (LP<Mkr[IMkr].LastEnd && LP>0) {
if (L>=Mkr[IMkr].LastEnd) {
MkrStart[NPatterns]=LP;
}
else {
++NPatterns;
if (NPatterns>=MAXPATTERNS) {
printf ("Pattern(s) too general\n");
exit(0);
};
MkrEnd[NPatterns]=L;
MkrStart[NPatterns]=LP;
MkrType[NPatterns]=IMkr+1;
};
Mkr[IMkr].LastEnd=LP;
};
}
else {
if (LP>0) {
for (I=0;I<=NGoodEnds;++I) {
++NPatterns;
if (NPatterns>=MAXPATTERNS) {
printf ("Pattern(s) too general\n");
exit(0);
};
MkrEnd[NPatterns]=L;
MkrStart[NPatterns]=GoodEnds[I];
fprintf (OFiM,"%10i%10i %3i\n",GoodEnds[I],L,IMkr+1);
};
};
};
};
};
};
};
if (IQOverlap==0) {
for (L=0;L<=NPatterns;++L) {
fprintf (OFiM,"%10i%10i %3i\n",MkrStart[L],MkrEnd[L],MkrType[L]);
};
};