| [169] | 1 | //#---------------------------------------------------------------------------
 | 
|---|
 | 2 | //# SDMathWrapper.cc: Wrapper classes to use CountedPtr
 | 
|---|
 | 3 | //#---------------------------------------------------------------------------
 | 
|---|
 | 4 | //# Copyright (C) 2004
 | 
|---|
 | 5 | //# ATNF
 | 
|---|
 | 6 | //#
 | 
|---|
 | 7 | //# This program is free software; you can redistribute it and/or modify it
 | 
|---|
 | 8 | //# under the terms of the GNU General Public License as published by the Free
 | 
|---|
 | 9 | //# Software Foundation; either version 2 of the License, or (at your option)
 | 
|---|
 | 10 | //# any later version.
 | 
|---|
 | 11 | //#
 | 
|---|
 | 12 | //# This program is distributed in the hope that it will be useful, but
 | 
|---|
 | 13 | //# WITHOUT ANY WARRANTY; without even the implied warranty of
 | 
|---|
 | 14 | //# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General
 | 
|---|
 | 15 | //# Public License for more details.
 | 
|---|
 | 16 | //#
 | 
|---|
 | 17 | //# You should have received a copy of the GNU General Public License along
 | 
|---|
 | 18 | //# with this program; if not, write to the Free Software Foundation, Inc.,
 | 
|---|
 | 19 | //# 675 Massachusetts Ave, Cambridge, MA 02139, USA.
 | 
|---|
 | 20 | //#
 | 
|---|
 | 21 | //# Correspondence concerning this software should be addressed as follows:
 | 
|---|
 | 22 | //#        Internet email: Malte.Marquarding@csiro.au
 | 
|---|
 | 23 | //#        Postal address: Malte Marquarding,
 | 
|---|
 | 24 | //#                        Australia Telescope National Facility,
 | 
|---|
 | 25 | //#                        P.O. Box 76,
 | 
|---|
 | 26 | //#                        Epping, NSW, 2121,
 | 
|---|
 | 27 | //#                        AUSTRALIA
 | 
|---|
 | 28 | //#
 | 
|---|
 | 29 | //# $Id:
 | 
|---|
 | 30 | //#---------------------------------------------------------------------------
 | 
|---|
 | 31 | 
 | 
|---|
 | 32 | 
 | 
|---|
 | 33 | #include "SDMathWrapper.h"
 | 
|---|
| [170] | 34 | #include "SDMath.h"
 | 
|---|
| [169] | 35 | 
 | 
|---|
| [170] | 36 | 
 | 
|---|
| [169] | 37 | using namespace asap;
 | 
|---|
 | 38 | using namespace casa;
 | 
|---|
 | 39 | 
 | 
|---|
 | 40 | SDMemTableWrapper SDMathWrapper::quotient(const SDMemTableWrapper& on,
 | 
|---|
| [244] | 41 |                                           const SDMemTableWrapper& off,
 | 
|---|
 | 42 |                                           Bool preserveContinuum)
 | 
|---|
| [169] | 43 | {
 | 
|---|
| [170] | 44 |     SDMath sdm;
 | 
|---|
| [295] | 45 |     Bool doTSys = True;
 | 
|---|
| [249] | 46 |     return SDMemTableWrapper(sdm.binaryOperate(on.getCP(), off.getCP(), 
 | 
|---|
| [295] | 47 |                              String("QUOTIENT"), preserveContinuum, doTSys));
 | 
|---|
| [169] | 48 | }
 | 
|---|
 | 49 | 
 | 
|---|
 | 50 | 
 | 
|---|
| [249] | 51 | SDMemTableWrapper SDMathWrapper::binaryOperate(const SDMemTableWrapper& left,
 | 
|---|
 | 52 |                                                const SDMemTableWrapper& right,
 | 
|---|
| [295] | 53 |                                                const std::string& op, bool doTSys)
 | 
|---|
| [235] | 54 | {
 | 
|---|
 | 55 |     SDMath sdm;
 | 
|---|
| [249] | 56 |     return SDMemTableWrapper(sdm.binaryOperate(left.getCP(), right.getCP(), 
 | 
|---|
| [295] | 57 |                                                String(op), False, Bool(doTSys)));
 | 
|---|
| [235] | 58 | }
 | 
