// // Copyright 2009 Illumina, Inc. // // 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). // // /// \file /// \author Ivan Mikoulitch /// #include "SamMD/samMDlib.h" #include "SamMD/samReader.h" #include "SamMD/fastaReader.h" #include "SamMD/log.h" #include "SamMD/utils.h" ////////////////////////////////////////////////////////////////////// SamMD::SamMD(const string& samFile, const string& fastaFiles) { samFile_=samFile; fastaFiles_=fastaFiles; } ////////////////////////////////////////////////////////////////////// SamMD::~SamMD(void) { } ////////////////////////////////////////////////////////////////////// vector SamMD::ReadFastFileList() { vector files; ifstream fs(fastaFiles_.c_str()); if (!fs.is_open()) return files; try { string line; while(getline(fs, line)) { if (line.empty()) continue; files.push_back(line); } } catch(...) { files.clear(); } if (fs.is_open()) fs.close(); return files; } ////////////////////////////////////////////////////////////////////// bool SamMD::CreateMatchDescriptors() { // reading list of fasta files vector fasta_files = ReadFastFileList(); if(fasta_files.empty()) { Log::Error("Cannot read list of fasta files from '" + fastaFiles_ + "'."); return false; } // reading sam file SamReader sr(samFile_); if(!sr.ReadSamFile()) { sr.Close(); Log::Error("Cannot read sam file: '" + samFile_ + "'"); return false; } // making match descriptors in memory try { vector::const_iterator ff_it = fasta_files.begin(); while(ff_it!=fasta_files.end()) { FastaReader fr(*ff_it); if(!fr.Open()) { Log::Warning("Cannot open fasta file: "+*ff_it); Log::Warning("Continuing processing."); ++ff_it; continue; } while(fr.ReadNextReference()) { sr.ProcessReferenceData(fr); } fr.Close(); ++ff_it; } } catch(...) { sr.Close(); Log::Exception("Exception occured during processing match descriptors."); return false; } // making modified sam file sr.CreateModifiedSamFile(); sr.Close(); return true; }