Пример #1
0
int LFIIOSource::readField( double *v, const QString& field, int s, int n ) 
{
  double    dNan = strtod( "nan", NULL );
  fitsfile* ffits;
  bool      bOk;
  int       i;
  int       iCol;
  int       iRead = -1;
  int       iStatus = 0;
  int       iAnyNull;
  int       iResult = 0;

  if( n < 0 ) 
  {
    n = 1; /* n < 0 means read one sample, not frame - irrelavent here */
  }

  if( field == "INDEX" ) 
  {
    for( i = 0; i < n; i++ ) 
    {
      v[i] = (double)( s + i );
    }
    iRead =  n;
  }
  else
  {
    memset( v, 0, n * sizeof( double ) );
    
    bOk = getColNumber( field, &iCol );
    if( bOk ) 
    {
      _valid = false;

      if( !_filename.isNull( ) && !_filename.isEmpty( ) )
      {
        iResult = fits_open_table( &ffits, _filename.ascii( ), READONLY, &iStatus );
        if( iResult == 0 )
        {
          _valid = true;
          
          //
          // copy the data... 
          // N.B. fitsio column indices are 1 based, so we ask for iCol+1 instead of just iCol
          //
          iResult = fits_read_col( ffits, TDOUBLE, iCol+1, s+1, 1, n, &dNan, v, &iAnyNull, &iStatus );
          if( iResult == 0 )
          {
            iRead = n;
          }
          
          iStatus = 0;
          fits_close_file( ffits, &iStatus );      
        }
      }
    }
  }
  
  return iRead;
}
Пример #2
0
bool LFIIOSource::isValidField(const QString& field) const {
  bool bRetVal = false;
  int  iCol;

  if (field == "INDEX") {
    bRetVal = true;
  } else if (field == TIME_FIELD && _bHasTime) {
    bRetVal = true;
  } else {
    bRetVal = getColNumber(field, &iCol);
  }

  return bRetVal;
}