Changeset 2289 for trunk/src


Ignore:
Timestamp:
09/08/11 19:35:40 (13 years ago)
Author:
ShinnosukeKawakami
Message:

merged parallel branch to trunk

Location:
trunk/src
Files:
14 edited
2 copied

Legend:

Unmodified
Added
Removed
  • trunk/src

  • trunk/src/CMakeLists.txt

    r1974 r2289  
    2222set( ASAP_SRCS
    2323     ${SRCDIR}/MathUtils.cpp
     24     ${SRCDIR}/TableTraverse.cpp
    2425     ${SRCDIR}/RowAccumulator.cpp
    2526     ${SRCDIR}/Logger.cpp
  • trunk/src/FillerBase.cpp

    r2242 r2289  
    2828    RecordFieldPtr<Int> fitIdCol( row_.record(), "FIT_ID" ) ;
    2929    *fitIdCol = -1 ;
     30
     31    mEntry_.resize( 0 ) ;
     32    mIdx_.resize( 0 ) ;
     33    fEntry_.resize( 0 ) ;
     34    fIdx_.resize( 0 ) ;
     35    wEntry_.resize( 0 ) ;
     36    wIdx_.resize( 0 ) ;
    3037}
    3138
     
    8289{
    8390  /// @todo this has to change when nchan isn't global anymore
    84   uInt id= table_->frequencies().addEntry(refpix, refval, incr);
     91  uInt nEntry = fEntry_.size() ;
     92  Int idx = -1 ;
     93  Vector<Double> entry( 3 ) ;
     94  entry[0] = refpix ;
     95  entry[1] = refval ;
     96  entry[2] = incr ;
     97  for ( uInt i = 0 ; i < nEntry ; i++ ) {
     98    if ( allEQ( entry, fEntry_[i] ) ) {
     99      idx = i ;
     100      break ;
     101    }
     102  }
     103  uInt id ;
     104  if ( idx != -1 )
     105    id = fIdx_[idx] ;
     106  else {
     107    id= table_->frequencies().addEntry(refpix, refval, incr);
     108    RecordFieldPtr<uInt> mfreqidCol(row_.record(), "FREQ_ID");
     109    fEntry_.push_back( entry ) ;
     110    fIdx_.push_back( id ) ;
     111  }
    85112  RecordFieldPtr<uInt> mfreqidCol(row_.record(), "FREQ_ID");
    86113  *mfreqidCol = id;
     
    91118void FillerBase::setMolecule(const Vector<Double>& restfreq)
    92119{
    93   Vector<String> tmp;
    94   uInt id = table_->molecules().addEntry(restfreq, tmp, tmp);
     120  uInt nEntry = mEntry_.size() ;
     121  Int idx = -1 ;
     122  for ( uInt i = 0 ; i < nEntry ; i++ ) {
     123    if ( restfreq.conform( mEntry_[i] ) ) {
     124      if ( allEQ( restfreq, mEntry_[i] ) ) {
     125        idx = i ;
     126        break ;
     127      }
     128    }
     129  }
     130  uInt id ;
     131  if ( idx != -1 )
     132    id = mIdx_[idx] ;
     133  else {
     134    Vector<String> tmp ;
     135    id = table_->molecules().addEntry(restfreq,tmp,tmp) ;
     136    mEntry_.push_back( restfreq ) ;
     137    mIdx_.push_back( id ) ;
     138  }
    95139  RecordFieldPtr<uInt> molidCol(row_.record(), "MOLECULE_ID");
    96140  *molidCol = id;
     
    129173                        Float windspeed, Float windaz)
    130174{
    131     uInt id = table_->weather().addEntry(temperature, pressure,
    132                                          humidity, windspeed, windaz);
    133     RecordFieldPtr<uInt> mweatheridCol(row_.record(), "WEATHER_ID");
    134     *mweatheridCol = id;
     175  uInt nEntry = wEntry_.size() ;
     176  Int idx = -1 ;
     177  Vector<Float> entry( 5 ) ;
     178  entry[0] = temperature ;
     179  entry[1] = pressure ;
     180  entry[2] = humidity ;
     181  entry[3] = windspeed ;
     182  entry[4] = windaz ;
     183  for ( uInt i = 0 ; i < nEntry ; i++ ) {
     184    if ( allEQ( entry, wEntry_[i] ) ) {
     185      idx = i ;
     186      break ;
     187    }
     188  }
     189  uInt id ;
     190  if ( idx != -1 )
     191    id = wIdx_[idx] ;
     192  else {
     193    id = table_->weather().addEntry(temperature, pressure,
     194                                    humidity, windspeed, windaz);
     195    wEntry_.push_back( entry ) ;
     196    wIdx_.push_back( id ) ;
     197  }
     198  RecordFieldPtr<uInt> mweatheridCol(row_.record(), "WEATHER_ID");
     199  *mweatheridCol = id;
    135200}
    136201
     
    187252                             Float windaz)
    188253{
     254  uInt nEntry = wEntry_.size() ;
     255  Int idx = -1 ;
     256  Vector<Float> entry( 5 ) ;
     257  entry[0] = temperature ;
     258  entry[1] = pressure ;
     259  entry[2] = humidity ;
     260  entry[3] = windspeed ;
     261  entry[4] = windaz ;
     262  for ( uInt i = 0 ; i < nEntry ; i++ ) {
     263    if ( allEQ( entry, wEntry_[i] ) ) {
     264      idx = i ;
     265      break ;
     266    }
     267  }
    189268  uInt id ;
    190   Table tab = table_->weather().table() ;
    191   Table subt = tab( tab.col("TEMPERATURE") == temperature \
    192                     && tab.col("PRESSURE") == pressure \
    193                     && tab.col("HUMIDITY") == humidity \
    194                     && tab.col("WINDSPEED") == windspeed \
    195                     && tab.col("WINDAZ") == windaz, 1 ) ;
    196   Int nrow = tab.nrow() ;
    197   Int nrowSel = subt.nrow() ;
    198   if ( nrowSel == 0 ) {
    199     tab.addRow( 1, True ) ;
    200     TableRow row( tab ) ;
    201     TableRecord &rec = row.record() ;
    202     RecordFieldPtr<casa::uInt> rfpi ;
    203     rfpi.attachToRecord( rec, "ID" ) ;
    204     *rfpi = (uInt)nrow ;
    205     RecordFieldPtr<casa::Float> rfp ;
    206     rfp.attachToRecord( rec, "TEMPERATURE" ) ;
    207     *rfp = temperature ;
    208     rfp.attachToRecord( rec, "PRESSURE" ) ;
    209     *rfp = pressure ;
    210     rfp.attachToRecord( rec, "HUMIDITY" ) ;
    211     *rfp = humidity ;
    212     rfp.attachToRecord( rec, "WINDSPEED" ) ;
    213     *rfp = windspeed ;
    214     rfp.attachToRecord( rec, "WINDAZ" ) ;
    215     *rfp = windaz ;
    216     row.put( nrow, rec ) ;
    217     id = (uInt)nrow ;
    218   }
    219   else {
    220     ROTableColumn tc( subt, "ID" ) ;
    221     id = tc.asuInt( 0 ) ;
     269  if ( idx != -1 )
     270    id = wIdx_[idx] ;
     271  else {
     272    Table tab = table_->weather().table() ;
     273    Table subt = tab( tab.col("TEMPERATURE") == temperature     \
     274                      && tab.col("PRESSURE") == pressure        \
     275                      && tab.col("HUMIDITY") == humidity        \
     276                      && tab.col("WINDSPEED") == windspeed      \
     277                      && tab.col("WINDAZ") == windaz, 1 ) ;
     278    Int nrow = tab.nrow() ;
     279    Int nrowSel = subt.nrow() ;
     280    if ( nrowSel == 0 ) {
     281      tab.addRow( 1, True ) ;
     282      TableRow row( tab ) ;
     283      TableRecord &rec = row.record() ;
     284      RecordFieldPtr<casa::uInt> rfpi ;
     285      rfpi.attachToRecord( rec, "ID" ) ;
     286      *rfpi = (uInt)nrow ;
     287      RecordFieldPtr<casa::Float> rfp ;
     288      rfp.attachToRecord( rec, "TEMPERATURE" ) ;
     289      *rfp = temperature ;
     290      rfp.attachToRecord( rec, "PRESSURE" ) ;
     291      *rfp = pressure ;
     292      rfp.attachToRecord( rec, "HUMIDITY" ) ;
     293      *rfp = humidity ;
     294      rfp.attachToRecord( rec, "WINDSPEED" ) ;
     295      *rfp = windspeed ;
     296      rfp.attachToRecord( rec, "WINDAZ" ) ;
     297      *rfp = windaz ;
     298      row.put( nrow, rec ) ;
     299      id = (uInt)nrow ;
     300    }
     301    else {
     302      ROTableColumn tc( subt, "ID" ) ;
     303      id = tc.asuInt( 0 ) ;
     304    }
     305    wEntry_.push_back( entry ) ;
     306    wIdx_.push_back( id ) ;
    222307  }
    223308  RecordFieldPtr<uInt> mweatheridCol(row_.record(), "WEATHER_ID");
  • trunk/src/FillerBase.h

    r2209 r2289  
    2727// STL
    2828#include <string>
     29#include <vector>
    2930// AIPS++
    3031#include <casa/aips.h>
     
    103104    casa::String referenceRx_;
    104105    casa::TableRow row_;
     106 
     107    std::vector< casa::Vector<casa::Double> > mEntry_ ;
     108    std::vector<casa::uInt> mIdx_ ;
     109    std::vector< casa::Vector<casa::Double> > fEntry_ ;
     110    std::vector<casa::uInt> fIdx_ ;
     111    std::vector< casa::Vector<casa::Float> > wEntry_ ;
     112    std::vector<casa::uInt> wIdx_ ;
    105113};
    106114
  • trunk/src/FillerWrapper.h

    r1904 r2289  
    4545      throw(AipsError("File does not exist"));
    4646    }
    47     filler_ = new PKSFiller(stable_);
    48     if (filler_->open(filename, rec)) {
    49       //    if (filler_->open(filename)) {
    50       attached_ = true;
    51       return;
     47    int fileType = dataType( filename ) ;
     48    if ( fileType == 0 ) {
     49      filler_ = new PKSFiller(stable_);
     50      if (filler_->open(filename, rec)) {
     51        attached_ = true;
     52        return;
     53      }
    5254    }
    53     filler_ = new NROFiller(stable_);
    54     if (filler_->open(filename, rec)) {
    55       //    if (filler_->open(filename)) {
    56       attached_ = true;
    57       return;
     55    else if ( fileType == 1 ) {
     56      filler_ = new NROFiller(stable_);
     57      if (filler_->open(filename, rec)) {
     58        attached_ = true;
     59        return;
     60      }
    5861    }
    5962    filler_ = 0;
     
    8184private:
    8285
     86  int dataType( const std::string &filename ) {
     87    int ret = -1 ;
     88    int pks = 0 ;
     89    int nro = 1 ;
     90    casa::File file( filename ) ;
     91    if ( file.isDirectory() )
     92      ret = pks ;
     93    else if ( file.isReadable() ) {
     94      FILE *f = fopen( filename.c_str(), "r") ;
     95      char buf[8] ;
     96      fread( buf, 6, 1, f ) ;
     97      fclose( f ) ;
     98      buf[7]='\0' ;
     99      // NRO data has two types:
     100      //  1) specific binary data for OTF observation
     101      //  2) (pseudo-)FITS data that doesn't have primary HDU
     102      // So, one can distinguish NRO and non-NRO data by examining
     103      // first keyword name.
     104      if ( casa::String( buf ) == "SIMPLE" ) {
     105        ret = pks ;
     106      }
     107      else {
     108        ret = nro ;
     109      }
     110    }
     111    return ret ;
     112  }
     113
    83114  FillerWrapper();
    84115  FillerWrapper(const FillerWrapper&);
  • trunk/src/MSFiller.cpp

    r2260 r2289  
    14181418  // assume that cols is sorted by TIME
    14191419  Bool doInterp = False ;
    1420   //uInt nrow = tcol.nrow() ;
    14211420  uInt nrow = dcol.nrow() ;
    14221421  if ( nrow == 0 )
  • trunk/src/MSFiller.h

    r2258 r2289  
    130130                                 casa::Int &nrow,
    131131                                 casa::Vector<casa::Int> &corrtype ) ;
    132  
     132
    133133  // initialize header
    134134  void initHeader( STHeader &header ) ;
  • trunk/src/NROFiller.cpp

    r2272 r2289  
    100100  String srcname ;
    101101  String fieldname ;
    102   Array<Float> spectra ;
    103   Array<uChar> flagtra ;
    104   Array<Float> tsys ;
    105   Array<Double> direction ;
     102  Vector<Float> spectra ;
     103  Vector<uChar> flagtra ;
     104  Vector<Float> tsys ;
     105  Vector<Double> direction ;
    106106  Float azimuth ;
    107107  Float elevation ;
    108   Float parangle ;
     108  Float parangle = 0.0 ;
    109109  Float opacity ;
    110110  uInt tcalid ;
     
    117117  Float winddir ;
    118118  Double srcvel ;
    119   Array<Double> propermotion ;
     119  Vector<Double> propermotion( 2, 0.0 ) ;
    120120  Vector<Double> srcdir ;
    121   Array<Double> scanrate ;
     121  Vector<Double> scanrate( 2, 0.0 ) ;
    122122  Int rowCount = 0 ;
    123123
     
    126126  Vector<Float> defaultTcal( 1, 1.0 ) ;
    127127  String tcalTime = MVTime( header.utc ).string( MVTime::YMD ) ;
     128
     129  // TCAL subtable rows
     130  setTcal( tcalTime, defaultTcal ) ;
     131
     132  // FOCUS subtable rows
     133  setFocus( parangle ) ;
     134
    128135  for ( Int irow = 0 ; irow < (Int)nRow ; irow++ ) {
    129136    // check scan intent
     
    195202    setMolecule( restfreq ) ;
    196203
    197     // FOCUS subtable row
    198     setFocus( parangle ) ;
    199 
    200204    // WEATHER subtable row
    201205    float p = 7.5 * temperature / ( 273.3 + temperature ) ;
     
    204208    winddir *= C::degree ; // deg->rad
    205209    humidity /= sh ; // P_H2O->relative humidity
    206     setWeather( temperature, pressure, humidity, windvel, winddir ) ;
    207 
    208     // TCAL subtable row
    209     // use default since NRO input is calibrated data
    210     setTcal( tcalTime, defaultTcal ) ;
    211    
     210    setWeather2( temperature, pressure, humidity, windvel, winddir ) ;
    212211
    213212    // set row attributes
    214213    // SPECTRA, FLAGTRA, and TSYS
    215     Vector<Float> spectrum( spectra );
    216     Vector<uChar> flags( flagtra ) ;
    217     Vector<Float> Tsys( tsys ) ;
    218     setSpectrum( spectrum, flags, Tsys ) ;
     214    setSpectrum( spectra, flagtra, tsys ) ;
    219215
    220216    // SCANNO, CYCLENO, IFNO, POLNO, and BEAMNO
    221     //uInt ifno = table_->frequencies().addEntry( (Double)fqs[0], (Double)fqs[1], (Double)fqs[2] ) ;
    222217    setIndex( scanno, cycleno, ifno, polno, beamno ) ;
    223218
     
    226221
    227222    // DIRECTION
    228     Vector<Double> dir( direction ) ;
    229     setDirection(dir, azimuth, elevation ) ;
     223    setDirection( direction, azimuth, elevation ) ;
    230224
    231225    // TIME and INTERVAL
     
    233227
    234228    // SRCNAME, SRCTYPE, FIELDNAME, SRCDIRECTION, SRCPROPERMOTION, and SRCVELOCITY
    235     Vector<Double> propermot( propermotion ) ;
    236     setSource( srcname, srcType, fieldname, srcdir, propermot, srcvel ) ;
     229    setSource( srcname, srcType, fieldname, srcdir, propermotion, srcvel ) ;
    237230
    238231    // SCANRATE
    239     Vector<Double> srate( scanrate ) ;
    240     setScanRate( srate ) ;
     232    setScanRate( scanrate ) ;
    241233
    242234    // OPACITY
  • trunk/src/SConscript

  • trunk/src/STFiller.cpp

    r2201 r2289  
    645645  String srcname ;
    646646  String fieldname ;
    647   Array<Float> spectra ;
    648   Array<uChar> flagtra ;
    649   Array<Float> tsys ;
    650   Array<Double> direction ;
     647  Vector<Float> spectra ;
     648  Vector<uChar> flagtra ;
     649  Vector<Float> tsys ;
     650  Vector<Double> direction ;
    651651  Float azimuth ;
    652652  Float elevation ;
     
    662662  Float winddir ;
    663663  Double srcvel ;
    664   Array<Double> propermotion ;
     664  Vector<Double> propermotion( 2, 0.0 ) ;
    665665  Vector<Double> srcdir ;
    666   Array<Double> scanrate ;
     666  Vector<Double> scanrate( 2, 0.0 ) ;
    667667  for ( i = 0 ; i < imax ; i++ ) {
    668668    string scanType = nreader_->getScanType( i ) ;
  • trunk/src/STFocus.h

    r1586 r2289  
    6565  casa::ScalarColumn<casa::Float> rotationCol_, axisCol_,
    6666    tanCol_,handCol_, parangleCol_,
    67     mountCol_,userCol_, xyphCol_,xyphoffCol_,;
     67    mountCol_,userCol_, xyphCol_,xyphoffCol_;
    6868};
    6969
  • trunk/src/STMath.cpp

    r2278 r2289  
    979979                                              const CountedPtr< Scantable >& caloff, Float tcal )
    980980{
    981 if ( ! calon->conformant(*caloff) ) {
     981  if ( ! calon->conformant(*caloff) ) {
    982982    throw(AipsError("'CAL on' and 'CAL off' scantables are not conformant."));
    983983  }
     
    987987  const Table& tcon = calon->table();
    988988  Vector<Float> tcalout;
    989   Vector<Float> tcalout2;  //debug
     989
     990  std::map<uInt,uInt> tcalIdToRecNoMap;
     991  const Table& calOffTcalTable = caloff->tcal().table();
     992  {
     993    ROScalarColumn<uInt> calOffTcalTable_IDcol(calOffTcalTable, "ID");
     994    const Vector<uInt> tcalIds(calOffTcalTable_IDcol.getColumn());
     995    size_t tcalIdsEnd = tcalIds.nelements();
     996    for (uInt i = 0; i < tcalIdsEnd; i++) {
     997      tcalIdToRecNoMap[tcalIds[i]] = i;
     998    }
     999  }
     1000  ROArrayColumn<Float> calOffTcalTable_TCALcol(calOffTcalTable, "TCAL");
    9901001
    9911002  if ( tout.nrow() != tcon.nrow() ) {
     
    10581069**/
    10591070      // get tcal if input tcal <= 0
    1060       String tcalt;
    10611071      Float tcalUsed;
    10621072      tcalUsed = tcal;
    10631073      if ( tcal <= 0.0 ) {
    1064         caloff->tcal().getEntry(tcalt, tcalout, tcalId);
     1074        uInt tcalRecNo = tcalIdToRecNoMap[tcalId];
     1075        calOffTcalTable_TCALcol.get(tcalRecNo, tcalout);
    10651076//         if (polno<=3) {
    10661077//           tcalUsed = tcalout[polno];
     
    24182429    out->appendToHistoryTable((*it)->history());
    24192430    const Table& tab = (*it)->table();
     2431
     2432    Block<String> cols(3);
     2433    cols[0] = String("FREQ_ID");
     2434    cols[1] = String("MOLECULE_ID");
     2435    cols[2] = String("FOCUS_ID");
     2436
    24202437    TableIterator scanit(tab, "SCANNO");
    24212438    while (!scanit.pastEnd()) {
    2422       TableIterator freqit(scanit.table(), "FREQ_ID");
    2423       while ( !freqit.pastEnd() ) {
    2424         Table thetab = freqit.table();
     2439      ScalarColumn<uInt> thescannocol(scanit.table(),"SCANNO");
     2440      Vector<uInt> thescannos(thescannocol.nrow(),newscanno);
     2441      thescannocol.putColumn(thescannos);
     2442      TableIterator subit(scanit.table(), cols);
     2443      while ( !subit.pastEnd() ) {
    24252444        uInt nrow = tout.nrow();
     2445        Table thetab = subit.table();
     2446        ROTableRow row(thetab);
     2447        Vector<uInt> thecolvals(thetab.nrow());
     2448        ScalarColumn<uInt> thefreqidcol(thetab,"FREQ_ID");
     2449        ScalarColumn<uInt> themolidcol(thetab, "MOLECULE_ID");
     2450        ScalarColumn<uInt> thefocusidcol(thetab,"FOCUS_ID");
     2451        // The selected subset of table should have
     2452        // the equal FREQ_ID, MOLECULE_ID, and FOCUS_ID values.
     2453        const TableRecord& rec = row.get(0);
     2454        // Set the proper FREQ_ID
     2455        Double rv,rp,inc;
     2456        (*it)->frequencies().getEntry(rp, rv, inc, rec.asuInt("FREQ_ID"));
     2457        uInt id;
     2458        id = out->frequencies().addEntry(rp, rv, inc);
     2459        thecolvals = id;
     2460        thefreqidcol.putColumn(thecolvals);
     2461        // Set the proper MOLECULE_ID
     2462        Vector<String> name,fname;Vector<Double> rf;
     2463        (*it)->molecules().getEntry(rf, name, fname, rec.asuInt("MOLECULE_ID"));
     2464        id = out->molecules().addEntry(rf, name, fname);
     2465        thecolvals = id;
     2466        themolidcol.putColumn(thecolvals);
     2467        // Set the proper FOCUS_ID
     2468        Float fpa,frot,fax,ftan,fhand,fmount,fuser, fxy, fxyp;
     2469        (*it)->focus().getEntry(fpa, fax, ftan, frot, fhand, fmount,fuser,
     2470                                fxy, fxyp, rec.asuInt("FOCUS_ID"));
     2471        id = out->focus().addEntry(fpa, fax, ftan, frot, fhand, fmount,fuser,
     2472                                   fxy, fxyp);
     2473        thecolvals = id;
     2474        thefocusidcol.putColumn(thecolvals);
     2475
    24262476        tout.addRow(thetab.nrow());
    24272477        TableCopy::copyRows(tout, thetab, nrow, 0, thetab.nrow());
    2428         ROTableRow row(thetab);
    2429         for ( uInt i=0; i<thetab.nrow(); ++i) {
    2430           uInt k = nrow+i;
    2431           scannocol.put(k, newscanno);
    2432           const TableRecord& rec = row.get(i);
    2433           Double rv,rp,inc;
    2434           (*it)->frequencies().getEntry(rp, rv, inc, rec.asuInt("FREQ_ID"));
    2435           uInt id;
    2436           id = out->frequencies().addEntry(rp, rv, inc);
    2437           freqidcol.put(k,id);
    2438           //String name,fname;Double rf;
    2439           Vector<String> name,fname;Vector<Double> rf;
    2440           (*it)->molecules().getEntry(rf, name, fname, rec.asuInt("MOLECULE_ID"));
    2441           id = out->molecules().addEntry(rf, name, fname);
    2442           molidcol.put(k, id);
    2443           Float fpa,frot,fax,ftan,fhand,fmount,fuser, fxy, fxyp;
    2444           (*it)->focus().getEntry(fpa, fax, ftan, frot, fhand,
    2445                                   fmount,fuser, fxy, fxyp,
    2446                                   rec.asuInt("FOCUS_ID"));
    2447           id = out->focus().addEntry(fpa, fax, ftan, frot, fhand,
    2448                                      fmount,fuser, fxy, fxyp);
    2449           focusidcol.put(k, id);
    2450         }
    2451         ++freqit;
     2478
     2479        ++subit;
    24522480      }
    24532481      ++newscanno;
  • trunk/src/STTcal.cpp

    r1391 r2289  
    120120void STTcal::getEntry( String& time, Vector<Float>& tcal, uInt id )
    121121{
    122   Table t = table_(table_.col("ID") == Int(id) );
     122  Table t = table_(table_.col("ID") == Int(id),1);
    123123  if (t.nrow() == 0 ) {
    124124    throw(AipsError("STTcal::getEntry - id out of range"));
  • trunk/src/Templates.cpp

    r1819 r2289  
    8181
    8282//template void convertArray<Bool, uChar>(Array<Bool> &, Array<uChar> const &);
    83 template void convertArray<uChar, Bool>(Array<uChar> &, Array<Bool> const &);
     83template void casa::convertArray<uChar, Bool>(Array<uChar> &, Array<Bool> const &);
    8484
    85 template Array<Float>& operator/=<Float>(Array<Float>&, MaskedArray<Float> const&);
    86 template MaskedArray<Float> const& operator*=<Float>(MaskedArray<Float> const&, Float const&);
    87 template MaskedArray<Float> const& operator*=<Float>(MaskedArray<Float> const&, Array<Float> const&);
    88 template MaskedArray<Float> const& operator/=<Float>(MaskedArray<Float> const&, Float const&);
    89 template MaskedArray<Float> operator+<Float>(MaskedArray<Float> const&, MaskedArray<Float> const&);
    90 template MaskedArray<Float> operator-<Float>(MaskedArray<Float> const&, MaskedArray<Float> const&);
    91 template MaskedArray<Float> operator-<Float>(MaskedArray<Float> const&, Array<Float> const&);
     85template Array<Float>& casa::operator/=<Float>(Array<Float>&, MaskedArray<Float> const&);
     86template MaskedArray<Float> const& casa::operator*=<Float>(MaskedArray<Float> const&, Float const&);
     87template MaskedArray<Float> const& casa::operator*=<Float>(MaskedArray<Float> const&, Array<Float> const&);
     88template MaskedArray<Float> const& casa::operator/=<Float>(MaskedArray<Float> const&, Float const&);
     89template MaskedArray<Float> casa::operator+<Float>(MaskedArray<Float> const&, MaskedArray<Float> const&);
     90template MaskedArray<Float> casa::operator-<Float>(MaskedArray<Float> const&, MaskedArray<Float> const&);
     91template MaskedArray<Float> casa::operator-<Float>(MaskedArray<Float> const&, Array<Float> const&);
    9292
    93 template MaskedArray<Float> operator/<Float>(MaskedArray<Float> const&, MaskedArray<Float> const&);
     93template MaskedArray<Float> casa::operator/<Float>(MaskedArray<Float> const&, MaskedArray<Float> const&);
    9494
    95 template MaskedArray<Float> operator*<Float>(MaskedArray<Float> const&, MaskedArray<Float> const&);
    96 template MaskedArray<Float> operator*<Float>(MaskedArray<Float> const&, Array<Float> const&);
    97 template MaskedArray<Float> operator*<Float>(Array<Float> const&, MaskedArray<Float> const&);
    98 template MaskedArray<Float> operator*<Float>(Float const&, MaskedArray<Float> const&);
    99 template Float stddev<Float>(MaskedArray<Float> const&);
    100 template Float median<Float>(MaskedArray<Float> const&, Bool, Bool);
    101 template Float sumsquares<Float>(MaskedArray<Float> const&);
    102 template Float avdev<Float>(MaskedArray<Float> const&);
     95template MaskedArray<Float> casa::operator*<Float>(MaskedArray<Float> const&, MaskedArray<Float> const&);
     96template MaskedArray<Float> casa::operator*<Float>(MaskedArray<Float> const&, Array<Float> const&);
     97template MaskedArray<Float> casa::operator*<Float>(Array<Float> const&, MaskedArray<Float> const&);
     98template MaskedArray<Float> casa::operator*<Float>(Float const&, MaskedArray<Float> const&);
     99template Float casa::stddev<Float>(MaskedArray<Float> const&);
     100template Float casa::median<Float>(MaskedArray<Float> const&, Bool, Bool);
     101template Float casa::sumsquares<Float>(MaskedArray<Float> const&);
     102template Float casa::avdev<Float>(MaskedArray<Float> const&);
    103103
    104104template void LatticeUtilities::bin(MaskedArray<float>&, MaskedArray<float> const&, uInt, uInt);
Note: See TracChangeset for help on using the changeset viewer.