diff --git a/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/client/web/server/resultset/MaterialReplicaFeatureSummaryProvider.java b/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/client/web/server/resultset/MaterialReplicaFeatureSummaryProvider.java index 34acec4d6126fbf3313b3b39753cff742b049eab..74fb91659654409fb72a8a3475f81656175a13e7 100644 --- a/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/client/web/server/resultset/MaterialReplicaFeatureSummaryProvider.java +++ b/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/client/web/server/resultset/MaterialReplicaFeatureSummaryProvider.java @@ -30,9 +30,9 @@ import ch.systemsx.cisd.openbis.generic.shared.basic.dto.TypedTableModel; import ch.systemsx.cisd.openbis.generic.shared.util.IColumnGroup; import ch.systemsx.cisd.openbis.generic.shared.util.TypedTableModelBuilder; import ch.systemsx.cisd.openbis.plugin.screening.shared.IScreeningServer; +import ch.systemsx.cisd.openbis.plugin.screening.shared.basic.dto.MaterialBiologicalReplicateFeatureSummary; import ch.systemsx.cisd.openbis.plugin.screening.shared.basic.dto.MaterialReplicaFeatureSummary; import ch.systemsx.cisd.openbis.plugin.screening.shared.basic.dto.MaterialReplicaFeatureSummaryResult; -import ch.systemsx.cisd.openbis.plugin.screening.shared.basic.dto.MaterialBiologicalReplicateFeatureSummary; import ch.systemsx.cisd.openbis.plugin.screening.shared.basic.dto.MaterialReplicaSummaryAggregationType; /** @@ -70,15 +70,20 @@ public class MaterialReplicaFeatureSummaryProvider extends MaterialReplicaFeatureSummaryResult replicaResult = server.getMaterialFeatureVectorSummary(sessionToken, experimentId, materialId); + List<MaterialReplicaFeatureSummary> rows = replicaResult.getFeatureSummaries(); + boolean displayMedianAndDeviation = shouldDisplayMedianAndDeviationColumns(rows); + builder.addColumn(FEATURE); - builder.addColumn(MEDIAN).withDataType(DataTypeCode.REAL); - builder.addColumn(DEVIATION).withDataType(DataTypeCode.REAL); + if (displayMedianAndDeviation) + { + builder.addColumn(MEDIAN).withDataType(DataTypeCode.REAL); + builder.addColumn(DEVIATION).withDataType(DataTypeCode.REAL); + } String rankTitle = ScreeningProviderMessages.getRankColumnHeader(replicaResult .getNumberOfMaterialsInExperiment()); builder.addColumn(RANK).withDataType(DataTypeCode.INTEGER).withTitle(rankTitle); - List<MaterialReplicaFeatureSummary> rows = replicaResult.getFeatureSummaries(); List<String> subgroupLabels = replicaResult.getSubgroupLabels(); if (rows.isEmpty()) { @@ -98,21 +103,54 @@ public class MaterialReplicaFeatureSummaryProvider extends for (MaterialReplicaFeatureSummary row : rows) { - addRow(builder, row, subgroupLabels); + addRow(builder, row, subgroupLabels, displayMedianAndDeviation); } return builder.getModel(); } + private boolean shouldDisplayMedianAndDeviationColumns(List<MaterialReplicaFeatureSummary> rows) + { + return false == hasOnlyOneReplica(rows); + } + + private boolean hasOnlyOneReplica(List<MaterialReplicaFeatureSummary> rows) + { + for (MaterialReplicaFeatureSummary row : rows) + { + List<MaterialBiologicalReplicateFeatureSummary> allSubgroups = + row.getBiologicalRelicates(); + MaterialBiologicalReplicateFeatureSummary defaultSubGroup = + row.getDirectTechnicalReplicates(); + allSubgroups.add(defaultSubGroup); + + if (allSubgroups.size() > 1) + { + return false; + } else if (allSubgroups.size() == 1) + { + if (allSubgroups.get(0).getFeatureValues().length > 1) + { + return false; + } + } + } + return true; + } + private void addRow(TypedTableModelBuilder<MaterialReplicaFeatureSummary> builder, - MaterialReplicaFeatureSummary row, List<String> subgroupLabels) + MaterialReplicaFeatureSummary row, List<String> subgroupLabels, + boolean displayMedianAndDeviation) { builder.addRow(row); builder.column(FEATURE).addString(row.getFeatureDescription().getLabel()); - builder.column(MEDIAN).addDouble(row.getFeatureVectorSummary()); - builder.column(DEVIATION).addDouble(row.getFeatureVectorDeviation()); builder.column(RANK).addInteger((long) row.getFeatureVectorRank()); + if (displayMedianAndDeviation) + { + builder.column(MEDIAN).addDouble(row.getFeatureVectorSummary()); + builder.column(DEVIATION).addDouble(row.getFeatureVectorDeviation()); + } MaterialBiologicalReplicateFeatureSummary defaultSubgroup = row.getDirectTechnicalReplicates(); @@ -137,18 +175,20 @@ public class MaterialReplicaFeatureSummaryProvider extends IColumnGroup columnGroup = builder.columnGroup(groupId); float[] featureValues = subgroup.getFeatureValues(); - for (int i = 0; i < featureValues.length; i++) + final int numberFeatures = featureValues.length; + for (int i = 0; i < numberFeatures; i++) { String replicaColumnId = getReplicaColumnId(groupLabel, i); String replicaColumnTitle = - ScreeningProviderMessages.getReplicaColumnTitle(groupLabel, i + 1); + ScreeningProviderMessages.getReplicaColumnTitle(groupLabel, i + 1, + numberFeatures); columnGroup.column(replicaColumnId).withDataType(DataTypeCode.REAL) .withTitle(replicaColumnTitle).addDouble((double) featureValues[i]); } // aggregates should be shown only for biological replicates which have more than one // technical replicate - if (false == DEFAULT_SUBGROUP.equals(groupId) && featureValues.length > 1) + if (false == DEFAULT_SUBGROUP.equals(groupId) && numberFeatures > 1) { MaterialReplicaSummaryAggregationType aggregationType = subgroup.getSummaryAggregationType(); diff --git a/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/client/web/server/resultset/ScreeningProviderMessages.java b/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/client/web/server/resultset/ScreeningProviderMessages.java index 5d3f9e17d99421cdaa27d0bb5426860fbcb2d048..4caffa06833bb0c195c70a86675f751fab7aedb2 100644 --- a/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/client/web/server/resultset/ScreeningProviderMessages.java +++ b/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/client/web/server/resultset/ScreeningProviderMessages.java @@ -32,10 +32,17 @@ class ScreeningProviderMessages return "Rank (" + numberOfMaterialsInExperiment + ")"; } - public static String getReplicaColumnTitle(String group, int replicaNumber) + public static String getReplicaColumnTitle(String group, int replicaNumber, int totalReplicas) { + if (totalReplicas > 1) + { + return group + " repl. " + replicaNumber; + } else + { + return group + " Value"; + + } - return group + " repl. " + replicaNumber; } }