Compressing Frames
The following code block describes how to create and connect a PRBS generator to a compression engine and then on to a file writer in python:
import pyrogue
import rogue.utilities.fileio
# Create a file writer, buffer size = 1000, max file size = 1MB
fwrite = rogue.utilities.fileio.StreamWriter()
fwrite.setBufferSize(1000)
fwrite.setMaxSize(1000000)
# Create a compression instance
comp = rogue.utilities.StreamZip()
# Create a PRBS instance to be used as a generator
prbs = rogue.utilities.Prbs()
# Connect the generator to the compression engine
prbs >> comp
# Connect the compression engine to the file writer
comp >> fwrite.getChannel(0)
# Open the data file
fwrite.open("test.dat")
# Generate 1000 frames of PRBS data, 1000 bytes each
for _ in range(1000):
prbs.genFrame(1000)
# Close the data file
fwrite.close()
The following code shows how to connect a PRBS generator to a compression engine and then on to a StreamWriter in c++.
#include <rogue/utilities/Prbs.h>
#include <rogue/utilities/StreamZip.h>
#include <rogue/utilities/fileio/StreamWriter.h>
#include <rogue/utilities/fileio/StreamWriterChannel.h>
// First we create a file writer instance
rogue::utilities::fileio::StreamWriterPtr fwrite = rogue::utilities::fileio::StreamWriterPtr::create():
// Next we set the buffer size which controls how much data to cache in memory
// before forming a burst write to the operating system. Larger writes help
// in file operation performance
fwrite->setBufferSize(10000);
// We can also set a maximum file size for each file. If this value is non-zero
// the passed file name will be appended with a numeric value starting from 1.
// As the max size is reached a new file will be opened with the next index value 100MBytes
fwrite->setMaxSize(100000000);
// By default all frames are written, even if the incoming error field is set. You
// can choose to ignore errored frames using the following call:
fwrite->setDropErrors(true);
// Create a PRBS generator
rogue::utilities::PrbsPtr prbs = rogue::utilities::Prbs::create();
// Create a compression block
rogue::utilities::StreamZipPtr comp = rogue::utilities::StreamZip::create();
// Connect prbs to file writer
prbs >> comp;
// Connect compression block to the stream writer
comp >> fwrite->getChannel(0);
// Open the data file
fwrite->open("test.dat"):
# Generate 1000 frames of PRBS data, 1000 bytes each
for (i=0; i < 1000; i++ ) prbs->genFrame(1000):
// Close the data file
fwrite->close():