Search in sources :

Example 1 with AxialStepModel

use of org.eclipse.scanning.api.points.models.AxialStepModel in project gda-core by openGDA.

the class FocusScanConverterTest method testConvertFocusScanBean.

@Test
public void testConvertFocusScanBean() {
    final ScanRequest scanRequest = focusScanConverter.convertToScanRequest(focusScanBean);
    // test compound model
    final CompoundModel compoundModel = scanRequest.getCompoundModel();
    assertNotNull(compoundModel);
    final List<IScanPointGeneratorModel> models = compoundModel.getModels();
    assertEquals(2, models.size());
    // test outer model - the focus model
    assertThat(models.get(0), is(instanceOf(AxialStepModel.class)));
    final AxialStepModel focusModel = (AxialStepModel) models.get(0);
    assertEquals(1, focusModel.getScannableNames().size());
    assertEquals(focusScanBean.getFocusScannableName(), focusModel.getScannableNames().get(0));
    assertEquals(focusScanBean.getFocusCentre() - focusScanBean.getFocusRange() + focusModel.getStep() / 2, focusModel.getStart(), 1e-15);
    assertEquals(focusScanBean.getFocusCentre() + focusScanBean.getFocusRange() - focusModel.getStep() / 2 + focusModel.getStep() / 100, focusModel.getStop(), 1e-15);
    assertEquals(focusScanBean.getFocusRange() * 2 / focusScanBean.getNumberOfFocusSteps(), focusModel.getStep(), 1e-15);
    // test inner model - the line model
    assertThat(models.get(1), is(instanceOf(TwoAxisLinePointsModel.class)));
    final TwoAxisLinePointsModel lineModel = (TwoAxisLinePointsModel) models.get(1);
    assertEquals(2, lineModel.getScannableNames().size());
    assertEquals(mappingStageInfo.getPlotYAxisName(), lineModel.getScannableNames().get(1));
    assertEquals(mappingStageInfo.getPlotXAxisName(), lineModel.getScannableNames().get(0));
    assertEquals(focusScanBean.getNumberOfLinePoints(), lineModel.getPoints());
    final BoundingLine boundingLine = lineModel.getBoundingLine();
    assertNotNull(boundingLine);
    final LinearROI expectedRegion = (LinearROI) focusScanBean.getLineRegion().toROI();
    assertEquals(expectedRegion.getPointX(), boundingLine.getxStart(), 1e-15);
    assertEquals(expectedRegion.getPointY(), boundingLine.getyStart(), 1e-15);
    assertEquals(expectedRegion.getAngle(), boundingLine.getAngle(), 1e-15);
    assertEquals(expectedRegion.getLength(), boundingLine.getLength(), 1e-15);
    // test scan regions
    assertEquals(1, compoundModel.getRegions().size());
    final ScanRegion scanRegion = compoundModel.getRegions().iterator().next();
    assertEquals(2, scanRegion.getScannables().size());
    assertEquals(mappingStageInfo.getPlotYAxisName(), scanRegion.getScannables().get(1));
    assertEquals(mappingStageInfo.getPlotXAxisName(), scanRegion.getScannables().get(0));
    assertThat(scanRegion.getRoi(), is(instanceOf(LinearROI.class)));
    assertEquals(expectedRegion, scanRegion.getRoi());
    // test detectors
    final Map<String, IDetectorModel> detectors = scanRequest.getDetectors();
    assertNotNull(detectors);
    assertEquals(1, detectors.size());
    assertTrue(detectors.containsKey("mandelbrot"));
    assertThat(detectors.get("mandelbrot"), is(instanceOf(MandelbrotModel.class)));
    // test that the remaining fields have not been set
    assertThat(scanRequest.getMonitorNamesPerPoint(), is(empty()));
    assertThat(scanRequest.getMonitorNamesPerScan(), is(empty()));
    assertThat(scanRequest.getScanMetadata(), is(nullValue()));
    assertThat(scanRequest.getAfterScript(), is(nullValue()));
    assertThat(scanRequest.getBeforeScript(), is(nullValue()));
    assertThat(scanRequest.isAlwaysRunAfterScript(), is(false));
    assertThat(scanRequest.getStartPosition(), is(nullValue()));
    assertThat(scanRequest.getEndPosition(), is(nullValue()));
    assertThat(scanRequest.getFilePath(), is(nullValue()));
}
Also used : ScanRequest(org.eclipse.scanning.api.event.scan.ScanRequest) ScanRegion(org.eclipse.scanning.api.points.models.ScanRegion) IDetectorModel(org.eclipse.scanning.api.device.models.IDetectorModel) TwoAxisLinePointsModel(org.eclipse.scanning.api.points.models.TwoAxisLinePointsModel) CompoundModel(org.eclipse.scanning.api.points.models.CompoundModel) LinearROI(org.eclipse.dawnsci.analysis.dataset.roi.LinearROI) AxialStepModel(org.eclipse.scanning.api.points.models.AxialStepModel) IScanPointGeneratorModel(org.eclipse.scanning.api.points.models.IScanPointGeneratorModel) BoundingLine(org.eclipse.scanning.api.points.models.BoundingLine) Test(org.junit.Test)

