casacore
MSIter.h
Go to the documentation of this file.
1//# MSIter.h: Step through the MeasurementEquation by table
2//# Copyright (C) 1996,1999,2000,2001,2002
3//# Associated Universities, Inc. Washington DC, USA.
4//#
5//# This library is free software; you can redistribute it and/or modify it
6//# under the terms of the GNU Library General Public License as published by
7//# the Free Software Foundation; either version 2 of the License, or (at your
8//# option) any later version.
9//#
10//# This library is distributed in the hope that it will be useful, but WITHOUT
11//# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
12//# FITNESS FOR A PARTICULAR PURPOSE. See the GNU Library General Public
13//# License for more details.
14//#
15//# You should have received a copy of the GNU Library General Public License
16//# along with this library; if not, write to the Free Software Foundation,
17//# Inc., 675 Massachusetts Ave, Cambridge, MA 02139, USA.
18//#
19//# Correspondence concerning AIPS++ should be addressed as follows:
20//# Internet email: aips2-request@nrao.edu.
21//# Postal address: AIPS++ Project Office
22//# National Radio Astronomy Observatory
23//# 520 Edgemont Road
24//# Charlottesville, VA 22903-2475 USA
25//#
26//# $Id$
27
28#ifndef MS_MSITER_H
29#define MS_MSITER_H
30
31#include <casacore/casa/aips.h>
32#include <casacore/casa/Arrays/Matrix.h>
33#include <casacore/casa/Arrays/Cube.h>
34#include <casacore/ms/MeasurementSets/MeasurementSet.h>
35#include <casacore/measures/Measures/MFrequency.h>
36#include <casacore/measures/Measures/MDirection.h>
37#include <casacore/measures/Measures/MPosition.h>
38#include <casacore/tables/Tables/ScalarColumn.h>
39#include <casacore/casa/Utilities/Compare.h>
40#include <casacore/casa/BasicSL/String.h>
41#include <casacore/scimath/Mathematics/SquareMatrix.h>
42#include <casacore/scimath/Mathematics/RigidVector.h>
43
44namespace casacore { //# NAMESPACE CASACORE - BEGIN
45
46//# forward decl
47class MSColumns;
48class TableIterator;
49
50// <summary>
51// Small helper class to specify an 'interval' comparison
52// </summary>
53// <synopsis>
54// Small helper class to specify an 'interval' comparison for table iteration
55// by time interval.
56// </synopsis>
57class MSInterval : public BaseCompare
58{
59public:
60 explicit MSInterval(Double interval) : interval_p(interval), offset_p(0) {}
61 virtual ~MSInterval() {}
62 virtual int comp(const void * obj1, const void * obj2) const;
63 Double getOffset() const {return offset_p;}
64 virtual void setOffset(Double offset) {offset_p=offset;}
65 Double getInterval() const {return interval_p;}
66 void setInterval(Double interval) {interval_p=interval;}
67private:
70};
71
72// <summary>
73// An iterator class for MeasurementSets
74// </summary>
75
76// <use visibility=export>
77
78// <prerequisite>
79// <li> <linkto class="MeasurementSet:description">MeasurementSet</linkto>
80// </prerequisite>
81//
82// <etymology>
83// MSIter stands for the MeasurementSet Iterator class.
84// </etymology>
85//
86// <synopsis>
87// An MSIter is a class to traverse a MeasurementSet in various orders. It
88// automatically adds four predefined sort columns to your selection of sort
89// columns (see constructor) so that it can keep track of changes in frequency
90// or polarization setup, field position and sub-array. Note that this can
91// cause iterations to occur in a different way from what you would expect, see
92// examples below. MSIter implements iteration by time interval for the use of
93// e.g., calibration tasks that want to calculate solutions over some interval
94// of time. You can iterate over multiple MeasurementSets with this class.
95// </synopsis>
96//
97// <example>
98// <srcblock>
99// // The following code iterates by by ARRAY_ID, FIELD_ID, DATA_DESC_ID and
100// // TIME (all implicitly added columns) and then by baseline (antenna pair),
101// // in 3000s intervals.
102// MeasurementSet ms("3C273XC1.ms");
103// Block<int> sort(2);
104// sort[0] = MS::ANTENNA1;
105// sort[1] = MS::ANTENNA2;
106// Double timeInterval = 3000;
107// MSIter msIter(ms,sort,timeInteval);
108// for (msIter.origin(); msIter.more(); msIter++) {
109// // print out some of the iteration state
110// cout << msIter.fieldId() << endl;
111// cout << msIter.fieldName() << endl;
112// cout << msIter.dataDescriptionId() << endl;
113// cout << msIter.frequency0() << endl;
114// cout << msIter.table().nrow() << endl;
115// process(msIter.table()); // process the data in the current iteration
116// }
117// // Output shows only 1 row at a time because the table is sorted on TIME
118// // first and ANTENNA1, ANTENNA2 next and each baseline occurs only once per
119// // TIME stamp. The interval has no effect in this case.
120// </srcblock>
121// </example>
122
123// <example>
124// <srcblock>
125// // The following code iterates by baseline (antenna pair), TIME, and,
126// // implicitly, by ARRAY_ID, FIELD_ID and DATA_DESC_ID in 3000s
127// // intervals.
128// MeasurementSet ms("3C273XC1.ms");
129// Block<int> sort(3);
130// sort[0] = MS::ANTENNA1;
131// sort[1] = MS::ANTENNA2;
132// sort[2] = MS::TIME;
133// Double timeInterval = 3000;
134// MSIter msIter(ms,sort,timeInteval);
135// for (msIter.origin(); msIter.more(); msIter++) {
136// // print out some of the iteration state
137// cout << msIter.fieldId() << endl;
138// cout << msIter.fieldName() << endl;
139// cout << msIter.dataDescriptionId() << endl;
140// cout << msIter.frequency0() << endl;
141// cout << msIter.table().nrow() << endl;
142// process(msIter.table()); // process the data in the current iteration
143// // Now the output shows 7 rows at a time, all with identical ANTENNA1
144// // and ANTENNA2 values and TIME values within a 3000s interval.
145// }
146// </srcblock>
147// </example>
148//
149// <motivation>
150// This class was originally part of the VisibilityIterator class, but that
151// class was getting too large and complicated. By splitting out the toplevel
152// iteration into this class the code is much easier to understand. It is now
153// also available through the ms tool.
154// </motivation>
155//
156// <todo>
157// <li> multiple observatories in a single MS are not handled correctly (need to
158// sort on observation id and check observatory name to set position frame)
159// </todo>
160
162{
163public:
164 enum PolFrame {
165 // Circular polarization
167 // Linear polarization
168 Linear=1
169 };
170
171 // Default constructor - useful only to assign another iterator later.
172 // Use of other member functions on this object is likely to dump core.
174
175 // Construct from MS and a Block of MS column enums specifying the
176 // iteration order, if none are specified, ARRAY_ID, FIELD_ID, DATA_DESC_ID,
177 // and TIME iteration is implicit (unless addDefaultSortColumns=False)
178 // These columns will be added first if they are not specified.
179 // An optional timeInterval can be given to iterate through chunks of time.
180 // The default interval of 0 groups all times together.
181 // Every 'chunk' of data contains all data within a certain time interval
182 // and with identical values of the other iteration columns (e.g.
183 // DATA_DESCRIPTION_ID and FIELD_ID).
184 // See the examples above for the effect of different sort orders.
185 //
186 // The storeSorted parameter determines how the resulting SORT_TABLE is
187 // managed. If storeSorted is true then the table will be stored on disk;
188 // this potentially allows its reuse in the future but has also been shown
189 // to be a problem when the MS is being read in parallel. If storeSorted is
190 // false then the SORTED_TABLE is constructed and used in memory which keeps
191 // concurrent readers from interfering with each other.
192
193 MSIter(const MeasurementSet& ms, const Block<Int>& sortColumns,
194 Double timeInterval=0, Bool addDefaultSortColumns=True,
195 Bool storeSorted=True);
196
197 // Same as above with multiple MSs as input.
198 MSIter(const Block<MeasurementSet>& mss, const Block<Int>& sortColumns,
199 Double timeInterval=0, Bool addDefaultSortColumns=True,
200 Bool storeSorted=True);
201
202 // This constructor is similar to the previous ones but the comparison
203 // functions used to group the iterations are given explicitly, making
204 // the constructor more generic. Also, the column is specified as a string,
205 // to support sorting by columns not part of the standard MS definition.
206 // Note that with this constructor TIME is not treated in any special way and
207 // there are no default sorting columns, i.e., the sorting needs have to be
208 // set explicitly.
209 // The last element in vector sortColumns will be the column that will change
210 // faster in the iteration loop, whereas the first element will be the slower.
211 // For instance, if sortColumns[0].first = "DATA_DESC_ID" nad
212 // sortColumns[1].first = "ANTENNA1" then the first iterations will go through
213 // all possible values of ANTENNA1 for the first DDId, then it will start
214 // the iterations for the second DDId and so on.
216 const std::vector<std::pair<String, CountedPtr<BaseCompare>>>& sortColumns);
217
218 // Same as above with multiple MSs as input.
220 const std::vector<std::pair<String, CountedPtr<BaseCompare>>>& sortColumns);
221
222 // Copy construct. This calls the assigment operator.
223 MSIter(const MSIter & other);
224
225 MSIter *clone() const;
226
227 // Destructor
228 virtual ~MSIter();
229
230 // Assigment. This will reset the iterator to the origin.
231 MSIter & operator=(const MSIter &other);
232
233 //# Members
234
235 // Set or reset the time interval to use for iteration.
236 // You should call origin() to reset the iteration after
237 // calling this.
238 void setInterval(Double timeInterval);
239
240 // Reset iterator to start of data
241 virtual void origin();
242
243 // Return False if there is no more data
244 virtual Bool more() const;
245
246 // Advance iterator through data
247 virtual MSIter & operator++(int);
248 virtual MSIter & operator++();
249
250 // Report Name of slowest column that changes at end of current iteration
251 const String& keyChange() const;
252
253 // Return the current Table iteration
254 Table table() const;
255
256 // Return reference to the current MS
257 const MS& ms() const;
258
259 // Return reference to the current MSColumns
260 const MSColumns& msColumns() const;
261
262 // Return the current MS Id (according to the order in which
263 // they appeared in the constructor)
264 size_t msId() const;
265
266 // Return true if msId has changed since last iteration
267 Bool newMS() const;
268
269 // Return the current ArrayIds for all rows in this iteration
270 const ScalarColumn<Int>& colArrayIds() const;
271
272 // Return the current FieldIds for all rows in this iteration
273 const ScalarColumn<Int>& colFieldIds() const;
274
275 // Return the current DataDescriptionIds for all rows in this iteration
277
278 // Return the ArrayId of the first element in this iteration
279 Int arrayId() const;
280
281 // Return True if ArrayId has changed since last iteration
282 // Note that if MS_ARRAY is not part of the sorting columns this
283 // will always be true.
284 Bool newArray() const;
285
286 // Return the FieldId of the first element in this iteration
287 Int fieldId() const;
288
289 // Return True if FieldId/Source has changed since last iteration
290 // Note that if MS_FIELD_ID is not part of the sorting columns this
291 // will always be true.
292 Bool newField() const;
293
294 // Return SpectralWindow of the first element in this iteration
295 Int spectralWindowId() const;
296
297 // Return True if SpectralWindow has changed since last iteration
298 // Note that if MS_DATA_DESC_ID is not part of the sorting columns this
299 // will always be true.
300 Bool newSpectralWindow() const;
301
302 // Return DataDescriptionId of the first element in this iteration
303 Int dataDescriptionId() const;
304
305 // Return True if DataDescriptionId has changed since last iteration
306 // Note that if MS_DATA_DESC_ID is not part of the sorting columns this
307 // will always be true.
309
310 // Return PolarizationId of the first element in this iteration
311 Int polarizationId() const;
312
313 // Return True if polarization has changed since last iteration
314 // Note that if MS_DATA_DESC_ID is not part of the sorting columns this
315 // will always be true.
316 Bool newPolarizationId() const;
317
318
319 // Return frame for polarization of the first element in this iteration
320 // @returns PolFrame enum
321 Int polFrame() const;
322
323 // Return the frequencies corresponding to the DATA matrix.
324 const Vector<Double>& frequency() const;
325
326 // Return frequency of first channel of the first element in iteration
327 // with reference frame as a Measure.
328 // The reference frame Epoch is that of the first row, reset it as needed
329 // for each row.
330 // The reference frame Position is the average of the antenna positions.
331 const MFrequency& frequency0() const;
332
333 // Return the rest frequency of the specified line as a Measure
334 const MFrequency& restFrequency(Int line=0) const;
335
336 // Return the telescope position (if a known telescope) or the
337 // position of the first antenna (if unknown)
338 const MPosition& telescopePosition() const;
339
340 // Return the feed configuration/leakage matrix for feed 0 on each antenna
341 // TODO: CJonesAll can be used instead of this method in all instances
342 const Vector<SquareMatrix<Complex,2> >& CJones() const;
343
344 // Return the feed configuration/leakage matrix for all feeds and antennae
345 // First axis is antennaId, 2nd axis is feedId. Result of CJones() is
346 // a reference to the first column of the matrix returned by this method
348
349 // Return the receptor angle for feed 0 on each antenna.
350 // First axis is receptor number, 2nd axis is antennaId.
351 // TODO: receptorAngles() can be used instead of this method
352 const Matrix<Double>& receptorAngle() const;
353
354 // Return the receptor angles for all feeds and antennae
355 // First axis is a receptor number, 2nd axis is antennaId,
356 // 3rd axis is feedId. Result of receptorAngle() is just a reference
357 // to the first plane of the cube returned by this method
358 const Cube<Double>& receptorAngles() const;
359
360 // Return a string mount identifier for each antenna
361 const Vector<String>& antennaMounts() const;
362
363 // Return a cube containing pairs of coordinate offset for each receptor
364 // of each feed (values are in radians, coordinate system is fixed with
365 // antenna and is the same as used to define the BEAM_OFFSET parameter
366 // in the feed table). The cube axes are receptor, antenna, feed.
368
369 // True if all elements of the cube returned by getBeamOffsets are zero
370 Bool allBeamOffsetsZero() const;
371
372 // Get the spw, start and nchan for all the ms's is this msiter that
373 // match the frequecy "freqstart-freqStep" and "freqEnd+freqStep" range
374
376 Block<Vector<Int> >& start,
377 Block<Vector<Int> >& nchan,
378 Double freqStart, Double freqEnd,
379 Double freqStep);
380
381 //Get the number of actual ms's associated wth this iterator
382 size_t numMS() const;
383
384 //Get a reference to the nth ms in the list of ms associated with this
385 // iterator. If larger than the list of ms's current ms is returned
386 // So better check wth numMS() before making the call
387 const MS& ms(const size_t n) const;
388
389 //Returns the phasecenter for the first time stamp of the iteration
390 //The time is important for field tables that have polynomial or ephemerides
391 //phasecenters, i.e time varying for a given field_id..
392 //If the iterator is set so as one iteration has more that 1 time stamp
393 //then this version is correct only for fixed phasecenters
394 const MDirection& phaseCenter() const;
395
396 //If the iterator is set so as one iteration has more that 1 value of time stamp
397 // or fieldid
398 //then the caller should use the phasecenter with field id and time explicitly
399 const MDirection phaseCenter(const Int fldID, const Double timeStamp) const ;
400
401 //return FIELD table associated current fieldname and sourcename respectively
402 const String& fieldName() const;
403 const String& sourceName() const;
404
405protected:
406 // handle the construction details
407 void construct(const Block<Int>& sortColumns, Bool addDefaultSortColumns);
408 // handle the construction details using explicit comparison functions
409 void construct(const std::vector<std::pair<String, CountedPtr<BaseCompare>>>& sortColumns);
410 // advance the iteration
411 void advance();
412 // set the iteration state
413 virtual void setState();
414 void setMSInfo();
416 void setFeedInfo() const;
417 // Store the current DD, SPW, Pol ID.
418 // It can be called in logically const objects although it modifies
419 // caching (mutable) variables for performance reasons.
420 void cacheCurrentDDInfo() const;
421 // Store extra info related to the DD.
422 // It can be called in logically const objects although it modifies
423 // caching (mutable) variables for performance reasons.
424 void cacheExtraDDInfo() const;
425 void setFieldInfo() const;
426
427// Determine if the numbers in r1 are a sorted subset of those in r2
429
434
435 // This booleans determine if given columns are part of the sorting
437
438 size_t nMS_p, curMS_p;
439 ssize_t lastMS_p;
447 // These variables point to the current (as in this iteration)
448 // DD, SPW and polarization IDs. They are mutable since they are
449 // evaluated in a lazy way, i.e., only when needed. If the DDId is
450 // part of the sorting columns then it is always computed when calling
451 // next(), otherwise it is only computed when some accesor of
452 // metadata that depends on them is called by the application.
455 // These variables point to the IDs of the previous iteration.
460
461 // Variable to know whether the feed info is already computed
462 mutable bool feedInfoCached_p;
463
464
465 // Globally control disk storage of SORTED_TABLE
467
468 // time selection
470
471 // This column is mutable since it is only attached when it is
472 // neccesary to read the DD Ids. That might happen when calling
473 // a const accesor like dataDescriptionId().
476
479 //cache for access functions
480 mutable Matrix<Double> receptorAnglesFeed0_p; // former receptorAngle_p,
481 // temporary retained for compatibility
482 // contain actually a reference to the
483 // first plane of receptorAngles_p
485 mutable Vector<SquareMatrix<Complex,2> > CJonesFeed0_p; // a temporary reference
486 // similar to receptorAngle_p
488 Vector<String> antennaMounts_p; // a string mount identifier for each
489 // antenna (e.g. EQUATORIAL, ALT-AZ,...)
490 mutable Cube<RigidVector<Double, 2> > beamOffsets_p;// angular offsets (two values for
491 // each element of the cube in radians)
492 // in the antenna coordinate system.
493 // Cube axes are: receptor, antenna, feed.
494 mutable Bool allBeamOffsetsZero_p; // True if all elements of beamOffsets_p
495 // are zero (to speed things up in a
496 // single beam case)
497 mutable PolFrame polFrame_p; // polarization Frame. It is lazily cached,
498 // hence mutable. See cacheExtraDDInfo()
499 mutable Bool freqCacheOK_p; // signal that the frequency cache is fine
504
505 CountedPtr<MSInterval> timeComp_p; // Points to the time comparator.
506 // 0 if not using a time interval.
507};
508
509inline Bool MSIter::more() const { return more_p;}
510inline Table MSIter::table() const {return curTable_p;}
511inline const MS& MSIter::ms() const {return bms_p[curMS_p];}
512inline const MSColumns& MSIter::msColumns() const { return *msc_p;}
513inline Bool MSIter::newMS() const { return newMS_p;}
514inline Bool MSIter::newArray() const {return newArrayId_p;}
515inline Bool MSIter::newField() const { return newFieldId_p;}
517{ return newSpectralWindowId_p;}
518inline size_t MSIter::msId() const { return curMS_p;}
519inline size_t MSIter::numMS() const { return nMS_p;}
521{ return colArray_p;}
523{ return colField_p;}
526 return colDataDesc_p;}
527inline Int MSIter::arrayId() const {return curArrayIdFirst_p;}
537 return curDataDescIdFirst_p;}
540inline Int MSIter::polFrame() const
542 return polFrame_p;}
544{ return telescopePosition_p;}
548{if(!feedInfoCached_p) setFeedInfo(); return CJones_p;}
554{return antennaMounts_p;}
559
560} //# NAMESPACE CASACORE - END
561
562#endif
abstract base class for comparing two objects
Definition: Compare.h:65
Referenced counted pointer for constant data.
Definition: CountedPtr.h:81
Double getInterval() const
Definition: MSIter.h:65
Double getOffset() const
Definition: MSIter.h:63
void setInterval(Double interval)
Definition: MSIter.h:66
virtual int comp(const void *obj1, const void *obj2) const
Compare two objects, and return.
virtual ~MSInterval()
Definition: MSIter.h:61
virtual void setOffset(Double offset)
Definition: MSIter.h:64
Double interval_p
Definition: MSIter.h:68
MSInterval(Double interval)
Definition: MSIter.h:60
An iterator class for MeasurementSets.
Definition: MSIter.h:162
virtual MSIter & operator++(int)
Advance iterator through data.
MSIter(const Block< MeasurementSet > &mss, const std::vector< std::pair< String, CountedPtr< BaseCompare > > > &sortColumns)
Same as above with multiple MSs as input.
Int polarizationId() const
Return PolarizationId of the first element in this iteration.
Definition: MSIter.h:532
Bool arrayInSort_p
Definition: MSIter.h:436
ScalarColumn< Int > colDataDesc_p
This column is mutable since it is only attached when it is neccesary to read the DD Ids.
Definition: MSIter.h:474
const MS & ms() const
Return reference to the current MS.
Definition: MSIter.h:511
Bool isSubSet(const Vector< rownr_t > &r1, const Vector< rownr_t > &r2)
Determine if the numbers in r1 are a sorted subset of those in r2.
Bool newArray() const
Return True if ArrayId has changed since last iteration Note that if MS_ARRAY is not part of the sort...
Definition: MSIter.h:514
Bool newSpectralWindow() const
Return True if SpectralWindow has changed since last iteration Note that if MS_DATA_DESC_ID is not pa...
Definition: MSIter.h:516
virtual ~MSIter()
Destructor.
Bool fieldInSort_p
Definition: MSIter.h:436
MSIter * This
Definition: MSIter.h:430
Bool newDataDescId_p
Definition: MSIter.h:458
const MSColumns & msColumns() const
Return reference to the current MSColumns.
Definition: MSIter.h:512
Int curFieldIdFirst_p
Definition: MSIter.h:445
@ Linear
Linear polarization.
Definition: MSIter.h:168
@ Circular
Circular polarization.
Definition: MSIter.h:166
String curFieldNameFirst_p
Definition: MSIter.h:443
Bool newPolarizationId_p
Definition: MSIter.h:458
void cacheExtraDDInfo() const
Store extra info related to the DD.
ScalarColumn< Int > colArray_p
Definition: MSIter.h:475
const Vector< String > & antennaMounts() const
Return a string mount identifier for each antenna.
Definition: MSIter.h:553
MSIter(const MeasurementSet &ms, const std::vector< std::pair< String, CountedPtr< BaseCompare > > > &sortColumns)
This constructor is similar to the previous ones but the comparison functions used to group the itera...
Bool newSpectralWindowId_p
Definition: MSIter.h:457
CountedPtr< MSInterval > timeComp_p
Definition: MSIter.h:505
Int lastPolarizationId_p
Definition: MSIter.h:456
Bool newFieldId_p
Definition: MSIter.h:457
const Matrix< Double > & receptorAngle() const
Return the receptor angle for feed 0 on each antenna.
Definition: MSIter.h:549
void getSpwInFreqRange(Block< Vector< Int > > &spw, Block< Vector< Int > > &start, Block< Vector< Int > > &nchan, Double freqStart, Double freqEnd, Double freqStep)
Get the spw, start and nchan for all the ms's is this msiter that match the frequecy "freqstart-freqS...
const MPosition & telescopePosition() const
Return the telescope position (if a known telescope) or the position of the first antenna (if unknown...
Definition: MSIter.h:543
const MDirection & phaseCenter() const
Returns the phasecenter for the first time stamp of the iteration The time is important for field tab...
Int arrayId() const
Return the ArrayId of the first element in this iteration.
Definition: MSIter.h:527
Matrix< Double > receptorAnglesFeed0_p
cache for access functions
Definition: MSIter.h:480
Vector< SquareMatrix< Complex, 2 > > CJonesFeed0_p
Definition: MSIter.h:485
const MFrequency & frequency0() const
Return frequency of first channel of the first element in iteration with reference frame as a Measure...
Bool newMS() const
Return true if msId has changed since last iteration.
Definition: MSIter.h:513
Bool allBeamOffsetsZero_p
each element of the cube in radians) in the antenna coordinate system.
Definition: MSIter.h:494
Bool newArrayId_p
Definition: MSIter.h:457
ssize_t lastMS_p
Definition: MSIter.h:439
Bool freqCacheOK_p
hence mutable.
Definition: MSIter.h:499
size_t nMS_p
Definition: MSIter.h:438
Int curSourceIdFirst_p
Definition: MSIter.h:442
ScalarColumn< Int > colField_p
Definition: MSIter.h:474
Bool newPolarizationId() const
Return True if polarization has changed since last iteration Note that if MS_DATA_DESC_ID is not part...
Definition: MSIter.h:538
virtual Bool more() const
Return False if there is no more data.
Definition: MSIter.h:509
virtual void origin()
Reset iterator to start of data.
bool feedInfoCached_p
Variable to know whether the feed info is already computed.
Definition: MSIter.h:462
Table table() const
Return the current Table iteration.
Definition: MSIter.h:510
const MFrequency & restFrequency(Int line=0) const
Return the rest frequency of the specified line as a Measure.
const String & keyChange() const
Report Name of slowest column that changes at end of current iteration.
Bool ddInSort_p
Definition: MSIter.h:436
Bool allBeamOffsetsZero() const
True if all elements of the cube returned by getBeamOffsets are zero.
Definition: MSIter.h:557
Int lastSpectralWindowId_p
Definition: MSIter.h:456
const String & sourceName() const
Table curTable_p
Definition: MSIter.h:441
bool checkFeed_p
Definition: MSIter.h:459
void advance()
advance the iteration
Int lastDataDescId_p
These variables point to the IDs of the previous iteration.
Definition: MSIter.h:456
void setInterval(Double timeInterval)
Set or reset the time interval to use for iteration.
bool spwDepFeed_p
Definition: MSIter.h:459
PolFrame polFrame_p
are zero (to speed things up in a single beam case)
Definition: MSIter.h:497
MSIter()
Default constructor - useful only to assign another iterator later.
Int polFrame() const
Return frame for polarization of the first element in this iteration.
Definition: MSIter.h:540
const Vector< SquareMatrix< Complex, 2 > > & CJones() const
Return the feed configuration/leakage matrix for feed 0 on each antenna TODO: CJonesAll can be used i...
Definition: MSIter.h:545
const ScalarColumn< Int > & colDataDescriptionIds() const
Return the current DataDescriptionIds for all rows in this iteration.
Definition: MSIter.h:524
Bool timeInSort_p
This booleans determine if given columns are part of the sorting.
Definition: MSIter.h:436
Bool storeSorted_p
Globally control disk storage of SORTED_TABLE.
Definition: MSIter.h:466
MPosition telescopePosition_p
Definition: MSIter.h:503
Bool newDataDescriptionId() const
Return True if DataDescriptionId has changed since last iteration Note that if MS_DATA_DESC_ID is not...
Definition: MSIter.h:539
size_t msId() const
Return the current MS Id (according to the order in which they appeared in the constructor)
Definition: MSIter.h:518
const Cube< RigidVector< Double, 2 > > & getBeamOffsets() const
Return a cube containing pairs of coordinate offset for each receptor of each feed (values are in rad...
Definition: MSIter.h:555
size_t numMS() const
Get the number of actual ms's associated wth this iterator.
Definition: MSIter.h:519
Block< Bool > tabIterAtStart_p
Definition: MSIter.h:433
Int curArrayIdFirst_p
Definition: MSIter.h:442
Int spectralWindowId() const
Return SpectralWindow of the first element in this iteration.
Definition: MSIter.h:529
Int curDataDescIdFirst_p
These variables point to the current (as in this iteration) DD, SPW and polarization IDs.
Definition: MSIter.h:453
Bool newField() const
Return True if FieldId/Source has changed since last iteration Note that if MS_FIELD_ID is not part o...
Definition: MSIter.h:515
const MDirection phaseCenter(const Int fldID, const Double timeStamp) const
If the iterator is set so as one iteration has more that 1 value of time stamp or fieldid then the ca...
const String & fieldName() const
return FIELD table associated current fieldname and sourcename respectively
void construct(const std::vector< std::pair< String, CountedPtr< BaseCompare > > > &sortColumns)
handle the construction details using explicit comparison functions
Matrix< SquareMatrix< Complex, 2 > > CJones_p
similar to receptorAngle_p
Definition: MSIter.h:487
Int lastArrayId_p
Definition: MSIter.h:442
Int lastFieldId_p
Definition: MSIter.h:446
MFrequency frequency0_p
Definition: MSIter.h:501
const MS & ms(const size_t n) const
Get a reference to the nth ms in the list of ms associated with this iterator.
Vector< String > antennaMounts_p
Definition: MSIter.h:488
const Matrix< SquareMatrix< Complex, 2 > > & CJonesAll() const
Return the feed configuration/leakage matrix for all feeds and antennae First axis is antennaId,...
Definition: MSIter.h:547
virtual MSIter & operator++()
Int fieldId() const
Return the FieldId of the first element in this iteration.
Definition: MSIter.h:528
void cacheCurrentDDInfo() const
Store the current DD, SPW, Pol ID.
void construct(const Block< Int > &sortColumns, Bool addDefaultSortColumns)
handle the construction details
Int curSpectralWindowIdFirst_p
Definition: MSIter.h:453
MSIter * clone() const
Cube< RigidVector< Double, 2 > > beamOffsets_p
antenna (e.g.
Definition: MSIter.h:490
void setFeedInfo() const
MFrequency restFrequency_p
Definition: MSIter.h:502
virtual void setState()
set the iteration state
MDirection phaseCenter_p
Definition: MSIter.h:477
Cube< Double > receptorAngles_p
temporary retained for compatibility contain actually a reference to the first plane of receptorAngle...
Definition: MSIter.h:484
MSIter & operator=(const MSIter &other)
Assigment.
PtrBlock< TableIterator * > tabIter_p
Definition: MSIter.h:432
void setFieldInfo() const
Int curPolarizationIdFirst_p
Definition: MSIter.h:454
MSIter(const MSIter &other)
Copy construct.
Block< MeasurementSet > bms_p
Definition: MSIter.h:431
const Cube< Double > & receptorAngles() const
Return the receptor angles for all feeds and antennae First axis is a receptor number,...
Definition: MSIter.h:551
Double prevFirstTimeStamp_p
Definition: MSIter.h:478
Vector< Double > frequency_p
Definition: MSIter.h:500
String curSourceNameFirst_p
Definition: MSIter.h:444
const ScalarColumn< Int > & colFieldIds() const
Return the current FieldIds for all rows in this iteration.
Definition: MSIter.h:522
Int dataDescriptionId() const
Return DataDescriptionId of the first element in this iteration.
Definition: MSIter.h:535
MSIter(const Block< MeasurementSet > &mss, const Block< Int > &sortColumns, Double timeInterval=0, Bool addDefaultSortColumns=True, Bool storeSorted=True)
Same as above with multiple MSs as input.
MSIter(const MeasurementSet &ms, const Block< Int > &sortColumns, Double timeInterval=0, Bool addDefaultSortColumns=True, Bool storeSorted=True)
Construct from MS and a Block of MS column enums specifying the iteration order, if none are specifie...
CountedPtr< MSColumns > msc_p
Definition: MSIter.h:440
const ScalarColumn< Int > & colArrayIds() const
Return the current ArrayIds for all rows in this iteration.
Definition: MSIter.h:520
size_t curMS_p
Definition: MSIter.h:438
const Vector< Double > & frequency() const
Return the frequencies corresponding to the DATA matrix.
Double interval_p
time selection
Definition: MSIter.h:469
A drop-in replacement for Block<T*>.
Definition: Block.h:814
String: the storage and methods of handling collections of characters.
Definition: String.h:225
this file contains all the compiler specific defines
Definition: mainpage.dox:28
int Int
Definition: aipstype.h:50
bool Bool
Define the standard types used by Casacore.
Definition: aipstype.h:42
const Bool True
Definition: aipstype.h:43
double Double
Definition: aipstype.h:55