casa  $Rev:20696$
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Defines
VisBufferAsyncWrapper.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 //# $Id: VisBuffer.h,v 19.14 2006/02/28 04:48:58 mvoronko Exp $
00027 
00028 #ifndef VISBUFFER_ASYNC_WRAPPER_H
00029 #define VISBUFFER_ASYNC_WRAPPER_H
00030 
00031 #include <casa/aips.h>
00032 #include <casa/Arrays/Cube.h>
00033 #include <casa/Arrays/Vector.h>
00034 #include <casa/Arrays/Matrix.h>
00035 #include <casa/BasicSL/Complex.h>
00036 #include <measures/Measures/MDirection.h>
00037 #include <measures/Measures/MEpoch.h>
00038 #include <synthesis/MSVis/StokesVector.h>
00039 #include <synthesis/MSVis/VisBuffer.h>
00040 #include <synthesis/MSVis/VisBufferAsync.h>
00041 #include <synthesis/MSVis/VisibilityIterator.h>
00042 #include <synthesis/MSVis/MSCalEnums.h>
00043 
00044 namespace casa { //# NAMESPACE CASA - BEGIN
00045 
00046 //#forward
00047 
00048 //<summary>VisBuffers encapulsate one chunk of visibility data for processing.</summary>
00049 //
00050 // <use visibility=export>
00051 //
00052 // <reviewed reviewer="" date="" tests="" demos="">
00053 
00054 // <prerequisite>
00055 //   <li> <linkto class="VisSet">VisSet</linkto>
00056 //   <li> <linkto class="VisibilityIterator">VisibilityIterator</linkto>
00057 // </prerequisite>
00058 //
00059 // <etymology>
00060 // VisBuffer is a buffer for visibility data
00061 // </etymology>
00062 //
00063 //<synopsis>
00064 // This class contains 'one iteration' of the
00065 // <linkto class="VisibilityIterator">VisibilityIterator</linkto>
00066 // It is a modifiable
00067 // buffer of values to which calibration and averaging can be applied.
00068 // This allows processing of the data in larger blocks, avoiding some
00069 // overheads for processing per visibility point or spectrum.
00070 //
00071 // See <linkto module="MeasurementEquations">MeasurementEquations</linkto>
00072 // for more details on how the VisBuffer is to be used.
00073 //</synopsis>
00074 
00075 //<todo>
00076 // <li> reconcile vis/visCube usage: visCube, flagCube and weightMatrix
00077 // are currently only correct when this VisBuffer got them from a
00078 // VisIter, operations like -=, freqAverage() are only done for
00079 // visibility() and flag().
00080 //</todo>
00081 class VisBufferAsyncWrapper : public VisBufferAsync {
00082 
00083     friend class ViReadImplAsync;
00084 
00085 public:
00086     // Create empty VisBuffer you can assign to or attach.
00087     VisBufferAsyncWrapper();
00088 //    // Construct VisBuffer for a particular VisibilityIterator
00089 //    // The buffer will remain synchronized with the iterator.
00090     VisBufferAsyncWrapper (ROVisibilityIterator & iter);
00091 //
00092 //    // Copy construct, looses synchronization with iterator: only use buffer for
00093 //    // current iteration (or reattach).
00094     VisBufferAsyncWrapper (const VisBufferAsync & vb);
00095 
00096     // Destructor (detaches from VisIter)
00097     virtual ~VisBufferAsyncWrapper();
00098 
00099     // Assignment, loses synchronization with iterator: only use buffer for
00100     // current iteration (or reattach)
00101 
00102     virtual VisBufferAsyncWrapper & operator=(const VisBufferAsyncWrapper & vb);
00103 
00104     // Assignment, optionally without copying the data across; with copy=True
00105     // this is identical to normal assignment operator
00106 
00107     virtual VisBufferAsyncWrapper & assign(const VisBuffer & vb, Bool copy = True);
00108 
00109     // subtraction: return the difference of the visibilities, flags of
00110     // this and other are or-ed. An exception is thrown if the number of
00111     // rows or channels differs, but no further checks are done.
00112     VisBufferAsyncWrapper & operator-=(const VisBuffer & vb);
00113 
00114     // Attach to a VisIter. Detaches itself first if already attached
00115     // to a VisIter. Will remain synchronized with iterator.
00116     virtual void attachToVisIter(ROVisibilityIterator & iter);
00117     void attachToVisIterAsync (ROVisibilityIterator & iter);
00118     virtual VisBuffer * clone ();
00119     virtual void detachFromVisIter ();
00120 
00121     // Invalidate the cache
00122     virtual void invalidate();
00123 
00124     // <group>
00125     // Access functions
00126     //
00127     virtual Int & nCorr();
00128     Int nCorr() const;
00129 
00130     Int & nChannel();
00131     Int nChannel() const;
00132 
00133     Vector<Int>& channel();
00134     const Vector<Int>& channel() const;
00135 
00136     Bool newArrayId () const;
00137     Bool newFieldId () const;
00138     Bool newSpectralWindow () const;
00139 
00140     Int & nRow();
00141     Int nRow() const;
00142 
00143     Vector<Int>& antenna1();
00144     const Vector<Int>& antenna1() const;
00145 
00146     Vector<Int>& antenna2();
00147     const Vector<Int>& antenna2() const;
00148 
00149     Vector<Int>& feed1();
00150     const Vector<Int>& feed1() const;
00151 
00152     Vector<Int>& feed2();
00153     const Vector<Int>& feed2() const;
00154 
00155     // feed1_pa() and feed2_pa() return an array of parallactic angles
00156     // (each corresponds to the first receptor of the feed) one for each
00157     // row in the current buffer. In contrast, feed_pa() calculates
00158     // the angles for each antenna. These methods are implemented for
00159     // VisBuffer only to benefit from caching of the feed and antenna IDs.
00160     Vector<Float>& feed1_pa();
00161     const Vector<Float>& feed1_pa() const;
00162 
00163     Vector<Float>& feed2_pa();
00164     const Vector<Float>& feed2_pa() const;
00165 
00166     Vector<SquareMatrix<Complex, 2> >& CJones();
00167     const Vector<SquareMatrix<Complex, 2> >& CJones() const;
00168 
00169     // Note that feed_pa is a function instead of a cached value
00170     virtual Vector<Float> feed_pa(Double time) const;
00171 
00172     // direction1() and direction2() return arrays of directions where
00173     // the first and the second antenna/feed are pointed to. One value for
00174     // each row in the current buffer.
00175     Vector<MDirection>& direction1();
00176     const Vector<MDirection>& direction1()  const;
00177 
00178     Vector<MDirection>& direction2();
00179     const Vector<MDirection>& direction2()  const;
00180 
00181 
00182     // NOMINAL parallactic angle (feed p.a. offset NOT included)
00183     virtual Float parang0(Double time) const;
00184     virtual Vector<Float> parang(Double time) const;
00185 
00186     // Note that azel is a function instead of a cached value
00187     virtual MDirection azel0(Double time) const;
00188     Vector<Double>& azel0Vec(Double time, Vector<Double>& azelVec) const;
00189     virtual Vector<MDirection> azel(Double time) const;
00190     Matrix<Double>& azelMat(Double time, Matrix<Double>& azelMat) const;
00191 
00192     // Hour angle for specified time
00193     virtual Double hourang(Double time) const;
00194 
00195     Int fieldId() const;
00196 
00197     Int arrayId() const;
00198 
00199     Int polarizationId() const;
00200 
00201     // Return flag for each channel & row
00202     Matrix<Bool>& flag();
00203     const Matrix<Bool>& flag() const;
00204 
00205     // Return flag for each polarization, channel and row
00206     Cube<Bool>& flagCube();
00207     const Cube<Bool>& flagCube() const;
00208 
00209     Vector<Bool>& flagRow();
00210     const Vector<Bool>& flagRow() const;
00211 
00212     // Return flags for each polarization, channel, category, and row.
00213     Array<Bool>& flagCategory();
00214     const Array<Bool>& flagCategory() const;
00215 
00216     Vector<Int>& scan();
00217     const Vector<Int>& scan() const;
00218 
00219     // scalar version for convenience, when scan known constant for
00220     // entire iteration/buffer.
00221     Int scan0();
00222 
00223     Vector<Int>& processorId();
00224     const Vector<Int>& processorId() const;
00225 
00226     Vector<Int>& observationId();
00227     const Vector<Int>& observationId() const;
00228 
00229     Vector<Int>& stateId();
00230     const Vector<Int>& stateId() const;
00231 
00232     // Gets SPECTRAL_WINDOW/CHAN_FREQ (in Hz, acc. to the MS def'n v.2).
00233     Vector<Double>& frequency();
00234     const Vector<Double>& frequency() const;
00235 
00236 //    Vector<Double>& lsrFrequency();
00237 //    const Vector<Double>& lsrFrequency() const;
00238 
00239 
00240     //the following method is to convert the observed frequencies
00241     // This conversion may not be accurate for some frame
00242     // conversion like topo to lsr except if the spw is in the actual buffer
00243 
00244     virtual void lsrFrequency(const Int & spw, Vector<Double>& freq, Bool & convert) const;
00245 
00246     virtual Int numberCoh () const;
00247 
00248     MDirection & phaseCenter();
00249     MDirection phaseCenter() const;
00250 
00251     Int polFrame() const;
00252 
00253     Vector<Int>& corrType();
00254     const Vector<Int>& corrType() const;
00255 
00256     Vector<Float>& sigma();
00257     const Vector<Float>& sigma() const;
00258 
00259     Matrix<Float>& sigmaMat();
00260     const Matrix<Float>& sigmaMat() const;
00261 
00262     Int & spectralWindow();
00263     Int spectralWindow() const;
00264     virtual Int dataDescriptionId() const;
00265     Vector<Double>& time();
00266     const Vector<Double>& time() const;
00267 
00268     Vector<Double>& timeCentroid();
00269     const Vector<Double>& timeCentroid() const;
00270 
00271     Vector<Double>& timeInterval();
00272     const Vector<Double>& timeInterval() const;
00273 
00274     Vector<Double>& exposure();
00275     const Vector<Double>& exposure() const;
00276 
00277     Vector<RigidVector<Double, 3> >& uvw();
00278     const Vector<RigidVector<Double, 3> >& uvw() const;
00279 
00280     Matrix<Double>& uvwMat();
00281     const Matrix<Double>& uvwMat() const;
00282 
00283     Matrix<CStokesVector>& visibility();
00284     const Matrix<CStokesVector>& visibility() const;
00285 
00286     Matrix<CStokesVector>& modelVisibility();
00287     const Matrix<CStokesVector>& modelVisibility() const;
00288 
00289     Matrix<CStokesVector>& correctedVisibility();
00290     const Matrix<CStokesVector>& correctedVisibility() const;
00291 
00292     Cube<Complex>& visCube();
00293     const Cube<Complex>& visCube() const;
00294 
00295     Cube<Complex>& modelVisCube();
00296 
00297     Cube<Complex>& modelVisCube(const Bool & matchVisCubeShape);
00298 
00299     const Cube<Complex>& modelVisCube() const;
00300 
00301     Cube<Complex>& correctedVisCube();
00302     const Cube<Complex>& correctedVisCube() const;
00303 
00304     // Return visCube(), modelVisCube(), or correctedVisCube(),
00305     // according to whichcol.  They throw an exception if whichcol is
00306     // unsupported, but note the encouraged default.
00307     // TODO: Optionally return DATA if whichcol is unavailable.
00308     Cube<Complex>& dataCube(const MS::PredefinedColumns whichcol=MS::DATA);
00309     const Cube<Complex>& dataCube(const MS::PredefinedColumns
00310                                   whichcol=MS::DATA) const;
00311 
00312     Cube<Float>& floatDataCube();
00313     const Cube<Float>& floatDataCube() const;
00314 
00315     // Returns the weights for each row averaged over the parallel hand correlations.
00316     Vector<Float>& weight();
00317     const Vector<Float>& weight() const;
00318 
00319     // Returns the nPol_p x curNumRow_p weight matrix.
00320     Matrix<Float>& weightMat();
00321     const Matrix<Float>& weightMat() const;
00322 
00323     // Is a valid WEIGHT_SPECTRUM available?
00324     Bool existsWeightSpectrum() const;
00325 
00326     Cube<Float>& weightSpectrum();
00327     const Cube<Float>& weightSpectrum() const;
00328 
00329     const Matrix<Float>& imagingWeight() const;
00330     Matrix<Float> & imagingWeight ();
00331 
00332     Cube<Float>& weightCube();
00333     //</group>
00334 
00335     //<group>
00336     // Utility functions to provide coordinate or column ranges of the
00337     // data in the VisBuffer. Flagging is applied before computing the ranges.
00338     //
00339     // Generic accessor to column ranges of integer type, as specified by
00340     // enumerations defined in class MSCalEnums. Throws an exception
00341     // if the enum is not for a recognized integer column.
00342     Vector<Int> vecIntRange(const MSCalEnums::colDef & calEnum) const;
00343 
00344     // Antenna id. range (includes both ANTENNA1 and ANTENNA2 columns)
00345     Vector<Int> antIdRange() const;
00346 
00347     // Time range
00348     Bool timeRange(MEpoch & rTime, MVEpoch & rTimeEP, MVEpoch & rInterval) const;
00349 
00350     // Return the row Ids from the original ms. If the ms used is a subset of
00351     // another ms then rowIds() return the row ids of the original ms.
00352     virtual Vector<uInt>& rowIds();
00353 
00354     virtual const Vector<uInt>& rowIds() const;;
00355 
00356     //</group>
00357 
00358     // Frequency average the buffer (visibility() column only)
00359     void freqAverage();
00360 
00361     // Frequency average the buffer (visCube and [if present] modelVisCube)
00362     void freqAveCubes();
00363 
00364     // Average channel axis according to chanavebounds, for whichever of DATA,
00365     // MODEL_DATA, CORRECTED_DATA, FLOAT_DATA, FLAG, and WEIGHT_SPECTRUM are
00366     // present.  It will only treat the first 5 as present if they have already
00367     // been loaded into the buffer!
00368     void channelAve(const Matrix<Int>& chanavebounds);
00369 
00370     // Average channel axis by factor.
00371     template<class T> void chanAveVisCube(Cube<T>& data, Int nChanOut);
00372 
00373     // Accumulate channel axis by factor, without applying WEIGHT_SPECTRUM even
00374     // if it is present.
00375     // It is primarily intended for averaging WEIGHT_SPECTRUM itself.
00376     template<class T> void chanAccCube(Cube<T>& data, Int nChanOut);
00377 
00378     // This defaults to no conceptual side effects, but usually it is more
00379     // efficient to let it leave weightSpectrum() in a channel averaged state.
00380     // restoreWeightSpectrum has no effect if !existsWeightSpectrum().
00381     void chanAveFlagCube(Cube<Bool>& flagcube, const Int nChanOut,
00382                          const Bool restoreWeightSpectrum = True);
00383 
00384     // Form Stokes parameters from correlations
00385     //  (these are preliminary versions)
00386     void formStokes();
00387     void formStokesWeightandFlag();
00388     void formStokes(Cube<Complex>& vis);
00389     void formStokes(Cube<Float>& fcube);    // Will throw up if asked to do all 4.
00390 
00391     // Sort/unsort the correlations, if necessary
00392     //  (Rudimentary handling of non-canonically sorted correlations--use with care!)
00393     void sortCorr();
00394     void unSortCorr();
00395 
00396     // Normalize the visCube by the modelVisCube
00397     //   (and optionally also divide visCube_p by its normalized amp)
00398     void normalize(const Bool & phaseOnly = False);
00399 
00400     // Fill weightMat according to sigma column
00401     void resetWeightMat();
00402 
00403     // Rotate visibility phase for phase center offsets
00404     void phaseCenterShift(Double dx, Double dy);
00405 
00406     // Update coordinate info - useful for copied VisBuffers that need
00407     // to retain some state for later reference.
00408     // Presently this fills antenna, array, field and spectralWindow ids, time,
00409     // frequency and number of rows. Add more as needed.
00410     virtual void updateCoordInfo(const VisBuffer * vb = NULL);
00411 
00412     // Set the visibility to a constant, note that this only changes the buffer,
00413     // no values are written back to tables from here.
00414     virtual void setVisCube(Complex c);
00415     virtual void setModelVisCube(Complex c);
00416     virtual void setCorrectedVisCube(Complex c);
00417 
00418     // Set the visibility, note that this only changes the buffer,
00419     // no values are written back to tables from here.
00420     void setVisCube(const Cube<Complex>& vis);
00421     void setModelVisCube(const Cube<Complex>& vis);
00422     void setCorrectedVisCube(const Cube<Complex>& vis);
00423 
00424     // Like the above, but for FLOAT_DATA, keeping it as real floats.
00425     void setFloatDataCube(const Cube<Float>& fcube);
00426 
00427     // Set model according to a Stokes vector
00428     void setModelVisCube(const Vector<Float>& stokes);
00429 
00430     // Reference external model visibilities
00431     void refModelVis(const Matrix<CStokesVector>& mvis);
00432 
00433     // Remove scratch cols data from vb
00434     void removeScratchCols();
00435 
00436     // Access the current ROMSColumns object via VisIter
00437     virtual const ROMSColumns & msColumns() const;
00438 
00439     virtual  Int numberAnt () const;
00440 
00441 
00442 
00443     // Get all selected spectral windows not just the one in the actual buffer
00444     virtual void allSelectedSpectralWindows(Vector<Int>& spws, Vector<Int>& nvischan);
00445 
00446     void allSelectedSpectralWindows(Vector<Int>& spws, Vector<Int>& nvischan) const;
00447 
00448     // Return the actual msid, useful if using multiple ms to monitor which
00449     // ms in the  list is being dealt with
00450     virtual Int msId() const;
00451 
00452     //checked if the ms has changed since the last chunk processed
00453     virtual Bool newMS() const;
00454 
00455     void wrap (VisBufferAsync * vba);
00456 
00457 protected:
00458 
00459     virtual Bool checkMSId();
00460     virtual void checkVisIter (const char * func, const char * file, int line) const;
00461     void copyCache (const VisBuffer & other, Bool force);
00462     const VisImagingWeight & getImagingWeightGenerator () const;
00463     Int getOldMsId () const;
00464     ROVisibilityIterator * getVisibilityIterator () const;
00465     VisBufferAsync * releaseVba ();
00466 
00467     // Create cache status accessors which relay the request to the wrapped
00468     // VBA.
00469 
00470 #undef CacheStatus
00471 #define CacheStatus(item)\
00472 Bool item ## OK () const\
00473 {\
00474     if (wrappedVba_p == NULL){\
00475         throw AipsError ("VisBufferAsyncWrapper: No attached VBA", __FILE__, __LINE__);\
00476     }\
00477     return wrappedVba_p->item ## OK_p;\
00478 }
00479 
00480     CacheStatus (antenna1);
00481     CacheStatus (antenna2);
00482     CacheStatus (arrayId);
00483     CacheStatus (channel);
00484     CacheStatus (cjones);
00485     CacheStatus (correctedVisCube);
00486     CacheStatus (correctedVisibility);
00487     CacheStatus (corrType);
00488     CacheStatus (dataDescriptionId);
00489     CacheStatus (direction1);
00490     CacheStatus (direction2);
00491     CacheStatus (exposure);
00492     CacheStatus (feed1_pa);
00493     CacheStatus (feed1);
00494     CacheStatus (feed2_pa);
00495     CacheStatus (feed2);
00496     CacheStatus (fieldId);
00497     CacheStatus (flagCategory);
00498     CacheStatus (flagCube);
00499     CacheStatus (flag);
00500     CacheStatus (flagRow);
00501     CacheStatus (floatDataCube);
00502     CacheStatus (frequency);
00503     CacheStatus (imagingWeight);
00504     CacheStatus (modelVisCube);
00505     CacheStatus (modelVisibility);
00506     CacheStatus (ms);
00507     CacheStatus (nChannel);
00508     CacheStatus (nCorr);
00509     CacheStatus (nRow);
00510     CacheStatus (observationId);
00511     CacheStatus (phaseCenter);
00512     CacheStatus (polFrame);
00513     CacheStatus (processorId);
00514     CacheStatus (rowIds);
00515     CacheStatus (scan);
00516     CacheStatus (sigmaMat);
00517     CacheStatus (sigma);
00518     CacheStatus (spectralWindow);
00519     CacheStatus (stateId);
00520     CacheStatus (timeCentroid);
00521     CacheStatus (timeInterval);
00522     CacheStatus (time);
00523     CacheStatus (uvwMat);
00524     CacheStatus (uvw);
00525     CacheStatus (visCube);
00526     CacheStatus (visibility);
00527     CacheStatus (weightMat);
00528     CacheStatus (weight);
00529     CacheStatus (weightSpectrum);
00530 
00531 private:
00532 
00533     VisBufferAsync * wrappedVba_p;
00534     ROVisibilityIterator * wrappedVisIterAsync_p;
00535 
00536     // validate the cache
00537     void validate();
00538     void attachWrappedVb (ROVisibilityIterator * iter);
00539 
00540     void setAllCacheStatuses (bool status);
00541 
00542 
00543     Bool nonCanonCorr(); // Are correlations in non-canonical order?
00544 
00545     // Filter index arrays for unique elements
00546     Vector<Int> unique(const Vector<Int>& indices) const;
00547 
00548     // +-------------------------------------------------+
00549     // | Cache Declarations (fillers, statuses and data) |
00550     // +-------------------------------------------------+
00551     //
00552     // Preferred naming convention:
00553     //
00554     // T thing () --- returns the value of thing (public method)
00555     // T fillThing () --- fills thing cache variable and sets thingOK_p to true (private)
00556     // Bool thingOK_p --- true if the value of thing is currently cached  (private)
00557     // T thing_p --- holds cached value of thing (if thingOK_p is true)  (private)
00558     //
00559     // Example: Vector<Int>& feed1(); Vector<Int>& fillFeed1();
00560     //          Bool feed1OK_P; Vector<Int> feed1_p;
00561 
00562     // Cache filling routines in alphabetical order
00563     //
00564     // The first line in a fill routine should be the macro CheckVisIter.  This
00565     // will cause an AipsError to be throw when there is no visibilty iterator
00566     // associated with the VisBuffer.  This is especially important because the
00567     // fillers may be called on a VisBufferAsync in two contexts: filling
00568     // where there will be a VI attached and in normal use where there is no VI
00569     // attached.  The filler must also set the cache status variable to True during
00570     // its execution.
00571 
00572     Vector<Int>& fillAnt1();
00573     Vector<Int>& fillAnt2();
00574     Int & fillArrayId();
00575     //Matrix<Int>& fillChanAveBounds();
00576     Vector<Int>& fillChannel();
00577     Vector<SquareMatrix<Complex, 2> >& fillCjones();
00578     Vector<Int>& fillCorrType();
00579     virtual Vector<MDirection>& fillDirection1();
00580     virtual Vector<MDirection>& fillDirection2();
00581     Vector<Double>& fillExposure();
00582     Vector<Int>& fillFeed1();
00583     Vector<Float>& fillFeed1_pa();
00584     Vector<Int>& fillFeed2();
00585     Vector<Float>& fillFeed2_pa();
00586     Int & fillFieldId();
00587     Matrix<Bool>& fillFlag();
00588     Array<Bool>& fillFlagCategory();
00589     Cube<Bool>& fillFlagCube();
00590     Vector<Bool> & fillFlagRow();
00591     Cube<Float>& fillFloatDataCube();
00592     Vector<Double>& fillFreq();         // Puts SPECTRAL_WINDOW/CHAN_FREQ in frequency_p.
00593     //Matrix<Float>& fillImagingWeight();
00594     //Vector<Double>& fillLSRFreq();
00595     Int & fillnChannel();
00596     Int & fillnCorr();
00597     Int & fillnRow();
00598     Vector<Int> & fillObservationId();
00599     virtual MDirection & fillPhaseCenter();
00600     Int & fillPolFrame();
00601     Vector<Int> & fillProcessorId();
00602     Vector<Int> & fillScan();
00603     Vector<Float>& fillSigma();
00604     Matrix<Float>& fillSigmaMat();
00605     Int & fillSpW();
00606     Vector<Int> & fillStateId();
00607     Vector<Double>& fillTime();
00608     Vector<Double>& fillTimeCentroid();
00609     Vector<Double>& fillTimeInterval();
00610     Vector<RigidVector<Double, 3> >& filluvw();
00611     Matrix<Double>& filluvwMat();
00612     Matrix<CStokesVector>& fillVis(VisibilityIterator::DataColumn whichOne);
00613     Cube<Complex>& fillVisCube(VisibilityIterator::DataColumn whichOne);
00614     Vector<Float>& fillWeight();
00615     Matrix<Float>& fillWeightMat();
00616     Cube<Float>& fillWeightSpectrum();
00617 
00618 };
00619 
00620 } //# NAMESPACE CASA - END
00621 
00622 #endif