Changeset 234
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/SDMath.cc
r232 r234 42 42 #include <casa/Arrays/MaskArrMath.h> 43 43 #include <casa/Arrays/MaskArrLogi.h> 44 #include <casa/BasicMath/Math.h> 44 45 #include <casa/Containers/Block.h> 45 46 #include <casa/Quanta/QC.h> … … 50 51 #include <scimath/Mathematics/Convolver.h> 51 52 #include <scimath/Mathematics/InterpolateArray1D.h> 53 #include <scimath/Functionals/Polynomial.h> 52 54 53 55 #include <tables/Tables/Table.h> … … 98 100 CountedPtr<SDMemTable> SDMath::average(const Block<CountedPtr<SDMemTable> >& in, 99 101 const Vector<Bool>& mask, Bool scanAv, 100 const String& weightStr) 102 const String& weightStr) const 101 103 //Bool alignVelocity) 102 104 // … … 365 367 366 368 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) { 369 CountedPtr<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 452 CountedPtr<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) { 376 481 throw (AipsError("Input Scan Tables must have the same number of rows")); 377 482 } … … 379 484 // Input Tables and columns 380 485 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"); 388 491 389 492 // Output Table cloned from input 390 493 391 SDMemTable* pTabOut = new SDMemTable(* on, True);494 SDMemTable* pTabOut = new SDMemTable(*left, True); 392 495 393 496 // Loop over rows 394 497 395 498 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/offnot 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")); 405 508 } 406 509 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 } 422 539 423 540 // Put new row in output Table … … 432 549 433 550 std::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 436 553 // 437 554 // Perhaps iteration over pol/beam/if should be in here … … 440 557 { 441 558 const uInt nRow = in->nRow(); 442 std::vector<float> result(nRow);443 Vector<Bool> msk(mask);444 559 445 560 // Specify cursor location … … 450 565 // Loop over rows 451 566 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) { 454 578 455 579 // Get row and deconstruct … … 468 592 MaskedArray<Float> tmp; 469 593 if (m.nelements()==nEl) { 470 tmp.setData(v,m&&m sk);594 tmp.setData(v,m&&mask); 471 595 } else { 472 596 tmp.setData(v,m); … … 475 599 // Get statistic 476 600 477 result[ii ] = mathutil::statistics(which, tmp);601 result[ii-iStart] = mathutil::statistics(which, tmp); 478 602 } 479 603 // … … 482 606 483 607 484 SDMemTable* SDMath::bin(const SDMemTable& in, Int width) 608 SDMemTable* SDMath::bin(const SDMemTable& in, Int width) const 485 609 { 486 610 SDHeader sh = in.getSDHeader(); … … 544 668 545 669 SDMemTable* SDMath::simpleOperate(const SDMemTable& in, Float val, Bool doAll, 546 uInt what) 670 uInt what) const 547 671 // 548 672 // what = 0 Multiply … … 610 734 611 735 612 SDMemTable* SDMath::averagePol(const SDMemTable& in, const Vector<Bool>& mask) 736 SDMemTable* SDMath::averagePol(const SDMemTable& in, const Vector<Bool>& mask) const 613 737 // 614 738 // Average all polarizations together, weighted by variance … … 745 869 SDMemTable* SDMath::smooth(const SDMemTable& in, 746 870 const casa::String& kernelType, 747 casa::Float width, Bool doAll) 871 casa::Float width, Bool doAll) const 748 872 { 749 873 … … 851 975 852 976 853 SDMemTable* SDMath::convertFlux (const SDMemTable& in, Float a, Float eta, Bool doAll) 977 SDMemTable* SDMath::convertFlux (const SDMemTable& in, Float a, Float eta, Bool doAll) const 854 978 // 855 979 // As it is, this function could be implemented with 'simpleOperate' … … 898 1022 // telescope dependent and should be looked// up in a table 899 1023 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; 901 1026 if (toKelvin) { 902 1027 factor = 1.0 / factor; … … 949 1074 950 1075 951 SDMemTable* SDMath::gainElevation (const SDMemTable& in, const String& fileName, 952 const String& methodStr, Bool doAll) 953 { 1076 SDMemTable* 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 954 1083 SDHeader sh = in.getSDHeader(); 955 1084 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 959 1087 960 1088 const Table& tab = in.table(); 961 1089 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; 969 1160 } 970 1161 971 1162 1163 1164 SDMemTable* 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 972 1195 973 1196 … … 1183 1406 1184 1407 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 1409 void 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 1190 1414 { 1191 1415 1192 1416 // Read gain-elevation ascii file data into a Table. 1193 1417 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 1203 const Vector<Float>& xOut)1418 Table geTable = readAsciiFile (fileName); 1419 // 1420 correctFromTable (pTabOut, in, geTable, col0, col1, methodStr, doAll, xOut); 1421 } 1422 1423 void 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 1204 1428 { 1205 1429 … … 1222 1446 xIn, yIn, maskIn, method, 1223 1447 True, True); 1224 1448 // Apply 1449 1450 correctFromVector (pTabOut, in, doAll, yOut); 1451 } 1452 1453 1454 void SDMath::correctFromVector (SDMemTable* pTabOut, const SDMemTable& in, 1455 Bool doAll, const Vector<Float>& factor) const 1456 { 1225 1457 // For operations only on specified cursor location 1226 1458 … … 1236 1468 1237 1469 MaskedArray<Float> dataIn(in.rowAsMaskedArray(i)); 1238 Array<Float>& valuesIn = dataIn.getRWArray(); // writable reference1470 Array<Float>& valuesIn = dataIn.getRWArray(); 1239 1471 const Array<Bool>& maskIn = dataIn.getMask(); 1240 1472 … … 1244 1476 VectorIterator<Float> itValues(valuesIn, asap::ChanAxis); 1245 1477 while (!itValues.pastEnd()) { 1246 itValues.vector() *= yOut(i); // Writes back into dataIn 1247 // 1478 itValues.vector() *= factor(i); 1248 1479 itValues.next(); 1249 1480 } 1250 1481 } else { 1251 1482 Array<Float> valuesIn2 = valuesIn(start,end); 1252 valuesIn2 *= yOut(i);1483 valuesIn2 *= factor(i); 1253 1484 valuesIn(start,end) = valuesIn2; 1254 1485 } … … 1261 1492 pTabOut->putSDContainer(sc); 1262 1493 } 1263 // 1264 return pTabOut; 1265 } 1266 1494 } 1495 1496 -
trunk/src/SDMath.h
r230 r234 36 36 #include <casa/aips.h> 37 37 #include <casa/Utilities/CountedPtr.h> 38 #include "SDDefs.h" 38 39 39 40 class casa::Table; … … 61 62 // Quotient 62 63 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; 64 71 65 72 // Average in time 66 73 casa::CountedPtr<SDMemTable> average(const casa::Block<casa::CountedPtr<SDMemTable> >& in, 67 74 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; 70 78 71 // Statistics 79 // Statistics. If row<0, all rows are done otherwise, just the 80 // specified row. 72 81 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; 74 84 75 85 // Bin up spectra 76 SDMemTable* bin(const SDMemTable& in, casa::Int width) ;86 SDMemTable* bin(const SDMemTable& in, casa::Int width) const; 77 87 78 88 // Smooth 79 89 SDMemTable* smooth (const SDMemTable& in, const casa::String& kernel, 80 casa::Float width, casa::Bool doAll) ;90 casa::Float width, casa::Bool doAll) const; 81 91 82 92 // Flux conversion between Jansky and Kelvin 83 93 SDMemTable* convertFlux (const SDMemTable& in, casa::Float area, 84 casa::Float eta, casa::Bool doAll) ;94 casa::Float eta, casa::Bool doAll) const; 85 95 86 96 // 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; 89 103 90 104 // Simple mathematical operations. what=0 (mul) or 1 (add) 91 105 SDMemTable* simpleOperate(const SDMemTable& in, casa::Float offset, 92 casa::Bool doAll, casa::uInt what) ;106 casa::Bool doAll, casa::uInt what) const; 93 107 94 108 // 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; 96 110 97 111 private: … … 143 157 void convertInterpString(casa::Int& type, const casa::String& interp) const; 144 158 145 146 159 // Correct data from an ascii Table 147 SDMemTable*correctFromAsciiTable(SDMemTable* pTabOut, const SDMemTable& in,148 149 150 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; 152 165 153 166 // 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 158 177 159 178 // Read ascii file into a Table 160 179 161 180 casa::Table readAsciiFile (const casa::String& fileName) const; 162 163 181 }; 164 182
Note:
See TracChangeset
for help on using the changeset viewer.