/*
* Copyright (C) 2010-2014 - Andreas Maier, Magdalena Herbst, Michael Dorner, Salah Saleh, Anja Pohan, Stefan Nottrott, Frank Schebesch, Martin Berger
* CONRAD is developed as an Open Source project under the GNU General Public License (GPL).
*/
package edu.stanford.rsl.conrad.data.generic;
import edu.stanford.rsl.conrad.data.generic.datatypes.Gridable;
/** The collection of all operators working point-wise on GenericGrid<T> data. */
public abstract class GenericPointwiseOperators<T extends Gridable<T>>{
/** Fill a GenericGrid<T> with the given value */
public void fill(final GenericGrid<T> grid, T val) {
grid.getGridOperator().fill(grid, val);
}
/** Get sum of all grid elements */
public T sum(final GenericGrid<T> grid) {
return grid.getGridOperator().sum(grid);
}
/** Get min of a GenericGrid<T> */
public T min(final GenericGrid<T> grid) {
return grid.getGridOperator().min(grid);
}
/** Get max of a GenericGrid<T> */
public T max(final GenericGrid<T> grid) {
return grid.getGridOperator().max(grid);
}
/** Copy data of a GenericGrid<T> to another, not including boundaries */
public void copy(GenericGrid<T> grid1, GenericGrid<T> grid2) {
GenericGridOperatorInterface<T> op = grid1.selectGridOperator(grid1, grid2);
op.copy(grid1, grid2);
}
/** Compute dot product between grid1 and grid2 */
public T dotProduct(GenericGrid<T> grid1, GenericGrid<T> grid2) {
GenericGridOperatorInterface<T> op = grid1.selectGridOperator(grid1, grid2);
return op.dotProduct(grid1, grid2);
}
/** Compute dot product between grid and itself. Same as square of l2 norm */
public T dotProduct(GenericGrid<T> grid) {
return grid.getGridOperator().dotProduct(grid, grid);
}
/** Compute grid3 = grid1 - grid2 */
public GenericGrid<T> addedBy(GenericGrid<T> input, GenericGrid<T> sub) {
GenericGridOperatorInterface<T> op = input.selectGridOperator(input, sub);
GenericGrid<T> output=(GenericGrid<T>)input.clone();
op.addBy(output, sub);
return output;
}
/** Compute grid1 = grid1 - grid2 */
public void addBy(GenericGrid<T> input, GenericGrid<T> sub) {
GenericGridOperatorInterface<T> op = input.selectGridOperator(input, sub);
op.addBy(input, sub);
}
/** Compute grid = grid + a */
public void addBy(GenericGrid<T> grid, T a) {
grid.getGridOperator().addBy(grid, a);
}
/** Compute grid3 = grid1 - grid2 */
public GenericGrid<T> subtractedBy(GenericGrid<T> input, GenericGrid<T> sub) {
GenericGridOperatorInterface<T> op = input.selectGridOperator(input, sub);
GenericGrid<T> output = (GenericGrid<T>)input.clone();
op.subtractBy(output, sub);
return output;
}
/** Compute grid1 = grid1 - grid2 */
public void subtractBy(GenericGrid<T> input, GenericGrid<T> sub) {
GenericGridOperatorInterface<T> op = input.selectGridOperator(input, sub);
op.subtractBy(input, sub);
}
/** Compute grid = grid - a */
public void subtractBy(GenericGrid<T> grid, T a) {
grid.getGridOperator().subtractBy(grid, a);
}
public GenericGrid<T> dividedBy(GenericGrid<T> input, GenericGrid<T> divisor) {
GenericGridOperatorInterface<T> op = input.selectGridOperator(input, divisor);
GenericGrid<T> output = (GenericGrid<T>)input.clone();
op.divideBy(output, divisor);
return output;
}
public void divideBy(GenericGrid<T> input, GenericGrid<T> divisor) {
GenericGridOperatorInterface<T> op = input.selectGridOperator(input, divisor);
op.divideBy(input, divisor);
}
/** Compute grid = grid / a */
public void divideBy(GenericGrid<T> grid, T a) {
grid.getGridOperator().divideBy(grid, a);
}
public GenericGrid<T> multipliedBy(GenericGrid<T> input, GenericGrid<T> multiplier) {
GenericGridOperatorInterface<T> op = input.selectGridOperator(input, multiplier);
GenericGrid<T> output = (GenericGrid<T>)input.clone();
op.multiplyBy(output, multiplier);
return output;
}
public void multiplyBy(GenericGrid<T> input, GenericGrid<T> multiplier) {
GenericGridOperatorInterface<T> op = input.selectGridOperator(input, multiplier);
op.multiplyBy(input, multiplier);
}
/** Compute grid = grid * a */
public void multiplyBy(GenericGrid<T> grid, T a) {
grid.getGridOperator().multiplyBy(grid, a);
}
}