/* * ome.formats.utests.ChannelProcessorTest * *------------------------------------------------------------------------------ * Copyright (C) 2006-2010 University of Dundee. All rights reserved. * * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program; if not, write to the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. * *------------------------------------------------------------------------------ */ package ome.formats.utests; import junit.framework.TestCase; import loci.formats.FormatTools; import ome.formats.OMEROMetadataStoreClient; import ome.formats.importer.ImportConfig; import ome.formats.importer.OMEROWrapper; import ome.formats.model.BlitzInstanceProvider; import ome.formats.model.ChannelData; import ome.formats.model.ChannelProcessor; import ome.formats.model.UnitsFactory; import ome.xml.model.enums.FilamentType; import ome.xml.model.enums.LaserType; import ome.xml.model.primitives.PercentFraction; import ome.xml.model.primitives.PositiveInteger; import omero.api.ServiceFactoryPrx; import omero.model.LengthI; import omero.model.enums.UnitsLength; import org.testng.annotations.BeforeMethod; import org.testng.annotations.Test; /** * Tests the creation of channel objects. * * @author Chris Allan <callan at blackcat dot ca> */ public class ChannelProcessorTest extends TestCase { /** Reference to the wrapper. */ private OMEROWrapper wrapper; /** Reference to the store. */ private OMEROMetadataStoreClient store; /** Identifies the index of the filter set. */ private static final int FILTER_SET_INDEX = 0; /** Identifies the index of the filter. */ private static final int FILTER_INDEX = 0; /** Identifies the index of the light source. */ private static final int LIGHTSOURCE_INDEX = 0; /** Identifies the index of the instrument. */ private static final int INSTRUMENT_INDEX = 0; /** Identifies the index of the image. */ private static final int IMAGE_INDEX = 0; /** Identifies the index of the channel. */ private static final int CHANNEL_INDEX = 0; /** The LOCI graphics domain. */ private static final String[] GRAPHICS_DOMAIN = new String[] { FormatTools.GRAPHICS_DOMAIN }; private static ome.units.quantity.Length makeWave(double d) { return LengthI.convert(new LengthI(d, UnitsLength.NANOMETER)); } private static ome.units.quantity.Length makeCut(double d) { return LengthI.convert(new LengthI(d, UnitsFactory.TransmittanceRange_CutIn)); } /** * Initializes the components and populates the store. */ @BeforeMethod protected void setUp() throws Exception { ServiceFactoryPrx sf = new TestServiceFactory().proxy(); wrapper = new OMEROWrapper(new ImportConfig()); store = new OMEROMetadataStoreClient(); store.initialize(sf); store.setReader(new TestReader()); store.setEnumerationProvider(new TestEnumerationProvider()); store.setInstanceProvider( new BlitzInstanceProvider(store.getEnumerationProvider())); wrapper.setMetadataStore(store); // Need to populate at least one pixels and image field. store.setImageName("Image", IMAGE_INDEX); store.setPixelsSizeX(new PositiveInteger(1), IMAGE_INDEX); store.setPixelsSizeC(new PositiveInteger(2), IMAGE_INDEX); // First Laser, First LightSourceSettings store.setLaserID( "Laser:0", INSTRUMENT_INDEX, LIGHTSOURCE_INDEX); store.setLaserManufacturer("0", INSTRUMENT_INDEX, LIGHTSOURCE_INDEX); store.setLaserType(LaserType.OTHER, INSTRUMENT_INDEX, LIGHTSOURCE_INDEX); store.setChannelLightSourceSettingsID( "Laser:0", IMAGE_INDEX, CHANNEL_INDEX); store.setChannelLightSourceSettingsAttenuation( new PercentFraction(1f), IMAGE_INDEX, CHANNEL_INDEX); // First Filament , Second LightSourceSettings store.setFilamentID( "Filament:1", INSTRUMENT_INDEX, LIGHTSOURCE_INDEX); store.setFilamentManufacturer("1", INSTRUMENT_INDEX, LIGHTSOURCE_INDEX); store.setFilamentType( FilamentType.OTHER, INSTRUMENT_INDEX, LIGHTSOURCE_INDEX); store.setChannelLightSourceSettingsID( "Filament:1", IMAGE_INDEX, CHANNEL_INDEX + 1); store.setChannelLightSourceSettingsAttenuation( new PercentFraction(1f), IMAGE_INDEX, CHANNEL_INDEX + 1); // FilterSet store.setFilterSetID("FilterSet:0", INSTRUMENT_INDEX, FILTER_SET_INDEX); store.setFilterSetLotNumber("0", INSTRUMENT_INDEX, FILTER_SET_INDEX); store.setFilterSetID("FilterSet:1", INSTRUMENT_INDEX, FILTER_SET_INDEX + 1); store.setFilterSetLotNumber("1", INSTRUMENT_INDEX, FILTER_SET_INDEX + 1); // FilterSet linkages store.setChannelFilterSetRef("FilterSet:0", IMAGE_INDEX, CHANNEL_INDEX); store.setChannelFilterSetRef("FilterSet:1", IMAGE_INDEX, CHANNEL_INDEX + 1); // Filters store.setFilterID("Filter:0", INSTRUMENT_INDEX, FILTER_INDEX); store.setFilterLotNumber("0", INSTRUMENT_INDEX, FILTER_INDEX); store.setFilterID("Filter:1", INSTRUMENT_INDEX, FILTER_INDEX + 1); store.setFilterLotNumber("1", INSTRUMENT_INDEX, FILTER_INDEX + 1); store.setFilterID("Filter:2", INSTRUMENT_INDEX, FILTER_INDEX + 2); store.setFilterLotNumber("2", INSTRUMENT_INDEX, FILTER_INDEX + 2); store.setFilterID("Filter:3", INSTRUMENT_INDEX, FILTER_INDEX + 3); store.setFilterLotNumber("3", INSTRUMENT_INDEX, FILTER_INDEX + 3); store.setFilterID("Filter:4", INSTRUMENT_INDEX, FILTER_INDEX + 4); store.setFilterLotNumber("4", INSTRUMENT_INDEX, FILTER_INDEX + 4); store.setFilterID("Filter:5", INSTRUMENT_INDEX, FILTER_INDEX + 5); store.setFilterLotNumber("5", INSTRUMENT_INDEX, FILTER_INDEX + 5); store.setFilterID("Filter:6", INSTRUMENT_INDEX, FILTER_INDEX + 6); store.setFilterLotNumber("6", INSTRUMENT_INDEX, FILTER_INDEX + 6); store.setFilterID("Filter:7", INSTRUMENT_INDEX, FILTER_INDEX + 7); store.setFilterLotNumber("7", INSTRUMENT_INDEX, FILTER_INDEX + 7); // Filter linkages store.setFilterSetEmissionFilterRef("Filter:0", INSTRUMENT_INDEX, FILTER_SET_INDEX, FILTER_INDEX); store.setFilterSetExcitationFilterRef("Filter:1", INSTRUMENT_INDEX, FILTER_SET_INDEX, FILTER_INDEX); store.setFilterSetEmissionFilterRef("Filter:6", INSTRUMENT_INDEX, FILTER_SET_INDEX + 1, FILTER_INDEX); store.setFilterSetExcitationFilterRef("Filter:7", INSTRUMENT_INDEX, FILTER_SET_INDEX + 1, FILTER_INDEX); store.setLightPathEmissionFilterRef( "Filter:2", IMAGE_INDEX, CHANNEL_INDEX, CHANNEL_INDEX); store.setLightPathExcitationFilterRef( "Filter:3", IMAGE_INDEX, CHANNEL_INDEX, CHANNEL_INDEX); store.setLightPathEmissionFilterRef("Filter:4", IMAGE_INDEX, CHANNEL_INDEX + 1, CHANNEL_INDEX + 1); store.setLightPathExcitationFilterRef("Filter:5", IMAGE_INDEX, CHANNEL_INDEX + 1, CHANNEL_INDEX + 1); } /** Tests the color of the base channel. */ @Test public void testBaseDataChannelOne() { ChannelProcessor processor = new ChannelProcessor(); processor.process(store); ChannelData data = ChannelData.fromObjectContainerStore( store, IMAGE_INDEX, CHANNEL_INDEX); assertNotNull(data.getChannel()); assertNotNull(data.getChannel().getRed()); assertEquals(255, data.getChannel().getRed().getValue()); assertNotNull(data.getChannel().getGreen()); assertEquals(0, data.getChannel().getGreen().getValue()); assertNotNull(data.getChannel().getBlue()); assertEquals(0, data.getChannel().getBlue().getValue()); assertNotNull(data.getChannel().getAlpha()); assertEquals(255, data.getChannel().getAlpha().getValue()); assertNotNull(data.getLogicalChannel()); assertNull(data.getLogicalChannel().getName()); } /** Tests the color of the base channel two. */ @Test public void testBaseDataChannelTwo() { ChannelProcessor processor = new ChannelProcessor(); processor.process(store); ChannelData data = ChannelData.fromObjectContainerStore( store, IMAGE_INDEX, CHANNEL_INDEX + 1); assertNotNull(data.getChannel()); assertNotNull(data.getChannel().getRed()); assertEquals(0, data.getChannel().getRed().getValue()); assertNotNull(data.getChannel().getGreen()); assertEquals(255, data.getChannel().getGreen().getValue()); assertNotNull(data.getChannel().getBlue()); assertEquals(0, data.getChannel().getBlue().getValue()); assertNotNull(data.getChannel().getAlpha()); assertEquals(255, data.getChannel().getAlpha().getValue()); assertNotNull(data.getLogicalChannel()); assertNull(data.getLogicalChannel().getName()); } /** Tests a graphic image. */ @Test public void testGraphicsDomain() { ChannelProcessor processor = new ChannelProcessor(); TestReader reader = new TestReader(); reader.setDomains(GRAPHICS_DOMAIN); store.setReader(reader); processor.process(store); ChannelData data = ChannelData.fromObjectContainerStore( store, IMAGE_INDEX, CHANNEL_INDEX); assertNotNull(data.getChannel()); assertNotNull(data.getChannel().getRed()); assertEquals(255, data.getChannel().getRed().getValue()); assertNotNull(data.getChannel().getGreen()); assertEquals(0, data.getChannel().getGreen().getValue()); assertNotNull(data.getChannel().getBlue()); assertEquals(0, data.getChannel().getBlue().getValue()); assertNotNull(data.getChannel().getAlpha()); assertEquals(255, data.getChannel().getAlpha().getValue()); assertNotNull(data.getLogicalChannel().getName()); assertEquals(ChannelProcessor.RED_TEXT, data.getLogicalChannel().getName().getValue()); } /** Tests an image with a logical channel with emission wavelength. */ @Test public void testLogicalChannelGreenEmissionWavelength() { store.setChannelEmissionWavelength(makeWave(525.5), IMAGE_INDEX, CHANNEL_INDEX); ChannelProcessor processor = new ChannelProcessor(); processor.process(store); ChannelData data = ChannelData.fromObjectContainerStore( store, IMAGE_INDEX, CHANNEL_INDEX); assertNotNull(data.getChannel()); assertNotNull(data.getChannel().getRed()); assertEquals(0, data.getChannel().getRed().getValue()); assertNotNull(data.getChannel().getGreen()); assertEquals(255, data.getChannel().getGreen().getValue()); assertNotNull(data.getChannel().getBlue()); assertEquals(0, data.getChannel().getBlue().getValue()); assertNotNull(data.getChannel().getAlpha()); assertEquals(255, data.getChannel().getAlpha().getValue()); assertNotNull(data.getLogicalChannel()); assertNotNull(data.getLogicalChannel().getName()); assertEquals("525.5", data.getLogicalChannel().getName().getValue()); } /** Tests an image with a logical channel with emission wavelength. */ @Test public void testLogicalChannelBlueEmissionWavelength() { store.setChannelEmissionWavelength( makeWave(450.1), IMAGE_INDEX, CHANNEL_INDEX); ChannelProcessor processor = new ChannelProcessor(); processor.process(store); ChannelData data = ChannelData.fromObjectContainerStore( store, IMAGE_INDEX, CHANNEL_INDEX); assertNotNull(data.getChannel()); assertNotNull(data.getChannel().getRed()); assertEquals(0, data.getChannel().getRed().getValue()); assertNotNull(data.getChannel().getGreen()); assertEquals(0, data.getChannel().getGreen().getValue()); assertNotNull(data.getChannel().getBlue()); assertEquals(255, data.getChannel().getBlue().getValue()); assertNotNull(data.getChannel().getAlpha()); assertEquals(255, data.getChannel().getAlpha().getValue()); assertNotNull(data.getLogicalChannel()); assertNotNull(data.getLogicalChannel().getName()); assertEquals("450.1", data.getLogicalChannel().getName().getValue()); } /** Tests an image with a logical channel with emission wavelength. */ @Test public void testLogicalChannelRedEmissionWavelength() { store.setChannelEmissionWavelength( makeWave(625.5), IMAGE_INDEX, CHANNEL_INDEX); ChannelProcessor processor = new ChannelProcessor(); processor.process(store); ChannelData data = ChannelData.fromObjectContainerStore( store, IMAGE_INDEX, CHANNEL_INDEX); assertNotNull(data.getChannel()); assertNotNull(data.getChannel().getRed()); assertEquals(255, data.getChannel().getRed().getValue()); assertNotNull(data.getChannel().getGreen()); assertEquals(0, data.getChannel().getGreen().getValue()); assertNotNull(data.getChannel().getBlue()); assertEquals(0, data.getChannel().getBlue().getValue()); assertNotNull(data.getChannel().getAlpha()); assertEquals(255, data.getChannel().getAlpha().getValue()); assertNotNull(data.getLogicalChannel()); assertNotNull(data.getLogicalChannel().getName()); assertEquals("625.5", data.getLogicalChannel().getName().getValue()); } /** * Tests an image with a logical channel with filter set * with emission filter. */ @Test public void testFilterSetEmFilterBlueWavelength() { store.setTransmittanceRangeCutIn(makeCut(425), INSTRUMENT_INDEX, 0); store.setTransmittanceRangeCutOut(makeCut(430), INSTRUMENT_INDEX, 0); ChannelProcessor processor = new ChannelProcessor(); processor.process(store); ChannelData data = ChannelData.fromObjectContainerStore( store, IMAGE_INDEX, CHANNEL_INDEX); assertNotNull(data.getChannel()); assertNotNull(data.getChannel().getRed()); assertEquals(0, data.getChannel().getRed().getValue()); assertNotNull(data.getChannel().getGreen()); assertEquals(0, data.getChannel().getGreen().getValue()); assertNotNull(data.getChannel().getBlue()); assertEquals(255, data.getChannel().getBlue().getValue()); assertNotNull(data.getChannel().getAlpha()); assertEquals(255, data.getChannel().getAlpha().getValue()); assertNotNull(data.getLogicalChannel()); assertNotNull(data.getLogicalChannel().getName()); assertEquals("425", data.getLogicalChannel().getName().getValue()); } /** * Tests an image with a logical channel with a laser. */ @Test public void testLaserBlueWavelength() { store.setLaserWavelength( makeWave(435.5), INSTRUMENT_INDEX, LIGHTSOURCE_INDEX); ChannelProcessor processor = new ChannelProcessor(); processor.process(store); ChannelData data = ChannelData.fromObjectContainerStore( store, IMAGE_INDEX, CHANNEL_INDEX); assertNotNull(data.getChannel()); assertNotNull(data.getChannel().getRed()); assertEquals(0, data.getChannel().getRed().getValue()); assertNotNull(data.getChannel().getGreen()); assertEquals(0, data.getChannel().getGreen().getValue()); assertNotNull(data.getChannel().getBlue()); assertEquals(255, data.getChannel().getBlue().getValue()); assertNotNull(data.getChannel().getAlpha()); assertEquals(255, data.getChannel().getAlpha().getValue()); assertNotNull(data.getLogicalChannel()); assertNotNull(data.getLogicalChannel().getName()); assertEquals("435.5", data.getLogicalChannel().getName().getValue()); } /** * Tests an image with a logical channel with excitation wavelength. */ @Test public void testLogicalChannelGreenExcitationWavelength() { store.setChannelExcitationWavelength( makeWave(525.5), IMAGE_INDEX, CHANNEL_INDEX); ChannelProcessor processor = new ChannelProcessor(); processor.process(store); ChannelData data = ChannelData.fromObjectContainerStore( store, IMAGE_INDEX, CHANNEL_INDEX); assertNotNull(data.getChannel()); assertNotNull(data.getChannel().getRed()); assertEquals(0, data.getChannel().getRed().getValue()); assertNotNull(data.getChannel().getGreen()); assertEquals(255, data.getChannel().getGreen().getValue()); assertNotNull(data.getChannel().getBlue()); assertEquals(0, data.getChannel().getBlue().getValue()); assertNotNull(data.getChannel().getAlpha()); assertEquals(255, data.getChannel().getAlpha().getValue()); assertNotNull(data.getLogicalChannel()); assertNotNull(data.getLogicalChannel().getName()); assertEquals("525.5", data.getLogicalChannel().getName().getValue()); } /** * Tests an image with a logical channel with excitation wavelength. */ @Test public void testLogicalChannelBlueExcitationWavelength() { store.setChannelExcitationWavelength( makeWave(450.1), IMAGE_INDEX, CHANNEL_INDEX); ChannelProcessor processor = new ChannelProcessor(); processor.process(store); ChannelData data = ChannelData.fromObjectContainerStore( store, IMAGE_INDEX, CHANNEL_INDEX); assertNotNull(data.getChannel()); assertNotNull(data.getChannel().getRed()); assertEquals(0, data.getChannel().getRed().getValue()); assertNotNull(data.getChannel().getGreen()); assertEquals(0, data.getChannel().getGreen().getValue()); assertNotNull(data.getChannel().getBlue()); assertEquals(255, data.getChannel().getBlue().getValue()); assertNotNull(data.getChannel().getAlpha()); assertEquals(255, data.getChannel().getAlpha().getValue()); assertNotNull(data.getLogicalChannel()); assertNotNull(data.getLogicalChannel().getName()); assertEquals("450.1", data.getLogicalChannel().getName().getValue()); } /** * Tests an image with a logical channel with excitation wavelength. */ @Test public void testLogicalChannelRedExcitationWavelength() { store.setChannelExcitationWavelength( makeWave(625.5), IMAGE_INDEX, CHANNEL_INDEX); ChannelProcessor processor = new ChannelProcessor(); processor.process(store); ChannelData data = ChannelData.fromObjectContainerStore( store, IMAGE_INDEX, CHANNEL_INDEX); assertNotNull(data.getChannel()); assertNotNull(data.getChannel().getRed()); assertEquals(255, data.getChannel().getRed().getValue()); assertNotNull(data.getChannel().getGreen()); assertEquals(0, data.getChannel().getGreen().getValue()); assertNotNull(data.getChannel().getBlue()); assertEquals(0, data.getChannel().getBlue().getValue()); assertNotNull(data.getChannel().getAlpha()); assertEquals(255, data.getChannel().getAlpha().getValue()); assertNotNull(data.getLogicalChannel()); assertNotNull(data.getLogicalChannel().getName()); assertEquals("625.5", data.getLogicalChannel().getName().getValue()); } /** * Tests an image with a logical channel with a filter set with an * excitation filter. */ @Test public void testFilterSetExFilterBlueWavelength() { store.setTransmittanceRangeCutIn(makeCut(425), INSTRUMENT_INDEX, 1); store.setTransmittanceRangeCutOut(makeCut(430), INSTRUMENT_INDEX, 1); ChannelProcessor processor = new ChannelProcessor(); processor.process(store); ChannelData data = ChannelData.fromObjectContainerStore( store, IMAGE_INDEX, CHANNEL_INDEX); assertNotNull(data.getChannel()); assertNotNull(data.getChannel().getRed()); assertEquals(0, data.getChannel().getRed().getValue()); assertNotNull(data.getChannel().getGreen()); assertEquals(0, data.getChannel().getGreen().getValue()); assertNotNull(data.getChannel().getBlue()); assertEquals(255, data.getChannel().getBlue().getValue()); assertNotNull(data.getChannel().getAlpha()); assertEquals(255, data.getChannel().getAlpha().getValue()); assertNotNull(data.getLogicalChannel()); assertNotNull(data.getLogicalChannel().getName()); assertEquals("425", data.getLogicalChannel().getName().getValue()); } /** * Tests a logical channel with a light path with an emission filter. */ @Test public void testLogicalChannelLightPathEmFilterBlueWavelength() { store.setTransmittanceRangeCutIn(makeCut(430), INSTRUMENT_INDEX, 2); store.setTransmittanceRangeCutOut(makeCut(435), INSTRUMENT_INDEX, 2); ChannelProcessor processor = new ChannelProcessor(); processor.process(store); ChannelData data = ChannelData.fromObjectContainerStore( store, IMAGE_INDEX, CHANNEL_INDEX); assertNotNull(data.getChannel()); assertNotNull(data.getChannel().getRed()); assertEquals(0, data.getChannel().getRed().getValue()); assertNotNull(data.getChannel().getGreen()); assertEquals(0, data.getChannel().getGreen().getValue()); assertNotNull(data.getChannel().getBlue()); assertEquals(255, data.getChannel().getBlue().getValue()); assertNotNull(data.getChannel().getAlpha()); assertEquals(255, data.getChannel().getAlpha().getValue()); assertNotNull(data.getLogicalChannel()); assertNotNull(data.getLogicalChannel().getName()); assertEquals("430", data.getLogicalChannel().getName().getValue()); } /** * Tests a logical channel with a light path with an excitation filter. */ @Test public void testLogicalChannelLightPathExFilterBlueWavelength() { store.setTransmittanceRangeCutIn(makeCut(430), INSTRUMENT_INDEX, 3); store.setTransmittanceRangeCutOut(makeCut(435), INSTRUMENT_INDEX, 3); ChannelProcessor processor = new ChannelProcessor(); processor.process(store); ChannelData data = ChannelData.fromObjectContainerStore( store, IMAGE_INDEX, CHANNEL_INDEX); assertNotNull(data.getChannel()); assertNotNull(data.getChannel().getRed()); assertEquals(0, data.getChannel().getRed().getValue()); assertNotNull(data.getChannel().getGreen()); assertEquals(0, data.getChannel().getGreen().getValue()); assertNotNull(data.getChannel().getBlue()); assertEquals(255, data.getChannel().getBlue().getValue()); assertNotNull(data.getChannel().getAlpha()); assertEquals(255, data.getChannel().getAlpha().getValue()); assertNotNull(data.getLogicalChannel()); assertNotNull(data.getLogicalChannel().getName()); assertEquals("430", data.getLogicalChannel().getName().getValue()); } /** * Tests a logical channel with a light path with an emission filter. * and an emission filter from a filter set. * The value of the emission filter from the light path * will determine the name and color. */ @Test public void testLogicalChannelLightPathEmFilterBlueAndFilterSetEmFilterRedWavelength() { store.setTransmittanceRangeCutIn(makeCut(430), INSTRUMENT_INDEX, 2); store.setTransmittanceRangeCutOut(makeCut(435), INSTRUMENT_INDEX, 2); store.setTransmittanceRangeCutIn(makeCut(625), INSTRUMENT_INDEX, 0); store.setTransmittanceRangeCutOut(makeCut(640), INSTRUMENT_INDEX, 0); ChannelProcessor processor = new ChannelProcessor(); processor.process(store); ChannelData data = ChannelData.fromObjectContainerStore( store, IMAGE_INDEX, CHANNEL_INDEX); assertNotNull(data.getChannel()); assertNotNull(data.getChannel().getRed()); assertEquals(0, data.getChannel().getRed().getValue()); assertNotNull(data.getChannel().getGreen()); assertEquals(0, data.getChannel().getGreen().getValue()); assertNotNull(data.getChannel().getBlue()); assertEquals(255, data.getChannel().getBlue().getValue()); assertNotNull(data.getChannel().getAlpha()); assertEquals(255, data.getChannel().getAlpha().getValue()); assertNotNull(data.getLogicalChannel()); assertNotNull(data.getLogicalChannel().getName()); assertEquals("430", data.getLogicalChannel().getName().getValue()); } /** * Tests a logical channel with a light path with an excitation filter. * and an excitation filter from a filter set. * The value of the excitation filter from the light path * will determine the name and color. */ @Test public void testLogicalChannelLightPathExFilterBlueAndFilterSetExFilterRedWavelength() { store.setTransmittanceRangeCutIn(makeCut(430), INSTRUMENT_INDEX, 3); store.setTransmittanceRangeCutOut(makeCut(435), INSTRUMENT_INDEX, 3); store.setTransmittanceRangeCutIn(makeCut(625), INSTRUMENT_INDEX, 1); store.setTransmittanceRangeCutOut(makeCut(640), INSTRUMENT_INDEX, 1); ChannelProcessor processor = new ChannelProcessor(); processor.process(store); ChannelData data = ChannelData.fromObjectContainerStore( store, IMAGE_INDEX, CHANNEL_INDEX); assertNotNull(data.getChannel()); assertNotNull(data.getChannel().getRed()); assertEquals(0, data.getChannel().getRed().getValue()); assertNotNull(data.getChannel().getGreen()); assertEquals(0, data.getChannel().getGreen().getValue()); assertNotNull(data.getChannel().getBlue()); assertEquals(255, data.getChannel().getBlue().getValue()); assertNotNull(data.getChannel().getAlpha()); assertEquals(255, data.getChannel().getAlpha().getValue()); assertNotNull(data.getLogicalChannel()); assertNotNull(data.getLogicalChannel().getName()); assertEquals("430", data.getLogicalChannel().getName().getValue()); } /** * Tests a logical channel with a light path with an excitation filter. * and an emission filter set from a filter set. * The value of the emission filter from the filter set * will determine the name and color. */ @Test public void testLogicalChannelLightPathExFilterBlueAndFilterSetEmFilterRedWavelength() { store.setTransmittanceRangeCutIn(makeCut(430), INSTRUMENT_INDEX, 3); store.setTransmittanceRangeCutOut(makeCut(435), INSTRUMENT_INDEX, 3); store.setTransmittanceRangeCutIn(makeCut(625), INSTRUMENT_INDEX, 0); store.setTransmittanceRangeCutOut(makeCut(640), INSTRUMENT_INDEX, 0); ChannelProcessor processor = new ChannelProcessor(); processor.process(store); ChannelData data = ChannelData.fromObjectContainerStore( store, IMAGE_INDEX, CHANNEL_INDEX); assertNotNull(data.getChannel()); assertNotNull(data.getChannel().getRed()); assertEquals(255, data.getChannel().getRed().getValue()); assertNotNull(data.getChannel().getGreen()); assertEquals(0, data.getChannel().getGreen().getValue()); assertNotNull(data.getChannel().getBlue()); assertEquals(0, data.getChannel().getBlue().getValue()); assertNotNull(data.getChannel().getAlpha()); assertEquals(255, data.getChannel().getAlpha().getValue()); assertNotNull(data.getLogicalChannel()); assertNotNull(data.getLogicalChannel().getName()); assertEquals("625", data.getLogicalChannel().getName().getValue()); } /** * Tests an image with 2 channels, one blue (light path emission filter) * and another one with a transmitted light. */ @Test public void testChannelsEmFilterLightPathBlueAndTransmittedLight() { ChannelProcessor processor = new ChannelProcessor(); store.setReader(new TestReader()); store.setTransmittanceRangeCutIn(makeCut(430), INSTRUMENT_INDEX, 2); store.setTransmittanceRangeCutOut(makeCut(435), INSTRUMENT_INDEX, 2); processor.process(store); ChannelData data = ChannelData.fromObjectContainerStore( store, IMAGE_INDEX, CHANNEL_INDEX); assertNotNull(data.getChannel()); assertNotNull(data.getChannel().getRed()); assertEquals(0, data.getChannel().getRed().getValue()); assertNotNull(data.getChannel().getGreen()); assertEquals(0, data.getChannel().getGreen().getValue()); assertNotNull(data.getChannel().getBlue()); assertEquals(255, data.getChannel().getBlue().getValue()); assertNotNull(data.getChannel().getAlpha()); assertEquals(255, data.getChannel().getAlpha().getValue()); // data = ChannelData.fromObjectContainerStore( store, IMAGE_INDEX, CHANNEL_INDEX+1); assertNotNull(data.getChannel()); assertNotNull(data.getChannel().getRed()); assertEquals(255, data.getChannel().getRed().getValue()); assertNotNull(data.getChannel().getGreen()); assertEquals(255, data.getChannel().getGreen().getValue()); assertNotNull(data.getChannel().getBlue()); assertEquals(255, data.getChannel().getBlue().getValue()); assertNotNull(data.getChannel().getAlpha()); assertEquals(255, data.getChannel().getAlpha().getValue()); } /** * Tests an image with 2 channels, one red (light path emission filter) * and another one with a transmitted light. */ @Test public void testChannelsEmFilterLightPathRedAndTransmittedLight() { ChannelProcessor processor = new ChannelProcessor(); store.setReader(new TestReader()); store.setTransmittanceRangeCutIn(makeCut(600), INSTRUMENT_INDEX, 2); store.setTransmittanceRangeCutOut(makeCut(620), INSTRUMENT_INDEX, 2); processor.process(store); ChannelData data = ChannelData.fromObjectContainerStore( store, IMAGE_INDEX, CHANNEL_INDEX); assertNotNull(data.getChannel()); assertNotNull(data.getChannel().getRed()); assertEquals(255, data.getChannel().getRed().getValue()); assertNotNull(data.getChannel().getGreen()); assertEquals(0, data.getChannel().getGreen().getValue()); assertNotNull(data.getChannel().getBlue()); assertEquals(0, data.getChannel().getBlue().getValue()); assertNotNull(data.getChannel().getAlpha()); assertEquals(255, data.getChannel().getAlpha().getValue()); // data = ChannelData.fromObjectContainerStore( store, IMAGE_INDEX, CHANNEL_INDEX+1); assertNotNull(data.getChannel()); assertNotNull(data.getChannel().getRed()); assertEquals(255, data.getChannel().getRed().getValue()); assertNotNull(data.getChannel().getGreen()); assertEquals(255, data.getChannel().getGreen().getValue()); assertNotNull(data.getChannel().getBlue()); assertEquals(255, data.getChannel().getBlue().getValue()); assertNotNull(data.getChannel().getAlpha()); assertEquals(255, data.getChannel().getAlpha().getValue()); } /** * Tests an image with 2 channels, one green (light path emission filter) * and another one with a transmitted light. */ @Test public void testChannelsEmFilterLightPathGreenAndTransmittedLight() { ChannelProcessor processor = new ChannelProcessor(); store.setReader(new TestReader()); store.setTransmittanceRangeCutIn(makeCut(510), INSTRUMENT_INDEX, 2); store.setTransmittanceRangeCutOut(makeCut(520), INSTRUMENT_INDEX, 2); processor.process(store); ChannelData data = ChannelData.fromObjectContainerStore( store, IMAGE_INDEX, CHANNEL_INDEX); assertNotNull(data.getChannel()); assertNotNull(data.getChannel().getRed()); assertEquals(0, data.getChannel().getRed().getValue()); assertNotNull(data.getChannel().getGreen()); assertEquals(255, data.getChannel().getGreen().getValue()); assertNotNull(data.getChannel().getBlue()); assertEquals(0, data.getChannel().getBlue().getValue()); assertNotNull(data.getChannel().getAlpha()); assertEquals(255, data.getChannel().getAlpha().getValue()); // data = ChannelData.fromObjectContainerStore( store, IMAGE_INDEX, CHANNEL_INDEX+1); assertNotNull(data.getChannel()); assertNotNull(data.getChannel().getRed()); assertEquals(255, data.getChannel().getRed().getValue()); assertNotNull(data.getChannel().getGreen()); assertEquals(255, data.getChannel().getGreen().getValue()); assertNotNull(data.getChannel().getBlue()); assertEquals(255, data.getChannel().getBlue().getValue()); assertNotNull(data.getChannel().getAlpha()); assertEquals(255, data.getChannel().getAlpha().getValue()); } /** * Tests an image with 2 channels, one green (filter set emission filter) * and another one with a transmitted light. */ @Test public void testChannelsEmFilterFilterSetGreenAndTransmittedLight() { ChannelProcessor processor = new ChannelProcessor(); store.setReader(new TestReader()); store.setTransmittanceRangeCutIn(makeCut(510), INSTRUMENT_INDEX, 0); store.setTransmittanceRangeCutOut(makeCut(520), INSTRUMENT_INDEX, 0); processor.process(store); ChannelData data = ChannelData.fromObjectContainerStore( store, IMAGE_INDEX, CHANNEL_INDEX); assertNotNull(data.getChannel()); assertNotNull(data.getChannel().getRed()); assertEquals(0, data.getChannel().getRed().getValue()); assertNotNull(data.getChannel().getGreen()); assertEquals(255, data.getChannel().getGreen().getValue()); assertNotNull(data.getChannel().getBlue()); assertEquals(0, data.getChannel().getBlue().getValue()); assertNotNull(data.getChannel().getAlpha()); assertEquals(255, data.getChannel().getAlpha().getValue()); // data = ChannelData.fromObjectContainerStore( store, IMAGE_INDEX, CHANNEL_INDEX+1); assertNotNull(data.getChannel()); assertNotNull(data.getChannel().getRed()); assertEquals(255, data.getChannel().getRed().getValue()); assertNotNull(data.getChannel().getGreen()); assertEquals(255, data.getChannel().getGreen().getValue()); assertNotNull(data.getChannel().getBlue()); assertEquals(255, data.getChannel().getBlue().getValue()); assertNotNull(data.getChannel().getAlpha()); assertEquals(255, data.getChannel().getAlpha().getValue()); } }