fn() integrateAlign
Integrates an alignment into another by copying the gaps.

Defined in <seqan/align.h>
Signature void integrateAlign(align1, align2[, positions]);

Parameters

align1 Target Alignment object into which align2 is to be integrated.
align2 Alignment object that is to be integrated into align1.
positions The integration positions in align1 for all rows (view positions), String of positions.

Detailed Description

Examples

#include <iostream>

#include <seqan/align.h>
#include <seqan/sequence.h>

using namespace seqan;

int main()
{
    // We will create the following alignment between the subject and the
    // query (with clipping in subject).
    //
    //                    1    1    2    2
    //          0    5    0    5    0    5
    //          :    .    :    .    :    .
    // subject  CPISRTW-SIFRCWALLKAMEAALL
    //             |||| | |||||
    // query       SRTWAS-FRCWA
    //
    //             | clipping |
    //             '----------'

    Peptide subject = "CPISRTWSIFRCWALLKAMEAALL";
    Peptide query   = "SRTWASFRCWA";

    std::cout << "subject: " << subject << "\n"
              << "query:   " << query << "\n\n";

    // Build initial alignment.  Note that the resulting alignment does not
    // make sense yet since the row size is different.
    Align<Peptide> align;
    resize(rows(align), 2);
    setSource(row(align, 0), subject);
    setSource(row(align, 1), query);

    // Build the alignment that is to be integrated into align.
    Infix<Peptide>::Type subjectInfix = infix(subject, 3, 9);
    Infix<Peptide>::Type queryInfix = infix(query, 0, 6);

    std::cout << "subject infix: " << subjectInfix << "\n"
              << "query infix:   " << queryInfix << "\n\n";

    Align<Infix<Peptide>::Type> infixAlign;
    resize(rows(infixAlign), 2);
    setSource(row(infixAlign, 0), subjectInfix);
    setSource(row(infixAlign, 1), queryInfix);

    globalAlignment(infixAlign, Blosum62());

    std::cout << "infix alignment\n"
              << infixAlign;

    // Now integrate infixAlign into align.  Note that the alignment itself
    // does not make sense yet either: the whole query is aligned to a part of
    // the subject and we have to limit/clip the subject row of align.
    integrateAlign(align, infixAlign);

    // For the clipping, we have to transform the alignment begin position in
    // sequence space of subject into the view space of row(align, 0) since
    // there are (and generally can be) gaps in row(align, 0);
    int beginSourcePos = 3;
    int endSourcePos = 14;
    int beginViewPos = toViewPosition(row(align, 0), beginSourcePos);
    int endViewPos = toViewPosition(row(align, 0), endSourcePos);

    std::cout << "clipping row(align, 0) to source range (" << beginSourcePos
              << ", " << endSourcePos << ").  This is the view range ("
              << beginViewPos << ", " << endViewPos << ")\n";
    setClippedBeginPosition(row(align, 0), beginViewPos);
    setClippedEndPosition(row(align, 0), endViewPos);

    std::cout << "align with clipping\n"
              << align;

    return 0;
}

The output is as follows:

subject: CPISRTWSIFRCWALLKAMEAALL
query:   SRTWASFRCWA

subject infix: SRTWSI
query infix:   SRTWAS

infix alignment
      0     .   
        SRTW-SI
        |||| | 
        SRTWAS-


clipping row(align, 0) to source range (3, 14).  This is the view range (3, 15)
align with clipping
      0     .    :   
        SRTW-SIFRCWA
        |||| | |||||
        SRTWAS-FRCWA


Data Races

If not stated otherwise, concurrent invocation is not guaranteed to be thread-safe.