Hi Andres, You can tell that only from the scores. If I remember it correctly each fragment gets the local alignment score it stems from. This is indeed not perfect but I haven't implemented an iterator yet giving you each local alignment one after another. If you look at the code, however, the SmithWatermanClump (Waterman-Eggert) algorithm simply iteratively calls the standard SmithWaterman algorithm with an array of forbidden paths. You can simply reuse that loop and do your stuff with each local alignment within that loop. Best regards, Tobias > -----Ursprüngliche Nachricht----- > Von: seqan-dev-bounces@lists.fu-berlin.de > [mailto:seqan-dev-bounces@lists.fu-berlin.de] Im Auftrag von > andres.burgos@irisa.fr > Gesendet: Tuesday, August 25, 2009 2:34 PM > An: Rausch, Tobias > Cc: 'seqan-dev@lists.fu-berlin.de' > Betreff: Re: [Seqan-dev] multiLocalAlignment function > > > Hi Tobias, thanks for the example, it is now working fine! > But I still have a doubt, in your example's output you say > that the first alignment consists of these two fragments: > > 0,5,ATGC,1,5,TTGC > 0,1,TCG,1,2,TCG > > and the other alignment consist of two other fragments. So my > question is, how can you tell that? The variable containing > the fragment's info is matches, and its length is 4 in that case. > > Regards, > Andres. > > > Hi Andres, > > > > So here is an example: > > > > #include <iostream> > > #include <seqan/align.h> > > #include <seqan/graph_align.h> > > #include <seqan/graph_msa.h> > > > > using namespace seqan; > > > > int main() > > { > > typedef String<Dna> TSequence; > > TSequence seq1 = "atcgaatgcgga"; > > TSequence seq2 = "actcgttgca"; > > Score<int> score(2, -1, -1, -2); > > > > typedef StringSet<TSequence, Dependent<> > TStringSet; > > TStringSet string_set; > > appendValue(string_set, seq1); > > appendValue(string_set, seq2); > > > > typedef String<Fragment<> > TFragmentString; > > TFragmentString matches; > > typedef String<int> TScoreValues; > > TScoreValues scores; > > > > multiLocalAlignment(string_set, matches, scores, score, 2, > > SmithWatermanClump()); > > _debugMatches(string_set, matches); > > return 0; > > } > > > > > > It returns the two best local alignments as a string of > fragments. The > > fragments are the gapless aligned segments of an alignment: > > 0,5,ATGC,1,5,TTGC > > 0,1,TCG,1,2,TCG > > The first number is the sequence id, then comes the begin > position. So > > the alignment is: > > TCGAAATGC > > TCG--TTGC > > > > The second local alignment is: > > 0,8,CG,1,3,CG > > 0,4,AAT,1,0,ACT > > > > The score string has the same length as the string of > segment matches. > > Each fragment gets > > the score of the local alignment it comes from. > > > > I am not sure if this was already working in the last release, so > > please use the SVN. > > http://trac.mi.fu-berlin.de/seqan/wiki/Development > > > > > > Best regards, Tobias > > > > > > > >> -----Ursprüngliche Nachricht----- > >> Von: seqan-dev-bounces@lists.fu-berlin.de > >> [mailto:seqan-dev-bounces@lists.fu-berlin.de] Im Auftrag von > >> andres.burgos@irisa.fr > >> Gesendet: Sunday, August 23, 2009 7:55 PM > >> An: Rausch, Tobias > >> Cc: seqan-dev@lists.fu-berlin.de > >> Betreff: Re: [Seqan-dev] multiLocalAlignment function > >> > >> > >> Hi Tobias, thanks for your reply, I'll take a closer look > at the code > >> so maybe I'll figure it out, but the example will still be helpful. > >> > >> Danke schoen! > >> Andres > >> > >> > Hello Andres, > >> > > >> > The multi-local alignment algorithm we have implemented > is the one > >> > from Waterman and Eggert. > >> > It returns possibly overlapping local alignments, so it is not a > >> > repeated match finder. > >> > > >> > It is implemented in > >> > ./seqan/graph_align/graph_align_smith_waterman_clump.h and > >> as you can > >> > see at the bottom of the file it repeatedly calls the standard > >> > smith-waterman alignment algorithm. Each found local > >> alignment is then > >> > forbidden in the next run. > >> > > >> > I send you an example on how to use it on Monday. > >> > > >> > Best regards, > >> > Tobias > >> > > >> > > >> > ________________________________________ > >> > From: seqan-dev-bounces@lists.fu-berlin.de > >> > [seqan-dev-bounces@lists.fu-berlin.de] On Behalf Of > >> > andres.burgos@irisa.fr [andres.burgos@irisa.fr] > >> > Sent: Friday, August 21, 2009 6:01 PM > >> > To: seqan-dev@lists.fu-berlin.de > >> > Subject: [Seqan-dev] multiLocalAlignment function > >> > > >> > Hi! > >> > > >> > I'm currently trying to make work the function > >> > > >> > multiLocalAlignment(graph, edgeMap, score, numAlign, tag) > >> > > >> > but I can't success, so I was hoping to get some help, > >> since it's not > >> > documented on the web site. I was also wondering weather > >> this function > >> > would return overlapping or non-overlapping alignments. > >> > > >> > Ok, so here is the code I'm working on: > >> > > >> > typedef seqan::String<seqan::AminoAcid> TString; > >> > typedef seqan::StringSet<TString, seqan::Dependent<> > > >> TStringSet; > >> > typedef seqan::Graph<seqan::Alignment<TStringSet, > >> > seqan::AminoAcid> > TGraph; > >> > > >> > TStringSet str; > >> > TString s1 ("some string"); > >> > TString s2 ("some other string"); > >> > > >> > seqan::appendValue(str, s1); > >> > seqan::appendValue(str, s2); > >> > > >> > seqan::Score<int, seqan::Pam<> > pam (250, -1, 0); > >> > TGraph g(str); > >> > > >> > > >> seqan::String<seqan::IntervalTreeNode<seqan::IntervalAndCargo<int, > >> > int> > > propMap; > >> > seqan::resizeEdgeMap(g, propMap); > >> > > >> > seqan::multiLocalAlignment(g, propMap, pam, 10, > >> > seqan::SmithWaterman()); > >> > > >> > This won't compile, throwing this error: > >> > > >> > ../seqan-1.1/seqan/graph_align/graph_align_interface.h: > In function > >> > 'void > >> > > seqan::multiLocalAlignment(seqan::Graph<seqan::Alignment<TStringSet > >> > , TCargo, TSpec> >&, TPropertyMap&, const > seqan::Score<TScoreValue, > >> > TSpec2>&, TSize, TTag) [with TStringSet = > >> > seqan::StringSet<seqan::String<seqan::SimpleType<unsigned char, > >> > seqan::_AminoAcid>, seqan::Alloc<void> >, seqan::Dependent<const > >> > seqan::Tag<seqan::TagGenerous_> > >, TCargo = > >> > seqan::SimpleType<unsigned char, seqan::_AminoAcid>, > TSpec = const > >> > seqan::Tag<seqan::Default_>, TPropertyMap = > >> > > seqan::String<seqan::IntervalTreeNode<seqan::IntervalAndCargo<int, > >> > char>, seqan::StorePointsOnly>, seqan::Alloc<void> >, > TScoreValue = > >> > int, TSpec2 = seqan::Pam<seqan::SimpleType<unsigned char, > >> > seqan::_AminoAcid>, seqan::Pam_Data_Dayhoff_MDM78>, TSize = > >> int, TTag > >> > = > >> > seqan::Tag<seqan::SmithWaterman_>]': > >> > readers/SWReader.cc:26: instantiated from here > >> > ../seqan-1.1/seqan/graph_align/graph_align_interface.h:234: > >> error: no > >> > matching function for call to > >> > '_localAlignment(seqan::String<seqan::Fragment<unsigned int, > >> > seqan::ExactFragment<const seqan::Tag<seqan::Default_> > >, > >> > seqan::Alloc<void> >&, > >> > seqan::StringSet<seqan::String<seqan::SimpleType<unsigned char, > >> > seqan::_AminoAcid>, seqan::Alloc<void> >, seqan::Dependent<const > >> > seqan::Tag<seqan::TagGenerous_> > >&, > >> > > seqan::String<seqan::IntervalTreeNode<seqan::IntervalAndCargo<int, > >> > char>, seqan::StorePointsOnly>, seqan::Alloc<void> >&, const > >> > seqan::Score<int, seqan::Pam<seqan::SimpleType<unsigned char, > >> > seqan::_AminoAcid>, seqan::Pam_Data_Dayhoff_MDM78> >&, int&, > >> > seqan::Tag<seqan::SmithWaterman_>)' > >> > make: *** [readers/SWReader.o] Error 1 > >> > > >> > So, maybe an example would make things clearer... > >> > > >> > Thanks in advance, > >> > Andres > >> > > >> > > >> > _______________________________________________ > >> > seqan-dev mailing list > >> > seqan-dev@lists.fu-berlin.de > >> > https://lists.fu-berlin.de/listinfo/seqan-dev > >> > > >> > >> > >> > >> _______________________________________________ > >> seqan-dev mailing list > >> seqan-dev@lists.fu-berlin.de > >> https://lists.fu-berlin.de/listinfo/seqan-dev > >> > > > > _______________________________________________ > seqan-dev mailing list > seqan-dev@lists.fu-berlin.de > https://lists.fu-berlin.de/listinfo/seqan-dev >