Changeset 17263


Ignore:
Timestamp:
10/18/13 17:08:49 (11 years ago)
Author:
tbretz
Message:
Added more std:: namespace qualifiers
Location:
trunk/Mars/mcore
Files:
3 edited

Legend:

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

    r17253 r17263  
    1515namespace std
    1616{
    17 #else
    18 using namespace std;
    1917#endif
    2018
     
    2523
    2624        /// constructors
    27         factofits(uint32_t numTiles=1000,
    28                   uint32_t rowPerTile=100,
    29                   uint64_t maxUsableMem=0) : zofits(numTiles, rowPerTile, maxUsableMem)
     25        factofits(uint32_t numTiles=DefaultMaxNumTiles(), uint32_t rowPerTile=DefaultNumRowsPerTile(),
     26                  uint32_t maxMem=DefaultMaxMemory())
     27            : zofits(numTiles, rowPerTile, maxMem)
    3028        {
    3129            fStartCellsOffset = -1;
     
    3331        }
    3432
    35         factofits(const char* fname,
    36                   uint32_t numTiles=1000,
    37                   uint32_t rowPerTile=100,
    38                   uint64_t maxUsableMem=0) : zofits(fname, numTiles, rowPerTile, maxUsableMem)
     33        factofits(const char *fname, uint32_t numTiles=DefaultMaxNumTiles(),
     34                  uint32_t rowPerTile=DefaultNumRowsPerTile(), uint32_t maxMem=DefaultMaxMemory())
     35            : zofits(fname, numTiles, rowPerTile, maxMem)
    3936        {
    4037            fStartCellsOffset = -1;
     
    9794                return false;
    9895
    99             if (IsOffsetCalibration())
    100             {//retrieve the column storing the start cell offsets, if required.
    101 
    102                 for (auto it=fRealColumns.begin(); it!=fRealColumns.end(); it++)//Table.cols.begin(); it!= fTable.cols.end(); it++)
     96            if (!IsOffsetCalibration())
     97                return true;
     98
     99            //retrieve the column storing the start cell offsets, if required.
     100            for (auto it=fRealColumns.cbegin(); it!=fRealColumns.cend(); it++)
     101            {
     102                if (it->col.name == "StartCellData")
     103                    fStartCellsOffset = it->col.offset;
     104
     105                if (it->col.name == "Data")
    103106                {
    104                     if (it->col.name == "StartCellData")
    105                         fStartCellsOffset = it->col.offset;
    106 
    107                     if (it->col.name == "Data")
     107                    fNumSlices  = it->col.num;
     108                    fDataOffset = it->col.offset;
     109                    if (fNumSlices % 1440 != 0)
    108110                    {
    109                         fNumSlices  = it->col.num;
    110                         fDataOffset = it->col.offset;
    111                         if (fNumSlices % 1440 != 0)
    112                         {
    113111#ifdef __EXCEPTIONS
    114                             throw runtime_error("Number of data samples not a multiple of 1440.");
     112                        throw runtime_error("Number of data samples not a multiple of 1440.");
    115113#else
    116                             gLog << ___err___ << "ERROR - Number of data samples not a multiple of 1440. Doing it uncalibrated." << endl;
    117 #endif
    118                             fOffsetCalibration.resize(0);
    119                         }
    120                         fNumSlices /= 1440;
     114                        gLog << ___warn___ << "WARNING - Number of data samples not a multiple of 1440. Doing it uncalibrated." << endl;
     115#endif
     116                        fOffsetCalibration.resize(0);
    121117                    }
     118                    fNumSlices /= 1440;
    122119                }
    123 
    124                 if (fStartCellsOffset < 0)
    125                 {
     120            }
     121
     122            if (fStartCellsOffset < 0)
     123            {
    126124#ifdef __EXCEPTIONS
    127                     throw runtime_error("FACT Calibration requested, but \"StartCellData\" column not found.");
     125                throw runtime_error("FACT Calibration requested, but \"StartCellData\" column not found.");
    128126#else
    129                     gLog << ___err___ << "ERROR - FACT Calibration requested, but \"StartCellData\" column not found. Doing it uncalibrated." << endl;
     127                gLog << ___warn___ << "WARNING - FACT Calibration requested, but \"StartCellData\" column not found. Doing it uncalibrated." << endl;
     128#endif
     129                //throw away the calibration data
     130                fOffsetCalibration.resize(0);
     131            }
     132
     133            if (fDataOffset < 0)
     134            {
     135#ifdef __EXCEPTIONS
     136                throw runtime_error("FACT Calibration requested, but \"Data\" column not found.");
     137#else
     138                gLog << ___warn___ << "WARNING - FACT Calibration requested, but \"Data\" column not found. Doing it uncalibrated." << endl;
    130139#endif
    131140                    //throw away the calibration data
    132                     fOffsetCalibration.resize(0);
    133                 }
    134 
    135                 if (fDataOffset < 0)
    136                 {
    137 #ifdef __EXCEPTIONS
    138                     throw runtime_error("FACT Calibration requested, but \"Data\" column not found.");
    139 #else
    140                     gLog << ___err___ << "ERROR - FACT Calibration requested, but \"Data\" column not found. Doing it uncalibrated." << endl;
    141 #endif
    142                     //throw away the calibration data
    143                     fOffsetCalibration.resize(0);
    144                 }
     141                fOffsetCalibration.resize(0);
    145142            }
    146143
     
    196193            return good();
    197194        }*/
     195
    198196        ///Actually write the drs calibration table
    199197        virtual bool WriteDrsOffsetsTable()
     
    243241            Checksum rawsum;
    244242            rawsum.add((char*)(fOffsetCalibration.data()), 1024*1440*sizeof(int16_t));
    245             ostringstream sum_str;
    246             sum_str << rawsum.val();
    247             c.SetStr("RAWSUM", sum_str.str());
     243            c.SetStr("RAWSUM", to_string(rawsum.val()));
    248244
    249245            //compress data and calculate final, compressed size
    250             const uint32_t compressed_header_size = sizeof(TileHeader) + sizeof(BlockHeader) + 1*sizeof(uint16_t);
    251             vector<char> compressed_calib(1024*1440*2 + compressed_header_size + 8); //+8 for checksum;
     246            const uint32_t compressed_header_size = sizeof(FITS::TileHeader) + sizeof(FITS::BlockHeader) + 1*sizeof(uint16_t);
     247            std::vector<char> compressed_calib(1024*1440*2 + compressed_header_size + 8); //+8 for checksum;
    252248            char* data_start = compressed_calib.data() + compressed_header_size;
    253249            uint32_t compressed_size = compressHUFFMAN16(data_start, (char*)(fOffsetCalibration.data()), 1024*1440, 2, 1);;
     
    255251
    256252            //Write tile header
    257             TileHeader th;
    258             vector<uint16_t> seq(1, kFactHuffman16);
    259             Compression bh(seq, kOrderByRow);
     253            FITS::TileHeader th;
     254            std::vector<uint16_t> seq(1, FITS::kFactHuffman16);
     255            FITS::Compression bh(seq, FITS::kOrderByRow);
    260256            th.numRows = 1;
    261257            th.size = compressed_size;
    262             bh.SetBlockSize(compressed_size-sizeof(TileHeader));
    263             memcpy(compressed_calib.data(), &(th), sizeof(TileHeader));
    264             bh.Memcpy(compressed_calib.data()+sizeof(TileHeader));
     258            bh.SetBlockSize(compressed_size-sizeof(FITS::TileHeader));
     259            memcpy(compressed_calib.data(), &(th), sizeof(FITS::TileHeader));
     260            bh.Memcpy(compressed_calib.data()+sizeof(FITS::TileHeader));
    265261
    266262            //calculate resulting compressed datasum
     
    272268            seekp(here_I_am);
    273269
    274             vector<uint64_t> catalog(2,0);
    275             catalog[0] = compressed_size-sizeof(TileHeader);
    276             catalog[1] = sizeof(TileHeader);
    277 
    278             vector<char> swappedCatalog(catalog_size);
     270            std::vector<uint64_t> catalog(2,0);
     271            catalog[0] = compressed_size-sizeof(FITS::TileHeader);
     272            catalog[1] = sizeof(FITS::TileHeader);
     273
     274            std::vector<char> swappedCatalog(catalog_size);
    279275            revcpy<sizeof(int64_t)>(swappedCatalog.data(), (char*)(catalog.data()), 2);//catalog_size);
    280276            datasum.add(swappedCatalog.data(), catalog_size);
     
    285281            c.SetFloat("ZRATIO", (float)(1024*1440*2)/(float)(compressed_size));
    286282            c.SetInt("PCOUNT", compressed_size + catalog_size);
    287 
    288             sum_str.str("");
    289             sum_str << datasum.val();
    290             c.SetStr("DATASUM", sum_str.str());
     283            c.SetStr("DATASUM", to_string(datasum.val()));
    291284
    292285            datasum += c.WriteHeader(*this);
     
    307300        virtual void DrsOffsetCalibrate(char* target_location)
    308301        {
    309             if (IsOffsetCalibration())
     302            if (!IsOffsetCalibration())
     303                return;
     304
     305            const int16_t* startCell = reinterpret_cast<int16_t*>(target_location + fStartCellsOffset);
     306            int16_t*       data      = reinterpret_cast<int16_t*>(target_location + fDataOffset);
     307
     308            for (uint32_t ch=0; ch<1440; ch++)
    310309            {
    311                 const int16_t* startCell = reinterpret_cast<int16_t*>(target_location + fStartCellsOffset);
    312                 int16_t*       data      = reinterpret_cast<int16_t*>(target_location + fDataOffset);
    313 
    314                 for (uint32_t ch=0; ch<1440; ch++)
     310                if (startCell[ch] < 0)
    315311                {
    316                     if (startCell[ch] < 0)
    317                     {
    318                         data += fNumSlices;
    319                         continue;
    320                     }
    321 
    322                     const int16_t modStart = startCell[ch]%1024;
    323                     const int16_t *off     = fOffsetCalibration.data() + ch*1024;
    324 
    325                     const int16_t* cal        = off+modStart;
    326                     const int16_t* end_stride = data+fNumSlices;
    327 
    328                     if (modStart+fNumSlices > 1024)
    329                     {
    330                         while (cal < off+1024)
    331                             *data++ -= *cal++;
    332                         cal = off;
    333                     }
    334 
    335                     while (data<end_stride)
     312                    data += fNumSlices;
     313                    continue;
     314                }
     315
     316                const int16_t modStart = startCell[ch]%1024;
     317                const int16_t *off     = fOffsetCalibration.data() + ch*1024;
     318
     319                const int16_t* cal        = off+modStart;
     320                const int16_t* end_stride = data+fNumSlices;
     321
     322                if (modStart+fNumSlices > 1024)
     323                {
     324                    while (cal < off+1024)
    336325                        *data++ -= *cal++;
     326                    cal = off;
    337327                }
     328
     329                while (data<end_stride)
     330                    *data++ -= *cal++;
    338331            }
    339332        }
     
    341334private:
    342335        /// Checks if the size of the input calibration is ok
    343         void VerifyCalibrationSize(uint32_t size)
    344         {
    345             if (size != 1440*1024)
    346             {
    347                 ostringstream str;
    348                 str << "Cannot load calibration with anything else than 1440 pixels and 1024 samples per pixel. Got a total size of " << size;
     336        bool VerifyCalibrationSize(uint32_t size)
     337        {
     338            if (size == 1440*1024)
     339                return true;
     340
     341            ostringstream str;
     342            str << "Cannot load calibration with anything else than 1440 pixels and 1024 samples per pixel. Got a total size of " << size;
    349343#ifdef __EXCEPTIONS
    350344            throw runtime_error(str.str());
    351345#else
    352346            gLog << ___err___ << "ERROR - " << str.str() << endl;
    353 #endif
    354             }
     347            return false;
     348#endif
    355349         }
    356350
    357351        //Offsets calibration stuff.
    358         vector<int16_t> fOffsetCalibration;    ///< The calibration itself
    359         int32_t         fStartCellsOffset;    ///< Offset in bytes for the startcell data
    360         int32_t         fDataOffset;         ///<   Offset in bytes for the data
    361         int32_t         fNumSlices;         ///<    Number of samples per pixel per event
     352        vector<int16_t> fOffsetCalibration;  ///< The calibration itself
     353        int32_t         fStartCellsOffset;   ///< Offset in bytes for the startcell data
     354        int32_t         fDataOffset;         ///< Offset in bytes for the data
     355        int32_t         fNumSlices;          ///< Number of samples per pixel per event
    362356
    363357}; //class factofits
  • trunk/Mars/mcore/ofits.h

    r17240 r17263  
    3636namespace std
    3737{
    38 #else
    39 using namespace std;
    4038#endif
    4139
     
    5048    struct Key
    5149    {
    52         string key;
    53         bool   delim;
    54         string value;
    55         string comment;
    56         string fitsString;
     50        std::string key;
     51        bool        delim;
     52        std::string value;
     53        std::string comment;
     54        std::string fitsString;
    5755
    5856        off_t offset;   // offset in file
     
    6058        bool changed;   // For closing the file
    6159
    62         Key(const string &k="") : key(k), delim(false), fitsString(""), offset(0), changed(true) { }
    63 
    64         string Trim(const string &str)
     60        Key(const std::string &k="") : key(k), delim(false), fitsString(""), offset(0), changed(true) { }
     61
     62        std::string Trim(const std::string &str)
    6563        {
    6664            // Trim Both leading and trailing spaces
     
    6967
    7068            // if all spaces or empty return an empty string
    71             if (string::npos==first || string::npos==last)
    72                 return string();
     69            if (std::string::npos==first || std::string::npos==last)
     70                return std::string();
    7371
    7472            return str.substr(first, last-first+1);
     
    8179            {
    8280#ifdef __EXCEPTIONS
    83                 throw runtime_error("Key name empty.");
     81                throw std::runtime_error("Key name empty.");
    8482#else
    8583                gLog << ___err___ << "ERROR - Key name empty." << endl;
     
    8987            if (key.size()>8)
    9088            {
    91                 ostringstream sout;
     89                std::ostringstream sout;
    9290                sout << "Key '" << key << "' exceeds 8 bytes.";
    9391#ifdef __EXCEPTIONS
    94                 throw runtime_error(sout.str());
     92                throw std::runtime_error(sout.str());
    9593#else
    9694                gLog << ___err___ << "ERROR - " << sout.str() << endl;
     
    10199            //transform(key.begin(), key.end(), key.begin(), toupper);
    102100
    103             for (string::const_iterator c=key.begin(); c<key.end(); c++)
     101            for (std::string::const_iterator c=key.cbegin(); c<key.cend(); c++)
    104102                if ((*c<'A' || *c>'Z') && (*c<'0' || *c>'9') && *c!='-' && *c!='_')
    105103                {
    106                     ostringstream sout;
     104                    std::ostringstream sout;
    107105                    sout << "Invalid character '" << *c << "' found in key '" << key << "'";
    108106#ifdef __EXCEPTIONS
    109                     throw runtime_error(sout.str());
     107                    throw std::runtime_error(sout.str());
    110108#else
    111109                    gLog << ___err___ << "ERROR - " << sout.str() << endl;
     
    121119            comment = Trim(comment);
    122120
    123             for (string::const_iterator c=key.begin(); c<key.end(); c++)
     121            for (std::string::const_iterator c=key.cbegin(); c<key.cend(); c++)
    124122                if (*c<32 || *c>126)
    125123                {
    126                     ostringstream sout;
     124                    std::ostringstream sout;
    127125                    sout << "Invalid character '" << *c << "' [" << int(*c) << "] found in comment '" << comment << "'";
    128126#ifdef __EXCEPTIONS
    129                     throw runtime_error(sout.str());
     127                    throw std::runtime_error(sout.str());
    130128#else
    131129                    gLog << ___err___ << "ERROR - " << sout.str() << endl;
     
    151149            if (!trim)
    152150            {
    153                 ostringstream sout;
     151                std::ostringstream sout;
    154152                sout << "Size " << sz << " of entry for key '" << key << "' exceeds 80 characters.";
    155153#ifdef __EXCEPTIONS
    156                 throw runtime_error(sout.str());
     154                throw std::runtime_error(sout.str());
    157155#else
    158156                gLog << ___err___ << "ERROR - " << sout.str() << endl;
     
    169167            {
    170168#ifndef __EXCEPTIONS
    171                 ostringstream sout;
     169                std::ostringstream sout;
    172170                sout << "Size " << sz << " of entry for key '" << key << "' exceeds 80 characters... removed comment.";
    173171                gLog << ___warn___ << "WARNING - " << sout.str() << endl;
     
    176174            }
    177175
    178             ostringstream sout;
     176            std::ostringstream sout;
    179177            sout << "Size " << sz << " of entry for key '" << key << "' exceeds 80 characters even without comment.";
    180178#ifdef __EXCEPTIONS
    181             throw runtime_error(sout.str());
     179            throw std::runtime_error(sout.str());
    182180#else
    183181            gLog << ___err___ << "ERROR - " << sout.str() << endl;
     
    194192        }
    195193
    196         string Compile()
     194        std::string Compile()
    197195        {
    198196
     
    200198                return fitsString;
    201199
    202             ostringstream sout;
     200            std::ostringstream sout;
    203201            sout << std::left << setw(8) << key;
    204202
     
    226224                return;
    227225
    228             string str = Compile();
     226            std::string str = Compile();
    229227            str.insert(str.end(), 80-str.size(), ' ');
    230228
     
    245243        void Out(ostream &out)
    246244        {
    247             string str = Compile();
     245            std::string str = Compile();
    248246
    249247            str.insert(str.end(), 80-str.size(), ' ');
     
    255253
    256254private:
    257     vector<Key> fKeys;
    258 
    259     vector<Key>::iterator findkey(const string &key)
     255    std::vector<Key> fKeys;
     256
     257    std::vector<Key>::iterator findkey(const std::string &key)
    260258    {
    261259        for (auto it=fKeys.begin(); it!=fKeys.end(); it++)
     
    266264    }
    267265
    268     bool Set(const string &key="", bool delim=false, const string &value="", const string &comment="")
     266    bool Set(const std::string &key="", bool delim=false, const std::string &value="", const std::string &comment="")
    269267    {
    270268        // If no delimit add the row no matter if it alread exists
     
    283281        if (fTable.num_rows>0)
    284282        {
    285             ostringstream sout;
     283            std::ostringstream sout;
    286284            sout << "No new header key can be defined, rows were already written to the file... ignoring new key '" << key << "'";
    287285#ifdef __EXCEPTIONS
    288                 throw runtime_error(sout.str());
     286                throw std::runtime_error(sout.str());
    289287#else
    290288                gLog << ___err___ << "ERROR - " << sout.str() << endl;
     
    320318        struct Column
    321319        {
    322             string name;
     320            std::string name;
    323321            size_t offset;
    324322            size_t num;
     
    327325        };
    328326
    329         vector<Column> cols;
     327        std::vector<Column> cols;
    330328
    331329        Table() : offset(0), bytes_per_row(0), num_rows(0), num_cols(0)
     
    337335    Table fTable;
    338336
    339     vector<char> fOutputBuffer;
    340 
    341     vector<Table::Column>::iterator findcol(const string &name)
    342     {
    343         for (auto it=fTable.cols.begin(); it!=fTable.cols.end(); it++)
     337    std::vector<char> fOutputBuffer;
     338
     339    std::vector<Table::Column>::const_iterator findcol(const std::string &name)
     340    {
     341        for (auto it=fTable.cols.cbegin(); it!=fTable.cols.cend(); it++)
    344342            if (name==it->name)
    345343                return it;
    346344
    347         return fTable.cols.end();
     345        return fTable.cols.cend();
    348346    }
    349347
     
    398396    }
    399397    //Etienne: required to enable 1 to 1 reconstruction of files
    400     bool SetKeyComment(const string& key, const string& comment)
     398    bool SetKeyComment(const std::string& key, const std::string& comment)
    401399    {
    402400        auto it = findkey(key);
     
    407405        return true;
    408406    }
    409     bool SetKeyFromFitsString(const string& fitsString)
     407    bool SetKeyFromFitsString(const std::string& fitsString)
    410408    {
    411409        if (fTable.num_rows>0)
    412410        {
    413             ostringstream sout;
     411            std::ostringstream sout;
    414412            sout << "No new header key can be defined, rows were already written to the file... ignoring new key '" << fitsString << "'";
    415413#ifdef __EXCEPTIONS
    416                 throw runtime_error(sout.str());
    417 #else
    418                 gLog << ___err___ << "ERROR - " << sout.str() << endl;
    419                 return false;
     414            throw std::runtime_error(sout.str());
     415#else
     416            gLog << ___err___ << "ERROR - " << sout.str() << endl;
     417            return false;
    420418#endif
    421419        }
     
    427425        return true;
    428426    }
    429     bool SetRaw(const string &key, const string &val, const string &comment)
     427    bool SetRaw(const std::string &key, const std::string &val, const std::string &comment)
    430428    {
    431429        return Set(key, true, val, comment);
    432430    }
    433431
    434     bool SetBool(const string &key, bool b, const string &comment="")
     432    bool SetBool(const std::string &key, bool b, const std::string &comment="")
    435433    {
    436434        return Set(key, true, b?"T":"F", comment);
    437435    }
    438436
    439     bool AddEmpty(const string &key, const string &comment="")
     437    bool AddEmpty(const std::string &key, const std::string &comment="")
    440438    {
    441439        return Set(key, true, "", comment);
    442440    }
    443441
    444     bool SetStr(const string &key, string s, const string &comment="")
     442    bool SetStr(const std::string &key, std::string s, const std::string &comment="")
    445443    {
    446444        for (uint i=0; i<s.length(); i++)
     
    451449    }
    452450
    453     bool SetInt(const string &key, int64_t i, const string &comment="")
    454     {
    455         ostringstream sout;
     451    bool SetInt(const std::string &key, int64_t i, const std::string &comment="")
     452    {
     453        std::ostringstream sout;
    456454        sout << i;
    457455
     
    459457    }
    460458
    461     bool SetFloat(const string &key, double f, int p, const string &comment="")
    462     {
    463         ostringstream sout;
     459    bool SetFloat(const std::string &key, double f, int p, const std::string &comment="")
     460    {
     461        std::ostringstream sout;
    464462
    465463        if (p<0)
     
    472470        sout << f;
    473471
    474         string str = sout.str();
     472        std::string str = sout.str();
    475473
    476474        replace(str.begin(), str.end(), 'e', 'E');
    477475
    478         if (str.find_first_of('E')==string::npos && str.find_first_of('.')==string::npos)
     476        if (str.find_first_of('E')==std::string::npos && str.find_first_of('.')==std::string::npos)
    479477            str += ".";
    480478
     
    482480    }
    483481
    484     bool SetFloat(const string &key, double f, const string &comment="")
     482    bool SetFloat(const std::string &key, double f, const std::string &comment="")
    485483    {
    486484        return SetFloat(key, f, 0, comment);
    487485    }
    488486
    489     bool SetHex(const string &key, uint64_t i, const string &comment="")
    490     {
    491         ostringstream sout;
     487    bool SetHex(const std::string &key, uint64_t i, const std::string &comment="")
     488    {
     489        std::ostringstream sout;
    492490        sout << std::hex << "0x" << i;
    493491        return SetStr(key, sout.str(), comment);
    494492    }
    495493
    496     bool AddComment(const string &comment)
     494    bool AddComment(const std::string &comment)
    497495    {
    498496        return Set("COMMENT", false, "", comment);
    499497    }
    500498
    501     bool AddHistory(const string &comment)
     499    bool AddHistory(const std::string &comment)
    502500    {
    503501        return Set("HISTORY", false, "", comment);
     
    511509    }
    512510
    513     string CommentFromType(char type)
    514     {
    515         string comment;
     511    std::string CommentFromType(char type)
     512    {
     513        std::string comment;
    516514
    517515        switch (type)
    518516        {
    519         case 'L': comment = "1-byte BOOL]";  break;
    520         case 'A': comment = "1-byte CHAR]";  break;
    521         case 'B': comment = "1-byte BOOL]";  break;
    522         case 'I': comment = "2-byte INT]";   break;
    523         case 'J': comment = "4-byte INT]";   break;
    524         case 'K': comment = "8-byte INT]";   break;
    525         case 'E': comment = "4-byte FLOAT]"; break;
    526         case 'D': comment = "8-byte FLOAT]"; break;
    527         case 'Q': comment = "var. Length]"; break;
     517        case 'L': comment = "[1-byte BOOL]";  break;
     518        case 'A': comment = "[1-byte CHAR]";  break;
     519        case 'B': comment = "[1-byte BOOL]";  break;
     520        case 'I': comment = "[2-byte INT]";   break;
     521        case 'J': comment = "[4-byte INT]";   break;
     522        case 'K': comment = "[8-byte INT]";   break;
     523        case 'E': comment = "[4-byte FLOAT]"; break;
     524        case 'D': comment = "[8-byte FLOAT]"; break;
     525        case 'Q': comment = "[var. Length]"; break;
    528526        }
    529527
     
    551549    }
    552550    //ETIENNE to be able to restore the file 1 to 1, I must restore the header keys myself
    553     virtual bool AddColumn(uint32_t cnt, char typechar, const string &name, const string &unit, const string &comment="", bool addHeaderKeys=true)
     551    virtual bool AddColumn(uint32_t cnt, char typechar, const std::string &name, const std::string &unit, const std::string &comment="", bool addHeaderKeys=true)
    554552    {
    555553        if (tellp()<0)
    556554        {
    557             ostringstream sout;
     555            std::ostringstream sout;
    558556            sout << "File not open... ignoring column '" << name << "'";
    559557#ifdef __EXCEPTIONS
    560             throw runtime_error(sout.str());
     558            throw std::runtime_error(sout.str());
    561559#else
    562560            gLog << ___err___ << "ERROR - " << sout.str() << endl;
     
    567565        if (tellp()>0)
    568566        {
    569             ostringstream sout;
     567            std::ostringstream sout;
    570568            sout << "Header already written, no new column can be defined... ignoring column '" << name << "'";
    571569#ifdef __EXCEPTIONS
    572             throw runtime_error(sout.str());
     570            throw std::runtime_error(sout.str());
    573571#else
    574572            gLog << ___err___ << "ERROR - " << sout.str() << endl;
     
    577575        }
    578576
    579         if (findcol(name)!=fTable.cols.end())
    580         {
    581             ostringstream sout;
     577        if (findcol(name)!=fTable.cols.cend())
     578        {
     579            std::ostringstream sout;
    582580            sout << "A column with the name '" << name << "' already exists.";
    583581#ifdef __EXCEPTIONS
    584             throw runtime_error(sout.str());
     582            throw std::runtime_error(sout.str());
    585583#else
    586584            gLog << ___err___ << "ERROR - " << sout.str() << endl;
     
    591589        typechar = toupper(typechar);
    592590
    593         static const string allow("LABIJKEDQ");
    594         if (std::find(allow.begin(), allow.end(), typechar)==allow.end())
    595         {
    596             ostringstream sout;
     591        static const std::string allow("LABIJKEDQ");
     592        if (std::find(allow.cbegin(), allow.cend(), typechar)==allow.end())
     593        {
     594            std::ostringstream sout;
    597595            sout << "Column type '" << typechar << "' not supported.";
    598596#ifdef __EXCEPTIONS
    599             throw runtime_error(sout.str());
     597            throw std::runtime_error(sout.str());
    600598#else
    601599            gLog << ___err___ << "ERROR - " << sout.str() << endl;
     
    604602        }
    605603
    606         ostringstream type;
     604        std::ostringstream type;
    607605        type << cnt;
    608606        if (typechar=='Q')
     
    613611        fTable.num_cols++;
    614612
    615         ostringstream typekey, formkey, unitkey, unitcom, typecom;
    616         typekey << "TTYPE" << fTable.num_cols;
    617         formkey << "TFORM" << fTable.num_cols;
    618         unitkey << "TUNIT" << fTable.num_cols;
    619         unitcom << "unit of " << name;
    620 
    621         typecom << "format of " << name << " [";
    622 
    623         typecom << CommentFromType(typechar);
    624 
    625613        if (addHeaderKeys)
    626614        {
    627             SetStr(formkey.str(), type.str(), typecom.str());
    628             SetStr(typekey.str(), name,       comment);
     615            const std::string nc = std::to_string(fTable.num_cols);
     616
     617            SetStr("TFORM"+nc, type.str(), "format of "+name+" "+CommentFromType(typechar));
     618            SetStr("TTYPE"+nc, name, comment);
    629619            if (!unit.empty())
    630                 SetStr(unitkey.str(), unit, unitcom.str());
     620                SetStr("TUNIT"+nc, unit, "unit of "+name);
    631621        }
    632622        size_t size = SizeFromType(typechar);
     
    650640    }
    651641
    652     virtual bool AddColumn(const FITS::Compression&, uint32_t cnt, char typechar, const string& name, const string& unit,  const string& comment="", bool addHeaderKeys=true)
     642    virtual bool AddColumn(const FITS::Compression&, uint32_t cnt, char typechar, const std::string& name, const std::string& unit,  const std::string& comment="", bool addHeaderKeys=true)
    653643    {
    654644        return AddColumn(cnt, typechar, name, unit, comment, addHeaderKeys);
    655645    }
    656646
    657     bool AddColumnShort(uint32_t cnt, const string &name, const string &unit="", const string &comment="")
     647    bool AddColumnShort(uint32_t cnt, const std::string &name, const std::string &unit="", const std::string &comment="")
    658648    { return AddColumn(cnt, 'I', name, unit, comment); }
    659     bool AddColumnInt(uint32_t cnt, const string &name, const string &unit="", const string &comment="")
     649    bool AddColumnInt(uint32_t cnt, const std::string &name, const std::string &unit="", const std::string &comment="")
    660650    { return AddColumn(cnt, 'J', name, unit, comment); }
    661     bool AddColumnLong(uint32_t cnt, const string &name, const string &unit="", const string &comment="")
     651    bool AddColumnLong(uint32_t cnt, const std::string &name, const std::string &unit="", const std::string &comment="")
    662652    { return AddColumn(cnt, 'K', name, unit, comment); }
    663     bool AddColumnFloat(uint32_t cnt, const string &name, const string &unit="", const string &comment="")
     653    bool AddColumnFloat(uint32_t cnt, const std::string &name, const std::string &unit="", const std::string &comment="")
    664654    { return AddColumn(cnt, 'E', name, unit, comment); }
    665     bool AddColumnDouble(uint32_t cnt, const string &name, const string &unit="", const string &comment="")
     655    bool AddColumnDouble(uint32_t cnt, const std::string &name, const std::string &unit="", const std::string &comment="")
    666656    { return AddColumn(cnt, 'D', name, unit, comment); }
    667     bool AddColumnChar(uint32_t cnt, const string &name, const string &unit="", const string &comment="")
     657    bool AddColumnChar(uint32_t cnt, const std::string &name, const std::string &unit="", const std::string &comment="")
    668658    { return AddColumn(cnt, 'A', name, unit, comment); }
    669     bool AddColumnByte(uint32_t cnt, const string &name, const string &unit="", const string &comment="")
     659    bool AddColumnByte(uint32_t cnt, const std::string &name, const std::string &unit="", const std::string &comment="")
    670660    { return AddColumn(cnt, 'B', name, unit, comment); }
    671     bool AddColumnBool(uint32_t cnt, const string &name, const string &unit="", const string &comment="")
     661    bool AddColumnBool(uint32_t cnt, const std::string &name, const std::string &unit="", const std::string &comment="")
    672662    { return AddColumn(cnt, 'L', name, unit, comment); }
    673663
    674     bool AddColumnShort(const string &name, const string &unit="", const string &comment="")
     664    bool AddColumnShort(const std::string &name, const std::string &unit="", const std::string &comment="")
    675665    { return AddColumn(1, 'I', name, unit, comment); }
    676     bool AddColumnInt(const string &name, const string &unit="", const string &comment="")
     666    bool AddColumnInt(const std::string &name, const std::string &unit="", const std::string &comment="")
    677667    { return AddColumn(1, 'J', name, unit, comment); }
    678     bool AddColumnLong(const string &name, const string &unit="", const string &comment="")
     668    bool AddColumnLong(const std::string &name, const std::string &unit="", const std::string &comment="")
    679669    { return AddColumn(1, 'K', name, unit, comment); }
    680     bool AddColumnFloat(const string &name, const string &unit="", const string &comment="")
     670    bool AddColumnFloat(const std::string &name, const std::string &unit="", const std::string &comment="")
    681671    { return AddColumn(1, 'E', name, unit, comment); }
    682     bool AddColumnDouble(const string &name, const string &unit="", const string &comment="")
     672    bool AddColumnDouble(const std::string &name, const std::string &unit="", const std::string &comment="")
    683673    { return AddColumn(1, 'D', name, unit, comment); }
    684     bool AddColumnChar(const string &name, const string &unit="", const string &comment="")
     674    bool AddColumnChar(const std::string &name, const std::string &unit="", const std::string &comment="")
    685675    { return AddColumn(1, 'A', name, unit, comment); }
    686     bool AddColumnByte(const string &name, const string &unit="", const string &comment="")
     676    bool AddColumnByte(const std::string &name, const std::string &unit="", const std::string &comment="")
    687677    { return AddColumn(1, 'B', name, unit, comment); }
    688     bool AddColumnBool(const string &name, const string &unit="", const string &comment="")
     678    bool AddColumnBool(const std::string &name, const std::string &unit="", const std::string &comment="")
    689679    { return AddColumn(1, 'L', name, unit, comment); }
    690680
    691     bool AddColumnShort(const FITS::Compression &comp, uint32_t cnt, const string &name, const string &unit="", const string &comment="")
     681    bool AddColumnShort(const FITS::Compression &comp, uint32_t cnt, const std::string &name, const std::string &unit="", const std::string &comment="")
    692682    { return AddColumn(comp, cnt, 'I', name, unit, comment); }
    693     bool AddColumnInt(const FITS::Compression &comp, uint32_t cnt, const string &name, const string &unit="", const string &comment="")
     683    bool AddColumnInt(const FITS::Compression &comp, uint32_t cnt, const std::string &name, const std::string &unit="", const std::string &comment="")
    694684    { return AddColumn(comp, cnt, 'J', name, unit, comment); }
    695     bool AddColumnLong(const FITS::Compression &comp, uint32_t cnt, const string &name, const string &unit="", const string &comment="")
     685    bool AddColumnLong(const FITS::Compression &comp, uint32_t cnt, const std::string &name, const std::string &unit="", const std::string &comment="")
    696686    { return AddColumn(comp, cnt, 'K', name, unit, comment); }
    697     bool AddColumnFloat(const FITS::Compression &comp, uint32_t cnt, const string &name, const string &unit="", const string &comment="")
     687    bool AddColumnFloat(const FITS::Compression &comp, uint32_t cnt, const std::string &name, const std::string &unit="", const std::string &comment="")
    698688    { return AddColumn(comp, cnt, 'E', name, unit, comment); }
    699     bool AddColumnDouble(const FITS::Compression &comp, uint32_t cnt, const string &name, const string &unit="", const string &comment="")
     689    bool AddColumnDouble(const FITS::Compression &comp, uint32_t cnt, const std::string &name, const std::string &unit="", const std::string &comment="")
    700690    { return AddColumn(comp, cnt, 'D', name, unit, comment); }
    701     bool AddColumnChar(const FITS::Compression &comp, uint32_t cnt, const string &name, const string &unit="", const string &comment="")
     691    bool AddColumnChar(const FITS::Compression &comp, uint32_t cnt, const std::string &name, const std::string &unit="", const std::string &comment="")
    702692    { return AddColumn(comp, cnt, 'A', name, unit, comment); }
    703     bool AddColumnByte(const FITS::Compression &comp, uint32_t cnt, const string &name, const string &unit="", const string &comment="")
     693    bool AddColumnByte(const FITS::Compression &comp, uint32_t cnt, const std::string &name, const std::string &unit="", const std::string &comment="")
    704694    { return AddColumn(comp, cnt, 'B', name, unit, comment); }
    705     bool AddColumnBool(const FITS::Compression &comp, uint32_t cnt, const string &name, const string &unit="", const string &comment="")
     695    bool AddColumnBool(const FITS::Compression &comp, uint32_t cnt, const std::string &name, const std::string &unit="", const std::string &comment="")
    706696    { return AddColumn(comp, cnt, 'L', name, unit, comment); }
    707697
    708     bool AddColumnShort(const FITS::Compression &comp, const string &name, const string &unit="", const string &comment="")
     698    bool AddColumnShort(const FITS::Compression &comp, const std::string &name, const std::string &unit="", const std::string &comment="")
    709699    { return AddColumn(comp, 1, 'I', name, unit, comment); }
    710     bool AddColumnInt(const FITS::Compression &comp, const string &name, const string &unit="", const string &comment="")
     700    bool AddColumnInt(const FITS::Compression &comp, const std::string &name, const std::string &unit="", const std::string &comment="")
    711701    { return AddColumn(comp, 1, 'J', name, unit, comment); }
    712     bool AddColumnLong(const FITS::Compression &comp, const string &name, const string &unit="", const string &comment="")
     702    bool AddColumnLong(const FITS::Compression &comp, const std::string &name, const std::string &unit="", const std::string &comment="")
    713703    { return AddColumn(comp, 1, 'K', name, unit, comment); }
    714     bool AddColumnFloat(const FITS::Compression &comp, const string &name, const string &unit="", const string &comment="")
     704    bool AddColumnFloat(const FITS::Compression &comp, const std::string &name, const std::string &unit="", const std::string &comment="")
    715705    { return AddColumn(comp, 1, 'E', name, unit, comment); }
    716     bool AddColumnDouble(const FITS::Compression &comp, const string &name, const string &unit="", const string &comment="")
     706    bool AddColumnDouble(const FITS::Compression &comp, const std::string &name, const std::string &unit="", const std::string &comment="")
    717707    { return AddColumn(comp, 1, 'D', name, unit, comment); }
    718     bool AddColumnChar(const FITS::Compression &comp, const string &name, const string &unit="", const string &comment="")
     708    bool AddColumnChar(const FITS::Compression &comp, const std::string &name, const std::string &unit="", const std::string &comment="")
    719709    { return AddColumn(comp, 1, 'A', name, unit, comment); }
    720     bool AddColumnByte(const FITS::Compression &comp, const string &name, const string &unit="", const string &comment="")
     710    bool AddColumnByte(const FITS::Compression &comp, const std::string &name, const std::string &unit="", const std::string &comment="")
    721711    { return AddColumn(comp, 1, 'B', name, unit, comment); }
    722     bool AddColumnBool(const FITS::Compression &comp, const string &name, const string &unit="", const string &comment="")
     712    bool AddColumnBool(const FITS::Compression &comp, const std::string &name, const std::string &unit="", const std::string &comment="")
    723713    { return AddColumn(comp, 1, 'L', name, unit, comment); }
    724714
    725715    /*
    726     bool AddKey(string key, double d, const string &comment)
     716    bool AddKey(string key, double d, const std::string &comment)
    727717    {
    728718        ostringstream out;
    729719        out << d;
    730720
    731         string s = out.str();
     721        std::string s = out.str();
    732722
    733723        replace(s.begin(), s.end(), "e", "E");
     
    804794        {
    805795#ifdef __EXCEPTIONS
    806             throw runtime_error("File not empty anymore.");
     796            throw std::runtime_error("File not empty anymore.");
    807797#else
    808798            gLog << ___err___ << "ERROR - File not empty anymore." << endl;
     
    848838            sout << "WriteRow - Size " << cnt << " does not match expected size " << fTable.bytes_per_row;
    849839#ifdef __EXCEPTIONS
    850             throw runtime_error(sout.str());
     840            throw std::runtime_error(sout.str());
    851841#else
    852842            gLog << ___err___ << "ERROR - " << sout.str() << endl;
     
    876866        else
    877867        {
    878             for (auto it=fTable.cols.begin(); it!=fTable.cols.end(); it++)
     868            for (auto it=fTable.cols.cbegin(); it!=fTable.cols.cend(); it++)
    879869            {
    880870                const char *src  = reinterpret_cast<const char*>(ptr) + it->offset;
     
    902892
    903893    template<typename N>
    904     bool WriteRow(const vector<N> &vec)
     894    bool WriteRow(const std::vector<N> &vec)
    905895    {
    906896        return WriteRow(vec.data(), vec.size()*sizeof(N));
     
    920910        if (tellp()%(80*36)>0)
    921911        {
    922             vector<char> filler(80*36-tellp()%(80*36));
     912            std::vector<char> filler(80*36-tellp()%(80*36));
    923913            write(filler.data(), filler.size());
    924914        }
     
    961951        sout << "Checksum (" << std::hex << chk.val() << ") invalid.";
    962952#ifdef __EXCEPTIONS
    963         throw runtime_error(sout.str());
     953        throw std::runtime_error(sout.str());
    964954#else
    965955        gLog << ___err___ << "ERROR - " << sout.str() << endl;
     
    970960    pair<string, int> GetChecksumData()
    971961    {
    972         string datasum;
    973         string checksum;
     962        std::string datasum;
     963        std::string checksum;
    974964        //cannot directly use the Get methods, because they are only in fits.h
    975         for (vector<Key>::const_iterator it=fKeys.begin(); it!= fKeys.end(); it++)
     965        for (std::vector<Key>::const_iterator it=fKeys.cbegin(); it!= fKeys.cend(); it++)
    976966        {
    977967            if (it->key == "CHECKSUM") checksum = it->value;
     
    1002992        const struct tm *tmp1 = gmtime(&t0);
    1003993
    1004         string str(21, '\0');
     994        std::string str(21, '\0');
    1005995        if (tmp1 && strftime(const_cast<char*>(str.data()), 20, "%Y-%m-%dT%H:%M:%S", tmp1))
    1006996            SetStr("DATE", str, "File creation date");
     
    10611051    fits f("delme.fits");
    10621052    if (!f)
    1063         throw runtime_error("xxx");
     1053        throw std::runtime_error("xxx");
    10641054
    10651055    cout << "Header is valid: " << f.IsHeaderOk() << endl;
  • trunk/Mars/mcore/zofits.h

    r17262 r17263  
    559559            fRealColumns.emplace_back(col, comp);
    560560
    561             ostringstream str;
    562             str << "format of " << name << " [" << CommentFromType(typechar);
    563 
    564             SetStr("ZFORM"+to_string(fRealColumns.size()), to_string(cnt)+typechar, str.str());
     561            SetStr("ZFORM"+to_string(fRealColumns.size()), to_string(cnt)+typechar, "format of "+name+" "+CommentFromType(typechar));
    565562            SetStr("ZCTYP"+to_string(fRealColumns.size()), "FACT", "Compression type: FACT");
    566563
Note: See TracChangeset for help on using the changeset viewer.