Changeset 234


Ignore:
Timestamp:
01/21/05 12:18:58 (20 years ago)
Author:
kil064
Message:

add binary table operation
add opacity
rework gain-elevation to handle polynomials

Location:
trunk/src
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/SDMath.cc

    r232 r234  
    4242#include <casa/Arrays/MaskArrMath.h>
    4343#include <casa/Arrays/MaskArrLogi.h>
     44#include <casa/BasicMath/Math.h>
    4445#include <casa/Containers/Block.h>
    4546#include <casa/Quanta/QC.h>
     
    5051#include <scimath/Mathematics/Convolver.h>
    5152#include <scimath/Mathematics/InterpolateArray1D.h>
     53#include <scimath/Functionals/Polynomial.h>
    5254
    5355#include <tables/Tables/Table.h>
     
    98100CountedPtr<SDMemTable> SDMath::average(const Block<CountedPtr<SDMemTable> >& in,
    99101                                       const Vector<Bool>& mask, Bool scanAv,
    100                                        const String& weightStr)
     102                                       const String& weightStr) const
    101103//Bool alignVelocity)
    102104//
     
    365367
    366368
    367 CountedPtr<SDMemTable>
    368 SDMath::quotient(const CountedPtr<SDMemTable>& on,
    369                  const CountedPtr<SDMemTable>& off)
    370 {
    371 //
    372 // Compute quotient spectrum
    373 //
    374   const uInt nRows = on->nRow();
    375   if (off->nRow() != nRows) {
     369CountedPtr<SDMemTable> SDMath::quotient(const CountedPtr<SDMemTable>& on,
     370                                        const CountedPtr<SDMemTable>& off,
     371                                        Bool preserveContinuum)  const
     372{
     373  const uInt nRowOn = on->nRow();
     374  const uInt nRowOff = off->nRow();
     375  Bool ok = (nRowOff==1&&nRowOn>0) ||
     376            (nRowOn>0&&nRowOn==nRowOff);
     377  if (!ok) {
     378     throw (AipsError("The reference Scan Table can have one row or the same number of rows as the source Scan Table"));
     379  }
     380
     381// Input Tables and columns
     382
     383  Table tabOn = on->table();
     384  Table tabOff = off->table();
     385  ROArrayColumn<Float> tSysOn(tabOn, "TSYS");
     386  ROArrayColumn<Float> tSysOff(tabOff, "TSYS");
     387
     388// Output Table cloned from input
     389
     390  SDMemTable* pTabOut = new SDMemTable(*on, True);
     391
     392// Loop over rows
     393
     394  MaskedArray<Float>* pMOff = new MaskedArray<Float>(off->rowAsMaskedArray(0));
     395  IPosition shpOff = pMOff->shape();
     396//
     397  Array<Float> tSysOnArr, tSysOffArr;
     398  tSysOn.get(0, tSysOnArr);
     399  tSysOff.get(0, tSysOffArr);
     400//
     401  for (uInt i=0; i<nRowOn; i++) {
     402     MaskedArray<Float> mOn(on->rowAsMaskedArray(i));
     403     IPosition shpOn = mOn.shape();
     404//
     405     if (nRowOff>1) {
     406        delete pMOff;
     407        pMOff = new MaskedArray<Float>(off->rowAsMaskedArray(i));
     408        shpOff = pMOff->shape();
     409        if (!shpOn.isEqual(shpOff)) {
     410           throw(AipsError("on/off data are not conformant"));
     411        }
     412//
     413        tSysOff.get(i, tSysOffArr);
     414        tSysOn.get(i, tSysOnArr);
     415        if (!tSysOnArr.shape().isEqual(tSysOffArr.shape())) {
     416           throw(AipsError("on/off Tsys data are not conformant"));
     417        }
     418//
     419        if (!shpOn.isEqual(tSysOnArr.shape())) {
     420           throw(AipsError("Correlation and Tsys data are not conformant"));
     421        }
     422     }
     423
     424// Compute quotient
     425
     426     MaskedArray<Float> tmp = (mOn-*pMOff);
     427     Array<Float> out(tmp.getArray());
     428     out /= *pMOff;
     429     out *= tSysOffArr;
     430
     431//     MaskedArray<Float> tmp2 = (tSysOnArr * mOn / *pMOff) - tSysOffArr;
     432
     433
     434// Fill container for this row
     435
     436     SDContainer sc = on->getSDContainer(i);
     437//
     438     putDataInSDC(sc, out, tmp.getMask());
     439     sc.putTsys(tSysOffArr);
     440     sc.scanid = i;
     441
     442// Put new row in output Table
     443 
     444     pTabOut->putSDContainer(sc);
     445  }
     446  if (pMOff) delete pMOff;
     447//
     448  return CountedPtr<SDMemTable>(pTabOut);
     449}
     450
     451
     452CountedPtr<SDMemTable> SDMath::simpleBinaryOperate (const CountedPtr<SDMemTable>& left,
     453                                                    const CountedPtr<SDMemTable>& right,
     454                                                    const String& op)  const
     455//
     456// Simple binary Table operators. add, subtract, multiply, divide (what=0,1,2,3)
     457//
     458{
     459
     460// CHeck operator
     461
     462  String op2(op);
     463  op2.upcase();
     464  uInt what = 0;
     465  if (op2=="ADD") {
     466     what = 0;
     467  } else if (op2=="SUB") {
     468     what = 1;
     469  } else if (op2=="MUL") {
     470     what = 2;
     471  } else if (op2=="DIV") {
     472     what = 3;
     473  } else {
     474    throw AipsError("Unrecognized operation");
     475  }
     476
     477// Check rows
     478
     479  const uInt nRows = left->nRow();
     480  if (right->nRow() != nRows) {
    376481     throw (AipsError("Input Scan Tables must have the same number of rows"));
    377482  }
     
    379484// Input Tables and columns
    380485
    381   Table ton = on->table();
    382   Table toff = off->table();
    383   ROArrayColumn<Float> tsys(toff, "TSYS");
    384   ROScalarColumn<Double> mjd(ton, "TIME");
    385   ROScalarColumn<Double> integr(ton, "INTERVAL");
    386   ROScalarColumn<String> srcn(ton, "SRCNAME");
    387   ROArrayColumn<uInt> freqidc(ton, "FREQID");
     486  const Table& tLeft = left->table();
     487  const Table& tRight = right->table();
     488//
     489  ROArrayColumn<Float> tSysLeft(tLeft, "TSYS");
     490  ROArrayColumn<Float> tSysRight(tRight, "TSYS");
    388491
    389492// Output Table cloned from input
    390493
    391   SDMemTable* pTabOut = new SDMemTable(*on, True);
     494  SDMemTable* pTabOut = new SDMemTable(*left, True);
    392495
    393496// Loop over rows
    394497
    395498  for (uInt i=0; i<nRows; i++) {
    396      MaskedArray<Float> mon(on->rowAsMaskedArray(i));
    397      MaskedArray<Float> moff(off->rowAsMaskedArray(i));
    398      IPosition ipon = mon.shape();
    399      IPosition ipoff = moff.shape();
    400 //
    401      Array<Float> tsarr; 
    402      tsys.get(i, tsarr);
    403      if (ipon != ipoff && ipon != tsarr.shape()) {
    404        throw(AipsError("on/off not conformant"));
     499
     500// Get data
     501     MaskedArray<Float> mLeft(left->rowAsMaskedArray(i));
     502     MaskedArray<Float> mRight(right->rowAsMaskedArray(i));
     503//
     504     IPosition shpLeft = mLeft.shape();
     505     IPosition shpRight = mRight.shape();
     506     if (!shpLeft.isEqual(shpRight)) {
     507       throw(AipsError("left/right Scan Tables are not conformant"));
    405508     }
    406509
    407 // Compute quotient
    408 
    409      MaskedArray<Float> tmp = (mon-moff);
    410      Array<Float> out(tmp.getArray());
    411      out /= moff;
    412      out *= tsarr;
    413      Array<Bool> outflagsb = mon.getMask() && moff.getMask();
    414 
    415 // Fill container for this row
    416 
    417      SDContainer sc = on->getSDContainer(i);
    418 //
    419      putDataInSDC(sc, out, outflagsb);
    420      sc.putTsys(tsarr);
    421      sc.scanid = i;
     510// Get TSys
     511
     512     Array<Float> tSysLeftArr, tSysRightArr;
     513     tSysLeft.get(i, tSysLeftArr);
     514     tSysRight.get(i, tSysRightArr);
     515
     516// Make container
     517
     518     SDContainer sc = left->getSDContainer(i);
     519
     520// Operate on data and TSys
     521
     522     if (what==0) {                               
     523        MaskedArray<Float> tmp = mLeft + mRight;
     524        putDataInSDC(sc, tmp.getArray(), tmp.getMask());
     525        sc.putTsys(tSysLeftArr+tSysRightArr);
     526     } else if (what==1) {
     527        MaskedArray<Float> tmp = mLeft - mRight;
     528        putDataInSDC(sc, tmp.getArray(), tmp.getMask());
     529        sc.putTsys(tSysLeftArr-tSysRightArr);
     530     } else if (what==2) {
     531        MaskedArray<Float> tmp = mLeft * mRight;
     532        putDataInSDC(sc, tmp.getArray(), tmp.getMask());
     533        sc.putTsys(tSysLeftArr*tSysRightArr);
     534     } else if (what==3) {
     535        MaskedArray<Float> tmp = mLeft / mRight;
     536        putDataInSDC(sc, tmp.getArray(), tmp.getMask());
     537        sc.putTsys(tSysLeftArr/tSysRightArr);
     538     }
    422539
    423540// Put new row in output Table
     
    432549
    433550std::vector<float> SDMath::statistic(const CountedPtr<SDMemTable>& in,
    434                                      const std::vector<bool>& mask,
    435                                      const String& which)
     551                                     const Vector<Bool>& mask,
     552                                     const String& which, Int row) const
    436553//
    437554// Perhaps iteration over pol/beam/if should be in here
     
    440557{
    441558  const uInt nRow = in->nRow();
    442   std::vector<float> result(nRow);
    443   Vector<Bool> msk(mask);
    444559
    445560// Specify cursor location
     
    450565// Loop over rows
    451566
    452   const uInt nEl = msk.nelements();
    453   for (uInt ii=0; ii < in->nRow(); ++ii) {
     567  const uInt nEl = mask.nelements();
     568  uInt iStart = 0;
     569  uInt iEnd = in->nRow()-1;
     570// 
     571  if (row>=0) {
     572     iStart = row;
     573     iEnd = row;
     574  }
     575//
     576  std::vector<float> result(iEnd-iStart+1);
     577  for (uInt ii=iStart; ii <= iEnd; ++ii) {
    454578
    455579// Get row and deconstruct
     
    468592     MaskedArray<Float> tmp;
    469593     if (m.nelements()==nEl) {
    470        tmp.setData(v,m&&msk);
     594       tmp.setData(v,m&&mask);
    471595     } else {
    472596       tmp.setData(v,m);
     
    475599// Get statistic
    476600
    477      result[ii] = mathutil::statistics(which, tmp);
     601     result[ii-iStart] = mathutil::statistics(which, tmp);
    478602  }
    479603//
     
    482606
    483607
    484 SDMemTable* SDMath::bin(const SDMemTable& in, Int width)
     608SDMemTable* SDMath::bin(const SDMemTable& in, Int width) const
    485609{
    486610  SDHeader sh = in.getSDHeader();
     
    544668
    545669SDMemTable* SDMath::simpleOperate(const SDMemTable& in, Float val, Bool doAll,
    546                                   uInt what)
     670                                  uInt what) const
    547671//
    548672// what = 0   Multiply
     
    610734
    611735
    612 SDMemTable* SDMath::averagePol(const SDMemTable& in, const Vector<Bool>& mask)
     736SDMemTable* SDMath::averagePol(const SDMemTable& in, const Vector<Bool>& mask) const
    613737//
    614738// Average all polarizations together, weighted by variance
     
    745869SDMemTable* SDMath::smooth(const SDMemTable& in,
    746870                           const casa::String& kernelType,
    747                            casa::Float width, Bool doAll)
     871                           casa::Float width, Bool doAll) const
    748872{
    749873
     
    851975
    852976
    853 SDMemTable* SDMath::convertFlux (const SDMemTable& in, Float a, Float eta, Bool doAll)
     977SDMemTable* SDMath::convertFlux (const SDMemTable& in, Float a, Float eta, Bool doAll) const
    854978//
    855979// As it is, this function could be implemented with 'simpleOperate'
     
    8981022// telescope dependent and should be looked// up in a table
    8991023
    900   Float factor = 2.0 * inFac * 1.0e-7 * 1.0e26 * QC::k.getValue(Unit(String("erg/K"))) / a / eta;
     1024  Float factor = 2.0 * inFac * 1.0e-7 * 1.0e26 *
     1025                 QC::k.getValue(Unit(String("erg/K"))) / a / eta;
    9011026  if (toKelvin) {
    9021027    factor = 1.0 / factor;
     
    9491074
    9501075
    951 SDMemTable* SDMath::gainElevation (const SDMemTable& in, const String& fileName,
    952                                    const String& methodStr, Bool doAll)
    953 {
     1076SDMemTable* SDMath::gainElevation (const SDMemTable& in, const Vector<Float>& coeffs,
     1077                                   const String& fileName,
     1078                                   const String& methodStr, Bool doAll) const
     1079{
     1080
     1081// Get header and clone output table
     1082
    9541083  SDHeader sh = in.getSDHeader();
    9551084  SDMemTable* pTabOut = new SDMemTable(in, True);
    956   const uInt nRow = in.nRow();
    957 
    958 // Get elevation from SDMemTable data
     1085
     1086// Get elevation data from SDMemTable and convert to degrees
    9591087
    9601088  const Table& tab = in.table();
    9611089  ROScalarColumn<Float> elev(tab, "ELEVATION");
    962   Vector<Float> xOut = elev.getColumn();
    963   xOut *= Float(180 / C::pi);
    964 //
    965   String col0("ELEVATION");
    966   String col1("FACTOR");
    967 //
    968   return correctFromAsciiTable (pTabOut, in, fileName, col0, col1, methodStr, doAll, xOut);
     1090  Vector<Float> x = elev.getColumn();
     1091  x *= Float(180 / C::pi);
     1092//
     1093  const uInt nC = coeffs.nelements();
     1094  if (fileName.length()>0 && nC>0) {
     1095     throw AipsError("You must choose either polynomial coefficients or an ascii file, not both");
     1096  }
     1097
     1098// Correct
     1099
     1100  if (nC>0 || fileName.length()==0) {
     1101
     1102// Find instrument
     1103
     1104     Bool throwIt = True;
     1105     Instrument inst = SDMemTable::convertInstrument (sh.antennaname, throwIt);
     1106     
     1107// Set polynomial
     1108
     1109     Polynomial<Float>* pPoly = 0;
     1110     Vector<Float> coeff;
     1111     String msg;
     1112     if (nC>0) {
     1113        pPoly = new Polynomial<Float>(nC);
     1114        coeff = coeffs;
     1115        msg = String("user");
     1116     } else {
     1117        if (inst==PKSMULTIBEAM) {
     1118        } else if (inst==PKSSINGLEBEAM) {
     1119        } else if (inst==TIDBINBILLA) {
     1120           pPoly = new Polynomial<Float>(3);
     1121           coeff.resize(3);
     1122           coeff(0) = 3.58788e-1;
     1123           coeff(1) = 2.87243e-2;
     1124           coeff(2) = -3.219093e-4;
     1125        } else if (inst==MOPRA) {
     1126        }
     1127        msg = String("built in");
     1128     }
     1129//
     1130     if (coeff.nelements()>0) {
     1131        pPoly->setCoefficients(coeff);
     1132     } else {
     1133        throw AipsError("There is no known gain-el polynomial known for this instrument");
     1134     }
     1135//
     1136     cerr << "Making polynomial correction with " << msg << " coefficients" << endl;
     1137     const uInt nRow = in.nRow();
     1138     Vector<Float> factor(nRow);
     1139     for (uInt i=0; i<nRow; i++) {
     1140        factor[i] = (*pPoly)(x[i]);
     1141     }
     1142     delete pPoly;
     1143//
     1144     correctFromVector (pTabOut, in, doAll, factor);
     1145  } else {
     1146
     1147// Indicate which columns to read from ascii file
     1148
     1149     String col0("ELEVATION");
     1150     String col1("FACTOR");
     1151
     1152// Read and correct
     1153
     1154     cerr << "Making correction from ascii Table" << endl;
     1155     correctFromAsciiTable (pTabOut, in, fileName, col0, col1,
     1156                            methodStr, doAll, x);
     1157   }
     1158//
     1159   return pTabOut;
    9691160}
    9701161
    9711162 
     1163
     1164SDMemTable* SDMath::opacity (const SDMemTable& in, Float tau, Bool doAll) const
     1165{
     1166
     1167// Get header and clone output table
     1168
     1169  SDHeader sh = in.getSDHeader();
     1170  SDMemTable* pTabOut = new SDMemTable(in, True);
     1171
     1172// Get elevation data from SDMemTable and convert to degrees
     1173
     1174  const Table& tab = in.table();
     1175  ROScalarColumn<Float> elev(tab, "ELEVATION");
     1176  Vector<Float> zDist = elev.getColumn();
     1177  zDist = Float(C::pi_2) - zDist;
     1178
     1179// Generate correction factor
     1180
     1181  const uInt nRow = in.nRow();
     1182  Vector<Float> factor(nRow);
     1183  Vector<Float> factor2(nRow);
     1184  for (uInt i=0; i<nRow; i++) {
     1185     factor[i] = exp(tau)/cos(zDist[i]);
     1186  }
     1187
     1188// Correct
     1189
     1190  correctFromVector (pTabOut, in, doAll, factor);
     1191//
     1192  return pTabOut;
     1193}
     1194
    9721195
    9731196
     
    11831406
    11841407
    1185 SDMemTable* SDMath::correctFromAsciiTable(SDMemTable* pTabOut,
    1186                                           const SDMemTable& in, const String& fileName,
    1187                                           const String& col0, const String& col1,
    1188                                           const String& methodStr, Bool doAll,
    1189                                           const Vector<Float>& xOut)
     1408
     1409void SDMath::correctFromAsciiTable(SDMemTable* pTabOut,
     1410                                   const SDMemTable& in, const String& fileName,
     1411                                   const String& col0, const String& col1,
     1412                                   const String& methodStr, Bool doAll,
     1413                                   const Vector<Float>& xOut) const
    11901414{
    11911415
    11921416// Read gain-elevation ascii file data into a Table.
    11931417
    1194   Table tTable = readAsciiFile (fileName);
    1195 //  tTable.markForDelete();
    1196 //
    1197   return correctFromTable (pTabOut, in, tTable, col0, col1, methodStr, doAll, xOut);
    1198 }
    1199 
    1200 SDMemTable* SDMath::correctFromTable(SDMemTable* pTabOut, const SDMemTable& in, const Table& tTable,
    1201                                      const String& col0, const String& col1,
    1202                                      const String& methodStr, Bool doAll,
    1203                                      const Vector<Float>& xOut)
     1418  Table geTable = readAsciiFile (fileName);
     1419//
     1420  correctFromTable (pTabOut, in, geTable, col0, col1, methodStr, doAll, xOut);
     1421}
     1422
     1423void SDMath::correctFromTable(SDMemTable* pTabOut, const SDMemTable& in,
     1424                              const Table& tTable, const String& col0,
     1425                              const String& col1,
     1426                              const String& methodStr, Bool doAll,
     1427                              const Vector<Float>& xOut) const
    12041428{
    12051429
     
    12221446                                                xIn, yIn, maskIn, method,
    12231447                                                True, True);
    1224 
     1448// Apply
     1449
     1450   correctFromVector (pTabOut, in, doAll, yOut);
     1451}
     1452
     1453
     1454void SDMath::correctFromVector (SDMemTable* pTabOut, const SDMemTable& in,
     1455                                Bool doAll, const Vector<Float>& factor) const
     1456{
    12251457// For operations only on specified cursor location
    12261458
     
    12361468
    12371469    MaskedArray<Float> dataIn(in.rowAsMaskedArray(i));
    1238     Array<Float>& valuesIn = dataIn.getRWArray();              // writable reference
     1470    Array<Float>& valuesIn = dataIn.getRWArray(); 
    12391471    const Array<Bool>& maskIn = dataIn.getMask(); 
    12401472
     
    12441476       VectorIterator<Float> itValues(valuesIn, asap::ChanAxis);
    12451477       while (!itValues.pastEnd()) {
    1246           itValues.vector() *= yOut(i);                    // Writes back into dataIn
    1247 //
     1478          itValues.vector() *= factor(i);
    12481479          itValues.next();
    12491480       }
    12501481    } else {
    12511482       Array<Float> valuesIn2 = valuesIn(start,end);
    1252        valuesIn2 *= yOut(i);
     1483       valuesIn2 *= factor(i);
    12531484       valuesIn(start,end) = valuesIn2;
    12541485    }
     
    12611492    pTabOut->putSDContainer(sc);
    12621493  }
    1263 // 
    1264   return pTabOut;
    1265 }
    1266 
     1494}
     1495
     1496
  • trunk/src/SDMath.h

    r230 r234  
    3636#include <casa/aips.h>
    3737#include <casa/Utilities/CountedPtr.h>
     38#include "SDDefs.h"
    3839
    3940class casa::Table;
     
    6162// Quotient
    6263   casa::CountedPtr<SDMemTable> quotient(const casa::CountedPtr<SDMemTable>& on,
    63                                          const casa::CountedPtr<SDMemTable>& off);
     64                                         const casa::CountedPtr<SDMemTable>& off,
     65                                         casa::Bool preserveContinuum=casa::True) const;
     66
     67// Simple binary Table operators. add, subtract, multiply, divide (what=0,1,2,3)
     68   casa::CountedPtr<SDMemTable> simpleBinaryOperate (const casa::CountedPtr<SDMemTable>& left,
     69                                                     const casa::CountedPtr<SDMemTable>& right,
     70                                                     const casa::String& op) const;
    6471
    6572// Average in time
    6673   casa::CountedPtr<SDMemTable>  average(const casa::Block<casa::CountedPtr<SDMemTable> >& in,
    6774                                         const casa::Vector<casa::Bool>& mask,
    68                                          casa::Bool scanAverage, const casa::String& weightStr);
    69 //                                         casa::Bool alignVelocity);
     75                                         casa::Bool scanAverage,
     76                                         const casa::String& weightStr) const;
     77//                                         casa::Bool alignVelocity) const;
    7078
    71 // Statistics
     79// Statistics. If row<0, all rows are done otherwise, just the
     80// specified row.
    7281   std::vector<float> statistic(const casa::CountedPtr<SDMemTable>& in,
    73                                 const std::vector<bool>& mask, const casa::String& which);
     82                                const casa::Vector<casa::Bool>& mask,
     83                                const casa::String& which, casa::Int row) const;
    7484
    7585// Bin up spectra
    76    SDMemTable* bin(const SDMemTable& in, casa::Int width);
     86   SDMemTable* bin(const SDMemTable& in, casa::Int width) const;
    7787
    7888// Smooth
    7989   SDMemTable* smooth (const SDMemTable& in, const casa::String& kernel,
    80                        casa::Float width, casa::Bool doAll);
     90                       casa::Float width, casa::Bool doAll) const;
    8191
    8292// Flux conversion between Jansky and Kelvin
    8393   SDMemTable* convertFlux (const SDMemTable& in, casa::Float area,
    84                             casa::Float eta, casa::Bool doAll);
     94                            casa::Float eta, casa::Bool doAll) const;
    8595
    8696// Gain-elevation correction
    87    SDMemTable* gainElevation (const SDMemTable& in, const casa::String& fileName,
    88                               const casa::String& method, casa::Bool doAll);
     97   SDMemTable* gainElevation (const SDMemTable& in, const casa::Vector<casa::Float>& coeffs,
     98                              const casa::String& fileName,
     99                              const casa::String& method, casa::Bool doAll) const;
     100
     101// Opacity correction
     102   SDMemTable* opacity (const SDMemTable& in, casa::Float tau, casa::Bool doAll) const;
    89103
    90104// Simple mathematical operations.  what=0 (mul) or 1 (add)
    91105   SDMemTable* simpleOperate(const SDMemTable& in, casa::Float offset,
    92                              casa::Bool doAll, casa::uInt what);
     106                             casa::Bool doAll, casa::uInt what) const;
    93107
    94108// Average polarizations
    95    SDMemTable* averagePol(const SDMemTable& in, const casa::Vector<casa::Bool>& mask);
     109   SDMemTable* averagePol(const SDMemTable& in, const casa::Vector<casa::Bool>& mask) const;
    96110
    97111 private:
     
    143157   void convertInterpString(casa::Int& type, const casa::String& interp) const;
    144158
    145 
    146159// Correct data from an ascii Table
    147    SDMemTable* correctFromAsciiTable(SDMemTable* pTabOut, const SDMemTable& in,
    148                                      const casa::String& fileName,
    149                                      const casa::String& col0, const casa::String& col1,
    150                                      const casa::String& methodStr, casa::Bool doAll,
    151                                      const casa::Vector<casa::Float>& xOut);
     160   void correctFromAsciiTable(SDMemTable* pTabOut, const SDMemTable& in,
     161                              const casa::String& fileName,
     162                              const casa::String& col0, const casa::String& col1,
     163                              const casa::String& methodStr, casa::Bool doAll,
     164                              const casa::Vector<casa::Float>& xOut) const;
    152165
    153166// Correct data from a Table
    154    SDMemTable* correctFromTable(SDMemTable* pTabOut, const SDMemTable& in, const casa::Table& tTable,
    155                                 const casa::String& col0, const casa::String& col1,
    156                                 const casa::String& methodStr, casa::Bool doAll,
    157                                 const casa::Vector<casa::Float>& xOut);
     167   void correctFromTable(SDMemTable* pTabOut, const SDMemTable& in, const casa::Table& tTable,
     168                         const casa::String& col0, const casa::String& col1,
     169                         const casa::String& methodStr, casa::Bool doAll,
     170                         const casa::Vector<casa::Float>& xOut) const;
     171
     172// Correct data from a Vector
     173   void correctFromVector (SDMemTable* pTabOut, const SDMemTable& in,
     174                           casa::Bool doAll, const casa::Vector<casa::Float>& factor) const;
     175
     176
    158177
    159178// Read ascii file into a Table
    160179
    161180   casa::Table readAsciiFile (const casa::String& fileName) const;
    162                    
    163181};
    164182
Note: See TracChangeset for help on using the changeset viewer.