casa
$Rev:20696$
|
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_VISBUFFER2_H 00028 #define MSVIS_VISBUFFER2_H 00029 00030 #include <casa/aips.h> 00031 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 <casa/BasicSL/Complexfwd.h> 00037 #include <synthesis/MSVis/VisBufferComponents2.h> 00038 //#include <synthesis/MSVis/VisibilityIterator2.h> 00039 00040 #include <boost/utility.hpp> 00041 00042 using casa::vi::VisBufferComponent2; 00043 using casa::vi::VisBufferComponents2; 00044 00045 namespace casa { //# NAMESPACE CASA - BEGIN 00046 00047 //#forward 00048 00049 template <typename T> class Array; 00050 class CStokesVector; 00051 template <typename T> class Cube; 00052 template <typename T> class Matrix; 00053 class MDirection; 00054 template <typename T, Int N> class SquareMatrix; 00055 template <typename T> class Vector; 00056 00057 namespace vi { 00058 00059 class Subchunk; 00060 class VisibilityIterator2; 00061 00062 typedef enum {VbPlain, VbAsynchronous} VisBufferType; 00063 00064 // These are options to be applied to a VisBuffer, usually when it's created. 00065 // The intent is that these form a bit mask so that they can be used as 00066 // VbWritable | VbRekeyable, etc. So add the next one in as 2 * theLastOne. 00067 00068 typedef enum {VbNoOptions, VbWritable = 1, VbRekeyable = 2} VisBufferOptions; 00069 00070 //<summary>VisBuffer2s encapsulate one chunk of visibility data for processing.</summary> 00071 // 00072 // <use visibility=export> 00073 // 00074 // <reviewed reviewer="" date="" tests="" demos=""> 00075 00076 // <prerequisite> 00077 // <li> <linkto class="VisibilityIterator">VisibilityIterator</linkto> 00078 // <li> <linkto class="VbDirtyComponents">VbDirtyComponents</linkto> 00079 // </prerequisite> 00080 // 00081 // <etymology> 00082 // VisBuffer2 is a buffer for visibility data 00083 // </etymology> 00084 // 00085 //<synopsis> 00086 // The VisBuffer is designed to contain a small amount of visibility-related 00087 // data. The VisBuffer can be used in two somewhat distinct ways. The first 00088 // is as an integral (or attached) part of the VisibilityIterator and the second 00089 // is as a free or unattached object. 00090 // 00091 // Attached VisBuffer -- Each VisibilityIterator has a exactly one VisBuffer 00092 // attached to it. This VisBuffer is created and destroyed by the 00093 // VisibilityIterator. The role of an attached VB is to contain the data 00094 // currently "pointed to" by the VI. Because of this tight coupling between 00095 // an attached VI and its VB the operations that can be applied to a VisBuffer 00096 // are somewhat restricted in order to maintain the relationship between the 00097 // MeasurementSet's data and the data i the VisBuffer (failure to do so allows 00098 // obscure bugs to be created). As such the functions for averaging in either 00099 // the time or frequency axes is not permitted on an attached VB. 00100 // 00101 // Free VisBuffer -- A free VisBuffer is used to contain data that might not 00102 // correspond to the data in the MeasurementSet. The meaning of the data in 00103 // a free VisBuffer will depend on the user. Some obvious examples might be: 00104 // a VisBuffer used to resample or average frequencies together; creation of 00105 // "virtual" spectral windows which might reconnect frequencies that were 00106 // split into separate spectral windows becasue of hardware limitation; and 00107 // performing a time average of visibility data. Because the free VB is not 00108 // tightly coupled to a VI, it is the responsibility of the user to assign 00109 // meaningful values to some of the fields in the VB. For example, the user 00110 // averaging across time will need to decide what values ought to be reported 00111 // for the VisBuffer's timestamp, pointing angle, etc. 00112 // 00113 // Another possible attribute of a VisBuffer is "rekeyable". This is for when 00114 // the VisBuffer is being filled by client code rather than from an input MS. 00115 // Because of this, the enforcement of VisBuffer invariants is relaxed. Users 00116 // will be able to change row key fields (e.g., antenna1, data description id, 00117 // etc.) as well as change the shape of the data. The method validateShapes is 00118 // provided which will check that all modified shapes are consistent. This method 00119 // is automatically called by writeChangesBack and should also be called whenever 00120 // the construction process is complete and the VisBuffer is about to be released 00121 // for use; it's better to catch the error rather than letting an inconsistent 00122 // VisBuffer escape into consuming code. 00123 // 00124 //</synopsis> 00125 // 00126 //<todo> 00127 //</todo> 00128 00129 class VisBuffer2 : private boost::noncopyable { 00130 00131 friend class VisibilityIteratorImpl2; 00132 friend class FinalTvi2; 00133 00134 public: 00135 00136 enum {FrameNotSpecified = -2}; 00137 00138 VisBuffer2 () {} 00139 static VisBuffer2 * factory (VisBufferType t, VisBufferOptions vbOptions = VbNoOptions); 00140 00141 // Destructor (detaches from VisIter) 00142 00143 virtual ~VisBuffer2() {} 00144 00145 //--------------------------------------------------------------------- 00146 // 00147 // Copying methods 00148 // 00149 // These methods allow copying portions of the data between two 00150 // VisBuffers. Because of the complicated semantics of a VisBuffer the 00151 // assignment and copy-construction methods are not used as they are likely 00152 // to confuse VisBuffer users. 00153 00154 00155 // Copies all of the components from the specified VisBuffer into this one. 00156 // Uncached values will be cleared in this VB. 00157 00158 virtual void copy (const VisBuffer2 & other, Bool fetchIfNeeded) = 0; 00159 00160 // Copies the specified components (or just the one in the cache) from 00161 // the specified VisBuffer into this one. 00162 00163 virtual void copyComponents (const VisBuffer2 & other, 00164 const VisBufferComponents2 & components, 00165 Bool fetchIfNeeded = True) = 0; 00166 00167 // Copies the coordinate components from the specified VisBuffer into this one. 00168 // Depending on includeDirections the direction related ones are copied or not. 00169 00170 virtual void copyCoordinateInfo(const VisBuffer2 * other, Bool includeDirections, 00171 Bool fetchIfNeeded = True) = 0; 00172 00173 virtual void setShape (Int nCorrelations, Int nChannels, Int nRows, Bool copyValues = False) = 0; 00174 virtual void validateShapes () const = 0; 00175 00176 // For attached VBs this returns the VI the VB is attached to. For free 00177 // VBs this method returns False. 00178 00179 virtual const VisibilityIterator2 * getVi () const = 0; 00180 00181 virtual Bool isAttached () const = 0; 00182 virtual Bool isFillable () const = 0; 00183 00184 //--------------------------------------------------------------------- 00185 // 00186 // Dirty component methods 00187 // 00188 // The dirtyComponent methods support the data-flow approach to using 00189 // VisBuffers (the Visibility Processing Framework). In this approach 00190 // a VisBuffer is passed to successive processing nodes (e.g., applycal, 00191 // flagging, etc.) which operate on it and pass it on to the next node 00192 // in the algorithm. The dirtyComponents mechanism allows a processing 00193 // node to mark portions of the VisBuffer as modified. If the VisBuffer 00194 // reaches an write-to-disk node then the modified portions of the 00195 // VisBuffer will be written out. The user can also explicitly direct 00196 // that the changes be written out using the writeChangesBack method. 00197 // 00198 // Using a setter on a VisBuffer component will also set the dirty flag for 00199 // that component. Normally the user should not need to use these methods; 00200 // however, they are available in case unexpected situations should arise 00201 // in the future. 00202 00203 virtual void writeChangesBack () = 0; 00204 00205 virtual void dirtyComponentsAdd (const VisBufferComponents2 & additionalDirtyComponents) = 0; 00206 virtual void dirtyComponentsAdd (VisBufferComponent2 component) = 0; 00207 virtual void dirtyComponentsClear () = 0; 00208 virtual VisBufferComponents2 dirtyComponentsGet () const = 0; 00209 virtual void dirtyComponentsSet (const VisBufferComponents2 & dirtyComponents) = 0; 00210 virtual void dirtyComponentsSet (VisBufferComponent2 component) = 0; 00211 00212 // This method returns the imaging weights associated with the VisBuffer. 00213 // If an imaging weight generator has not been supplied to the associated 00214 // VisibilityIterator then this method will throw an exception. 00215 00216 virtual const Matrix<Float> & imagingWeight() const = 0; 00217 00218 //--------------------------------------------------------------------------- 00219 // 00220 // Frequency reporting methods. 00221 // 00222 // These methods provide information about the frequencies returned in the 00223 // visibility cubes. The information can returned as the channel numbers 00224 // (numbered as in the underlying MS data) or in a frame-based frequency. 00225 // This information reported need not be in the same frame of reference 00226 // used to select the data. If the frame of reference is specified in the 00227 // call, then that is the frame that is used to calculate the frequencies. 00228 // If it is not specified, then the VisibilityIterator will be queried for 00229 // virtual the reportingFrame = 0; if the user has specified a reporting frame to the 00230 // virtual VI then that frame will be used = 0; otherwise the frame used to select 00231 // the frequencies will be used. If the user provides no frequency selection 00232 // to the VI then the selection frame will TOPO. 00233 // 00234 // Both the channelNumber and frequency reporting methods come in two versions: 00235 // one returns a single frequency for the specified frequency index and row 00236 // while the other provides all of the frequencies for the specified row. 00237 // The frequency index is the zero-based index along the frequency axis of 00238 // a visibility cube. 00239 00240 virtual Vector<Int> getCorrelationNumbers () const = 0; 00241 virtual Double getFrequency (Int rowInBuffer, Int frequencyIndex, 00242 Int frame = FrameNotSpecified) const = 0; 00243 virtual const Vector<Double> & getFrequencies (Int rowInBuffer, 00244 Int frame = FrameNotSpecified) const = 0; 00245 virtual Int getChannelNumber (Int rowInBuffer, Int frequencyIndex) const = 0; 00246 virtual const Vector<Int> & getChannelNumbers (Int rowInBuffer) const = 0; 00247 00248 // Sort/unsort the correlations, if necessary 00249 // (Rudimentary handling of non-canonically sorted correlations--use with care!) 00250 // 00251 // The sorting functionality is a horrible kluge that puts the VisBuffer into a 00252 // somewhat incoherent state (e.g., after sorting the correlation types array 00253 // does not correspond to the data) and appears to serve the needs 00254 // of a tiny piece of code. As such, this refactor is initially not going to 00255 // support this functionality since it is probably better implemented in the one 00256 // place that actually needs it. (jjacobs 10/3/12) 00257 // 00258 //virtual void sortCorr () = 0; 00259 //virtual void unSortCorr() = 0; 00260 00261 // Normalize the visCube by the modelVisCube. 00262 00263 virtual void normalize() = 0; 00264 00265 // Set the weight cube using the sigma cube. Each weight will be 00266 // the reciprocal of the square of the corresponding element in the model 00267 // VisCube multiplied by the number of channels in the spectral window. 00268 // If an element in sigma is zero then the corresponding weight element 00269 // will also be set to zero. 00270 00271 virtual void resetWeightsUsingSigma () = 0;//void resetWeightMat() = 0; 00272 00273 //---------------------------------------------------------------------- 00274 // 00275 // Subhchunk information methods 00276 // 00277 // These methods provide information related to the current subchunk. 00278 // The isNewXXX methods return True if the XXX property of the subchunk 00279 // differs from the previous subchunk. 00280 // 00281 // The methods msId and msName provide information about the MS 00282 // related to the current subchunk. The msID is the zero-based index 00283 // of the MS in the sequence of MSs being iterated over. 00284 // 00285 // The isWritable method is True when the attached iterator is writable 00286 // and False otherwise. 00287 // 00288 // The isRekeyable method is True when the VisBuffer is writable and also 00289 // allows the modification of non-data fields (e.g., antenna1, fieldId, etc.) 00290 // A rekeyable VB is one that could be used to create data for a brand new 00291 // MS. 00292 00293 virtual Bool isNewArrayId () const = 0; 00294 virtual Bool isNewFieldId () const = 0; 00295 virtual Bool isNewMs() const = 0; 00296 virtual Bool isNewSpectralWindow () const = 0; 00297 virtual Bool isWritable () const = 0; 00298 virtual Int msId() const = 0; 00299 virtual String msName (Bool stripPath = False) const = 0; 00300 virtual Subchunk getSubchunk () const = 0; 00301 00303 // 00304 // Data accessors and setters (where appropriate) 00305 // 00306 // There are the methods that allows access to the items cached in the 00307 // VisBuffer. The straight accessors provide read-only access to the 00308 // item. Where the item is allowed to be modified, one or more set 00309 // methods are provided. 00310 // 00311 // The dimensionality of the major object in in accessor/setter is 00312 // shown in a trailing comment using the following abbreviations: 00313 // 00314 // nA :== number of antennas 00315 // nF :== number of frequencies (or channels) 00316 // nC :== number of correlations 00317 // nR :== number of table rows contained in the buffer 00318 00319 //-------------------------------------------------------- 00320 // 00321 // Accessors for data contained in the main MeasurementSet main table 00322 // The actual visibility data are at the end. 00323 // 00324 // *** N.B.: the VB usually caches the information 00325 // in the representation requested so that using a setter to modify 00326 // one value type (e.g., weight or visibility) will not modify the 00327 // cached value in a different representation (e.g., weightMat or 00328 // visCube). This should not be a problem in normal usage. 00329 00330 virtual const Vector<Int> & antenna1 () const = 0; // [nR] 00331 virtual void setAntenna1 (const Vector<Int> & value) = 0; // [nR] 00332 virtual const Vector<Int> & antenna2 () const = 0; // [nR] 00333 virtual void setAntenna2 (const Vector<Int> & value) = 0; // [nR] 00334 virtual const Vector<Int> & arrayId () const = 0; 00335 virtual void setArrayId (const Vector<Int> & ) = 0; 00336 //virtual Int dataDescriptionId () const = 0; 00337 //virtual void setDataDescriptionId (Int value) = 0; 00338 virtual const Vector<Int> & dataDescriptionIds () const = 0; // [nR] 00339 virtual void setDataDescriptionIds (const Vector<Int> & ) = 0; // [nR] 00340 virtual const Vector<MDirection> & direction1 () const = 0; // [nR] 00341 virtual const Vector<MDirection> & direction2 () const = 0; // [nR] 00342 virtual const Vector<Double> & exposure () const = 0; // [nR] 00343 virtual void setExposure (const Vector<Double> & value) = 0; // [nR] 00344 virtual const Vector<Int> & feed1 () const = 0; // [nR] 00345 virtual void setFeed1 (const Vector<Int> & value) = 0; // [nR] 00346 virtual const Vector<Int> & feed2 () const = 0; // [nR] 00347 virtual void setFeed2 (const Vector<Int> & value) = 0; // [nR] 00348 virtual const Vector<Int> & fieldId () const = 0; 00349 virtual void setFieldId (const Vector<Int> &) = 0; 00350 virtual const Matrix<Bool> & flag () const = 0; // [nF,nR] 00351 virtual void setFlag (const Matrix<Bool>& value) = 0; // [nF,nR] 00352 virtual const Array<Bool> & flagCategory () const = 0; // [nC,nF,nCategories,nR] 00353 virtual void setFlagCategory (const Array<Bool>& value) = 0; // [nC,nF,nCategories,nR] 00354 virtual const Cube<Bool> & flagCube () const = 0; // [nC,nF,nR] 00355 virtual void setFlagCube (const Cube<Bool>& value) = 0; // [nC,nF,nR] 00356 virtual const Vector<Bool> & flagRow () const = 0; // [nR] 00357 virtual void setFlagRow (const Vector<Bool>& value) = 0; // [nR] 00358 virtual const Vector<Int> & observationId () const = 0; // [nR] 00359 virtual void setObservationId (const Vector<Int> & value) = 0; // [nR] 00360 virtual const Vector<Int> & processorId () const = 0; // [nR] 00361 virtual void setProcessorId (const Vector<Int> & value) = 0; // [nR] 00362 virtual const Vector<Int> & scan () const = 0; // [nR] 00363 virtual void setScan (const Vector<Int> & value) = 0; // [nR] 00364 virtual const Matrix<Float> & sigma () const = 0; // [nC, nR] 00365 virtual void setSigma (const Matrix <Float> & value) = 0; // [nC, nR] 00366 //virtual const Matrix<Float> & sigmaMat () const = 0; // [nC,nR] 00367 virtual const Vector<Int> & stateId () const = 0; // [nR] 00368 virtual void setStateId (const Vector<Int> & value) = 0; // [nR] 00369 virtual const Vector<Double> & time () const = 0; // [nR] 00370 virtual void setTime (const Vector<Double> & value) = 0; // [nR] 00371 virtual const Vector<Double> & timeCentroid () const = 0; // [nR] 00372 virtual void setTimeCentroid (const Vector<Double> & value) = 0; // [nR] 00373 virtual const Vector<Double> & timeInterval () const = 0; // [nR] 00374 virtual void setTimeInterval (const Vector<Double> & value) = 0; // [nR] 00375 virtual const Matrix<Double> & uvw () const = 0; // [3,nR] 00376 virtual void setUvw (const Matrix<Double> & value) = 0; // [3,nR] 00377 virtual const Matrix<Float> & weight () const = 0; // [nC, nR] 00378 virtual void setWeight (const Matrix <Float>& value) = 0; // [nC, nR] 00379 //virtual const Matrix<Float> & weightMat () const = 0; // [nC,nR] 00380 //virtual void setWeightMat (const Matrix<Float>& value) = 0; // [nC,nR] 00381 virtual const Cube<Float> & weightSpectrum () const = 0; // [nC,nF,nR] 00382 virtual void setWeightSpectrum (const Cube<Float>& value) = 0; // [nC,nF,nR] 00383 00384 // -------------------------------------------------------------- 00385 // Visibility data accessors in order of observed, corrected, 00386 // float, & model 00387 00388 virtual const Cube<Complex> & visCube () const = 0; // [nC,nF,nR] 00389 virtual void setVisCube(const Complex & c) = 0; 00390 virtual void setVisCube (const Cube<Complex> &) = 0; // [nC,nF,nR] 00391 // virtual const Matrix<CStokesVector> & vis () const = 0; // [nF,nR] 00392 // virtual void setVis (Matrix<CStokesVector> &) = 0; // [nF,nR] 00393 00394 virtual const Cube<Complex> & visCubeCorrected () const = 0; // [nC,nF,nR] 00395 virtual void setVisCubeCorrected (const Cube<Complex> &) = 0; // [nC,nF,nR] 00396 // virtual const Matrix<CStokesVector> & visCorrected () const = 0; // [nF,nR] 00397 // virtual void setVisCorrected (const Matrix<CStokesVector> &) = 0; // [nF,nR] 00398 00399 virtual const Cube<Float> & visCubeFloat () const = 0; // [nC,nF,nR] 00400 virtual void setVisCubeFloat (const Cube<Float> &) = 0; // [nC,nF,nR] 00401 00402 virtual const Cube<Complex> & visCubeModel () const = 0; // [nC,nF,nR] 00403 virtual void setVisCubeModel(const Complex & c) = 0; 00404 virtual void setVisCubeModel(const Cube<Complex>& vis) = 0; // [nC,nF,nR] 00405 // virtual void setVisCubeModel(const Vector<Float>& stokes) = 0; // [1..4] 00406 // virtual const Matrix<CStokesVector> & visModel () const = 0; // [nF,nR] 00407 // virtual void setVisModel (Matrix<CStokesVector> &) = 0; // [nF,nR] 00408 00409 //-------------------------------------------------------- 00410 // 00411 // Accessors for data derived from the MS main table data 00412 00413 // Returns the pointing angle for the array as a whole at the 00414 // specified time. 00415 00416 virtual MDirection azel0 (Double time) const = 0; 00417 00418 // Returns the pointing angle for each antenna in the array 00419 // at the specified time. 00420 00421 virtual const Vector<MDirection> & azel(Double time) const = 0; // [nA] 00422 00423 // Returns the Jones C matrix for each antenna. 00424 00425 virtual const Vector<SquareMatrix<Complex, 2> > & cjones () const = 0; // [nA] 00426 00427 // Returns the correlation type of each correlation in the 00428 // VisCube. 00429 00430 virtual const Vector<Int> & correlationTypes () const = 0; // [nC] 00431 00432 // Calculates the parallactic angle for the first receptor of 00433 // each antenna at the specified time. 00434 00435 virtual const Vector<Float> & feedPa(Double time) const = 0; // [nR] 00436 00437 // Calculates the parallactic angle for feed 0 of the 00438 // row's Antenna1. 00439 00440 virtual const Vector<Float> & feedPa1 () const = 0; // [nR] 00441 00442 // Calculates the parallactic angle for feed 0 of the 00443 // row's Antenna2. 00444 00445 virtual const Vector<Float> & feedPa2 () const = 0; // [nR] 00446 00447 // Returns the hour angle of the array at the specified time. 00448 00449 virtual Double hourang(Double time) const = 0; 00450 00451 virtual Int nAntennas () const = 0; 00452 00453 virtual Int nChannels () const = 0; 00454 00455 // Returns the number of correlations along the visCube 00456 // correlation axis. 00457 00458 virtual Int nCorrelations () const = 0; 00459 00460 // Returns the number of rows in this VisBuffer 00461 00462 virtual Int nRows () const = 0; 00463 00464 // Calculates the parallactic angle of the array as a whole 00465 // at the specified time. 00466 00467 virtual Float parang0(Double time) const = 0; 00468 00469 // Calculates the parallactic angle of each antenna in the 00470 // array at the specified time. 00471 00472 virtual const Vector<Float> & parang(Double time) const = 0; // [nA] 00473 00474 // Returns the phase center of the array for the specified 00475 // row. 00476 00477 virtual const MDirection& phaseCenter () const = 0; 00478 00479 // Returns the polarization frame for the specified row. 00480 00481 virtual Int polarizationFrame () const = 0; 00482 00483 virtual Int polarizationId () const = 0; 00484 00485 // The returned Vector serves as a map between the rows in 00486 // the VisBuffer and the row IDs in the underlying MS main 00487 // virtual table: mainTableID [i] = rowIds () [ i] = 0; 00488 00489 virtual const Vector<uInt> & rowIds () const = 0; // [nR] 00490 00491 // Returns the spectral window ID for the specified row. 00492 00493 //virtual Int spectralWindow () const = 0; 00494 00495 virtual const Vector<Int> & spectralWindows () const = 0; // [nR] 00496 //virtual void setSpectralWindows (const Vector<Int> & spectralWindows) = 0; 00497 00498 static VisBuffer2 * factory (VisibilityIterator2 * vi, VisBufferType t, VisBufferOptions options); 00499 00500 protected: 00501 00502 virtual void configureNewSubchunk (Int msId, const String & msName, Bool isNewMs, 00503 Bool isNewArrayId, Bool isNewFieldId, 00504 Bool isNewSpectralWindow, const Subchunk & subchunk, 00505 Int nRows, Int nChannels, Int nCorrelations, 00506 const Vector<Int> & correlations) = 0; 00507 virtual void invalidate() = 0; 00508 virtual Bool isRekeyable () const = 0; 00509 virtual void setFillable (Bool isFillable) = 0; 00510 virtual void setRekeyable (Bool isRekeable) = 0; 00511 00512 virtual Vector<Bool> & flagRowRef () = 0; // [nR] 00513 virtual Cube<Bool> & flagCubeRef () = 0; // [nC,nF,nR] 00514 virtual Cube<Complex> & visCubeRef () = 0; // [nC,nF,nR] 00515 virtual Cube<Complex> & visCubeCorrectedRef () = 0; // [nC,nF,nR] 00516 virtual Cube<Complex> & visCubeModelRef () = 0; // [nC,nF,nR] 00517 virtual Cube<Float> & weightSpectrumRef () = 0; // [nC,nF,nR] 00518 00519 //virtual VisBuffer2 * vb_p = 0; // One of the implementation classes 00520 00521 private: 00522 00523 }; 00524 00525 00526 } // end namespace vi 00527 00528 00529 } //# NAMESPACE CASA - END 00530 00531 00532 #endif 00533