Changeset 2289 for trunk/external-alma


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

merged parallel branch to trunk

Location:
trunk/external-alma
Files:
6 edited

Legend:

Unmodified
Added
Removed
  • 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

Note: See TracChangeset for help on using the changeset viewer.