Index: /trunk/Mars/mcore/FITS.h
===================================================================
--- /trunk/Mars/mcore/FITS.h	(revision 17222)
+++ /trunk/Mars/mcore/FITS.h	(revision 17223)
@@ -68,51 +68,36 @@
 
     //Helper structure to simplify the initialization and handling of compressed blocks headers
-    struct BlockHeaderWriter
+    struct Compression
     {
-        BlockHeaderWriter(const std::string& comp="") : header(),
-                                                        sequence()
+        BlockHeader header;
+        std::vector<uint16_t> sequence;
+
+        Compression(const std::vector<uint16_t> &seq, const RowOrdering_t &order=kOrderByCol)
+            : header(0, order, seq.size()), sequence(seq)
         {
-            if (comp == "" || comp == "RAW")
-            {
-                sequence.emplace_back(kFactRaw);
-                return;
-            }
-            if (comp == "SMOOTHMAN")
-            {
-                header = BlockHeader(0, kOrderByRow, 2);
-                sequence.emplace_back(kFactSmoothing);
-                sequence.emplace_back(kFactHuffman16);
-                return;
-            }
 
-            std::ostringstream str;
-            str << "Unkown compression requested: " << comp;
-#ifdef __EXCEPTIONS
-            throw std::runtime_error(str.str());
-#else
-            gLog << ___err___ << "ERROR - " << str.str();
-            return;
-#endif
         }
 
-        void Write(char* to)
+        Compression(const CompressionProcess_t &compression=kFactRaw, const RowOrdering_t &order=kOrderByCol)
+            : header(0, order, 1), sequence(1)
         {
-            memcpy(to, &header, sizeof(BlockHeader));
-            memcpy(to+sizeof(BlockHeader), sequence.data(), header.numProcs*sizeof(uint16_t));
+            sequence[0] = compression;
         }
 
-        uint32_t SizeOnDisk() { return sizeof(BlockHeader) + sizeof(uint16_t)*header.numProcs;}
+        RowOrdering_t getOrdering() const { return RowOrdering_t(header.ordering); }
+        uint32_t getSizeOnDisk() const { return sizeof(BlockHeader) + sizeof(uint16_t)*header.numProcs; }
+        CompressionProcess_t getProc(uint32_t i) const { return CompressionProcess_t(sequence[i]); }
+        uint16_t getNumProcs() const { return header.numProcs; }
 
-        uint16_t Proc(uint32_t i) { return sequence[i]; }
+        void SetBlockSize(uint64_t size) { header.size = size; }
+        void Memcpy(char *dest) const
+        {
+            memcpy(dest, &header, sizeof(BlockHeader));
+            memcpy(dest+sizeof(BlockHeader), sequence.data(), header.numProcs*sizeof(uint16_t));
+        }
 
-        uint16_t NumProcs() { return header.numProcs; }
 
-        char Ordering() { return header.ordering;}
+    };
 
-        void SetBlockSize(uint64_t size) { header.size = size;}
-
-        BlockHeader      header;
-        std::vector<uint16_t> sequence;
-    };
 
 #endif
