casacore
LELCondition.h
Go to the documentation of this file.
1 //# LELCondition.h: Class to make a mask from a condition
2 //# Copyright (C) 1999,2000
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_LELCONDITION_H
29 #define LATTICES_LELCONDITION_H
30 
31 
32 //# Includes
33 #include <casacore/casa/aips.h>
34 #include <casacore/lattices/LEL/LELInterface.h>
35 
36 
37 namespace casacore { //# NAMESPACE CASACORE - BEGIN
38 
39 // <summary>
40 // Class to make a mask from a condition.
41 // </summary>
42 
43 // <use visibility=local>
44 
45 // <reviewed reviewer="" date="yyyy/mm/dd" tests="" demos="">
46 // </reviewed>
47 
48 // <prerequisite>
49 // <li> <linkto class="Lattice"> Lattice</linkto>
50 // <li> <linkto class="LatticeExpr"> LatticeExpr</linkto>
51 // <li> <linkto class="LatticeExprNode"> LatticeExprNode</linkto>
52 // <li> <linkto class="LELInterface"> LELInterface</linkto>
53 // </prerequisite>
54 
55 // <etymology>
56 // This derived LEL letter class handles a condition as a mask.
57 // </etymology>
58 
59 // <synopsis>
60 // This LEL letter class is derived from LELInterface. It
61 // is used to construct LEL objects that know how to deal with
62 // a condition (given using operator[]).
63 // The operands cannot be a scalar.
64 // The LELCondition object is embedded in the tree, and the conversion
65 // actually happens at tree evaluation time.
66 // <p>
67 // A description of the implementation details of the LEL classes can
68 // be found in
69 // <a href="../notes/216.html">Note 216</a>
70 // </synopsis>
71 
72 // <example>
73 // Examples are not very useful as the user would never use
74 // these classes directly. Look in LatticeExprNode.cc to see
75 // how it invokes these classes. An example of how the user
76 // would indirectly use this class (through the envelope) is:
77 // <srcblock>
78 // IPosition shape(2,5,10);
79 // ArrayLattice<Float> x(shape); x.set(1.0);
80 // ArrayLattice<Double> y(shape);
81 // y.copyData(x[x>5]); // y = x;
82 // </srcblock>
83 // The LELCondition class is embedded in the tree at construction time
84 // so as to turn the condition in a mask on x.
85 // </example>
86 
87 //# <todo asof="1998/01/21">
88 //# </todo>
89 
90 
91 template <class T> class LELCondition : public LELInterface<T>
92 {
93  //# Make members of parent class known.
94 protected:
96 
97 public:
98 // Construct the condition on the given expression.
100  const CountedPtr<LELInterface<Bool> >& cond);
101 
102 // Destructor does nothing
104 
105 // Recursively evaluate the expression.
106  virtual void eval (LELArray<T>& result,
107  const Slicer& section) const;
108 
109 // Recursively evaluate the scalar
110  virtual LELScalar<T> getScalar() const;
111 
112 // Do further preparations (e.g. optimization) on the expression.
114 
115 // Get class name
116  virtual String className() const;
117 
118  // Handle locking/syncing of a lattice in a lattice expression.
119  // <group>
120  virtual Bool lock (FileLocker::LockType, uInt nattempts);
121  virtual void unlock();
123  virtual void resync();
124  // </group>
125 
126 private:
129 };
130 
131 
132 
133 } //# NAMESPACE CASACORE - END
134 
135 #ifndef CASACORE_NO_AUTO_TEMPLATES
136 #include <casacore/lattices/LEL/LELCondition.tcc>
137 #endif //# CASACORE_NO_AUTO_TEMPLATES
138 #endif
Referenced counted pointer for constant data.
Definition: CountedPtr.h:81
LockType
Define the possible lock types.
Definition: FileLocker.h:95
~LELCondition()
Destructor does nothing.
virtual Bool prepareScalarExpr()
Do further preparations (e.g.
virtual Bool lock(FileLocker::LockType, uInt nattempts)
Handle locking/syncing of a lattice in a lattice expression.
CountedPtr< LELInterface< Bool > > pCond_p
Definition: LELCondition.h:128
virtual LELScalar< T > getScalar() const
Recursively evaluate the scalar.
virtual void resync()
virtual void eval(LELArray< T > &result, const Slicer &section) const
Recursively evaluate the expression.
CountedPtr< LELInterface< T > > pExpr_p
Definition: LELCondition.h:127
virtual String className() const
Get class name.
LELCondition(const CountedPtr< LELInterface< T > > &expr, const CountedPtr< LELInterface< Bool > > &cond)
Construct the condition on the given expression.
virtual void unlock()
virtual Bool hasLock(FileLocker::LockType) const
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
unsigned int uInt
Definition: aipstype.h:51
bool Bool
Define the standard types used by Casacore.
Definition: aipstype.h:42