00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028 #ifndef LATTICES_LCSLICER_H
00029 #define LATTICES_LCSLICER_H
00030
00031
00032 #include <casacore/casa/aips.h>
00033 #include <casacore/lattices/LRegions/RegionType.h>
00034 #include <casacore/casa/Arrays/Vector.h>
00035 #include <casacore/casa/BasicSL/String.h>
00036
00037 namespace casacore {
00038
00039
00040 class IPosition;
00041 class Slicer;
00042 class TableRecord;
00043
00044
00045
00046
00047
00048
00049
00050
00051
00052
00053
00054
00055
00056
00057
00058
00059
00060
00061
00062
00063
00064
00065
00066
00067
00068
00069
00070
00071
00072
00073
00074
00075
00076
00077
00078
00079
00080
00081
00082
00083
00084 class LCSlicer
00085 {
00086 public:
00087 LCSlicer();
00088
00089
00090
00091
00092
00093
00094
00095
00096
00097
00098
00099
00100
00101
00102
00103 LCSlicer (const Vector<Float>& blc, const Vector<Float>& trc,
00104 Bool fractionalBlcTrc = False,
00105 RegionType::AbsRelType = RegionType::Abs);
00106 LCSlicer (const Vector<Float>& blc, const Vector<Float>& trc,
00107 const Vector<Float>& inc, Bool fractionalBlcTrc = False,
00108 RegionType::AbsRelType = RegionType::Abs);
00109 LCSlicer (const Vector<Float>& blc, const Vector<Float>& trc,
00110 const Vector<Float>& inc,
00111 const Vector<Bool>& fractionalBlc,
00112 const Vector<Bool>& fractionalTrc,
00113 const Vector<Bool>& fractionalInc,
00114 const Vector<Int>& absRelBlc,
00115 const Vector<Int>& absRelTrc);
00116 LCSlicer (const Vector<Double>& blc, const Vector<Double>& trc,
00117 Bool fractionalBlcTrc = False,
00118 RegionType::AbsRelType = RegionType::Abs);
00119 LCSlicer (const Vector<Double>& blc, const Vector<Double>& trc,
00120 const Vector<Double>& inc, Bool fractionalBlcTrc = False,
00121 RegionType::AbsRelType = RegionType::Abs);
00122 LCSlicer (const Vector<Double>& blc, const Vector<Double>& trc,
00123 const Vector<Double>& inc,
00124 const Vector<Bool>& fractionalBlc,
00125 const Vector<Bool>& fractionalTrc,
00126 const Vector<Bool>& fractionalInc,
00127 const Vector<Int>& absRelBlc,
00128 const Vector<Int>& absRelTrc);
00129 LCSlicer (const Slicer& slicer);
00130 LCSlicer (const IPosition& blc, const IPosition& trc,
00131 RegionType::AbsRelType = RegionType::Abs);
00132 LCSlicer (const IPosition& blc, const IPosition& trc,
00133 const IPosition& inc,
00134 RegionType::AbsRelType = RegionType::Abs);
00135 LCSlicer (const IPosition& blc, const IPosition& trc,
00136 const IPosition& inc,
00137 const Vector<Int>& absRelBlc,
00138 const Vector<Int>& absRelTrc);
00139
00140
00141
00142 LCSlicer (const LCSlicer& other);
00143
00144 ~LCSlicer();
00145
00146
00147 LCSlicer& operator= (const LCSlicer& other);
00148
00149
00150
00151
00152
00153
00154 Bool operator== (const LCSlicer& other) const;
00155 Bool operator!= (const LCSlicer& other) const;
00156
00157
00158
00159
00160 Bool isComplete() const;
00161
00162
00163 uInt ndim() const;
00164
00165
00166
00167 const Vector<Float>& blc() const;
00168 const Vector<Float>& trc() const;
00169 const Vector<Float>& inc() const;
00170 Bool isFractional() const;
00171 Bool isAbsolute() const;
00172 Bool isUnspecified() const;
00173 Bool isStrided() const;
00174
00175
00176
00177 static String className();
00178
00179
00180 String type() const;
00181
00182
00183
00184 const String& comment() const;
00185 void setComment (const String& comment);
00186
00187
00188
00189
00190
00191
00192
00193
00194 Slicer toSlicer (const IPosition& referencePixel,
00195 const IPosition& latticeShape) const;
00196 Slicer toSlicer (const Vector<Double>& referencePixel,
00197 const IPosition& latticeShape) const;
00198 Slicer toSlicer (const Vector<Float>& referencePixel,
00199 const IPosition& newLatticeShape) const;
00200
00201
00202
00203 TableRecord toRecord (const String& tableName) const;
00204
00205
00206 static LCSlicer* fromRecord (const TableRecord&,
00207 const String& tablename);
00208
00209 private:
00210
00211 void fillFlags (Bool fractional, Int absRel,
00212 uInt nrblc, uInt nrtrc, uInt nrinc);
00213
00214
00215 void fillFromDouble (const Vector<Double>& blc,
00216 const Vector<Double>& trc,
00217 const Vector<Double>& inc);
00218
00219
00220 void fillFromIPosition (const IPosition& blc,
00221 const IPosition& trc,
00222 const IPosition& inc);
00223
00224
00225
00226
00227 void fill();
00228
00229
00230 Vector<Float> itsBlc;
00231 Vector<Float> itsTrc;
00232 Vector<Float> itsInc;
00233 Vector<Bool> itsFracBlc;
00234 Vector<Bool> itsFracTrc;
00235 Vector<Bool> itsFracInc;
00236 Vector<Int> itsAbsRelBlc;
00237 Vector<Int> itsAbsRelTrc;
00238 Bool itsIsFractional;
00239 Bool itsIsAbsolute;
00240 Bool itsIsUnspecified;
00241 Bool itsIsStrided;
00242 String itsComment;
00243 };
00244
00245
00246 inline Bool LCSlicer::operator!= (const LCSlicer& other) const
00247 {
00248 return (! operator==(other));
00249 }
00250 inline uInt LCSlicer::ndim() const
00251 {
00252 return itsBlc.nelements();
00253 }
00254 inline const Vector<Float>& LCSlicer::blc() const
00255 {
00256 return itsBlc;
00257 }
00258 inline const Vector<Float>& LCSlicer::trc() const
00259 {
00260 return itsTrc;
00261 }
00262 inline const Vector<Float>& LCSlicer::inc() const
00263 {
00264 return itsInc;
00265 }
00266 inline Bool LCSlicer::isFractional() const
00267 {
00268 return itsIsFractional;
00269 }
00270 inline Bool LCSlicer::isAbsolute() const
00271 {
00272 return itsIsAbsolute;
00273 }
00274 inline Bool LCSlicer::isUnspecified() const
00275 {
00276 return itsIsUnspecified;
00277 }
00278 inline Bool LCSlicer::isStrided() const
00279 {
00280 return itsIsStrided;
00281 }
00282 inline const String& LCSlicer::comment() const
00283 {
00284 return itsComment;
00285 }
00286 inline void LCSlicer::setComment (const String& comment)
00287 {
00288 itsComment = comment;
00289 }
00290
00291
00292
00293 }
00294
00295 #endif