|---|
 | 59 | 
 | 
|---|
 | 60 | 
 | 
|---|
| [295] | 61 | void SDMathWrapper::scaleInSitu(SDMemTableWrapper& in, float factor, bool doAll, bool doTSys)
 | 
|---|
| [169] | 62 | {
 | 
|---|
 | 63 |   SDMemTable* pIn = in.getPtr();
 | 
|---|
 | 64 |   const uInt what = 0;
 | 
|---|
| [170] | 65 | //
 | 
|---|
 | 66 |   SDMath sdm;
 | 
|---|
| [249] | 67 |   SDMemTable* pOut = sdm.unaryOperate (*pIn, Float(factor), 
 | 
|---|
| [295] | 68 |                                         Bool(doAll), what, Bool(doTSys));
 | 
|---|
| [169] | 69 |   *pIn = *pOut;
 | 
|---|
 | 70 |    delete pOut;
 | 
|---|
 | 71 | }
 | 
|---|
 | 72 | 
 | 
|---|
 | 73 | SDMemTableWrapper SDMathWrapper::scale(const SDMemTableWrapper& in,
 | 
|---|
| [295] | 74 |                                        float factor, bool doAll, bool doTSys)
 | 
|---|
| [169] | 75 | {
 | 
|---|
 | 76 |   const CountedPtr<SDMemTable>& pIn = in.getCP();
 | 
|---|
 | 77 |   const uInt what = 0;
 | 
|---|
| [170] | 78 |   SDMath sdm;
 | 
|---|
| [295] | 79 |   return CountedPtr<SDMemTable>(sdm.unaryOperate(*pIn, Float(factor), Bool(doAll), 
 | 
|---|
 | 80 |                                                  what, Bool (doTSys)));
 | 
|---|
| [169] | 81 | }
 | 
|---|
 | 82 | 
 | 
|---|
 | 83 | 
 | 
|---|
 | 84 | 
 | 
|---|
| [170] | 85 | void SDMathWrapper::addInSitu(SDMemTableWrapper& in, float offset, bool doAll)
 | 
|---|
| [169] | 86 | {
 | 
|---|
 | 87 |   SDMemTable* pIn = in.getPtr();
 | 
|---|
 | 88 |   const uInt what = 1;
 | 
|---|
| [170] | 89 | //
 | 
|---|
 | 90 |   SDMath sdm;
 | 
|---|
| [295] | 91 |   Bool doTSys = False;
 | 
|---|
| [249] | 92 |   SDMemTable* pOut = sdm.unaryOperate (*pIn, Float(offset), 
 | 
|---|
| [295] | 93 |                                         Bool(doAll), what, doTSys);
 | 
|---|
| [169] | 94 |   *pIn = *pOut;
 | 
|---|
 | 95 |    delete pOut;
 | 
|---|
 | 96 | }
 | 
|---|
 | 97 | 
 | 
|---|
 | 98 | SDMemTableWrapper SDMathWrapper::add(const SDMemTableWrapper& in,
 | 
|---|
| [170] | 99 |                                      float offset, bool doAll)
 | 
|---|
| [169] | 100 | {
 | 
|---|
 | 101 |   const CountedPtr<SDMemTable>& pIn = in.getCP();
 | 
|---|
 | 102 |   const uInt what = 1;
 | 
|---|
| [170] | 103 |   SDMath sdm;
 | 
|---|
| [295] | 104 |   Bool doTSys = False;
 | 
|---|
| [249] | 105 |   return CountedPtr<SDMemTable>(sdm.unaryOperate(*pIn, Float(offset),
 | 
|---|
| [295] | 106 |                                                   Bool(doAll), what, doTSys));
 | 
|---|
| [169] | 107 | }
 | 
|---|
 | 108 | 
 | 
|---|
| [178] | 109 | 
 | 
|---|
| [209] | 110 | void SDMathWrapper::smoothInSitu(SDMemTableWrapper& in, 
 | 
|---|
 | 111 |                                  const std::string& kernel, float width,
 | 
|---|
 | 112 |                                  bool doAll)
 | 
