Ejemplo n.º 1
0
  //DispersionTrials<unsigned char> dedisperse(void);
  DispersionTrials<unsigned char> dedisperse(void)
  {
    size_t max_delay = dedisp_get_max_delay(plan);
    unsigned int out_nsamps = filterbank.get_nsamps()-max_delay;
    size_t output_size = out_nsamps * dm_list.size();
    unsigned char* data_ptr = new unsigned char [output_size];
    dedisp_error error = dedisp_execute(plan,
					filterbank.get_nsamps(),
					filterbank.get_data(),
					filterbank.get_nbits(),
					data_ptr,8,(unsigned)0);
    
    ErrorChecker::check_dedisp_error(error,"execute");
    DispersionTrials<unsigned char> ddata(data_ptr,out_nsamps,filterbank.get_tsamp(),dm_list);
    return ddata;
  }
Ejemplo n.º 2
0
  //DispersionTrials<unsigned char> dedisperse(void);
  DispersionTrials<unsigned char> dedisperse(void)
  {
    size_t max_delay = dedisp_get_max_delay(plan);
    unsigned int out_nsamps = filterbank.get_nsamps()-max_delay;
    size_t output_size = out_nsamps * dm_list.size();	// * 4 to handle 32-bit output data
    unsigned char* data_ptr = new unsigned char [output_size]; 	// * 2 to handle 16-bit output data
    dedisp_error error = dedisp_execute(plan,
					filterbank.get_nsamps(),
					filterbank.get_data(),
					filterbank.get_nbits(),
					data_ptr,8,(unsigned)0);	// 8 is the number of output bits for dedispersed timeseries
    
    ErrorChecker::check_dedisp_error(error,"execute");
    DispersionTrials<unsigned char> ddata(data_ptr,out_nsamps,filterbank.get_tsamp(),dm_list);
    return ddata;
  }
Ejemplo n.º 3
0
void testRange(std::string const & filename)
{
	::libmaus::autoarray::AutoArray<uint8_t> data = ::libmaus::util::GetFileSize::readFile(filename);
	unsigned int const alph = 256;
	for ( uint64_t i = 0; i < data.size(); ++i )
		data[i] &= (alph-1);

	::libmaus::timing::RealTimeClock rtc; rtc.start();
	unsigned int const loops = 3;
	std::ostringstream ostr;
	
	for ( unsigned int l = 0; l < loops; ++l )
	{
		::libmaus::arithmetic::RangeEncoder<std::ostream> RE(ostr);
		model_type MDenc(alph);
		for ( uint64_t i = 0; i < data.size(); ++i )
			RE.encodeUpdate(MDenc,data[i]);
		RE.flush();
	}
	
	double const enctime = rtc.getElapsedSeconds();
	std::cerr << "encoding time " << enctime/loops << " compression " << 
		(
			static_cast<double>(3*data.size()) / ostr.str().size()
		) 
	<< std::endl;
	
	bool ok = true;
	std::istringstream istr(ostr.str());
	rtc.start();
	
	for ( unsigned int l = 0; ok && l < loops; ++l )
	{
		model_type MDdec(alph);
		::libmaus::arithmetic::RangeDecoder<std::istream> RD(istr);
		::libmaus::autoarray::AutoArray<uint8_t> ddata(data.size(),false);
		for ( uint64_t i = 0; i < data.size(); ++i )
		{
			ddata[i] = RD.decodeUpdate(MDdec);
			ok = ok && (data[i] == ddata[i]);
		}
	}
	double const dectime = rtc.getElapsedSeconds();
	std::cerr << "decoding time " << dectime/loops << std::endl;
		
	std::cerr << "range coder " << (ok ? "ok" : "failed") << std::endl;
}
Ejemplo n.º 4
0
void testArithmetic(std::string const & filename)
{
	::libmaus::autoarray::AutoArray<uint8_t> data = ::libmaus::util::GetFileSize::readFile(filename);
	unsigned int const alph = 8;
	for ( uint64_t i = 0; i < data.size(); ++i )
		data[i] &= (alph-1);

	::libmaus::timing::RealTimeClock rtc; rtc.start();

	typedef ::libmaus::bitio::BitWriterVector8 bw_type;
	std::vector < uint8_t > VV;
	std::back_insert_iterator< std::vector < uint8_t > > it(VV);
	bw_type CB(it);

	unsigned int const loops = 3;
	
	for ( uint64_t z = 0; z < loops; ++z )
		encodeFileArithmetic(data,alph,CB);

	typedef ::libmaus::bitio::IteratorBitInputStream< std::vector<uint8_t>::const_iterator, true > br_type;
	br_type CR(VV.begin(),VV.end());

	for ( uint64_t z = 0; z < loops; ++z )
	{
		rtc.start();	
		::libmaus::arithmetic::ArithmeticDecoder < br_type > AD (CR);
		model_type MD(alph);
	
		::libmaus::autoarray::AutoArray<uint8_t> ddata(data.size(),false);
		for ( uint64_t i = 0; i < data.size(); ++i )
			ddata[i] = AD.decodeUpdate(MD);
		AD.flush(true /* read end marker */);
			
		std::cerr << "Decoded in " << rtc.getElapsedSeconds() << " s, "
			<< 1./(rtc.getElapsedSeconds()/data.size());

		bool ok = true;
		for ( uint64_t i = 0; i < data.size(); ++i )
			ok = ok && (data[i] == ddata[i]);
			
		std::cout << " " << (ok ? "ok" : "failed") << std::endl;
	}

	std::cerr << static_cast<double>(loops*data.size()) / VV.size() << std::endl;

}