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 53 54 55 56 57 58 59 60
|
// Author: David Alexander, Lance Hepler
#pragma once
#include <ConsensusCore/Mutation.hpp>
#include <ConsensusCore/Types.hpp>
#include <ConsensusCore/Utils.hpp>
#include <string>
#include <vector>
namespace ConsensusCore {
namespace detail {
struct AbstractMutationEnumerator
{
explicit AbstractMutationEnumerator(const std::string& tpl);
virtual ~AbstractMutationEnumerator();
virtual std::vector<Mutation> Mutations() const = 0;
virtual std::vector<Mutation> Mutations(int beginPos, int endPos) const = 0;
protected:
const std::string tpl_;
};
} // detail
struct AllSingleBaseMutationEnumerator : detail::AbstractMutationEnumerator
{
explicit AllSingleBaseMutationEnumerator(const std::string& tpl);
std::vector<Mutation> Mutations() const;
std::vector<Mutation> Mutations(int beginPos, int endPos) const;
};
struct UniqueSingleBaseMutationEnumerator : detail::AbstractMutationEnumerator
{
explicit UniqueSingleBaseMutationEnumerator(const std::string& tpl);
std::vector<Mutation> Mutations() const;
std::vector<Mutation> Mutations(int beginPos, int endPos) const;
};
struct DinucleotideRepeatMutationEnumerator : detail::AbstractMutationEnumerator
{
DinucleotideRepeatMutationEnumerator(const std::string& tpl, int minDinucRepeatElements = 3);
std::vector<Mutation> Mutations() const;
std::vector<Mutation> Mutations(int beginPos, int endPos) const;
private:
int minDinucRepeatElements_;
};
template <typename T>
std::vector<Mutation> UniqueNearbyMutations(const T& mutationEnumerator,
const std::vector<Mutation>& centers,
int neighborhoodSize);
}
#include <ConsensusCore/Quiver/MutationEnumerator-inl.hpp>
|