protected void fillNonRecordVariables() throws IOException { // run through each variable for (Variable v : ncfile.getVariables()) { if (v.isUnlimited()) continue; try { writeData(v, v.getShapeAsSection(), makeConstantArray(v)); } catch (InvalidRangeException e) { e.printStackTrace(); // shouldnt happen } } }
protected void fillNonRecordVariables() throws IOException { // run through each variable for (Variable v : ncfile.getVariables()) { if (v.isUnlimited()) continue; try { writeData(v, v.getShapeAsSection(), makeConstantArray(v)); } catch (InvalidRangeException e) { e.printStackTrace(); // shouldnt happen } } }
protected void fillNonRecordVariables() throws IOException { // run through each variable for (Variable v : ncfile.getVariables()) { if (v.isUnlimited()) continue; try { writeData(v, v.getShapeAsSection(), makeConstantArray(v)); } catch (InvalidRangeException e) { e.printStackTrace(); // shouldnt happen } } }
protected void fillRecordVariables(int recStart, int recEnd) throws IOException, InvalidRangeException { // do each record completely, should be a bit more efficient for (int i = recStart; i < recEnd; i++) { // do one record at a time Range r = new Range(i, i); // run through each variable for (Variable v : ncfile.getVariables()) { if (!v.isUnlimited() || (v instanceof Structure)) continue; Section recordSection = new Section( v.getRanges()); recordSection.setRange(0, r); writeData(v, recordSection, makeConstantArray(v)); } } }
protected void fillRecordVariables(int recStart, int recEnd) throws IOException, InvalidRangeException { // do each record completely, should be a bit more efficient for (int i = recStart; i < recEnd; i++) { // do one record at a time Range r = new Range(i, i); // run through each variable for (Variable v : ncfile.getVariables()) { if (!v.isUnlimited() || (v instanceof Structure)) continue; Section recordSection = new Section( v.getRanges()); recordSection.setRange(0, r); writeData(v, recordSection, makeConstantArray(v)); } } }
protected void fillRecordVariables(int recStart, int recEnd) throws IOException, InvalidRangeException { // do each record completely, should be a bit more efficient for (int i = recStart; i < recEnd; i++) { // do one record at a time Range r = new Range(i, i); // run through each variable for (Variable v : ncfile.getVariables()) { if (!v.isUnlimited() || (v instanceof Structure)) continue; Section recordSection = new Section( v.getRanges()); recordSection.setRange(0, r); writeData(v, recordSection, makeConstantArray(v)); } } }
@Override public void writeData(Variable v2, Section section, Array values) throws java.io.IOException, InvalidRangeException { N3header.Vinfo vinfo = (N3header.Vinfo) v2.getSPobject(); DataType dataType = v2.getDataType(); if (v2.isUnlimited()) { Range firstRange = section.getRange(0); setNumrecs(firstRange.last() + 1); } if (v2 instanceof Structure) { if (!(values instanceof ArrayStructure)) throw new IllegalArgumentException("writeData for Structure: data must be ArrayStructure"); if (v2.getRank() == 0) throw new IllegalArgumentException("writeData for Structure: must have rank > 0"); Dimension d = v2.getDimension(0); if (!d.isUnlimited()) throw new IllegalArgumentException("writeData for Structure: must have unlimited dimension"); writeRecordData((Structure) v2, section, (ArrayStructure) values); } else { Layout layout = (!v2.isUnlimited()) ? new LayoutRegular(vinfo.begin, v2.getElementSize(), v2.getShape(), section) : new LayoutRegularSegmented(vinfo.begin, v2.getElementSize(), header.recsize, v2.getShape(), section); writeData(values, layout, dataType); } }
@Override public void writeData(Variable v2, Section section, Array values) throws java.io.IOException, InvalidRangeException { N3header.Vinfo vinfo = (N3header.Vinfo) v2.getSPobject(); DataType dataType = v2.getDataType(); if (v2.isUnlimited()) { Range firstRange = section.getRange(0); setNumrecs(firstRange.last() + 1); } if (v2 instanceof Structure) { if (!(values instanceof ArrayStructure)) throw new IllegalArgumentException("writeData for Structure: data must be ArrayStructure"); if (v2.getRank() == 0) throw new IllegalArgumentException("writeData for Structure: must have rank > 0"); Dimension d = v2.getDimension(0); if (!d.isUnlimited()) throw new IllegalArgumentException("writeData for Structure: must have unlimited dimension"); writeRecordData((Structure) v2, section, (ArrayStructure) values); } else { Layout layout = (!v2.isUnlimited()) ? new LayoutRegular(vinfo.begin, v2.getElementSize(), v2.getShape(), section) : new LayoutRegularSegmented(vinfo.begin, v2.getElementSize(), header.recsize, v2.getShape(), section); writeData(values, layout, dataType); } }
private void writeRecordData(ucar.nc2.Structure s, int recnum, StructureData sdata) throws java.io.IOException, ucar.ma2.InvalidRangeException { StructureMembers members = sdata.getStructureMembers(); // loop over members for (Variable vm : s.getVariables()) { StructureMembers.Member m = members.findMember(vm.getShortName()); if (null == m) continue; // this means that the data is missing from the ArrayStructure // convert String member data into CHAR data Array data = sdata.getArray(m); if (data instanceof ArrayObject && vm.getDataType() == DataType.CHAR && vm.getRank() > 0) { int strlen = vm.getShape(vm.getRank() - 1); data = ArrayChar.makeFromStringArray((ArrayObject) data, strlen); // turn it into an ArrayChar } // layout of the destination N3header.Vinfo vinfo = (N3header.Vinfo) vm.getSPobject(); long begin = vinfo.begin + recnum * header.recsize; // this assumes unlimited dimension Section memberSection = vm.getShapeAsSection(); Layout layout = new LayoutRegular(begin, vm.getElementSize(), vm.getShape(), memberSection); try { writeData(data, layout, vm.getDataType()); } catch (Exception e) { log.error("Error writing member="+vm.getShortName()+" in struct="+s.getFullName(), e); throw new IOException(e); } } }
private void writeRecordData(ucar.nc2.Structure s, int recnum, StructureData sdata) throws java.io.IOException, ucar.ma2.InvalidRangeException { StructureMembers members = sdata.getStructureMembers(); // loop over members for (Variable vm : s.getVariables()) { StructureMembers.Member m = members.findMember(vm.getShortName()); if (null == m) continue; // this means that the data is missing from the ArrayStructure // convert String member data into CHAR data Array data = sdata.getArray(m); if (data instanceof ArrayObject && vm.getDataType() == DataType.CHAR && vm.getRank() > 0) { int strlen = vm.getShape(vm.getRank() - 1); data = ArrayChar.makeFromStringArray((ArrayObject) data, strlen); // turn it into an ArrayChar } // layout of the destination N3header.Vinfo vinfo = (N3header.Vinfo) vm.getSPobject(); long begin = vinfo.begin + recnum * header.recsize; // this assumes unlimited dimension Section memberSection = vm.getShapeAsSection(); Layout layout = new LayoutRegular(begin, vm.getElementSize(), vm.getShape(), memberSection); try { writeData(data, layout, vm.getDataType()); } catch (Exception e) { log.error("Error writing member="+vm.getShortName()+" in struct="+s.getFullName(), e); throw new IOException(e); } } }
private void writeRecordData(ucar.nc2.Structure s, Section section, Array values) throws java.io.IOException, ucar.ma2.InvalidRangeException { if (!(values instanceof ArrayStructure)) throw new IllegalArgumentException("writeRecordData: data must be ArrayStructure"); ArrayStructure structureData = (ArrayStructure) values; List<Variable> vars = s.getVariables(); StructureMembers members = structureData.getStructureMembers(); Range recordRange = section.getRange(0); int count = 0; for (int recnum = recordRange.first(); recnum <= recordRange.last(); recnum += recordRange.stride()) { // System.out.println(" wrote "+recnum+" begin at "+begin); // loop over members for (Variable v2 : vars) { StructureMembers.Member m = members.findMember(v2.getShortName()); if (null == m) continue; // this means that the data is missing from the ArrayStructure N3header.Vinfo vinfo = (N3header.Vinfo) v2.getSPobject(); long begin = vinfo.begin + recnum * header.recsize; Layout layout = new LayoutRegular(begin, v2.getElementSize(), v2.getShape(), v2.getShapeAsSection()); // Indexer index = RegularLayout.factory(begin, v2.getElementSize(), -1, v2.getShape(), v2.getShapeAsSection()); Array data = structureData.getArray(count, m); writeData(data, layout, v2.getDataType()); } count++; } }
public void writeData(Variable v2, Section section, Array values) throws java.io.IOException, InvalidRangeException { N3header.Vinfo vinfo = (N3header.Vinfo) v2.getSPobject(); DataType dataType = v2.getDataType(); if (v2.isUnlimited()) { Range firstRange = section.getRange(0); setNumrecs(firstRange.last() + 1); } if (v2 instanceof Structure) { writeRecordData((Structure) v2, section, values); } else { Layout layout = (!v2.isUnlimited()) ? new LayoutRegular(vinfo.begin, v2.getElementSize(), v2.getShape(), section) : new LayoutRegularSegmented(vinfo.begin, v2.getElementSize(), header.recsize, v2.getShape(), section); writeData(values, layout, dataType); } }