@Override public int compare(Band band1, Band band2) { final float v = band1.getSpectralWavelength() - band2.getSpectralWavelength(); return v < 0.0F ? -1 : v > 0.0F ? 1 : 0; } });
private boolean isSpectralBand(Band band) { return band.getSpectralWavelength() > 0.0; }
private String getDisplayDescription(RasterDataNode rasterDataNode) { final String fullName = multipleProducts ? rasterDataNode.getDisplayName() : rasterDataNode.getName(); final StringBuilder description = new StringBuilder(); description.setLength(0); description.append(fullName); description.append(rasterDataNode.getDescription() == null ? "" : " (" + rasterDataNode.getDescription()); if (rasterDataNode instanceof Band) { if (((Band) rasterDataNode).getSpectralWavelength() > 0.0) { description.append(" ("); description.append(((Band) rasterDataNode).getSpectralWavelength()); description.append(" nm)"); } } description.append(")"); return description.toString(); }
@Override public int compare(Band b1, Band b2) { float deltaWl = b1.getSpectralWavelength() - b2.getSpectralWavelength(); if (Math.abs(deltaWl) > 1e-05) { return deltaWl < 0 ? -1 : 1; } int deltaSi = b1.getSpectralBandIndex() - b2.getSpectralBandIndex(); if (deltaSi != 0) { return deltaSi < 0 ? -1 : 1; } return b1.getName().compareTo(b2.getName()); } }
public static List<Band> getSpectralBands(Product product) { List<Band> bands = new ArrayList<>(); for (Band band : product.getBands()) { if (band.getSpectralWavelength() > 0.0 || band.getSpectralBandIndex() >= 0) { bands.add(band); } } Collections.sort(bands, new SpectralBandComparator()); return bands; }
public static String findBand(float minWavelength, float maxWavelength, Product product) { String bestBand = null; float minDelta = Float.MAX_VALUE; float mean = (minWavelength + maxWavelength) / 2; for (Band band : product.getBands()) { float bandWavelength = band.getSpectralWavelength(); if (bandWavelength != 0.0F) { float delta = Math.abs(bandWavelength - mean); if (delta < minDelta) { bestBand = band.getName(); minDelta = delta; } } } return bestBand; }
private static void createHeader(PrintWriter out, Product product, String maskName, boolean mustExportWavelengthsAndSF) { out.write("# Exported mask '" + maskName + "' on " + new SimpleDateFormat("dd-MMM-yyyy HH:mm:ss.mmmmmm").format(new GregorianCalendar().getTime()) + "\n"); out.write("# Product name: " + product.getName() + "\n"); if (product.getFileLocation() != null) { out.write("# Product file location: " + product.getFileLocation() + "\n"); } out.write("\n"); if (mustExportWavelengthsAndSF) { out.write("# Wavelength:"); out.write("\t\t\t"); // account for pixel-x, pixel-y, lon, lat columns for (final Band band : product.getBands()) { out.print("\t"); out.print("" + band.getSpectralWavelength()); } out.print("\n"); out.write("# Solar flux:"); out.write("\t\t\t"); // account for pixel-x, pixel-y, lon, lat columns for (final Band band : product.getBands()) { out.print("\t"); out.print("" + band.getSolarFlux()); } out.print("\n"); } }
@Override public int compare(Band band1, Band band2) { String band1Name = removeDigits(band1); String band2Name = removeDigits(band2); float wavelength1 = band1.getSpectralWavelength(); float wavelength2 = band2.getSpectralWavelength(); if (band1Name.equals(band2Name)) { // names without digits are equal: decide by wavelength if (wavelength1 > 0 && wavelength2 > 0 && wavelength1 != wavelength2) { return (int) (wavelength1 - wavelength2); } else { // wavelengths are equal: decide by original name return band1.getName().compareTo(band2.getName()); } } else { // names are not equal -> try to sort by wavelength if (wavelength1 > 0.0 && wavelength2 > 0.0) { return (int) (wavelength1 - wavelength2); } else { // names are not equal and there are no wavelengths: sort by name return band1.getName().compareTo(band2.getName()); } } } };
private void addBandCheckers(final StringBuffer description, final JPanel checkersPane, final GridBagConstraints gbc, final ActionListener checkListener) { for (int i = 0; i < allBands.length; i++) { Band band = allBands[i]; boolean checked = false; for (Band selectedBand : selectedBands) { if (band == selectedBand) { checked = true; numSelected++; break; } } description.setLength(0); description.append(band.getDescription() == null ? "" : band.getDescription()); if (band.getSpectralWavelength() > 0.0) { description.append(" ("); description.append(band.getSpectralWavelength()); description.append(" nm)"); } final JCheckBox check = new JCheckBox(getRasterDisplayName(band), checked); check.setFont(SMALL_PLAIN_FONT); check.addActionListener(checkListener); final JLabel label = new JLabel(description.toString()); label.setFont(SMALL_ITALIC_FONT); gbc.gridy++; GridBagUtils.addToPanel(checkersPane, check, gbc, "weightx=0,gridx=0"); GridBagUtils.addToPanel(checkersPane, label, gbc, "weightx=1,gridx=1"); checkBoxes[i] = check; } }
public B(Band band) { super(band); if (band instanceof VirtualBand) { setIconBaseWithExtension("org/esa/snap/rcp/icons/RsBandVirtual16.gif"); } else if (band.isIndexBand()) { setIconBaseWithExtension("org/esa/snap/rcp/icons/RsBandIndexes16.gif"); } else if (band.isFlagBand()) { setIconBaseWithExtension("org/esa/snap/rcp/icons/RsBandFlags16.gif"); } else { setIconBaseWithExtension("org/esa/snap/rcp/icons/RsBandAsSwath.gif"); } if (band.getSpectralWavelength() > 0.0) { if (band.getSpectralWavelength() == Math.round(band.getSpectralWavelength())) { setDisplayName(String.format("%s (%d nm)", band.getName(), (int) band.getSpectralWavelength())); } else { setDisplayName(String.format("%s (%s nm)", band.getName(), String.valueOf(band.getSpectralWavelength()))); } } setShortDescription(createToolTip(band)); }
private String createToolTip(final Band band) { StringBuilder tooltip = new StringBuilder(); append(tooltip, band.getDescription()); if (band.getSpectralWavelength() > 0.0) { append(tooltip, String.format("%s nm", band.getSpectralWavelength())); if (band.getSpectralBandwidth() > 0.0) { append(tooltip, String.format("+/-%s nm", 0.5 * band.getSpectralBandwidth())); } } append(tooltip, String.format("%d x %d pixels", band.getRasterWidth(), band.getRasterHeight())); if (band instanceof VirtualBand) { append(tooltip, String.format("Expr.: %s", ((VirtualBand) band).getExpression())); } if (band.getUnit() != null) { append(tooltip, String.format(" (%s)", band.getUnit())); } return tooltip.toString(); }
private float getWavelength(String bandName) { final Band band = sourceProduct.getBand(bandName); final float wavelength = band.getSpectralWavelength(); if (wavelength == 0.0f) { throw new OperatorException( "The band '" + band.getName() + "' is not a spectral band.\nPlease select a spectral band for processing."); } return wavelength; }
private float[][] getSpectralWvl(String[] bandNames) { float[][] wvl = new float[2][bandNames.length]; for (int i = 0; i < bandNames.length; i++) { wvl[0][i] = sourceProduct.getBand(bandNames[i]).getSpectralWavelength(); wvl[1][i] = sourceProduct.getBand(bandNames[i]).getSpectralBandwidth(); } return wvl; }
private static String findBand(float minWavelength, float maxWavelength, Product product) { String bestBand = null; float minDelta = Float.MAX_VALUE; float mean = (minWavelength + maxWavelength) / 2; for (Band band : product.getBands()) { float bandWavelength = band.getSpectralWavelength(); if (bandWavelength != 0.0F) { float delta = Math.abs(bandWavelength - mean); if (delta < minDelta) { bestBand = band.getName(); minDelta = delta; } } } if (bestBand == null) { String message = String.format("Source product '%s' does not contain a band that has a wave length between '%s' and '%s'.", product.getName(), minWavelength, maxWavelength); throw new OperatorException(message); } return bestBand; }
bandToEnergy.put(spectralBand, energy); final float wavelength = spectralBand.getSpectralWavelength(); if (energy != spectralBand.getGeophysicalNoDataValue()) { series.add(wavelength, energy);
@Override public void selectionChanged(SelectionChangeEvent event) { final Product selectedProduct = (Product) event.getSelection().getSelectedValue(); final String[] validNames; if (selectedProduct != null) { String[] bandNames = selectedProduct.getBandNames(); ArrayList<String> names = new ArrayList<>(bandNames.length); for (String bandName : bandNames) { if (selectedProduct.getBand(bandName).getSpectralWavelength() > 0.0) { names.add(bandName); } } validNames = names.toArray(new String[names.size()]); } else { validNames = new String[0]; } final ValueSet valueSet = new ValueSet(validNames); propertyDescriptor.setValueSet(valueSet); formModel.setSourceProduct(selectedProduct); updateTargetProductName(selectedProduct); } };
public void setBands(Band[] bands) { Debug.assertNotNull(bands); this.bands = bands.clone(); Arrays.sort(this.bands, new Comparator<Band>() { @Override public int compare(Band band1, Band band2) { final float v = band1.getSpectralWavelength() - band2.getSpectralWavelength(); return v < 0.0F ? -1 : v > 0.0F ? 1 : 0; } }); if (wavelengths == null || wavelengths.length != this.bands.length) { wavelengths = new double[this.bands.length]; } if (energies == null || energies.length != this.bands.length) { energies = new double[this.bands.length]; } for (int i = 0; i < wavelengths.length; i++) { wavelengths[i] = this.bands[i].getSpectralWavelength(); energies[i] = 0.0f; } Range.computeRangeDouble(wavelengths, IndexValidator.TRUE, wavelengthRange, ProgressMonitor.NULL); Range.computeRangeDouble(energies, IndexValidator.TRUE, energyRange, ProgressMonitor.NULL); }
static String findWaveBand(Product product, boolean fail, double centralWavelength, double maxDeltaWavelength, String... bandNames) { Band[] bands = product.getBands(); String bestBand = null; double minDelta = Double.MAX_VALUE; for (Band band : bands) { double bandWavelength = band.getSpectralWavelength(); if (bandWavelength > 0.0) { double delta = Math.abs(bandWavelength - centralWavelength); if (delta < minDelta && delta <= maxDeltaWavelength) { bestBand = band.getName(); minDelta = delta; } } } if (bestBand != null) { return bestBand; } for (String bandName : bandNames) { Band band = product.getBand(bandName); if (band != null) { return band.getName(); } } if (fail) { throw new OperatorException("Missing band at " + centralWavelength + " nm"); } return null; }
@Override protected boolean verifyUserInput() { final SpectralUnmixingFormModel formModel = form.getFormModel(); if (formModel.getSourceProduct() == null) { showErrorDialog("No source product selected."); return false; } final Map<String, Object> parameterMap = parameterSupport.getParameterMap(); updateParameterMap(parameterMap); final Endmember[] endmembers = (Endmember[]) parameterMap.get("endmembers"); final String[] sourceBandNames = (String[]) parameterMap.get("sourceBandNames"); final double minBandwidth = (Double) parameterMap.get("minBandwidth"); double[] sourceWavelengths = new double[sourceBandNames.length]; double[] sourceBandwidths = new double[sourceBandNames.length]; for (int i = 0; i < sourceBandNames.length; i++) { final Band sourceBand = formModel.getSourceProduct().getBand(sourceBandNames[i]); sourceWavelengths[i] = sourceBand.getSpectralWavelength(); sourceBandwidths[i] = sourceBand.getSpectralBandwidth(); } if (!matchingWavelength(endmembers, sourceWavelengths, sourceBandwidths, minBandwidth)) { showErrorDialog("One or more source wavelengths do not fit\n" + "to one or more endmember spectra.\n\n" + "Consider increasing the maximum wavelength deviation."); return false; } return true; }
private void setBandProperties(Band targetBand, Band band) { targetBand.setSpectralBandIndex(band.getSpectralBandIndex()); targetBand.setSpectralWavelength(band.getSpectralWavelength()); targetBand.setSpectralBandwidth(band.getSpectralBandwidth()); targetBand.setSolarFlux(band.getSolarFlux()); targetBand.setUnit(band.getUnit()); targetBand.setNoDataValue(band.getNoDataValue()); targetBand.setNoDataValueUsed(true); targetBand.setScalingFactor(band.getScalingFactor()); targetBand.setScalingOffset(band.getScalingOffset()); targetBand.setUnit(band.getUnit()); targetBand.setDescription(band.getDescription()); }