static void test(String urlString) { try { long start = System.currentTimeMillis(); System.out.println(" get " + urlString); AddePointDataReader reader = new AddePointDataReader(urlString); System.out.println(" took= " + (System.currentTimeMillis() - start) + " msec"); System.out.println(reader.toString()); System.out.println(" Param Unit Scale"); String[] params = reader.getParams(); String[] units = reader.getUnits(); int[] scales = reader.getScales(); for (int i = 0; i < params.length; i++) { System.out.println(" " + params[i] + " " + units[i] + " " + scales[i]); } int[][] data = reader.getData(); System.out.println(" nparams= " + params.length); System.out.println(" n= " + data.length); System.out.println(" m= " + data[0].length); } catch (AddeException e) { e.printStackTrace(); // To change body of catch statement use File | Settings | File // Templates. } }
static AddePointDataReader callAdde(String request) throws IOException { try { System.out.println("Call ADDE request= " + request); long start = System.currentTimeMillis(); AddePointDataReader reader = new AddePointDataReader(request); System.out.println(" took= " + (System.currentTimeMillis() - start) + " msec"); return reader; } catch (AddeException e) { e.printStackTrace(); throw new IOException(e.getMessage()); } }
/** * Sync the file * * @return true if needed to sync * @throws IOException problem synching the file */ public boolean sync() throws IOException { // printStack("***************************** sync ************************", 100); // System.out.printf("check sync on %s (%s) %n", raf.getLocation(), // Calendar.getInstance().getTime()); if (gemreader.getInitFileSize() < raf.length()) { long start = System.currentTimeMillis(); Trace.msg( "GEMPAKStationIOSP.sync: file " + raf.getLocation() + " is bigger: " + raf.length() + " > " + gemreader.getInitFileSize()); Trace.call1("GEMPAKStationIOSP.sync: reader.init"); gemreader.init(raf, true); Trace.call2("GEMPAKStationIOSP.sync: reader.init"); Trace.call1("GEMPAKStationIOSP.sync: buildNCFile"); // reconstruct the ncfile objects buildNCFile(); Trace.call2("GEMPAKSIOSP.sync: buildNCFile"); // System.out.printf("sync on %s took %d msecs%n", raf.getLocation(), // (System.currentTimeMillis()-start)); return true; } return false; }
public boolean compare( NetcdfFile org, NetcdfFile copy, boolean showCompare, boolean showEach, boolean compareData) { this.compareData = compareData; this.showCompare = showCompare; this.showEach = showEach; f.format("First file = %s%n", org.getLocation()); f.format("Second file= %s%n", copy.getLocation()); long start = System.currentTimeMillis(); boolean ok = compareGroups(org.getRootGroup(), copy.getRootGroup()); f.format(" Files are the same = %s%n", ok); long took = System.currentTimeMillis() - start; f.format(" Time to compare = %d msecs%n", took); return ok; }
/** * set the values from an Array * * @param arr value of Attribute */ protected void setValues(Array arr) { if (arr == null) { dataType = DataType.STRING; return; } if (DataType.getType(arr.getElementType()) == null) throw new IllegalArgumentException("Cant set Attribute with type " + arr.getElementType()); if (arr.getElementType() == char.class) { // turn CHAR into STRING ArrayChar carr = (ArrayChar) arr; if (carr.getRank() == 1) { // common case svalue = carr.getString(); this.nelems = 1; this.dataType = DataType.STRING; return; } // otherwise its an array of Strings arr = carr.make1DStringArray(); } // this should be a utility somewhere if (arr.getElementType() == ByteBuffer.class) { // turn OPAQUE into BYTE int totalLen = 0; arr.resetLocalIterator(); while (arr.hasNext()) { ByteBuffer bb = (ByteBuffer) arr.next(); totalLen += bb.limit(); } byte[] ba = new byte[totalLen]; int pos = 0; arr.resetLocalIterator(); while (arr.hasNext()) { ByteBuffer bb = (ByteBuffer) arr.next(); System.arraycopy(bb.array(), 0, ba, pos, bb.limit()); pos += bb.limit(); } arr = Array.factory(DataType.BYTE, new int[] {totalLen}, ba); } if (arr.getRank() > 1) arr = arr.reshape(new int[] {(int) arr.getSize()}); // make sure 1D this.values = arr; this.nelems = (int) arr.getSize(); this.dataType = DataType.getType(arr.getElementType()); hashCode = 0; }
/** * Open the service provider for reading. * * @param raf file to read from * @param ncfile netCDF file we are writing to (memory) * @param cancelTask task for cancelling * @throws IOException problem reading file */ public void open(RandomAccessFile raf, NetcdfFile ncfile, CancelTask cancelTask) throws IOException { // System.out.printf("GempakSurfaceIOSP open %s (%s) %n", raf.getLocation(), // Calendar.getInstance().getTime()); this.raf = raf; this.ncfile = ncfile; long start = System.currentTimeMillis(); if (gemreader == null) { gemreader = makeStationReader(); } Trace.call1("GEMPAKStationIOSP.open: initTables"); initTables(); Trace.call2("GEMPAKStationIOSP.open: initTables"); Trace.call1("GEMPAKStationIOSP.open: reader.init"); gemreader.init(raf, true); Trace.call2("GEMPAKStationIOSP.open: reader.init"); buildNCFile(); }
public static void main(String args[]) throws Exception { long start = System.currentTimeMillis(); Map<String, ucar.unidata.geoloc.Station> staHash = new HashMap<String, ucar.unidata.geoloc.Station>(); String location = "R:/testdata/sounding/netcdf/Upperair_20070401_0000.nc"; NetcdfDataset ncfile = NetcdfDataset.openDataset(location); ncfile.sendIospMessage(NetcdfFile.IOSP_MESSAGE_ADD_RECORD_STRUCTURE); // look through record varibles, for those that have "manLevel" dimension // make a StructureData object for those StructureMembers sm = new StructureMembers("manLevel"); Dimension manDim = ncfile.findDimension("manLevel"); Structure record = (Structure) ncfile.findVariable("record"); List<Variable> allList = record.getVariables(); List<VariableSimpleIF> varList = new ArrayList<VariableSimpleIF>(); for (Variable v : allList) { if ((v.getRank() == 1) && v.getDimension(0).equals(manDim)) { // public VariableDS(NetcdfDataset ds, Group group, Structure parentStructure, String // shortName, DataType dataType, // String dims, String units, String desc) { varList.add( new VariableDS( ncfile, null, null, v.getShortName(), v.getDataType(), "", v.getUnitsString(), v.getDescription())); // (String name, String desc, String units, DataType dtype, int []shape) sm.addMember( v.getShortName(), v.getDescription(), v.getUnitsString(), v.getDataType(), new int[0]); // scalar } } ArrayStructureMA manAS = new ArrayStructureMA(sm, new int[] {manDim.getLength()}); // need the date units Variable time = ncfile.findVariable("synTime"); String timeUnits = ncfile.findAttValueIgnoreCase(time, "units", null); timeUnits = StringUtil.remove(timeUnits, '('); // crappy fsl'ism timeUnits = StringUtil.remove(timeUnits, ')'); DateUnit timeUnit = new DateUnit(timeUnits); // extract stations int nrecs = 0; StructureDataIterator iter = record.getStructureIterator(); while (iter.hasNext()) { StructureData sdata = iter.next(); String name = sdata.getScalarString("staName"); ucar.unidata.geoloc.Station s = staHash.get(name); if (s == null) { float lat = sdata.convertScalarFloat("staLat"); float lon = sdata.convertScalarFloat("staLon"); float elev = sdata.convertScalarFloat("staElev"); s = new StationImpl(name, "", lat, lon, elev); staHash.put(name, s); } nrecs++; } List<ucar.unidata.geoloc.Station> stnList = Arrays.asList(staHash.values().toArray(new ucar.unidata.geoloc.Station[staHash.size()])); Collections.sort(stnList); // create the writer WriterProfileObsDataset writer = new WriterProfileObsDataset(location + ".out", "rewrite " + location); writer.writeHeader(stnList, varList, nrecs, "prMan"); // extract records iter = record.getStructureIterator(); while (iter.hasNext()) { StructureData sdata = iter.next(); String name = sdata.getScalarString("staName"); double timeValue = sdata.convertScalarDouble("synTime"); Date date = timeUnit.makeDate(timeValue); // transfer to the ArrayStructure List<String> names = sm.getMemberNames(); for (String mname : names) { manAS.setMemberArray(mname, sdata.getArray(mname)); } // each level is weritten as a seperate structure int numMand = sdata.getScalarInt("numMand"); if (numMand >= manDim.getLength()) continue; for (int i = 0; i < numMand; i++) { StructureData useData = manAS.getStructureData(i); writer.writeRecord(name, date, useData); } } writer.finish(); long took = System.currentTimeMillis() - start; System.out.println("That took = " + took); }
// all the work is here, so can be called recursively public Object readOneScanData(ByteBuffer bos, NOWRadheader.Vinfo vinfo, String vName) throws IOException, InvalidRangeException { int doff = (int) vinfo.hoff; int npixel = vinfo.yt * vinfo.xt; byte[] rdata = null; byte[] ldata = new byte[vinfo.xt]; byte[] pdata = new byte[npixel]; byte[] b2 = new byte[2]; bos.position(doff); // begining of image data if ((DataType.unsignedByteToShort(bos.get()) != 0xF0) || (bos.get() != 0x0C)) { return null; } int ecode; int color; int datapos; int offset = 0; int roffset = 0; boolean newline = true; int linenum = 0; while (true) { // line number if (newline) { bos.get(b2); linenum = (DataType.unsignedByteToShort(b2[1]) << 8) + DataType.unsignedByteToShort(b2[0]); // System.out.println("Line Number = " + linenum); } // int linenum = bytesToInt(b2[0], b2[1], true); // System.out.println("Line Number = " + linenum); // if(linenum == 1225) // System.out.println(" HHHHH"); short b = DataType.unsignedByteToShort(bos.get()); color = b & 0xF; ecode = b >> 4; datapos = bos.position(); int datarun; if (ecode == 0xF) { byte bb1 = bos.get(datapos - 2); byte bb2 = bos.get(datapos); if ((color == 0x0) && (bb1 == 0x00) && (bb2 == 0x00)) { datapos += 1; } bos.position(datapos); datarun = 0; } else if (ecode == 0xE) { byte b0 = bos.get(datapos); datarun = DataType.unsignedByteToShort(b0) + 1; datapos += 1; bos.position(datapos); } else if (ecode == 0xD) { b2[0] = bos.get(datapos); b2[1] = bos.get(datapos + 1); datarun = (DataType.unsignedByteToShort(b2[1]) << 8) + DataType.unsignedByteToShort(b2[0]) + 1; datapos += 2; bos.position(datapos); } else { datarun = ecode + 1; } // move the unpacked data in the data line rdata = new byte[datarun]; for (int i = 0; i < datarun; i++) { rdata[i] = (byte) color; } System.arraycopy(rdata, 0, ldata, roffset, datarun); roffset = roffset + datarun; // System.out.println("run ecode = " + ecode + " and data run " + datarun + " and totalrun " + // roffset); // check to see if the beginning of the next line or at the end of the file short c0 = DataType.unsignedByteToShort(bos.get()); if (c0 == 0x00) { short c1 = DataType.unsignedByteToShort(bos.get()); short c2 = DataType.unsignedByteToShort(bos.get()); // System.out.println("c1 and c2 " + c1 + " " + c2); if ((c0 == 0x00) && (c1 == 0xF0) && (c2 == 0x0C)) { // beginning of next line // System.out.println("linenum " + linenum + " and this line total " + roffset); // if (roffset != 3661) { // System.out.println("ERROR missing data, this line total only " + roffset); // } System.arraycopy(ldata, 0, pdata, offset, roffset); offset = offset + vinfo.xt; roffset = 0; newline = true; ldata = new byte[vinfo.xt]; } else if ((c1 == 0xF0) && (c2 == 0x02)) { // end of the file break; } else { datapos = bos.position() - 3; bos.position(datapos); newline = false; } } else { newline = false; datapos = bos.position(); bos.position(datapos - 1); } } return pdata; }