// Generated by CoffeeScript 1.4.0 (function() { var __hasProp = {}.hasOwnProperty, __extends = function(child, parent) { for (var key in parent) { if (__hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; }; window.LongitudinalModel = (function(_super) { var defaults; __extends(LongitudinalModel, _super); function LongitudinalModel() { return LongitudinalModel.__super__.constructor.apply(this, arguments); } defaults = { currentRowId: null, clickedRowId: null, currentCluster: null, currentTag: null }; LongitudinalModel.prototype.initialize = function(parsedData, userOptions) { var id; if (userOptions == null) { userOptions = {}; } this.options = { rowNameColumn: userOptions.rowNameColumn || "id", yAxisName: userOptions.yAxisName || "log-ratio", specialColumnNames: userOptions.specialColumnNames || ["cluster"], rowType: userOptions.rowType, tagFile: userOptions.urlVars["tags"], showGroups: userOptions.urlVars["groups"], hideHeatmap: userOptions.urlVars["no_heatmap"], hidePCP: userOptions.urlVars["no_pcp"], hideRowNames: userOptions.urlVars["no_row_names"] }; this.options.specialColumnNames = _.union(this.options.specialColumnNames, this.options.rowNameColumn); this.parsedData = parsedData; this.rowNames = _.pluck(this.parsedData, this.options.rowNameColumn); this.rowIds = (function() { var _i, _ref, _results; _results = []; for (id = _i = 1, _ref = this.parsedData.length; 1 <= _ref ? _i <= _ref : _i >= _ref; id = 1 <= _ref ? ++_i : --_i) { _results.push("_row_" + id); } return _results; }).call(this); this.columnNames = this.getColumnNames(); this.columnGroups = this.getColumnGroups(); this.longitudinalData = this.getLongitudinalData(); this.groupedLongitudinalData = this.getGroupedLongitudinalData(); this.clusters = _.pluck(this.parsedData, "cluster"); this.options.showClusters = _.uniq(this.clusters).length > 1; return this.clusterNames = this.getClusterNames(); }; LongitudinalModel.prototype.getRowName = function(rowName) { return this.rowNames[this.rowIds.indexOf(rowName)]; }; LongitudinalModel.prototype.getColumnGroups = function() { return _.chain(this.columnNames).map(function(columnName) { return columnName.split("_")[0]; }).uniq().value(); }; LongitudinalModel.prototype.getLongitudinalValueExtent = function() { var longitudinalValues; longitudinalValues = _.flatten(this.longitudinalData.map(function(longitudinalDataRow) { return longitudinalDataRow.map(function(item) { return item.value; }); })); return d3.extent(longitudinalValues); }; LongitudinalModel.prototype.getColumnNames = function() { var _this = this; return _.keys(this.parsedData[0]).filter(function(columnName) { return !_.include(_this.options.specialColumnNames, columnName); }); }; LongitudinalModel.prototype.getLongitudinalData = function() { var _this = this; return this.parsedData.map(function(row) { return _this.columnNames.map(function(columnName) { return { condition: columnName, value: +row[columnName] }; }); }); }; LongitudinalModel.prototype.getGroupedLongitudinalData = function() { var _this = this; return this.parsedData.map(function(row) { var columnGroups, currentGroup, longitudinalValues; columnGroups = _this.columnGroups.slice(0); currentGroup = columnGroups.shift(); longitudinalValues = []; _this.columnNames.map(function(columnName) { if (!columnName.match(RegExp("^" + currentGroup + "_"))) { longitudinalValues.push({ condition: "", value: null }); currentGroup = columnGroups.shift(); } return longitudinalValues.push({ condition: columnName, value: +row[columnName] }); }); return longitudinalValues; }); }; LongitudinalModel.prototype.getClusterNames = function() { var clusterFrequencies; clusterFrequencies = window.getFrequencies(this.clusters); return _.chain(clusterFrequencies).keys().sortBy(function(x) { return clusterFrequencies[x]; }).value().reverse(); }; return LongitudinalModel; })(Backbone.Model); }).call(this);