File: Mutation.hpp

package info (click to toggle)
consensuscore 1.1.1%2Bdfsg-4
  • links: PTS, VCS
  • area: main
  • in suites: bookworm
  • size: 3,404 kB
  • sloc: cpp: 38,940; python: 2,083; ansic: 542; sh: 184; makefile: 82; cs: 10
file content (94 lines) | stat: -rw-r--r-- 2,399 bytes parent folder | download | duplicates (4)
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
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
// Author: Patrick Marks, David Alexander

#pragma once

#include <ostream>
#include <string>
#include <utility>
#include <vector>

#include <ConsensusCore/Types.hpp>
#include <ConsensusCore/Utils.hpp>

namespace ConsensusCore {
enum MutationType
{
    INSERTION = 0,
    DELETION = 1,
    SUBSTITUTION = 2
};

/// \brief Single mutation to a template sequence.
class Mutation
{
private:
    MutationType type_;
    int start_;
    int end_;
    std::string newBases_;

    bool CheckInvariants() const;

public:
    Mutation(MutationType type, int start, int end, std::string newBases);
    Mutation(MutationType type, int position, char base);
    Mutation(const Mutation& other);

    // Note: this defines a default mutation.  This is really only needed to fix
    // SWIG compilation.
    Mutation();

    MutationType Type() const;

    bool IsSubstitution() const;
    bool IsInsertion() const;
    bool IsDeletion() const;

    /// \brief Template positions of the mutation.
    /// Convention: the bases of the template changed by the mutation are
    /// [ Start, End ).
    /// For a substitution, tpl[Start..End) are mutated;
    /// for a deletion, tpl[Start..End) are removed;
    /// for an insertion, Start=End=template position after the
    /// new bases are to be inserted.
    int Start() const;
    int End() const;

    std::string NewBases() const;
    int LengthDiff() const;
    std::string ToString() const;

public:
    bool operator==(const Mutation& other) const;
    bool operator<(const Mutation& other) const;

public:
    ScoredMutation WithScore(float score) const;
};

std::ostream& operator<<(std::ostream& out, const Mutation& m);

std::string ApplyMutation(const Mutation& mut, const std::string& tpl);
std::string ApplyMutations(const std::vector<Mutation>& muts, const std::string& tpl);

std::string MutationsToTranscript(const std::vector<Mutation>& muts, const std::string& tpl);

std::vector<int> TargetToQueryPositions(const std::vector<Mutation>& mutations,
                                        const std::string& tpl);

class ScoredMutation : public Mutation
{
private:
    float score_;

public:
    ScoredMutation();
    ScoredMutation(const Mutation& m, float score);
    float Score() const;
    std::string ToString() const;
};

std::ostream& operator<<(std::ostream& out, const ScoredMutation& m);
}

#include <ConsensusCore/Mutation-inl.hpp>