001 /*
002 * @(#)ListFits.java $Revision: 1.3 $ $Date: 2001/09/19 09:38:22 $
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 /** ListFits class provides a static main method for listing a set
014 * of FITS keywords in FITS files.
015 * @version $Revision: 1.3 $ $Date: 2001/09/19 09:38:22 $
016 * @author P.Grosbol, DMD/ESO, <pgrosbol@eso.org>
017 */
018 public class ListFits{
019 /** Static main method for listing keywords of a set of FITS files.
020 *
021 * @param argv First argument is a list of FITS files or directories,
022 * second argument is a comma separated list of FITS
023 * keywords to be listed.
024 */
025 public static void main(String[] argv) {
026 if (argv.length < 1) {
027 System.out.println("Error: must be called with one argument");
028 System.exit(1);
029 }
030
031 // get list of files
032
033 StringTokenizer files = new StringTokenizer(argv[0],",");
034
035 // get list of keywords to list for each file
036
037 String[] keys = new String[0];
038 if (argv.length > 1) {
039 StringTokenizer stok = new StringTokenizer(argv[1],",");
040 keys = new String[stok.countTokens()];
041 int no = 0;
042 while (stok.hasMoreTokens()) {
043 keys[no++] = (stok.nextToken()).toUpperCase();
044 }
045 stok = null;
046 }
047
048 // go through files one by one
049
050 int nofiles = 0;
051 int nokwords = 0;
052 long time = System.currentTimeMillis();
053 while (files.hasMoreTokens()) {
054 String name = files.nextToken();
055 File file = new File(name);
056
057 // if directory read all files in it
058
059 String[] flist = new String[1];
060 if (file.isDirectory()) {
061 flist = file.list();
062 } else {
063 flist[0] = name;
064 }
065
066 for (int i=0; i<flist.length; i++) {
067 if (!FitsFile.isFitsFile(flist[i])) continue;
068
069 FitsFile ffile = null; // open FITS file
070 try {
071 ffile = new FitsFile(flist[i]);
072 } catch (Exception e) {
073 continue;
074 }
075
076 nofiles++; // get prime FITS header
077 int noHDU = ffile.getNoHDUnits();
078 FitsHDUnit hdu = ffile.getHDUnit(0);
079 FitsHeader hdr = hdu.getHeader();
080 nokwords += hdr.getNoKeywords();
081 System.out.print(flist[i]);
082
083 // list specified keywords in the file
084
085 for (int n=0; n<keys.length; n++) {
086 FitsKeyword kw = (FitsKeyword) hdr.getKeyword(keys[n]);
087 if (kw == null) continue;
088 switch (kw.getType()) {
089 case FitsKeyword.STRING:
090 System.out.print(" " + kw.getString());
091 break;
092 case FitsKeyword.BOOLEAN:
093 System.out.print(" " + kw.getBool());
094 break;
095 case FitsKeyword.INTEGER:
096 System.out.print(" " + kw.getInt());
097 break;
098 case FitsKeyword.REAL:
099 System.out.print(" " + kw.getReal());
100 break;
101 case FitsKeyword.DATE:
102 System.out.print(" " + kw.getString());
103 break;
104 default:
105 }
106 }
107 System.out.print("\n");
108 }
109 }
110 if (0<nofiles) {
111 float dtime = (float) (0.001*(System.currentTimeMillis()-time));
112 float dtf = dtime/((float) nofiles);
113 float dtk = ((float) nokwords)/dtime;
114 System.out.println(" Time: " + dtf + " S/file, Rate: "
115 + dtk + " kw/S, Keywords: " + nokwords);
116 }
117 System.exit(0);
118 }
119 }