@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(); } }