void normalisefastaUncompressed(libmaus::util::ArgInfo const & arginfo) { libmaus::fastx::StreamFastAReaderWrapper in(std::cin); libmaus::fastx::StreamFastAReaderWrapper::pattern_type pattern; unsigned int const cols = arginfo.getValue<unsigned int>("cols",getDefaultCols()); uint64_t offset = 0; while ( in.getNextPatternUnlocked(pattern) ) { std::string const name = pattern.getStringId(); std::string const shortname = stripName(name); std::cerr << shortname << "\t" << pattern.patlen << "\t" << offset+pattern.getStringId().size()+2 << "\t" << cols << "\t" << cols+1 << std::endl; pattern.printMultiLine(std::cout,cols,offset); } std::cout << std::flush; }
void normalisefastaBgzf(libmaus::util::ArgInfo const & arginfo, std::ostream & out) { libmaus::fastx::StreamFastAReaderWrapper in(std::cin); libmaus::fastx::StreamFastAReaderWrapper::pattern_type pattern; int const level = libmaus::bambam::BamBlockWriterBaseFactory::checkCompressionLevel(arginfo.getValue("level",getDefaultLevel())); std::string const indexfn = arginfo.getUnparsedValue("index",""); ::libmaus::bambam::BamBlockWriterBaseFactory::checkCompressionLevel(level); libmaus::lz::BgzfDeflate<std::ostream> defl(out,level,false /* full flush */); uint64_t const inbufsize = defl.getInputBufferSize(); uint64_t zoffset = 0; uint64_t ioffset = 0; std::vector<libmaus::fastx::BgzfFastAIndexEntry> index; std::ostringstream indexstr; ioffset += libmaus::util::NumberSerialisation::serialiseNumber(indexstr,inbufsize); uint64_t patid = 0; while ( in.getNextPatternUnlocked(pattern) ) { std::string const name = pattern.getStringId(); std::string const shortname = stripName(name); std::string const & spat = pattern.spattern; char const * cpat = spat.c_str(); uint64_t const patlen = spat.size(); uint64_t const numblocks = (patlen + inbufsize - 1)/inbufsize; index.push_back(libmaus::fastx::BgzfFastAIndexEntry(shortname,patid++,ioffset)); ioffset += libmaus::util::StringSerialisation::serialiseString(indexstr,name); ioffset += libmaus::util::StringSerialisation::serialiseString(indexstr,shortname); ioffset += libmaus::util::NumberSerialisation::serialiseNumber(indexstr,patlen); ioffset += libmaus::util::NumberSerialisation::serialiseNumber(indexstr,zoffset); ioffset += libmaus::util::NumberSerialisation::serialiseNumber(indexstr,numblocks); std::ostringstream nameostr; nameostr << '>' << name << '\n'; std::string const nameser = nameostr.str(); std::pair<uint64_t,uint64_t> const P0 = defl.writeSyncedCount(nameser.c_str(),nameser.size()); zoffset += P0.second; uint64_t o = 0; while ( o != patlen ) { assert ( o % inbufsize == 0 ); uint64_t const towrite = std::min(patlen-o,inbufsize); std::pair<uint64_t,uint64_t> const P1 = defl.writeSyncedCount(cpat,towrite); ioffset += libmaus::util::NumberSerialisation::serialiseNumber(indexstr,zoffset); zoffset += P1.second; o += towrite; cpat += towrite; } ioffset += libmaus::util::NumberSerialisation::serialiseNumber(indexstr,zoffset); std::pair<uint64_t,uint64_t> const Pn = defl.writeSyncedCount("\n",1); zoffset += Pn.second; } defl.flush(); out << std::flush; uint64_t const imetaoffset = ioffset; ioffset += libmaus::util::NumberSerialisation::serialiseNumber(indexstr,index.size()); for ( uint64_t i = 0; i < index.size(); ++i ) ioffset += libmaus::util::NumberSerialisation::serialiseNumber(indexstr,index[i].ioffset); libmaus::util::NumberSerialisation::serialiseNumber(indexstr,imetaoffset); if ( indexfn.size() ) { std::string const & sindex = indexstr.str(); libmaus::aio::CheckedOutputStream indexCOS(indexfn); indexCOS.write(sindex.c_str(),sindex.size()); indexCOS.flush(); indexCOS.close(); } }
void xSpriteMan::addSpriteXms(std::string wname) { pugi::xml_document xms; pugi::xml_node tex; pugi::xml_node img; std::string fname; xSprite * a; xTexture * skin; unsigned int handle; xAsset * w; w = assetMan->getAsset(wname, ASSETGRP_XSPRITE); if (w == 0) { printf("xSpriteMan -- asset doesnt exist %s \n", wname.c_str()); return; } //todo -- check if file is zipped fname = w->fname; //dont clear, adds new sprite if (!(xms.load_file(fname.c_str(), 0) )) { printf("xSpriteMan: Couldn't load xms [%s] \n", fname); return; }//endif tex = xms.child("texture"); if (tex.empty() ) { return; } //todo error invalid file float picw; float pich; std::string picname; picw = (float) tex.attribute("width").as_int(); pich = (float) tex.attribute("height").as_int(); picname = tex.attribute("name").value(); handle = 0; picname = stripName(picname); skin = assetMan->getTexture(picname); //skin = storeSkin.getData(picname); if (skin == 0) { printf("xSpriteMan: image [%s] not loaded before sprites \n", picname.c_str()); } else { handle = skin->handle; } //todo -- refreshsprites instead? (go through all loaded sprites in a method or something) for (img = tex.child("image"); img; img = img.next_sibling("image")) { a = new xSprite(); a->wname = img.attribute("name").value(); a->skin = picname; a->handle = handle; a->x = (float) img.attribute("x").as_int(); a->y = (float) img.attribute("y").as_int(); a->w = (float) img.attribute("width").as_int(); a->h = (float) img.attribute("height").as_int(); a->u0 = (float)(a->x) / picw; a->v0 = (float)(a->y) / pich; a->u1 = (float)(a->x + a->w) / picw; a->v1 = (float)(a->y + a->h) / pich; //printf("addsprite %s %0.2f %0.2f %u \n", a->wname.c_str(), a->x, a->y, a->handle); storeSprite.addData(a->wname, a); }//nextimg }//addsprite