Select Git revision
Report_manager.cpp
Report_manager.cpp 5.10 KiB
#include "Report_manager.hpp"
Report_manager::Report_manager(std::string database_location, bool clean_ends, std::string marked_motifs_filename, float database_sample, float database_modif)
{
database = Database(database_location, clean_ends, marked_motifs_filename, database_sample, database_modif);
mdp_toolbox = Mdp_toolbox(database);
statistical_toolbox = Statistical_toolbox(mdp_toolbox);
}
std::stringstream Report_manager::number_of_aminoacids_per_coordinate(void)
{
std::stringstream output;
for(auto motif : mdp_toolbox.database.get_motif_database())
{
output<< motif.get_name();
for(auto sequence : motif.get_sequence())
{
output << separator << sequence.size();
}
output << std::endl;
}
return output;
}
std::stringstream Report_manager::aminoacids_per_coordinate(void)
{
std::stringstream output;
for(auto motif: mdp_toolbox.database.get_motif_database())
{
output << motif.get_name();
for(auto sequence: motif.get_sequence())
output << separator << sequence;
output << std::endl;
}
return output;
}
std::stringstream Report_manager::number_k_discriminant_motifs(int k)
{
std::stringstream output;
for(auto motif: mdp_toolbox.database.get_motif_database())
{
std::vector<Motif_class> k_discriminant_motifs = mdp_toolbox.get_k_discriminant_motifs(motif, k);
output << motif.get_name() << separator << k_discriminant_motifs.size() << std::endl;
}
return output;
}
std::stringstream Report_manager::k_discriminant_motifs_pair(int k)
{
std::stringstream output;
for(std::pair<Motif_pair, int> element : mdp_toolbox.get_mdp_database())
{
if(element.second == k)
output << element.first.get_short_motif().get_name() << separator << element.first.get_long_motif().get_name() << std::endl;
}
return output;
}
std::stringstream Report_manager::motif_discriminant_positions_alignval(void)
{
std::stringstream output;
//Header
output << "Long motif";
output <<separator<< "Short motif";
output <<separator<< "Alignval";
output <<separator<< "Partial discriminant position";
output <<separator<< "Effective discriminant position"<< std::endl;
for(std::pair<Motif_pair ,int> element: mdp_toolbox.get_mdp_database())
{
Motif_class long_motif = element.first.get_long_motif();
Motif_class short_motif = element.first.get_short_motif();
output << long_motif.get_name() << separator;
output << separator << separator << separator;
for(auto sequence : long_motif.get_sequence())
output << separator << sequence;
output << std::endl;
int length_difference = long_motif.get_sequence().size()-short_motif.get_sequence().size()+1;
int motif_discriminating_positions = 99;
forn(i,length_difference)
{
output << separator << short_motif.get_name();
std::vector<std::string> sequence;
forn(j, short_motif.get_sequence().size())
sequence.push_back(long_motif.get_sequence()[i + j]);
Motif_class submotif(long_motif.get_name(), sequence);
int align_val = mdp_toolbox.alignval(short_motif, submotif);
int partial_motif_discriminating_positions = mdp_toolbox.simple_motif_discriminating_positions(short_motif, submotif);
if(partial_motif_discriminating_positions < motif_discriminating_positions && align_val > 0)
motif_discriminating_positions = partial_motif_discriminating_positions;
output << separator << align_val ;
output << separator << partial_motif_discriminating_positions;
output << separator << mdp_toolbox.get_mdp_database()[element.first];
//aligning
forn(j,i)
output << separator;
for(auto sequence: short_motif.get_sequence())
output << separator << sequence;
output << std::endl;
}
}
return output;
}
std::stringstream Report_manager::number_pairs_motifs_with_k_discriminant_positions(void)
{
std::stringstream output;
output << "k\t #pairs with k discriminant positions\t #pairs with k discriminant positions/total"<<std::endl;
int total_number_pairs = mdp_toolbox.get_mdp_database().size();
forn(k,20)
{
int number_pairs_k_discriminant = mdp_toolbox.get_pairs_k_discriminant_positions(k).size();
output << k << separator<< number_pairs_k_discriminant << separator <<1.0*number_pairs_k_discriminant/total_number_pairs << std::endl;
}
return output;
}
std::stringstream Report_manager::empiric_motif_probabilities()
{
std::stringstream output;
//output << "Structure" << separator << "Probability" << std::endl;
for(std::pair<std::vector<int>, float> element: statistical_toolbox.get_empiric_motif_probabilities())
output << element.first << separator << statistical_toolbox.compute_empiric_based_probability(element.first)<< separator << element.second << std::endl;
return output;
}
std::stringstream Report_manager::all_lenghts_accumulated_probabilities()
{
std::stringstream output;
//output << "Structure" << separator << "Probability" << std::endl;
for(std::pair<std::vector<int>, float> element : statistical_toolbox.get_theoretic_motif_probabilities())
output << element.first << separator << element.second << std::endl;
return output;
}