/* * Copyright (c) 2012 Diamond Light Source Ltd. * * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html */ package uk.ac.diamond.scisoft.analysis.dataset.function; import java.util.ArrayList; import java.util.List; import org.eclipse.dawnsci.analysis.dataset.impl.function.DatasetToDatasetFunction; import org.eclipse.january.dataset.BooleanDataset; import org.eclipse.january.dataset.Dataset; import org.eclipse.january.dataset.DatasetFactory; import org.eclipse.january.dataset.DatasetUtils; import org.eclipse.january.dataset.IDataset; import org.eclipse.january.dataset.IndexIterator; /** * Make a mask given lower and upper threshold values */ public class MakeMask implements DatasetToDatasetFunction { private double lower, upper; // threshold values /** * Create function object with given threshold values * @param low * @param high */ public MakeMask(double low, double high) { lower = low; upper = high; } @Override public List<Dataset> value(IDataset... datasets) { if (datasets.length == 0) return null; List<Dataset> result = new ArrayList<Dataset>(); for (IDataset d : datasets) { final Dataset ds = DatasetUtils.convertToDataset(d); final BooleanDataset bs = DatasetFactory.zeros(BooleanDataset.class, ds.getShape()); final IndexIterator it = ds.getIterator(); int i = 0; while (it.hasNext()) { double v = ds.getElementDoubleAbs(it.index); bs.setAbs(i++, v >= lower && v <= upper); } result.add(bs); } return result; } }