Line data Source code
1 : /*
2 : * VisibilityIterator2.cc
3 : *
4 : * Created on: Jun 4, 2012
5 : * Author: jjacobs
6 : */
7 :
8 : #include <msvis/MSVis/VisibilityIterator2.h>
9 :
10 : #include <casacore/casa/Arrays/Cube.h>
11 : #include <casacore/casa/Arrays/Matrix.h>
12 : #include <casacore/casa/Arrays/Slicer.h>
13 : #include <casacore/casa/BasicSL/String.h>
14 : #include <casacore/casa/Quanta/MVDoppler.h>
15 : #include <casacore/casa/aips.h>
16 : #include <casacore/casa/System/AipsrcValue.h>
17 : #include <casacore/measures/Measures/MCDoppler.h>
18 : #include <casacore/measures/Measures/MDoppler.h>
19 : #include <casacore/measures/Measures/MeasConvert.h>
20 : #include <casacore/measures/Measures/Stokes.h>
21 : #include <casacore/ms/MSOper/MSDerivedValues.h>
22 : #include <casacore/ms/MeasurementSets/MSIter.h>
23 : #include <casacore/ms/MeasurementSets/MeasurementSet.h>
24 : #include <casacore/scimath/Mathematics/RigidVector.h>
25 : #include <casacore/scimath/Mathematics/SquareMatrix.h>
26 : #include <stdcasa/UtilJ.h>
27 : #include <msvis/MSVis/AveragingTvi2.h>
28 : #include <msvis/MSVis/ViFrequencySelection.h>
29 : #include <msvis/MSVis/StokesVector.h>
30 : #include <msvis/MSVis/VisBuffer2.h>
31 : #include <msvis/MSVis/VisBufferComponents2.h>
32 : #include <msvis/MSVis/VisImagingWeight.h>
33 : #include <msvis/MSVis/VisibilityIteratorImpl2.h>
34 : #include <msvis/MSVis/VisibilityIteratorImplAsync2.h>
35 : #include <casacore/tables/Tables/ArrayColumn.h>
36 : #include <casacore/tables/Tables/ScalarColumn.h>
37 :
38 : #include <cstdarg>
39 : #include <map>
40 : #include <set>
41 : #include <utility>
42 : #include <vector>
43 :
44 : using namespace std;
45 :
46 : #define CheckImplementationPointer() Assert (impl_p != NULL);
47 :
48 : using namespace casacore;
49 : namespace casa {
50 :
51 : namespace vi {
52 :
53 0 : SortColumns::SortColumns (const Block<Int> & columnIds, Bool addDefaultColumns)
54 : : addDefaultColumns_p (addDefaultColumns),
55 : columnIds_p (columnIds),
56 0 : usingDefaultSortingFunctions_p (true)
57 : {
58 0 : for (auto colId : columnIds)
59 0 : sortingDefinition_p.push_back(
60 0 : std::make_pair(MS::columnName(casacore::MS::PredefinedColumns(colId)), nullptr));
61 0 : }
62 :
63 0 : SortColumns::SortColumns (Bool usingDefaultSortingFunctions)
64 0 : : usingDefaultSortingFunctions_p (usingDefaultSortingFunctions)
65 : {
66 0 : }
67 :
68 0 : SortColumns::SortColumns (const std::vector<std::pair<casacore::MS::PredefinedColumns, std::shared_ptr<casacore::BaseCompare>>> sortingDefinition)
69 : : addDefaultColumns_p (false),
70 0 : usingDefaultSortingFunctions_p (false)
71 : {
72 0 : for (auto pair : sortingDefinition)
73 0 : sortingDefinition_p.push_back(
74 0 : std::make_pair(MS::columnName(pair.first), pair.second));
75 0 : }
76 :
77 0 : SortColumns::SortColumns (const std::vector<std::pair<casacore::String, std::shared_ptr<casacore::BaseCompare>>> sortingDefinition)
78 : : addDefaultColumns_p (false),
79 : sortingDefinition_p(sortingDefinition),
80 0 : usingDefaultSortingFunctions_p (false)
81 : {
82 0 : }
83 :
84 0 : void SortColumns::addSortingColumn(casacore::MS::PredefinedColumns colId,
85 : std::shared_ptr<casacore::BaseCompare> sortingFunction)
86 : {
87 0 : if (usingDefaultSortingFunctions_p)
88 : throw AipsError("SortColumns invalid construction. "
89 0 : "Cannot add generic sorting functions.");
90 0 : sortingDefinition_p.push_back(
91 0 : std::make_pair(MS::columnName(colId), sortingFunction));
92 0 : usingDefaultSortingFunctions_p = false;
93 0 : }
94 :
95 0 : void SortColumns::addSortingColumn(casacore::String colName,
96 : std::shared_ptr<casacore::BaseCompare> sortingFunction)
97 : {
98 0 : if (usingDefaultSortingFunctions_p)
99 : throw AipsError("SortColumns invalid construction. "
100 0 : "Cannot add generic sorting functions.");
101 0 : sortingDefinition_p.push_back(
102 0 : std::make_pair(colName, sortingFunction));
103 0 : usingDefaultSortingFunctions_p = false;
104 0 : }
105 :
106 : Bool
107 0 : SortColumns::shouldAddDefaultColumns () const
108 : {
109 0 : return addDefaultColumns_p;
110 : }
111 :
112 : bool
113 0 : SortColumns::usingDefaultSortingFunctions () const
114 : {
115 0 : return usingDefaultSortingFunctions_p;
116 : }
117 :
118 : const Block<Int> &
119 0 : SortColumns::getColumnIds () const
120 : {
121 0 : return columnIds_p;
122 : }
123 :
124 : const std::vector<std::pair<casacore::String, std::shared_ptr<casacore::BaseCompare>>> &
125 0 : SortColumns::sortingDefinition() const
126 : {
127 0 : return sortingDefinition_p;
128 : }
129 :
130 : CountedPtr <WeightScaling>
131 0 : WeightScaling::generateUnityWeightScaling ()
132 : {
133 0 : return generateWeightScaling (WeightScaling::unity);
134 : }
135 :
136 : CountedPtr <WeightScaling>
137 0 : WeightScaling::generateIdentityWeightScaling ()
138 : {
139 0 : return generateWeightScaling (WeightScaling::identity);
140 : }
141 :
142 : CountedPtr <WeightScaling>
143 0 : WeightScaling::generateSquareWeightScaling ()
144 : {
145 0 : return generateWeightScaling (WeightScaling::square);
146 : }
147 :
148 0 : Float WeightScaling::unity (Float) { return 1.0;}
149 0 : Float WeightScaling::identity (Float x) { return x;}
150 0 : Float WeightScaling::square (Float x) { return x * x;}
151 :
152 0 : VisibilityIterator2::VisibilityIterator2()
153 0 : : impl_p (0)
154 : {
155 0 : }
156 :
157 0 : VisibilityIterator2::VisibilityIterator2(const MeasurementSet& ms,
158 : const SortColumns & sortColumns,
159 : Bool isWritable,
160 : const VisBufferComponents2 * prefetchColumns,
161 0 : Double timeInterval)
162 : {
163 0 : Block<const MeasurementSet *> mss (1, & ms);
164 0 : construct (prefetchColumns, mss, sortColumns,
165 : timeInterval, isWritable);
166 0 : }
167 :
168 0 : VisibilityIterator2::VisibilityIterator2 (const Block<const MeasurementSet *>& mss,
169 : const SortColumns & sortColumns,
170 : Bool isWritable,
171 : const VisBufferComponents2 * prefetchColumns,
172 0 : Double timeInterval)
173 : {
174 0 : construct (prefetchColumns, mss, sortColumns, timeInterval, isWritable);
175 0 : }
176 :
177 0 : VisibilityIterator2::VisibilityIterator2 (const ViFactory & factory)
178 0 : : impl_p (0)
179 : {
180 0 : ViImplementation2 * newImpl = factory.createVi ();
181 :
182 0 : impl_p = newImpl;
183 0 : }
184 :
185 0 : VisibilityIterator2::VisibilityIterator2 (const Vector<ViiLayerFactory*> & factories)
186 0 : : impl_p (0)
187 : {
188 :
189 0 : Int nfactory=factories.nelements();
190 :
191 0 : if(factories(nfactory-1) == nullptr)
192 0 : throw(AipsError("ViiLayerFactory in factories is null"));
193 :
194 0 : ViImplementation2 * newImpl = factories(nfactory-1)->createViImpl2(factories(Slice(0,nfactory-1,1)));
195 :
196 0 : impl_p = newImpl;
197 0 : }
198 :
199 :
200 : void
201 0 : VisibilityIterator2::construct (const VisBufferComponents2 * prefetchColumns,
202 : const Block<const MeasurementSet *>& mss,
203 : const SortColumns & sortColumns,
204 : Double timeInterval,
205 : Bool writable)
206 : {
207 :
208 : // Factory didn't create the read implementation so decide whether to create a
209 : // synchronous or asynchronous read implementation.
210 :
211 0 : Bool createAsAsynchronous = prefetchColumns != NULL && isAsynchronousIoEnabled ();
212 :
213 0 : if (createAsAsynchronous){
214 : // impl_p = new ViImplAsync2 (mss, * prefetchColumns, sortColumns,
215 : // addDefaultSortCols, timeInterval, writable);
216 : }
217 : else{
218 0 : impl_p = new VisibilityIteratorImpl2 (mss, sortColumns, timeInterval, writable);
219 : }
220 0 : }
221 :
222 0 : VisibilityIterator2::~VisibilityIterator2 ()
223 : {
224 0 : delete impl_p;
225 0 : }
226 :
227 : String
228 0 : VisibilityIterator2::ViiType() const
229 : {
230 0 : return impl_p->ViiType ();
231 : }
232 :
233 :
234 : void
235 0 : VisibilityIterator2::next()
236 : {
237 0 : CheckImplementationPointer ();
238 0 : impl_p->next ();
239 0 : }
240 :
241 :
242 : const MeasurementSet&
243 0 : VisibilityIterator2::ms () const
244 : {
245 0 : CheckImplementationPointer ();
246 0 : return impl_p->ms ();
247 : }
248 :
249 : Bool
250 0 : VisibilityIterator2::existsColumn (VisBufferComponent2 id) const
251 : {
252 0 : CheckImplementationPointer ();
253 :
254 0 : return impl_p->existsColumn (id);
255 : }
256 :
257 : Bool
258 0 : VisibilityIterator2::weightSpectrumExists () const
259 : {
260 0 : CheckImplementationPointer ();
261 0 : return impl_p->weightSpectrumExists();
262 : }
263 :
264 : ViImplementation2 *
265 0 : VisibilityIterator2::getImpl () const
266 : {
267 0 : return impl_p;
268 : }
269 :
270 : Int
271 0 : VisibilityIterator2::getReportingFrameOfReference () const
272 : {
273 0 : return impl_p->getReportingFrameOfReference ();
274 : }
275 :
276 : void
277 0 : VisibilityIterator2::setReportingFrameOfReference (Int frame)
278 : {
279 0 : impl_p->setReportingFrameOfReference (frame);
280 0 : }
281 :
282 :
283 : Subchunk
284 0 : VisibilityIterator2::getSubchunkId () const
285 : {
286 0 : CheckImplementationPointer ();
287 0 : return impl_p->getSubchunkId ();
288 : }
289 :
290 : VisBuffer2 *
291 0 : VisibilityIterator2::getVisBuffer ()
292 : {
293 0 : CheckImplementationPointer ();
294 0 : return impl_p->getVisBuffer(this);
295 : }
296 :
297 : Bool
298 0 : VisibilityIterator2::isAsynchronous () const
299 : {
300 : // Bool isAsync = impl_p != NULL && dynamic_cast<const ViImplAsync2 *> (impl_p) != NULL;
301 : //
302 : // return isAsync;
303 :
304 0 : return false; // for now
305 : }
306 :
307 :
308 : Bool
309 0 : VisibilityIterator2::isAsynchronousIoEnabled()
310 : {
311 : // Determines whether asynchronous I/O is enabled by looking for the
312 : // expected AipsRc value. If not found then async i/o is disabled.
313 :
314 : Bool isEnabled;
315 0 : AipsrcValue<Bool>::find (isEnabled, getAipsRcBase () + "async.enabled", false);
316 :
317 0 : return isEnabled;
318 : }
319 :
320 : Bool
321 0 : VisibilityIterator2::more () const
322 : {
323 0 : CheckImplementationPointer ();
324 0 : return impl_p->more ();
325 : }
326 :
327 : Bool
328 0 : VisibilityIterator2::moreChunks () const
329 : {
330 0 : CheckImplementationPointer ();
331 0 : return impl_p->moreChunks ();
332 : }
333 :
334 :
335 : void
336 0 : VisibilityIterator2::nextChunk ()
337 : {
338 0 : CheckImplementationPointer ();
339 0 : impl_p->nextChunk ();
340 0 : }
341 :
342 : void
343 0 : VisibilityIterator2::result(casacore::Record& res) const
344 : {
345 0 : impl_p->result(res);
346 0 : }
347 :
348 : // Report Name of slowest column that changes at end of current iteration
349 0 : String VisibilityIterator2::keyChange() const
350 : {
351 0 : return impl_p->keyChange();
352 : }
353 :
354 :
355 :
356 :
357 :
358 : Int
359 0 : VisibilityIterator2::nDataDescriptionIds () const
360 : {
361 0 : CheckImplementationPointer ();
362 0 : return impl_p->nDataDescriptionIds ();
363 : }
364 : //
365 : Int
366 0 : VisibilityIterator2::nPolarizationIds () const
367 : {
368 0 : CheckImplementationPointer ();
369 0 : return impl_p->nPolarizationIds ();
370 : }
371 : //
372 : Int
373 0 : VisibilityIterator2::nSpectralWindows () const
374 : {
375 0 : CheckImplementationPointer ();
376 0 : return impl_p->nSpectralWindows ();
377 : }
378 :
379 : void
380 0 : VisibilityIterator2::origin ()
381 : {
382 0 : CheckImplementationPointer ();
383 0 : impl_p->origin ();
384 0 : }
385 :
386 : void
387 0 : VisibilityIterator2::originChunks ()
388 : {
389 0 : CheckImplementationPointer ();
390 0 : originChunks (false);
391 0 : }
392 :
393 : void
394 0 : VisibilityIterator2::originChunks (Bool forceRewind)
395 : {
396 0 : CheckImplementationPointer ();
397 0 : impl_p->originChunks (forceRewind);
398 0 : }
399 :
400 : void
401 0 : VisibilityIterator2::setRowBlocking (rownr_t nRows) // for use by Async I/O *ONLY
402 : {
403 0 : CheckImplementationPointer ();
404 0 : impl_p->setRowBlocking (nRows);
405 0 : }
406 :
407 : void
408 0 : VisibilityIterator2::slurp () const
409 : {
410 0 : CheckImplementationPointer ();
411 0 : impl_p->slurp ();
412 0 : }
413 :
414 : rownr_t
415 0 : VisibilityIterator2::nRowsInChunk () const
416 : {
417 0 : CheckImplementationPointer ();
418 0 : return impl_p->nRowsInChunk ();
419 : }
420 :
421 : void
422 0 : VisibilityIterator2::setFrequencySelection (const FrequencySelection & selection)
423 : {
424 0 : FrequencySelections selections;
425 0 : selections.add (selection);
426 0 : setFrequencySelection (selections);
427 0 : }
428 :
429 : void
430 0 : VisibilityIterator2::setFrequencySelection (const FrequencySelections & selections)
431 : {
432 0 : ThrowIf (selections.size () != impl_p->getNMs (),
433 : String::format ("Frequency selection size, %d, does not VisibilityIterator # of MSs, %d.",
434 : impl_p->getNMs (), selections.size()));
435 :
436 0 : CheckImplementationPointer ();
437 0 : impl_p->setFrequencySelections (selections);
438 0 : }
439 :
440 :
441 :
442 : const vi::SubtableColumns &
443 0 : VisibilityIterator2::subtableColumns () const
444 : {
445 0 : CheckImplementationPointer ();
446 0 : return impl_p->subtableColumns ();
447 : }
448 :
449 : void
450 0 : VisibilityIterator2::useImagingWeight (const VisImagingWeight & viw)
451 : {
452 0 : CheckImplementationPointer ();
453 0 : impl_p->useImagingWeight(viw);
454 0 : }
455 :
456 : const VisImagingWeight &
457 0 : VisibilityIterator2::getImagingWeightGenerator () const
458 : {
459 0 : CheckImplementationPointer ();
460 0 : return impl_p->getImagingWeightGenerator ();
461 : }
462 :
463 : void
464 0 : VisibilityIterator2::writeFlag (const Cube<Bool>& flag)
465 : {
466 0 : CheckImplementationPointer ();
467 0 : impl_p->writeFlag (flag);
468 0 : }
469 :
470 : void
471 0 : VisibilityIterator2::writeFlagRow (const Vector<Bool>& rowflags)
472 : {
473 0 : CheckImplementationPointer ();
474 0 : impl_p->writeFlagRow (rowflags);
475 0 : }
476 :
477 : void
478 0 : VisibilityIterator2::writeWeightSpectrum (const Cube<Float>& wtsp)
479 : {
480 0 : CheckImplementationPointer ();
481 0 : impl_p->writeWeightSpectrum (wtsp);
482 0 : }
483 :
484 : void
485 0 : VisibilityIterator2::writeVisModel (const Cube<Complex>& modelCube)
486 : {
487 0 : CheckImplementationPointer ();
488 0 : impl_p->writeVisModel (modelCube);
489 0 : }
490 :
491 : void
492 0 : VisibilityIterator2::writeVisCorrected (const Cube<Complex>& CorrectedCube)
493 : {
494 0 : CheckImplementationPointer ();
495 0 : impl_p->writeVisCorrected (CorrectedCube);
496 0 : }
497 :
498 : void
499 0 : VisibilityIterator2::writeModel(const RecordInterface& record,
500 : bool isComponentList,
501 : bool addToExistingModel)
502 : {
503 0 : CheckImplementationPointer ();
504 0 : impl_p->writeModel (record, isComponentList, addToExistingModel);
505 0 : }
506 :
507 : void
508 0 : VisibilityIterator2::writeVisObserved (const Cube<Complex>& ObservedCube)
509 : {
510 0 : CheckImplementationPointer ();
511 0 : impl_p->writeVisObserved (ObservedCube);
512 0 : }
513 :
514 : //
515 : void
516 0 : VisibilityIterator2::initWeightSpectrum (const Cube<Float>& wtsp)
517 : {
518 0 : CheckImplementationPointer ();
519 0 : impl_p->initWeightSpectrum (wtsp);
520 0 : }
521 :
522 : void
523 0 : VisibilityIterator2::setWeightScaling (CountedPtr<WeightScaling> weightScaling)
524 : {
525 0 : CheckImplementationPointer ();
526 :
527 0 : impl_p->setWeightScaling (weightScaling);
528 0 : }
529 :
530 : Bool
531 0 : VisibilityIterator2::hasWeightScaling () const
532 : {
533 0 : CheckImplementationPointer ();
534 :
535 0 : return impl_p->hasWeightScaling ();
536 : }
537 :
538 0 : const casacore::MSAntennaColumns& VisibilityIterator2::antennaSubtablecols() const
539 : {
540 0 : CheckImplementationPointer ();
541 :
542 0 : return impl_p->antennaSubtablecols ();
543 : }
544 :
545 0 : const casacore::MSDataDescColumns& VisibilityIterator2::dataDescriptionSubtablecols() const
546 : {
547 0 : CheckImplementationPointer ();
548 :
549 0 : return impl_p->dataDescriptionSubtablecols ();
550 : }
551 :
552 0 : const casacore::MSFeedColumns& VisibilityIterator2::feedSubtablecols() const
553 : {
554 0 : CheckImplementationPointer ();
555 :
556 0 : return impl_p->feedSubtablecols ();
557 : }
558 :
559 0 : const casacore::MSFieldColumns& VisibilityIterator2::fieldSubtablecols() const
560 : {
561 0 : CheckImplementationPointer ();
562 :
563 0 : return impl_p->fieldSubtablecols ();
564 : }
565 :
566 0 : const casacore::MSFlagCmdColumns& VisibilityIterator2::flagCmdSubtablecols() const
567 : {
568 0 : CheckImplementationPointer ();
569 :
570 0 : return impl_p->flagCmdSubtablecols ();
571 : }
572 :
573 0 : const casacore::MSHistoryColumns& VisibilityIterator2::historySubtablecols() const
574 : {
575 0 : CheckImplementationPointer ();
576 :
577 0 : return impl_p->historySubtablecols ();
578 : }
579 :
580 0 : const casacore::MSObservationColumns& VisibilityIterator2::observationSubtablecols() const
581 : {
582 0 : CheckImplementationPointer ();
583 :
584 0 : return impl_p->observationSubtablecols ();
585 : }
586 :
587 0 : const casacore::MSPointingColumns& VisibilityIterator2::pointingSubtablecols() const
588 : {
589 0 : CheckImplementationPointer ();
590 :
591 0 : return impl_p->pointingSubtablecols ();
592 : }
593 :
594 0 : const casacore::MSPolarizationColumns& VisibilityIterator2::polarizationSubtablecols() const
595 : {
596 0 : CheckImplementationPointer ();
597 :
598 0 : return impl_p->polarizationSubtablecols ();
599 : }
600 :
601 0 : const casacore::MSProcessorColumns& VisibilityIterator2::processorSubtablecols() const
602 : {
603 0 : CheckImplementationPointer ();
604 :
605 0 : return impl_p->processorSubtablecols ();
606 : }
607 :
608 0 : const casacore::MSSpWindowColumns& VisibilityIterator2::spectralWindowSubtablecols() const
609 : {
610 0 : CheckImplementationPointer ();
611 :
612 0 : return impl_p->spectralWindowSubtablecols ();
613 : }
614 :
615 0 : const casacore::MSStateColumns& VisibilityIterator2::stateSubtablecols() const
616 : {
617 0 : CheckImplementationPointer ();
618 :
619 0 : return impl_p->stateSubtablecols ();
620 : }
621 :
622 0 : const casacore::MSDopplerColumns& VisibilityIterator2::dopplerSubtablecols() const
623 : {
624 0 : CheckImplementationPointer ();
625 :
626 0 : return impl_p->dopplerSubtablecols ();
627 : }
628 :
629 0 : const casacore::MSFreqOffsetColumns& VisibilityIterator2::freqOffsetSubtablecols() const
630 : {
631 0 : CheckImplementationPointer ();
632 :
633 0 : return impl_p->freqOffsetSubtablecols ();
634 : }
635 :
636 0 : const casacore::MSSourceColumns& VisibilityIterator2::sourceSubtablecols() const
637 : {
638 0 : CheckImplementationPointer ();
639 :
640 0 : return impl_p->sourceSubtablecols ();
641 : }
642 :
643 0 : const casacore::MSSysCalColumns& VisibilityIterator2::sysCalSubtablecols() const
644 : {
645 0 : CheckImplementationPointer ();
646 :
647 0 : return impl_p->sysCalSubtablecols ();
648 : }
649 :
650 0 : const casacore::MSWeatherColumns& VisibilityIterator2::weatherSubtablecols() const
651 : {
652 0 : CheckImplementationPointer ();
653 :
654 0 : return impl_p->weatherSubtablecols ();
655 : }
656 :
657 0 : SubtableColumns::SubtableColumns (CountedPtr <MSIter> msIter)
658 0 : : msIter_p (msIter)
659 0 : {}
660 :
661 : const MSAntennaColumns&
662 0 : SubtableColumns::antenna() const
663 : {
664 0 : return msIter_p->msColumns().antenna();
665 : }
666 :
667 : const MSDataDescColumns&
668 0 : SubtableColumns::dataDescription() const
669 : {
670 0 : return msIter_p->msColumns().dataDescription();
671 : }
672 :
673 : const MSFeedColumns&
674 0 : SubtableColumns::feed() const
675 : {
676 0 : return msIter_p->msColumns().feed();
677 : }
678 :
679 : const MSFieldColumns&
680 0 : SubtableColumns::field() const
681 : {
682 0 : return msIter_p->msColumns().field();
683 : }
684 :
685 : const MSFlagCmdColumns&
686 0 : SubtableColumns::flagCmd() const
687 : {
688 0 : return msIter_p->msColumns().flagCmd();
689 : }
690 :
691 : const MSHistoryColumns&
692 0 : SubtableColumns::history() const
693 : {
694 0 : return msIter_p->msColumns().history();
695 : }
696 :
697 : const MSObservationColumns&
698 0 : SubtableColumns::observation() const
699 : {
700 0 : return msIter_p->msColumns().observation();
701 : }
702 :
703 : const MSPointingColumns&
704 0 : SubtableColumns::pointing() const
705 : {
706 0 : return msIter_p->msColumns().pointing();
707 : }
708 :
709 : const MSPolarizationColumns&
710 0 : SubtableColumns::polarization() const
711 : {
712 :
713 0 : return msIter_p->msColumns().polarization();
714 : }
715 :
716 : const MSProcessorColumns&
717 0 : SubtableColumns::processor() const
718 : {
719 0 : return msIter_p->msColumns().processor();
720 : }
721 :
722 : const MSSpWindowColumns&
723 0 : SubtableColumns::spectralWindow() const
724 : {
725 :
726 0 : return msIter_p->msColumns().spectralWindow();
727 : }
728 :
729 : const MSStateColumns&
730 0 : SubtableColumns::state() const
731 : {
732 0 : return msIter_p->msColumns().state();
733 : }
734 :
735 : const MSDopplerColumns&
736 0 : SubtableColumns::doppler() const
737 : {
738 0 : return msIter_p->msColumns().doppler();
739 : }
740 :
741 : const MSFreqOffsetColumns&
742 0 : SubtableColumns::freqOffset() const
743 : {
744 0 : return msIter_p->msColumns().freqOffset();
745 : }
746 :
747 : const MSSourceColumns&
748 0 : SubtableColumns::source() const
749 : {
750 0 : return msIter_p->msColumns().source();
751 : }
752 :
753 : const MSSysCalColumns&
754 0 : SubtableColumns::sysCal() const
755 : {
756 0 : return msIter_p->msColumns().sysCal();
757 : }
758 :
759 : const MSWeatherColumns&
760 0 : SubtableColumns::weather() const
761 : {
762 0 : return msIter_p->msColumns().weather();
763 : }
764 :
765 :
766 : } // end namespace vi
767 :
768 :
769 : using namespace casacore;
770 : } // end namespace casa
|