package uk.ac.diamond.scisoft.analysis.processing.operations.backgroundsubtraction;
import java.io.FileNotFoundException;
import java.util.Arrays;
import org.eclipse.dawnsci.analysis.api.io.IDataHolder;
import org.eclipse.dawnsci.analysis.api.processing.OperationException;
import org.eclipse.dawnsci.analysis.dataset.slicer.SliceFromSeriesMetadata;
import org.eclipse.january.dataset.Dataset;
import org.eclipse.january.dataset.DatasetUtils;
import org.eclipse.january.dataset.IDataset;
import org.eclipse.january.dataset.ILazyDataset;
import org.eclipse.january.dataset.LazyMaths;
import uk.ac.diamond.scisoft.analysis.io.LoaderFactory;
public class SubtractBackgroupImageOperation extends AbstractImageSubtrationOperation<SubtractBackgroundImageModel> {
@Override
public String getId() {
return "uk.ac.diamond.scisoft.analysis.processing.operations.SubtractBackgroupImageOperation";
}
@Override
protected Dataset getImage(IDataset input) throws OperationException {
SliceFromSeriesMetadata ssm = getSliceSeriesMetadata(input);
if (ssm == null) throw new OperationException(this, "No origin metadata!");
Dataset bg = null;
try {
String dsName = ssm.getSourceInfo().getDatasetName();
if (model.getFilePath() == null) throw new OperationException(this,"File path not set!");
IDataHolder dh = LoaderFactory.getData(model.getFilePath());
ILazyDataset lzBg = dh.getLazyDataset(dsName);
if (Arrays.equals(lzBg.getShape(), ssm.getSourceInfo().getParent().getShape())) {
bg = DatasetUtils.convertToDataset(lzBg.getSlice(ssm.getSliceFromInput())).squeeze();
} else {
bg = LazyMaths.mean(lzBg, ssm.getDataDimensions()).squeeze();
image = bg;
}
}catch (FileNotFoundException e) {
throw new OperationException(this, "Background file not found!");
} catch (Exception e) {
throw new OperationException(this, e.getMessage());
}
//TODO if average set member background else dont
return bg;
}
}