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 }