001 package util;
002
003 import java.text.DecimalFormat;
004 import org.eso.fits.*;
005 import java.lang.*;
006 import java.util.*;
007 import java.io.*;
008
009 /** Convert FITS to text file
010 * @version 1.0 2003-06-27
011 * @author John Talbot
012 */
013 public class ConvertFits {
014 /** Static method for converting FITS to text files.
015 *
016 * @param argv array of arguments i.e. FITS files
017 */
018 public static void main(String[] argv) {
019 if (argv.length < 1) {
020 System.out.println("Error: must have at least one argument");
021 System.exit(1);
022 }
023
024 FitsFile file = null;
025 for (int na=0; na<argv.length; na++) {
026 try {
027 file = new FitsFile(argv[na]);
028 } catch (FitsException e) {
029 System.out.println("Error: is not a FITS file >" + argv[na] + "<");
030 continue;
031 } catch (IOException e) {
032 System.out.println("Error: cannot open file >" + argv[na] + "<");
033 continue;
034 }
035
036 int noHDU = file.getNoHDUnits();
037 System.out.println("number of header units = " + noHDU);
038 for (int i=0; i<noHDU; i++) {
039 FitsHDUnit hdu = file.getHDUnit(i);
040 FitsHeader hdr = hdu.getHeader();
041 int noKw = hdr.getNoKeywords();
042 int type = hdr.getType();
043 int size = (int) hdr.getDataSize();
044
045 if (true) {
046 System.out.println(hdr.getName());
047 Enumeration enumeration = hdr.getKeywords();
048 while (enumeration.hasMoreElements()) {
049 FitsKeyword kw = (FitsKeyword) enumeration.nextElement();
050 System.out.print("#" + kw.getName());
051 switch (kw.getType()) {
052 case FitsKeyword.COMMENT:
053 System.out.print("(C) " + kw.getComment());
054 break;
055 case FitsKeyword.STRING:
056 System.out.print("(S)= '" + kw.getString() + "'");
057 break;
058 case FitsKeyword.BOOLEAN:
059 System.out.print("(B)= " + kw.getBool());
060 break;
061 case FitsKeyword.INTEGER:
062 System.out.print("(I)= " + kw.getInt());
063 break;
064 case FitsKeyword.REAL:
065 System.out.print("(R)= " + kw.getReal());
066 break;
067 case FitsKeyword.DATE:
068 System.out.print("(D)= " + kw.getString());
069 break;
070 default:
071 }
072 if (0<kw.getComment().length() && (kw.getType()!=FitsKeyword.COMMENT)) {
073 System.out.print(" / " + kw.getComment());
074 }
075 System.out.println();
076 }
077
078 if (type == Fits.IMAGE) {
079 FitsMatrix dm = (FitsMatrix) hdu.getData();
080 int naxis[] = dm.getNaxis();
081 double crval[] = dm.getCrval();
082 double crpix[] = dm.getCrpix();
083 double cdelt[] = dm.getCdelt();
084
085
086 int nv, off, npix;
087 int nval = dm.getNoValues();
088 if (0 < nval) {
089 int ncol = naxis[0];
090 int nrow = nval/ncol;
091 float data[] = new float[ncol];
092 double val;
093 off = nv = npix = 0 ;
094 DecimalFormat xFormatter = new DecimalFormat("0.0");
095 DecimalFormat yFormatter = new DecimalFormat("0.000000");
096 for (int nr=0; nr<nrow; nr++) {
097 try {
098 dm.getFloatValues(off, ncol, data);
099 double wavelength = crval[0];
100 double deltaWavelength = cdelt[0];
101 for (int n = 0; n<ncol; n++) {
102 val = data[n];
103 System.out.print(xFormatter.format(wavelength));
104 if (val != Double.NaN) {
105 System.out.println(" " + yFormatter.format(val));
106 } else {
107 System.out.println(" 0.000000" );
108 }
109 wavelength += deltaWavelength;
110 npix++;
111 }
112 } catch (FitsException e) {
113 }
114 off += ncol;
115 }
116 }
117 }
118
119 } // END IF INTENSITY
120 }
121 }
122
123 System.exit(0);
124 }
125 }