Changeset 17035


Ignore:
Timestamp:
08/21/13 16:35:22 (11 years ago)
Author:
lyard
Message:
Added error when using wrong fits class and adapted MRawFitsRead to deal with compressed .fz fits
Location:
trunk/Mars
Files:
3 edited

Legend:

Unmodified
Added
Removed
  • trunk/Mars/mcore/fits.h

    r16935 r17035  
    463463            return it==cols.end() ? 0 : it->second.num;
    464464        }
     465       
     466
    465467
    466468        // There may be a gap between the main table and the start of the heap:
     
    660662                // Check for table name. Skip until eof or requested table are found.
    661663                // skip the current table?
    662                 if (!tableName.empty() && tableName!=fTable.Get<string>("EXTNAME"))
     664                if ((!tableName.empty() &&         tableName!=fTable.Get<string>("EXTNAME")) ||
     665                    ( tableName.empty() && "ZDrsCellOffsets"==fTable.Get<string>("EXTNAME")))
    663666                {
    664667                    const streamoff skip = fTable.GetTotalBytes();
     
    711714    fits(const string &fname, const string& tableName="", bool force=false) : izstream(fname.c_str())
    712715    {
     716        gLog << "Here..." <<endl;
    713717        Constructor(fname, "", tableName, force);
     718        if ((fTable.is_compressed && !force) ||
     719            (fTable.name == "ZDrsCellOffsets" && !force))
     720        {
     721#ifdef __EXCEPTIONS
     722            throw runtime_error("You are trying to read a compressed fits with the base fits class. Please use factfits instead.");
     723#else
     724            gLog << ___err___ << "ERROR - You are trying to read a compressed fits with the base fits class. Please use factfits instead." << endl;
     725#endif
     726            clear(rdstate()|ios::badbit);
     727        }
    714728    }
    715729
    716730    fits(const string &fname, const string &fout, const string& tableName, bool force=false) : izstream(fname.c_str())
    717731    {
     732        gLog << "There..." << endl;
    718733        Constructor(fname, fout, tableName, force);
     734        if ((fTable.is_compressed && !force) ||
     735            (fTable.name == "ZDrsCellOffsets" && !force))
     736        {
     737#ifdef __EXCEPTIONS
     738            throw runtime_error("You are trying to read a compressed fits with the base fits class. Please use factfits instead.");
     739#else
     740            gLog << ___err___ << "ERROR - You are trying to read a compressed fits with the base fits class. Please use factfits instead." << endl;
     741#endif
     742            clear(rdstate()|ios::badbit);
     743        }
     744    }
     745
     746    fits() : izstream()
     747    {
     748
    719749    }
    720750
     
    9991029    }
    10001030
    1001     size_t GetNumRows() const { return fTable.num_rows; }
     1031//    size_t GetNumRows() const { return fTable.num_rows; }
    10021032    size_t GetRow() const { return fRow==(size_t)-1 ? 0 : fRow; }
    10031033
     
    10111041
    10121042    bool IsCompressedFITS() const { return fTable.is_compressed;}
     1043
     1044    virtual size_t GetNumRows() const
     1045    {
     1046        return fTable.Get<size_t>("NAXIS2");
     1047    }
     1048
     1049    virtual size_t GetBytesPerRow() const
     1050    {
     1051        return fTable.Get<size_t>("NAXIS1");
     1052    }
    10131053};
    10141054
  • trunk/Mars/mcore/zfits.h

    r16898 r17035  
    3737
    3838    // Basic constructor
    39     zfits(const string& fname, const string& tableName="",
    40           bool force=false) : fits(fname, tableName, force),
    41         fNumTiles(0),
    42         fNumRowsPerTile(0),
    43         fCurrentRow(-1),
    44         fHeapOff(0),
    45         fTileSize(0)
    46     {
     39    zfits(const string& fname, const string& tableName="", bool force=false) : fits(),
     40                                                                               fNumTiles(0),
     41                                                                               fNumRowsPerTile(0),
     42                                                                               fCurrentRow(-1),
     43                                                                               fHeapOff(0),
     44                                                                               fTileSize(0)
     45    {
     46        open(fname.c_str());
     47        Constructor(fname, "", tableName, force);
    4748        InitCompressionReading();
    4849    }
    4950
    5051    // Alternative contstructor
    51     zfits(const string& fname, const string& fout, const string& tableName,
    52           bool force=false) : fits(fname, fout, tableName, force),
    53               fNumTiles(0),
    54               fNumRowsPerTile(0),
    55               fCurrentRow(-1),
    56               fHeapOff(0),
    57               fTileSize(0)
    58     {
     52    zfits(const string& fname, const string& fout, const string& tableName, bool force=false) : fits(),
     53                                                                                                fNumTiles(0),
     54                                                                                                fNumRowsPerTile(0),
     55                                                                                                fCurrentRow(-1),
     56                                                                                                fHeapOff(0),
     57                                                                                                fTileSize(0)
     58    {
     59        open(fname.c_str());
     60        Constructor(fname, fout, tableName, force);
    5961        InitCompressionReading();
    6062    }
     
    8385        return fits::IsFileOk() && rawsum;
    8486    };
     87
     88    size_t GetNumRows() const
     89    {
     90        if (fTable.is_compressed)
     91            return fTable.Get<size_t>("ZNAXIS2");
     92        else
     93            return fTable.Get<size_t>("NAXIS2");
     94    }
     95    size_t GetBytesPerRow() const
     96    {
     97        if (fTable.is_compressed)
     98            return fTable.Get<size_t>("ZNAXIS1");
     99        else
     100            return fTable.Get<size_t>("NAXIS1");
     101    }
    85102
    86103protected:
  • trunk/Mars/mraw/MRawFitsRead.cc

    r14095 r17035  
    4545#include "MLogManip.h"
    4646
    47 #include "fits.h"
     47#include "factfits.h"
    4848#include "MTime.h"
    4949
     
    133133Bool_t MRawFitsRead::IsFits(const char *name)
    134134{
    135     return fits(name).good();
     135    return factfits(name).good();
    136136}
    137137
    138138istream *MRawFitsRead::OpenFile(const char *filename)
    139139{
    140     return new fits(filename);
     140    return new factfits(filename);
    141141}
    142142
    143143Bool_t MRawFitsRead::ReadRunHeader(istream &stream)
    144144{
    145     fits &fin = static_cast<fits&>(stream);
     145    factfits &fin = static_cast<factfits&>(stream);
    146146
    147147    if (fin.GetStr("TELESCOP")!="FACT")
     
    154154
    155155    fRawRunHeader->SetValidMagicNumber();
    156     fRawRunHeader->SetNumEvents(fin.GetUInt("NAXIS2"));
     156    fRawRunHeader->SetNumEvents(fin.GetNumRows());//GetUInt("NAXIS2"));
    157157    fRawRunHeader->InitPixels(fin.GetUInt("NPIX"));
    158158    fRawRunHeader->SetObservation(type=="4294967295"?"":fin.GetStr("RUNTYPE"), "FACT");
     
    175175Bool_t  MRawFitsRead::InitReadData(istream &stream)
    176176{
    177     fits &fin = static_cast<fits&>(stream);
     177    factfits &fin = static_cast<factfits&>(stream);
    178178
    179179    MArrayB **data   = reinterpret_cast<MArrayB**>(fRawEvtData1->DataMember("fHiGainFadcSamples"));
     
    216216Bool_t MRawFitsRead::ReadEvent(istream &stream)
    217217{
    218     if (!static_cast<fits&>(stream).GetNextRow())
     218    if (!static_cast<factfits&>(stream).GetNextRow())
    219219        return kFALSE;
    220220
     
    231231void MRawFitsRead::SkipEvent(istream &fin)
    232232{
    233     static_cast<fits&>(fin).SkipNextRow();
    234 }
     233    static_cast<factfits&>(fin).SkipNextRow();
     234}
Note: See TracChangeset for help on using the changeset viewer.