/*
* 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.osgi;
import org.eclipse.dawnsci.analysis.api.dataset.IDatasetMathsService;
import org.eclipse.january.dataset.DTypeUtils;
import org.eclipse.january.dataset.DatasetFactory;
import org.eclipse.january.dataset.DatasetUtils;
import org.eclipse.january.dataset.IDataset;
import org.eclipse.january.dataset.Stats;
import org.eclipse.ui.services.AbstractServiceFactory;
import org.eclipse.ui.services.IServiceLocator;
/**
* Implementation of service IDatasetMathsService which allows plugins not to
* directly depend on everything required to do file loading.
*/
public class DatasetMathsServiceImpl extends AbstractServiceFactory implements IDatasetMathsService {
static {
System.out.println("Starting dataset maths service");
}
public DatasetMathsServiceImpl() {
// Important do nothing here, OSGI may start the service more than once.
}
@Override
public IDataset createRange(double stop, final Class<?> clazz) {
return DatasetFactory.createRange(stop, DTypeUtils.getDTypeFromClass(clazz));
}
@Override
public IDataset createRange(double start, double stop, double step, final Class<?> clazz) {
return DatasetFactory.createRange(start, stop, step, DTypeUtils.getDTypeFromClass(clazz));
}
@Override
public IDataset createDoubleDataset(double[] da, int... shape) {
return DatasetFactory.createFromObject(da, shape);
}
@Override
public IDataset convertToDataset(IDataset data) {
return DatasetUtils.convertToDataset(data);
}
@Override
public IDataset sum(IDataset data, int axis) {
return DatasetUtils.convertToDataset(data).sum(axis);
}
@Override
public IDataset transpose(IDataset data) {
return DatasetUtils.convertToDataset(data).transpose();
}
@Override
public IDataset mean(IDataset data, int axis) {
return DatasetUtils.convertToDataset(data).mean(axis);
}
@Override
public IDataset max(IDataset data, int axis) {
return DatasetUtils.convertToDataset(data).max(axis);
}
@Override
public IDataset min(IDataset data, int axis) {
return DatasetUtils.convertToDataset(data).min(axis);
}
@Override
public IDataset median(IDataset data, int axis) {
return Stats.median(DatasetUtils.convertToDataset(data), axis);
}
@Override
public IDataset mode(IDataset data, int axis) {
//FIXME
throw new RuntimeException("Mode not implemented!");
}
@SuppressWarnings("rawtypes")
@Override
public Object create(Class serviceInterface, IServiceLocator parentLocator, IServiceLocator locator) {
if (serviceInterface==IDatasetMathsService.class) {
return new DatasetMathsServiceImpl();
}
return null;
}
}