1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52
|
// Author: David Alexander
#pragma once
#include <ConsensusCore/Edna/EdnaEvaluator.hpp>
#include <ConsensusCore/Matrix/DenseMatrix.hpp>
#include <ConsensusCore/Matrix/SparseMatrix.hpp>
#include <ConsensusCore/Quiver/QvEvaluator.hpp>
#include <ConsensusCore/Quiver/SimpleRecursor.hpp>
#include <ConsensusCore/Quiver/detail/Combiner.hpp>
#include <ConsensusCore/Quiver/detail/RecursorBase.hpp>
namespace ConsensusCore {
template <typename M, typename E, typename C>
class SseRecursor : public detail::RecursorBase<M, E, C>
{
public:
void FillAlpha(const E& e, const M& guide, M& alpha) const;
void FillBeta(const E& e, const M& guide, M& beta) const;
float LinkAlphaBeta(const E& e, const M& alpha, int alphaColumn, const M& beta, int betaColumn,
int absoluteColumn) const;
void ExtendAlpha(const E& e, const M& alpha, int beginColumn, M& ext,
int numExtColumns = 2) const;
void ExtendBeta(const E& e, const M& beta, int endColumn, M& ext, int numExtColumns = 2,
int lengthDiff = 0) const;
public:
//
// Constructors
//
SseRecursor(int movesAvailable, const BandingOptions& banding);
private:
// Used during bringup
SimpleRecursor<M, E, C> simpleRecursor_;
};
typedef SseRecursor<DenseMatrix, QvEvaluator, detail::ViterbiCombiner> SseQvRecursor;
typedef SseRecursor<DenseMatrix, QvEvaluator, detail::SumProductCombiner> SseQvSumProductRecursor;
typedef SseRecursor<SparseMatrix, QvEvaluator, detail::ViterbiCombiner> SparseSseQvRecursor;
typedef SseRecursor<SparseMatrix, QvEvaluator, detail::SumProductCombiner>
SparseSseQvSumProductRecursor;
typedef SseRecursor<SparseMatrix, EdnaEvaluator, detail::SumProductCombiner> SparseSseEdnaRecursor;
}
|