Changeset 2643 for trunk/external-alma/atnf/PKSIO/NRODataset.cc
- Timestamp:
- 08/24/12 10:52:04 (12 years ago)
- Location:
- trunk
- Files:
-
- 3 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk
- Property svn:mergeinfo changed
/branches/hpc34 (added) merged: 2588-2590,2592,2596-2598,2601,2640,2642
- Property svn:mergeinfo changed
-
trunk/external-alma
- Property svn:mergeinfo changed
/branches/hpc34/external-alma (added) merged: 2588,2590,2596,2598
- Property svn:mergeinfo changed
-
trunk/external-alma/atnf/PKSIO/NRODataset.cc
r2434 r2643 58 58 NRODataset::NRODataset( string name ) 59 59 { 60 LogIO os( LogOrigin( "NRODataset", "NRODataset()", WHERE ) ) ;61 62 60 // memory allocation 63 61 initialize() ; … … 243 241 NRODataRecord *NRODataset::getRecord( int i ) 244 242 { 245 LogIO os( LogOrigin( "NRODataset", "getRecord()", WHERE ) ) ;246 247 243 // DEBUG 248 244 //cout << "NRODataset::getRecord() Start " << i << endl ; 249 245 // 250 246 if ( i < 0 || i >= rowNum_ ) { 247 LogIO os( LogOrigin( "NRODataset", "getRecord()", WHERE ) ) ; 251 248 //cerr << "NRODataset::getRecord() data index out of range." << endl ; 252 249 os << LogIO::SEVERE << "data index " << i << " out of range. return NULL." << LogIO::POST ; … … 267 264 } 268 265 else { 266 LogIO os( LogOrigin( "NRODataset", "getRecord()", WHERE ) ) ; 269 267 //cerr << "NRODataset::getRecord() error while reading data " << i << endl ; 270 268 os << LogIO::SEVERE << "error while reading data " << i << ". return NULL." << LogIO::POST ; … … 278 276 int NRODataset::fillRecord( int i ) 279 277 { 280 LogIO os( LogOrigin( "NRODataset", "fillRecord()", WHERE ) ) ;281 282 278 int status = 0 ; 283 279 … … 295 291 if ( (int)fread( record_, 1, SCAN_HEADER_SIZE, fp_ ) != SCAN_HEADER_SIZE ) { 296 292 //cerr << "Failed to read scan header: " << i << endl ; 293 LogIO os( LogOrigin( "NRODataset", "fillRecord()", WHERE ) ) ; 297 294 os << LogIO::SEVERE << "Failed to read scan header for " << i << "th row." << LogIO::POST ; 298 295 return -1 ; … … 300 297 if ( (int)fread( record_->LDATA, 1, dataLen_, fp_ ) != dataLen_ ) { 301 298 //cerr << "Failed to read spectral data: " << i << endl ; 299 LogIO os( LogOrigin( "NRODataset", "fillRecord()", WHERE ) ) ; 302 300 os << LogIO::SEVERE << "Failed to read spectral data for " << i << "th row." << LogIO::POST ; 303 301 return -1 ; … … 354 352 vector<double> NRODataset::getSpectrum( int i ) 355 353 { 356 LogIO os( LogOrigin( "NRODataset", "getSpectrum", WHERE ) ) ;357 358 354 // DEBUG 359 355 //cout << "NRODataset::getSpectrum() start process (" << i << ")" << endl ; … … 361 357 // size of spectrum is not chmax_ but dataset_->getNCH() after binding 362 358 const int nchan = NUMCH ; 363 vector<double> bspec( nchan, 0.0 ) ; // spectrum "after" binding359 vector<double> spec( chmax_ ) ; // spectrum "before" binding 364 360 // DEBUG 365 361 //cout << "NRODataset::getSpectrum() nchan = " << nchan << " chmax_ = " << chmax_ << endl ; … … 379 375 if ( ( scale == 0.0 ) && ( offset == 0.0 ) ) { 380 376 //cerr << "NRODataset::getSpectrum() zero spectrum (" << i << ")" << endl ; 381 return bspec ; 377 LogIO os( LogOrigin("NRODataset","getSpectrum",WHERE) ) ; 378 os << LogIO::WARN << "zero spectrum for row " << i << LogIO::POST ; 379 if ( spec.size() != nchan ) 380 spec.resize( nchan ) ; 381 for ( vector<double>::iterator i = spec.begin() ; 382 i != spec.end() ; i++ ) 383 *i = 0.0 ; 384 return spec ; 382 385 } 383 386 unsigned char *cdata = (unsigned char *)record->LDATA ; … … 387 390 int chmin = CHMIN ; 388 391 389 // char -> int 390 vector< int> ispec( chmax_, 0) ;392 // char -> int -> double 393 vector<double>::iterator iter = spec.begin() ; 391 394 392 395 static const int shift_right[] = { … … 401 404 int j = 0 ; 402 405 for ( int i = 0 ; i < chmax_ ; i++ ) { 406 // char -> int 403 407 int ivalue = 0 ; 404 408 if ( bit == 12 ) { // 12 bit qunatization 405 const int idx = j + start_pos[i & 1]; 409 const int ialt = i & 1 ; 410 const int idx = j + start_pos[ialt]; 406 411 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 ; 412 if ( ( ispec[i] < 0 ) || ( ispec[i] > 4096 ) ) { 412 ivalue = int((tmp >> shift_right[ialt]) & 0xFFF); 413 j += incr[ialt]; 414 } 415 416 if ( ( ivalue < 0 ) || ( ivalue > 4096 ) ) { 413 417 //cerr << "NRODataset::getSpectrum() ispec[" << i << "] is out of range" << endl ; 414 os << LogIO::SEVERE << "ispec[" << i << "] is out of range" << LogIO::EXCEPTION ; 415 return bspec ; 418 LogIO os( LogOrigin( "NRODataset", "getSpectrum", WHERE ) ) ; 419 os << LogIO::SEVERE << "ivalue for row " << i << " is out of range" << LogIO::EXCEPTION ; 420 if ( spec.size() != nchan ) 421 spec.resize( nchan ) ; 422 for ( vector<double>::iterator i = spec.begin() ; 423 i != spec.end() ; i++ ) 424 *i = 0.0 ; 425 return spec ; 416 426 } 417 427 // DEBUG 418 428 //cout << "NRODataset::getSpectrum() ispec[" << i << "] = " << ispec[i] << endl ; 419 429 // 420 } 421 422 double *const spec = new double[ chmax_ ] ; // spectrum "before" binding 423 // int -> double 424 for ( int i = 0 ; i < chmax_ ; i++ ) { 425 spec[i] = (double)( ispec[i] * scale + offset ) * dscale ; 430 431 // int -> double 432 *iter = (double)( ivalue * scale + offset ) * dscale ; 426 433 // DEBUG 427 //cout << "NRODataset::getSpectrum() spec[" << i << "] = " << spec[i]<< endl ;434 //cout << "NRODataset::getSpectrum() spec[" << i << "] = " << *iter << endl ; 428 435 // 429 } 430 431 // channel binding 436 iter++ ; 437 } 438 439 // channel binding if necessary 432 440 if ( cbind != 1 ) { 433 i nt k = chmin;434 double sum0 = 0;435 double sum1 = 0;441 iter = spec.begin() ; 442 advance( iter, chmin ) ; 443 vector<double>::iterator iter2 = spec.begin() ; 436 444 for ( int i = 0 ; i < nchan ; i++ ) { 437 for ( int j = k ; j < k + cbind ; j++ ) { 438 sum0 += spec[k] ; 439 sum1++ ; 445 double sum0 = 0 ; 446 double sum1 = 0 ; 447 for ( int j = 0 ; j < cbind ; j++ ) { 448 sum0 += *iter ; 449 sum1 += 1.0 ; 450 iter++ ; 440 451 } 441 bspec[i]= sum0 / sum1 ;442 k += cbind;452 *iter2 = sum0 / sum1 ; 453 iter2++ ; 443 454 // DEBUG 444 455 //cout << "NRODataset::getSpectrum() bspec[" << i << "] = " << bspec[i] << endl ; 445 456 // 446 457 } 447 } 448 else { 449 for ( int i = 0 ; i < nchan ; i++ ) 450 bspec[i] = spec[i] ; 451 } 452 delete[] spec; 458 spec.resize( nchan ) ; 459 } 453 460 454 461 // DEBUG … … 456 463 // 457 464 458 return bspec ;465 return spec ; 459 466 } 460 467
Note: See TracChangeset
for help on using the changeset viewer.