|---|
| [171] | 113 | {
 | 
|---|
 | 114 |   SDMemTable* pIn = in.getPtr();
 | 
|---|
 | 115 |   SDMath sdm;
 | 
|---|
| [209] | 116 |   SDMemTable* pOut = sdm.smooth(*pIn, String(kernel), 
 | 
|---|
 | 117 |                                 Float(width), Bool(doAll));
 | 
|---|
| [171] | 118 |   *pIn = *pOut;
 | 
|---|
 | 119 |    delete pOut;
 | 
|---|
 | 120 | }
 | 
|---|
| [169] | 121 | 
 | 
|---|
| [178] | 122 | 
 | 
|---|
| [209] | 123 | SDMemTableWrapper SDMathWrapper::smooth (const SDMemTableWrapper& in, 
 | 
|---|
 | 124 |                                          const std::string& kernel, 
 | 
|---|
| [178] | 125 |                                          float width, bool doAll)
 | 
|---|
| [169] | 126 | {
 | 
|---|
| [171] | 127 |   const CountedPtr<SDMemTable>& pIn = in.getCP();
 | 
|---|
| [170] | 128 |   SDMath sdm;
 | 
|---|
| [209] | 129 |   return CountedPtr<SDMemTable>(sdm.smooth(*pIn, String(kernel), 
 | 
|---|
 | 130 |                                            Float(width), Bool(doAll)));
 | 
|---|
| [169] | 131 | }
 | 
|---|
 | 132 | 
 | 
|---|
 | 133 | 
 | 
|---|
| [171] | 134 | 
 | 
|---|
| [169] | 135 | void SDMathWrapper::binInSitu(SDMemTableWrapper& in, int width)
 | 
|---|
 | 136 | {
 | 
|---|
 | 137 |   SDMemTable* pIn = in.getPtr();
 | 
|---|
| [170] | 138 |   SDMath sdm;
 | 
|---|
 | 139 |   SDMemTable* pOut = sdm.bin (*pIn, Int(width));
 | 
|---|
| [169] | 140 |   *pIn = *pOut;
 | 
|---|
 | 141 |    delete pOut;
 | 
|---|
 | 142 | }
 | 
|---|
 | 143 | 
 | 
|---|
 | 144 | SDMemTableWrapper SDMathWrapper::bin (const SDMemTableWrapper& in,
 | 
|---|
 | 145 |                                       int width)
 | 
|---|
 | 146 | {
 | 
|---|
 | 147 |   const CountedPtr<SDMemTable>& pIn = in.getCP();
 | 
|---|
| [170] | 148 |   SDMath sdm;
 | 
|---|
 | 149 |   return CountedPtr<SDMemTable>(sdm.bin(*pIn, Int(width)));
 | 
|---|
| [169] | 150 | }
 | 
|---|
 | 151 | 
 | 
|---|
| [300] | 152 | void SDMathWrapper::resampleInSitu(SDMemTableWrapper& in, const std::string& method,
 | 
|---|
 | 153 |                                    float width)
 | 
|---|
 | 154 | {
 | 
|---|
 | 155 |   SDMemTable* pIn = in.getPtr();
 | 
|---|
 | 156 |   SDMath sdm;
 | 
|---|
 | 157 |   SDMemTable* pOut = sdm.resample(*pIn, String(method), Float(width));
 | 
|---|
 | 158 |   *pIn = *pOut;
 | 
|---|
 | 159 |    delete pOut;
 | 
|---|
 | 160 | }
 | 
|---|
| [169] | 161 | 
 | 
|---|
| [300] | 162 | SDMemTableWrapper SDMathWrapper::resample (const SDMemTableWrapper& in,
 | 
|---|
 | 163 |                                            const std::string& method, float width)
 | 
|---|
 | 164 | {
 | 
|---|
 | 165 |   const CountedPtr<SDMemTable>& pIn = in.getCP();
 | 
|---|
 | 166 |   SDMath sdm;
 | 
|---|
 | 167 |   return CountedPtr<SDMemTable>(sdm.resample(*pIn, String(method), Float(width)));
 | 
|---|
 | 168 | }
 | 
|---|
 | 169 | 
 | 
|---|
 | 170 | 
 | 
|---|
| [209] | 171 | void SDMathWrapper::averagePolInSitu(SDMemTableWrapper& in, 
 | 
|---|
 | 172 |                                      const std::vector<bool>& mask)
 | 
