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 import javax.swing.*;
010 import ui.recognizer.PlotFileFilter;
011
012 /** Convert FITS to text file
013 * @version 1.0 2003-06-27
014 * @author John Talbot
015 */
016 public class ConvertFitsELODIE {
017 /** Static method for converting FITS to text files.
018 *
019 * @param argv array of arguments i.e. FITS files
020 */
021 public static void main(String[] argv) {
022
023 if (argv.length < 1) {
024 javax.swing.filechooser.FileFilter filter = new PlotFileFilter("FITS Files", new String[] {"fits", "fit"});
025
026 JFileChooser loadFileChooser = new JFileChooser();
027 loadFileChooser.setDialogTitle("Convert FITS files or directory");
028 loadFileChooser.setCurrentDirectory(new File("."));
029 loadFileChooser.setFileSelectionMode(JFileChooser.FILES_AND_DIRECTORIES);
030 loadFileChooser.addChoosableFileFilter(filter);
031 loadFileChooser.setFileFilter(filter);
032
033 JFrame f = new JFrame("Convert FITS files or directory");
034
035 f.setSize(300, 150);
036 f.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
037 f.pack();
038 f.setVisible(true);
039
040 File file = null;
041 if (loadFileChooser.showOpenDialog(f) == JFileChooser.APPROVE_OPTION) { // BUG: 'up' icon in file chooser is disabled
042 file = loadFileChooser.getSelectedFile();
043 }
044
045 if (file == null) System.exit(0);
046 if (file.isDirectory()) { // if File is a directory then process all files in that directory
047 File[] files = file.listFiles();
048 for (int i = 0 ; i < files.length; i++)
049 convertFile(files[i]);
050
051 } else {
052 convertFile(file);
053 }
054 }
055 //TODO: handle command line arguments for (int na=0; na<argv.length; na++) {
056 System.exit(0);
057 }
058
059 public static void convertFile(File aFile) {
060 DecimalFormat xFormatter = new DecimalFormat("0.0");
061 DecimalFormat yFormatter = new DecimalFormat("0.000000");
062 FitsFile file = null;
063 try {
064 file = new FitsFile(aFile);
065 String name = aFile.getName();
066 System.out.println(name);
067 FileWriter writer = new FileWriter(name.split("\\.")[0] + ".txt");
068 int noHDU = file.getNoHDUnits();
069 for (int i=0; i<noHDU; i++) {
070 FitsHDUnit hdu = file.getHDUnit(i);
071 FitsHeader hdr = hdu.getHeader();
072 int noKw = hdr.getNoKeywords();
073 int type = hdr.getType();
074 int size = (int) hdr.getDataSize();
075
076 if ( hdr.getName().equals("INTENSITY")) {
077 Enumeration enumeration = hdr.getKeywords();
078 while (enumeration.hasMoreElements()) {
079 FitsKeyword kw = (FitsKeyword) enumeration.nextElement();
080 writer.write("#" + kw.getName());
081 switch (kw.getType()) {
082 case FitsKeyword.COMMENT:
083 writer.write("(C) " + kw.getComment());
084 break;
085 case FitsKeyword.STRING:
086 writer.write("(S)= '" + kw.getString() + "'");
087 break;
088 case FitsKeyword.BOOLEAN:
089 writer.write("(B)= " + kw.getBool());
090 break;
091 case FitsKeyword.INTEGER:
092 writer.write("(I)= " + kw.getInt());
093 break;
094 case FitsKeyword.REAL:
095 writer.write("(R)= " + kw.getReal());
096 break;
097 case FitsKeyword.DATE:
098 writer.write("(D)= " + kw.getString());
099 break;
100 default:
101 }
102 if (0<kw.getComment().length() && (kw.getType()!=FitsKeyword.COMMENT)) {
103 writer.write(" / " + kw.getComment());
104 }
105 writer.write("\n");
106 }
107 if (type == Fits.IMAGE) {
108 FitsMatrix dm = (FitsMatrix) hdu.getData();
109 int naxis[] = dm.getNaxis();
110 double crval[] = dm.getCrval();
111 double crpix[] = dm.getCrpix();
112 double cdelt[] = dm.getCdelt();
113 int nv, off, npix;
114 int nval = dm.getNoValues();
115 if (0<nval) {
116 int ncol = naxis[0];
117 int nrow = nval/ncol;
118 float data[] = new float[ncol];
119 double val;
120 off = nv = npix = 0;
121
122 for (int nr=0; nr<nrow; nr++) {
123 try {
124 dm.getFloatValues(off, ncol, data);
125 double wavelength = crval[0];
126 double deltaWavelength = cdelt[0];
127 StringBuffer s;
128 for (int n = 0; n<ncol; n++) {
129 val = data[n];
130 s = new StringBuffer(xFormatter.format(wavelength));
131 s.append(" ");
132 String y = yFormatter.format(val);
133 if (y.length() != 8) {
134 s.append("0.000000");
135 } else {
136 s.append(y);
137 }
138 s.append("\n");
139 writer.write(s.toString());
140 wavelength += deltaWavelength;
141 npix++;
142 }
143 } catch (FitsException e) {
144 }
145 off += ncol;
146 }
147 }
148 }
149 }
150 }
151 if (file != null) file.closeFile();
152 if (writer != null) writer.close();
153 } catch (FitsException e) {
154 System.out.println("Error: is not a FITS file >" + aFile + "<");
155 return;
156 } catch (IOException e) {
157 System.out.println("Error: cannot open file >" + aFile + "<");
158 return;
159 }
160 }
161 }