/*****************************************************************************/ // Copyright (c) Illumina 2008 // Author: Richard Shaw // // This software is covered by the "Illumina Genome Analyzer Software // License Agreement" and the "Illumina Source Code License Agreement", // and certain third party copyright/licenses, and any user of this // source file is bound by the terms therein (see accompanying files // Illumina_Genome_Analyzer_Software_License_Agreement.pdf and // Illumina_Source_Code_License_Agreement.pdf and third party // copyright/license notices). /*****************************************************************************/ #include #include #include #include "statistics/Quality_Value_Stats.h" /*****************************************************************************/ Quality_Value_Stats::Quality_Value_Stats() : my_lane_num(0) { ; } /*****************************************************************************/ Quality_Value_Stats::~Quality_Value_Stats() { ; } /*****************************************************************************/ void Quality_Value_Stats::add_read_align_info(const Read_Align_Info& read_align_info) { if (read_align_info.my_lane_num != my_lane_num) { if (my_lane_num == 0) { // First read. my_lane_num = read_align_info.my_lane_num; } else { std::cerr << "ERROR: Unexpected lane number " << read_align_info.my_lane_num << " (expected " << my_lane_num << ")" << std::endl; throw std::range_error(""); } } ++my_tile_num_freq_map[read_align_info.my_tile_num]; my_all_quality_value_stats_set.add_read_align_info(read_align_info); if (read_align_info.passed_filter()) { my_passed_filter_quality_value_stats_set. add_read_align_info(read_align_info); } } /*****************************************************************************/ bool Quality_Value_Stats::write_report(File_Buffer& file_buffer) const { File_Buffer::Line_Vec line_vec; std::ostringstream ostrm; ostrm << " ** Quality value report **" << std::endl << std::endl << "Tiles analysed:" << std::endl; std::string separ_str(""); for (Tile_Num_Freq_Map_CIter pair_citer(my_tile_num_freq_map.begin()); pair_citer != my_tile_num_freq_map.end(); ++pair_citer) { ostrm << separ_str << "s_" << my_lane_num << "_" << std::setfill('0') << std::setw(4) << pair_citer->first; separ_str = " "; } ostrm << std::endl << my_tile_num_freq_map.size() << " tiles in all" << std::endl << std::endl << " ** Results for raw data **" << std::endl << my_all_quality_value_stats_set << std::endl << std::endl << std::endl << "Results for quality filtered data" << std::endl << my_passed_filter_quality_value_stats_set; line_vec.push_back(ostrm.str()); if (!file_buffer.write_some_lines(line_vec)) { std::cerr << "ERROR: Failed to quality value statistics to " << file_buffer.file_path_str() << std::endl; return false; } return true; } /*****************************************************************************/