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 }