001 /*
002 * @(#)ReadFits.java $Revision: 1.2 $ $Date: 2001/04/17 15:15:34 $
003 *
004 * Copyright (C) 1999 European Southern Observatory
005 * License: GNU General Public License version 2 or later
006 */
007 package org.eso.fits;
008
009 import java.lang.*;
010 import java.util.*;
011 import java.io.*;
012
013 /** TestFits class provides a static main method for testing the
014 * FITS class library. It also shows a typical usage of the
015 * classes.
016 *
017 * @version $Id: TestFits.java,v 1.2 2001/04/17 15:15:34 pgrosbol Exp $
018 * @author P.Grosbol, DMD/ESO, <pgrosbol@eso.org>
019 */
020 public class TestFits{
021 /** Static method for testing the FITS class library.
022 *
023 * @param argv array of arguments i.e. FITS files
024 */
025 public static void main(String[] argv) {
026 if (argv.length < 1) {
027 System.out.println("Error: must have at least one argument");
028 System.exit(1);
029 }
030
031 System.out.println("-- Test FITS files --------");
032 FitsFile file = null;
033 for (int na=0; na<argv.length; na++) {
034 try {
035 file = new FitsFile(argv[na]);
036 } catch (FitsException e) {
037 System.out.println("Error: is not a FITS file >"
038 + argv[na] + "<");
039 continue;
040 } catch (IOException e) {
041 System.out.println("Error: cannot open file >"
042 + argv[na] + "<");
043 continue;
044 }
045
046 int noHDU = file.getNoHDUnits();
047 System.out.println("FITS file has " + noHDU + " HDUnits");
048
049 for (int i=0; i<noHDU; i++) {
050 FitsHDUnit hdu = file.getHDUnit(i);
051 FitsHeader hdr = hdu.getHeader();
052 int noKw = hdr.getNoKeywords();
053 int type = hdr.getType();
054 int size = (int) hdr.getDataSize();
055 System.out.println(" " + i + ": >" + hdr.getName()
056 + "< of type >" + Fits.getType(type)
057 + "< with " + noKw + " keywords"
058 + " and " + size + " bytes of data");
059 System.out.println(" Keywords:");
060 Enumeration enumeration = hdr.getKeywords();
061 while (enumeration.hasMoreElements()) {
062 FitsKeyword kw = (FitsKeyword) enumeration.nextElement();
063 System.out.print(" " + kw.getName());
064 switch (kw.getType()) {
065 case FitsKeyword.COMMENT:
066 System.out.print("(C) " + kw.getComment());
067 break;
068 case FitsKeyword.STRING:
069 System.out.print("(S)= '" + kw.getString() + "'");
070 break;
071 case FitsKeyword.BOOLEAN:
072 System.out.print("(B)= " + kw.getBool());
073 break;
074 case FitsKeyword.INTEGER:
075 System.out.print("(I)= " + kw.getInt());
076 break;
077 case FitsKeyword.REAL:
078 System.out.print("(R)= " + kw.getReal());
079 break;
080 case FitsKeyword.DATE:
081 System.out.print("(D)= " + kw.getString());
082 break;
083 default:
084 }
085 if (0<kw.getComment().length()
086 && (kw.getType()!=FitsKeyword.COMMENT)) {
087 System.out.print(" / " + kw.getComment());
088 }
089 System.out.println();
090 }
091
092 if (type == Fits.IMAGE) {
093 System.out.println("\n Check data matrix "
094 + "- compute mean and rms");
095 FitsMatrix dm = (FitsMatrix) hdu.getData();
096 int naxis[] = dm.getNaxis();
097 double crval[] = dm.getCrval();
098 double crpix[] = dm.getCrpix();
099 double cdelt[] = dm.getCdelt();
100
101 System.out.println(" Dimension of matrix: "
102 + naxis.length);
103 for (int n=0; n<naxis.length; n++)
104 System.out.println(" Axis " + n + ": " + naxis[n]
105 + ", " + crpix[n] + ", "
106 + crval[n] + ", " + cdelt[n]);
107 System.out.println("\n");
108
109 int nv, off, npix;
110 int nval = dm.getNoValues();
111 if (0<nval) {
112 int ncol = naxis[0];
113 int nrow = nval/ncol;
114 System.out.println(" Npixel,row,col: " + nval
115 + ", " + nrow + ", " + ncol);
116 float data[] = new float[ncol];
117 double mean, rms, val;
118
119 off = nv = npix = 0 ;
120 mean = rms = 0.0;
121 long time = System.currentTimeMillis();
122 for (int nr=0; nr<nrow; nr++) {
123 try {
124 dm.getFloatValues(off, ncol, data);
125 double wavelength = crval[0]; // JT:
126 double deltaWavelength = cdelt[0]; // JT:
127 for (int n = 0; n<ncol; n++) {
128 val = data[n];
129 System.out.println(wavelength + " " + val); //JT:
130 wavelength += deltaWavelength; //JT:
131 npix++;
132 mean += val;
133 rms += val*val;
134 }
135 } catch (FitsException e) {
136 }
137
138 off += ncol;
139 }
140 mean = mean/npix;
141 rms = rms/npix - mean*mean;
142 rms = ((0.0<rms) ? Math.sqrt(rms) : 0.0);
143 float dtime =
144 (float) (1000.0*(System.currentTimeMillis()-time)/
145 ((double) nval));
146 System.out.println(" Mean: " + (float)mean +
147 ", rms: " + (float)rms +
148 ", Time: " + dtime
149 + " S/Mp, Pixels: " + npix);
150 }
151 } else if (type==Fits.BTABLE || type==Fits.ATABLE) {
152 System.out.println("\n Check table data - list columns");
153 FitsTable dm = (FitsTable) hdu.getData();
154 int nrow = dm.getNoRows();
155 int ncol = dm.getNoColumns();
156 FitsColumn col[] = new FitsColumn[ncol];
157 System.out.println(" Columns: " + ncol
158 + ", Rows: " + nrow);
159 for (int n=0; n<ncol; n++) {
160 col[n] = dm.getColumn(n);
161 System.out.print(" " + n + " >"
162 + col[n].getLabel() + "<, ");
163 System.out.print(col[n].getRepeat() + " ");
164 System.out.print(col[n].getDataType() + ", >");
165 System.out.print(col[n].getDisplay() + "<, >");
166 System.out.println(col[n].getUnit() + "<");
167
168 if (col[n].getDataType() == 'F'
169 || col[n].getDataType() == 'E'
170 || col[n].getDataType() == 'D') {
171 int npix = 0;
172 double mean, rms, val;
173 mean = rms = 0.0;
174 long time = System.currentTimeMillis();
175 for (int nr=0; nr<nrow; nr++) {
176 val = col[n].getReal(nr);
177 if (Double.isNaN(val)) continue;
178 npix++;
179 mean += val;
180 rms += val*val;
181 }
182 float dtime =
183 (float) (1000.0*(System.currentTimeMillis()
184 -time)/((double) nrow));
185 mean = mean/npix;
186 rms = rms/npix - mean*mean;
187 rms = ((0.0<rms) ? Math.sqrt(rms) : 0.0);
188 System.out.println(" no,mean,rms: " + npix
189 + ", " + (float)mean + ", "
190 + (float)rms + "; "
191 + dtime + " S/Mp");
192 } else if (col[n].getDataType() == 'I'
193 || col[n].getDataType() == 'J'
194 || col[n].getDataType() == 'B') {
195 int npix = 0;
196 double mean, rms, val;
197 mean = rms = 0.0;
198 long time = System.currentTimeMillis();
199 for (int nr=0; nr<nrow; nr++) {
200 val = col[n].getInt(nr);
201 if (val == Long.MIN_VALUE) continue;
202 npix++;
203 mean += val;
204 rms += val*val;
205 }
206 float dtime =
207 (float) (1000.0*(System.currentTimeMillis()
208 -time)/((double) nrow));
209 mean = mean/npix;
210 rms = rms/npix - mean*mean;
211 rms = ((0.0<rms) ? Math.sqrt(rms) : 0.0);
212 System.out.println(" no,mean,rms: " + npix
213 + ", " + (float)mean + ", "
214 + (float)rms + "; "
215 + dtime + " S/Mp");
216 }
217 }
218 }
219 }
220 System.out.println("-- Test finished -----------------");
221 }
222
223 System.exit(0);
224 }
225 }