Changeset 16944


Ignore:
Timestamp:
07/02/13 10:22:44 (11 years ago)
Author:
lyard
Message:
Fixed FITS conformance issue for .fz files when numrows=0
File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/FACT++/src/fitsCompressor.cc

    r16898 r16944  
    424424        bool setHeaderKey(const HeaderEntry&);
    425425
     426        bool changeHeaderKey(const string& origName, const string& newName);
     427
    426428        ///@brief open a new fits file
    427429        bool open(const string& fileName, const string& tableName="Data");
     
    931933}
    932934
     935bool CompressedFitsWriter::changeHeaderKey(const string& origName, const string& newName)
     936{
     937    for (vector<HeaderEntry>::iterator it=_header.begin(); it != _header.end(); it++)
     938    {
     939        if (it->key() == origName)
     940        {
     941            (*it) = HeaderEntry(newName, it->value(), it->comment());
     942            _headerFlushed = false;
     943            return true;
     944        }
     945    }
     946    for (vector<HeaderEntry>::iterator it=_defaultHeader.begin(); it != _defaultHeader.end(); it++)
     947    {
     948        if (it->key() == origName)
     949        {
     950            (*it) = HeaderEntry(newName, it->value(), it->comment());
     951            _headerFlushed = false;
     952            return true;
     953        }
     954    }
     955    return false;
     956}
    933957/****************************************************************
    934958 *              OPEN
     
    11341158    else
    11351159    {
    1136         setHeaderKey(HeaderEntry("NAXIS1", _rowWidth, "width of table in bytes"));
     1160        setHeaderKey(HeaderEntry("NAXIS1", _columns.size()*2*sizeof(int64_t), "width of table in bytes"));
    11371161        setHeaderKey(HeaderEntry("NAXIS2", 0, ""));
    11381162        setHeaderKey(HeaderEntry("TFIELDS", _columns.size(), "number of fields in each row"));
    11391163        setHeaderKey(HeaderEntry("PCOUNT", 0, "size of special data area"));
     1164        changeHeaderKey("THEAP", "ZHEAP");
    11401165    }
    11411166    ostringstream str;
     
    18491874    Checksum rawsum;
    18501875    //Convert each row one after the other
     1876    ostringstream wrongChannels;
     1877    map<int, int> wrongChannelsMap;
     1878    for (uint32_t i=0;i<1440;i++)
     1879        wrongChannelsMap[i] = 0;
    18511880    for (uint32_t i=0;i<inFile.GetNumRows();i++)
    18521881    {
     
    18781907            {
    18791908                const int thisStartCell = reinterpret_cast<int16_t*>(&buffer[startCellOffset])[j];
    1880                 if (thisStartCell < 0) continue;
     1909                if (thisStartCell > 1023)
     1910                {
     1911                    wrongChannelsMap[j]++;
     1912                    wrongChannels << j;
     1913                }
     1914                if (thisStartCell < 0)  continue;
    18811915                for (int k=0;k<numSlices;k++)
    18821916                    reinterpret_cast<int16_t*>(&buffer[dataOffset])[numSlices*j + k] -= drsCalib16[1024*j + (thisStartCell+k)%1024];
     
    18851919        outFile.writeBinaryRow(buffer);
    18861920    };
     1921
     1922    if (wrongChannels.str() != "")
     1923    {
     1924        cout << "ERROR: Wrong channels: ";
     1925        for (uint32_t i=0;i<1440;i++)
     1926        {
     1927            if (wrongChannelsMap[i] != 0)
     1928                cout << i << "(" << wrongChannelsMap[i] << ") ";
     1929        }
     1930        cout << endl;
     1931        exit(-1);
     1932    }
    18871933    ostringstream strSum;
    18881934    strSum << rawsum.val();
     
    19531999            k == "TFIELDS"  || k == "ZTABLE"  || k == "ZNAXIS1"  || k == "ZNAXIS2" ||
    19542000            k == "ZHEAPPTR" || k == "ZPCOUNT" || k == "ZTILELEN" || k == "THEAP" ||
    1955             k == "CHECKSUM" || k == "DATASUM" || k == "FCTCPVER")
     2001            k == "CHECKSUM" || k == "DATASUM" || k == "FCTCPVER" || k == "ZHEAP")
    19562002        {
    19572003            continue;
Note: See TracChangeset for help on using the changeset viewer.