Skip to content
Snippets Groups Projects
Commit 91f4cdd8 authored by Studer Gabriel's avatar Studer Gabriel
Browse files

allow to extract sequence from HMM

parent 8501a0e4
No related branches found
No related merge requests found
......@@ -503,6 +503,10 @@ single columns containing amino acid frequencies and transition probabilities.
:param col: Column to add
:type col: :class:`HMMColumn`
.. attribute:: sequence
Sequence of the columns
.. attribute:: columns
Iterable columns of the HMM
......
......@@ -44,5 +44,6 @@ void export_hmm()
make_function(&HMM::GetColumns,
return_value_policy<copy_const_reference>()))
.add_property("avg_entropy", &HMM::GetAverageEntropy)
.add_property("sequence",&HMM::GetSequence)
;
}
......@@ -149,6 +149,16 @@ HMMPtr HMM::Load(const std::string& filename) {
return hmm;
}
String HMM::GetSequence() const{
std::stringstream ss;
for(HMMColumnList::const_iterator i = this->columns_begin();
i != this->columns_end(); ++i){
ss << i->GetOneLetterCode();
}
return ss.str();
}
Real HMM::GetAverageEntropy() const {
Real n_eff=0.0;
......
......@@ -17,26 +17,36 @@ typedef enum {
class HMMColumn {
public:
HMMColumn() : n_eff_(0.0), n_eff_ins_(0.0), n_eff_del_(0.0) {
memset(freq_, 0, sizeof(Real)*20);
memset(trans_, 0, sizeof(Real)*9);
}
HMMColumn(const HMMColumn& rhs): olc_(rhs.olc_), n_eff_(rhs.n_eff_),
n_eff_ins_(rhs.n_eff_ins_), n_eff_del_(rhs.n_eff_del_) {
memcpy(freq_, rhs.freq_, sizeof(Real)*20);
memcpy(trans_, rhs.trans_, sizeof(Real)*9);
}
Real GetTransitionFreq(HMMState from, HMMState to) const {
return trans_[from][to];
}
void SetTransitionFreq(HMMState from, HMMState to, Real freq){
trans_[from][to] = freq;
}
void SetNEff(Real val) { n_eff_ = val; }
void SetNEffIns(Real val) { n_eff_ins_ = val; }
void SetNEffDel(Real val) { n_eff_del_ = val; }
Real GetNEff() const { return n_eff_; }
Real GetNEffIns() const { return n_eff_ins_; }
Real GetNEffDel() const { return n_eff_del_; }
Real GetFreq(char ch) const {
......@@ -169,11 +179,17 @@ typedef std::vector<HMMColumn> HMMColumnList;
class HMM {
public:
HMM() {}
static HMMPtr Load(const std::string& filename);
const std::vector<HMMColumn>& GetColumns() const { return columns_; }
const HMMColumn& GetNullModel() const { return null_model_; }
void SetNullModel(const HMMColumn& null_model) { null_model_ = null_model; }
String GetSequence() const;
//some functions to make it behave like a vector
size_t size() const { return columns_.size(); }
......@@ -200,6 +216,7 @@ class HMM {
HMMColumnList::iterator columns_end() { return columns_.end(); }
HMMColumnList::const_iterator columns_begin() const { return columns_.begin(); }
HMMColumnList::iterator columns_begin() { return columns_.begin(); }
Real GetAverageEntropy() const;
friend std::ofstream& operator<<(std::ofstream& os, HMM& hmm){
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment