diff --git a/src/io/gct_reader.js b/src/io/gct_reader.js index dbc969f93c54700787ffd40435a0dfedcbd643f0..fc9702f17255435bd28d64368afb86f54853e4e7 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 a522dacf2478ba1ab1c702c57aac9cc67e80cbf7..be75aba6cfd6866b065a1f1a0ac37565bba0de39 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 53c3871b5bd9920e2bc6ebd72f5230da0d83e7e4..7355ff2fe2d6c999bd177ed1e72abe6e5bf32602 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) {