bool CodingWidget::loadFile(QString xmlFilename) { qDebug() << "CodingWidget::loadFile(QString xmlFilename)"; QFile xmlFile(xmlFilename); if (!xmlFile.open(QFile::ReadOnly | QFile::Text)) { QMessageBox::warning(this, tr("MDI"), tr("Cannot read file %1:\n%2.") .arg(xmlFilename) .arg(xmlFile.errorString())); return false; } xmlFile.setObjectName(xmlFilename); codingElementCount = 0; codingElementSize = 0; QApplication::setOverrideCursor(Qt::WaitCursor); reader = new CodingReader(); reader->read(&xmlFile, this); xmlFile.reset(); // XML QTextStream inXml(&xmlFile); setXml(inXml.readAll()); // XSD QFile xsdFile(getXsdFilename()); qDebug() << "getXsdFilename()): " << getXsdFilename(); if (!xsdFile.open(QFile::ReadOnly | QFile::Text)) { QMessageBox::warning(this, tr("MDI"), tr("Cannot read file %1:\n%2.") .arg(getXsdFilename()) .arg(xsdFile.errorString())); return false; } QTextStream inXsd(&xsdFile); setXsd(inXsd.readAll()); QApplication::restoreOverrideCursor(); return true; }
void ContigsPrinter::run() { SortedReferenceMetadata::Contigs originalContigs; if (!originalSortedReferenceXml_.empty()) { SortedReferenceMetadata inXml(reference::loadSortedReferenceXml(originalSortedReferenceXml_)); originalContigs = inXml.getContigs(); } SortedReferenceMetadata::Contigs outputContigs; std::ifstream is(genomeFile_.string().c_str()); if (!is) { BOOST_THROW_EXCEPTION(isaac::common::IoException(errno, "Failed to open reference file " + genomeFile_.string())); } int64_t lastAcgtCount(0), lastBasesCount(0), lastContigByteStart(0), lineNumber(0), lastContigGenomicStart(0), streamPos(0); unsigned index = 0; std::string lastHeader, line; SortedReferenceMetadata outXml; isaac::common::MD5Sum md5Sum; // TODO: use the MultiFastaReader component to ensure consistency (particularly for the index) while (std::getline(is, line)) { streamPos = is.tellg(); ++lineNumber; if ('>' == line[0]) { std::cerr << "header at:" << streamPos << "\n"; if (!lastHeader.empty()) { const std::string contigName = lastHeader.substr(1, lastHeader.find_first_of(" \t\r") - 1); SortedReferenceMetadata::Contigs::const_iterator originalContigIt = std::find_if(originalContigs.begin(), originalContigs.end(), boost::bind(&SortedReferenceMetadata::Contig::name_, _1) == contigName); outXml.putContig(lastContigGenomicStart, contigName, genomeFile_, lastContigByteStart, streamPos - lastContigByteStart - (1 + line.length()), //byte length (assuming newline is one byte long) lastBasesCount, lastAcgtCount, index, index, (originalContigs.end() == originalContigIt ? "" : originalContigIt->bamSqAs_), (originalContigs.end() == originalContigIt ? "" : originalContigIt->bamSqUr_), isaac::common::MD5Sum::toHexString( md5Sum.getDigest().data, 16 )); ++index; } // Reset counters lastAcgtCount = 0; lastHeader = line; lastContigByteStart = streamPos; lastContigGenomicStart += lastBasesCount; lastBasesCount = 0; md5Sum.clear(); } else { lastAcgtCount += std::count_if(line.begin(), line.end(), boost::bind(&oligo::getValue, _1) != oligo::INVALID_OLIGO); // ignore untranslated '\r' lastBasesCount += std::count_if(line.begin(), line.end(), [](char c){return c != '\r';}); // boost::bind(&boost::ref<char>, _1) != '\r'); // MD5 with format characters stripped out std::string lineStd = line; boost::to_upper(lineStd); lineStd.erase(std::remove_if(lineStd.begin(), lineStd.end(), &isspace), lineStd.end()); // isspace should remove ' ', '\n', '\r', '\t' md5Sum.update( lineStd.c_str(), lineStd.size() ); } } if (!is.eof()) { BOOST_THROW_EXCEPTION( isaac::common::IoException(errno, "Failed while reading sequence." " Line:" + boost::lexical_cast<std::string>(lineNumber) + " Position:" + boost::lexical_cast<std::string>(is.tellg()) + " Buffer:" + line + "\n")); } std::cerr << "end of stream at:" << streamPos << "\n"; if (!lastHeader.empty()) { const std::string contigName = lastHeader.substr(1, lastHeader.find_first_of(" \t\r") - 1); SortedReferenceMetadata::Contigs::const_iterator originalContigIt = std::find_if(originalContigs.begin(), originalContigs.end(), boost::bind(&SortedReferenceMetadata::Contig::name_, _1) == contigName); outXml.putContig(lastContigGenomicStart, contigName, genomeFile_, lastContigByteStart, streamPos - lastContigByteStart, //byte length lastBasesCount, lastAcgtCount, index, index, (originalContigs.end() == originalContigIt ? "" : originalContigIt->bamSqAs_), (originalContigs.end() == originalContigIt ? "" : originalContigIt->bamSqUr_), isaac::common::MD5Sum::toHexString( md5Sum.getDigest().data, 16 )); ++index; } saveSortedReferenceXml(std::cout, outXml); }