|---|
| [169] | 173 | {
 | 
|---|
 | 174 |   SDMemTable* pIn = in.getPtr();
 | 
|---|
| [170] | 175 |   SDMath sdm;
 | 
|---|
| [235] | 176 |   Vector<Bool> tMask(mask);
 | 
|---|
 | 177 |   SDMemTable* pOut = sdm.averagePol (*pIn, tMask);
 | 
|---|
| [169] | 178 |   *pIn = *pOut;
 | 
|---|
 | 179 |    delete pOut;
 | 
|---|
 | 180 | }
 | 
|---|
 | 181 | 
 | 
|---|
| [209] | 182 | SDMemTableWrapper SDMathWrapper::averagePol (const SDMemTableWrapper& in,
 | 
|---|
 | 183 |                                              const std::vector<bool>& mask)
 | 
|---|
| [169] | 184 | 
 | 
|---|
 | 185 | {
 | 
|---|
 | 186 |   const CountedPtr<SDMemTable>& pIn = in.getCP();
 | 
|---|
| [170] | 187 |   SDMath sdm;
 | 
|---|
| [235] | 188 |   Vector<Bool> tMask(mask);
 | 
|---|
 | 189 |   return CountedPtr<SDMemTable>(sdm.averagePol(*pIn, tMask));
 | 
|---|
| [169] | 190 | }
 | 
|---|
 | 191 | 
 | 
|---|
 | 192 | 
 | 
|---|
 | 193 | std::vector<float> SDMathWrapper::statistic(const SDMemTableWrapper& in,
 | 
|---|
 | 194 |                                             const std::vector<bool>& mask, 
 | 
|---|
| [235] | 195 |                                             const std::string& which, int row) 
 | 
|---|
| [169] | 196 | {
 | 
|---|
| [170] | 197 |   SDMath sdm;
 | 
|---|
| [235] | 198 |   Vector<Bool> tMask(mask);
 | 
|---|
 | 199 |   return sdm.statistic(in.getCP(), tMask, String(which), Int(row));
 | 
|---|
| [169] | 200 | }
 | 
|---|
| [222] | 201 | 
 | 
|---|
 | 202 | 
 | 
|---|
 | 203 | void SDMathWrapper::convertFluxInSitu(SDMemTableWrapper& in, 
 | 
|---|
 | 204 |                                       float area, float eta, bool doAll)
 | 
|---|
 | 205 | {
 | 
|---|
 | 206 |   SDMemTable* pIn = in.getPtr();
 | 
|---|
 | 207 |   SDMath sdm;
 | 
|---|
 | 208 |   SDMemTable* pOut = sdm.convertFlux (*pIn, Float(area), Float(eta), Bool(doAll));
 | 
|---|
 | 209 |   *pIn = *pOut;
 | 
|---|
 | 210 |   delete pOut;
 | 
|---|
 | 211 | }
 | 
|---|
 | 212 | 
 | 
|---|
 | 213 | 
 | 
|---|
 | 214 | SDMemTableWrapper SDMathWrapper::convertFlux(const SDMemTableWrapper& in, 
 | 
|---|
 | 215 |                                              float area, float eta, bool doAll)
 | 
|---|
 | 216 | {
 | 
|---|
 | 217 |   const CountedPtr<SDMemTable>& pIn = in.getCP();
 | 
|---|
 | 218 |   SDMath sdm;
 | 
|---|
 | 219 |   return CountedPtr<SDMemTable>(sdm.convertFlux(*pIn, Float(area), Float(eta), Bool(doAll)));
 | 
|---|
 | 220 | }
 | 
|---|
 | 221 | 
 | 
|---|
| [227] | 222 | 
 | 
|---|
| [235] | 223 | void SDMathWrapper::gainElevationInSitu(SDMemTableWrapper& in, 
 | 
|---|
 | 224 |                                         const std::vector<float>& coeffs,
 | 
|---|
 | 225 |                                         const string& fileName,
 | 
|---|
| [227] | 226 |                                         const string& method, bool doAll)
 | 