Example 2 with AxialStepModel

use of org.eclipse.scanning.api.points.models.AxialStepModel in project gda-core by openGDA.

the class ScanRequestConverterTest method testOuterScannableAddedToMappingBeanIfNotThereAlready.

@Test
public void testOuterScannableAddedToMappingBeanIfNotThereAlready() {
    // Arrange
    final IScanPointGeneratorModel outerModel = new AxialStepModel(Z_AXIS_NAME, -3, 2, 0.5);
    final List<IScanModelWrapper<IScanPointGeneratorModel>> outerScannables = Arrays.asList(new ScanPathModelWrapper(Z_AXIS_NAME, outerModel, true));
    mappingBean.getScanDefinition().setOuterScannables(outerScannables);
    // Act - convert mapping bean to scan request
    final ScanRequest scanRequest = scanRequestConverter.convertToScanRequest(mappingBean);
    // Creates a new wrapper for the outer scannable in newMappingBean
    scanRequestConverter.mergeIntoMappingBean(scanRequest, newMappingBean);
    assertThat(newMappingBean.getScanDefinition().getOuterScannables(), contains(outerScannables.toArray()));
}
Also used : ScanPathModelWrapper(uk.ac.diamond.daq.mapping.impl.ScanPathModelWrapper) ScanRequest(org.eclipse.scanning.api.event.scan.ScanRequest) IScanModelWrapper(uk.ac.diamond.daq.mapping.api.IScanModelWrapper) AxialStepModel(org.eclipse.scanning.api.points.models.AxialStepModel) IScanPointGeneratorModel(org.eclipse.scanning.api.points.models.IScanPointGeneratorModel) Test(org.junit.Test)

Example 3 with AxialStepModel

use of org.eclipse.scanning.api.points.models.AxialStepModel in project gda-core by openGDA.

the class ScanRequestConverterTest method testOuterScannableIsSet.

@Test
public void testOuterScannableIsSet() throws Exception {
    // Arrange
    final IScanPointGeneratorModel outerModel = new AxialStepModel(Z_AXIS_NAME, -3, 2, 0.5);
    final List<IScanModelWrapper<IScanPointGeneratorModel>> outerScannables = Arrays.asList(new ScanPathModelWrapper(Z_AXIS_NAME, outerModel, true));
    mappingBean.getScanDefinition().setOuterScannables(outerScannables);
    // Act - convert mapping bean to scan request
    final ScanRequest scanRequest = scanRequestConverter.convertToScanRequest(mappingBean);
    // Assert
    // Check there are now 2 models the outer z AxialStepModel and the inner Grid model
    assertThat(scanRequest.getCompoundModel().getModels().size(), is(equalTo(2)));
    final AxialStepModel recoveredOuterModel = (AxialStepModel) scanRequest.getCompoundModel().getModels().get(0);
    // Check the outer scannable model is first in the list
    assertThat(recoveredOuterModel, is(outerModel));
    // Check it has the correct axis name
    assertThat(recoveredOuterModel.getName(), is(Z_AXIS_NAME));
    // setup the new mapping bean with an outer scannable for the same axis, but disabled
    // and with a different model, and another enabled and for a different axis
    newMappingBean.getScanDefinition().setOuterScannables(Arrays.asList(new ScanPathModelWrapper(Z_AXIS_NAME, new AxialStepModel(Z_AXIS_NAME, 0, 5, 0.25), false), new ScanPathModelWrapper("energy", new AxialStepModel("energy", 10000, 15000, 1000), true)));
    scanRequestConverter.mergeIntoMappingBean(scanRequest, newMappingBean);
    // Assert again - check the new mapping bean is the same as the old one
    List<IScanModelWrapper<IScanPointGeneratorModel>> newOuterScannables = newMappingBean.getScanDefinition().getOuterScannables();
    assertThat(newOuterScannables.size(), is(2));
    assertThat(newOuterScannables.get(0).getName(), is(equalTo(Z_AXIS_NAME)));
    assertThat(newOuterScannables.get(0).getModel(), is(equalTo(outerModel)));
    assertThat(newOuterScannables.get(0).isIncludeInScan(), is(true));
    assertThat(newOuterScannables.get(1).getName(), is(equalTo("energy")));
    assertThat(newOuterScannables.get(1).isIncludeInScan(), is(false));
}
Also used : ScanPathModelWrapper(uk.ac.diamond.daq.mapping.impl.ScanPathModelWrapper) ScanRequest(org.eclipse.scanning.api.event.scan.ScanRequest) IScanModelWrapper(uk.ac.diamond.daq.mapping.api.IScanModelWrapper) AxialStepModel(org.eclipse.scanning.api.points.models.AxialStepModel) IScanPointGeneratorModel(org.eclipse.scanning.api.points.models.IScanPointGeneratorModel) Test(org.junit.Test)

