casacore
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
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>
43 
44 namespace casacore { //# NAMESPACE CASACORE - BEGIN
45 
46 //# forward decl
47 class MSColumns;
48 class 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>
57 class MSInterval : public BaseCompare
58 {
59 public:
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;}
67 private:
69  mutable Double offset_p;
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 
161 class MSIter
162 {
163 public:
164  enum PolFrame {
165  // Circular polarization
167  // Linear polarization
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.
173  MSIter();
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.
215  MSIter(const MeasurementSet& ms,
216  const std::vector<std::pair<String, CountedPtr<BaseCompare>>>& sortColumns);
217 
218  // Same as above with multiple MSs as input.
219  MSIter(const Block<MeasurementSet>& mss,
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.
308  Bool newDataDescriptionId() const;
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
347  const Matrix<SquareMatrix<Complex,2> >& CJonesAll() const;
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 
375  void getSpwInFreqRange(Block<Vector<Int> >& spw,
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 
405 protected:
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();
415  void setArrayInfo();
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
428  Bool isSubSet(const Vector<rownr_t>& r1, const Vector<rownr_t>& 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.
459  mutable bool spwDepFeed_p, checkFeed_p;
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 
509 inline Bool MSIter::more() const { return more_p;}
510 inline Table MSIter::table() const {return curTable_p;}
511 inline const MS& MSIter::ms() const {return bms_p[curMS_p];}
512 inline const MSColumns& MSIter::msColumns() const { return *msc_p;}
513 inline Bool MSIter::newMS() const { return newMS_p;}
514 inline Bool MSIter::newArray() const {return newArrayId_p;}
515 inline Bool MSIter::newField() const { return newFieldId_p;}
517 { return newSpectralWindowId_p;}
518 inline size_t MSIter::msId() const { return curMS_p;}
519 inline size_t MSIter::numMS() const { return nMS_p;}
521 { return colArray_p;}
523 { return colField_p;}
526  return colDataDesc_p;}
527 inline Int MSIter::arrayId() const {return curArrayIdFirst_p;}
534  return curPolarizationIdFirst_p;}
537  return curDataDescIdFirst_p;}
540 inline 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
Bool ddInSort_p
Definition: MSIter.h:436
void setFieldInfo() const
bool spwDepFeed_p
Definition: MSIter.h:459
A Measure: astronomical direction.
Definition: MDirection.h:174
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
String curFieldNameFirst_p
Definition: MSIter.h:443
A Measure: position on Earth.
Definition: MPosition.h:79
Int arrayId() const
Return the ArrayId of the first element in this iteration.
Definition: MSIter.h:527
int Int
Definition: aipstype.h:50
Block< Bool > tabIterAtStart_p
Definition: MSIter.h:433
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
MPosition telescopePosition_p
Definition: MSIter.h:503
Int fieldId() const
Return the FieldId of the first element in this iteration.
Definition: MSIter.h:528
Bool storeSorted_p
Globally control disk storage of SORTED_TABLE.
Definition: MSIter.h:466
PtrBlock< TableIterator * > tabIter_p
Definition: MSIter.h:432
Main interface class to a read/write table.
Definition: Table.h:157
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
void setInterval(Double interval)
Definition: MSIter.h:66
MSInterval(Double interval)
Definition: MSIter.h:60
Int lastDataDescId_p
These variables point to the IDs of the previous iteration.
Definition: MSIter.h:456
Int curArrayIdFirst_p
Definition: MSIter.h:442
Cube< Double > receptorAngles_p
temporary retained for compatibility contain actually a reference to the first plane of receptorAngle...
Definition: MSIter.h:484
const MFrequency & restFrequency(Int line=0) const
Return the rest frequency of the specified line as a Measure.
MSIter * clone() const
const Matrix< Double > & receptorAngle() const
Return the receptor angle for feed 0 on each antenna.
Definition: MSIter.h:549
Int polFrame() const
Return frame for polarization of the first element in this iteration.
Definition: MSIter.h:540
Bool timeInSort_p
This booleans determine if given columns are part of the sorting.
Definition: MSIter.h:436
Int dataDescriptionId() const
Return DataDescriptionId of the first element in this iteration.
Definition: MSIter.h:535
ScalarColumn< Int > colField_p
Definition: MSIter.h:474
Int curFieldIdFirst_p
Definition: MSIter.h:445
virtual void setOffset(Double offset)
Definition: MSIter.h:64
const String & sourceName() const
A 2-D Specialization of the Array class.
Definition: ArrayFwd.h:10
String curSourceNameFirst_p
Definition: MSIter.h:444
const String & fieldName() const
return FIELD table associated current fieldname and sourcename respectively
Int lastArrayId_p
Definition: MSIter.h:442
MSIter & operator=(const MSIter &other)
Assigment.
Bool newFieldId_p
Definition: MSIter.h:457
void setInterval(Double timeInterval)
Set or reset the time interval to use for iteration.
Int polarizationId() const
Return PolarizationId of the first element in this iteration.
Definition: MSIter.h:532
Int lastFieldId_p
Definition: MSIter.h:446
MFrequency frequency0_p
Definition: MSIter.h:501
Vector< String > antennaMounts_p
Definition: MSIter.h:488
Circular polarization.
Definition: MSIter.h:166
ssize_t lastMS_p
Definition: MSIter.h:439
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
A Measure: wave characteristics.
Definition: MFrequency.h:161
Bool newSpectralWindowId_p
Definition: MSIter.h:457
Int lastSpectralWindowId_p
Definition: MSIter.h:456
virtual void setState()
set the iteration state
Bool arrayInSort_p
Definition: MSIter.h:436
Referenced counted pointer for constant data.
Definition: CountedPtr.h:80
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
Matrix< SquareMatrix< Complex, 2 > > CJones_p
similar to receptorAngle_p
Definition: MSIter.h:487
const MSColumns & msColumns() const
Return reference to the current MSColumns.
Definition: MSIter.h:512
Bool newMS() const
Return true if msId has changed since last iteration.
Definition: MSIter.h:513
Bool newArrayId_p
Definition: MSIter.h:457
Matrix< Double > receptorAnglesFeed0_p
cache for access functions
Definition: MSIter.h:480
Double interval_p
Definition: MSIter.h:68
Int spectralWindowId() const
Return SpectralWindow of the first element in this iteration.
Definition: MSIter.h:529
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 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
void cacheCurrentDDInfo() const
Store the current DD, SPW, Pol ID.
MFrequency restFrequency_p
Definition: MSIter.h:502
double Double
Definition: aipstype.h:55
Bool newDataDescId_p
Definition: MSIter.h:457
void construct(const Block< Int > &sortColumns, Bool addDefaultSortColumns)
handle the construction details
virtual MSIter & operator++()
Block< MeasurementSet > bms_p
Definition: MSIter.h:431
Double interval_p
time selection
Definition: MSIter.h:469
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.
const Vector< Double > & frequency() const
Return the frequencies corresponding to the DATA matrix.
Double getOffset() const
Definition: MSIter.h:63
const MS & ms() const
Return reference to the current MS.
Definition: MSIter.h:511
Table table() const
Return the current Table iteration.
Definition: MSIter.h:510
Bool allBeamOffsetsZero() const
True if all elements of the cube returned by getBeamOffsets are zero.
Definition: MSIter.h:557
MSIter * This
Definition: MSIter.h:430
bool Bool
Define the standard types used by Casacore.
Definition: aipstype.h:42
Table curTable_p
Definition: MSIter.h:441
virtual ~MSIter()
Destructor.
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
const MDirection & phaseCenter() const
Returns the phasecenter for the first time stamp of the iteration The time is important for field tab...
const MFrequency & frequency0() const
Return frequency of first channel of the first element in iteration with reference frame as a Measure...
PolFrame polFrame_p
are zero (to speed things up in a single beam case)
Definition: MSIter.h:497
MDirection phaseCenter_p
Definition: MSIter.h:477
A drop-in replacement for Block&lt;T*&gt;.
Definition: Block.h:814
void advance()
advance the iteration
CountedPtr< MSInterval > timeComp_p
Definition: MSIter.h:505
A Table intended to hold astronomical data (a set of Measurements).
Double getInterval() const
Definition: MSIter.h:65
virtual int comp(const void *obj1, const void *obj2) const
Compare two objects, and return.
virtual ~MSInterval()
Definition: MSIter.h:61
Small helper class to specify an &#39;interval&#39; comparison.
Definition: MSIter.h:57
void cacheExtraDDInfo() const
Store extra info related to the DD.
virtual Bool more() const
Return False if there is no more data.
Definition: MSIter.h:509
size_t curMS_p
Definition: MSIter.h:438
Linear polarization.
Definition: MSIter.h:168
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
abstract base class for comparing two objects
Definition: Compare.h:64
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
Vector< Double > frequency_p
Definition: MSIter.h:500
const ScalarColumn< Int > & colArrayIds() const
Return the current ArrayIds for all rows in this iteration.
Definition: MSIter.h:520
Int curSpectralWindowIdFirst_p
Definition: MSIter.h:453
const Vector< String > & antennaMounts() const
Return a string mount identifier for each antenna.
Definition: MSIter.h:553
CountedPtr< MSColumns > msc_p
Definition: MSIter.h:440
An iterator class for MeasurementSets.
Definition: MSIter.h:161
Vector< SquareMatrix< Complex, 2 > > CJonesFeed0_p
Definition: MSIter.h:485
Int curDataDescIdFirst_p
These variables point to the current (as in this iteration) DD, SPW and polarization IDs...
Definition: MSIter.h:453
Int curSourceIdFirst_p
Definition: MSIter.h:442
Double prevFirstTimeStamp_p
Definition: MSIter.h:478
void setFeedInfo() const
A class to provide easy access to MeasurementSet columns.
Definition: MSColumns.h:116
bool feedInfoCached_p
Variable to know whether the feed info is already computed.
Definition: MSIter.h:462
Bool fieldInSort_p
Definition: MSIter.h:436
size_t msId() const
Return the current MS Id (according to the order in which they appeared in the constructor) ...
Definition: MSIter.h:518
size_t numMS() const
Get the number of actual ms&#39;s associated wth this iterator.
Definition: MSIter.h:519
String: the storage and methods of handling collections of characters.
Definition: String.h:225
Bool allBeamOffsetsZero_p
each element of the cube in radians) in the antenna coordinate system.
Definition: MSIter.h:494
Int lastPolarizationId_p
Definition: MSIter.h:456
Bool freqCacheOK_p
hence mutable.
Definition: MSIter.h:499
Int curPolarizationIdFirst_p
Definition: MSIter.h:453
MSIter()
Default constructor - useful only to assign another iterator later.
ScalarColumn< Int > colArray_p
Definition: MSIter.h:475
const ScalarColumn< Int > & colFieldIds() const
Return the current FieldIds for all rows in this iteration.
Definition: MSIter.h:522
virtual void origin()
Reset iterator to start of data.
Cube< RigidVector< Double, 2 > > beamOffsets_p
antenna (e.g.
Definition: MSIter.h:490
const String & keyChange() const
Report Name of slowest column that changes at end of current iteration.
const Bool True
Definition: aipstype.h:43
Bool newPolarizationId_p
Definition: MSIter.h:457
size_t nMS_p
Definition: MSIter.h:438
const Cube< Double > & receptorAngles() const
Return the receptor angles for all feeds and antennae First axis is a receptor number, 2nd axis is antennaId, 3rd axis is feedId.
Definition: MSIter.h:551
const ScalarColumn< Int > & colDataDescriptionIds() const
Return the current DataDescriptionIds for all rows in this iteration.
Definition: MSIter.h:524
bool checkFeed_p
Definition: MSIter.h:459
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&#39;s is this msiter that match the frequecy &quot;freqstart-freqS...