casa  $Rev:20696$
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Defines
VisBufferImpl.h
Go to the documentation of this file.
00001 //# VisBuffer.h: buffer for iterating through MS in large blocks
00002 //# Copyright (C) 1996,1997,1998,1999,2000,2002,2003
00003 //# Associated Universities, Inc. Washington DC, USA.
00004 //#
00005 //# This library is free software; you can redistribute it and/or modify it
00006 //# under the terms of the GNU Library General Public License as published by
00007 //# the Free Software Foundation; either version 2 of the License, or (at your
00008 //# option) any later version.
00009 //#
00010 //# This library is distributed in the hope that it will be useful, but WITHOUT
00011 //# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
00012 //# FITNESS FOR A PARTICULAR PURPOSE.  See the GNU Library General Public
00013 //# License for more details.
00014 //#
00015 //# You should have received a copy of the GNU Library General Public License
00016 //# along with this library; if not, write to the Free Software Foundation,
00017 //# Inc., 675 Massachusetts Ave, Cambridge, MA 02139, USA.
00018 //#
00019 //# Correspondence concerning AIPS++ should be addressed as follows:
00020 //#        Internet email: aips2-request@nrao.edu.
00021 //#        Postal address: AIPS++ Project Office
00022 //#                        National Radio Astronomy Observatory
00023 //#                        520 Edgemont Road
00024 //#                        Charlottesville, VA 22903-2475 USA
00025 //#
00026 
00027 #ifndef MSVIS_VISBUFFERIMPL_H
00028 #define MSVIS_VISBUFFERIMPL_H
00029 
00030 #include <casa/aips.h>
00031 
00032 #warning "Remove next line later"
00033 #    include <synthesis/MSVis/VisBuffer.h>
00034 
00035 #include <casa/Arrays/Cube.h>
00036 #include <casa/Arrays/Vector.h>
00037 #include <casa/Arrays/Matrix.h>
00038 #include <casa/BasicSL/Complex.h>
00039 #include <synthesis/MSVis/VisBufferComponents.h>
00040 
00041 namespace casa { //# NAMESPACE CASA - BEGIN
00042 
00043 namespace asyncio {
00044     class VLAT;
00045 } // end namespace asyncio
00046 
00047 class VbDirtyComponents;
00048 class ROVisibilityIterator2;
00049 class VisibilityIterator2;
00050 
00051 namespace vi {
00052 
00053 //#forward
00054 
00055 
00056 // <summary>
00057 // VbDirtyComponents allows marking portions of a VisBufferImpl as
00058 // modified (aka dirty).  This feature is needed for the Visibility
00059 // Processing Framework (VPF) which allows a sequence of data processing
00060 // nodes to work as a bucket brigade operating sequentially on a
00061 // VisBufferImpl.  A downstream output node needs to know what data,
00062 // if any, needs to be written out.
00063 //
00064 // <prerequisite>
00065 //   #<li><linkto class="VisBufferImpl">VisBufferImpl</linkto>
00066 // </prerequisite>
00067 //
00068 // </summary>
00069 //
00070 // <synopsis>
00071 //
00072 // </synopsis>
00073 // <example>
00074 //
00075 // <code>
00076 //
00077 // </code>
00078 // </example>
00079 //
00080 
00081 #if 0 // Can't avoid the definition in VisBuffer for now
00082 
00083 class VbDirtyComponents {
00084 
00085 public:
00086 
00087     typedef std::set<VisBufferComponents::EnumType> Set;
00088     typedef Set::const_iterator const_iterator;
00089 
00090     VbDirtyComponents operator+ (const VbDirtyComponents & other) const;
00091 
00092     const_iterator begin () const;
00093     Bool contains (VisBufferComponents::EnumType component) const;
00094     const_iterator end () const;
00095 
00096     static VbDirtyComponents all ();
00097     static VbDirtyComponents exceptThese (VisBufferComponents::EnumType component, ...);
00098     static VbDirtyComponents none ();
00099     static VbDirtyComponents singleton (VisBufferComponents::EnumType component);
00100     static VbDirtyComponents these (VisBufferComponents::EnumType component, ...);
00101 
00102 protected:
00103 
00104 private:
00105 
00106     Set set_p;
00107 
00108     static const VbDirtyComponents all_p;
00109 
00110     static VbDirtyComponents initializeAll ();
00111 
00112 };
00113 
00114 #endif // commenting out
00115 
00116 
00117 class VbCacheItemBase;
00118 class VisBufferCache;
00119 class VisBufferState;
00120 
00121 using vi::VbCacheItemBase;
00122 using vi::VisBufferCache;
00123 using vi::VisBufferState;
00124 
00125 //<summary>VisBufferImpls encapsulate one chunk of visibility data for processing.</summary>
00126 //
00127 // <use visibility=export>
00128 //
00129 // <reviewed reviewer="" date="" tests="" demos="">
00130 
00131 // <prerequisite>
00132 //   <li> <linkto class="VisSet">VisSet</linkto>
00133 //   <li> <linkto class="VisibilityIterator2">VisibilityIterator2</linkto>
00134 //   <li> <linkto class="VisBufferImplAutoPtr">VisBufferImplAutoPtr</linkto>
00135 //   <li> <linkto class="VbDirtyComponents">VbDirtyComponents</linkto>
00136 // </prerequisite>
00137 //
00138 // <etymology>
00139 // VisBufferImpl is a buffer for visibility data
00140 // </etymology>
00141 //
00142 //<synopsis>
00143 // This class contains 'one iteration' of the
00144 // <linkto class="VisibilityIterator2">VisibilityIterator2</linkto>
00145 // It is a modifiable
00146 // buffer of values to which calibration and averaging can be applied.
00147 // This allows processing of the data in larger blocks, avoiding some
00148 // overheads for processing per visibility point or spectrum.
00149 //
00150 // See <linkto module="MeasurementEquations">MeasurementEquations</linkto>
00151 // for more details on how the VisBufferImpl is to be used.
00152 //
00153 // When the user intends to allow asynchronous I/O they will need to use
00154 // the VisBufferImplAsync and VisBufferImplAsyncWrapper classes; these are
00155 // publicly derived from VisBufferImpl.  Normally, the user should not
00156 // explicitly use these classes but should use the helper class
00157 // VisBufferImplAutoPtr which will ensure that the appropriate class is
00158 // used.
00159 //</synopsis>
00160 
00161 //<todo>
00162 // <li> reconcile vis/visCube usage: visCube, flagCube and weightMatrix
00163 // are currently only correct when this VisBufferImpl got them from a
00164 // VisIter, operations like -=, freqAverage() are only done for
00165 // visibility() and flag().
00166 //</todo>
00167 
00168 class VisBufferImpl {
00169 
00170     friend class casa::asyncio::VLAT; // for async i/o
00171     friend class VbCacheItemBase;
00172     friend class VisBufferCache;
00173     friend class VisBufferState;
00174     friend class VisBufferImplAsync; // for async i/o
00175     friend class VisBufferImplAsyncWrapper; // for async i/o
00176     friend class ViReadImpl;
00177     friend class ViReadImplAsync; // for async I/O
00178 
00179 public:
00180     // Create empty VisBufferImpl you can assign to or attach.
00181     VisBufferImpl();
00182     // Construct VisBufferImpl for a particular VisibilityIterator2
00183     // The buffer will remain synchronized with the iterator.
00184     VisBufferImpl(ROVisibilityIterator2 & iter);
00185 
00186     // Copy construct, looses synchronization with iterator: only use buffer for
00187     // current iteration (or reattach).
00188     VisBufferImpl(const VisBufferImpl & vb);
00189 
00190     // Destructor (detaches from VisIter)
00191     virtual ~VisBufferImpl();
00192 
00193     // Assignment, loses synchronization with iterator: only use buffer for
00194     // current iteration (or reattach)
00195 
00196     virtual VisBufferImpl & operator=(const VisBufferImpl & vb);
00197 
00198     // Assignment, optionally without copying the data across; with copy=True
00199     // this is identical to normal assignment operator
00200 
00201     virtual void assign(const VisBufferImpl & vb, Bool copy = True);
00202 
00203     virtual VisBufferImpl * clone () const;
00204 
00205     virtual const ROVisibilityIterator2 * getVi () const;
00206 
00207     virtual void invalidate();
00208 
00209     // subtraction: return the difference of the visibilities, flags of
00210     // this and other are or-ed. An exception is thrown if the number of
00211     // rows or channels differs, but no further checks are done.
00212     //-->Not called: VisBufferImpl & operator-=(const VisBufferImpl & vb);
00213 
00214     // Invalidate the cache
00215 
00216     // <group>
00217     // Access functions
00218     //
00219     //     return nCatOK_p ? nCat_p : fillnCat();
00220     // virtual void setNCat (const Int &))) {
00221     // }
00222     // virtual Int nCat() const {
00223     //     return This->nCat();
00224     // }
00225 
00230     // Decide what is the right value (depending on where the vb is coming from)
00231     // for you for the size of the buffer. i.e (nCorr(), nChannel(), nRow()) or vb.visCube().shape()
00232     // The latter comes from the VisIter state ...the former be careful...
00234     //without updating fillnrow
00239 
00241 
00243 
00244     virtual void dirtyComponentsAdd (const VbDirtyComponents & additionalDirtyComponents);
00245     virtual void dirtyComponentsAdd (VisBufferComponents::EnumType component);
00246     virtual void dirtyComponentsClear ();
00247     virtual VbDirtyComponents dirtyComponentsGet () const;
00248     virtual void dirtyComponentsSet (const VbDirtyComponents & dirtyComponents);
00249     virtual void dirtyComponentsSet (VisBufferComponents::EnumType component);
00250 
00251     //--> This needs to be removed: virtual Bool fetch(const asyncio::PrefetchColumns *pfc);
00252 
00253     // feed1_pa() and feed2_pa() return an array of parallactic angles
00254     // (each corresponds to the first receptor of the feed) one for each
00255     // row in the current buffer. In contrast, feed_pa() calculates
00256     // the angles for each antenna. These methods are implemented for
00257     // VisBufferImpl only to benefit from caching of the feed and antenna IDs.
00258 
00259     // Note that feed_pa is a function instead of a cached value
00260     virtual Vector<Float> feed_pa(Double time) const;
00261 
00262     // direction1() and direction2() return arrays of directions where
00263     // the first and the second antenna/feed are pointed to. One value for
00264     // each row in the current buffer.
00265 
00266 
00267     // NOMINAL parallactic angle (feed p.a. offset NOT included)
00268     virtual Float parang0(Double time) const;
00269     virtual Vector<Float> parang(Double time) const;
00270 
00271     virtual MDirection azel0(Double time) const; // function rather than cached value
00272     virtual void azel0Vec(Double time, Vector<Double>& azelVec) const;
00273     virtual Vector<MDirection> azel(Double time) const;
00274     virtual void azelMat(Double time, Matrix<Double>& azelMat) const;
00275 
00276     // Hour angle for specified time
00277     virtual Double hourang(Double time) const;
00278 
00279 //    virtual const Vector<Double>& lsrFrequency() const;
00280 //    virtual void setLsrFrequency (const Vector<Double>&);
00281 
00282 
00283     //the following method is to convert the observed frequencies
00284     // This conversion may not be accurate for some frame
00285     // conversion like topo to lsr except if the spw is in the actual buffer
00286 
00287     //if ignoreconv=True..frequency is served as is in the data frame
00288     //virtual void lsrFrequency(const Int & spw, Vector<Double>& freq, Bool & convert, const Bool ignoreconv = False) const;
00289 
00290 //    virtual const Matrix<Float>& imagingWeight() const;
00291 //    virtual void setImagingWeight (const Matrix<Float>&);
00292 
00293     //</group>
00294 
00295     //<group>
00296     // Utility functions to provide coordinate or column ranges of the
00297     // data in the VisBufferImpl. Flagging is applied before computing the ranges.
00298     //
00299     // Generic accessor to column ranges of integer type, as specified by
00300     // enumerations defined in class MSCalEnums. Throws an exception
00301     // if the enum is not for a recognized integer column.
00302     //--> Low utility?: virtual Vector<Int> vecIntRange(const MSCalEnums::colDef & calEnum) const;
00303 
00304     // Antenna id. range (includes both ANTENNA1 and ANTENNA2 columns)
00305     //--> Low utility?: virtual Vector<Int> antIdRange() const;
00306 
00307     // Time range
00308 
00309     //--> Low utility?: virtual Bool timeRange(MEpoch & rTime, MVEpoch & rTimeEP, MVEpoch & rInterval) const;
00310 
00311     // Return the row Ids from the original ms. If the ms used is a subset of
00312     // another ms then rowIds() return the row ids of the original ms.
00313 
00314     //--> Belongs in VI: virtual void setRowIds (const Vector<uInt>&);
00315     //--> Belongs in VI: virtual const Vector<uInt>& rowIds() const;
00316 
00317     //</group>
00318 
00319     // Frequency average the buffer (visibility() column only)
00320     //--> Not called: virtual void freqAverage();
00321 
00322     // Frequency average the buffer (visCube and [if present] modelVisCube)
00323     void freqAveCubes();
00324 
00325     // Average channel axis according to chanavebounds, for whichever of DATA,
00326     // MODEL_DATA, CORRECTED_DATA, FLOAT_DATA, FLAG, and WEIGHT_SPECTRUM are
00327     // present.  It will only treat the first 5 as present if they have already
00328     // been loaded into the buffer!
00329     void averageChannels (const Matrix<Int>& chanavebounds);
00330 
00331 
00332     // Form Stokes parameters from correlations
00333     //  (these are preliminary versions)
00334     //--> Not called: virtual void formStokes();
00335     //--> Not called: virtual void formStokesWeightandFlag();
00336     //--> Not called: virtual void formStokes(Cube<Complex>& vis);
00337     //--> Not called: virtual void formStokes(Cube<Float>& fcube);    // Will throw up if asked to do all 4.
00338 
00339     // Sort/unsort the correlations, if necessary
00340     //  (Rudimentary handling of non-canonically sorted correlations--use with care!)
00341     virtual void sortCorr ();
00342     virtual void unSortCorr();
00343 
00344     // Normalize the visCube by the modelVisCube
00345     //   (and optionally also divide visCube_p by its normalized amp)
00346     virtual void normalize(const Bool & phaseOnly = False);
00347 
00348     // Fill weightMat according to sigma column
00349     virtual void resetWeightsUsingSigma ();//virtual void resetWeightMat();
00350 
00351     // Rotate visibility phase for given vector (dim = nrow of vb) of phases (metres)
00352 
00353     //--> Called by routine in FixVis but that routine is not called:
00354     // virtual void phaseCenterShift(const Vector<Double>& phase);
00355     // Rotate visibility phase for phase center offsets (arcsecs)
00356     //--> Not called: virtual void phaseCenterShift(Double dx, Double dy);
00357 
00358     // Update coordinate info - useful for copied VisBufferImpls that need
00359     // to retain some state for later reference.
00360     // Presently this fills antenna, array, field and spectralWindow ids, time,
00361     // frequency and number of rows.
00362     // if dirDependent is set to False the expensive direction dependent calculation of parallactic or direction of
00363     // antenna from pointing table is avoided
00364     //Add more as needed.
00365     virtual void updateCoordInfo(const VisBufferImpl * vb = NULL, const Bool dirDependent = True);
00366     void copyCoordInfo(const VisBufferImpl & other, Bool force = False);
00367 
00368     //--> Not called: virtual void setCorrectedVisCube(const Cube<Complex>& vis);
00369     // Like the above, but for FLOAT_DATA, keeping it as real floats.
00370 
00371     //--> Not called: virtual void setFloatDataCube(const Cube<Float>& fcube);
00372     // Reference external model visibilities
00373     //--> Not called: virtual void refModelVis(const Matrix<CStokesVector>& mvis);
00374 
00375     // Remove scratch cols data from vb
00376     //--> Not called: virtual void removeScratchCols();
00377 
00378     // Access the current ROMSColumns object via VisIter
00379     //--> Access using VI: virtual const ROMSColumns & msColumns() const;
00380 
00381     //--> Access via VI: virtual  Int numberAnt () const;
00382 
00383 
00384 
00385     // Get all selected spectral windows not just the one in the actual buffer
00386     //--> Get from VI: virtual void allSelectedSpectralWindows(Vector<Int>& spws, Vector<Int>& nvischan);
00387 
00388     //--> Get from VI: virtual void getChannelSelection(Block< Vector<Int> >& blockNGroup,
00389     //                             Block< Vector<Int> >& blockStart,
00390     //                     Block< Vector<Int> >& blockWidth,
00391     //                             Block< Vector<Int> >& blockIncr,
00392     //                             Block< Vector<Int> >& blockSpw) const;;
00393     //--> Get from VI: void allSelectedSpectralWindows(Vector<Int>& spws, Vector<Int>& nvischan) const;
00394 
00395     virtual Bool isNewArrayId () const;
00396     virtual Bool isNewFieldId () const;
00397     virtual Bool isNewMs() const;
00398     virtual Bool isNewSpectralWindow () const;
00399     virtual Bool isWritable () const;
00400     virtual Int msId() const;
00401     virtual String msName (Bool stripPath = False) const;
00402 
00404     //
00405     //  Data accessors and setters (where appropriate)
00406     //
00407     //  There are the methods that allows access to the items cached in the
00408     //  VisBuffer.  The straight accessors provide read-only access to the
00409     //  item.  Where the item is allowed to be modified, one or more set
00410     //  methods are provided.
00411 
00412     virtual Vector<Int> antenna1 () const;
00413     virtual const Vector<Int> & antenna2 () const;
00414     virtual Int arrayId () const;
00415     virtual const Vector<Int> & channel () const;
00416     virtual const Vector<SquareMatrix<Complex, 2> > & cjones () const;
00417     virtual const Cube<Complex> & correctedVisCube () const;
00418     virtual void setCorrectedVisCube (const Cube<Complex> &);
00419     virtual const Matrix<CStokesVector> & correctedVisibility () const;
00420     virtual void setCorrectedVisibility (const Matrix<CStokesVector> &);
00421     virtual const Vector<Int> & corrType () const;
00422     virtual Int dataDescriptionId () const;
00423     virtual const Vector<MDirection> & direction1 () const;
00424     virtual const Vector<MDirection> & direction2 () const;
00425     virtual const Vector<Double> & exposure () const;
00426     virtual const Vector<Int> & feed1 () const;
00427     virtual const Vector<Float> & feed1_pa () const;
00428     virtual const Vector<Int> & feed2 () const;
00429     virtual const Vector<Float> & feed2_pa () const;
00430     virtual Int fieldId () const;
00431     virtual const Matrix<Bool> & flag () const;
00432     virtual void setFlag (const Matrix<Bool>&);
00433     virtual const Array<Bool> & flagCategory () const;
00434     virtual void setFlagCategory (const Array<Bool>&);
00435     virtual const Cube<Bool> & flagCube () const;
00436     virtual void setFlagCube (const Cube<Bool>&);
00437     virtual const Vector<Bool> & flagRow () const;
00438     virtual void setFlagRow (const Vector<Bool>&);
00439     virtual const Cube<Float> & floatDataCube () const;
00440     virtual void setFloatDataCube (const Cube<Float> &);
00441     virtual const Vector<Double> & frequency () const;
00442     virtual const Matrix<Float> & imagingWeight () const;
00443     virtual const Cube<Complex> & modelVisCube () const;
00444     virtual void setModelVisCube(const Complex & c);
00445     virtual void setModelVisCube(const Cube<Complex>& vis);
00446     virtual void setModelVisCube(const Vector<Float>& stokes);
00447     virtual const Matrix<CStokesVector> & modelVisibility () const;
00448     virtual void setModelVisibility (Matrix<CStokesVector> &);
00449     virtual Int nChannel () const;
00450     virtual Int nCorr () const;
00451     virtual Int nRow () const;
00452     virtual const Vector<Int> & observationId () const;
00453     virtual const MDirection& phaseCenter () const;
00454     virtual Int polFrame () const;
00455     virtual const Vector<Int> & processorId () const;
00456     virtual const Vector<uInt> & rowIds () const;
00457     virtual const Vector<Int> & scan () const;
00458     virtual const Vector<Float> & sigma () const;
00459     virtual const Matrix<Float> & sigmaMat () const;
00460     virtual Int spectralWindow () const;
00461     virtual const Vector<Int> & stateId () const;
00462     virtual const Vector<Double> & time () const;
00463     virtual const Vector<Double> & timeCentroid () const;
00464     virtual const Vector<Double> & timeInterval () const;
00465     virtual const Vector<RigidVector<Double, 3> > & uvw () const;
00466     virtual const Matrix<Double> & uvwMat () const;
00467     virtual const Cube<Complex> & visCube () const;
00468     virtual void setVisCube(const Complex & c);
00469     virtual void setVisCube (const Cube<Complex> &);
00470     virtual const Matrix<CStokesVector> & visibility () const;
00471     virtual void setVisibility (Matrix<CStokesVector> &);
00472     virtual const Vector<Float> & weight () const;
00473     virtual void setWeight (const Vector<Float>&);
00474     virtual const Matrix<Float> & weightMat () const;
00475     virtual void setWeightMat (const Matrix<Float>&);
00476     virtual const Cube<Float> & weightSpectrum () const;
00477     virtual void setWeightSpectrum (const Cube<Float>&);
00478 
00479 protected:
00480 
00481 
00482     // Attach to a VisIter. Detaches itself first if already attached
00483     // to a VisIter. Will remain synchronized with iterator.
00484 
00485     virtual void attachToVisibilityIterator2 (ROVisibilityIterator2 & iter);
00486     virtual void cacheCopy (const VisBufferImpl & other, Bool markAsCached);
00487     virtual void cacheClear (Bool markAsCached = False);
00488 
00489     void adjustWeightFactorsAndFlags (Matrix <Float> & rowWeightFactors,
00490                                       Bool useWeightSpectrum,
00491                                       Int nRows,
00492                                       Int nCorrelations,
00493                                       Int nChannelsOut);
00494     void adjustWeightAndSigmaMatrices (Int nChannelsAveraged, Int nChannelsOut, Int nRows,
00495                                        Int nCorrelations, Int nChannelsSelected,
00496                                        const Matrix <Float> & rowWeightFactors);
00497 
00498     Int averageChannelFrequencies (Int nChannelsOut,
00499                                    const Vector<Int> & channels,
00500                                    const Matrix<Int> & averagingBounds);
00501 
00502     void averageFlagInfoChannels (const Matrix<Int> & averagingBounds,
00503                                   Int nChannelsOut, Bool useWeightSpectrum);
00504 
00505     template<class T>
00506     void averageVisCubeChannels (T & dataCache,
00507                                  Int nChanOut,
00508                                  const Matrix<Int>& averagingbounds);
00509 
00510     virtual void checkVisIter (const char * func, const char * file, int line, const char * extra = "") const;
00511     void computeRowWeightFactors (Matrix <Float> & rowWeightFactors, Bool useWeightSpectrum);
00512     virtual void sortCorrelationsAux (Bool makeSorted);
00513     virtual void detachFromVisibilityIterator2 ();
00514     virtual ROVisibilityIterator2 * getViP () const; // protected, non-const access to VI
00515     void registerCacheItem (VbCacheItemBase *);
00516     void setIterationInfo (Int msId, const String & msName, Bool isNewMs,
00517                            Bool isNewArrayId, Bool isNewFieldId, Bool isNewSpectralWindow);
00518     virtual void stateCopy (const VisBufferImpl & other); // copy relevant noncached members
00519 
00520     template <typename Coord>
00521     void updateCoord (Coord & item, const Coord & otherItem);
00522 
00523 private:
00524 
00525     virtual Bool areCorrelationsInCanonicalOrder () const;
00526     void checkVisIterBase (const char * func, const char * file, int line, const char * extra = "") const;
00527     void construct();
00528     void constructCache();
00529     virtual void validate();
00530 
00532     //
00533     //  Fillers
00534     //
00535     // These methods fill the needed value into the cache.  This
00536     // usually means getting it from the attached VisibilityIterator2
00537     // but the needed value can be generated as well.
00538     //
00539     // The name of the filler should match up with the accessor method
00540     // (see above) as well as the member name in the cache (see
00541     // VisBufferCache class in VisBuffer.cc).
00542 
00543 
00544     virtual void fillAntenna1 (Vector<Int>& value) const;
00545     virtual void fillAntenna2 (Vector<Int>& value) const;
00546     virtual void fillArrayId (Int& value) const;
00547     virtual void fillChannel (Vector<Int>& value) const;
00548     virtual void fillCorrType (Vector<Int>& value) const;
00549     virtual void fillCubeCorrected (Cube <Complex> & value) const;
00550     virtual void fillCubeModel (Cube <Complex> & value) const;
00551     virtual void fillCubeObserved (Cube <Complex> & value) const;
00552     virtual void fillDataDescriptionId  (Int& value) const;
00553     virtual void fillDirection1 (Vector<MDirection>& value) const;
00554     virtual void fillDirection2 (Vector<MDirection>& value) const;
00555     virtual void fillDirectionAux (Vector<MDirection>& value,
00556                            const Vector<Int> & antenna,
00557                            const Vector<Int> &feed,
00558                            const Vector<Float> & feedPa) const;
00559     virtual void fillExposure (Vector<Double>& value) const;
00560     virtual void fillFeed1 (Vector<Int>& value) const;
00561     virtual void fillFeed2 (Vector<Int>& value) const;
00562     virtual void fillFeedPa1 (Vector <Float> & feedPa) const;
00563     virtual void fillFeedPa2 (Vector <Float> & feedPa) const;
00564     virtual void fillFeedPaAux (Vector <Float> & feedPa,
00565                         const Vector <Int> & antenna,
00566                         const Vector <Int> & feed) const;
00567     virtual void fillFieldId (Int& value) const;
00568     virtual void fillFlag (Matrix<Bool>& value) const;
00569     virtual void fillFlagCategory (Array<Bool>& value) const;
00570     virtual void fillFlagCube (Cube<Bool>& value) const;
00571     virtual void fillFlagRow (Vector<Bool>& value) const;
00572     virtual void fillFloatData (Cube<Float>& value) const;
00573     virtual void fillFrequency (Vector<Double>& value) const;
00574     virtual void fillImagingWeight (Matrix<Float> & value) const;
00575     virtual void fillJonesC (Vector<SquareMatrix<Complex, 2> >& value) const;
00576     virtual void fillNChannel (Int& value) const;
00577     virtual void fillNCorr (Int& value) const;
00578     virtual void fillNRow (Int& value) const;
00579     virtual void fillObservationId (Vector<Int>& value) const;
00580     virtual void fillPhaseCenter (MDirection& value) const;
00581     virtual void fillPolFrame (Int& value) const;
00582     virtual void fillProcessorId (Vector<Int>& value) const;
00583     virtual void fillScan (Vector<Int>& value) const;
00584     virtual void fillSigma (Vector<Float>& value) const;
00585     virtual void fillSigmaMat (Matrix<Float>& value) const;
00586     virtual void fillSpectralWindow (Int& value) const;
00587     virtual void fillStateId (Vector<Int>& value) const;
00588     virtual void fillTime (Vector<Double>& value) const;
00589     virtual void fillTimeCentroid (Vector<Double>& value) const;
00590     virtual void fillTimeInterval (Vector<Double>& value) const;
00591     virtual void fillUvw (Vector<RigidVector<Double, 3> >& value) const;
00592     virtual void fillUvwMat (Matrix<Double>& value) const;
00593     virtual void fillVisibilityCorrected (Matrix<CStokesVector>& value) const;
00594     virtual void fillVisibilityModel (Matrix<CStokesVector>& value) const;
00595     virtual void fillVisibilityObserved (Matrix<CStokesVector>& value) const;
00596     virtual void fillWeight (Vector<Float>& value) const;
00597     virtual void fillWeightMat (Matrix<Float>& value) const;
00598     virtual void fillWeightSpectrum (Cube<Float>& value) const;
00599 
00600     VisBufferCache * cache_p;
00601     VisBufferState * state_p;
00602 };
00603 
00604 } // end namespace vb
00605 
00606 } // end namespace casa
00607 
00608 
00609 #endif
00610