casa
$Rev:20696$
|
This class reads VLA archive records from a Disk file. More...
#include <VLADiskInput.h>
Public Member Functions | |
VLADiskInput (const Path &fileName) | |
Create an object that reads its data from the specified file on disk. | |
VLADiskInput (const String &onlineFlag) | |
Use this method to attach the VLA online data repository onlineFlag will typically be "online", but could be "online:-1" for previous day's file. | |
virtual | ~VLADiskInput () |
The destructor closes the file. | |
virtual Bool | read () |
Reads the next logical record from specified IO source. | |
virtual uInt | bytesRead () |
Returns the number of bytes read so far. | |
virtual uInt | totalBytes () |
Returns the size of the file in bytes. | |
Private Member Functions | |
VLADiskInput () | |
VLADiskInput (const VLADiskInput &other) | |
VLADiskInput & | operator= (const VLADiskInput &other) |
Bool | findFirstRecord (Short &m) |
String | getTodaysFile (int relDay=0) |
Int | whatsToday () |
void | reattachCurrent () |
Private Attributes | |
RegularFileIO * | itsFile |
Bool | onlineFill |
The following privates are used for accessing the VLA online repository Directory containing the visibility data. | |
String | visDir |
Int | oldDay |
Int | previousDay |
This class reads VLA archive records from a Disk file.
This class is designed to reads VLA archive records from a Disk file
This class is designed to read VLA archive data. The data may be read from a disk, tape drive or any other data source supported by the IO module. A call to the operator++() function assembles the next reconstructed VLA archive data record from the input. A reference to this data can be obtained using the logicalRecord function.
Refer to the "VLA Archive Data Format", VLA Computer Memorandum 186 by G.C. Hunt, K.P. Sowinski, and T.J. Bottomly; June 1993. (This is also available as AIPS++ note 159)
The VLA archive records are always a multiple of 2048 bytes. The record sizes were designed for use with magnetic tapes, so there is a maximum physical record size of 13*2048=26624 bytes.
The low level class (blockio), that actually does the I/O, allows for a record (hereinafter chunk) size and for a input block size of a multiple of the chunk size. The low level read operation tests for the number of bytes actually read from the device.
The helper classes VlaDiskInput, VlaTapeInput, and VlaStdInput are designed to deal with the low level input from the devices in an analogous fashion to the ones used for FITS input.
Since a read may be issued for an arbitrary number of bytes from a disk, the chunk multiple is arbitrary and may be used to tune the speed of operation. There is an obvious trade-off between the block size created in the blockio class and the number of read operations.
The story is quite different for tape input. A read request for at least the maximum physical record size must be made to avoid loss of data. Since a single tape record will be read with a single read operation, there is no point is having it any larger. The chunk multiple must be exactly 13 so that the block size is 26624.
The reconstitution algorithm is as follows:
The first two 16-bit integers should contain the values 1 and n, where n is the number of "physical records" in the current "logical record." (If the first value is not 1, then the chunk is rejected and a new one read until the first 16-bit value is 1.) These two values are not part of the reconstituted "logical record."
The chunks are copied into the buffer until the "logical record" is complete. For "logical records" longer than 26620 byte, this is not the whole story. Each "physical record" contains maximum of 13 chunks. When the first "physical record" of 13 chunks has been read, the next chunk will be the first of the next "physical record." The first two 16-bit integers will now be 2 and n, to indicate that this is the second "physical record" of the sequence. These 4 bytes are decoded and the rest of this chunk is copied to the buffer. And so on...
An end-of-file condition on the input will cause record processing to be declared complete.
To open and read a VLA archive data file VLAArchiveInput *in; Block <Char> *buff; String fileName = " "; String fileType = "tape";
if (fileType == String("tape")) { in = new VLAArchiveInput(fileName.chars(), VLAArchiveInput::Tape); } else { in = new VLAArchiveInput(fileName.chars(), VLAArchiveInput::Disk); }
uInt record = 0; for (buff=&(in->next()); in->atEnd()==False; buff=&(in->next()), record++) { cout << "Record" << record << endl; process record pointed to by buff }
Definition at line 160 of file VLADiskInput.h.
VLADiskInput::VLADiskInput | ( | const Path & | fileName | ) |
Create an object that reads its data from the specified file on disk.
An exception is thrown if the file does not exist or cannot be read.
VLADiskInput::VLADiskInput | ( | const String & | onlineFlag | ) |
Use this method to attach the VLA online data repository onlineFlag will typically be "online", but could be "online:-1" for previous day's file.
The VLA online data repository typically holds 14 days
virtual VLADiskInput::~VLADiskInput | ( | ) | [virtual] |
The destructor closes the file.
VLADiskInput::VLADiskInput | ( | ) | [private] |
VLADiskInput::VLADiskInput | ( | const VLADiskInput & | other | ) | [private] |
virtual uInt VLADiskInput::bytesRead | ( | ) | [virtual] |
Returns the number of bytes read so far.
Bool VLADiskInput::findFirstRecord | ( | Short & | m | ) | [private] |
String VLADiskInput::getTodaysFile | ( | int | relDay = 0 | ) | [private] |
VLADiskInput& VLADiskInput::operator= | ( | const VLADiskInput & | other | ) | [private] |
virtual Bool VLADiskInput::read | ( | ) | [virtual] |
Reads the next logical record from specified IO source.
Returns False if there was a problem assembling the next record ie., it returns the value of the hasData() member function.
Implements VLAArchiveInput.
void VLADiskInput::reattachCurrent | ( | ) | [private] |
virtual uInt VLADiskInput::totalBytes | ( | ) | [virtual] |
Returns the size of the file in bytes.
Int VLADiskInput::whatsToday | ( | ) | [private] |
RegularFileIO* VLADiskInput::itsFile [private] |
Definition at line 204 of file VLADiskInput.h.
Int VLADiskInput::oldDay [private] |
Definition at line 210 of file VLADiskInput.h.
Bool VLADiskInput::onlineFill [private] |
The following privates are used for accessing the VLA online repository Directory containing the visibility data.
Definition at line 208 of file VLADiskInput.h.
Int VLADiskInput::previousDay [private] |
Definition at line 211 of file VLADiskInput.h.
String VLADiskInput::visDir [private] |
Definition at line 209 of file VLADiskInput.h.