Advertisement
Guest User

Untitled

a guest
Jan 24th, 2014
78
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 6.73 KB | None | 0 0
  1.    private static boolean writeNetCDFHFiveThree(String fileName, float[] allLat, float[] allLon, float[] allDepth,
  2.             int[] timeArray, int[] allTimes, float[][] valArrays, String[][] valDescr, float[] latArray,
  3.             float[] lonArray, float[] depthArray) throws IOException, InvalidRangeException {
  4.         NetcdfFileWriteable writeableFile = NetcdfFileWriteable.createNew(fileName, false);
  5.         // define dimensions, including unlimited
  6.         Map<Station, Station> stationMap = findStations(latArray, lonArray, timeArray);
  7.  
  8.         int numberOfStations = stationMap.size();
  9.         int numberOfProfiles = 0;
  10.         Collection<Station> stationCollection = stationMap.values();
  11.         for (Station s : stationCollection) {
  12.             numberOfProfiles += s.timeIndexMap.size();
  13.         }
  14.  
  15.         Dimension stationsDim = writeableFile.addDimension("stations", numberOfStations);
  16.         Dimension profilesDim = writeableFile.addDimension("profiles", numberOfProfiles);
  17.         int name_strlen = 23;
  18.         Dimension name_strlenDim = writeableFile.addDimension("name_strlen", name_strlen);
  19.         Dimension obsDim = writeableFile.addUnlimitedDimension("obs");
  20.  
  21.         // define Variables
  22.         // TODO: perhaps something is D3 or D2
  23.         writeableFile.addVariable("lat", DataType.FLOAT, new Dimension[] { stationsDim });
  24.         writeableFile.addVariableAttribute("lat", "units", "degrees_north");
  25.         writeableFile.addVariableAttribute("lat", "standard_name", "latitude");
  26.         writeableFile.addVariable("lon", DataType.FLOAT, new Dimension[] { stationsDim });
  27.         writeableFile.addVariableAttribute("lon", "units", "degrees_east");
  28.         writeableFile.addVariableAttribute("lon", "standard_name", "longitude");
  29.         writeableFile.addVariable("station_name", DataType.CHAR, new Dimension[] { stationsDim, name_strlenDim });
  30.         writeableFile.addVariableAttribute("station_name", "long_name", "station name");
  31.         writeableFile.addVariableAttribute("station_name", "cf_role", "timeseries_id");
  32.         writeableFile.addVariable("station_info", DataType.CHAR, new Dimension[] { stationsDim, name_strlenDim });
  33.         writeableFile.addVariableAttribute("station_info", "long_name", "some kind of station info");
  34.  
  35.         writeableFile.addVariable("profile", DataType.INT, new Dimension[] { profilesDim });
  36.         writeableFile.addVariableAttribute("profile", "cf_role", "profile_id");
  37.         writeableFile.addVariable("time", DataType.INT, new Dimension[] { profilesDim });
  38.         writeableFile.addVariableAttribute("time", "standard_name", "time");
  39.         writeableFile.addVariableAttribute("time", "units", "minutes since 1900-01-01");
  40.         writeableFile.addVariableAttribute("time", "calendar", "Standard");
  41.         writeableFile.addVariable("station_index", DataType.INT, new Dimension[] { profilesDim });
  42.         writeableFile.addVariableAttribute("station_index", "long_name", "which station this profile is for");
  43.         writeableFile.addVariableAttribute("station_index", "instance_dimension", "station");
  44.         writeableFile.addVariable("row_size", DataType.INT, new Dimension[] { profilesDim });
  45.         writeableFile.addVariableAttribute("row_size", "long_name", "number of obs for this profile ");
  46.         writeableFile.addVariableAttribute("row_size", "sample_dimension", "obs");
  47.  
  48.         writeableFile.addVariable("z", DataType.FLOAT, new Dimension[] { obsDim });
  49.         writeableFile.addVariableAttribute("z", "long_name", "Depth");
  50.         writeableFile.addVariableAttribute("z", "standard_name", "Depth");
  51.         writeableFile.addVariableAttribute("z", "units", "meters");
  52.         writeableFile.addVariableAttribute("z", "positive", "down");
  53.         writeableFile.addVariableAttribute("z", "axis", "z");
  54.  
  55.  
  56.         int numberOfObs = timeArray.length;
  57.         float[][] values = new float[valDescr.length][];
  58.         int valuesIndex = 0;
  59.         for (String[] valD : valDescr) {
  60.             writeableFile.addVariable(valD[0], DataType.FLOAT, new Dimension[] { obsDim });
  61.             writeableFile.addVariableAttribute(valD[0], "long_name", valD[1]);
  62.             writeableFile.addVariableAttribute(valD[0], "standard_name", valD[1]);
  63.             writeableFile.addVariableAttribute(valD[0], "units", valD[2]);
  64.             writeableFile.addVariableAttribute(valD[0], "coordinates", "time lon lat z");
  65.             values[valuesIndex++] = new float[numberOfObs];
  66.         }
  67.  
  68.         writeableFile.addGlobalAttribute("featureType", "timeSeriesProfile");
  69.  
  70.         // create the file
  71.         writeableFile.create();
  72.         float[] lat = new float[numberOfStations];
  73.         float[] lon = new float[numberOfStations];
  74.         ArrayChar.D2 stationName = new ArrayChar.D2(numberOfStations, name_strlen);
  75.         int[] profile = new int[numberOfProfiles];
  76.         int[] time = new int[numberOfProfiles];
  77.         int[] station = new int[numberOfProfiles];
  78.         int[] rowSize = new int[numberOfProfiles];
  79.  
  80.         float[] z = new float[numberOfObs];
  81.         int stationIndex = 0, profileIndex = 0, obsIndex = 0;
  82.         for (Station s : stationCollection) {
  83.             stationName.set(stationIndex, 0, (char) ('a' + stationIndex));
  84.             lat[stationIndex] = s.lat;
  85.             lon[stationIndex] = s.lon;
  86.             for (Integer currentTime : s.timeIndexMap.keySet()) {
  87.                 profile[profileIndex] = profileIndex;
  88.                 time[profileIndex] = currentTime;
  89.                 station[profileIndex] = stationIndex;
  90.                 int nObs = s.timeIndexMap.get(currentTime).size();
  91.                 rowSize[profileIndex++] = nObs;
  92.                 for (int i = 0; i < nObs; i++) {
  93.                     Integer currentObsIndex = s.timeIndexMap.get(currentTime).get(i);
  94.                     z[obsIndex] = depthArray[currentObsIndex];
  95.                     for (int j = 0; j < values.length; j++)
  96.                         values[j][obsIndex] = valArrays[j][currentObsIndex];
  97.                     obsIndex++;
  98.                 }
  99.             }
  100.             stationIndex++;
  101.         }
  102.         writeableFile.write("lat", Array.factory(lat));
  103.         writeableFile.write("lon", Array.factory(lon));
  104.         writeableFile.write("station_name", stationName);
  105.         writeableFile.write("station_info", stationName);
  106.  
  107.         writeableFile.write("profile", Array.factory(profile));
  108.         writeableFile.write("time", Array.factory(time));
  109.         writeableFile.write("station_index", Array.factory(station));
  110.         writeableFile.write("row_size", Array.factory(rowSize));
  111.  
  112.         writeableFile.write("z", Array.factory(z));
  113.  
  114.         for (int j = 0; j < values.length; j++)
  115.             writeableFile.write(valDescr[j][0], Array.factory(values[j]));
  116.         writeableFile.close();
  117.         return true;
  118.     }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement