private void readCalibrationCoefficients(int rawY, int[] calibCoeff) throws IOException { CompoundData dataRecord = noaaFile.getDataRecord(rawY); SequenceData calibration_coefficients = dataRecord.getSequence("CALIBRATION_COEFFICIENTS"); for (int i = 0; i < calibCoeff.length; i++) { calibCoeff[i] = calibration_coefficients.getInt(i); } }
private boolean hasData(int rawY) throws IOException { if (channel != AvhrrConstants.CH_3A && channel != AvhrrConstants.CH_3B) { return true; } final int bitField = noaaFile.getScanlineBitfield(rawY); final int channel3ab = bitField & 3; return (channel3ab == 1 && channel == AvhrrConstants.CH_3A) || (channel3ab == 0 && channel == AvhrrConstants.CH_3B); }
@Override public synchronized void readBandRasterData( int sourceOffsetX, int sourceOffsetY, int sourceWidth, int sourceHeight, int sourceStepX, int sourceStepY, ProductData destBuffer, ProgressMonitor pm) throws IOException { AvhrrFile.RawCoordinates rawCoord = noaaFile.getRawCoordinates(sourceOffsetX, sourceOffsetY, sourceWidth, sourceHeight); final float[] targetData = (float[]) destBuffer.getElems(); int targetIdx = rawCoord.targetStart; pm.beginTask("Reading AVHRR band '" + getBandName() + "'...", rawCoord.maxY - rawCoord.minY); try { for (int rawY = rawCoord.minY; rawY <= rawCoord.maxY; rawY += sourceStepY) { if (pm.isCanceled()) { break; } boolean validData = hasData(rawY); if (validData) { if (calibrator.requiresCalibrationData()) { readCalibrationCoefficients(rawY, calibrationData); validData = calibrator.processCalibrationData(calibrationData); } if (validData) { readData(rawY); validData = containsValidCounts(); if (validData) { for (int sourceX = rawCoord.minX; sourceX <= rawCoord.maxX; sourceX += sourceStepX) { targetData[targetIdx] = calibrator.calibrate(lineOfCounts[sourceX]); targetIdx += rawCoord.targetIncrement; } } } } if (!validData) { for (int sourceX = rawCoord.minX; sourceX <= rawCoord.maxX; sourceX += sourceStepX) { targetData[targetIdx] = AvhrrConstants.NO_DATA_VALUE; targetIdx += rawCoord.targetIncrement; } } pm.worked(1); } } finally { pm.done(); } }