Пример #1
0
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;
}
Пример #2
0
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();	
	}
}
Пример #3
0
 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