casa  5.7.0-16
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
VisBuffGroup.h
Go to the documentation of this file.
1 //# VisBuffGroup.h: class to store a group of VisBuffers
2 //# Copyright (C) 2011
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 
27 #ifndef MSVIS_VISBUFFGROUP_H
28 #define MSVIS_VISBUFFGROUP_H
29 
30 #include <casa/aips.h>
31 #include <msvis/MSVis/VisBuffer.h>
32 #include <casa/Arrays/Vector.h>
33 
34 namespace casa { //# NAMESPACE CASA - BEGIN
35 
36 // <summary>
37 // A class to store a group of VisBuffers.
38 // </summary>
39 //
40 // <use visibility=export>
41 //
42 // <reviewed reviewer="" date="yyyy/mm/dd" tests="" demos="">
43 // </reviewed>
44 
45 // <prerequisite>
46 // <li> VisBuffer
47 // </prerequisite>
48 //
49 // <etymology>
50 // It is a group of VisBuffers
51 // </etymology>
52 //
53 // <synopsis>
54 // This class stores a group of VisBuffers. Unlike VisBuffGroupAcc or
55 // VisBuffAccumulator, the VisBuffers are copied and stored in a nearly
56 // pristine state so that their individual contents can be accessed later
57 // (i.e. without any averaging). The only difference between a normal (or
58 // "fresh") VisBuffer and one retrieved from a VisBuffGroup is that
59 // VisBuffGroup detaches its VisBuffers from any underlying VisIter.
60 // </synopsis>
61 //
62 // <example>
63 // </example>
64 //
65 // <motivation>
66 // Some calculations or applications need more than one VisBuffer. For
67 // example, one might want to estimate and subtract the continuum from the
68 // visibilities of an casacore::MS that has a broad line completely spanning spw 1, but
69 // spws 0 and 2 line-free, so the spws should be combined (combine='spw') for
70 // the continuum estimation.
71 //
72 // It is much more efficient if the group of necessary data can be read only
73 // once, worked on, and then written. The CalTable approach is more flexible
74 // in that a CalTable can be applied to an casacore::MS with a different number or
75 // arrangement of rows from the input casacore::MS, but per chunk it requires two more
76 // reads (the CalTable and the _output_ casacore::MS) and an extra write (the CalTable).
77 // </motivation>
78 //
79 // <todo asof="2011/11/07">
80 // <li> Allow retrieval by timestamp.
81 // </todo>
82 
84 {
85 public:
86  VisBuffGroup();
87 
88  // Null destructor
89  ~VisBuffGroup();
90 
91  // Add a VisBuffer. Returns true on success and false on failure.
92  casacore::Bool store(const VisBuffer& vb);
93 
94  // casacore::Record the end of a chunk.
95  // Doing so marks that if "playing back" a VisIter vi matching the order that
96  // the VBs were stored in, vi.nextChunk() will be needed at this point
97  // instead of ++vi.
98  void endChunk();
99 
100  // (See endChunk()) Returns whether or not vi.nextChunk() should be used
101  // when advancing past buffer number buf.
102  casacore::Bool chunkEnd(const casacore::Int buf) const {return endChunk_p[buf];}
103 
104  // Replace the VisBuffer in slot buf with vb.
105  // Returns true on success and false on failure.
106  // casacore::Bool replace(const VisBuffer& vb, const casacore::uInt buf);
107 
108  // How many VisBuffers are contained herein?
109  casacore::uInt nBuf() const {return nBuf_p;}
110 
111  // casacore::uInt nDDID() const {return nDDID_p;}
112  // casacore::uInt nFld() const {return nFld_p;}
113 
114  // Return a reference to the indexed VisBuffer.
115  // Throws an exception if buf > nBuf().
116  VisBuffer& operator()(const casacore::Int buf);
117 
118  // // Returns the buffer index corresponding to data description ID ddid and
119  // // field ID fld.
120  // //
121  // // Returns -1 if there is no such buffer.
122  // //
123  // // Returns -(# of matching buffers) if there is > 1 match (use bufInds).
124  // casacore::Int bufInd(const casacore::Int ddid, const casacore::Int fld);
125 
126  // // Returns the buffer indices corresponding to data description ID ddid and
127  // // field ID fld.
128  // casacore::Vector<casacore::Int> bufInds(const casacore::Int ddid, const casacore::Int fld)
129 
130  // The flagging approach to channel selection.
131  // Sets chanmaskedflags to true wherever the channels in chanmask or flags in
132  // vb.flagCube() are true, resizing if necessary.
133  // Returns true/false on success/error (i.e. chanmask having a different # of
134  // channels from vb.flagCube()).
136  const casacore::Vector<casacore::Bool> *chanmask, const VisBuffer& vb);
137 
138 private:
139  // Prohibit public copying and assignment.
140  VisBuffGroup(const VisBuffGroup&);
142 
143  // // Numbers of data description ids and fields
144  // casacore::uInt nDDID_p, nFld_p, nBuf_p;
145 
146  // Number of buffers.
148 
149  // The list of buffers.
151 
153 
154  // // casacore::Map spw,fld to the buffer id
155  // casacore::Matrix<casacore::Int> spwfldids_p;
156 };
157 
158 
159 } //# NAMESPACE CASA - END
160 
161 #endif
162 
163 
static casacore::Bool applyChanMask(casacore::Cube< casacore::Bool > &chanmaskedflags, const casacore::Vector< casacore::Bool > *chanmask, const VisBuffer &vb)
// Returns the buffer index corresponding to data description ID ddid and field ID fld...
int Int
Definition: aipstype.h:50
casacore::PtrBlock< VisBuffer * > VB_p
The list of buffers.
Definition: VisBuffGroup.h:150
void endChunk()
casacore::Record the end of a chunk.
casacore::uInt nBuf_p
// Numbers of data description ids and fields casacore::uInt nDDID_p, nFld_p, nBuf_p; ...
Definition: VisBuffGroup.h:147
VisBuffGroup & operator=(const VisBuffGroup &)
casacore::Bool chunkEnd(const casacore::Int buf) const
(See endChunk()) Returns whether or not vi.nextChunk() should be used when advancing past buffer numb...
Definition: VisBuffGroup.h:102
casacore::Vector< casacore::Bool > endChunk_p
Definition: VisBuffGroup.h:152
~VisBuffGroup()
Null destructor.
A class to store a group of VisBuffers.
Definition: VisBuffGroup.h:83
casacore::uInt nBuf() const
Replace the VisBuffer in slot buf with vb.
Definition: VisBuffGroup.h:109
casacore::Bool store(const VisBuffer &vb)
Add a VisBuffer.
bool Bool
Define the standard types used by Casacore.
Definition: aipstype.h:42
A drop-in replacement for Block&lt;T*&gt;.
Definition: WProjectFT.h:54
VisBuffer & operator()(const casacore::Int buf)
casacore::uInt nDDID() const {return nDDID_p;} casacore::uInt nFld() const {return nFld_p;} ...
VisBuffers encapsulate one chunk of visibility data for processing.
Definition: VisBuffer.h:153
unsigned int uInt
Definition: aipstype.h:51