/// <summary>
 /// Writes a cell to a single row in a table, similarly to WriteCell(Cell),
 /// but this method compresses the position and velocity arrays to take up half
 /// the space (each element is 2 bytes instead of 4). It also writes the
 /// data necessary to decompress the arrays (x0, y0, z0, the inverse scale
 /// factor, the Peano-Hilbert level, and the box length).
 /// </summary>
 /// <param name="c">the cell to write out</param>
 /// <param name="phbits"> the Peano-Hilbert indexing level</param>
 /// <param name="box">the length of the box (in Mpc)</param>
 /// <seealso cref="Cell"/>
 public void WriteCompressedCell(Cell c, int phbits, double box)
 {
     this.Write(c.SnapNum);
     this.Write(c.PHKey);
     Int16[] posArray = c.PosToCompressedArray(phbits, box);
     Int16[] velArray = c.VelToCompressedArray();
     this.Write(c.x0);
     this.Write(c.y0);
     this.Write(c.z0);
     this.Write(c.Count);
     this.Write(c.scaleFactorInv);
     try
     {
         this.Write(SqlSmallIntArrayMax.FromArray(posArray));
         this.Write(SqlSmallIntArrayMax.FromArray(velArray));
         this.Write(SqlBigIntArrayMax.FromArray(c.IdToArray()));
         //don't write out the filter
         //this.WriteFilter(c.filter);
     }
     catch (OverflowException e)
     {
         // TODO: log this in the summary file
         Console.Write(e.Message);
     }
 }