casacore
Loading...
Searching...
No Matches
LELRegion.h
Go to the documentation of this file.
1//# LELRegion.h: Class to hold a region as a LEL node
2//# Copyright (C) 1999
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 LATTICES_LELREGION_H
29#define LATTICES_LELREGION_H
30
31
32//# Includes
33#include <casacore/casa/aips.h>
34#include <casacore/lattices/LEL/LELInterface.h>
35#include <casacore/lattices/LRegions/LatticeRegion.h>
36
37namespace casacore { //# NAMESPACE CASACORE - BEGIN
38
39//# Forward Declarations
40class LattRegionHolder;
41
42
43// <summary>
44// Class to hold a region as a LEL node
45// </summary>
46
47// <use visibility=local>
48
49// <reviewed reviewer="" date="yyyy/mm/dd" tests="" demos="">
50// </reviewed>
51
52// <prerequisite>
53// <li> <linkto class="Lattice"> Lattice</linkto>
54// <li> <linkto class="LatticeExpr"> LatticeExpr</linkto>
55// <li> <linkto class="LatticeExprNode"> LatticeExprNode</linkto>
56// <li> <linkto class="LELInterface"> LELInterface</linkto>
57// </prerequisite>
58
59// <etymology>
60// This derived LEL letter class handles regions.
61// </etymology>
62
63// <synopsis>
64// This LEL letter class is derived from LELInterface. It
65// is used to construct LEL objects from regions.
66// The internal region is an <linkto class=ImageRegion>ImageRegion</linkto>
67// object, thus the region can be of any type.
68// With operator [] a region is applied to an image (expression).
69// At that stage possible world coordinates are converted to lattice
70// coordinates.
71// <p>
72// The attributes of a LELRegion object define an empty shape,
73// because in general the shape of a region is only known after
74// it is applied to an image.
75// <p>
76// A description of the implementation details of the LEL classes can
77// be found in
78// <a href="../notes/216.html">Note 216</a>
79// </synopsis>
80
81// <motivation>
82// We needed to be able to handle regions in a LEL expression.
83// </motivation>
84
85//# <todo asof="1998/01/21">
86//# </todo>
87
88
89class LELRegion : public LELInterface<Bool>
90{
91public:
92// Constructor.
94
95// Constructor. It takes over the pointer.
97
98// Destructor.
100
101// Get a pointer to the region object.
103 { return *region_p; }
104
105// Getting region data cannot be done (throws an exception).
106 virtual void eval(LELArray<Bool>&, const Slicer&) const;
107
108// Getting region data cannot be done (throws an exception).
109 virtual LELScalar<Bool> getScalar() const;
110
111// Do further preparations (e.g. optimization) on the expression.
113
114// Get class name
115 virtual String className() const;
116
117// Form a compound from the regions.
118// <group>
120 const LELInterface<Bool>& right);
122 const LELInterface<Bool>& right);
124 const LELInterface<Bool>& right);
126// </group>
127
128private:
129// Get the LattRegionHolder after checking that the expression is a region.
130 static const LattRegionHolder& region (const LELInterface<Bool>& expr);
131
132// Check if both regions have the same type (pixel or world) and if
133// no LCSlicer type of region is used.
134 static void checkTypes (const LattRegionHolder& left,
135 const LattRegionHolder& right);
136
137// Member variables.
139};
140
141
142
143
144// <summary>
145// Class to convert a region to a boolean node
146// </summary>
147
148// <use visibility=local>
149
150// <reviewed reviewer="" date="yyyy/mm/dd" tests="" demos="">
151// </reviewed>
152
153// <prerequisite>
154// <li> <linkto class="LELRegion"> Lattice</linkto>
155// <li> <linkto class="LatticeExprNode"> LatticeExprNode</linkto>
156// <li> <linkto class="LELInterface"> LELInterface</linkto>
157// </prerequisite>
158
159// <etymology>
160// This derived LEL letter class handles a region as a boolean lattice.
161// </etymology>
162
163// <synopsis>
164// This class makes it possible to handle a region as a true
165// boolean lattice without the need to apply the region to an image.
166// It means that it is only possible if the region has absolute
167// lattice coordinates.
168// <p>
169// A description of the implementation details of the LEL classes can
170// be found in
171// <a href="../notes/216.html">Note 216</a>
172// </synopsis>
173
174// <motivation>
175// It is useful to be able to handle a mask as a boolean lattice.
176// </motivation>
177
178//# <todo asof="1998/01/21">
179//# </todo>
180
181
182class LELRegionAsBool : public LELInterface<Bool>
183{
184public:
185// Constructor.
186 LELRegionAsBool (const LELRegion& region);
187
188// Destructor.
190
191// Get region data.
192 virtual void eval(LELArray<Bool>& result,
193 const Slicer& section) const;
194
195// Getting region data as a scalar cannot be done (throws an exception).
196 virtual LELScalar<Bool> getScalar() const;
197
198// Do further preparations (e.g. optimization) on the expression.
200
201// Get class name
202 virtual String className() const;
203
204private:
205// Member variables.
207};
208
209
210
211
212} //# NAMESPACE CASACORE - END
213
214#endif
Class to convert a region to a boolean node.
Definition LELRegion.h:183
LatticeRegion region_p
Member variables.
Definition LELRegion.h:206
virtual void eval(LELArray< Bool > &result, const Slicer &section) const
Get region data.
virtual Bool prepareScalarExpr()
Do further preparations (e.g.
~LELRegionAsBool()
Destructor.
LELRegionAsBool(const LELRegion &region)
Constructor.
virtual LELScalar< Bool > getScalar() const
Getting region data as a scalar cannot be done (throws an exception).
virtual String className() const
Get class name.
static LELRegion * makeComplement(const LELInterface< Bool > &expr)
~LELRegion()
Destructor.
const LattRegionHolder & region() const
Get a pointer to the region object.
Definition LELRegion.h:102
virtual String className() const
Get class name.
static LELRegion * makeDifference(const LELInterface< Bool > &left, const LELInterface< Bool > &right)
virtual LELScalar< Bool > getScalar() const
Getting region data cannot be done (throws an exception).
LattRegionHolder * region_p
Member variables.
Definition LELRegion.h:138
static const LattRegionHolder & region(const LELInterface< Bool > &expr)
Get the LattRegionHolder after checking that the expression is a region.
virtual Bool prepareScalarExpr()
Do further preparations (e.g.
static LELRegion * makeUnion(const LELInterface< Bool > &left, const LELInterface< Bool > &right)
Form a compound from the regions.
virtual void eval(LELArray< Bool > &, const Slicer &) const
Getting region data cannot be done (throws an exception).
static LELRegion * makeIntersection(const LELInterface< Bool > &left, const LELInterface< Bool > &right)
LELRegion(LattRegionHolder *region)
Constructor.
static void checkTypes(const LattRegionHolder &left, const LattRegionHolder &right)
Check if both regions have the same type (pixel or world) and if no LCSlicer type of region is used.
LELRegion(const LattRegionHolder &region)
Constructor.
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
bool Bool
Define the standard types used by Casacore.
Definition aipstype.h:42