Changeset 2289 for trunk


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

merged parallel branch to trunk

Location:
trunk
Files:
21 edited
2 copied

Legend:

Unmodified
Added
Removed
  • trunk/CMakeLists.txt

    r2280 r2289  
    3636# flags
    3737set( DEFAULT_CXX_FLAGS
    38      "-pipe -Wall -Wextra -Wno-non-template-friend -Wcast-align -Wno-comment -O3" )
     38     "-pipe -Wall -Wextra -Wno-non-template-friend -Wcast-align -Wno-comment -O3 -fno-omit-frame-pointer" )
    3939find_package( OpenMP )
    4040if( OPENMP_FOUND )
  • trunk/external-alma

  • trunk/external-alma/atnf/PKSIO/NRODataset.cc

    r2212 r2289  
    7171  dataid_ = -1 ;
    7272
    73   // OS endian
    74   int i = 1 ;
    75   endian_ = -1 ;
    76   if ( *reinterpret_cast<char *>(&i) == 1 ) {
    77     endian_ = LITTLE_ENDIAN ;
    78     os << LogIO::NORMAL << "LITTLE_ENDIAN " << LogIO::POST ;
    79   }
    80   else {
    81     endian_ = BIG_ENDIAN ;
    82     os << LogIO::NORMAL << "BIG_ENDIAN " << LogIO::POST ;
    83   }
     73  // endian matches
    8474  same_ = -1 ;
    8575
     
    353343vector< vector<double> > NRODataset::getSpectrum()
    354344{
    355   vector< vector<double> > spec;
     345  vector< vector<double> > spec(rowNum_);
    356346
    357347  for ( int i = 0 ; i < rowNum_ ; i++ ) {
    358     spec.push_back( getSpectrum( i ) ) ;
     348    spec[i] = getSpectrum( i ) ;
    359349  }
    360350
     
    370360  //
    371361  // size of spectrum is not chmax_ but dataset_->getNCH() after binding
    372   int nchan = NUMCH ;
    373   vector<double> spec( chmax_, 0.0 ) ;  // spectrum "before" binding
     362  const int nchan = NUMCH ;
    374363  vector<double> bspec( nchan, 0.0 ) ;  // spectrum "after" binding
    375364  // DEBUG
     
    379368  NRODataRecord *record = getRecord( i ) ;
    380369
    381   int bit = IBIT ;   // fixed to 12 bit
     370  const int bit = IBIT ;   // fixed to 12 bit
    382371  double scale = record->SFCTR ;
    383372  // DEBUG
     
    392381    return bspec ;
    393382  }
    394   char *cdata = record->LDATA ;
     383  unsigned char *cdata = (unsigned char *)record->LDATA ;
    395384  vector<double> mscale = MLTSCF ;
    396385  double dscale = mscale[getIndex( i )] ;
     
    400389  // char -> int
    401390  vector<int> ispec( chmax_, 0 ) ;
    402   union SharedMemory {
    403     int ivalue ;
    404     unsigned char cbuf[4] ;
    405   } ;
    406   SharedMemory u ;
     391
     392  static const int shift_right[] = {
     393    4, 0
     394  };
     395  static const int start_pos[] = {
     396    0, 1
     397  };
     398  static const int incr[] = {
     399    0, 3
     400  };
    407401  int j = 0 ;
    408   char ctmp = 0x00 ;
    409   int sw = 0 ;
    410402  for ( int i = 0 ; i < chmax_ ; i++ ) {
     403    int ivalue = 0 ;
    411404    if ( bit == 12 ) {  // 12 bit qunatization
    412       u.ivalue = 0 ;
    413 
    414       if ( endian_ == BIG_ENDIAN ) {
    415         // big endian
    416         if ( sw == 0 ) {
    417           char c0 = (cdata[j] >> 4) & 0x0f ;
    418           char c1 = ((cdata[j] << 4) & 0xf0) | ((cdata[j+1] >> 4) & 0x0f) ;
    419           ctmp = cdata[j+1] & 0x0f ;
    420           u.cbuf[2] = c0 ;
    421           u.cbuf[3] = c1 ;
    422           j += 2 ;
    423           sw = 1 ;
    424         }
    425         else if ( sw == 1 ) {
    426           u.cbuf[2] = ctmp ;
    427           u.cbuf[3] = cdata[j] ;
    428           j++ ;
    429           sw = 0 ;
    430         }
    431       }
    432       else if ( endian_ == LITTLE_ENDIAN ) {
    433         // little endian
    434         if ( sw == 0 ) {
    435           char c0 = (cdata[j] >> 4) & 0x0f ;
    436           char c1 = ((cdata[j] << 4) & 0xf0) | ((cdata[j+1] >> 4) & 0x0f) ;
    437           ctmp = cdata[j+1] & 0x0f ;
    438           u.cbuf[1] = c0 ;
    439           u.cbuf[0] = c1 ;
    440           j += 2 ;
    441           sw = 1 ;
    442         }
    443         else if ( sw == 1 ) {
    444           u.cbuf[1] = ctmp ;
    445           u.cbuf[0] = cdata[j] ;
    446           j++ ;
    447           sw = 0 ;
    448         }
    449       }
    450     }
    451    
    452     ispec[i] = u.ivalue ;
     405      const int idx = j + start_pos[i & 1];
     406      const unsigned tmp = unsigned(cdata[idx]) << 8 | cdata[idx + 1];
     407      ivalue = int((tmp >> shift_right[i & 1]) & 0xFFF);
     408      j += incr[i & 1];
     409    }
     410
     411    ispec[i] = ivalue ;
    453412    if ( ( ispec[i] < 0 ) || ( ispec[i] > 4096 ) ) {
    454413      //cerr << "NRODataset::getSpectrum()  ispec[" << i << "] is out of range" << endl ;
     
    461420  }
    462421
     422  double *const spec = new double[ chmax_ ] ;  // spectrum "before" binding
    463423  // int -> double
    464424  for ( int i = 0 ; i < chmax_ ; i++ ) {
     
    490450      bspec[i] = spec[i] ;
    491451  }
     452  delete[] spec;
    492453
    493454  // DEBUG
  • trunk/external-alma/atnf/PKSIO/NRODataset.h

    r2198 r2289  
    506506
    507507  // OS endian
    508   int endian_ ;
    509508  int same_ ;
    510509
  • trunk/external-alma/atnf/PKSIO/NROReader.cc

    r2261 r2289  
    531531                            String &srcname,
    532532                            String &fieldname,
    533                             Array<Float> &spectra,
    534                             Array<uChar> &flagtra,
    535                             Array<Float> &tsys,
    536                             Array<Double> &direction,
     533                            Vector<Float> &spectra,
     534                            Vector<uChar> &flagtra,
     535                            Vector<Float> &tsys,
     536                            Vector<Double> &direction,
    537537                            Float &azimuth,
    538538                            Float &elevation,
     
    548548                            Float &winddir,     
    549549                            Double &srcvel,
    550                             Array<Double> &propermotion,
     550                            Vector<Double> &propermotion,
    551551                            Vector<Double> &srcdir,
    552                             Array<Double> &scanrate )
    553 {
     552                            Vector<Double> &scanrate )
     553{
     554  static const IPosition oneByOne( 1, 1 );
     555
    554556  // DEBUG
    555557  //cout << "NROReader::getScanInfo()  irow = " << irow << endl ;
     
    589591
    590592  // restfreq (for MOLECULE_ID)
    591   Vector<Double> rf( IPosition( 1, 1 ) ) ;
    592   rf( 0 ) = record->FREQ0 ;
    593   restfreq = rf ;
     593  restfreq.resize( oneByOne ) ;
     594  restfreq[0] = record->FREQ0 ;
    594595  //cout << "restfreq = " << rf << endl ;
    595596
     
    617618  // spectra
    618619  vector<double> spec = dataset_->getSpectrum( irow ) ;
    619   Array<Float> sp( IPosition( 1, spec.size() ) ) ;
     620  spectra.resize( spec.size() ) ;
    620621  int index = 0 ;
    621   for ( Array<Float>::iterator itr = sp.begin() ; itr != sp.end() ; itr++ ) {
     622  for ( Vector<Float>::iterator itr = spectra.begin() ; itr != spectra.end() ; itr++ ) {
    622623    *itr = spec[index++] ;
    623624  }
    624   spectra = sp ;
    625625  //cout << "spec.size() = " << spec.size() << endl ;
    626626 
    627627  // flagtra
    628   Array<uChar> flag( spectra.shape() ) ;
    629   flag.set( 0 ) ;
    630   flagtra = flag ;
     628  flagtra.resize( spectra.nelements() ) ;
     629  flagtra.set( 0 ) ;
    631630  //cout << "flag.size() = " << flag.size() << endl ;
    632631
    633632  // tsys
    634   Array<Float> tmp( IPosition( 1, 1 ), record->TSYS ) ;
    635   tsys = tmp ;
     633  tsys.resize( oneByOne ) ;
     634  tsys[0] = record->TSYS ;
    636635  //cout << "tsys[0] = " << tsys[0] << endl ;
    637636
     
    693692
    694693  // propermotion
    695   Array<Double> srcarr( IPosition( 1, 2 ) ) ;
    696   srcarr = 0.0 ;
    697   propermotion = srcarr ;
    698   //cout << "propermotion = [" << propermotion[0] << ", " << propermotion[1] << "]" << endl ;
     694  // do nothing
    699695
    700696  // srcdir
     
    703699
    704700  // scanrate
    705   Array<Double> sr( IPosition( 1, 1 ) ) ;
    706   sr = 0.0 ;
    707   scanrate = sr ;
    708   //cout << "scanrate = " << scanrate[0] << endl ;
     701  // do nothing
    709702
    710703  return 0 ;
  • trunk/external-alma/atnf/PKSIO/NROReader.h

    r2201 r2289  
    139139                           String &srcname,
    140140                           String &fieldname,
    141                            Array<Float> &spectra,
    142                            Array<uChar> &flagtra,
    143                            Array<Float> &tsys,
    144                            Array<Double> &direction,
     141                           Vector<Float> &spectra,
     142                           Vector<uChar> &flagtra,
     143                           Vector<Float> &tsys,
     144                           Vector<Double> &direction,
    145145                           Float &azimuth,
    146146                           Float &elevation,
     
    156156                           Float &winddir,     
    157157                           Double &srcvel,
    158                            Array<Double> &propermotion,
     158                           Vector<Double> &propermotion,
    159159                           Vector<Double> &srcdir,
    160                            Array<Double> &scanrate ) ;
     160                           Vector<Double> &scanrate ) ;
    161161
    162162  // Get scan type
  • trunk/external-alma/atnf/pks/pks_maths.cc

  • 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.