public void TestFitsCopy( /*String[] args*/ ) { String file = Path.GetTempFileName(); File.Copy("..\\..\\testdocs\\ht1.fits", file, true); Fits f = new Fits(file); int i = 0; BasicHDU h; do { h = f.ReadHDU(); if (h != null) { if (i == 0) { System.Console.Out.WriteLine("\n\nPrimary header:\n"); } else { System.Console.Out.WriteLine("\n\nExtension " + i + ":\n"); } i += 1; h.Info(); } } while (h != null); BufferedFile bf = new BufferedFile("gbfits3.fits" /*args[1]*/, FileAccess.ReadWrite, FileShare.ReadWrite); f.Write(bf); bf.Close(); }
public void test() { float[][] data = new float[300][]; for (int i = 0; i < 300; i++) data[i] = new float[300]; for (int i = 0; i < 300; i += 1) { for (int j = 0; j < 300; j += 1) { data[i][j] = 1000 * i + j; } } Fits f = new Fits(); BufferedFile bf = new BufferedFile("tiler1.fits", FileAccess.ReadWrite, FileShare.ReadWrite); f.AddHDU(Fits.MakeHDU(data)); f.Write(bf); bf.Close(); f = new Fits("tiler1.fits"); ImageHDU h = (ImageHDU)f.ReadHDU(); ImageTiler t = h.Tiler; doTile("t1", data, t, 200, 200, 50, 50); doTile("t2", data, t, 133, 133, 72, 26); Object o = h.Data.Kernel; doTile("t3", data, t, 200, 200, 50, 50); doTile("t4", data, t, 133, 133, 72, 26); }
public void TestFitsCopy( /*String[] args*/ ) { String file = "E:\\CSharpFITSIO\\AISCHV3_228_13637_0001_sv09-fd-int.fits" /*args[0]*/; Fits f = new Fits(file); int i = 0; BasicHDU h; do { h = f.ReadHDU(); if (h != null) { if (i == 0) { System.Console.Out.WriteLine("\n\nPrimary header:\n"); } else { System.Console.Out.WriteLine("\n\nExtension " + i + ":\n"); } i += 1; h.Info(); } } while (h != null); BufferedFile bf = new BufferedFile("gbfits3.fits" /*args[1]*/, FileAccess.ReadWrite, FileShare.ReadWrite); f.Write(bf); bf.Close(); }
public void TestReadBuffered() { BufferedFile bf = new BufferedFile("E:\\CSharpFITSIO\\LAB-2.0kms.fits", FileAccess.Read, FileShare.None); Header h = Header.ReadHeader(bf); long n = h.DataSize; int naxes = h.GetIntValue("NAXIS"); int lastAxis = h.GetIntValue("NAXIS"+naxes); HeaderCard hnew= new HeaderCard("NAXIS", naxes - 1,"this is header card with naxes"); h.AddCard(hnew); float[] line = new float[h.DataSize]; for (int i = 0; i < lastAxis; i += 1) { Console.Out.WriteLine("read"); bf.Read(line); } }
public void TestReadBuffered() { String file = Path.GetTempFileName(); File.Copy("..\\..\\testdocs\\ht1.fits", file, true); BufferedFile bf = new BufferedFile(file, FileAccess.Read, FileShare.None); Header h = Header.ReadHeader(bf); long n = h.DataSize; int naxes = h.GetIntValue("NAXIS"); int lastAxis = h.GetIntValue("NAXIS"+naxes); HeaderCard hnew= new HeaderCard("NAXIS", naxes - 1,"this is header card with naxes"); h.AddCard(hnew); float[] line = new float[h.DataSize]; for (int i = 0; i < lastAxis; i += 1) { Console.Out.WriteLine("read"); bf.Read(line); } }
public void Save(Exposure exposure, string filename, Dictionary<string, object> metadata) { Fits fits = new Fits(); int[] dimensions = new[] { exposure.Height, exposure.Width }; // choose the type from calculating the bitness from the exposure maxdepth long a = 0, bits = -1; while (a < exposure.MaxDepth) a = (int)Math.Pow(2.0, ++bits); Array pixels; if (bits <= 16) { pixels = ConvertToShort(exposure.Pixels); } else { pixels = exposure.Pixels; } var data = ArrayFuncs.Curl(pixels, dimensions); var hdu = FitsFactory.HDUFactory(data); // Write the headers. BuildHeader(hdu.Header, exposure, metadata, a); fits.AddHDU(hdu); if (!filename.EndsWith(".fits")) filename += ".fits"; BufferedFile bf = new BufferedFile(filename, FileAccess.ReadWrite, FileShare.None); fits.Write(bf); bf.Close(); }
public void BuildByColumn() { BinaryTable btab = new BinaryTable(); btab.AddColumn(floats); btab.AddColumn(vf); btab.AddColumn(strings); btab.AddColumn(vbool); btab.AddColumn(ints); Fits f = new Fits(); f.AddHDU(Fits.MakeHDU(btab)); // BufferedDataStream bdos = new BufferedDataStream(new FileStream("bt3.fits",FileMode.Open)); BufferedFile bdos = new BufferedFile("bt3.fits", FileAccess.ReadWrite, FileShare.ReadWrite); f.Write(bdos); bdos.Close(); f = new Fits("bt3.fits"); BinaryTableHDU bhdu = (BinaryTableHDU)f.GetHDU(1); btab = (BinaryTable)bhdu.Data; Assertion.AssertEquals("col1", true, ArrayFuncs.ArrayEquals(floats, bhdu.GetColumn(0))); Assertion.AssertEquals("col2", true, ArrayFuncs.ArrayEquals(vf, bhdu.GetColumn(1))); // problem is here only String[] col = (String[])bhdu.GetColumn(2); for (int i = 0; i < col.Length; i += 1) { col[i] = col[i].Trim(); } Assertion.AssertEquals("coi3", true, ArrayFuncs.ArrayEquals(strings, col)); Assertion.AssertEquals("col4", true, ArrayFuncs.ArrayEquals(vbool, bhdu.GetColumn(3))); Assertion.AssertEquals("col5", true, ArrayFuncs.ArrayEquals(ints, bhdu.GetColumn(4))); f.Close(); }
public void BuildByRow() { Fits f = new Fits("bt2.fits", FileAccess.Read); f.Read(); BinaryTableHDU bhdu = (BinaryTableHDU)f.GetHDU(1); Header hdr = bhdu.Header; BinaryTable btab = (BinaryTable)bhdu.Data; for (int i = 0; i < 50; i += 1) { Object[] row = (Object[])btab.GetRow(i); float[] qx = (float[])row[1]; Array[] p = (Array[])row[0]; float[] pt = (float[])p.GetValue(0); pt[0] = (float)(i * Math.Sin(i)); btab.AddRow(row); } f = new Fits(); f.AddHDU(Fits.MakeHDU(btab)); BufferedFile bf = new BufferedFile("bt4.fits", FileAccess.ReadWrite, FileShare.ReadWrite); f.Write(bf); bf.Flush(); bf.Close(); f = new Fits("bt4.fits", FileAccess.Read); btab = (BinaryTable)f.GetHDU(1).Data; Assertion.AssertEquals("row1", 100, btab.nRow); // Try getting data before we Read in the table. Array[] xf = (Array[])btab.GetColumn(0); Array[] xft = (Array[])xf.GetValue(50); float[] xftt = (float[])xft.GetValue(0); Assertion.AssertEquals("row2", (float)0, (float)xftt[0]); xft = (Array[])xf.GetValue(99); xftt = (float[])xft.GetValue(0); Assertion.AssertEquals("row3", (float)(49 * Math.Sin(49)), (float)xftt[0]); for (int i = 0; i < xf.Length; i += 3) { bool[] ba = (bool[])btab.GetElement(i, 5); float[] fx = (float[])btab.GetElement(i, 1); int trow = i % 50; Assertion.AssertEquals("row4", true, ArrayFuncs.ArrayEquals(ba, vbool[trow])); // prob 1 Assertion.AssertEquals("row6", true, ArrayFuncs.ArrayEquals(fx, vf[trow])); } // Fill the table. Data data = f.GetHDU(1).Data; xf = (Array[])btab.GetColumn(0); xft = (Array[])xf.GetValue(50); xftt = (float[])xft.GetValue(0); Assertion.AssertEquals("row7", 0F, (float)xftt[0]); xft = (Array[])xf.GetValue(99); xftt = (float[])xft.GetValue(0); Assertion.AssertEquals("row8", (float)(49 * Math.Sin(49)), (float)xftt[0]); for (int i = 0; i < xf.Length; i += 3) { bool[] ba = (bool[])btab.GetElement(i, 5); float[] fx = (float[])btab.GetElement(i, 1); int trow = i % 50; Assertion.AssertEquals("row9", true, ArrayFuncs.ArrayEquals(ba, vbool[trow])); // prob 2 Assertion.AssertEquals("row11", true, ArrayFuncs.ArrayEquals(fx, vf[trow])); } f.Close(); }
public void TestVar() { Object[] data = new Object[] { floats, vf, vs, vd, shorts, vbool }; Fits f = new Fits(); f.AddHDU(Fits.MakeHDU(data)); //BufferedDataStream bdos = new BufferedDataStream(new FileStream("bt2.fits", FileMode.Open, FileAccess.ReadWrite)); BufferedFile bdos = new BufferedFile("bt2.fits", FileAccess.ReadWrite, FileShare.ReadWrite); f.Write(bdos); bdos.Close(); f = new Fits("bt2.fits", FileAccess.Read); f.Read(); BinaryTableHDU bhdu = (BinaryTableHDU)f.GetHDU(1); Header hdr = bhdu.Header; Assertion.AssertEquals("var1", true, hdr.GetIntValue("PCOUNT") > 0); Assertion.AssertEquals("var2", 6, hdr.GetIntValue("TFIELDS")); for (int i = 0; i < data.Length; i += 1) { Assertion.AssertEquals("vardata(" + i + ")", true, ArrayFuncs.ArrayEquals(data[i], bhdu.GetColumn(i))); } }
public void TestSimpleIO() { FitsFactory.UseAsciiTables = false; Fits f = new Fits(); Object[] data = new Object[]{bytes, bits, bools, shorts, ints, floats, doubles, longs, strings}; f.AddHDU(Fits.MakeHDU(data)); BinaryTableHDU bhdu = (BinaryTableHDU)f.GetHDU(1); bhdu.SetColumnName(0, "bytes", null); bhdu.SetColumnName(1, "bits", "bits later on"); bhdu.SetColumnName(6, "doubles", null); bhdu.SetColumnName(5, "floats", "4 x 4 array"); BufferedFile bf = new BufferedFile("bt1.fits", FileAccess.ReadWrite, FileShare.ReadWrite); f.Write(bf); bf.Flush(); bf.Close(); f = new Fits("bt1.fits"); f.Read(); Assertion.AssertEquals("NHDU", 2, f.NumberOfHDUs); BinaryTableHDU thdu = (BinaryTableHDU)f.GetHDU(1); Header hdr = thdu.Header; Assertion.AssertEquals("HDR1", 9, hdr.GetIntValue("TFIELDS")); Assertion.AssertEquals("HDR2", 2, hdr.GetIntValue("NAXIS")); Assertion.AssertEquals("HDR3", 8, hdr.GetIntValue("BITPIX")); Assertion.AssertEquals("HDR4", "BINTABLE", hdr.GetStringValue("XTENSION")); Assertion.AssertEquals("HDR5", "bytes", hdr.GetStringValue("TTYPE1")); Assertion.AssertEquals("HDR6", "doubles", hdr.GetStringValue("TTYPE7")); for (int i = 0; i < data.Length; i += 1) { Object col = thdu.GetColumn(i); if (i == 8) { String[] st = (String[])col; for (int j = 0; j < st.Length; j += 1) { st[j] = st[j].Trim(); } } Assertion.AssertEquals("Data" + i, true, ArrayFuncs.ArrayEquals(data[i], col)); } f.Close(); }
public void TestSet() { Fits f = new Fits("bt2.fits", FileAccess.Read); f.Read(); BinaryTableHDU bhdu = (BinaryTableHDU)f.GetHDU(1); Header hdr = bhdu.Header; // Check the various set methods on variable length data. float[] dta = (float[])bhdu.GetElement(4, 1); dta = new float[] { 22, 21, 20 }; bhdu.SetElement(4, 1, dta); // BufferedDataStream bdos = new BufferedDataStream(new FileStream("bt2a.fits",FileMode.Open)); BufferedFile bdos = new BufferedFile("bt2a.fits", FileAccess.ReadWrite, FileShare.ReadWrite); f.Write(bdos); bdos.Close(); f = new Fits("bt2a.fits"); bhdu = (BinaryTableHDU)f.GetHDU(1); float[] xdta = (float[])bhdu.GetElement(4, 1); Assertion.AssertEquals("ts1", true, ArrayFuncs.ArrayEquals(dta, xdta)); Assertion.AssertEquals("ts2", true, ArrayFuncs.ArrayEquals(bhdu.GetElement(3, 1), vf[3])); Assertion.AssertEquals("ts5", true, ArrayFuncs.ArrayEquals(bhdu.GetElement(5, 1), vf[5])); Assertion.AssertEquals("ts4", true, ArrayFuncs.ArrayEquals(bhdu.GetElement(4, 1), dta)); float[] tvf = new float[] { 101, 102, 103, 104 }; vf[4] = tvf; bhdu.SetColumn(1, vf); Assertion.AssertEquals("ts6", true, ArrayFuncs.ArrayEquals(bhdu.GetElement(3, 1), vf[3])); Assertion.AssertEquals("ts7", true, ArrayFuncs.ArrayEquals(bhdu.GetElement(4, 1), vf[4])); Assertion.AssertEquals("ts8", true, ArrayFuncs.ArrayEquals(bhdu.GetElement(5, 1), vf[5])); // bdos = new BufferedDataStream(new FileStream("bt2b.fits",FileMode.Open)); bdos = new BufferedFile("bt2b.fits", FileAccess.ReadWrite, FileShare.ReadWrite); f.Write(bdos); bdos.Close(); f.Close(); f = new Fits("bt2b.fits"); bhdu = (BinaryTableHDU)f.GetHDU(1); Assertion.AssertEquals("ts9", true, ArrayFuncs.ArrayEquals(bhdu.GetElement(3, 1), vf[3])); Assertion.AssertEquals("ts10", true, ArrayFuncs.ArrayEquals(bhdu.GetElement(4, 1), vf[4])); Assertion.AssertEquals("ts11", true, ArrayFuncs.ArrayEquals(bhdu.GetElement(5, 1), vf[5])); Object[] rw = (Object[])bhdu.GetRow(4); float[] trw = new float[] { -1, -2, -3, -4, -5, -6 }; rw[1] = trw; bhdu.SetRow(4, rw); Assertion.AssertEquals("ts12", true, ArrayFuncs.ArrayEquals(bhdu.GetElement(3, 1), vf[3])); Assertion.AssertEquals("ts13", false, ArrayFuncs.ArrayEquals(bhdu.GetElement(4, 1), vf[4])); Assertion.AssertEquals("ts14", true, ArrayFuncs.ArrayEquals(bhdu.GetElement(4, 1), trw)); Assertion.AssertEquals("ts15", true, ArrayFuncs.ArrayEquals(bhdu.GetElement(5, 1), vf[5])); // bdos = new BufferedDataStream(new FileStream("bt2c.fits",FileMode.Open)); bdos = new BufferedFile("bt2c.fits", FileAccess.ReadWrite, FileShare.ReadWrite); f.Write(bdos); bdos.Close(); f.Close(); f = new Fits("bt2c.fits"); bhdu = (BinaryTableHDU)f.GetHDU(1); Assertion.AssertEquals("ts16", true, ArrayFuncs.ArrayEquals(bhdu.GetElement(3, 1), vf[3])); Assertion.AssertEquals("ts17", false, ArrayFuncs.ArrayEquals(bhdu.GetElement(4, 1), vf[4])); Assertion.AssertEquals("ts18", true, ArrayFuncs.ArrayEquals(bhdu.GetElement(4, 1), trw)); Assertion.AssertEquals("ts19", true, ArrayFuncs.ArrayEquals(bhdu.GetElement(5, 1), vf[5])); f.Close(); }
public void TestRandomGroup() { //float[,] fa = new float[20,20]; float[][] fa = new float[20][]; for (int i = 0; i < fa.Length; i++) fa[i] = new float[20]; float[] pa = new float[3]; BufferedFile bf = new BufferedFile("rg1.fits", FileAccess.ReadWrite, FileShare.ReadWrite); Object[][] data = new Object[1][]; data[0] = new Object[2]; data[0][0] = pa; data[0][1] = fa; System.Console.Out.WriteLine("***** Write header ******"); BasicHDU hdu = Fits.MakeHDU(data); Header hdr = hdu.Header; // Change the number of groups hdr.AddValue("GCOUNT", 20, "Number of groups"); hdr.Write(bf); System.Console.Out.WriteLine("***** Write data group by group ******"); for (int i = 0; i < 20; i += 1) { for (int j = 0; j < pa.Length; j += 1) { pa[j] = i + j; } for (int j = 0; j < fa.GetLength(0); j += 1) { try { // fa[j, j] = i * j; fa[j][j] = i * j; } catch (Exception e) { Console.WriteLine(e.Message); ; Console.WriteLine("i ,j value:" + i + " " + j); } } // Write a group bf.WriteArray(data); } byte[] padding = new byte[FitsUtil.Padding(20 * ArrayFuncs.ComputeSize(data))]; System.Console.Out.WriteLine("****** Write padding ******"); bf.Write(padding); bf.Flush(); bf.Close(); System.Console.Out.WriteLine("****** Read data back in ******"); Fits f = new Fits("rg1.fits"); BasicHDU[] hdus = f.Read(); data = (Object[][])hdus[0].Kernel; // data = hdus[0].Kernel; System.Console.Out.WriteLine("**** Check parameter and data info *****"); for (int i = 0; i < data.Length; i += 1) { pa = (float[])data[i][0]; // fa = (float[,]) data[i,1]; Array[] tfa = (Array[])data[i][1]; for (int j = 0; j < pa.Length; j += 1) { Assertion.AssertEquals("paramTest:" + i + " " + j, (float)(i + j), pa[j]); } for (int j = 0; j < fa.Length; j += 1) { // Assertion.AssertEquals("dataTest:" + i + " " + j, (float)(i * j), fa[j,j]); Assertion.AssertEquals("dataTest:" + i + " " + j, (float)(i * j), ((Array)tfa.GetValue(j)).GetValue(j)); } } f = new Fits(); System.Console.Out.WriteLine("**** Create HDU from kernel *****"); // Generate a FITS HDU from the kernel. f.AddHDU(Fits.MakeHDU(data)); bf = new BufferedFile("rg2.fits", FileAccess.ReadWrite, FileShare.ReadWrite); System.Console.Out.WriteLine("**** Write new file *****"); f.Write(bf); bf.Flush(); bf.Close(); System.Console.Out.WriteLine("**** Read and check *****"); f = new Fits("rg2.fits"); data = (Object[][])f.Read()[0].Kernel; for (int i = 0; i < data.Length; i += 1) { pa = (float[])data[i][0]; // fa = (float[,]) data[i,1]; Array[] tfa = (Array[])data[i][1]; for (int j = 0; j < pa.Length; j += 1) { Assertion.AssertEquals("paramTest:" + i + " " + j, (float)(i + j), pa[j]); } for (int j = 0; j < fa.Length; j += 1) { //Assertion.AssertEquals("dataTest:" + i + " " + j, (float)(i * j), fa[j,j]); Assertion.AssertEquals("dataTest:" + i + " " + j, (float)(i * j), ((Array)tfa.GetValue(j)).GetValue(j)); } } }
public void TestRowDelete() { Fits f = new Fits("bt1.fits"); f.Read(); BinaryTableHDU thdu = (BinaryTableHDU)f.GetHDU(1); Assertion.AssertEquals("Del1", 50, thdu.NRows); thdu.DeleteRows(10, 20); Assertion.AssertEquals("Del2", 30, thdu.NRows); double[] dbl = (double[])thdu.GetColumn(6); Assertion.AssertEquals("del3", dbl[9], doubles[9]); Assertion.AssertEquals("del4", dbl[10], doubles[30]); BufferedFile bf = new BufferedFile("bt1x.fits", FileAccess.ReadWrite, FileShare.ReadWrite); f.Write(bf); bf.Close(); f.Close(); f = new Fits("bt1x.fits"); f.Read(); thdu = (BinaryTableHDU)f.GetHDU(1); dbl = (double[])thdu.GetColumn(6); Assertion.AssertEquals("del5", 30, thdu.NRows); Assertion.AssertEquals("del6", 9, thdu.NCols); Assertion.AssertEquals("del7", dbl[9], doubles[9]); Assertion.AssertEquals("del8", dbl[10], doubles[30]); thdu.DeleteRows(20); Assertion.AssertEquals("del9", 20, thdu.NRows); dbl = (double[])thdu.GetColumn(6); Assertion.AssertEquals("del10", 20, dbl.Length); Assertion.AssertEquals("del11", dbl[0], doubles[0]); Assertion.AssertEquals("del12", dbl[19], doubles[39]); f.Close(); }
private void BuildCalSpecDb() { var db = new CalSpecDatabase(); int totalBad = 0; string[] lines2 = File.ReadAllLines(@"F:\WORK\tangra3\Tangra 3\VideoOperations\Spectroscopy\AbsFluxCalibration\Standards\AbsFlux-TangraStars.csv"); for (int i = 1; i < lines2.Length; i++) { string[] tokens = lines2[i].Split(','); string calSpecId = tokens[0].Trim(); string RA_FK5_Hours = tokens[1].Trim(); string DEG_FK5_Deg = tokens[2].Trim(); string pmRA = tokens[3].Trim(); string pmDec = tokens[4].Trim(); string specType = tokens[5].Trim(); string magV = tokens[6].Trim(); string magBV = tokens[7].Trim(); string absFluxId = tokens[8].Trim(); string stisFlag = tokens[9].Trim(); string fitsFilePath = tokens[10].Trim(); int stisFrom = int.Parse(tokens[11].Trim()); int stisTo = int.Parse(tokens[12].Trim()); string tyc2 = tokens[13].Trim(); string ucac4 = tokens[14].Trim(); if (!string.IsNullOrEmpty(pmRA) && !string.IsNullOrEmpty(pmDec)) { var star = new CalSpecStar() { CalSpecStarId = calSpecId, AbsFluxStarId = absFluxId, STIS_Flag = stisFlag, FITS_File = fitsFilePath, TYC2 = tyc2, U4 = ucac4, pmRA = double.Parse(pmRA), pmDE = double.Parse(pmDec), MagV = double.Parse(magV), MagBV = double.Parse(magBV), SpecType = specType, RA_J2000_Hours = AstroConvert.ToRightAcsension(RA_FK5_Hours), DE_J2000_Deg = AstroConvert.ToDeclination(DEG_FK5_Deg) }; string filePath = Path.GetFullPath(@"Z:\CALSPEC\current_calspec\" + fitsFilePath); using (var bf = new BufferedFile(filePath, FileAccess.Read, FileShare.ReadWrite)) { var fitsFile = new Fits(); fitsFile.Read(bf); BasicHDU imageHDU = fitsFile.GetHDU(1); var table = (ColumnTable)imageHDU.Data.DataArray; double[] wavelengths = (double[])table.Columns[0]; float[] fluxes = (float[])table.Columns[1]; short[] goodnessFlags = (short[])table.Columns[5]; for (int j = 0; j < fluxes.Length; j++) { if (wavelengths[j] < stisFrom) continue; if (wavelengths[j] > stisTo) break; if (goodnessFlags[j] != 0) star.DataPoints.Add(wavelengths[j], fluxes[j]); else totalBad++; } fitsFile.Close(); } db.Stars.Add(star); } } using (var compressedStream = new FileStream(@"F:\WORK\tangra3\Tangra 3\VideoOperations\Spectroscopy\AbsFluxCalibration\Standards\CalSpec.db", FileMode.CreateNew, FileAccess.Write)) using (var deflateStream = new DeflateStream(compressedStream, CompressionMode.Compress, true)) { using (var writer = new BinaryWriter(deflateStream)) { db.Serialize(writer); } } using (var compressedStream = new FileStream(@"F:\WORK\tangra3\Tangra 3\VideoOperations\Spectroscopy\AbsFluxCalibration\Standards\CalSpec.db", FileMode.Open, FileAccess.Read)) using (var deflateStream = new DeflateStream(compressedStream, CompressionMode.Decompress, true)) { using (var reader = new BinaryReader(deflateStream)) { var db2 = new CalSpecDatabase(reader); Trace.WriteLine(db2.Stars.Count); } } MessageBox.Show(totalBad.ToString() + " bad entries excluded."); string[] fitsFiles = Directory.GetFiles(@"Z:\CALSPEC\current_calspec", "*.fit"); var dist = new Dictionary<int, int>(); foreach (string filePath in fitsFiles) { using (var bf = new BufferedFile(filePath, FileAccess.Read, FileShare.ReadWrite)) { var fitsFile = new Fits(); fitsFile.Read(bf); var bld = new StringBuilder(); BasicHDU headerHDU = fitsFile.GetHDU(0); BasicHDU imageHDU = fitsFile.GetHDU(1); for (int i = 0; i < headerHDU.Header.NumberOfCards; i++) { string cardString = headerHDU.Header.GetCard(i); bld.AppendFormat("# {0}\r\n", cardString); } for (int i = 0; i < imageHDU.Header.NumberOfCards; i++) { string cardString = imageHDU.Header.GetCard(i); bld.AppendFormat("# {0}\r\n", cardString); } var table = (ColumnTable)imageHDU.Data.DataArray; if (table.Columns.Length == 7 && table.Columns[0] is double[] && table.Columns[1] is float[] && table.Columns[2] is float[] && table.Columns[3] is float[] && table.Columns[4] is float[] && table.Columns[5] is short[] && table.Columns[6] is float[]) { double[] wavelengths = (double[])table.Columns[0]; float[] fluxes = (float[])table.Columns[1]; float[] col2 = (float[])table.Columns[2]; float[] col3 = (float[])table.Columns[3]; float[] col4 = (float[])table.Columns[4]; short[] goodnessFlags = (short[])table.Columns[5]; float[] exposures = (float[])table.Columns[6]; for (int i = 0; i < fluxes.Length; i++) { if (wavelengths[i] < 2000) continue; if (wavelengths[i] > 15000) break; bld.Append(wavelengths[i].ToString().PadLeft(20)); bld.Append(fluxes[i].ToString().PadLeft(20)); bld.Append(col2[i].ToString().PadLeft(20)); bld.Append(col3[i].ToString().PadLeft(20)); bld.Append(col4[i].ToString().PadLeft(20)); bld.Append(goodnessFlags[i].ToString().PadLeft(15)); bld.Append(exposures[i].ToString().PadLeft(15)); bld.AppendLine(); int expMS = (int)Math.Round(exposures[i] * 1000); if (!dist.ContainsKey(expMS)) dist.Add(expMS, 0); dist[expMS]++; } } string outFileName = Path.ChangeExtension(filePath, ".txt"); File.WriteAllText(outFileName, bld.ToString()); fitsFile.Close(); } } var output = new StringBuilder(); foreach (int key in dist.Keys) { output.AppendFormat("{0}s = {1}\r\n", (key / 1000.0).ToString("0.0"), dist[key]); } MessageBox.Show(output.ToString()); }
internal void SaveFitsFrame(string fileName, int width, int height, uint[] framePixels, DateTime timeStamp, float exposureSeconds) { Fits f = new Fits(); object data = SaveImageData(width, height, framePixels); BasicHDU imageHDU = Fits.MakeHDU(data); nom.tam.fits.Header hdr = imageHDU.Header; hdr.AddValue("SIMPLE", "T", null); hdr.AddValue("BITPIX", 32, null); hdr.AddValue("NAXIS", 2, null); hdr.AddValue("NAXIS1", width, null); hdr.AddValue("NAXIS2", height, null); hdr.AddValue("NOTES", m_Note, null); if (exposureSeconds > 0) hdr.AddValue("EXPOSURE", exposureSeconds.ToString("0.000", CultureInfo.InvariantCulture), "Exposure, seconds"); hdr.AddValue("DATEOBS", timeStamp.Date.ToString("yyyy-MM-dd", CultureInfo.InvariantCulture), m_DateObsComment); hdr.AddValue("TIMEOBS", timeStamp.ToString("HH:mm:ss.fff", CultureInfo.InvariantCulture), m_TimeObsComment); hdr.AddValue("TANGRAVE", string.Format("{0} v{1}", VersionHelper.AssemblyProduct, VersionHelper.AssemblyFileVersion), "Tangra version"); f.AddHDU(imageHDU); // Write a FITS file. using (BufferedFile bf = new BufferedFile(fileName, FileAccess.ReadWrite, FileShare.ReadWrite)) { f.Write(bf); bf.Flush(); } }
private void frmSortFitsFiles_Shown(object sender, EventArgs e) { m_FitsHeaders = new Header[m_FitsFiles.Length]; m_FitsTimestamps = new DateTime?[m_FitsFiles.Length]; pbar.Minimum = 0; pbar.Maximum = m_FitsFiles.Length; pbar.Value = 0; var fileSizeInfo = new Dictionary<string, FitsFileFormatInfoRecord>(); TimeStampReader = null; for (int i = 0; i < m_FitsFiles.Length; i++) { try { using (BufferedFile bf = new BufferedFile(m_FitsFiles[i], FileAccess.Read, FileShare.ReadWrite)) { Header hdr = Header.ReadHeader(bf); m_FitsHeaders[i] = hdr; int numAxis = -1; int width = -1; int height = -1; int.TryParse(hdr.FindCard("NAXIS") != null ? hdr.FindCard("NAXIS").Value : "0", out numAxis); int.TryParse(hdr.FindCard("NAXIS1") != null ? hdr.FindCard("NAXIS1").Value : "0", out width); int.TryParse(hdr.FindCard("NAXIS2") != null ? hdr.FindCard("NAXIS2").Value : "0", out height); string format = String.Format("{0} x {1}", width, height); if (fileSizeInfo.ContainsKey(format)) fileSizeInfo[format].NumFiles++; else fileSizeInfo.Add(format, new FitsFileFormatInfoRecord { FirstFile = Path.GetFileName(m_FitsFiles[i]), NumFiles = 1 }); bool isMidPoint; double? fitsExposure = null; DateTime? timestamp = null; try { timestamp = FITSHelper.ParseExposure(hdr, TimeStampReader, out isMidPoint, out fitsExposure); } catch (Exception ex) { Trace.WriteLine(ex.ToString()); } if (i == 0 && (!fitsExposure.HasValue || !timestamp.HasValue)) { var frm = new frmChooseTimeHeaders(hdr, GetOrderedFitsFileHash()); if (frm.ShowDialog(this) == DialogResult.OK) { TimeStampReader = frm.TimeStampReader; } try { timestamp = FITSHelper.ParseExposure(hdr, TimeStampReader, out isMidPoint, out fitsExposure); } catch (Exception ex) { Trace.WriteLine(ex.ToString()); } } m_FitsTimestamps[i] = timestamp; if (timestamp != null && fitsExposure.HasValue) m_FilesWithExposure++; else m_FilesWithoutExposure++; } } catch (Exception ex) { throw new ApplicationException(string.Format("Error processing FITS files: {0}", m_FitsFiles[i]), ex); } pbar.Value = i; Application.DoEvents(); } pbar.Value = pbar.Minimum; Application.DoEvents(); if (fileSizeInfo.Count > 1) { var errorInfo = new StringBuilder(); foreach (string key in fileSizeInfo.Keys) { if (fileSizeInfo[key].NumFiles > 1) errorInfo.AppendFormat("'{1}' and {2} other files: {0}\r\n", key, fileSizeInfo[key].FirstFile, fileSizeInfo[key].NumFiles - 1); else errorInfo.AppendFormat("'{1}' (single file): {0}\r\n", key, fileSizeInfo[key].FirstFile); } ErrorMessage = string.Format("Cannot load FITS file sequence because there are files with different image dimentions:\r\n\r\n{0}\r\n\r\nPlease ensure that all files in the directory have the same dimention (number of axis).", errorInfo.ToString()); } timer1.Enabled = true; }
public void ModifyTable() { Fits f = new Fits("at1.fits", FileAccess.ReadWrite); Object[] samp = GetSampleCols(); AsciiTableHDU hdu = (AsciiTableHDU)f.GetHDU(1); AsciiTable data = (AsciiTable)hdu.GetData(); float[] f1 = (float[])data.GetColumn(0); float[] f2 = (float[])f1.Clone(); for (int i = 0; i < f2.Length; i += 1) { f2[i] = 2 * f2[i]; } data.SetColumn(0, f2); f1 = new float[] { 3.14159f }; data.SetElement(3, 0, f1); hdu.SetNullString(0, "**INVALID**"); data.SetNull(5, 0, true); data.SetNull(6, 0, true); Object[] row = new Object[5]; row[0] = new float[] { 6.28f }; row[1] = new int[] { 22 }; row[2] = new long[] { 0 }; row[3] = new double[] { -3 }; row[4] = new String[] { "A string" }; data.SetRow(5, row); data.SetElement(4, 2, new long[] { 54321 }); BufferedFile bf = new BufferedFile("at1x.fits", FileAccess.ReadWrite, FileShare.ReadWrite); f.Write(bf); bf.Flush(); bf.Close(); // f.Write("at1x.fits"); f = new Fits("at1x.fits", FileAccess.Read); AsciiTable tab = (AsciiTable)f.GetHDU(1).Data; Object[] kern = (Object[])tab.Kernel; float[] fx = (float[])kern[0]; int[] ix = (int[])kern[1]; long[] lx = (long[])kern[2]; double[] dx = (double[])kern[3]; String[] sx = (String[])kern[4]; float[] fy = (float[])samp[0]; int[] iy = (int[])samp[1]; long[] ly = (long[])samp[2]; double[] dy = (double[])samp[3]; String[] sy = (String[])samp[4]; Assertion.AssertEquals("Null", true, tab.IsNull(6, 0)); Assertion.AssertEquals("Null2", false, tab.IsNull(5, 0)); for (int i = 0; i < data.NRows; i += 1) { if (i != 5) { if (i != 6) { // Null Assertion.AssertEquals("f" + i, 1f, f2[i] / fx[i], Math.Pow(10, -6)); } Assertion.AssertEquals("i" + i, iy[i], ix[i]); if (i == 4) { Assertion.AssertEquals("l4", 54321L, lx[i]); } else { Assertion.AssertEquals("l" + i, ly[i], lx[i]); } Assertion.AssertEquals("d" + i, 1f, dy[i] / dx[i], Math.Pow(10, -14)); Assertion.AssertEquals("s" + i, sy[i], sx[i].Trim()); } } Object[] r5 = (Object[])data.GetRow(5); String[] st = (String[])r5[4]; st[0] = st[0].Trim(); for (int i = 0; i < r5.Length; i++) { Assertion.AssertEquals("row5", true, ArrayFuncs.ArrayEquals(row[i], r5[i], Math.Pow(10, -6), Math.Pow(10, -14))); } //Assertion.AssertEquals("row5", true, ArrayFuncs.ArrayEquals(row, r5, Math.Pow(10,-6), Math.Pow(10,-14))); }
void WriteFile(Fits f, String name) { BufferedFile bf = new BufferedFile(name, FileAccess.ReadWrite, FileShare.ReadWrite); f.Write(bf); bf.Flush(); bf.Close(); }
public static void bufferedFileTest(System.String filename, int numIts, double[] db, double[] db2, float[] fl, float[] fl2, long[] ln, long[] ln2, int[] in_Renamed, int[] in2, short[] sh, short[] sh2, char[] ch, char[] ch2, byte[] by, byte[] by2, bool[] bl, bool[] bl2, int[][][][] multi, int[][][][] multi2) { int dim = db.Length; double ds = SupportClass.Random.NextDouble() - 0.5; double ds2; float fs = (float)(SupportClass.Random.NextDouble() - 0.5); float fs2; int is_Renamed = (int)(1000000 * (SupportClass.Random.NextDouble() - 500000)); int is2; long ls = (long)(100000000000L * (SupportClass.Random.NextDouble() - 50000000000L)); long ls2; short ss = (short)(60000 * (SupportClass.Random.NextDouble() - 30000)); short ss2; // char cs = (char) (60000 * SupportClass.Random.NextDouble()); char cs = SupportClass.NextChar(); char cs2; byte bs = (byte)(256 * SupportClass.Random.NextDouble() - 128); byte bs2; bool bls = (SupportClass.Random.NextDouble() > 0.5); bool bls2; System.Console.Out.WriteLine("New libraries: nom.tam.util.BufferedFile"); System.Console.Out.WriteLine(" Using array I/O methods."); BufferedFile f = new BufferedFile(filename, FileAccess.ReadWrite, FileShare.ReadWrite); resetTime(); for (int i = 0; i < numIts; i += 1) { f.WriteArray(db); } System.Console.Out.WriteLine(" BF Dbl write: " + (8 * dim * numIts) / (1000 * deltaTime())); for (int i = 0; i < numIts; i += 1) { f.WriteArray(fl); } System.Console.Out.WriteLine(" BF Flt write: " + (4 * dim * numIts) / (1000 * deltaTime())); for (int i = 0; i < numIts; i += 1) { f.WriteArray(in_Renamed); } System.Console.Out.WriteLine(" BF Int write: " + (4 * dim * numIts) / (1000 * deltaTime())); for (int i = 0; i < numIts; i += 1) { f.WriteArray(ln); } System.Console.Out.WriteLine(" BF Lng write: " + (8 * dim * numIts) / (1000 * deltaTime())); for (int i = 0; i < numIts; i += 1) { f.WriteArray(sh); } System.Console.Out.WriteLine(" BF Sht write: " + (2 * dim * numIts) / (1000 * deltaTime())); for (int i = 0; i < numIts; i += 1) { f.WriteArray(ch); } System.Console.Out.WriteLine(" BF Chr write: " + (2 * dim * numIts) / (1000 * deltaTime())); for (int i = 0; i < numIts; i += 1) { f.WriteArray(by); } System.Console.Out.WriteLine(" BF Byt write: " + (1 * dim * numIts) / (1000 * deltaTime())); for (int i = 0; i < numIts; i += 1) { f.WriteArray(bl); } System.Console.Out.WriteLine(" BF Boo write: " + (1 * dim * numIts) / (1000 * deltaTime())); f.Write((byte)bs); f.Write((System.Char)cs); f.Write((System.Int16)ss); f.Write(is_Renamed); f.Write(ls); f.Write(fs); f.Write(ds); f.Write(bls); f.WriteArray(multi); f.Flush(); f.Seek(0, SeekOrigin.Begin); resetTime(); for (int i = 0; i < numIts; i += 1) { f.ReadArray(db2); } System.Console.Out.WriteLine(" BF Dbl read: " + (8 * dim * numIts) / (1000 * deltaTime())); for (int i = 0; i < numIts; i += 1) { f.ReadArray(fl2); } System.Console.Out.WriteLine(" BF Flt read: " + (4 * dim * numIts) / (1000 * deltaTime())); for (int i = 0; i < numIts; i += 1) { f.ReadArray(in2); } System.Console.Out.WriteLine(" BF Int read: " + (4 * dim * numIts) / (1000 * deltaTime())); for (int i = 0; i < numIts; i += 1) { f.ReadArray(ln2); } System.Console.Out.WriteLine(" BF Lng read: " + (8 * dim * numIts) / (1000 * deltaTime())); for (int i = 0; i < numIts; i += 1) { f.ReadArray(sh2); } System.Console.Out.WriteLine(" BF Sht read: " + (2 * dim * numIts) / (1000 * deltaTime())); for (int i = 0; i < numIts; i += 1) { f.ReadArray(ch2); } System.Console.Out.WriteLine(" BF Chr read: " + (2 * dim * numIts) / (1000 * deltaTime())); for (int i = 0; i < numIts; i += 1) { f.ReadArray(by2); } System.Console.Out.WriteLine(" BF Byt read: " + (1 * dim * numIts) / (1000 * deltaTime())); for (int i = 0; i < numIts; i += 1) { f.ReadArray(bl2); } System.Console.Out.WriteLine(" BF Boo read: " + (1 * dim * numIts) / (1000 * deltaTime())); bs2 = (byte)f.ReadByte(); cs2 = f.ReadChar(); ss2 = f.ReadInt16(); is2 = f.ReadInt32(); ls2 = f.ReadInt64(); fs2 = f.ReadSingle(); ds2 = f.ReadDouble(); bls2 = f.ReadBoolean(); // Now read only pieces of the multidimensional array. for (int i = 0; i < 5; i += 1) { // Skip the odd initial indices and read the evens. System.Int64 temp_Int64; temp_Int64 = f.Position; temp_Int64 = f.Seek(4000) - temp_Int64; int generatedAux27 = (int)temp_Int64; f.ReadArray(multi2[2 * i + 1]); } f.Close(); System.Console.Out.WriteLine("BufferedFile Verification:"); System.Console.Out.WriteLine(" An error should be reported for double and float NaN's"); System.Console.Out.WriteLine(" Arrays:"); for (int i = 0; i < dim; i += 1) { if (db[i] != db2[i] && !Double.IsNaN(db[i]) && !Double.IsNaN(db2[i])) { System.Console.Out.WriteLine(" Double error at " + i + " " + db[i] + " " + db2[i]); } if (fl[i] != fl2[i] && !Single.IsNaN(fl[i]) && !Single.IsNaN(fl2[i])) { System.Console.Out.WriteLine(" Float error at " + i + " " + fl[i] + " " + fl2[i]); } if (in_Renamed[i] != in2[i]) { System.Console.Out.WriteLine(" Int error at " + i + " " + in_Renamed[i] + " " + in2[i]); } if (ln[i] != ln2[i]) { System.Console.Out.WriteLine(" Long error at " + i + " " + ln[i] + " " + ln2[i]); } if (sh[i] != sh2[i]) { System.Console.Out.WriteLine(" Short error at " + i + " " + sh[i] + " " + sh2[i]); } if (ch[i] != ch2[i]) { System.Console.Out.WriteLine(" Char error at " + i + " " + (int)ch[i] + " " + (int)ch2[i]); } if (by[i] != by2[i]) { System.Console.Out.WriteLine(" Byte error at " + i + " " + by[i] + " " + by2[i]); } if (bl[i] != bl2[i]) { System.Console.Out.WriteLine(" Bool error at " + i + " " + bl[i] + " " + bl2[i]); } } System.Console.Out.WriteLine(" Scalars:"); // Check the scalars. if (bls != bls2) { System.Console.Out.WriteLine(" Bool Scalar mismatch:" + bls + " " + bls2); } if (bs != bs2) { System.Console.Out.WriteLine(" Byte Scalar mismatch:" + bs + " " + bs2); } if (cs != cs2) { System.Console.Out.WriteLine(" Char Scalar mismatch:" + (int)cs + " " + (int)cs2); } if (ss != ss2) { System.Console.Out.WriteLine(" Short Scalar mismatch:" + ss + " " + ss2); } if (is_Renamed != is2) { System.Console.Out.WriteLine(" Int Scalar mismatch:" + is_Renamed + " " + is2); } if (ls != ls2) { System.Console.Out.WriteLine(" Long Scalar mismatch:" + ls + " " + ls2); } if (fs != fs2) { System.Console.Out.WriteLine(" Float Scalar mismatch:" + fs + " " + fs2); } if (ds != ds2) { System.Console.Out.WriteLine(" Double Scalar mismatch:" + ds + " " + ds2); } System.Console.Out.WriteLine(" Multi: odd rows should match"); for (int i = 0; i < 10; i += 1) { System.Console.Out.WriteLine(" " + i + " " + multi[i][i][i][i] + " " + multi2[i][i][i][i]); } System.Console.Out.WriteLine("Done BufferedFile Tests"); }
public void TestSimpleImages() { float[][] img = new float[300][]; for (int i = 0; i < 300; i++) img[i] = new float[300]; Fits f = new Fits(); ImageHDU hdu = (ImageHDU)Fits.MakeHDU(img); BufferedFile bf = new BufferedFile("ht1.fits", FileAccess.ReadWrite, FileShare.ReadWrite); f.AddHDU(hdu); f.Write(bf); bf.Close(); f = new Fits("ht1.fits"); hdu = (ImageHDU)f.GetHDU(0); Header hdr = hdu.Header; Assertion.AssertEquals("NAXIS", 2, hdr.GetIntValue("NAXIS")); Assertion.AssertEquals("NAXIS1", 300, hdr.GetIntValue("NAXIS1")); Assertion.AssertEquals("NAXIS2", 300, hdr.GetIntValue("NAXIS2")); Assertion.AssertEquals("NAXIS2a", 300, hdr.GetIntValue("NAXIS2", -1)); Assertion.AssertEquals("NAXIS3", -1, hdr.GetIntValue("NAXIS3", -1)); Assertion.AssertEquals("BITPIX", -32, hdr.GetIntValue("BITPIX")); Cursor c = hdr.GetCursor(); c.MoveNext(); HeaderCard hc = (HeaderCard)((DictionaryEntry)c.Current).Value; Assertion.AssertEquals("SIMPLE_1", "SIMPLE", hc.Key); c.MoveNext(); hc = (HeaderCard)((DictionaryEntry)c.Current).Value; Assertion.AssertEquals("BITPIX_2", "BITPIX", hc.Key); c.MoveNext(); hc = (HeaderCard)((DictionaryEntry)c.Current).Value; Assertion.AssertEquals("NAXIS_3", "NAXIS", hc.Key); c.MoveNext(); hc = (HeaderCard)((DictionaryEntry)c.Current).Value; Assertion.AssertEquals("NAXIS1_4", "NAXIS1", hc.Key); c.MoveNext(); hc = (HeaderCard)((DictionaryEntry)c.Current).Value; Assertion.AssertEquals("NAXIS2_5", "NAXIS2", hc.Key); f.Close(); }
private void BuildAbsFlux() { var indexFile = new StringBuilder(); indexFile.AppendLine("BD and HD CALSPEC stars with STIS fluxes between 3000 and 10000 Angstroms"); indexFile.AppendLine("Name FK5_Coordinates_J2000 Type Mag B-V File_Name"); foreach (CalSpecStar star in CalSpecDatabase.Instance.Stars) { if (star.AbsFluxStarId.StartsWith("TYC")) continue; string modifiedId = star.AbsFluxStarId.Replace(" ", "_"); if (modifiedId.Length < 10) modifiedId += "_"; while (modifiedId.Length < 10) { int firstUnderScorePos = modifiedId.IndexOf("_"); modifiedId = modifiedId.Substring(0, firstUnderScorePos) + "_" + modifiedId.Substring(firstUnderScorePos); } string raStr = AstroConvert.ToStringValue(star.RA_J2000_Hours, "HH MM SS.TTT"); string deStr = AstroConvert.ToStringValue(star.DE_J2000_Deg, "+DD MM SS.TT"); string dataFileName = Path.GetFileNameWithoutExtension(star.FITS_File) + "_t1.txt"; string line = string.Format("{0}{1} {2} {3}{4} {5} {6}\r\n", modifiedId.PadRight(14), raStr, deStr, star.SpecType.PadRight(7), star.MagV.ToString("0.00").PadLeft(5), star.MagBV.ToString("0.00").PadLeft(5), dataFileName); indexFile.Append(line); string filePath = Path.GetFullPath(@"Z:\CALSPEC\current_calspec\" + star.FITS_File); double wavelengthFrom = star.DataPoints.Keys.Min(); double wavelengthTo = star.DataPoints.Keys.Max(); using (var bf = new BufferedFile(filePath, FileAccess.Read, FileShare.ReadWrite)) { var fitsFile = new Fits(); fitsFile.Read(bf); BasicHDU imageHDU = fitsFile.GetHDU(1); var table = (ColumnTable) imageHDU.Data.DataArray; double[] wavelengths = (double[])table.Columns[0]; float[] fluxes = (float[])table.Columns[1]; float[] col2 = (float[])table.Columns[2]; float[] col3 = (float[])table.Columns[3]; float[] col4 = (float[])table.Columns[4]; short[] goodnessFlags = (short[])table.Columns[5]; float[] exposures = (float[])table.Columns[6]; var dataFile = new StringBuilder(); dataFile.AppendLine(" WAVELENGTH FLUX STATERROR SYSERROR FWHM DATAQUAL TOTEXP"); dataFile.AppendLine(" 1D 1E 1E 1E 1E 1I 1E"); dataFile.AppendLine(" ANGSTROMS FLAM FLAM FLAM ANGSTROMS NONE SEC"); for (int j = 0; j < fluxes.Length; j++) { if (wavelengths[j] < wavelengthFrom) continue; if (wavelengths[j] > wavelengthTo) break; string dataLine = string.Format("{0}{1}{2}{3}{4} {5}{6}", ((int)Math.Round(wavelengths[j])).ToString().PadLeft(16), fluxes[j].ToString("E4").PadLeft(14), col2[j].ToString("E4").PadLeft(14), col3[j].ToString("E4").PadLeft(14), col4[j].ToString("#.0").PadLeft(13), goodnessFlags[j].ToString(), exposures[j].ToString("E1").PadLeft(12)); dataFile.AppendLine(dataLine); } fitsFile.Close(); File.WriteAllText(@"Z:\AbsFlux\v3\" + dataFileName, dataFile.ToString()); } } File.WriteAllText(@"Z:\AbsFlux\v3\AbsFluxCALSPECstars.txt", indexFile.ToString()); }
public void TestObj() { FitsFactory.UseAsciiTables = false; /*** Create a binary table from an Object[][] array */ Object[][] x = new Object[5][]; for (int i = 0; i < 5; i += 1) { x[i] = new Object[3]; x[i][0] = new float[] { i }; string temp = string.Concat("AString", i); x[i][1] = new string[] { temp }; int[][] t = new int[2][]; for (int j = 0; j < 2; j++) { t[j] = new int[2]; t[j][0] = j * i; t[j][1] = (j + 2) * i; } x[i][2] = t; } Fits f = new Fits(); BasicHDU hdu = Fits.MakeHDU(x); f.AddHDU(hdu); BufferedFile bf = new BufferedFile("bt5.fits", FileAccess.ReadWrite, FileShare.ReadWrite); f.Write(bf); bf.Close(); /* Now get rid of some columns */ BinaryTableHDU xhdu = (BinaryTableHDU)hdu; // First column Assertion.AssertEquals("delcol1", 3, xhdu.NCols); xhdu.DeleteColumnsIndexOne(1, 1); Assertion.AssertEquals("delcol2", 2, xhdu.NCols); xhdu.DeleteColumnsIndexZero(1, 1); Assertion.AssertEquals("delcol3", 1, xhdu.NCols); bf = new BufferedFile("bt6.fits", FileAccess.ReadWrite, FileShare.ReadWrite); f.Write(bf); bf.Close(); f = new Fits("bt6.fits"); xhdu = (BinaryTableHDU)f.GetHDU(1); Assertion.AssertEquals("delcol4", 1, xhdu.NCols); f.Close(); }
// Make FITS file public void MakeFile() { Initialize(); Fits f = new Fits(); // Make HDUs of various types. f.AddHDU(Fits.MakeHDU(bimg)); f.AddHDU(Fits.MakeHDU(simg)); f.AddHDU(Fits.MakeHDU(iimg)); f.AddHDU(Fits.MakeHDU(limg)); f.AddHDU(Fits.MakeHDU(fimg)); f.AddHDU(Fits.MakeHDU(dimg)); f.AddHDU(Fits.MakeHDU(img3)); f.AddHDU(Fits.MakeHDU(img1)); Assertion.AssertEquals("HDU count before", f.NumberOfHDUs, 8); // Write a FITS file. BufferedFile bf = new BufferedFile("image1.fits", FileAccess.ReadWrite, FileShare.ReadWrite); f.Write(bf); bf.Flush(); bf.Close(); }
public void Delete() { Fits f = new Fits("at1.fits", FileAccess.ReadWrite); TableHDU th = (TableHDU)f.GetHDU(1); Assertion.AssertEquals("delrBef", 50, th.NRows); th.DeleteRows(2, 2); Assertion.AssertEquals("delrAft", 48, th.NRows); BufferedFile bf = new BufferedFile("at1y.fits", FileAccess.ReadWrite, FileShare.ReadWrite); f.Write(bf); bf.Close(); f.Close(); f = new Fits("at1y.fits"); th = (TableHDU)f.GetHDU(1); Assertion.AssertEquals("delrAft2", 48, th.NRows); Assertion.AssertEquals("delcBef", 5, th.NCols); th.DeleteColumnsIndexZero(3, 2); Assertion.AssertEquals("delcAft1", 3, th.NCols); th.DeleteColumnsIndexZero(0, 2); Assertion.AssertEquals("delcAft2", 1, th.NCols); bf = new BufferedFile("at1z.fits", FileAccess.ReadWrite, FileShare.ReadWrite); f.Write(bf); bf.Close(); f.Close(); f = new Fits("at1z.fits"); th = (TableHDU)f.GetHDU(1); Assertion.AssertEquals("delcAft3", 1, th.NCols); f.Close(); }
public static void bufferedFileTest(System.String filename, int numIts, double[] db, double[] db2, float[] fl, float[] fl2, long[] ln, long[] ln2, int[] in_Renamed, int[] in2, short[] sh, short[] sh2, char[] ch, char[] ch2, byte[] by, byte[] by2, bool[] bl, bool[] bl2, int[][][][] multi, int[][][][] multi2) { int dim = db.Length; double ds = SupportClass.Random.NextDouble() - 0.5; double ds2; float fs = (float)(SupportClass.Random.NextDouble() - 0.5); float fs2; int is_Renamed = (int)(1000000 * (SupportClass.Random.NextDouble() - 500000)); int is2; long ls = (long)(100000000000L * (SupportClass.Random.NextDouble() - 50000000000L)); long ls2; short ss = (short)(60000 * (SupportClass.Random.NextDouble() - 30000)); short ss2; // char cs = (char) (60000 * SupportClass.Random.NextDouble()); char cs = SupportClass.NextChar(); char cs2; byte bs = (byte)(256 * SupportClass.Random.NextDouble() - 128); byte bs2; bool bls = (SupportClass.Random.NextDouble() > 0.5); bool bls2; System.Console.Out.WriteLine("New libraries: nom.tam.util.BufferedFile"); System.Console.Out.WriteLine(" Using array I/O methods."); BufferedFile f = new BufferedFile(filename, FileAccess.ReadWrite, FileShare.ReadWrite); resetTime(); for (int i = 0; i < numIts; i += 1) f.WriteArray(db); System.Console.Out.WriteLine(" BF Dbl write: " + (8 * dim * numIts) / (1000 * deltaTime())); for (int i = 0; i < numIts; i += 1) f.WriteArray(fl); System.Console.Out.WriteLine(" BF Flt write: " + (4 * dim * numIts) / (1000 * deltaTime())); for (int i = 0; i < numIts; i += 1) f.WriteArray(in_Renamed); System.Console.Out.WriteLine(" BF Int write: " + (4 * dim * numIts) / (1000 * deltaTime())); for (int i = 0; i < numIts; i += 1) f.WriteArray(ln); System.Console.Out.WriteLine(" BF Lng write: " + (8 * dim * numIts) / (1000 * deltaTime())); for (int i = 0; i < numIts; i += 1) f.WriteArray(sh); System.Console.Out.WriteLine(" BF Sht write: " + (2 * dim * numIts) / (1000 * deltaTime())); for (int i = 0; i < numIts; i += 1) f.WriteArray(ch); System.Console.Out.WriteLine(" BF Chr write: " + (2 * dim * numIts) / (1000 * deltaTime())); for (int i = 0; i < numIts; i += 1) f.WriteArray(by); System.Console.Out.WriteLine(" BF Byt write: " + (1 * dim * numIts) / (1000 * deltaTime())); for (int i = 0; i < numIts; i += 1) f.WriteArray(bl); System.Console.Out.WriteLine(" BF Boo write: " + (1 * dim * numIts) / (1000 * deltaTime())); f.Write((byte)bs); f.Write((System.Char)cs); f.Write((System.Int16)ss); f.Write(is_Renamed); f.Write(ls); f.Write(fs); f.Write(ds); f.Write(bls); f.WriteArray(multi); f.Flush(); f.Seek(0, SeekOrigin.Begin); resetTime(); for (int i = 0; i < numIts; i += 1) f.ReadArray(db2); System.Console.Out.WriteLine(" BF Dbl read: " + (8 * dim * numIts) / (1000 * deltaTime())); for (int i = 0; i < numIts; i += 1) f.ReadArray(fl2); System.Console.Out.WriteLine(" BF Flt read: " + (4 * dim * numIts) / (1000 * deltaTime())); for (int i = 0; i < numIts; i += 1) f.ReadArray(in2); System.Console.Out.WriteLine(" BF Int read: " + (4 * dim * numIts) / (1000 * deltaTime())); for (int i = 0; i < numIts; i += 1) f.ReadArray(ln2); System.Console.Out.WriteLine(" BF Lng read: " + (8 * dim * numIts) / (1000 * deltaTime())); for (int i = 0; i < numIts; i += 1) f.ReadArray(sh2); System.Console.Out.WriteLine(" BF Sht read: " + (2 * dim * numIts) / (1000 * deltaTime())); for (int i = 0; i < numIts; i += 1) f.ReadArray(ch2); System.Console.Out.WriteLine(" BF Chr read: " + (2 * dim * numIts) / (1000 * deltaTime())); for (int i = 0; i < numIts; i += 1) f.ReadArray(by2); System.Console.Out.WriteLine(" BF Byt read: " + (1 * dim * numIts) / (1000 * deltaTime())); for (int i = 0; i < numIts; i += 1) f.ReadArray(bl2); System.Console.Out.WriteLine(" BF Boo read: " + (1 * dim * numIts) / (1000 * deltaTime())); bs2 = (byte)f.ReadByte(); cs2 = f.ReadChar(); ss2 = f.ReadInt16(); is2 = f.ReadInt32(); ls2 = f.ReadInt64(); fs2 = f.ReadSingle(); ds2 = f.ReadDouble(); bls2 = f.ReadBoolean(); // Now read only pieces of the multidimensional array. for (int i = 0; i < 5; i += 1) { // Skip the odd initial indices and read the evens. System.Int64 temp_Int64; temp_Int64 = f.Position; temp_Int64 = f.Seek(4000) - temp_Int64; int generatedAux27 = (int)temp_Int64; f.ReadArray(multi2[2 * i + 1]); } f.Close(); System.Console.Out.WriteLine("BufferedFile Verification:"); System.Console.Out.WriteLine(" An error should be reported for double and float NaN's"); System.Console.Out.WriteLine(" Arrays:"); for (int i = 0; i < dim; i += 1) { if (db[i] != db2[i] && !Double.IsNaN(db[i]) && !Double.IsNaN(db2[i])) { System.Console.Out.WriteLine(" Double error at " + i + " " + db[i] + " " + db2[i]); } if (fl[i] != fl2[i] && !Single.IsNaN(fl[i]) && !Single.IsNaN(fl2[i])) { System.Console.Out.WriteLine(" Float error at " + i + " " + fl[i] + " " + fl2[i]); } if (in_Renamed[i] != in2[i]) { System.Console.Out.WriteLine(" Int error at " + i + " " + in_Renamed[i] + " " + in2[i]); } if (ln[i] != ln2[i]) { System.Console.Out.WriteLine(" Long error at " + i + " " + ln[i] + " " + ln2[i]); } if (sh[i] != sh2[i]) { System.Console.Out.WriteLine(" Short error at " + i + " " + sh[i] + " " + sh2[i]); } if (ch[i] != ch2[i]) { System.Console.Out.WriteLine(" Char error at " + i + " " + (int)ch[i] + " " + (int)ch2[i]); } if (by[i] != by2[i]) { System.Console.Out.WriteLine(" Byte error at " + i + " " + by[i] + " " + by2[i]); } if (bl[i] != bl2[i]) { System.Console.Out.WriteLine(" Bool error at " + i + " " + bl[i] + " " + bl2[i]); } } System.Console.Out.WriteLine(" Scalars:"); // Check the scalars. if (bls != bls2) { System.Console.Out.WriteLine(" Bool Scalar mismatch:" + bls + " " + bls2); } if (bs != bs2) { System.Console.Out.WriteLine(" Byte Scalar mismatch:" + bs + " " + bs2); } if (cs != cs2) { System.Console.Out.WriteLine(" Char Scalar mismatch:" + (int)cs + " " + (int)cs2); } if (ss != ss2) { System.Console.Out.WriteLine(" Short Scalar mismatch:" + ss + " " + ss2); } if (is_Renamed != is2) { System.Console.Out.WriteLine(" Int Scalar mismatch:" + is_Renamed + " " + is2); } if (ls != ls2) { System.Console.Out.WriteLine(" Long Scalar mismatch:" + ls + " " + ls2); } if (fs != fs2) { System.Console.Out.WriteLine(" Float Scalar mismatch:" + fs + " " + fs2); } if (ds != ds2) { System.Console.Out.WriteLine(" Double Scalar mismatch:" + ds + " " + ds2); } System.Console.Out.WriteLine(" Multi: odd rows should match"); for (int i = 0; i < 10; i += 1) { System.Console.Out.WriteLine(" " + i + " " + multi[i][i][i][i] + " " + multi2[i][i][i][i]); } System.Console.Out.WriteLine("Done BufferedFile Tests"); }
public void TestDegen2() { FitsFactory.UseAsciiTables = false; Object[] data = new Object[]{ new String[]{"a", "b", "c", "d", "e", "f"}, new int[] {1,2,3,4,5,6}, new float[] {1f,2f, 3f, 4f, 5f,6f}, new String[]{"", "", "" , "" , "", ""}, new String[]{"a", "", "c", "", "e", "f"}, new String[]{"", "b", "c", "d", "e", "f"}, new String[]{"a", "b", "c", "d", "e", ""}, new String[]{null, null, null, null, null, null}, new String[]{"a", null, "c", null, "e", "f"}, new String[]{null, "b", "c", "d", "e", "f"}, new String[]{"a", "b", "c", "d", "e", null} }; Fits f = new Fits(); f.AddHDU(Fits.MakeHDU(data)); BufferedFile ff = new BufferedFile("bt8.fits", FileAccess.ReadWrite, FileShare.ReadWrite); f.Write(ff); ff.Flush(); ff.Close(); f = new Fits("bt8.fits"); BinaryTableHDU bhdu = (BinaryTableHDU)f.GetHDU(1); Assertion.AssertEquals("deg21", "e", bhdu.GetElement(4, data.Length - 1)); Assertion.AssertEquals("deg22", "", bhdu.GetElement(5, data.Length - 1)); String[] col = (String[])bhdu.GetColumn(0); Assertion.AssertEquals("deg23", "a", col[0]); Assertion.AssertEquals("deg24", "f", col[5]); col = (String[])bhdu.GetColumn(3); Assertion.AssertEquals("deg25", "", col[0]); Assertion.AssertEquals("deg26", "", col[5]); col = (String[])bhdu.GetColumn(7); // All nulls Assertion.AssertEquals("deg27", "", col[0]); Assertion.AssertEquals("deg28", "", col[5]); col = (String[])bhdu.GetColumn(8); Assertion.AssertEquals("deg29", "a", col[0]); Assertion.AssertEquals("deg210", "", col[1]); f.Close(); }
public void TestDegenerate() { String[] sa = new String[10]; int[,] ia = new int[10, 0]; Fits f = new Fits(); for (int i = 0; i < sa.Length; i += 1) { sa[i] = ""; } Object[] data = new Object[] { sa, ia }; BinaryTableHDU bhdu = (BinaryTableHDU)Fits.MakeHDU(data); Header hdr = bhdu.Header; f.AddHDU(bhdu); BufferedFile bf = new BufferedFile("bt7.fits", FileAccess.ReadWrite, FileShare.ReadWrite); f.Write(bf); bf.Close(); Assertion.AssertEquals("degen1", 2, hdr.GetIntValue("TFIELDS")); Assertion.AssertEquals("degen2", 10, hdr.GetIntValue("NAXIS2")); Assertion.AssertEquals("degen3", 0, hdr.GetIntValue("NAXIS1")); f = new Fits("bt7.fits"); bhdu = (BinaryTableHDU)f.GetHDU(1); hdr = bhdu.Header; Assertion.AssertEquals("degen4", 2, hdr.GetIntValue("TFIELDS")); Assertion.AssertEquals("degen5", 10, hdr.GetIntValue("NAXIS2")); Assertion.AssertEquals("degen6", 0, hdr.GetIntValue("NAXIS1")); f.Close(); }
internal static void SaveDarkOrFlatFrame(string fileName, int width, int height, string notes, float[,] averagedData, float exposureSeconds, int numFrames) { Fits f = new Fits(); object data = SaveImageData(width, height, averagedData); BasicHDU imageHDU = Fits.MakeHDU(data); nom.tam.fits.Header hdr = imageHDU.Header; hdr.AddValue("SIMPLE", "T", null); hdr.AddValue("BITPIX", -32 /* Floating Point Data*/, null); hdr.AddValue("NAXIS", 2, null); hdr.AddValue("NAXIS1", width, null); hdr.AddValue("NAXIS2", height, null); if (notes.Length > HeaderCard.MAX_VALUE_LENGTH) notes = notes.Substring(0, HeaderCard.MAX_VALUE_LENGTH); hdr.AddValue("NOTES", notes, null); if (exposureSeconds > 0) { hdr.AddValue("EXPOSURE", exposureSeconds.ToString("0.000", CultureInfo.InvariantCulture), null); hdr.AddValue("EXPTIME", exposureSeconds.ToString("0.000", CultureInfo.InvariantCulture), null); } hdr.AddValue("SNAPSHOT", numFrames.ToString(), null); hdr.AddValue("TANGRAVE", string.Format("{0} v{1}", VersionHelper.AssemblyProduct, VersionHelper.AssemblyFileVersion), null); if (TangraConfig.Settings.Generic.ReverseGammaCorrection) hdr.AddValue("TANGAMMA", TangraConfig.Settings.Photometry.EncodingGamma.ToString("0.0000", CultureInfo.InvariantCulture), null); if (TangraConfig.Settings.Generic.ReverseCameraResponse) hdr.AddValue("TANCMRSP", ((int)TangraConfig.Settings.Photometry.KnownCameraResponse).ToString(CultureInfo.InvariantCulture), null); f.AddHDU(imageHDU); // Write a FITS file. using (BufferedFile bf = new BufferedFile(fileName, FileAccess.ReadWrite, FileShare.ReadWrite)) { f.Write(bf); bf.Flush(); } }