Skip to content
Snippets Groups Projects
Select Git revision
  • dc41b748597436bc7e8263bc9256147cbdfac8f3
  • master default protected
2 results

Report_manager.cpp

Blame
  • user avatar
    Denys Bulavka authored
    dc41b748
    History
    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;
    }