001 /*
002 * $Id: CloudSat2D.java,v 1.10 2012/02/19 17:35:40 davep Exp $
003 *
004 * This file is part of McIDAS-V
005 *
006 * Copyright 2007-2012
007 * Space Science and Engineering Center (SSEC)
008 * University of Wisconsin - Madison
009 * 1225 W. Dayton Street, Madison, WI 53706, USA
010 * https://www.ssec.wisc.edu/mcidas
011 *
012 * All Rights Reserved
013 *
014 * McIDAS-V is built on Unidata's IDV and SSEC's VisAD libraries, and
015 * some McIDAS-V source code is based on IDV and VisAD source code.
016 *
017 * McIDAS-V is free software; you can redistribute it and/or modify
018 * it under the terms of the GNU Lesser Public License as published by
019 * the Free Software Foundation; either version 3 of the License, or
020 * (at your option) any later version.
021 *
022 * McIDAS-V is distributed in the hope that it will be useful,
023 * but WITHOUT ANY WARRANTY; without even the implied warranty of
024 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
025 * GNU Lesser Public License for more details.
026 *
027 * You should have received a copy of the GNU Lesser Public License
028 * along with this program. If not, see http://www.gnu.org/licenses.
029 */
030
031 package edu.wisc.ssec.mcidasv.data.hydra;
032
033 import visad.Data;
034 import visad.FlatField;
035 import visad.Set;
036 import visad.CoordinateSystem;
037 import visad.RealType;
038 import visad.RealTupleType;
039 import visad.SetType;
040 import visad.Linear2DSet;
041 import visad.Unit;
042 import visad.FunctionType;
043 import visad.VisADException;
044 import java.rmi.RemoteException;
045
046 import java.util.Hashtable;
047 import java.util.HashMap;
048 import java.util.StringTokenizer;
049
050 import java.io.BufferedReader;
051 import java.io.FileInputStream;
052 import java.io.IOException;
053 import java.io.InputStream;
054 import java.io.InputStreamReader;
055
056
057 public class CloudSat2D extends ProfileAlongTrack {
058
059 public CloudSat2D() {
060 }
061
062 public CloudSat2D(MultiDimensionReader reader, HashMap metadata) {
063 super(reader, metadata);
064 }
065
066 public float[] getVertBinAltitude() throws Exception {
067 String propertyFileName = null;
068 float[] altitude = new float[VertLen];
069 try {
070 propertyFileName = (String) metadata.get(ancillary_file_name);
071 InputStream ios = getClass().getResourceAsStream(propertyFileName);
072 BufferedReader ancillaryReader = new BufferedReader(new InputStreamReader(ios));
073
074 int line_cnt = 0;
075 while (true) {
076 String line = ancillaryReader.readLine();
077 if (line == null) break;
078 if (line.startsWith("!")) continue;
079 StringTokenizer strTok = new StringTokenizer(line);
080 String[] tokens = new String[strTok.countTokens()];
081 int tokCnt = 0;
082 while (strTok.hasMoreElements()) {
083 tokens[tokCnt++] = strTok.nextToken();
084 }
085 altitude[line_cnt] = (Float.valueOf(tokens[0]))*1000f;
086 line_cnt++;
087 }
088 ios.close();
089 }
090 catch (Exception e) {
091 System.out.println("fail on ancillary file read: "+propertyFileName);
092 }
093 return altitude;
094 }
095
096 public float[] getTrackTimes() throws Exception {
097 return null;
098 }
099
100 public RealType makeVertLocType() throws Exception {
101 return RealType.Altitude;
102 }
103
104 public RealType makeTrackTimeType() throws Exception {
105 return null;
106 }
107
108 public float[] getTrackLongitude() throws Exception {
109 int[] start = new int[] {0};
110 int[] count = new int[] {TrackLen};
111 int[] stride = new int[] {1};
112 float[] vals = reader.getFloatArray((String)metadata.get(longitude_name), start, count, stride);
113 return vals;
114 }
115
116 public float[] getTrackLatitude() throws Exception {
117 int[] start = new int[] {0};
118 int[] count = new int[] {TrackLen};
119 int[] stride = new int[] {1};
120 float[] vals = reader.getFloatArray((String)metadata.get(latitude_name), start, count, stride);
121 return vals;
122 }
123
124 public HashMap getDefaultSubset() {
125 HashMap subset = ProfileAlongTrack.getEmptySubset();
126
127 double[] coords = (double[])subset.get("TrackDim");
128 coords[0] = 1000.0;
129 coords[1] = (TrackLen - 1000.0) - 1;
130 coords[2] = 5.0;
131 subset.put("TrackDim", coords);
132
133 coords = (double[])subset.get("VertDim");
134 coords[0] = 10.0;
135 coords[1] = (VertLen) - 1;
136 coords[2] = 2.0;
137 subset.put("VertDim", coords);
138 return subset;
139 }
140
141 }