/*
* ome.formats.utests.ChannelDataTest
*
*------------------------------------------------------------------------------
* 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 java.util.Iterator;
import java.util.List;
import junit.framework.TestCase;
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.xml.model.enums.*;
import ome.xml.model.primitives.*;
import omero.api.ServiceFactoryPrx;
import omero.model.Filament;
import omero.model.Filter;
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 ChannelDataTest 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;
/** Identifies the index of the emission filter. */
private static final int EM_FILTER_INDEX = 0;
/** Identifies the index of the excitation filter. */
private static final int EX_FILTER_INDEX = 0;
/**
* 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.setEnumerationProvider(new TestEnumerationProvider());
store.setInstanceProvider(
new BlitzInstanceProvider(store.getEnumerationProvider()));
wrapper.setMetadataStore(store);
// Need to populate at least one pixels field.
store.setPixelsSizeX(new PositiveInteger(1), IMAGE_INDEX);
// First Filament, First LightSourceSettings
store.setFilamentID(
"Filament:0", INSTRUMENT_INDEX, LIGHTSOURCE_INDEX);
store.setFilamentManufacturer("0", INSTRUMENT_INDEX,
LIGHTSOURCE_INDEX);
store.setFilamentType(FilamentType.OTHER, INSTRUMENT_INDEX,
LIGHTSOURCE_INDEX);
store.setChannelLightSourceSettingsID(
"Filament:0", IMAGE_INDEX, CHANNEL_INDEX);
store.setChannelLightSourceSettingsAttenuation(
new PercentFraction(1.0f), IMAGE_INDEX, CHANNEL_INDEX);
// Second Filament, Second LightSourceSettings
store.setFilamentID(
"Filament:1", INSTRUMENT_INDEX, LIGHTSOURCE_INDEX + 1);
store.setFilamentManufacturer("1", INSTRUMENT_INDEX,
LIGHTSOURCE_INDEX + 1);
store.setFilamentType(FilamentType.OTHER, INSTRUMENT_INDEX,
LIGHTSOURCE_INDEX + 1);
store.setChannelLightSourceSettingsID(
"Filament:1", IMAGE_INDEX, CHANNEL_INDEX + 1);
store.setChannelLightSourceSettingsAttenuation(
new PercentFraction(1.0f), 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, EM_FILTER_INDEX);
store.setLightPathExcitationFilterRef(
"Filter:3", IMAGE_INDEX, CHANNEL_INDEX, EX_FILTER_INDEX);
store.setLightPathEmissionFilterRef("Filter:4",
IMAGE_INDEX, CHANNEL_INDEX + 1, EM_FILTER_INDEX + 1);
store.setLightPathExcitationFilterRef("Filter:5",
IMAGE_INDEX, CHANNEL_INDEX + 1, EX_FILTER_INDEX + 1);
}
/** Tests the creation of the first channel. */
@Test
public void testChannelDataChannelOne()
{
ChannelData data = ChannelData.fromObjectContainerStore(
store, IMAGE_INDEX, CHANNEL_INDEX);
assertNotNull(data);
assertNotNull(data.getChannel());
assertNotNull(data.getLogicalChannel());
assertNotNull(data.getFilterSet());
assertEquals("0", data.getFilterSet().getLotNumber().getValue());
assertNotNull(data.getFilterSetEmissionFilter());
assertEquals("0",
data.getFilterSetEmissionFilter().getLotNumber().getValue());
assertNotNull(data.getFilterSetExcitationFilter());
assertEquals("1",
data.getFilterSetExcitationFilter().getLotNumber().getValue());
List<Filter> filters = data.getLightPathEmissionFilters();
assertNotNull(filters);
Iterator<Filter> i = filters.iterator();
assertTrue(filters.size() == 1);
Filter f;
while (i.hasNext()) {
f = i.next();
assertEquals("2", f.getLotNumber().getValue());
}
filters = data.getLightPathExcitationFilters();
assertNotNull(filters);
i = filters.iterator();
assertTrue(filters.size() == 1);
while (i.hasNext()) {
f = i.next();
assertEquals("3", f.getLotNumber().getValue());
}
assertNotNull(data.getLightSource());
assertTrue(data.getLightSource() instanceof Filament);
assertEquals("0",
data.getLightSource().getManufacturer().getValue());
assertNotNull(data.getLightSourceSettings());
assertEquals(1.0,
data.getLightSourceSettings().getAttenuation().getValue());
}
/** Tests the creation of the second channel. */
@Test
public void testChannelDataChannelTwo()
{
ChannelData data = ChannelData.fromObjectContainerStore(
store, IMAGE_INDEX, CHANNEL_INDEX + 1);
assertNotNull(data);
assertNotNull(data.getChannel());
assertNotNull(data.getLogicalChannel());
assertNotNull(data.getFilterSet());
assertEquals("1", data.getFilterSet().getLotNumber().getValue());
assertNotNull(data.getFilterSetEmissionFilter());
assertEquals("6",
data.getFilterSetEmissionFilter().getLotNumber().getValue());
assertNotNull(data.getFilterSetExcitationFilter());
assertEquals("7",
data.getFilterSetExcitationFilter().getLotNumber().getValue());
List<Filter> filters = data.getLightPathEmissionFilters();
assertNotNull(filters);
Iterator<Filter> i = filters.iterator();
assertTrue(filters.size() == 1);
Filter f;
while (i.hasNext()) {
f = i.next();
assertEquals("4", f.getLotNumber().getValue());
}
filters = data.getLightPathExcitationFilters();
assertNotNull(filters);
i = filters.iterator();
assertTrue(filters.size() == 1);
while (i.hasNext()) {
f = i.next();
assertEquals("5", f.getLotNumber().getValue());
}
assertNotNull(data.getLightSource());
assertTrue(data.getLightSource() instanceof Filament);
assertEquals("1",
data.getLightSource().getManufacturer().getValue());
assertNotNull(data.getLightSourceSettings());
assertEquals(1.0,
data.getLightSourceSettings().getAttenuation().getValue());
}
}