/// <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); } }