X-Git-Url: https://git.donarmstrong.com/?a=blobdiff_plain;f=needlemanoverlap.cpp;fp=needlemanoverlap.cpp;h=8f5d4649013e003e11cec9110586783c488028d5;hb=526a868606faa50caf86e7399f7554c0335b39e5;hp=0000000000000000000000000000000000000000;hpb=c35f02a218ce8f430a75850b4d9fabb96b3a022b;p=mothur.git diff --git a/needlemanoverlap.cpp b/needlemanoverlap.cpp new file mode 100644 index 0000000..8f5d464 --- /dev/null +++ b/needlemanoverlap.cpp @@ -0,0 +1,92 @@ +/* + * needleman.cpp + * + * + * Created by Pat Schloss on 12/15/08. + * Copyright 2008 Patrick D. Schloss. All rights reserved. + * + * This class is an Alignment child class that implements the Gotoh pairwise alignment algorithm as described in: + * + * Gotoh O. 1982. An improved algorithm for matching biological sequences. J. Mol. Biol. 162:705-8. + * Myers, EW & Miller, W. 1988. Optimal alignments in linear space. Comput Appl Biosci. 4:11-7. + * + * This method is nice because it allows for an affine gap penalty to be assessed, which is analogous to what is used + * in blast and is an alternative to Needleman-Wunsch, which only charges the same penalty for each gap position. + * Because this method typically has problems at the ends when two sequences do not full overlap, we employ a separate + * method to fix the ends (see Overlap class documentation) + * + */ + +using namespace std; + +#include "alignmentcell.hpp" +#include "alignment.hpp" +#include "overlap.hpp" +#include "needlemanoverlap.hpp" + +/**************************************************************************************************/ + +NeedlemanOverlap::NeedlemanOverlap(float gO, float m, float mm, int r) :// note that we don't have a gap extend +gap(gO), match(m), mismatch(mm), Alignment(r) { // the gap openning penalty is assessed for + // every gapped position + for(int i=1;i= up){ + if(diagonal >= left){ + alignment[i][j].cValue = diagonal; + alignment[i][j].prevCell = 'd'; + } + else{ + alignment[i][j].cValue = left; + alignment[i][j].prevCell = 'l'; + } + } + else{ + if(up >= left){ + alignment[i][j].cValue = up; + alignment[i][j].prevCell = 'u'; + } + else{ + alignment[i][j].cValue = left; + alignment[i][j].prevCell = 'l'; + } + } + } + } + Overlap over; + over.setOverlap(alignment, lA, lB, 0); // Fix gaps at the beginning and end of the sequences + traceBack(); // Traceback the alignment to populate seqAaln and seqBaln +} + +/**************************************************************************************************/ +