From ae51cebc2856829c349cda88e3a3b1f77a375da1 Mon Sep 17 00:00:00 2001 From: jakubs <jakubs> Date: Tue, 29 Mar 2016 12:47:45 +0000 Subject: [PATCH] SSDM-3410 add feature vectors vocabulary terms to api SVN: 36028 --- .../server/DssServiceRpcScreening.java | 22 ++++++++++++------- .../v1/dto/FeatureVectorWithDescription.java | 8 +++++++ 2 files changed, 22 insertions(+), 8 deletions(-) diff --git a/screening/source/java/ch/systemsx/cisd/openbis/dss/screening/server/DssServiceRpcScreening.java b/screening/source/java/ch/systemsx/cisd/openbis/dss/screening/server/DssServiceRpcScreening.java index 5ad527f2ec7..64a1538ef27 100644 --- a/screening/source/java/ch/systemsx/cisd/openbis/dss/screening/server/DssServiceRpcScreening.java +++ b/screening/source/java/ch/systemsx/cisd/openbis/dss/screening/server/DssServiceRpcScreening.java @@ -622,31 +622,36 @@ public class DssServiceRpcScreening extends AbstractDssServiceRpc<IDssServiceRpc for (FeatureTableRow featureTableRow : datasetFeatures.getFeatures()) { WellLocation wellPosition = featureTableRow.getWellLocation(); - double[] values = getFloatFeaturesAsDouble(featureTableRow); - featureVectors.add(new FeatureVector(convert(wellPosition), values)); + featureVectors.add(getFeatureVector(convert(wellPosition), featureTableRow)); } return new FeatureVectorDataset(dataset, datasetFeatures.getFeatureCodes(), datasetFeatures.getFeatureLabels(), featureVectors); } - // TODO 2010-11-29, Tomasz Pylak: allow to access Vocabulary Features in the API - private static double[] getFloatFeaturesAsDouble(FeatureTableRow featureTableRow) + private static FeatureVector getFeatureVector(WellPosition position, FeatureTableRow featureTableRow) { FeatureValue[] featureValues = featureTableRow.getFeatureValues(); double[] doubleValues = new double[featureValues.length]; + String[] vocabularyTerms = new String[featureValues.length]; + boolean[] vocabularyFeatureFlags = new boolean[featureValues.length]; + for (int i = 0; i < featureValues.length; ++i) { FeatureValue featureValue = featureValues[i]; if (featureValue.isFloat()) { doubleValues[i] = featureValue.asFloat(); - } else + } else if (featureValue.isVocabularyTerm()) { - // convert a vocabulary term to NaN + vocabularyFeatureFlags[i] = true; + vocabularyTerms[i] = featureValue.tryAsVocabularyTerm(); doubleValues[i] = Double.NaN; + } else + { + throw new IllegalStateException("Feature can be only either a float or a vocabulary term"); } } - return doubleValues; + return new FeatureVector(position, doubleValues, vocabularyFeatureFlags, vocabularyTerms); } private static WellPosition convert(WellLocation wellPosition) @@ -694,8 +699,9 @@ public class DssServiceRpcScreening extends AbstractDssServiceRpc<IDssServiceRpc private FeatureVectorWithDescription createFeatureVector(FeatureTableRow featureTableRow, final List<String> featureCodes) { + FeatureVector feature = getFeatureVector(featureTableRow.getReference().getWellPosition(), featureTableRow); return new FeatureVectorWithDescription(featureTableRow.getReference(), featureCodes, - getFloatFeaturesAsDouble(featureTableRow)); + feature.getValues()); } @Override diff --git a/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/shared/api/v1/dto/FeatureVectorWithDescription.java b/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/shared/api/v1/dto/FeatureVectorWithDescription.java index 37db156288b..49f4e7eca02 100644 --- a/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/shared/api/v1/dto/FeatureVectorWithDescription.java +++ b/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/shared/api/v1/dto/FeatureVectorWithDescription.java @@ -32,6 +32,14 @@ public class FeatureVectorWithDescription extends FeatureVector implements IFeat this.featureNames = featureNames; } + public FeatureVectorWithDescription(FeatureVectorDatasetWellReference dataset, + List<String> featureNames, double[] values, boolean[] vocabularyFeatureFlags, String[] vocabularyTerms) + { + super(dataset.getWellPosition(), values, vocabularyFeatureFlags, vocabularyTerms); + this.datasetWellReference = dataset; + this.featureNames = featureNames; + } + /** * Identifier of the dataset and well of this feature vector. */ -- GitLab