Example 4 with AxialStepModel

use of org.eclipse.scanning.api.points.models.AxialStepModel in project gda-core by openGDA.

the class MScanSubmitterTest method trimIfStepTooLongForRegionOccursOnGenerator.

@Test
public // Behaviour combined with {@link StepTest#testTooLargeStep} shows expected behaviour
void trimIfStepTooLongForRegionOccursOnGenerator() throws Exception {
    final AxialStepModel expectedModel = new AxialStepModel(scannable.getName(), -1, 1, 5);
    expectedModel.setContinuous(false);
    Object[] arr = { scannable, RegionShape.AXIAL, -1, 1, Scanpath.AXIS_STEP, 5, detectorRunnableDevice };
    when(resolver.resolveScanClauses()).thenReturn(Arrays.asList(Arrays.asList(new ScannableElementProcessor(scannable), new RegionShapeElementProcessor(RegionShape.AXIAL), new NumberElementProcessor(-1), new NumberElementProcessor(1), new ScanpathElementProcessor(Scanpath.AXIS_STEP), new NumberElementProcessor(5)), Arrays.asList(new IRunnableDeviceDetectorElementProcessor(detectorRunnableDevice))));
    builder.buildAndSubmitBlockingScanRequest(arr);
    verify(submitter).blockingSubmit(beanCaptor.capture());
    verify(eventSubscriber).addListener(any(IScanListener.class));
    CompoundModel model = beanCaptor.getValue().getScanRequest().getCompoundModel();
    assertThat(model.getModels().get(0), is(equalTo(expectedModel)));
}
Also used : IScanListener(org.eclipse.scanning.api.event.scan.IScanListener) NumberElementProcessor(gda.mscan.processor.NumberElementProcessor) ScanpathElementProcessor(gda.mscan.processor.ScanpathElementProcessor) CompoundModel(org.eclipse.scanning.api.points.models.CompoundModel) ScannableElementProcessor(gda.mscan.processor.ScannableElementProcessor) IRunnableDeviceDetectorElementProcessor(gda.mscan.processor.IRunnableDeviceDetectorElementProcessor) AxialStepModel(org.eclipse.scanning.api.points.models.AxialStepModel) RegionShapeElementProcessor(gda.mscan.processor.RegionShapeElementProcessor) Test(org.junit.Test)

Example 5 with AxialStepModel

use of org.eclipse.scanning.api.points.models.AxialStepModel in project gda-core by openGDA.

the class MScanSubmitterTest method setUp.

