/*-
* Copyright 2015 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 org.eclipse.dawnsci.plotting.examples.exercises;
import org.eclipse.dawnsci.plotting.api.trace.IImageTrace;
import org.eclipse.dawnsci.plotting.api.trace.ITraceListener;
import org.eclipse.dawnsci.plotting.api.trace.TraceEvent;
import org.eclipse.january.dataset.BooleanDataset;
import org.eclipse.january.dataset.DatasetFactory;
import org.eclipse.january.dataset.PositionIterator;
import org.eclipse.swt.widgets.Composite;
public class Exercise2 extends Exercise1 {
private ITraceListener traceListener;
private BooleanDataset mask;
@Override
public void createPartControl(Composite parent) {
super.createPartControl(parent);
traceListener = createTraceListener();
system.addTraceListener(traceListener);
}
protected ITraceListener createTraceListener() {
return new ITraceListener.Stub() {
@Override
public void traceUpdated(TraceEvent evt) {
IImageTrace trace = (IImageTrace)evt.getSource();
createThreasholdMask(trace);
}
};
}
protected void createThreasholdMask(IImageTrace trace) {
// Lets do some masking...
if (mask==null) mask = DatasetFactory.zeros(BooleanDataset.class, trace.getData().getShape());
// Start off with everything true (true = not-masked!)
mask.fill(true);
// Iterate everything - yes this is slowish now. In Java8 we are
// implementing parallel streams with Datasets but this was not available
// when these examples were being written.
PositionIterator it = new PositionIterator(mask.getShape());
while(it.hasNext()) {
int[] pos = it.getPos();
if (trace.getData().getInt(pos)<=-1) mask.set(false, pos);
}
trace.setMask(mask);
}
@Override
public void dispose() {
system.removeTraceListener(traceListener); // Not necessary but good practice since we added one...
super.dispose();
}
}