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; }
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; }