@Before
public void setUp() throws Exception {
    try (final MockedStatic<JythonServerFacade> facade = mockStatic(JythonServerFacade.class)) {
        facade.when(JythonServerFacade::getInstance).thenReturn(theFacadeInstance);
        builder = new MScanSubmitter(eventService, runnableDeviceService, resolverFactory);
        when(eventService.getEventConnectorService()).thenReturn(connectorService);
        when(connectorService.marshal(any())).thenReturn("");
        when(eventService.createSubmitter(any(), any())).thenReturn(submitter);
        when(eventService.createSubscriber(any(), anyString())).thenReturn(eventSubscriber);
        when(resolverFactory.getResolver(captor.capture())).thenReturn(resolver);
        when(detector.getName()).thenReturn(DETECTOR_NAME);
        when(runnableDeviceService.getRunnableDevice(DETECTOR_NAME)).thenReturn(runnableDevice);
        when(runnableDevice.getModel()).thenReturn(detectorModel);
        when(detectorRunnableDevice.getModel()).thenReturn(detectorModel);
        when(monitor.getName()).thenReturn("monitor");
        when(scannable.getName()).thenReturn("stage_x");
        when(scannable.getUserUnits()).thenReturn("mm");
        when(anotherScannable.getName()).thenReturn("stage_y");
        when(anotherScannable.getUserUnits()).thenReturn("mm");
        point = new TwoAxisPointSingleModel();
        point.setX(2.0);
        point.setY(3.0);
        pointRoi = new PointROI(point.getX(), point.getY());
        axPoints = new AxialPointsModel(scannable.getName(), 2, 3, 20);
        axPoints.setContinuous(false);
        axStep = new AxialStepModel(scannable.getName(), 2, 3, 0.2);
        axStep.setContinuous(false);
        axArray = new AxialArrayModel(scannable.getName(), positions);
        axArray.setContinuous(false);
        liPoints = new TwoAxisLinePointsModel();
        liPoints.setPoints(20);
        liStep = new TwoAxisLineStepModel();
        liStep.setStep(0.2);
        line = new LinearROI(new double[] { 2, 2 }, new double[] { 3, 3 });
        grid = new TwoAxisGridPointsModel(scannable.getName(), anotherScannable.getName(), 20, 10);
        grid.setContinuous(false);
        steppedGrid = new TwoAxisGridStepModel();
        steppedGrid.setxAxisStep(0.1);
        steppedGrid.setyAxisStep(0.2);
        steppedGrid.setContinuous(false);
        rectangle = new RectangularROI(2, 3, 4, 5, 0);
        rectangleX2 = rectangle.getPointX() + rectangle.getLength(X);
        rectangleY2 = rectangle.getPointY() + rectangle.getLength(Y);
        circle = new CircularROI(5.5, 2, 3);
    }
}
Also used : TwoAxisLinePointsModel(org.eclipse.scanning.api.points.models.TwoAxisLinePointsModel) JythonServerFacade(gda.jython.JythonServerFacade) AxialArrayModel(org.eclipse.scanning.api.points.models.AxialArrayModel) TwoAxisGridPointsModel(org.eclipse.scanning.api.points.models.TwoAxisGridPointsModel) TwoAxisLineStepModel(org.eclipse.scanning.api.points.models.TwoAxisLineStepModel) CircularROI(org.eclipse.dawnsci.analysis.dataset.roi.CircularROI) TwoAxisPointSingleModel(org.eclipse.scanning.api.points.models.TwoAxisPointSingleModel) TwoAxisGridStepModel(org.eclipse.scanning.api.points.models.TwoAxisGridStepModel) LinearROI(org.eclipse.dawnsci.analysis.dataset.roi.LinearROI) AxialStepModel(org.eclipse.scanning.api.points.models.AxialStepModel) IRectangularROI(org.eclipse.dawnsci.analysis.api.roi.IRectangularROI) RectangularROI(org.eclipse.dawnsci.analysis.dataset.roi.RectangularROI) AxialPointsModel(org.eclipse.scanning.api.points.models.AxialPointsModel) PointROI(org.eclipse.dawnsci.analysis.dataset.roi.PointROI) Before(org.junit.Before)

Aggregations

AxialStepModel (org.eclipse.scanning.api.points.models.AxialStepModel)13 Test (org.junit.Test)7 CompoundModel (org.eclipse.scanning.api.points.models.CompoundModel)5 ScanRequest (org.eclipse.scanning.api.event.scan.ScanRequest)4 ScanPathModelWrapper (uk.ac.diamond.daq.mapping.impl.ScanPathModelWrapper)4 IScanPointGeneratorModel (org.eclipse.scanning.api.points.models.IScanPointGeneratorModel)3 IRunnableDeviceDetectorElementProcessor (gda.mscan.processor.IRunnableDeviceDetectorElementProcessor)2 NumberElementProcessor (gda.mscan.processor.NumberElementProcessor)2 RegionShapeElementProcessor (gda.mscan.processor.RegionShapeElementProcessor)2 ScannableElementProcessor (gda.mscan.processor.ScannableElementProcessor)2 ScanpathElementProcessor (gda.mscan.processor.ScanpathElementProcessor)2 LinearROI (org.eclipse.dawnsci.analysis.dataset.roi.LinearROI)2 IDetectorModel (org.eclipse.scanning.api.device.models.IDetectorModel)2 IScanListener (org.eclipse.scanning.api.event.scan.IScanListener)2 AxialArrayModel (org.eclipse.scanning.api.points.models.AxialArrayModel)2 AxialMultiStepModel (org.eclipse.scanning.api.points.models.AxialMultiStepModel)2 ScanRegion (org.eclipse.scanning.api.points.models.ScanRegion)2 TwoAxisGridPointsModel (org.eclipse.scanning.api.points.models.TwoAxisGridPointsModel)2 TwoAxisLinePointsModel (org.eclipse.scanning.api.points.models.TwoAxisLinePointsModel)2 IScanModelWrapper (uk.ac.diamond.daq.mapping.api.IScanModelWrapper)2