VLAT is the Visibility LookAhead Thread. This thread advances a visibility iterator and fills the data indicated by the visibility iterator into the VlaData buffer ring.
Intended use:
Internal
Review Status
- Date Reviewed:
- yyyy/mm/dd
Prerequisite
-
VisBuffer
-
VisBufferAsync
-
ROVisibilityIteratorAsync
-
VlaData
-
VLAT
Etymology
VLAT is the Visibility LookAhead Thread. It is not related to the more common NRAO acronym VLA.
Synopsis
The VLAT is a thread object that buffers up data from successive visibility iterator positions in a MeasurementSet. It is part of the backend to a ROVisibilityIteratorAsync (ROVIA) object used by the main thread to replace the normal, synchronous ROVisibilityIterator. When the user creates a ROVIA object the information normally used to create a ROVisibilityIterator is passed to the VLAT which uses it to create a ROVisibilityIterator local to itself. The VLAT then uses this ROVisibilityIterator to fill buffers in the VlaData-managed buffer ring (this interaction is described in VlaData). Filling consists of attaching VLAT's ROVisibilityIterator to the VisBufferAsync object associated with a buffer and then calling the fill operations for the data items (e.g., visCube, Ant1, etc.) which the user has requested be prefetched. The fill operations will likely result in synchronous I/O operations being performed by the column access methods related to the casacore::Table system (memory-resident tables, columns, etc., may be able to satisfy a fill operation without performing I/O).
The thread may be terminated by calling the terminate method. This will cause the VLAT to terminate when it notices the termination request. The termination may not be immediate since the VLAT may be engaged in a syncrhonous I/O operation and is uanble to detect the termination request until that I/O has completed.
Normally the VLAT sweeps the VI to the end of the measurement set and then awaits further instructions. The main thread may stop the sweep early by calling VlaData::terminateSweep which will eventually be detected by the VLAT and result in a coordinated reset of the sweep. When the sweep reset is applied the VLAT will also detect visibility iterator modification requests (e.g., setRowBlocking, selectChannel, setInterval, etc.) that were queued up in VlaData; for the set of available VI modification requests supported see ROVisibilityIteratorAsync.
Example
Motivation
Thrown Exceptions
-
casacore::AipsError for unrecoverable errors. These will not be caught (in C++ anyway) and cause application termination.
Definition at line 216 of file VLAT2.h.
const InterfaceController* vi::VLAT::controller_p |
|
private |
class NullaryPredicate { public:
virtual ~NullaryPredicate () {} virtual casacore::Bool operator () () const = 0; };
class FillCanStartOrSweepTermination : public NullaryPredicate {
public:
FillCanStartOrSweepTermination (VlaData * vlaData, AsynchronousInterface * interface) : interface_p (interface), vlaData_p (vlaData) {}
casacore::Bool operator() () const { return vlaData_p->fillCanStart () || interface_p->isSweepTerminationRequested (); }
private:
AsynchronousInterface * interface_p; VlaData * vlaData_p; };
class ViResetOrLookaheadTermination : public NullaryPredicate {
public:
ViResetOrLookaheadTermination (AsynchronousInterface * interface) : interface_p (interface) {}
casacore::Bool operator() () const { casacore::Bool viWasReset_p = interface_p->viResetRequested;
return viWasReset_p || interface_p->isLookaheadTerminationRequested (); }
private:
AsynchronousInterface * interface_p; };
Definition at line 321 of file VLAT2.h.