casacore
Loading...
Searching...
No Matches
CompressComplex.h
Go to the documentation of this file.
1// # CompressComplex.h: Virtual column engine to scale a table Complex array
2// # Copyright (C) 2001,2002,2003
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: casa-feedback@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#ifndef TABLES_COMPRESSCOMPLEX_H
27#define TABLES_COMPRESSCOMPLEX_H
28
29// # Includes
30#include <casacore/casa/aips.h>
31#include <casacore/tables/DataMan/BaseMappedArrayEngine.h>
32#include <casacore/tables/Tables/ScalarColumn.h>
33#include <casacore/casa/Arrays/Array.h>
34#include <casacore/casa/BasicSL/Complex.h>
35
36namespace casacore { // # NAMESPACE CASACORE - BEGIN
37
38// <summary>
39// Virtual column engine to scale a table Complex array
40// </summary>
41
42// <use visibility=export>
43
44// <reviewed reviewer="UNKNOWN" date="before2004/08/25" tests="tCompressComplex.cc">
45// </reviewed>
46
47// <prerequisite>
48// # Classes you should understand before using this one.
49// <li> VirtualColumnEngine
50// <li> VirtualArrayColumn
51// </prerequisite>
52
53// <synopsis>
54// CompressComplex is a virtual column engine which scales an array
55// of one type to another type to save disk storage.
56// This resembles the classic AIPS compress method which scales the
57// data from Complex to int.
58// The scale factor and offset values can be given in two ways:
59// <ul>
60// <li> As a fixed values which is used for all arrays in the column.
61// These values have to be given when constructing of the engine.
62// <li> As the name of a column. In this way each array in the
63// column has its own scale and offset value.
64// By default it uses auto-scaling (see below).
65// Otherwise the scale and offset value in a row must be put
66// before the array is put and should not be changed anymore.
67// </ul>
68// Auto-scaling means that the engine will determine the scale
69// and offset value itself when an array (or a slice) is put.
70// It does it by mapping the values in the array to the range [-32767,32767].
71// At each put the scale/offset values are changed as needed.
72// Note that with auto-scaling <src>putSlice</src> can be somewhat
73// slower, because the entire array might need to be rescaled.
74//
75// As in FITS the scale and offset values are used as:
76// <br><src> True_value = Stored_value * scale + offset; </src>
77//
78// An engine object should be used for one column only, because the stored
79// column name is part of the engine. If it would be used for more than
80// one column, they would all share the same stored column.
81// When the engine is bound to a column, it is checked if the name
82// of that column matches the given virtual column name.
83//
84// The engine can be used for a column containing any kind of array
85// (thus direct or indirect, fixed or variable shaped)) as long as the
86// virtual array can be stored in the stored array. Thus a fixed shaped
87// virtual can use a variable shaped stored, but not vice versa.
88// A fixed shape indirect virtual can use a stored with direct arrays.
89//
90// This class can also serve as an example of how to implement
91// a virtual column engine.
92// </synopsis>
93
94// <motivation>
95// This class allows to store data in a smaller representation.
96// It is needed to resemble the classic AIPS compress option.
97//
98// Because the engine can serve only one column, it was possible to
99// combine the engine and the column functionality in one class.
100// </motivation>
101
102// <example>
103// <srcblock>
104// // Create the table description and 2 columns with indirect arrays in it.
105// // The Int column will be stored, while the double will be
106// // used as virtual.
107// TableDesc tableDesc ("", TableDesc::Scratch);
108// tableDesc.addColumn (ArrayColumnDesc<Int> ("storedArray"));
109// tableDesc.addColumn (ArrayColumnDesc<Complex> ("virtualArray"));
110// tableDesc.addColumn (ScalarColumnDesc<Complex> ("scale"));
111// tableDesc.addColumn (ScalarColumnDesc<Float> ("offset"));
112//
113// // Create a new table using the table description.
114// SetupNewTable newtab (tableDesc, "tab.data", Table::New);
115//
116// // Create the array scaling engine (with auto-scale)
117// // and bind it to the Complex column.
118// CompressComplex scalingEngine("virtualArray", "storedArray",
119// "scale", "offset");
120// newtab.bindColumn ("virtualArray", scalingEngine);
121// // Create the table.
122// Table table (newtab);
123//
124// // Store a 3-D array (with dim. 2,3,4) into each row of the column.
125// // The shape of each array in the column is implicitly set by the put
126// // function. This will also set the shape of the underlying Int array.
127// ArrayColumn data (table, "virtualArray");
128// Array<double> someArray(IPosition(4,2,3,4));
129// someArray = 0;
130// for (rownr_t i=0, i<10; i++) { // table will have 10 rows
131// table.addRow();
132// data.put (i, someArray)
133// }
134// </srcblock>
135// </example>
136
137class CompressComplex : public BaseMappedArrayEngine<Complex, Int> {
138 public:
139 // Construct an engine to scale all arrays in a column with
140 // the given offset and scale factor.
141 // StoredColumnName is the name of the column where the scaled
142 // data will be put and must have data type Int.
143 // The virtual column using this engine must have data type Complex.
144 CompressComplex(const String& virtualColumnName, const String& storedColumnName, Float scale,
145 Float offset = 0);
146
147 // Construct an engine to scale the arrays in a column.
148 // The scale and offset values are taken from a column with
149 // the given names. In that way each array has its own scale factor
150 // and offset value.
151 // An exception is thrown if these columns do not exist.
152 // VirtualColumnName is the name of the virtual column and is used to
153 // check if the engine gets bound to the correct column.
154 // StoredColumnName is the name of the column where the scaled
155 // data will be put and must have data type Int.
156 // The virtual column using this engine must have data type Complex.
157 CompressComplex(const String& virtualColumnName, const String& storedColumnName,
158 const String& scaleColumnName, const String& offsetColumnName,
159 Bool autoScale = True);
160
161 // Construct from a record specification as created by getmanagerSpec().
163
164 // Destructor is mandatory.
166
167 // Assignment is not needed and therefore forbidden
169
170 // Return the type name of the engine (i.e. its class name).
171 virtual String dataManagerType() const;
172
173 // Get the name given to the engine (is the virtual column name).
174 virtual String dataManagerName() const;
175
176 // Record a record containing data manager specifications.
177 virtual Record dataManagerSpec() const;
178
179 // Return the name of the class.
180 // This includes the names of the template arguments.
182
183 // Register the class name and the static makeObject "constructor".
184 // This will make the engine known to the table system.
185 static void registerClass();
186
187 protected:
188 // Copy constructor is only used by clone() and derived class.
189 // (so it is made protected).
191
192 private:
193 // Clone the engine object.
194 virtual DataManager* clone() const;
195
196 protected:
197 // Initialize the object for a new table.
198 // It defines the keywords containing the engine parameters.
199 virtual void create64(rownr_t initialNrrow);
200
201 private:
202 // Preparing consists of setting the writable switch and
203 // adding the initial number of rows in case of create.
204 // Furthermore it reads the keywords containing the engine parameters.
205 virtual void prepare();
206
207 // Reopen the engine for read/write access.
208 // It makes the column writable if the underlying column is writable.
209 virtual void reopenRW();
210
211 // Add rows to the table.
212 // If auto-scaling, it initializes the scale column with 0
213 // to indicate that no data has been processed yet.
214 virtual void addRowInit(rownr_t startRow, rownr_t nrrow);
215
216 // Get an array in the given row.
217 // This will scale and offset from the underlying array.
218 virtual void getArray(rownr_t rownr, Array<Complex>& array);
219
220 // Put an array in the given row.
221 // This will scale and offset to the underlying array.
222 virtual void putArray(rownr_t rownr, const Array<Complex>& array);
223
224 // Get a section of the array in the given row.
225 // This will scale and offset from the underlying array.
226 virtual void getSlice(rownr_t rownr, const Slicer& slicer, Array<Complex>& array);
227
228 // Put into a section of the array in the given row.
229 // This will scale and offset to the underlying array.
230 virtual void putSlice(rownr_t rownr, const Slicer& slicer, const Array<Complex>& array);
231
232 // Get an entire column.
233 // This will scale and offset from the underlying array.
235
236 // Put an entire column.
237 // This will scale and offset to the underlying array.
238 virtual void putArrayColumn(const Array<Complex>& array);
239
240 // Get some array values in the column.
241 // This will scale and offset from the underlying array.
242 virtual void getArrayColumnCells(const RefRows& rownrs, Array<Complex>& data);
243
244 // Put some array values in the column.
245 // This will scale and offset to the underlying array.
246 virtual void putArrayColumnCells(const RefRows& rownrs, const Array<Complex>& data);
247
248 // Get a section of all arrays in the column.
249 // This will scale and offset from the underlying array.
250 virtual void getColumnSlice(const Slicer& slicer, Array<Complex>& array);
251
252 // Put a section of all arrays in the column.
253 // This will scale and offset to the underlying array.
254 virtual void putColumnSlice(const Slicer& slicer, const Array<Complex>& array);
255
256 // Get a section of some arrays in the column.
257 // This will scale and offset from the underlying array.
258 virtual void getColumnSliceCells(const RefRows& rownrs, const Slicer& slicer,
259 Array<Complex>& data);
260
261 // Put into a section of some arrays in the column.
262 // This will scale and offset to the underlying array.
263 virtual void putColumnSliceCells(const RefRows& rownrs, const Slicer& slicer,
264 const Array<Complex>& data);
265
266 // Scale and/or offset target to array.
267 // This is meant when reading an array from the stored column.
268 // It optimizes for scale=1 and/or offset=0.
270 const Array<Int>& target);
271
272 // Scale and/or offset array to target.
273 // This is meant when writing an array into the stored column.
274 // It optimizes for scale=1 and/or offset=0.
275 virtual void scaleOnPut(Float scale, Float offset, const Array<Complex>& array,
276 Array<Int>& target);
277
278 // Scale and/or offset target to array for the entire column.
279 // When the scale and offset are fixed, it will do the entire array.
280 // Otherwise it iterates through the array and applies the scale
281 // and offset per row.
283
284 // Scale and/or offset array to target for the entire column.
285 // When the scale and offset are fixed, it will do the entire array.
286 // Otherwise it iterates through the array and applies the scale
287 // and offset per row.
289
290 protected:
291 // # Now define the data members.
292 String scaleName_p; // # name of scale column
293 String offsetName_p; // # name of offset column
294 Float scale_p; // # fixed scale factor
295 Float offset_p; // # fixed offset value
296 Bool fixed_p; // # scale/offset is fixed
297 Bool autoScale_p; // # determine scale/offset automatically
298 ScalarColumn<Float>* scaleColumn_p; // # column with scale value
299 ScalarColumn<Float>* offsetColumn_p; // # column with offset value
300 Array<Int> buffer_p; // # buffer to avoid Array constructions
301 // # (makes multi-threading harder)
302
303 // Get the scale value for this row.
304 Float getScale(rownr_t rownr);
305
306 // Get the offset value for this row.
307 Float getOffset(rownr_t rownr);
308
309 // Find minimum and maximum from the array data.
310 // NaN and infinite values are ignored. If no values are finite,
311 // minimum and maximum are set to NaN.
312 virtual void findMinMax(Float& minVal, Float& maxVal, const Array<Complex>& array) const;
313
314 // Make scale and offset from the minimum and maximum of the array data.
315 // If minVal is NaN, scale is set to 0.
316 void makeScaleOffset(Float& scale, Float& offset, Float minVal, Float maxVal) const;
317
318 // Put a part of an array in a row using given scale/offset values.
319 void putPart(rownr_t rownr, const Slicer& slicer, const Array<Complex>& array, Float scale,
320 Float offset);
321
322 // Fill the array part into the full array and put it using the
323 // given min/max values.
324 void putFullPart(rownr_t rownr, const Slicer& slicer, Array<Complex>& fullArray,
325 const Array<Complex>& partArray, Float minVal, Float maxVal);
326
327 public:
328 // Define the "constructor" to construct this engine when a
329 // table is read back.
330 // This "constructor" has to be registered by the user of the engine.
331 // If the engine is commonly used, its registration can be added
332 // to the registerAllCtor function in DataManager.cc.
333 // That function gets automatically invoked by the table system.
334 static DataManager* makeObject(const String& dataManagerType, const Record& spec);
335};
336
337// <summary>
338// Virtual column engine to scale a table Complex array for Single Dish data
339// </summary>
340
341// <use visibility=export>
342
343// <reviewed reviewer="UNKNOWN" date="before2004/08/25" tests="tCompressComplex.cc">
344// </reviewed>
345
346// <prerequisite>
347// # Classes you should understand before using this one.
348// <li> CompressComplex
349// </prerequisite>
350
351// <synopsis>
352// CompressComplexSD is similar to CompressComplex, but compresses
353// in a slighty different way optimized for single dish data.
354// Usually the imaginary part of single dish data is 0, so the scaling
355// is optimized for it.
356// <br>If the imaginary part is 0, the real part is scaled with 15 bits
357// extra to get a higher precision. The least significant bit is set to 0
358// indicating the imag==0.
359// <br>If the imaginary part is not 0, the real part is scaled normally.
360// The imaginary part is scaled with 1 bit less. The least significant bit
361// is set to 1 indicating that imag!=0.
362// </synopsis>
363
364// <motivation>
365// This class is created on top of CompressComplex to cope with SD data
366// in a better way. Using CompressComplex often makes the imag part non-zero
367// if it is scaled as 0.
368// </motivation>
369
370// <example>
371// <srcblock>
372// // Create the table description and 2 columns with indirect arrays in it.
373// // The Int column will be stored, while the double will be
374// // used as virtual.
375// TableDesc tableDesc ("", TableDesc::Scratch);
376// tableDesc.addColumn (ArrayColumnDesc<Int> ("storedArray"));
377// tableDesc.addColumn (ArrayColumnDesc<Complex> ("virtualArray"));
378// tableDesc.addColumn (ScalarColumnDesc<Complex> ("scale"));
379// tableDesc.addColumn (ScalarColumnDesc<Float> ("offset"));
380//
381// // Create a new table using the table description.
382// SetupNewTable newtab (tableDesc, "tab.data", Table::New);
383//
384// // Create the array scaling engine (with auto-scale)
385// // and bind it to the Complex column.
386// CompressComplexSD scalingEngine("virtualArray", "storedArray",
387// "scale", "offset");
388// newtab.bindColumn ("virtualArray", scalingEngine);
389// // Create the table.
390// Table table (newtab);
391//
392// // Store a 3-D array (with dim. 2,3,4) into each row of the column.
393// // The shape of each array in the column is implicitly set by the put
394// // function. This will also set the shape of the underlying Int array.
395// ArrayColumn data (table, "virtualArray");
396// Array<double> someArray(IPosition(4,2,3,4));
397// someArray = 0;
398// for (rownr_t i=0, i<10; i++) { // table will have 10 rows
399// table.addRow();
400// data.put (i, someArray)
401// }
402// </srcblock>
403// </example>
404
406 public:
407 // Construct an engine to scale all arrays in a column with
408 // the given offset and scale factor.
409 // StoredColumnName is the name of the column where the scaled
410 // data will be put and must have data type Int.
411 // The virtual column using this engine must have data type Complex.
412 CompressComplexSD(const String& virtualColumnName, const String& storedColumnName, Float scale,
413 Float offset = 0);
414
415 // Construct an engine to scale the arrays in a column.
416 // The scale and offset values are taken from a column with
417 // the given names. In that way each array has its own scale factor
418 // and offset value.
419 // An exception is thrown if these columns do not exist.
420 // VirtualColumnName is the name of the virtual column and is used to
421 // check if the engine gets bound to the correct column.
422 // StoredColumnName is the name of the column where the scaled
423 // data will be put and must have data type Int.
424 // The virtual column using this engine must have data type Complex.
425 CompressComplexSD(const String& virtualColumnName, const String& storedColumnName,
426 const String& scaleColumnName, const String& offsetColumnName,
427 Bool autoScale = True);
428
429 // Construct from a record specification as created by getmanagerSpec().
431
432 // Destructor is mandatory.
434
435 // Assignment is not needed and therefore forbidden
437
438 // Return the type name of the engine (i.e. its class name).
439 virtual String dataManagerType() const;
440
441 // Return the name of the class.
442 // This includes the names of the template arguments.
444
445 // Register the class name and the static makeObject "constructor".
446 // This will make the engine known to the table system.
447 static void registerClass();
448
449 private:
450 // Copy constructor is only used by clone().
451 // (so it is made private).
453
454 // Clone the engine object.
455 virtual DataManager* clone() const;
456
457 // Initialize the object for a new table.
458 // It defines the keywords containing the engine parameters.
459 virtual void create64(rownr_t initialNrrow);
460
461 // Scale and/or offset target to array.
462 // This is meant when reading an array from the stored column.
463 // It optimizes for scale=1 and/or offset=0.
465 const Array<Int>& target);
466
467 // Scale and/or offset array to target.
468 // This is meant when writing an array into the stored column.
469 // It optimizes for scale=1 and/or offset=0.
470 virtual void scaleOnPut(Float scale, Float offset, const Array<Complex>& array,
471 Array<Int>& target);
472
473 // Find minimum and maximum from the array data.
474 // NaN and infinite values and zero imaginary parts are ignored.
475 // If no values are finite, minimum and maximum are set to NaN.
476 virtual void findMinMax(Float& minVal, Float& maxVal, const Array<Complex>& array) const;
477
478 public:
479 // Define the "constructor" to construct this engine when a
480 // table is read back.
481 // This "constructor" has to be registered by the user of the engine.
482 // If the engine is commonly used, its registration can be added
483 // to the registerAllCtor function in DataManager.cc.
484 // That function gets automatically invoked by the table system.
485 static DataManager* makeObject(const String& dataManagerType, const Record& spec);
486};
487
489 return (fixed_p ? scale_p : (*scaleColumn_p)(rownr));
490}
492 return (fixed_p ? offset_p : (*offsetColumn_p)(rownr));
493}
494
495} // namespace casacore
496
497#endif
BaseMappedArrayEngine(const String &virtualColumnName, const String &storedColumnName)
CompressComplexSD(const String &virtualColumnName, const String &storedColumnName, const String &scaleColumnName, const String &offsetColumnName, Bool autoScale=True)
Construct an engine to scale the arrays in a column.
virtual void create64(rownr_t initialNrrow)
Initialize the object for a new table.
virtual void findMinMax(Float &minVal, Float &maxVal, const Array< Complex > &array) const
Find minimum and maximum from the array data.
static void registerClass()
Register the class name and the static makeObject "constructor".
static String className()
Return the name of the class.
~CompressComplexSD()
Destructor is mandatory.
virtual void scaleOnPut(Float scale, Float offset, const Array< Complex > &array, Array< Int > &target)
Scale and/or offset array to target.
static DataManager * makeObject(const String &dataManagerType, const Record &spec)
Define the "constructor" to construct this engine when a table is read back.
virtual DataManager * clone() const
Clone the engine object.
CompressComplexSD & operator=(const CompressComplexSD &)=delete
Assignment is not needed and therefore forbidden.
CompressComplexSD(const String &virtualColumnName, const String &storedColumnName, Float scale, Float offset=0)
Construct an engine to scale all arrays in a column with the given offset and scale factor.
virtual void scaleOnGet(Float scale, Float offset, Array< Complex > &array, const Array< Int > &target)
Scale and/or offset target to array.
CompressComplexSD(const Record &spec)
Construct from a record specification as created by getmanagerSpec().
virtual String dataManagerType() const
Return the type name of the engine (i.e.
CompressComplexSD(const CompressComplexSD &)
Copy constructor is only used by clone().
CompressComplex(const CompressComplex &)
Copy constructor is only used by clone() and derived class.
virtual void putArrayColumnCells(const RefRows &rownrs, const Array< Complex > &data)
Put some array values in the column.
void putFullPart(rownr_t rownr, const Slicer &slicer, Array< Complex > &fullArray, const Array< Complex > &partArray, Float minVal, Float maxVal)
Fill the array part into the full array and put it using the given min/max values.
CompressComplex & operator=(const CompressComplex &)=delete
Assignment is not needed and therefore forbidden.
virtual String dataManagerName() const
Get the name given to the engine (is the virtual column name).
virtual DataManager * clone() const
Clone the engine object.
CompressComplex(const String &virtualColumnName, const String &storedColumnName, Float scale, Float offset=0)
Construct an engine to scale all arrays in a column with the given offset and scale factor.
static void registerClass()
Register the class name and the static makeObject "constructor".
CompressComplex(const String &virtualColumnName, const String &storedColumnName, const String &scaleColumnName, const String &offsetColumnName, Bool autoScale=True)
Construct an engine to scale the arrays in a column.
virtual void getArrayColumn(Array< Complex > &array)
Get an entire column.
virtual void getSlice(rownr_t rownr, const Slicer &slicer, Array< Complex > &array)
Get a section of the array in the given row.
void putPart(rownr_t rownr, const Slicer &slicer, const Array< Complex > &array, Float scale, Float offset)
Put a part of an array in a row using given scale/offset values.
ScalarColumn< Float > * scaleColumn_p
virtual void putColumnSliceCells(const RefRows &rownrs, const Slicer &slicer, const Array< Complex > &data)
Put into a section of some arrays in the column.
virtual void getColumnSliceCells(const RefRows &rownrs, const Slicer &slicer, Array< Complex > &data)
Get a section of some arrays in the column.
void makeScaleOffset(Float &scale, Float &offset, Float minVal, Float maxVal) const
Make scale and offset from the minimum and maximum of the array data.
static DataManager * makeObject(const String &dataManagerType, const Record &spec)
Define the "constructor" to construct this engine when a table is read back.
CompressComplex(const Record &spec)
Construct from a record specification as created by getmanagerSpec().
virtual void scaleOnPut(Float scale, Float offset, const Array< Complex > &array, Array< Int > &target)
Scale and/or offset array to target.
virtual void getColumnSlice(const Slicer &slicer, Array< Complex > &array)
Get a section of all arrays in the column.
virtual Record dataManagerSpec() const
Record a record containing data manager specifications.
virtual void putArray(rownr_t rownr, const Array< Complex > &array)
Put an array in the given row.
virtual void addRowInit(rownr_t startRow, rownr_t nrrow)
Add rows to the table.
void scaleColumnOnGet(Array< Complex > &array, const Array< Int > &target)
Scale and/or offset target to array for the entire column.
virtual void putSlice(rownr_t rownr, const Slicer &slicer, const Array< Complex > &array)
Put into a section of the array in the given row.
virtual void findMinMax(Float &minVal, Float &maxVal, const Array< Complex > &array) const
Find minimum and maximum from the array data.
virtual void putArrayColumn(const Array< Complex > &array)
Put an entire column.
virtual void scaleOnGet(Float scale, Float offset, Array< Complex > &array, const Array< Int > &target)
Scale and/or offset target to array.
Float getScale(rownr_t rownr)
Get the scale value for this row.
virtual void reopenRW()
Reopen the engine for read/write access.
virtual void getArray(rownr_t rownr, Array< Complex > &array)
Get an array in the given row.
ScalarColumn< Float > * offsetColumn_p
virtual void prepare()
Preparing consists of setting the writable switch and adding the initial number of rows in case of cr...
virtual void create64(rownr_t initialNrrow)
Initialize the object for a new table.
void scaleColumnOnPut(const Array< Complex > &array, Array< Int > &target)
Scale and/or offset array to target for the entire column.
static String className()
Return the name of the class.
Float getOffset(rownr_t rownr)
Get the offset value for this row.
virtual void getArrayColumnCells(const RefRows &rownrs, Array< Complex > &data)
Get some array values in the column.
virtual String dataManagerType() const
Return the type name of the engine (i.e.
virtual void putColumnSlice(const Slicer &slicer, const Array< Complex > &array)
Put a section of all arrays in the column.
~CompressComplex()
Destructor is mandatory.
Abstract base class for a data manager.
String: the storage and methods of handling collections of characters.
Definition String.h:355
For temporary backward namespace compatibility, use casa as alias for casacore.
Definition mainpage.dox:28
int offset(int, int) const
compute a linear offset from array indicies
T * array
The actual storage.
Definition Block.h:689
float Float
Definition aipstype.h:52
bool Bool
Define the standard types used by Casacore.
Definition aipstype.h:40
const Bool True
Definition aipstype.h:41
uInt64 rownr_t
Define the type of a row number in a table.
Definition aipsxtype.h:44