|---|
 | 227 | {
 | 
|---|
 | 228 |   SDMemTable* pIn = in.getPtr();
 | 
|---|
| [235] | 229 |   Vector<Float> tCoeffs(coeffs);
 | 
|---|
| [227] | 230 |   SDMath sdm;
 | 
|---|
| [235] | 231 |   SDMemTable* pOut = sdm.gainElevation(*pIn, tCoeffs, String(fileName), 
 | 
|---|
 | 232 |                                        String(method), Bool(doAll));
 | 
|---|
| [227] | 233 |   *pIn = *pOut;
 | 
|---|
 | 234 |   delete pOut;
 | 
|---|
 | 235 | }
 | 
|---|
 | 236 | 
 | 
|---|
 | 237 | 
 | 
|---|
 | 238 | SDMemTableWrapper SDMathWrapper::gainElevation(const SDMemTableWrapper& in, 
 | 
|---|
| [235] | 239 |                                                const std::vector<float>& coeffs,
 | 
|---|
| [227] | 240 |                                                const string& fileName, 
 | 
|---|
 | 241 |                                                const string& method, bool doAll)
 | 
|---|
 | 242 | {
 | 
|---|
 | 243 |   const CountedPtr<SDMemTable>& pIn = in.getCP();
 | 
|---|
| [235] | 244 |   Vector<Float> tCoeffs(coeffs);
 | 
|---|
| [227] | 245 |   SDMath sdm;
 | 
|---|
| [235] | 246 |   return CountedPtr<SDMemTable>(sdm.gainElevation(*pIn, tCoeffs, String(fileName), 
 | 
|---|
| [227] | 247 |                                                   String(method), Bool(doAll)));
 | 
|---|
 | 248 | }
 | 
|---|
 | 249 | 
 | 
|---|
| [272] | 250 | void SDMathWrapper::velocityAlignmentInSitu (SDMemTableWrapper& in, const std::string& refTime)
 | 
|---|
| [268] | 251 | {
 | 
|---|
 | 252 |   SDMemTable* pIn = in.getPtr();
 | 
|---|
 | 253 |   SDMath sdm;
 | 
|---|
| [272] | 254 |   SDMemTable* pOut = sdm.velocityAlignment(*pIn, String(refTime));
 | 
|---|
| [268] | 255 |   *pIn = *pOut;
 | 
|---|
 | 256 |   delete pOut;
 | 
|---|
 | 257 | }
 | 
|---|
 | 258 | 
 | 
|---|
 | 259 | 
 | 
|---|
| [272] | 260 | SDMemTableWrapper SDMathWrapper::velocityAlignment (const SDMemTableWrapper& in,
 | 
|---|
 | 261 |                                                     const std::string& refTime)
 | 
|---|
| [262] | 262 | {
 | 
|---|
 | 263 |   const CountedPtr<SDMemTable>& pIn = in.getCP();
 | 
|---|
 | 264 |   SDMath sdm;
 | 
|---|
| [272] | 265 |   return CountedPtr<SDMemTable>(sdm.velocityAlignment(*pIn, String(refTime)));
 | 
|---|
| [262] | 266 | }
 | 
|---|
 | 267 | 
 | 
|---|
| [235] | 268 | void SDMathWrapper::opacityInSitu(SDMemTableWrapper& in, float tau, bool doAll)
 | 
|---|
 | 269 | {
 | 
|---|
 | 270 |   SDMemTable* pIn = in.getPtr();
 | 
|---|
 | 271 |   SDMath sdm;
 | 
|---|
 | 272 |   SDMemTable* pOut = sdm.opacity(*pIn, Float(tau), Bool(doAll));
 | 
|---|
 | 273 |   *pIn = *pOut;
 | 
|---|
 | 274 |   delete pOut;
 | 
|---|
 | 275 | }
 | 
|---|
 | 276 | 
 | 
|---|
 | 277 | 
 | 
|---|
 | 278 | SDMemTableWrapper SDMathWrapper::opacity(const SDMemTableWrapper& in, 
 | 
|---|
 | 279 |                                          float tau, bool doAll)
 | 
|---|
 | 280 | {
 | 
|---|
 | 281 |   const CountedPtr<SDMemTable>& pIn = in.getCP();
 | 
|---|
 | 282 |   SDMath sdm;
 | 
|---|
 | 283 |   return CountedPtr<SDMemTable>(sdm.opacity(*pIn, Float(tau), Bool(doAll)));
 | 
|---|
 | 284 | }
 | 
|---|
 | 285 | 
 | 
|---|