Skip to content
Snippets Groups Projects
Commit bafb6322 authored by izabel's avatar izabel
Browse files

[LMS-1715] automatically calculate plate geometry

SVN: 17743
parent 7bf980aa
No related branches found
No related tags found
No related merge requests found
Showing
with 220 additions and 21 deletions
...@@ -16,6 +16,7 @@ ...@@ -16,6 +16,7 @@
package ch.systemsx.cisd.openbis.dss.generic.server; package ch.systemsx.cisd.openbis.dss.generic.server;
import java.util.Collection;
import java.util.List; import java.util.List;
import org.apache.log4j.Logger; import org.apache.log4j.Logger;
...@@ -49,6 +50,7 @@ import ch.systemsx.cisd.openbis.generic.shared.basic.dto.NewExperiment; ...@@ -49,6 +50,7 @@ import ch.systemsx.cisd.openbis.generic.shared.basic.dto.NewExperiment;
import ch.systemsx.cisd.openbis.generic.shared.basic.dto.NewSample; import ch.systemsx.cisd.openbis.generic.shared.basic.dto.NewSample;
import ch.systemsx.cisd.openbis.generic.shared.basic.dto.Sample; import ch.systemsx.cisd.openbis.generic.shared.basic.dto.Sample;
import ch.systemsx.cisd.openbis.generic.shared.basic.dto.SampleType; import ch.systemsx.cisd.openbis.generic.shared.basic.dto.SampleType;
import ch.systemsx.cisd.openbis.generic.shared.basic.dto.VocabularyTerm;
import ch.systemsx.cisd.openbis.generic.shared.dto.DataStoreServerInfo; import ch.systemsx.cisd.openbis.generic.shared.dto.DataStoreServerInfo;
import ch.systemsx.cisd.openbis.generic.shared.dto.DatastoreServiceDescriptions; import ch.systemsx.cisd.openbis.generic.shared.dto.DatastoreServiceDescriptions;
import ch.systemsx.cisd.openbis.generic.shared.dto.ListSamplesByPropertyCriteria; import ch.systemsx.cisd.openbis.generic.shared.dto.ListSamplesByPropertyCriteria;
...@@ -349,6 +351,20 @@ public final class EncapsulatedOpenBISService implements IEncapsulatedOpenBISSer ...@@ -349,6 +351,20 @@ public final class EncapsulatedOpenBISService implements IEncapsulatedOpenBISSer
} }
} }
synchronized public Collection<VocabularyTerm> listVocabularyTerms(String vocabularyCode)
throws UserFailureException
{
checkSessionToken();
try
{
return service.listVocabularyTerms(sessionToken, vocabularyCode);
} catch (InvalidSessionException ex)
{
authenticate();
return service.listVocabularyTerms(sessionToken, vocabularyCode);
}
}
synchronized public SampleType getSampleType(String sampleTypeCode) throws UserFailureException synchronized public SampleType getSampleType(String sampleTypeCode) throws UserFailureException
{ {
checkSessionToken(); checkSessionToken();
......
...@@ -16,6 +16,7 @@ ...@@ -16,6 +16,7 @@
package ch.systemsx.cisd.openbis.dss.generic.shared; package ch.systemsx.cisd.openbis.dss.generic.shared;
import java.util.Collection;
import java.util.List; import java.util.List;
import ch.systemsx.cisd.common.exceptions.UserFailureException; import ch.systemsx.cisd.common.exceptions.UserFailureException;
...@@ -35,6 +36,7 @@ import ch.systemsx.cisd.openbis.generic.shared.basic.dto.NewExperiment; ...@@ -35,6 +36,7 @@ import ch.systemsx.cisd.openbis.generic.shared.basic.dto.NewExperiment;
import ch.systemsx.cisd.openbis.generic.shared.basic.dto.NewSample; import ch.systemsx.cisd.openbis.generic.shared.basic.dto.NewSample;
import ch.systemsx.cisd.openbis.generic.shared.basic.dto.Sample; import ch.systemsx.cisd.openbis.generic.shared.basic.dto.Sample;
import ch.systemsx.cisd.openbis.generic.shared.basic.dto.SampleType; import ch.systemsx.cisd.openbis.generic.shared.basic.dto.SampleType;
import ch.systemsx.cisd.openbis.generic.shared.basic.dto.VocabularyTerm;
import ch.systemsx.cisd.openbis.generic.shared.dto.ListSamplesByPropertyCriteria; import ch.systemsx.cisd.openbis.generic.shared.dto.ListSamplesByPropertyCriteria;
import ch.systemsx.cisd.openbis.generic.shared.dto.NewExternalData; import ch.systemsx.cisd.openbis.generic.shared.dto.NewExternalData;
import ch.systemsx.cisd.openbis.generic.shared.dto.NewProperty; import ch.systemsx.cisd.openbis.generic.shared.dto.NewProperty;
...@@ -103,6 +105,12 @@ public interface IEncapsulatedOpenBISService ...@@ -103,6 +105,12 @@ public interface IEncapsulatedOpenBISService
public SampleIdentifier tryToGetSampleIdentifier(String samplePermID) public SampleIdentifier tryToGetSampleIdentifier(String samplePermID)
throws UserFailureException; throws UserFailureException;
/**
* Lists vocabulary terms.
*/
public Collection<VocabularyTerm> listVocabularyTerms(String vocabularyCode)
throws UserFailureException;
/** /**
* Gets the experiment type with assigned property types for the specified experiment type code. * Gets the experiment type with assigned property types for the specified experiment type code.
*/ */
......
...@@ -16,6 +16,7 @@ ...@@ -16,6 +16,7 @@
package ch.systemsx.cisd.openbis.generic.server; package ch.systemsx.cisd.openbis.generic.server;
import java.util.Collection;
import java.util.Collections; import java.util.Collections;
import java.util.HashMap; import java.util.HashMap;
import java.util.HashSet; import java.util.HashSet;
...@@ -68,6 +69,7 @@ import ch.systemsx.cisd.openbis.generic.shared.basic.dto.PropertyTypeWithVocabul ...@@ -68,6 +69,7 @@ import ch.systemsx.cisd.openbis.generic.shared.basic.dto.PropertyTypeWithVocabul
import ch.systemsx.cisd.openbis.generic.shared.basic.dto.Sample; import ch.systemsx.cisd.openbis.generic.shared.basic.dto.Sample;
import ch.systemsx.cisd.openbis.generic.shared.basic.dto.SampleType; import ch.systemsx.cisd.openbis.generic.shared.basic.dto.SampleType;
import ch.systemsx.cisd.openbis.generic.shared.basic.dto.SourceType; import ch.systemsx.cisd.openbis.generic.shared.basic.dto.SourceType;
import ch.systemsx.cisd.openbis.generic.shared.basic.dto.VocabularyTerm;
import ch.systemsx.cisd.openbis.generic.shared.dto.DataSetTypePE; import ch.systemsx.cisd.openbis.generic.shared.dto.DataSetTypePE;
import ch.systemsx.cisd.openbis.generic.shared.dto.DataSetTypePropertyTypePE; import ch.systemsx.cisd.openbis.generic.shared.dto.DataSetTypePropertyTypePE;
import ch.systemsx.cisd.openbis.generic.shared.dto.DataStorePE; import ch.systemsx.cisd.openbis.generic.shared.dto.DataStorePE;
...@@ -731,4 +733,18 @@ public class ETLService extends AbstractCommonServer<IETLService> implements IET ...@@ -731,4 +733,18 @@ public class ETLService extends AbstractCommonServer<IETLService> implements IET
return tryGetDataSet(sessionToken, dataSetCode); return tryGetDataSet(sessionToken, dataSetCode);
} }
public Collection<VocabularyTerm> listVocabularyTerms(String sessionToken, String vocabularyCode)
throws UserFailureException
{
checkSession(sessionToken);
VocabularyPE vocabularyOrNull =
getDAOFactory().getVocabularyDAO().tryFindVocabularyByCode(vocabularyCode);
if (vocabularyOrNull == null)
{
throw new UserFailureException(String.format("Vocabulary '%s' not found",
vocabularyCode));
}
return VocabularyTermTranslator.translateTerms(vocabularyOrNull.getTerms());
}
} }
...@@ -16,6 +16,7 @@ ...@@ -16,6 +16,7 @@
package ch.systemsx.cisd.openbis.generic.server; package ch.systemsx.cisd.openbis.generic.server;
import java.util.Collection;
import java.util.List; import java.util.List;
import ch.systemsx.cisd.authentication.ISessionManager; import ch.systemsx.cisd.authentication.ISessionManager;
...@@ -36,6 +37,7 @@ import ch.systemsx.cisd.openbis.generic.shared.basic.dto.NewExperiment; ...@@ -36,6 +37,7 @@ import ch.systemsx.cisd.openbis.generic.shared.basic.dto.NewExperiment;
import ch.systemsx.cisd.openbis.generic.shared.basic.dto.NewSample; import ch.systemsx.cisd.openbis.generic.shared.basic.dto.NewSample;
import ch.systemsx.cisd.openbis.generic.shared.basic.dto.Sample; import ch.systemsx.cisd.openbis.generic.shared.basic.dto.Sample;
import ch.systemsx.cisd.openbis.generic.shared.basic.dto.SampleType; import ch.systemsx.cisd.openbis.generic.shared.basic.dto.SampleType;
import ch.systemsx.cisd.openbis.generic.shared.basic.dto.VocabularyTerm;
import ch.systemsx.cisd.openbis.generic.shared.dto.DataStoreServerInfo; import ch.systemsx.cisd.openbis.generic.shared.dto.DataStoreServerInfo;
import ch.systemsx.cisd.openbis.generic.shared.dto.DatastoreServiceDescriptions; import ch.systemsx.cisd.openbis.generic.shared.dto.DatastoreServiceDescriptions;
import ch.systemsx.cisd.openbis.generic.shared.dto.ListSamplesByPropertyCriteria; import ch.systemsx.cisd.openbis.generic.shared.dto.ListSamplesByPropertyCriteria;
...@@ -298,5 +300,11 @@ public class ETLServiceLogger extends AbstractServerLogger implements IETLServic ...@@ -298,5 +300,11 @@ public class ETLServiceLogger extends AbstractServerLogger implements IETLServic
return null; return null;
} }
public Collection<VocabularyTerm> listVocabularyTerms(String sessionToken, String vocabulary)
throws UserFailureException
{
logAccess(sessionToken, "listVocabularyTerms", "VOCABULARY(%s)", vocabulary);
return null;
}
} }
...@@ -16,6 +16,7 @@ ...@@ -16,6 +16,7 @@
package ch.systemsx.cisd.openbis.generic.shared; package ch.systemsx.cisd.openbis.generic.shared;
import java.util.Collection;
import java.util.List; import java.util.List;
import org.springframework.transaction.annotation.Transactional; import org.springframework.transaction.annotation.Transactional;
...@@ -53,6 +54,7 @@ import ch.systemsx.cisd.openbis.generic.shared.basic.dto.NewSample; ...@@ -53,6 +54,7 @@ import ch.systemsx.cisd.openbis.generic.shared.basic.dto.NewSample;
import ch.systemsx.cisd.openbis.generic.shared.basic.dto.RoleWithHierarchy; import ch.systemsx.cisd.openbis.generic.shared.basic.dto.RoleWithHierarchy;
import ch.systemsx.cisd.openbis.generic.shared.basic.dto.Sample; import ch.systemsx.cisd.openbis.generic.shared.basic.dto.Sample;
import ch.systemsx.cisd.openbis.generic.shared.basic.dto.SampleType; import ch.systemsx.cisd.openbis.generic.shared.basic.dto.SampleType;
import ch.systemsx.cisd.openbis.generic.shared.basic.dto.VocabularyTerm;
import ch.systemsx.cisd.openbis.generic.shared.basic.dto.DatabaseModificationKind.ObjectKind; import ch.systemsx.cisd.openbis.generic.shared.basic.dto.DatabaseModificationKind.ObjectKind;
import ch.systemsx.cisd.openbis.generic.shared.dto.DataStoreServerInfo; import ch.systemsx.cisd.openbis.generic.shared.dto.DataStoreServerInfo;
import ch.systemsx.cisd.openbis.generic.shared.dto.ListSamplesByPropertyCriteria; import ch.systemsx.cisd.openbis.generic.shared.dto.ListSamplesByPropertyCriteria;
...@@ -134,6 +136,14 @@ public interface IETLLIMSService extends IServer, ISessionProvider ...@@ -134,6 +136,14 @@ public interface IETLLIMSService extends IServer, ISessionProvider
public ExperimentType getExperimentType(String sessionToken, String experimentTypeCode) public ExperimentType getExperimentType(String sessionToken, String experimentTypeCode)
throws UserFailureException; throws UserFailureException;
/**
* Returns a list of terms belonging to given vocabulary.
*/
@Transactional(readOnly = true)
@RolesAllowed(RoleWithHierarchy.SPACE_ETL_SERVER)
public Collection<VocabularyTerm> listVocabularyTerms(String sessionToken, String vocabulary)
throws UserFailureException;
/** /**
* Returns the SampleType together with assigned property types for specified sample type code. * Returns the SampleType together with assigned property types for specified sample type code.
*/ */
...@@ -442,6 +452,4 @@ public interface IETLLIMSService extends IServer, ISessionProvider ...@@ -442,6 +452,4 @@ public interface IETLLIMSService extends IServer, ISessionProvider
@AuthorizationGuard(guardClass = DataSetCodePredicate.class) String dataSetCode) @AuthorizationGuard(guardClass = DataSetCodePredicate.class) String dataSetCode)
throws UserFailureException; throws UserFailureException;
} }
...@@ -35,7 +35,6 @@ import ch.systemsx.cisd.bds.hcs.Location; ...@@ -35,7 +35,6 @@ import ch.systemsx.cisd.bds.hcs.Location;
import ch.systemsx.cisd.bds.hcs.WellGeometry; import ch.systemsx.cisd.bds.hcs.WellGeometry;
import ch.systemsx.cisd.common.exceptions.ConfigurationFailureException; import ch.systemsx.cisd.common.exceptions.ConfigurationFailureException;
import ch.systemsx.cisd.common.exceptions.UserFailureException; import ch.systemsx.cisd.common.exceptions.UserFailureException;
import ch.systemsx.cisd.common.filesystem.FileOperations;
import ch.systemsx.cisd.common.filesystem.FileUtilities; import ch.systemsx.cisd.common.filesystem.FileUtilities;
import ch.systemsx.cisd.common.logging.LogCategory; import ch.systemsx.cisd.common.logging.LogCategory;
import ch.systemsx.cisd.common.logging.LogFactory; import ch.systemsx.cisd.common.logging.LogFactory;
...@@ -147,16 +146,6 @@ abstract public class AbstractHCSImageFileExtractor implements IHCSImageFileExtr ...@@ -147,16 +146,6 @@ abstract public class AbstractHCSImageFileExtractor implements IHCSImageFileExtr
} }
} }
public static final String[] IMAGE_EXTENSIONS = new String[]
{ "tif", "tiff", "jpg", "jpeg", "gif", "png" };
protected List<File> listImageFiles(final File directory)
{
return FileOperations.getInstance().listFiles(directory, IMAGE_EXTENSIONS, true);
}
// -------------------------------
protected static final Logger operationLog = protected static final Logger operationLog =
LogFactory.getLogger(LogCategory.OPERATION, AbstractHCSImageFileExtractor.class); LogFactory.getLogger(LogCategory.OPERATION, AbstractHCSImageFileExtractor.class);
...@@ -226,7 +215,7 @@ abstract public class AbstractHCSImageFileExtractor implements IHCSImageFileExtr ...@@ -226,7 +215,7 @@ abstract public class AbstractHCSImageFileExtractor implements IHCSImageFileExtr
{ {
List<File> invalidFiles = new LinkedList<File>(); List<File> invalidFiles = new LinkedList<File>();
List<AcquiredPlateImage> acquiredImages = new ArrayList<AcquiredPlateImage>(); List<AcquiredPlateImage> acquiredImages = new ArrayList<AcquiredPlateImage>();
List<File> imageFiles = listImageFiles(incomingDataSetDirectory); List<File> imageFiles = ImageFileExtractorUtils.listImageFiles(incomingDataSetDirectory);
for (final File imageFile : imageFiles) for (final File imageFile : imageFiles)
{ {
InterruptedExceptionUnchecked.check(); InterruptedExceptionUnchecked.check();
......
...@@ -32,7 +32,7 @@ import ch.systemsx.cisd.openbis.plugin.screening.shared.imaging.dataaccess.Color ...@@ -32,7 +32,7 @@ import ch.systemsx.cisd.openbis.plugin.screening.shared.imaging.dataaccess.Color
/** /**
* Generic image extractor implementation. The images names should have an extension present in * Generic image extractor implementation. The images names should have an extension present in
* {@link #IMAGE_EXTENSIONS} constant. Each image name should adhere to the schema:<br> * {@link ImageFileExtractorUtils#IMAGE_EXTENSIONS} constant. Each image name should adhere to the schema:<br>
* *
* <pre> * <pre>
* &lt;any-text&gt;_&lt;plate-code&gt;_&lt;well-code&gt;_&lt;tile-code&gt;_&lt;channel-name&gt;.&lt;allowed-image-extension&gt; * &lt;any-text&gt;_&lt;plate-code&gt;_&lt;well-code&gt;_&lt;tile-code&gt;_&lt;channel-name&gt;.&lt;allowed-image-extension&gt;
......
/*
* Copyright 2010 ETH Zuerich, CISD
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package ch.systemsx.cisd.openbis.dss.etl;
import java.io.File;
import java.util.List;
import ch.systemsx.cisd.common.filesystem.FileOperations;
/**
* Utility class for image file operations.
*
* @author Izabela Adamczyk
*/
public class ImageFileExtractorUtils
{
public static final String[] IMAGE_EXTENSIONS = new String[]
{ "tif", "tiff", "jpg", "jpeg", "gif", "png" };
public static List<File> listImageFiles(final File directory)
{
return FileOperations.getInstance().listFiles(directory, IMAGE_EXTENSIONS, true);
}
}
...@@ -18,16 +18,19 @@ package ch.systemsx.cisd.openbis.dss.etl.biozentrum; ...@@ -18,16 +18,19 @@ package ch.systemsx.cisd.openbis.dss.etl.biozentrum;
import java.io.File; import java.io.File;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Collection;
import java.util.List; import java.util.List;
import java.util.Properties; import java.util.Properties;
import org.apache.commons.io.FilenameUtils; import org.apache.commons.io.FilenameUtils;
import org.apache.commons.lang.StringUtils; import org.apache.commons.lang.StringUtils;
import ch.systemsx.cisd.bds.hcs.Location;
import ch.systemsx.cisd.common.exceptions.EnvironmentFailureException; import ch.systemsx.cisd.common.exceptions.EnvironmentFailureException;
import ch.systemsx.cisd.common.exceptions.UserFailureException; import ch.systemsx.cisd.common.exceptions.UserFailureException;
import ch.systemsx.cisd.common.utilities.PropertyUtils; import ch.systemsx.cisd.common.utilities.PropertyUtils;
import ch.systemsx.cisd.etlserver.IDataSetInfoExtractor; import ch.systemsx.cisd.etlserver.IDataSetInfoExtractor;
import ch.systemsx.cisd.openbis.dss.etl.ImageFileExtractorUtils;
import ch.systemsx.cisd.openbis.dss.generic.shared.IEncapsulatedOpenBISService; import ch.systemsx.cisd.openbis.dss.generic.shared.IEncapsulatedOpenBISService;
import ch.systemsx.cisd.openbis.dss.generic.shared.dto.DataSetInformation; import ch.systemsx.cisd.openbis.dss.generic.shared.dto.DataSetInformation;
import ch.systemsx.cisd.openbis.generic.shared.basic.dto.DataType; import ch.systemsx.cisd.openbis.generic.shared.basic.dto.DataType;
...@@ -49,7 +52,7 @@ import ch.systemsx.cisd.openbis.plugin.screening.shared.basic.dto.ScreeningConst ...@@ -49,7 +52,7 @@ import ch.systemsx.cisd.openbis.plugin.screening.shared.basic.dto.ScreeningConst
/** /**
* Data set info extractor dealing with BZ data. Creates experiments and plates if needed. * Data set info extractor dealing with BZ data. Creates experiments and plates if needed.
* *
* @author Izabela Adamczyk * @author Izabela Adamczyk
*/ */
public class BZDataSetInfoExtractor implements IDataSetInfoExtractor public class BZDataSetInfoExtractor implements IDataSetInfoExtractor
...@@ -59,8 +62,6 @@ public class BZDataSetInfoExtractor implements IDataSetInfoExtractor ...@@ -59,8 +62,6 @@ public class BZDataSetInfoExtractor implements IDataSetInfoExtractor
static final String PROJECT_CODE = "project-code"; static final String PROJECT_CODE = "project-code";
static final String PLATE_GEOMETRY = "plate-geometry";
private final Properties properties; private final Properties properties;
public BZDataSetInfoExtractor(final Properties properties) public BZDataSetInfoExtractor(final Properties properties)
...@@ -76,7 +77,6 @@ public class BZDataSetInfoExtractor implements IDataSetInfoExtractor ...@@ -76,7 +77,6 @@ public class BZDataSetInfoExtractor implements IDataSetInfoExtractor
DirectoryDatasetInfoExtractor tokens = DirectoryDatasetInfoExtractor tokens =
new DirectoryDatasetInfoExtractor(FilenameUtils.getBaseName(incomingDataSetPath new DirectoryDatasetInfoExtractor(FilenameUtils.getBaseName(incomingDataSetPath
.getPath())); .getPath()));
String plateGeometry = PropertyUtils.getMandatoryProperty(properties, PLATE_GEOMETRY);
String spaceCode = PropertyUtils.getMandatoryProperty(properties, SPACE_CODE); String spaceCode = PropertyUtils.getMandatoryProperty(properties, SPACE_CODE);
String projectCode = PropertyUtils.getMandatoryProperty(properties, PROJECT_CODE); String projectCode = PropertyUtils.getMandatoryProperty(properties, PROJECT_CODE);
String sampleCode = getSampleCode(tokens); String sampleCode = getSampleCode(tokens);
...@@ -89,6 +89,25 @@ public class BZDataSetInfoExtractor implements IDataSetInfoExtractor ...@@ -89,6 +89,25 @@ public class BZDataSetInfoExtractor implements IDataSetInfoExtractor
Sample sampleOrNull = openbisService.tryGetSampleWithExperiment(sampleIdentifier); Sample sampleOrNull = openbisService.tryGetSampleWithExperiment(sampleIdentifier);
if (sampleOrNull == null) if (sampleOrNull == null)
{ {
Collection<VocabularyTerm> terms =
openbisService.listVocabularyTerms(ScreeningConstants.PLATE_GEOMETRY);
List<String> plateGeometries = new ArrayList<String>();
for (VocabularyTerm v : terms)
{
plateGeometries.add(v.getCode());
}
List<File> imageFiles = ImageFileExtractorUtils.listImageFiles(incomingDataSetPath);
List<Location> plateLocations = new ArrayList<Location>();
for (File imageFile : imageFiles)
{
String baseName = FilenameUtils.getBaseName(imageFile.getPath());
String plateLocationToken =
HCSImageFileExtractor.extractFileInfo(baseName).getPlateLocationToken();
plateLocations.add(Location
.tryCreateLocationFromTransposedMatrixCoordinate(plateLocationToken));
}
String plateGeometry =
PlateGeometryOracle.figureGeometry(plateLocations, plateGeometries);
registerSampleWithExperiment(openbisService, sampleIdentifier, experimentIdentifier, registerSampleWithExperiment(openbisService, sampleIdentifier, experimentIdentifier,
plateGeometry); plateGeometry);
sampleOrNull = openbisService.tryGetSampleWithExperiment(sampleIdentifier); sampleOrNull = openbisService.tryGetSampleWithExperiment(sampleIdentifier);
......
...@@ -22,7 +22,6 @@ import java.util.Properties; ...@@ -22,7 +22,6 @@ import java.util.Properties;
import org.apache.commons.io.FilenameUtils; import org.apache.commons.io.FilenameUtils;
import org.apache.commons.lang.StringUtils; import org.apache.commons.lang.StringUtils;
import ch.rinn.restrictions.Private;
import ch.systemsx.cisd.openbis.generic.shared.dto.identifier.SampleIdentifier; import ch.systemsx.cisd.openbis.generic.shared.dto.identifier.SampleIdentifier;
/** /**
...@@ -44,7 +43,6 @@ public class HCSImageFileExtractor extends ch.systemsx.cisd.openbis.dss.etl.HCSI ...@@ -44,7 +43,6 @@ public class HCSImageFileExtractor extends ch.systemsx.cisd.openbis.dss.etl.HCSI
return extractFileInfo(FilenameUtils.getBaseName(imageFile.getPath())); return extractFileInfo(FilenameUtils.getBaseName(imageFile.getPath()));
} }
@Private
static ImageFileInfo extractFileInfo(String text) static ImageFileInfo extractFileInfo(String text)
{ {
String[] namedParts = StringUtils.split(text, "_"); String[] namedParts = StringUtils.split(text, "_");
......
/*
* Copyright 2010 ETH Zuerich, CISD
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package ch.systemsx.cisd.openbis.dss.etl.biozentrum;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import ch.systemsx.cisd.bds.hcs.Location;
import ch.systemsx.cisd.common.exceptions.UserFailureException;
import ch.systemsx.cisd.common.shared.basic.utils.StringUtils;
import ch.systemsx.cisd.openbis.plugin.screening.shared.api.v1.dto.Geometry;
/**
* Based on the list of available plate locations and geometries tries to figure the correct plate
* geometry.
*
* @author Izabela Adamczyk
*/
public class PlateGeometryOracle
{
public static String figureGeometry(List<Location> plateLocations, List<String> plateGeometries)
{
return getMatchingGeometry(getMaxLocation(plateLocations), plateGeometries);
}
private static Location getMaxLocation(List<Location> locations)
{
int maxX = -1;
int maxY = -1;
for (Location l : locations)
{
if (maxX < l.getX())
{
maxX = l.getX();
}
if (maxY < l.getY())
{
maxY = l.getY();
}
}
return new Location(maxX, maxY);
}
private static String getMatchingGeometry(Location location, List<String> plateGeometries)
{
Map<Geometry, String> map = new HashMap<Geometry, String>();
List<Geometry> geometries = new ArrayList<Geometry>();
for (String geometryString : plateGeometries)
{
Geometry geometry = Geometry.createFromPlateGeometryString(geometryString);
geometries.add(geometry);
map.put(geometry, geometryString);
}
Collections.sort(geometries, new Comparator<Geometry>()
{
public int compare(Geometry a, Geometry b)
{
return a.getHeight() * a.getWidth() - b.getHeight() * b.getWidth();
}
});
for (Geometry g : geometries)
{
if (isEnough(g, location))
{
return map.get(g);
}
}
throw new UserFailureException(String.format(
"Matching geometry not found (max location: %s, geometries: %s)", location,
StringUtils.joinList(plateGeometries)));
}
static private boolean isEnough(Geometry geometry, Location location)
{
return geometry.getDimX() >= location.getX() && geometry.getDimY() >= location.getY();
}
}
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment