Ignore:
Timestamp:
07/29/10 19:13:46 (14 years ago)
Author:
Kana Sugimoto
Message:

New Development: Yes

JIRA Issue: No (test merging alma branch)

Ready for Test: Yes

Interface Changes: Yes

What Interface Changed:

Test Programs:

Put in Release Notes: No

Module(s):

Description:


Location:
branches/mergetest
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • branches/mergetest

  • branches/mergetest/external/atnf/PKSIO/SDFITSreader.cc

    r1737 r1779  
    3838
    3939#include <atnf/pks/pks_maths.h>
    40 #include <atnf/PKSIO/PKSmsg.h>
    4140#include <atnf/PKSIO/MBrecord.h>
    4241#include <atnf/PKSIO/SDFITSreader.h>
    4342
     43#include <casa/Logging/LogIO.h>
     44#include <casa/Quanta/MVTime.h>
    4445#include <casa/math.h>
    4546#include <casa/stdio.h>
     
    6768const double D2R = PI / 180.0;
    6869
     70// Class name
     71const string className = "SDFITSreader" ;
     72
    6973//---------------------------------------------------- SDFITSreader::(statics)
    7074
     
    97101  cEndChan   = 0x0;
    98102  cRefChan   = 0x0;
    99 
    100   // By default, messages are written to stderr.
    101   initMsg();
     103  cPols      = 0x0;
    102104}
    103105
     
    128130        int    &extraSysCal)
    129131{
    130   // Clear the message stack.
    131   clearMsg();
     132  const string methodName = "open()" ;
    132133
    133134  if (cSDptr) {
     
    139140  if (fits_open_file(&cSDptr, sdName, READONLY, &cStatus)) {
    140141    sprintf(cMsg, "ERROR: Failed to open SDFITS file\n       %s", sdName);
    141     logMsg(cMsg);
     142    log(LogOrigin( className, methodName, WHERE ), LogIO::SEVERE, cMsg);
    142143    return 1;
    143144  }
     
    162163
    163164      } else {
    164         logMsg("ERROR: Failed to locate SDFITS binary table.");
     165        log(LogOrigin( className, methodName, WHERE ), LogIO::SEVERE, "Failed to locate SDFITS binary table.");
    165166        close();
    166167        return 1;
     
    201202    cNAxes = 5;
    202203    if (readDim(DATA, 1, &cNAxes, cNAxis)) {
    203       logMsg();
     204      log(LogOrigin( className, methodName, WHERE ), LogIO::SEVERE);
    204205      close();
    205206      return 1;
     
    220221    if (cNAxes < 4) {
    221222      // Need at least four axes (for now).
    222       logMsg("ERROR: DATA array contains fewer than four axes.");
     223      log(LogOrigin( className, methodName, WHERE ), LogIO::SEVERE, "DATA array contains fewer than four axes.");
    223224      close();
    224225      return 1;
    225226    } else if (cNAxes > 5) {
    226227      // We support up to five axes.
    227       logMsg("ERROR: DATA array contains more than five axes.");
     228      log(LogOrigin( className, methodName, WHERE ), LogIO::SEVERE, "DATA array contains more than five axes.");
    228229      close();
    229230      return 1;
     
    236237    findData(DATAXED, "DATAXED", TSTRING);
    237238    if (cData[DATAXED].colnum < 0) {
    238       logMsg("ERROR: DATA array column absent from binary table.");
     239      log(LogOrigin( className, methodName, WHERE ), LogIO::SEVERE, "DATA array column absent from binary table.");
    239240      close();
    240241      return 1;
     
    266267
    267268  if (cStatus) {
    268     logMsg();
     269    log(LogOrigin( className, methodName, WHERE ), LogIO::SEVERE);
    269270    close();
    270271    return 1;
     
    280281  char *timeCRPIX = 0;
    281282  char *beamCRVAL = 0;
     283  char *polCRVAL = 0;
    282284
    283285  cFreqAxis   = -1;
     
    297299    } else if (strncmp(ctype[iaxis], "STOKES", 6) == 0) {
    298300      cStokesAxis = iaxis;
     301      polCRVAL = CRVAL[iaxis];
    299302
    300303    } else if (strncmp(ctype[iaxis], "RA", 2) == 0) {
     
    318321        sprintf(cMsg, "DATA array contains a TIME axis of length %ld.",
    319322          cNAxisTime);
    320         logMsg(cMsg);
     323        //logMsg(cMsg);
     324        log(LogOrigin( className, methodName, WHERE ), LogIO::NORMAL, cMsg);
    321325      }
    322326
     
    337341  }
    338342
     343
    339344  // Check that required axes are present.
    340345  if (cFreqAxis < 0 || cStokesAxis < 0 || cRaAxis < 0 || cDecAxis < 0) {
    341     logMsg("ERROR: Could not find required DATA array axes.");
     346    log(LogOrigin( className, methodName, WHERE ), LogIO::SEVERE, "Could not find required DATA array axes.");
    342347    close();
    343348    return 1;
     
    403408  findData(WINDDIRE, "WINDDIRE", TFLOAT);       // Shared.
    404409
     410  findData(STOKES,    polCRVAL,  TINT);
     411  findData(SIG,       "SIG",     TSTRING);
     412  findData(CAL,       "CAL",     TSTRING);
     413
     414  findData(RVSYS,     "RVSYS",   TDOUBLE);
     415  findData(VFRAME,    "VFRAME",  TDOUBLE);
     416  findData(VELDEF,    "VELDEF",  TSTRING);
     417
    405418  if (cStatus) {
    406     logMsg();
     419    log(LogOrigin( className, methodName, WHERE ), LogIO::SEVERE);
    407420    close();
    408421    return 1;
     
    433446  cCycleNo = 0;
    434447  cLastUTC = 0.0;
     448  for ( int i = 0 ; i < 4 ; i++ ) {
     449    cGLastUTC[i] = 0.0 ;
     450    cGLastScan[i] = -1 ;
     451    cGCycleNo[i] = 0 ;
     452  }
    435453
    436454  // Beam number, 1-relative by default.
     
    536554  fits_get_num_rows(cSDptr, &cNRow, &cStatus);
    537555  if (!cNRow) {
    538     logMsg("ERROR: Table contains no entries.");
     556    log(LogOrigin( className, methodName, WHERE ), LogIO::SEVERE, "Table contains no entries.");
    539557    close();
    540558    return 1;
     
    550568                      &beamNul, beamCol, &anynul, &cStatus)) {
    551569      delete [] beamCol;
    552       logMsg();
     570      log(LogOrigin( className, methodName, WHERE ), LogIO::SEVERE);
    553571      close();
    554572      return 1;
     
    565583      if (beamCol[irow] < cBeam_1rel) {
    566584        delete [] beamCol;
    567         logMsg("ERROR: SDFITS file contains invalid beam number.");
     585        log(LogOrigin( className, methodName, WHERE ), LogIO::SEVERE, "SDFITS file contains invalid beam number.");
    568586        close();
    569587        return 1;
     
    606624                      &IFNul, IFCol, &anynul, &cStatus)) {
    607625      delete [] IFCol;
    608       logMsg();
     626      log(LogOrigin( className, methodName, WHERE ), LogIO::SEVERE);
    609627      close();
    610628      return 1;
     
    621639      if (IFCol[irow] < cIF_1rel) {
    622640        delete [] IFCol;
    623         logMsg("ERROR: SDFITS file contains invalid IF number.");
     641        log(LogOrigin( className, methodName, WHERE ), LogIO::SEVERE, "SDFITS file contains invalid IF number.");
    624642        close();
    625643        return 1;
     
    653671            // Variable dimension array.
    654672            if (readDim(DATA, irow+1, &cNAxes, cNAxis)) {
    655               logMsg();
     673              log(LogOrigin( className, methodName, WHERE ), LogIO::SEVERE);
    656674              close();
    657675              return 1;
     
    681699
    682700          if (readDim(XPOLDATA, irow+1, &nAxis, nAxes)) {
    683             logMsg();
     701            log(LogOrigin( className, methodName, WHERE ), LogIO::SEVERE );
    684702            close();
    685703            return 1;
     
    719737    cNPol[0] = cNIF;
    720738    cNIF = 1;
     739  }
     740
     741  // For GBT data that stores spectra for each polarization in separate rows
     742  if ( cData[STOKES].colnum > 0 ) {
     743    int *stokesCol = new int[cNRow];
     744    int stokesNul = 1;
     745    int   anynul;
     746    if (fits_read_col(cSDptr, TINT, cData[STOKES].colnum, 1, 1, cNRow,
     747                      &stokesNul, stokesCol, &anynul, &cStatus)) {
     748      delete [] stokesCol;
     749      log(LogOrigin( className, methodName, WHERE ), LogIO::SEVERE);
     750      close();
     751      return 1;
     752    }
     753
     754    vector<int> pols ;
     755    pols.push_back( stokesCol[0] ) ;
     756    for ( int i = 0 ; i < cNRow ; i++ ) {
     757      bool pmatch = false ;
     758      for ( uint j = 0 ; j < pols.size() ; j++ ) {
     759        if ( stokesCol[i] == pols[j] ) {
     760          pmatch = true ;
     761          break ;
     762        }
     763      }
     764      if ( !pmatch ) {
     765        pols.push_back( stokesCol[i] ) ;
     766      }
     767    }
     768
     769    cPols = new int[pols.size()] ;
     770    for ( uint i = 0 ; i < pols.size() ; i++ ) {
     771      cPols[i] = pols[i] ;
     772    }
     773
     774    for ( int i = 0 ; i < cNIF ; i++ ) {
     775      cNPol[i] = pols.size() ;
     776    }
     777
     778    delete [] stokesCol ;
    721779  }
    722780
     
    806864        double &bandwidth)
    807865{
     866  const string methodName = "getHeader()" ;
     867 
    808868  // Has the file been opened?
    809869  if (!cSDptr) {
     
    879939
    880940    // Look for VELFRAME, written by earlier versions of Livedata.
     941    //
     942    // Added few more codes currently (as of 2009 Oct) used in the GBT
     943    // SDFITS (based io_sdfits_define.pro of GBTIDL). - TT
    881944    if (readParm("VELFRAME", TSTRING, dopplerFrame)) {  // Additional.
    882945      // No, try digging it out of the CTYPE card (AIPS convention).
     
    890953          // LSR unqualified usually means LSR (kinematic).
    891954          strcpy(dopplerFrame, "LSRK");
     955        } else if (strcmp(dopplerFrame, "LSD") == 0) {
     956          // LSR as a dynamical defintion
     957          strcpy(dopplerFrame, "LSRD");
    892958        } else if (strcmp(dopplerFrame, "HEL") == 0) {
    893959          // Almost certainly barycentric.
    894960          strcpy(dopplerFrame, "BARYCENT");
     961        } else if (strcmp(dopplerFrame, "BAR") == 0) {
     962          // barycentric.
     963          strcpy(dopplerFrame, "BARYCENT");
     964        } else if (strcmp(dopplerFrame, "OBS") == 0) {
     965          // observed or topocentric.
     966          strcpy(dopplerFrame, "TOPO");
     967        } else if (strcmp(dopplerFrame, "GEO") == 0) {
     968          // geocentric
     969          strcpy(dopplerFrame, "GEO");
     970        } else if (strcmp(dopplerFrame, "GAL") == 0) {
     971          // galactic
     972          strcpy(dopplerFrame, "GAL");
     973        } else if (strcmp(dopplerFrame, "LGR") == 0) {
     974          // Local group
     975          strcpy(dopplerFrame, "LGROUP");
     976        } else if (strcmp(dopplerFrame, "CMB") == 0) {
     977          // Cosimic Microwave Backgroup
     978          strcpy(dopplerFrame, "CMB");
    895979        }
    896980      } else {
     
    898982      }
    899983    }
    900 
    901984    // Translate to FITS standard names.
    902985    if (strncmp(dopplerFrame, "TOP", 3) == 0) {
     
    908991    } else if (strncmp(dopplerFrame, "BARY", 4) == 0) {
    909992      strcpy(dopplerFrame, "BARYCENT");
    910     }
    911   }
    912 
     993    } else if (strncmp(dopplerFrame, "GAL", 3) == 0) {
     994      strcpy(dopplerFrame, "GALACTOC");
     995    } else if (strncmp(dopplerFrame, "LGROUP", 6) == 0) {
     996      strcpy(dopplerFrame, "LOCALGRP");
     997    } else if (strncmp(dopplerFrame, "CMB", 3) == 0) {
     998      strcpy(dopplerFrame, "CMBDIPOL");
     999    }
     1000  }
     1001 
    9131002  if (cStatus) {
    914     logMsg();
     1003    log(LogOrigin( className, methodName, WHERE ), LogIO::SEVERE);
    9151004    return 1;
    9161005  }
     
    9221011
    9231012  if (cStatus) {
    924     logMsg();
     1013    log(LogOrigin( className, methodName, WHERE ), LogIO::SEVERE);
    9251014    return 1;
    9261015  }
     
    9381027        double* &endFreq)
    9391028{
     1029  const string methodName = "getFreqInfo()" ;
     1030
    9401031  float  fqRefPix;
    9411032  double fqDelt, fqRefVal;
     
    9521043                      &IFNul, IFCol, &anynul, &cStatus)) {
    9531044      delete [] IFCol;
    954       logMsg();
     1045      log(LogOrigin( className, methodName, WHERE ), LogIO::SEVERE);
    9551046      close();
    9561047      return 1;
     
    10151106        double* &positions)
    10161107{
     1108  const string methodName = "findRange()" ;
     1109
    10171110  // Has the file been opened?
    10181111  if (!cSDptr) {
     
    10361129      delete [] beamCol;
    10371130      delete [] sel;
    1038       logMsg();
     1131      log(LogOrigin( className, methodName, WHERE ), LogIO::SEVERE);
    10391132      return 1;
    10401133    }
     
    10561149      delete [] IFCol;
    10571150      delete [] sel;
    1058       logMsg();
     1151      log(LogOrigin( className, methodName, WHERE ), LogIO::SEVERE);
    10591152      return 1;
    10601153    }
     
    10881181    if (cData[AZIMUTH].colnum  < 0 ||
    10891182        cData[ELEVATIO].colnum < 0) {
    1090       logMsg("WARNING: Azimuth/elevation information absent.");
     1183      log(LogOrigin( className, methodName, WHERE ), LogIO::WARN, "Azimuth/elevation information absent.");
    10911184      cStatus = -1;
    10921185
     
    11151208        cData[FOCUSROT].colnum < 0 ||
    11161209        cData[ELEVATIO].colnum < 0) {
    1117       logMsg("WARNING: ZPA/elevation information absent.");
     1210      log(LogOrigin( className, methodName, WHERE ), LogIO::WARN, "ZPA/elevation information absent.");
    11181211      cStatus = -1;
    11191212
     
    11911284          cData[PARANGLE].colnum < 0 ||
    11921285          cData[FOCUSROT].colnum < 0) {
    1193         logMsg("WARNING: Insufficient information to compute feed-plane\n"
    1194                "         coordinates.");
     1286        log( LogOrigin( className, methodName, WHERE ), LogIO::WARN,
     1287             "Insufficient information to compute feed-plane\n"
     1288             "         coordinates.");
    11951289        cStatus = -1;
    11961290
     
    12411335    nSel = 0;
    12421336    delete [] positions;
    1243     logMsg();
     1337    log(LogOrigin( className, methodName, WHERE ), LogIO::SEVERE);
    12441338    cStatus = 0;
    12451339    return 1;
     
    12571351        MBrecord &mbrec)
    12581352{
     1353  const string methodName = "read()" ;
     1354
    12591355  // Has the file been opened?
    12601356  if (!cSDptr) {
    12611357    return 1;
    12621358  }
    1263 
    12641359  // Find the next selected beam and IF.
    12651360  short iBeam = 0, iIF = 0;
     1361  int iPol = -1 ;
    12661362  while (1) {
    12671363    if (++cTimeIdx > cNAxisTime) {
     
    13211417              sprintf(cMsg, "ALFA cal factors for beam %d: %.3e, %.3e",
    13221418                iBeam+1, sALFAcal[iBeam][0], sALFAcal[iBeam][1]);
    1323               logMsg(cMsg);
     1419              log(LogOrigin( className, methodName, WHERE ), LogIO::NORMAL, cMsg);
     1420              //logMsg(cMsg);
    13241421            }
    13251422          }
    13261423        }
    13271424
     1425        // for GBT SDFITS
     1426        if (cData[STOKES].colnum > 0 ) {
     1427          readData(STOKES, cRow, &iPol ) ;
     1428          for ( int i = 0 ; i < cNPol[iIF] ; i++ ) {
     1429            if ( cPols[i] == iPol ) {
     1430              iPol = i ;
     1431              break ;
     1432            }
     1433          }
     1434        }
    13281435        break;
    13291436      }
     
    13701477  }
    13711478
     1479  if ( iPol != -1 ) {
     1480    if ( mbrec.scanNo != cGLastScan[iPol] ) {
     1481      cGLastScan[iPol] = mbrec.scanNo ;
     1482      cGCycleNo[iPol] = 0 ;
     1483      mbrec.cycleNo = ++cGCycleNo[iPol] ;
     1484    }
     1485    else {
     1486      mbrec.cycleNo = ++cGCycleNo[iPol] ;
     1487    }
     1488  }
     1489
    13721490  readData(EXPOSURE, cRow, &mbrec.exposure);
    13731491
    13741492  // Source identification.
    13751493  readData(OBJECT, cRow, mbrec.srcName);
     1494
     1495  if ( iPol != -1 ) {
     1496    char obsmode[32] ;
     1497    readData( OBSMODE, cRow, obsmode ) ;
     1498    char sig[1] ;
     1499    char cal[1] ;
     1500    readData( SIG, cRow, sig ) ;
     1501    readData( CAL, cRow, cal ) ;
     1502    if ( strstr( obsmode, "PSWITCH" ) != NULL ) {
     1503      // position switch
     1504      strcat( mbrec.srcName, "_p" ) ;
     1505      if ( strstr( obsmode, "PSWITCHON" ) != NULL ) {
     1506        strcat( mbrec.srcName, "s" ) ;
     1507      }
     1508      else if ( strstr( obsmode, "PSWITCHOFF" ) != NULL ) {
     1509        strcat( mbrec.srcName, "r" ) ;
     1510      }
     1511    }
     1512    else if ( strstr( obsmode, "Nod" ) != NULL ) {
     1513      // nod
     1514      strcat( mbrec.srcName, "_n" ) ;
     1515      if ( sig[0] == 'T' ) {
     1516        strcat( mbrec.srcName, "s" ) ;
     1517      }
     1518      else {
     1519        strcat( mbrec.srcName, "r" ) ;
     1520      }
     1521    }
     1522    else if ( strstr( obsmode, "FSWITCH" ) != NULL ) {
     1523      // frequency switch
     1524      strcat( mbrec.srcName, "_f" ) ;
     1525      if ( sig[0] == 'T' ) {
     1526        strcat( mbrec.srcName, "s" ) ;
     1527      }
     1528      else {
     1529        strcat( mbrec.srcName, "r" ) ;
     1530      }
     1531    }
     1532    if ( cal[0] == 'T' ) {
     1533      strcat( mbrec.srcName, "c" ) ;
     1534    }
     1535    else {
     1536      strcat( mbrec.srcName, "o" ) ;
     1537    }
     1538  }
    13761539
    13771540  readData(OBJ_RA,  cRow, &mbrec.srcRA);
     
    14211584  int nPol = cNPol[iIF];
    14221585
     1586  if ( cData[STOKES].colnum > 0 )
     1587    nPol = 1 ;
     1588
    14231589  if (cGetSpectra || cGetXPol) {
    14241590    int nxpol = cGetXPol ? 2*nChan : 0;
     
    14301596  mbrec.nChan[0] = nChan;
    14311597  mbrec.nPol[0]  = nPol;
     1598  mbrec.polNo = iPol ;
    14321599
    14331600  readData(FqRefPix, cRow, mbrec.fqRefPix);
     
    14481615
    14491616  if (cStatus) {
    1450     logMsg();
     1617    log(LogOrigin( className, methodName, WHERE ), LogIO::SEVERE);
    14511618    return 1;
    14521619  }
     
    14851652
    14861653  if (cStatus) {
    1487     logMsg();
     1654    log(LogOrigin( className, methodName, WHERE ), LogIO::SEVERE);
    14881655    return 1;
    14891656  }
     
    15351702
    15361703        if ((status = readDim(DATA, cRow, &naxes, cNAxis))) {
    1537           logMsg();
     1704          log(LogOrigin( className, methodName, WHERE ), LogIO::SEVERE);
    15381705
    15391706        } else if ((status = (naxes != cNAxes))) {
    1540           logMsg("ERROR: DATA array dimensions changed.");
     1707          log(LogOrigin( className, methodName, WHERE ), LogIO::SEVERE, "DATA array dimensions changed.");
    15411708        }
    15421709
     
    15521719          blc, trc, inc, 0, mbrec.spectra[0] + iPol*nChan, &anynul,
    15531720          &cStatus)) {
    1554         logMsg();
     1721        log(LogOrigin( className, methodName, WHERE ), LogIO::SEVERE);
    15551722        delete [] blc;
    15561723        delete [] trc;
     
    16131780            cNAxis, blc, trc, inc, 0, mbrec.flagged[0] + iPol*nChan, &anynul,
    16141781            &cStatus)) {
    1615           logMsg();
     1782          log(LogOrigin( className, methodName, WHERE ), LogIO::SEVERE);
    16161783          delete [] blc;
    16171784          delete [] trc;
     
    16641831    if (fits_read_subset_flt(cSDptr, cData[XPOLDATA].colnum, nAxis, nAxes,
    16651832        blc, trc, inc, 0, mbrec.xpol[0], &anynul, &cStatus)) {
    1666       logMsg();
     1833      log(LogOrigin( className, methodName, WHERE ), LogIO::SEVERE);
    16671834      delete [] blc;
    16681835      delete [] trc;
     
    16951862
    16961863  if (cStatus) {
    1697     logMsg();
     1864    log(LogOrigin( className, methodName, WHERE ), LogIO::SEVERE);
    16981865    return 1;
    16991866  }
     
    17291896  mbrec.windAz    *= D2R;
    17301897
     1898  // For GBT data, source velocity can be evaluated
     1899  if ( cData[RVSYS].colnum > 0 && cData[VFRAME].colnum > 0 ) {
     1900    float vframe;
     1901    readData(VFRAME, cRow, &vframe);
     1902    float rvsys;
     1903    readData(RVSYS,  cRow, &rvsys);
     1904    //mbrec.srcVelocity = rvsys - vframe ;
     1905    mbrec.srcVelocity = rvsys ;
     1906  }
     1907
    17311908  if (cStatus) {
    1732     logMsg();
     1909    log(LogOrigin( className, methodName, WHERE ), LogIO::SEVERE);
    17331910    return 1;
    17341911  }
     
    17561933}
    17571934
    1758 //------------------------------------------------------- SDFITSreader::logMsg
     1935//------------------------------------------------------- SDFITSreader::log
    17591936
    17601937// Log a message.  If the current CFITSIO status value is non-zero, also log
    17611938// the corresponding error message and the CFITSIO message stack.
    17621939
    1763 void SDFITSreader::logMsg(const char *msg)
     1940void SDFITSreader::log(LogOrigin origin, LogIO::Command cmd, const char *msg)
    17641941{
    1765   FITSreader::logMsg(msg);
     1942  LogIO os( origin ) ;
     1943
     1944  os << msg << endl ;
    17661945
    17671946  if (cStatus > 0) {
    17681947    fits_get_errstatus(cStatus, cMsg);
    1769     FITSreader::logMsg(cMsg);
     1948    os << cMsg << endl ;
    17701949
    17711950    while (fits_read_errmsg(cMsg)) {
    1772       FITSreader::logMsg(cMsg);
    1773     }
    1774   }
     1951      os << cMsg << endl ;
     1952    }
     1953  }
     1954  os << LogIO::POST ;
    17751955}
    17761956
     
    21072287  if (cData[TIME].colnum >= 0) {
    21082288    readData(TIME, iRow, &utc);
     2289  } else if (cGBT) {
     2290    Int yy, mm ;
     2291    Double dd, hour, min, sec ;
     2292    sscanf( datobs, "%d-%d-%lfT%lf:%lf:%lf", &yy, &mm, &dd, &hour, &min, &sec ) ;
     2293    dd = dd + ( hour * 3600.0 + min * 60.0 + sec ) / 86400.0 ;
     2294    MVTime mvt( yy, mm, dd ) ;
     2295    dd = mvt.day() ;
     2296    utc = fmod( dd, 1.0 ) * 86400.0 ;
    21092297  } else if (cNAxisTime > 1) {
    21102298    double timeDelt, timeRefPix, timeRefVal;
     
    21532341        short iPol)
    21542342{
     2343  const string methodName = "alfaCal()" ;
     2344
    21552345  int  calOn;
    21562346  char chars[32];
     
    22052395  if (fits_read_subset_flt(cSDptr, cData[DATA].colnum, cNAxes, cNAxis,
    22062396      blc, trc, inc, 0, spectrum, &anynul, &cStatus)) {
    2207     logMsg();
     2397    log(LogOrigin( className, methodName, WHERE ), LogIO::SEVERE);
    22082398    delete [] blc;
    22092399    delete [] trc;
Note: See TracChangeset for help on using the changeset viewer.