Skip to content
Snippets Groups Projects
Commit b4257de5 authored by kaloyane's avatar kaloyane
Browse files

[LMS-2166] HCSPubPortal : added new feature vectory summary grid. Backend...

[LMS-2166] HCSPubPortal : added new feature vectory summary grid. Backend implementation functionality still to come. Mocks used to verify the UI is working.

SVN: 20732
parent 0d59c75f
No related branches found
No related tags found
No related merge requests found
Showing
with 579 additions and 5 deletions
......@@ -44,6 +44,7 @@ data-set-types-with-image-overview = MICROSCOPY_IMAGE, .*IMG.*
# experiment-sample-section
# plate-locations-experiment-section
# experiment-well-materials-section
# experiment-feature-vector-summary-section
# query-section
# generic_sample_viewer
# plate-layout-sample-section
......
......@@ -36,6 +36,7 @@ data-set-types-with-image-overview = MICROSCOPY_IMAGE, .*IMG.*
# experiment-sample-section
# plate-locations-experiment-section
# experiment-well-materials-section
# experiment-feature-vector-summary-section
# query-section
# generic_sample_viewer
# plate-layout-sample-section
......
......@@ -38,6 +38,7 @@ import ch.systemsx.cisd.openbis.plugin.screening.shared.basic.dto.ImageDatasetEn
import ch.systemsx.cisd.openbis.plugin.screening.shared.basic.dto.ImageSampleContent;
import ch.systemsx.cisd.openbis.plugin.screening.shared.basic.dto.LibraryRegistrationInfo;
import ch.systemsx.cisd.openbis.plugin.screening.shared.basic.dto.LogicalImageInfo;
import ch.systemsx.cisd.openbis.plugin.screening.shared.basic.dto.MaterialFeatureVectorSummary;
import ch.systemsx.cisd.openbis.plugin.screening.shared.basic.dto.PlateContent;
import ch.systemsx.cisd.openbis.plugin.screening.shared.basic.dto.PlateImages;
import ch.systemsx.cisd.openbis.plugin.screening.shared.basic.dto.WellContent;
......@@ -170,4 +171,11 @@ public interface IScreeningClientService extends IClientService
*/
public Vocabulary getPlateGeometryVocabulary() throws UserFailureException;
/**
* Lists {@link MaterialFeatureVectorSummary} for a given experiment.
*/
public TypedTableResultSet<MaterialFeatureVectorSummary> listExperimentFeatureVectorSummary(
IResultSetConfig<String, TableModelRowWithObject<MaterialFeatureVectorSummary>> resultSetConfig,
TechId experimentId);
}
......@@ -38,6 +38,7 @@ import ch.systemsx.cisd.openbis.plugin.screening.shared.basic.dto.ImageDatasetEn
import ch.systemsx.cisd.openbis.plugin.screening.shared.basic.dto.ImageSampleContent;
import ch.systemsx.cisd.openbis.plugin.screening.shared.basic.dto.LibraryRegistrationInfo;
import ch.systemsx.cisd.openbis.plugin.screening.shared.basic.dto.LogicalImageInfo;
import ch.systemsx.cisd.openbis.plugin.screening.shared.basic.dto.MaterialFeatureVectorSummary;
import ch.systemsx.cisd.openbis.plugin.screening.shared.basic.dto.PlateContent;
import ch.systemsx.cisd.openbis.plugin.screening.shared.basic.dto.PlateImages;
import ch.systemsx.cisd.openbis.plugin.screening.shared.basic.dto.WellContent;
......@@ -153,4 +154,13 @@ public interface IScreeningClientServiceAsync extends IClientServiceAsync
*/
public void listExperimentMaterials(TechId experimentId, ListMaterialDisplayCriteria criteria,
AsyncCallback<ResultSet<Material>> callback);
/**
* @see IScreeningClientService#listExperimentFeatureVectorSummary(IResultSetConfig, TechId)
*/
public void listExperimentFeatureVectorSummary(
IResultSetConfig<String, TableModelRowWithObject<MaterialFeatureVectorSummary>> resultSetConfig,
TechId experimentId,
AsyncCallback<TypedTableResultSet<MaterialFeatureVectorSummary>> callback);
}
......@@ -70,6 +70,9 @@ public final class Dict extends ch.systemsx.cisd.openbis.generic.client.web.clie
public static final String EXPERIMENT_PLATE_MATERIAL_BROWSER_SECTION =
"EXPERIMENT_PLATE_MATERIAL_BROWSER_SECTION";
public static final String EXPERIMENT_FEATURE_VECTOR_SUMMARY_SECTION =
"EXPERIMENT_FEATURE_VECTOR_SUMMARY_SECTION";
public static final String SCREENING_MODULE_TITLE = "SCREENING_MODULE_TITLE";
public static final String PLATE_MATERIAL_REVIEWER_TITLE = "PLATE_MATERIAL_REVIEWER_TITLE";
......
......@@ -39,7 +39,7 @@ public enum DisplayTypeIDGenerator implements IDisplayTypeIDGenerator
EXPERIMENT_WELL_MATERIALS_SECTION("experiment-well-materials-section"),
;
EXPERIMENT_FEATURE_VECTOR_SUMMARY_SECTION("experiment-feature-vector-summary-section");
private final String genericNameOrPrefix;
......
......@@ -35,6 +35,7 @@ import ch.systemsx.cisd.openbis.generic.client.web.client.application.plugin.IMo
import ch.systemsx.cisd.openbis.generic.shared.basic.IEntityInformationHolderWithIdentifier;
import ch.systemsx.cisd.openbis.generic.shared.basic.dto.EntityKind;
import ch.systemsx.cisd.openbis.plugin.screening.client.web.client.IScreeningClientServiceAsync;
import ch.systemsx.cisd.openbis.plugin.screening.client.web.client.application.detailviewers.ExperimentFeatureVectorSummarySection;
import ch.systemsx.cisd.openbis.plugin.screening.client.web.client.application.detailviewers.ExperimentWellMaterialsSection;
import ch.systemsx.cisd.openbis.plugin.screening.client.web.client.application.detailviewers.WellSearchComponent;
import ch.systemsx.cisd.openbis.plugin.screening.client.web.client.application.locator.GlobalWellSearchLocatorResolver;
......@@ -112,6 +113,7 @@ public class ScreeningModule implements IModule
{
sections.add(WellSearchComponent.create(viewContext, entity));
sections.add(new ExperimentWellMaterialsSection(viewContext, entity));
sections.add(new ExperimentFeatureVectorSummarySection(viewContext, entity));
}
return sections;
}
......
......@@ -8,10 +8,11 @@ import ch.systemsx.cisd.openbis.generic.client.web.client.application.IViewConte
import ch.systemsx.cisd.openbis.generic.client.web.client.application.locator.ViewLocatorResolverRegistry;
import ch.systemsx.cisd.openbis.plugin.screening.client.web.client.IScreeningClientService;
import ch.systemsx.cisd.openbis.plugin.screening.client.web.client.IScreeningClientServiceAsync;
import ch.systemsx.cisd.openbis.plugin.screening.client.web.client.application.locator.FeatureVectorSummaryResolver;
import ch.systemsx.cisd.openbis.plugin.screening.client.web.client.application.locator.GlobalWellSearchLocatorResolver;
import ch.systemsx.cisd.openbis.plugin.screening.client.web.client.application.locator.ImagingMaterialLocatorResolver;
import ch.systemsx.cisd.openbis.plugin.screening.client.web.client.application.locator.WellSearchLocatorResolver;
import ch.systemsx.cisd.openbis.plugin.screening.client.web.client.application.locator.PlateMetadataBrowserLocatorResolver;
import ch.systemsx.cisd.openbis.plugin.screening.client.web.client.application.locator.GlobalWellSearchLocatorResolver;
import ch.systemsx.cisd.openbis.plugin.screening.client.web.client.application.locator.WellSearchLocatorResolver;
/**
* The <i>screening</i> plugin specific {@link IViewContext} implementation.
......@@ -48,6 +49,7 @@ public final class ScreeningViewContext extends
handlerRegistry.registerHandler(new PlateMetadataBrowserLocatorResolver(this));
handlerRegistry.registerHandler(new WellSearchLocatorResolver(this));
handlerRegistry.registerHandler(new GlobalWellSearchLocatorResolver(this));
handlerRegistry.registerHandler(new FeatureVectorSummaryResolver(this));
}
public static ScreeningDisplaySettingsManager getTechnologySpecificDisplaySettingsManager(
......
package ch.systemsx.cisd.openbis.plugin.screening.client.web.client.application.detailviewers;
import ch.systemsx.cisd.openbis.generic.client.web.client.application.DisposableTabContent;
import ch.systemsx.cisd.openbis.generic.client.web.client.application.IViewContext;
import ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.grid.IDisposableComponent;
import ch.systemsx.cisd.openbis.generic.shared.basic.IEntityInformationHolderWithIdentifier;
import ch.systemsx.cisd.openbis.generic.shared.basic.TechId;
import ch.systemsx.cisd.openbis.plugin.screening.client.web.client.IScreeningClientServiceAsync;
import ch.systemsx.cisd.openbis.plugin.screening.client.web.client.application.Dict;
import ch.systemsx.cisd.openbis.plugin.screening.client.web.client.application.DisplayTypeIDGenerator;
/**
* Experiment section panel which shows all feature vector summary for a given experiment.
*
* @author Kaloyan Enimanev
*/
public class ExperimentFeatureVectorSummarySection extends DisposableTabContent
{
private final IViewContext<IScreeningClientServiceAsync> screeningViewContext;
private final TechId experimentTechId;
public ExperimentFeatureVectorSummarySection(
IViewContext<IScreeningClientServiceAsync> screeningViewContext,
IEntityInformationHolderWithIdentifier experiment)
{
super(screeningViewContext.getMessage(Dict.EXPERIMENT_FEATURE_VECTOR_SUMMARY_SECTION),
screeningViewContext, experiment);
this.screeningViewContext = screeningViewContext;
this.experimentTechId = new TechId(experiment);
setIds(DisplayTypeIDGenerator.EXPERIMENT_FEATURE_VECTOR_SUMMARY_SECTION);
}
@Override
protected IDisposableComponent createDisposableContent()
{
return FeatureVectorSummaryGrid.create(screeningViewContext, experimentTechId);
}
}
\ No newline at end of file
/*
* Copyright 2011 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.plugin.screening.client.web.client.application.detailviewers;
import static ch.systemsx.cisd.openbis.plugin.screening.shared.basic.dto.grids.FeatureVectorSummaryGridColumnIDs.RANK_PREFIX;
import com.google.gwt.user.client.rpc.AsyncCallback;
import ch.systemsx.cisd.openbis.generic.client.web.client.application.AbstractAsyncCallback;
import ch.systemsx.cisd.openbis.generic.client.web.client.application.GenericConstants;
import ch.systemsx.cisd.openbis.generic.client.web.client.application.IViewContext;
import ch.systemsx.cisd.openbis.generic.client.web.client.application.framework.AbstractTabItemFactory;
import ch.systemsx.cisd.openbis.generic.client.web.client.application.framework.DefaultTabItem;
import ch.systemsx.cisd.openbis.generic.client.web.client.application.framework.DispatcherHelper;
import ch.systemsx.cisd.openbis.generic.client.web.client.application.framework.ITabItem;
import ch.systemsx.cisd.openbis.generic.client.web.client.application.help.HelpPageIdentifier;
import ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.TypedTableGrid;
import ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.grid.BrowserGridPagingToolBar.PagingToolBarButtonKind;
import ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.grid.IDisposableComponent;
import ch.systemsx.cisd.openbis.generic.client.web.client.dto.DefaultResultSetConfig;
import ch.systemsx.cisd.openbis.generic.client.web.client.dto.TableExportCriteria;
import ch.systemsx.cisd.openbis.generic.client.web.client.dto.TypedTableResultSet;
import ch.systemsx.cisd.openbis.generic.shared.basic.IEntityInformationHolderWithPermId;
import ch.systemsx.cisd.openbis.generic.shared.basic.TechId;
import ch.systemsx.cisd.openbis.generic.shared.basic.dto.EntityKind;
import ch.systemsx.cisd.openbis.generic.shared.basic.dto.TableModelRowWithObject;
import ch.systemsx.cisd.openbis.plugin.screening.client.web.client.IScreeningClientServiceAsync;
import ch.systemsx.cisd.openbis.plugin.screening.client.web.client.application.Dict;
import ch.systemsx.cisd.openbis.plugin.screening.client.web.client.application.DisplayTypeIDGenerator;
import ch.systemsx.cisd.openbis.plugin.screening.client.web.client.application.ScreeningModule;
import ch.systemsx.cisd.openbis.plugin.screening.client.web.client.application.ui.columns.specific.ScreeningLinkExtractor;
import ch.systemsx.cisd.openbis.plugin.screening.shared.basic.dto.MaterialFeatureVectorSummary;
/**
* A grid showing feature vector summary for an experiment.
*
* @author Kaloyan Enimanev
*/
public class FeatureVectorSummaryGrid extends TypedTableGrid<MaterialFeatureVectorSummary>
{
private static final String PREFIX = GenericConstants.ID_PREFIX
+ "experiment-feature-vector-summary";
public static final String BROWSER_ID = PREFIX + "_main";
public static final String GRID_ID = PREFIX + TypedTableGrid.GRID_POSTFIX;
private final IViewContext<IScreeningClientServiceAsync> specificViewContext;
private final TechId experimentId;
public static void openTab(final IViewContext<IScreeningClientServiceAsync> screeningViewContext,
String experimentPermId)
{
screeningViewContext.getCommonService().getEntityInformationHolder(EntityKind.EXPERIMENT,
experimentPermId,
new AbstractAsyncCallback<IEntityInformationHolderWithPermId>(screeningViewContext)
{
@Override
protected void process(IEntityInformationHolderWithPermId experiment)
{
AbstractTabItemFactory factory =
createTabFactory(screeningViewContext, experiment);
DispatcherHelper.dispatchNaviEvent(factory);
}
});
}
public static IDisposableComponent create(
IViewContext<IScreeningClientServiceAsync> viewContext, TechId experimentId)
{
return new FeatureVectorSummaryGrid(viewContext, experimentId).asDisposableWithoutToolbar();
}
private static AbstractTabItemFactory createTabFactory(final IViewContext<IScreeningClientServiceAsync> viewContext,
final IEntityInformationHolderWithPermId experiment)
{
return new AbstractTabItemFactory()
{
@Override
public String getId()
{
return ScreeningModule.ID
+ ScreeningLinkExtractor.FEATURE_VECTOR_SUMMARY_ACTION
+ experiment.getCode();
}
@Override
public ITabItem create()
{
IDisposableComponent tabComponent =
FeatureVectorSummaryGrid.create(viewContext, new TechId(experiment));
return DefaultTabItem.create(getTabTitle(), tabComponent, viewContext);
}
@Override
public String tryGetLink()
{
return ScreeningLinkExtractor.createFeatureVectorSummaryBrowserLink(experiment.getPermId());
}
@Override
public String getTabTitle()
{
return "Feature Vector Summary: " + experiment.getCode();
}
@Override
public HelpPageIdentifier getHelpPageIdentifier()
{
return null;
}
};
}
FeatureVectorSummaryGrid(IViewContext<IScreeningClientServiceAsync> viewContext,
TechId experimentId)
{
super(viewContext.getCommonViewContext(), BROWSER_ID, true,
DisplayTypeIDGenerator.EXPERIMENT_FEATURE_VECTOR_SUMMARY_SECTION);
this.specificViewContext = viewContext;
this.experimentId = experimentId;
// TODO KE: ask Franz-Josef/Tomek for a quick explanation on how export should be
// implemented
removeButtons(PagingToolBarButtonKind.EXPORT);
setBorders(true);
}
@Override
protected void listTableRows(
DefaultResultSetConfig<String, TableModelRowWithObject<MaterialFeatureVectorSummary>> resultSetConfig,
AsyncCallback<TypedTableResultSet<MaterialFeatureVectorSummary>> callback)
{
specificViewContext.getService().listExperimentFeatureVectorSummary(resultSetConfig,
experimentId, callback);
}
@Override
protected void prepareExportEntities(
TableExportCriteria<TableModelRowWithObject<MaterialFeatureVectorSummary>> exportCriteria,
AbstractAsyncCallback<String> callback)
{
// TODO KE: implement export functionality once I know how it is supposed to work
}
@Override
protected String translateColumnIdToDictionaryKey(String columnID)
{
if (columnID.startsWith(RANK_PREFIX))
{
return getRankDictionaryKey();
} else
{
return columnID.toLowerCase();
}
}
private String getRankDictionaryKey()
{
return Dict.EXPERIMENT_FEATURE_VECTOR_SUMMARY_SECTION.toLowerCase() + "_" + RANK_PREFIX;
}
public void dispose()
{
asDisposableWithoutToolbar().dispose();
}
}
package ch.systemsx.cisd.openbis.plugin.screening.client.web.client.application.locator;
import ch.systemsx.cisd.openbis.generic.client.web.client.application.IViewContext;
import ch.systemsx.cisd.openbis.generic.client.web.client.application.locator.AbstractViewLocatorResolver;
import ch.systemsx.cisd.openbis.generic.client.web.client.application.locator.ViewLocator;
import ch.systemsx.cisd.openbis.generic.client.web.client.exception.UserFailureException;
import ch.systemsx.cisd.openbis.plugin.screening.client.web.client.IScreeningClientServiceAsync;
import ch.systemsx.cisd.openbis.plugin.screening.client.web.client.application.detailviewers.FeatureVectorSummaryGrid;
import ch.systemsx.cisd.openbis.plugin.screening.client.web.client.application.ui.columns.specific.ScreeningLinkExtractor;
/**
* Locator resolver for plate metadata browser.
*
* @author Tomasz Pylak
*/
public class FeatureVectorSummaryResolver extends AbstractViewLocatorResolver
{
private final IViewContext<IScreeningClientServiceAsync> viewContext;
public FeatureVectorSummaryResolver(IViewContext<IScreeningClientServiceAsync> viewContext)
{
super(ScreeningLinkExtractor.FEATURE_VECTOR_SUMMARY_ACTION);
this.viewContext = viewContext;
}
public void resolve(final ViewLocator locator) throws UserFailureException
{
String experimentPermId =
getMandatoryParameter(
locator,
ScreeningLinkExtractor.FEATURE_VECTOR_SUMMARY_EXPERIMENT_PERMID_PARAMETER_KEY);
FeatureVectorSummaryGrid.openTab(viewContext, experimentPermId);
}
}
\ No newline at end of file
......@@ -67,6 +67,11 @@ public class ScreeningLinkExtractor extends LinkExtractor
public final static boolean WELL_SEARCH_SHOW_COMBINED_RESULTS_DEFAULT = true;
public final static String FEATURE_VECTOR_SUMMARY_ACTION = "FEATURE_VECTOR_SUMMARY";
public final static String FEATURE_VECTOR_SUMMARY_EXPERIMENT_PERMID_PARAMETER_KEY =
"experimentPermId";
public static final String createPlateMetadataBrowserLink(String platePermId)
{
URLMethodWithParameters url = new URLMethodWithParameters("");
......@@ -75,6 +80,14 @@ public class ScreeningLinkExtractor extends LinkExtractor
return tryPrint(url);
}
public static final String createFeatureVectorSummaryBrowserLink(String experimentPermId)
{
URLMethodWithParameters url = new URLMethodWithParameters("");
url.addParameter(BasicConstant.LOCATOR_ACTION_PARAMETER, FEATURE_VECTOR_SUMMARY_ACTION);
url.addParameter(FEATURE_VECTOR_SUMMARY_EXPERIMENT_PERMID_PARAMETER_KEY, experimentPermId);
return tryPrint(url);
}
// action=WELL_SEARCH&experimentPermId=8127361723172863&isExactSearch=true&types=typeCode1,typeCode2&items=code1,property2&showCombinedResults=false"
// One can change "experimentPermId=8127361723172863" to "searchAllExperiments=true".
public static String tryCreateWellsSearchLink(WellSearchCriteria searchCriteria,
......
......@@ -84,6 +84,8 @@ PLATE_MATERIAL_REVIEWER_SPECIFY_METERIAL_ITEMS: "E.g. gene symbols, gene ids, ge
EXPERIMENT_PLATE_MATERIAL_REVIEWER_SECTION: "Wells Search",
EXPERIMENT_PLATE_MATERIAL_BROWSER_SECTION: "Library Index",
EXPERIMENT_FEATURE_VECTOR_SUMMARY_SECTION: "Feature Vector Summary",
experiment_feature_vector_summary_section_RANK: "Rank",
EXACT_MATCH_ONLY: "Exact Matches Only",
WELLS_SEARCH_SHOW_COMBINED_RESULTS: "Show all matching results combined",
......
/*
* Copyright 2011 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.plugin.screening.client.web.server;
import static ch.systemsx.cisd.openbis.plugin.screening.shared.basic.dto.grids.FeatureVectorSummaryGridColumnIDs.MATERIAL;
import java.util.ArrayList;
import java.util.List;
import ch.systemsx.cisd.openbis.generic.client.web.server.resultset.AbstractTableModelProvider;
import ch.systemsx.cisd.openbis.generic.shared.basic.TechId;
import ch.systemsx.cisd.openbis.generic.shared.basic.dto.CodeAndLabel;
import ch.systemsx.cisd.openbis.generic.shared.basic.dto.DataTypeCode;
import ch.systemsx.cisd.openbis.generic.shared.basic.dto.EntityKind;
import ch.systemsx.cisd.openbis.generic.shared.basic.dto.EntityTableCell;
import ch.systemsx.cisd.openbis.generic.shared.basic.dto.Material;
import ch.systemsx.cisd.openbis.generic.shared.basic.dto.TypedTableModel;
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.ExperimentFeatureVectorSummary;
import ch.systemsx.cisd.openbis.plugin.screening.shared.basic.dto.MaterialFeatureVectorSummary;
import ch.systemsx.cisd.openbis.plugin.screening.shared.basic.dto.grids.FeatureVectorSummaryGridColumnIDs;
/**
* A provider for material feature vector summaries.
*
* @author Kaloyan Enimanev
*/
class FeatureVectorSummaryProvider extends
AbstractTableModelProvider<MaterialFeatureVectorSummary>
{
private static final String MATERIAL_PROPS_GROUP = "MATERIAL_PROP-";
private static final String FEATURE_VALUE_PREFIX = "FEATURE_VALUE-";
private final IScreeningServer server;
private final String sessionToken;
private final TechId experimentId;
public FeatureVectorSummaryProvider(IScreeningServer server, String sessionToken,
TechId experimentId)
{
this.server = server;
this.sessionToken = sessionToken;
this.experimentId = experimentId;
}
@Override
public TypedTableModel<MaterialFeatureVectorSummary> createTableModel()
{
TypedTableModelBuilder<MaterialFeatureVectorSummary> builder =
new TypedTableModelBuilder<MaterialFeatureVectorSummary>();
ExperimentFeatureVectorSummary fvSummary =
server.getExperimentFeatureVectorSummary(sessionToken, experimentId);
builder.addColumn(MATERIAL).withDataType(DataTypeCode.MATERIAL);
builder.columnGroup(MATERIAL_PROPS_GROUP);
List<CodeAndLabel> featureDescriptions = fvSummary.getFeatureDescriptions();
List<String> featureColumnIds = new ArrayList<String>();
List<String> rankColumnIds = new ArrayList<String>();
for (CodeAndLabel featureDescription : featureDescriptions)
{
String featureCode = featureDescription.getCode();
String featureColumnId = getFeatureColumnId(featureCode);
builder.addColumn(featureColumnId).withTitle(featureDescription.getLabel())
.withDataType(DataTypeCode.REAL);
featureColumnIds.add(featureColumnId);
String rankColumnId = getRankColumnId(featureCode);
builder.addColumn(rankColumnId).withDataType(DataTypeCode.INTEGER);
rankColumnIds.add(rankColumnId);
}
for (MaterialFeatureVectorSummary summary : fvSummary.getMaterialsSummary())
{
addRow(builder, summary, featureColumnIds, rankColumnIds);
}
return builder.getModel();
}
private void addRow(TypedTableModelBuilder<MaterialFeatureVectorSummary> builder,
MaterialFeatureVectorSummary summary, List<String> featureColumnIds,
List<String> rankColumnIds)
{
builder.addRow(summary);
Material material = summary.getMaterial();
builder.column(MATERIAL).addValue(
new EntityTableCell(EntityKind.MATERIAL, material.getPermId()));
if (material.getProperties() != null)
{
builder.columnGroup(MATERIAL_PROPS_GROUP).addProperties(material.getProperties());
}
float[] featureSummaries = summary.getFeatueVectorSummary();
int[] ranksValues = summary.getFeatueVectorRanks();
for (int pos = 0; pos < featureSummaries.length; pos++)
{
String featureColumnId = featureColumnIds.get(pos);
builder.column(featureColumnId).addDouble((double) featureSummaries[pos]);
String rankColumnId = rankColumnIds.get(pos);
builder.column(rankColumnId).addInteger((long) ranksValues[pos]);
}
}
private String getFeatureColumnId(String code)
{
return FEATURE_VALUE_PREFIX + code;
}
private String getRankColumnId(String code)
{
return FeatureVectorSummaryGridColumnIDs.RANK_PREFIX + code;
}
}
......@@ -59,6 +59,7 @@ import ch.systemsx.cisd.openbis.plugin.screening.shared.basic.dto.ImageDatasetEn
import ch.systemsx.cisd.openbis.plugin.screening.shared.basic.dto.ImageSampleContent;
import ch.systemsx.cisd.openbis.plugin.screening.shared.basic.dto.LibraryRegistrationInfo;
import ch.systemsx.cisd.openbis.plugin.screening.shared.basic.dto.LogicalImageInfo;
import ch.systemsx.cisd.openbis.plugin.screening.shared.basic.dto.MaterialFeatureVectorSummary;
import ch.systemsx.cisd.openbis.plugin.screening.shared.basic.dto.PlateContent;
import ch.systemsx.cisd.openbis.plugin.screening.shared.basic.dto.PlateImages;
import ch.systemsx.cisd.openbis.plugin.screening.shared.basic.dto.ScreeningConstants;
......@@ -317,4 +318,14 @@ public final class ScreeningClientService extends AbstractClientService implemen
}
}
public TypedTableResultSet<MaterialFeatureVectorSummary> listExperimentFeatureVectorSummary(
IResultSetConfig<String, TableModelRowWithObject<MaterialFeatureVectorSummary>> criteria,
TechId experimentId)
{
FeatureVectorSummaryProvider provider =
new FeatureVectorSummaryProvider(server, getSessionToken(), experimentId);
return listEntities(provider, criteria);
}
}
......@@ -20,6 +20,8 @@ import java.sql.Connection;
import java.util.ArrayList;
import java.util.Collection;
import java.util.List;
import java.util.Random;
import java.util.UUID;
import java.util.concurrent.LinkedBlockingQueue;
import java.util.concurrent.ThreadPoolExecutor;
import java.util.concurrent.TimeUnit;
......@@ -49,6 +51,7 @@ import ch.systemsx.cisd.openbis.generic.server.plugin.ISampleTypeSlaveServerPlug
import ch.systemsx.cisd.openbis.generic.shared.ICommonServer;
import ch.systemsx.cisd.openbis.generic.shared.api.v1.dto.Sample;
import ch.systemsx.cisd.openbis.generic.shared.basic.TechId;
import ch.systemsx.cisd.openbis.generic.shared.basic.dto.Code;
import ch.systemsx.cisd.openbis.generic.shared.basic.dto.CodeAndLabel;
import ch.systemsx.cisd.openbis.generic.shared.basic.dto.ExternalData;
import ch.systemsx.cisd.openbis.generic.shared.basic.dto.ListMaterialCriteria;
......@@ -85,16 +88,21 @@ import ch.systemsx.cisd.openbis.plugin.screening.shared.api.v1.dto.PlateWellMate
import ch.systemsx.cisd.openbis.plugin.screening.shared.api.v1.dto.PlateWellReferenceWithDatasets;
import ch.systemsx.cisd.openbis.plugin.screening.shared.api.v1.dto.WellIdentifier;
import ch.systemsx.cisd.openbis.plugin.screening.shared.basic.dto.DatasetReference;
import ch.systemsx.cisd.openbis.plugin.screening.shared.basic.dto.ExperimentFeatureVectorSummary;
import ch.systemsx.cisd.openbis.plugin.screening.shared.basic.dto.ExperimentReference;
import ch.systemsx.cisd.openbis.plugin.screening.shared.basic.dto.FeatureVectorDataset;
import ch.systemsx.cisd.openbis.plugin.screening.shared.basic.dto.FeatureVectorValues;
import ch.systemsx.cisd.openbis.plugin.screening.shared.basic.dto.ImageDatasetEnrichedReference;
import ch.systemsx.cisd.openbis.plugin.screening.shared.basic.dto.ImageSampleContent;
import ch.systemsx.cisd.openbis.plugin.screening.shared.basic.dto.LogicalImageInfo;
import ch.systemsx.cisd.openbis.plugin.screening.shared.basic.dto.MaterialFeatureVectorSummary;
import ch.systemsx.cisd.openbis.plugin.screening.shared.basic.dto.PlateContent;
import ch.systemsx.cisd.openbis.plugin.screening.shared.basic.dto.PlateImages;
import ch.systemsx.cisd.openbis.plugin.screening.shared.basic.dto.WellContent;
import ch.systemsx.cisd.openbis.plugin.screening.shared.basic.dto.WellLocation;
import ch.systemsx.cisd.openbis.plugin.screening.shared.basic.dto.WellSearchCriteria;
import ch.systemsx.cisd.openbis.plugin.screening.shared.basic.dto.WellSearchCriteria.ExperimentSearchCriteria;
import ch.systemsx.cisd.openbis.plugin.screening.shared.basic.dto.WellSearchCriteria.MaterialSearchCriteria;
/**
* The concrete {@link IScreeningServer} implementation.
......@@ -401,4 +409,88 @@ public final class ScreeningServer extends AbstractServer<IScreeningServer> impl
return MINOR_VERSION;
}
public ExperimentFeatureVectorSummary getExperimentFeatureVectorSummary(
String sessionToken, TechId experimentId)
{
ExperimentReference experimentReference =
new ExperimentReference(1, "", generateString(), generateString(),
generateString(), generateString());
List<MaterialFeatureVectorSummary> materials = new ArrayList<MaterialFeatureVectorSummary>();
List<CodeAndLabel> featureDescs = new ArrayList<CodeAndLabel>();
ExperimentFeatureVectorSummary result =
new ExperimentFeatureVectorSummary(experimentReference, materials, featureDescs);
String[] materialCodes = new String[]
{ "BACTERIUM-X", "BACTERIUM-Y", "747", "gfp", "scrum" };
List<MaterialType> materialTypes = commonServer.listMaterialTypes(sessionToken);
String[] materialTypeCodes = Code.extractCodesToArray(materialTypes);
WellSearchCriteria searchCriteria =
new WellSearchCriteria(ExperimentSearchCriteria.createAllExperiments(),
MaterialSearchCriteria.createCodesCriteria(materialCodes,
materialTypeCodes, false));
List<Material> existingMaterials = listMaterials(sessionToken, searchCriteria);
int rows = 10;
int numFeatureVectors = 5;
for (int i = 0; i < rows; i++)
{
MaterialFeatureVectorSummary material =
new MaterialFeatureVectorSummary(randomMaterial(existingMaterials),
generateFloats(numFeatureVectors), generateFloats(numFeatureVectors),
generateInts(numFeatureVectors));
materials.add(material);
}
for (int i = 0; i < numFeatureVectors; i++)
{
CodeAndLabel codeAndLabel = generateCodesAndLabel("Label-" + i);
featureDescs.add(codeAndLabel);
}
return result;
}
private Material randomMaterial(List<Material> existingMaterials)
{
int idx = new Random().nextInt(existingMaterials.size());
return existingMaterials.get(idx);
}
private CodeAndLabel generateCodesAndLabel(String label)
{
CodeAndLabel result = new CodeAndLabel(generateString(), label);
return result;
}
private float[] generateFloats(int len)
{
float[] result = new float[len];
for (int i = 0; i < len; i++)
{
result[i] = new Random().nextFloat() * 20;
}
return result;
}
private int[] generateInts(int len)
{
int[] result = new int[len];
for (int i = 0; i < len; i++)
{
result[i] = new Random().nextInt(100);
}
return result;
}
private String generateString()
{
int len = new Random().nextInt(8) + 5;
String str = UUID.randomUUID().toString().substring(0, len);
return str;
}
}
......@@ -51,6 +51,7 @@ import ch.systemsx.cisd.openbis.plugin.screening.shared.api.v1.dto.PlateWellMate
import ch.systemsx.cisd.openbis.plugin.screening.shared.api.v1.dto.PlateWellReferenceWithDatasets;
import ch.systemsx.cisd.openbis.plugin.screening.shared.api.v1.dto.WellIdentifier;
import ch.systemsx.cisd.openbis.plugin.screening.shared.basic.dto.DatasetReference;
import ch.systemsx.cisd.openbis.plugin.screening.shared.basic.dto.ExperimentFeatureVectorSummary;
import ch.systemsx.cisd.openbis.plugin.screening.shared.basic.dto.FeatureVectorDataset;
import ch.systemsx.cisd.openbis.plugin.screening.shared.basic.dto.FeatureVectorValues;
import ch.systemsx.cisd.openbis.plugin.screening.shared.basic.dto.ImageDatasetEnrichedReference;
......@@ -321,4 +322,12 @@ final class ScreeningServerLogger extends AbstractServerLogger implements IScree
"userEmail(%s), newGenesOrNull(%s), newOligosOrNull(%s), newSamplesWithType(%s)",
userEmail, newGenesOrNull, newOligosOrNull, newSamplesWithType);
}
public ExperimentFeatureVectorSummary getExperimentFeatureVectorSummary(String sessionToken,
TechId experimentId)
{
logAccess(sessionToken, "getExperimentFeatureVectorSummary",
"sessionToken(%s), experimentId(%s)", sessionToken, experimentId);
return null;
}
}
......@@ -44,6 +44,7 @@ import ch.systemsx.cisd.openbis.plugin.screening.shared.authorization.DatasetRef
import ch.systemsx.cisd.openbis.plugin.screening.shared.authorization.WellContentValidator;
import ch.systemsx.cisd.openbis.plugin.screening.shared.authorization.WellSearchCriteriaPredicate;
import ch.systemsx.cisd.openbis.plugin.screening.shared.basic.dto.DatasetReference;
import ch.systemsx.cisd.openbis.plugin.screening.shared.basic.dto.ExperimentFeatureVectorSummary;
import ch.systemsx.cisd.openbis.plugin.screening.shared.basic.dto.FeatureVectorDataset;
import ch.systemsx.cisd.openbis.plugin.screening.shared.basic.dto.FeatureVectorValues;
import ch.systemsx.cisd.openbis.plugin.screening.shared.basic.dto.ImageDatasetEnrichedReference;
......@@ -187,4 +188,14 @@ public interface IScreeningServer extends IServer
public void registerLibrary(String sessionToken, String userEmail,
List<NewMaterial> newGenesOrNull, List<NewMaterial> newOligosOrNull,
List<NewSamplesWithTypes> newSamplesWithType);
/**
* Returns a list of all {@link ExperimentFeatureVectorSummary} objects for a given experiment.
*/
@Transactional(readOnly = true)
@RolesAllowed(RoleWithHierarchy.SPACE_OBSERVER)
public ExperimentFeatureVectorSummary getExperimentFeatureVectorSummary(
String sessionToken,
@AuthorizationGuard(guardClass = ExperimentTechIdPredicate.class) TechId experimentId);
}
......@@ -18,15 +18,19 @@ package ch.systemsx.cisd.openbis.plugin.screening.shared.basic.dto;
import java.util.List;
import ch.systemsx.cisd.openbis.generic.shared.basic.ISerializable;
import ch.systemsx.cisd.openbis.generic.shared.basic.dto.CodeAndLabel;
import ch.systemsx.cisd.openbis.generic.shared.basic.dto.ServiceVersionHolder;
/**
* Aggregated feature vectors with its rankings in one experiment for all material.
*
* @author Tomasz Pylak
*/
public class ExperimentFeatureVectorSummary
public class ExperimentFeatureVectorSummary implements ISerializable
{
private static final long serialVersionUID = ServiceVersionHolder.VERSION;
private ExperimentReference experiment;
private List<MaterialFeatureVectorSummary> materialsSummary;
......
......@@ -16,15 +16,19 @@
package ch.systemsx.cisd.openbis.plugin.screening.shared.basic.dto;
import ch.systemsx.cisd.openbis.generic.shared.basic.ISerializable;
import ch.systemsx.cisd.openbis.generic.shared.basic.dto.Material;
import ch.systemsx.cisd.openbis.generic.shared.basic.dto.ServiceVersionHolder;
/**
* Aggregated feature vector with its ranking in one experiment for one material.
*
* @author Tomasz Pylak
*/
public class MaterialFeatureVectorSummary
public class MaterialFeatureVectorSummary implements ISerializable
{
private static final long serialVersionUID = ServiceVersionHolder.VERSION;
private Material material;
private float[] featueVectorSummary;
......
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