// -*- c++ -*- /*****************************************************************************/ // 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). /*****************************************************************************/ #ifndef TILE_STATS_H #define TILE_STATS_H /*****************************************************************************/ #include #include #include #include #include #include "common/File_Buffer.h" #include "statistics/AlignStatsXmlWriter.hh" #include "statistics/Non_Blank_Filter.h" #include "statistics/Read_Align_Info.h" #include "statistics/Stats_Set.h" /*****************************************************************************/ class Tile_Stats { public: typedef enum { QUALITY_RAW, QUALITY_FILTERED } Quality_Type; typedef std::list Quality_Type_List; typedef Quality_Type_List::const_iterator Quality_Type_List_CIter; /// Code assumes 0 is valid for neither lane num nor tile num. enum { MIN_LANE_NUM=1, MAX_LANE_NUM=8, MIN_TILE_NUM=1 }; Tile_Stats(const std::vector &read_list /*const unsigned int num_reads*/, size_t max_patterns_to_store); ~Tile_Stats(); void add_read_align_info(const Read_Align_Info& read_align_info); void derive_stats(); void write_stat_files(Quality_Type quality_type, File_Buffer& score_file_buffer, const std::string &sample_name, const std::string &barcode, casava::statistics::AlignStatsXmlWriter &xml_writer) const; unsigned int lane_num() { return my_lane_num; } unsigned int tile_num() { return my_tile_num; } static const std::string hdr_str(unsigned int lane_num, unsigned int tile_num, Quality_Type quality_type, unsigned int read_num); private: typedef std::map Key_Stats_Set_Ptr_Map; typedef Key_Stats_Set_Ptr_Map::iterator Key_Stats_Set_Ptr_Map_Iter; typedef Key_Stats_Set_Ptr_Map::const_iterator Key_Stats_Set_Ptr_Map_CIter; static const std::string qual_str(Quality_Type quality_type); void make_key_str(Quality_Type quality_type, const unsigned int read_num, std::string& key_str) const; void handle_new_read(const unsigned int read_num, const unsigned int num_cycles); void derive_all_reads_stats(); unsigned int my_lane_num; unsigned int my_tile_num; unsigned int my_num_reads() const {return my_read_list.size();} // the reads can be in any order, therefore, a simgle number is not enough const std::vector my_read_list; unsigned int my_curr_read_num; unsigned int my_curr_read_num_cycles; unsigned int my_curr_read_num_blanks; // Actually for 1s and 0s not bools. std::valarray my_non_blank_mask; std::string my_read_blank_pattern_str; Non_Blank_Filter my_non_blank_filter; // Actually for 1s and 0s not bools. std::valarray my_one_read_cum_errs_mask; Key_Stats_Set_Ptr_Map my_key_stats_set_ptr_map; // Cached Stats_Set ptrs. Stats_Set* my_all_stats_set_ptr; Stats_Set* my_passed_filter_stats_set_ptr; Quality_Type_List my_quality_type_list; static const unsigned int our_all_reads_read_num; }; /*****************************************************************************/ #endif // ! TILE_STATS_H /*****************************************************************************/