//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; }
//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; }
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; }
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; }