Онлайн-поиск по шаблону по StringSet

Учебник по SeqAn для сопоставления с образцом упоминает, что StringSetможет служить как стога сена или иголки. В попытке использовать StringSet как стог сена следующим образом,

StringSet<Dna5String> seqs;

/* do stuff to load sequences into seqs */

Finder<StringSet<Dna5String> > finder(seqs);
Pattern<Dna5String, Simple> pattern(Dna5String("GAATTC"));

if (find(finder, pattern))
{
std::cout << '[' << beginPosition(finder) << ',' << endPosition(finder)
<< ")\t" << infix(finder) << std::endl;
} else
{
std::cout << "No match!";
}

Я получаю ошибку:

ошибка: использование перегруженного оператора ‘==’ неоднозначно (с типами операндов ‘const const seqan :: String, seqan :: Alloc>’ и ‘const seqan :: SimpleType’)

У кого-нибудь есть идея относительно того, как это должно быть сделано правильно?

Используя один Dna5String в Finder работает отлично. Учебник показывает, как сделать не в сети поиск (т. е. с индексацией), но это не то, что я хотел бы. Я бы предпочел не выполнять итерацию вручную StringSet если инструменты Finder-Pattern в SeqAn уже обрабатывают это.

1

Решение

ты можешь попробовать,

#include <iostream>
#include <seqan/sequence.h>  // CharString, ...
#include <seqan/find.h>
#include <seqan/stream.h>

using namespace seqan;

typedef Iterator<StringSet<Dna5String> >::Type TStringSetIterator;

int main(int, char const **)
{
StringSet<Dna5String> seqs;
Dna5String seq1 =
"TAGGTTTTCCGAAAAGGTAGCAACTTTACGTGATCAAACCTCTGACGGGGTTTTCCCCGTCGAAATTGGGTG""TTTCTTGTCTTGTTCTCACTTGGGGCATCTCCGTCAAGCCAAGAAAGTGCTCCCTGGATTCTGTTGCTAACG""AGTCTCCTCTGCATTCCTGCTTGACTGATTGGGCGGACGGGGTGTCCACCTGACGCTGAGTATCGCCGTCAC""GGTGCCACATGTCTTATCTATTCAGGGATCAGAATTCATTCAGGAAATCAGGAGATGCTACACTTGGGTTAT""CGAAGCTCCTTCCAAGGCGTAGCAAGGGCGACTGAGCGCGTAAGCTCTAGATCTCCTCGTGTTGCAACTACA""CGCGCGGGTCACTCGAAACACATAGTATGAACTTAACGACTGCTCGTACTGAACAATGCTGAGGCAGAAGAT""CGCAGACCAGGCATCCCACTGCTTGAAAAAACTATNNNNCTACCCGCCTTTTTATTATCTCATCAGATCAAG";
Dna5String seq2 =
"ACCGACGATTAGCTTTGTCCGAGTTACAACGGTTCAATAATACAAAGGATGGCATAAACCCATTTGTGTGAA""AGTGCCCATCACATTATGATTCTGTCTACTATGGTTAATTCCCAATATACTCTCGAAAAGAGGGTATGCTCC""CACGGCCATTTACGTCACTAAAAGATAAGATTGCTCAAANNNNNNNNNACTGCCAACTTGCTGGTAGCTTCA""GGGGTTGTCCACAGCGGGGGGTCGTATGCCTTTGTGGTATACCTTACTAGCCGCGCCATGGTGCCTAAGAAT""GAAGTAAAACAATTGATGTGAGACTCGACAGCCAGGCTTCGCGCTAAGGACGCAAAGAAATTCCCTACATCA""GACGGCCGCGNNNAACGATGCTATCGGTTAGGACATTGTGCCCTAGTATGTACATGCCTAATACAATTGGAT""CAAACGTTATTCCCACACACGGGTAGAAGAACNNNNATTACCCGTAGGCACTCCCCGATTCAAGTAGCCGCG";

clear(seqs);
appendValue(seqs, seq1);
appendValue(seqs, seq2);

Pattern<Dna5String, Simple> pattern(Dna5String("GAATTC"));

//For each sequence in seqs
for (TStringSetIterator it = begin(seqs); it != end(seqs); ++it)
{
std::cout << *it << std::endl;
//I create a finder for each sequence in seqs
Finder<Dna5String> finder(*it);
if (find(finder, pattern)){
std::cout << '[' << beginPosition(finder) << ',' << endPosition(finder)
<< ")\t" << infix(finder) << std::endl;
}else{
std::cout << "No match!" << std::endl;
}
}
return 0;
}

ты получаешь:

TAGGTTTTCCGAAAAGGTAGCAACTTTACGTGATCAAACCTCTGACGGGGTTTTCCCCGTCGAAATTGGGTGTTTCTTGTCTTGTTCTCACTTGGGGCATCTCCGTCAAGCCAAGAAAGTGCTCCCTGGATTCTGTTGCTAACGAGTCTCCTCTGCATTCCTGCTTGACTGATTGGGCGGACGGGGTGTCCACCTGACGCTGAGTATCGCCGTCACGGTGCCACATGTCTTATCTATTCAGGGATCAGAATTCATTCAGGAAATCAGGAGATGCTACACTTGGGTTATCGAAGCTCCTTCCAAGGCGTAGCAAGGGCGACTGAGCGCGTAAGCTCTAGATCTCCTCGTGTTGCAACTACACGCGCGGGTCACTCGAAACACATAGTATGAACTTAACGACTGCTCGTACTGAACAATGCTGAGGCAGAAGATCGCAGACCAGGCATCCCACTGCTTGAAAAAACTATNNNNCTACCCGCCTTTTTATTATCTCATCAGATCAAG
[247,253) GAATTC
ACCGACGATTAGCTTTGTCCGAGTTACAACGGTTCAATAATACAAAGGATGGCATAAACCCATTTGTGTGAAAGTGCCCATCACATTATGATTCTGTCTACTATGGTTAATTCCCAATATACTCTCGAAAAGAGGGTATGCTCCCACGGCCATTTACGTCACTAAAAGATAAGATTGCTCAAANNNNNNNNNACTGCCAACTTGCTGGTAGCTTCAGGGGTTGTCCACAGCGGGGGGTCGTATGCCTTTGTGGTATACCTTACTAGCCGCGCCATGGTGCCTAAGAATGAAGTAAAACAATTGATGTGAGACTCGACAGCCAGGCTTCGCGCTAAGGACGCAAAGAAATTCCCTACATCAGACGGCCGCGNNNAACGATGCTATCGGTTAGGACATTGTGCCCTAGTATGTACATGCCTAATACAATTGGATCAAACGTTATTCCCACACACGGGTAGAAGAACNNNNATTACCCGTAGGCACTCCCCGATTCAAGTAGCCGCG
Не совпадает!

РЕДАКТИРОВАТЬ, Я надеюсь, что это поможет вам

....
#include <seqan/index.h>
....

Pattern<Dna5String> pattern(Dna5String("GAATTC"));
Index< StringSet<Dna5String > > myIndex(seqs);
Finder< Index<StringSet<Dna5String > > > finder(myIndex);
while (find(finder, pattern)){
std::cout << '[' << beginPosition(finder) << ',' << endPosition(finder)
<< ")\t" << infix(finder) << std::endl;
}
....

ты получаешь,

[< 0, 247 >,< 0, 253 >) GAATTC
1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]