From 504d7d6af68173fd1591b786c804822dfae6c7ea Mon Sep 17 00:00:00 2001 From: jgould Date: Fri, 15 Apr 2016 16:24:01 -0400 Subject: [PATCH] convert to string arrays --- src/io/gct_reader.js | 11 +++-------- src/matrix/metadata_util.js | 33 +++++++++++++++------------------ src/matrix/vector_util.js | 25 +++++++++++++++++++++++++ 3 files changed, 43 insertions(+), 26 deletions(-) diff --git a/src/io/gct_reader.js b/src/io/gct_reader.js index dbc969f..fc9702f 100644 --- a/src/io/gct_reader.js +++ b/src/io/gct_reader.js @@ -183,14 +183,9 @@ morpheus.GctReader.prototype = { throw new Error('Missing data rows'); } - for (var i = 1, count = dataset.getRowMetadata().getMetadataCount(); i < count; i++) { - morpheus.VectorUtil.maybeConvertStringToNumber(dataset - .getRowMetadata().get(i)); - } - for (var i = 1, count = dataset.getColumnMetadata().getMetadataCount(); i < count; i++) { - morpheus.VectorUtil.maybeConvertStringToNumber(dataset - .getColumnMetadata().get(i)); - } + morpheus.MetadataUtil.maybeConvertStrings(dataset.getRowMetadata(), 1); + morpheus.MetadataUtil.maybeConvertStrings(dataset.getColumnMetadata(), + 1); return dataset; } }; diff --git a/src/matrix/metadata_util.js b/src/matrix/metadata_util.js index a522dac..be75aba 100644 --- a/src/matrix/metadata_util.js +++ b/src/matrix/metadata_util.js @@ -317,6 +317,8 @@ morpheus.MetadataUtil.indexOf = function(metadataModel, name) { return -1; }; +morpheus.MetadataUtil.DEFAULT_STRING_ARRAY_FIELDS = [ 'target', 'moa' ]; + morpheus.MetadataUtil.DEFAULT_HIDDEN_FIELDS = new morpheus.Set(); [ 'pr_analyte_id', 'pr_gene_title', 'pr_gene_id', 'pr_analyte_num', 'pr_bset_id', 'pr_lua_id', 'pr_pool_id', 'pr_is_bing', 'pr_is_inf', @@ -329,24 +331,19 @@ morpheus.MetadataUtil.DEFAULT_HIDDEN_FIELDS = new morpheus.Set(); 'count_cv', 'provenance_code' ].forEach(function(name) { morpheus.MetadataUtil.DEFAULT_HIDDEN_FIELDS.add(name); }); -morpheus.MetadataUtil.DEFAULT_FIELDS_TO_SHOW = { - 'cell_id' : true, - 'pert_idose' : true, - 'pert_itime' : true, - 'Id' : true, - 'Name' : true, - 'ID' : true, - 'pr_id' : true, - 'id' : true, - 'pr_gene_symbol' : true, - 'pr_is_lm' : true, - 'is_lm' : true, - 'pert_id' : true, - 'pert_iname' : true, - 'pert_desc' : true, - 'Description' : true, - 'gene_space' : true, - 'pert_type' : true + +morpheus.MetadataUtil.maybeConvertStrings = function(metadata, + metadataStartIndex) { + for (var i = metadataStartIndex, count = metadata.getMetadataCount(); i < count; i++) { + morpheus.VectorUtil.maybeConvertStringToNumber(metadata.get(i)); + } + morpheus.MetadataUtil.DEFAULT_STRING_ARRAY_FIELDS.forEach(function(field) { + if (metadata.getByName(field)) { + morpheus.VectorUtil.maybeConvertToStringArray(metadata + .getByName(field), ','); + } + }); + }; morpheus.MetadataUtil.copy = function(src, dest) { if (src.getItemCount() != dest.getItemCount()) { diff --git a/src/matrix/vector_util.js b/src/matrix/vector_util.js index 53c3871..7355ff2 100644 --- a/src/matrix/vector_util.js +++ b/src/matrix/vector_util.js @@ -39,6 +39,30 @@ morpheus.VectorUtil.createValueToCountMap = function(vector) { } return map; }; +morpheus.VectorUtil.maybeConvertToStringArray = function(vector, delim) { + var newValues = []; + var regex = new RegExp(delim); + var found = false; + for (var i = 0, nrows = vector.size(); i < nrows; i++) { + var s = vector.getValue(i); + if (s != null) { + var tokens = s.split(regex); + newValues.push(tokens); + if (!found && tokens.length > 1) { + found = true; + } + } + + } + if (found) { + for (var i = 0, nrows = newValues.length; i < nrows; i++) { + vector.setValue(i, newValues[i]); + } + } + vector.getProperties().set(morpheus.VectorKeys.DATA_TYPE, '[string]'); + return found; +}; + morpheus.VectorUtil.maybeConvertStringToNumber = function(vector) { var newValues = []; @@ -54,6 +78,7 @@ morpheus.VectorUtil.maybeConvertStringToNumber = function(vector) { for (var i = 0, nrows = newValues.length; i < nrows; i++) { vector.setValue(i, newValues[i]); } + vector.getProperties().set(morpheus.VectorKeys.DATA_TYPE, 'number'); return true; }; morpheus.VectorUtil.createValuesToIndicesMap = function(vectors) { -- GitLab