aboutsummaryrefslogtreecommitdiff
path: root/src/client/northstar/operations/HistogramOperation.ts
diff options
context:
space:
mode:
authorbob <bcz@cs.brown.edu>2019-03-20 18:00:39 -0400
committerbob <bcz@cs.brown.edu>2019-03-20 18:00:39 -0400
commita16e6592caafb601b59c3d9f7609e8c1af231eba (patch)
treee732e34c5a9fc371bf328fdd35a08ddd196bf6af /src/client/northstar/operations/HistogramOperation.ts
parent208a57b15e6b415659311873431dbe9d5b8d8021 (diff)
initial
Diffstat (limited to 'src/client/northstar/operations/HistogramOperation.ts')
-rw-r--r--src/client/northstar/operations/HistogramOperation.ts111
1 files changed, 111 insertions, 0 deletions
diff --git a/src/client/northstar/operations/HistogramOperation.ts b/src/client/northstar/operations/HistogramOperation.ts
new file mode 100644
index 000000000..a4f5cac70
--- /dev/null
+++ b/src/client/northstar/operations/HistogramOperation.ts
@@ -0,0 +1,111 @@
+import { reaction, computed, action } from "mobx";
+import { Attribute, DataType, QuantitativeBinRange, HistogramOperationParameters, AggregateParameters, AggregateFunction, AverageAggregateParameters } from "../model/idea/idea";
+import { ArrayUtil } from "../utils/ArrayUtil";
+import { CalculatedAttributeManager } from "../core/attribute/CalculatedAttributeModel";
+import { ModelHelpers } from "../model/ModelHelpers";
+import { SETTINGS_X_BINS, SETTINGS_Y_BINS, SETTINGS_SAMPLE_SIZE } from "../model/binRanges/VisualBinRangeHelper";
+import { AttributeTransformationModel } from "../core/attribute/AttributeTransformationModel";
+import { Main } from "../../views/Main";
+import { BaseOperation } from "./BaseOperation";
+
+
+export class HistogramOperation extends BaseOperation {
+ public X: AttributeTransformationModel;
+ public Y: AttributeTransformationModel;
+ public V: AttributeTransformationModel;
+ constructor(x: AttributeTransformationModel, y: AttributeTransformationModel, v: AttributeTransformationModel) {
+ super();
+ this.X = x;
+ this.Y = y;
+ this.V = v;
+ reaction(() => this.createOperationParamsCache, () => this.Update());
+ }
+
+ @computed.struct
+ public get BrushString() {
+ return [];
+ // let brushes = [];
+ // this.TypedViewModel.BrusherModels.map(brushLinkModel => {
+ // if (instanceOfIBaseFilterProvider(brushLinkModel.From) && brushLinkModel.From.FilterModels.some && brushLinkModel.From instanceof BaseOperationViewModel) {
+ // let brushFilterModels = [];
+ // let gnode = MainManager.Instance.MainViewModel.FilterDependencyGraph.has(brushLinkModel.From) ?
+ // MainManager.Instance.MainViewModel.FilterDependencyGraph.get(brushLinkModel.From) :
+ // new GraphNode<BaseOperationViewModel, FilterLinkViewModel>(brushLinkModel.From);
+ // let brush = FilterModel.GetFilterModelsRecursive(gnode, new Set<GraphNode<BaseOperationViewModel, FilterLinkViewModel>>(), brushFilterModels, false);
+ // brushes.push(brush);
+ // }
+ // });
+ // return brushes;
+ }
+
+
+ @computed.struct
+ public get SelectionString() {
+ return "";
+ // let filterModels = new Array<FilterModel>();
+ // let rdg = MainManager.Instance.MainViewModel.FilterReverseDependencyGraph;
+ // let graphNode: GraphNode<BaseOperationViewModel, FilterLinkViewModel>;
+ // if (rdg.has(this.TypedViewModel)) {
+ // graphNode = MainManager.Instance.MainViewModel.FilterReverseDependencyGraph.get(this.TypedViewModel);
+ // }
+ // else {
+ // graphNode = new GraphNode<BaseOperationViewModel, FilterLinkViewModel>(this.TypedViewModel);
+ // }
+ // return FilterModel.GetFilterModelsRecursive(graphNode, new Set<GraphNode<BaseOperationViewModel, FilterLinkViewModel>>(), filterModels, false);
+ }
+
+ GetAggregateParameters(histoX: AttributeTransformationModel, histoY: AttributeTransformationModel, histoValue: AttributeTransformationModel) {
+ let allAttributes = new Array<AttributeTransformationModel>(histoX, histoY, histoValue);
+ allAttributes = ArrayUtil.Distinct(allAttributes.filter(a => a.AggregateFunction !== AggregateFunction.None));
+
+ let numericDataTypes = [DataType.Int, DataType.Double, DataType.Float];
+ let perBinAggregateParameters: AggregateParameters[] = ModelHelpers.GetAggregateParametersWithMargins(allAttributes);
+ let globalAggregateParameters: AggregateParameters[] = [];
+ [histoX, histoY]
+ .filter(a => a.AggregateFunction === AggregateFunction.None && ArrayUtil.Contains(numericDataTypes, a.AttributeModel.DataType))
+ .forEach(a => {
+ let avg = new AverageAggregateParameters();
+ avg.attributeParameters = ModelHelpers.GetAttributeParameters(a.AttributeModel);
+ globalAggregateParameters.push(avg);
+ });
+ return [perBinAggregateParameters, globalAggregateParameters];
+ }
+
+ @computed
+ get createOperationParamsCache() {
+ return this.CreateOperationParameters();
+ }
+
+ public QRange: QuantitativeBinRange | undefined;
+
+ public CreateOperationParameters(): HistogramOperationParameters | undefined {
+ if (this.X && this.Y && this.V) {
+ let [perBinAggregateParameters, globalAggregateParameters] = this.GetAggregateParameters(this.X, this.Y, this.V);
+ return new HistogramOperationParameters({
+ enableBrushComputation: true,
+ adapterName: Main.Instance.ActiveSchema!.displayName,
+ filter: this.FilterString,
+ brushes: this.BrushString,
+ binningParameters: [ModelHelpers.GetBinningParameters(this.X, SETTINGS_X_BINS, this.QRange ? this.QRange.minValue : undefined, this.QRange ? this.QRange.maxValue : undefined),
+ ModelHelpers.GetBinningParameters(this.Y, SETTINGS_Y_BINS)],
+ sampleStreamBlockSize: SETTINGS_SAMPLE_SIZE,
+ perBinAggregateParameters: perBinAggregateParameters,
+ globalAggregateParameters: globalAggregateParameters,
+ sortPerBinAggregateParameter: undefined,
+ attributeCalculatedParameters: CalculatedAttributeManager
+ .AllCalculatedAttributes.map(a => ModelHelpers.GetAttributeParametersFromAttributeModel(a)),
+ degreeOfParallism: 1, // Settings.Instance.DegreeOfParallelism,
+ isCachable: false
+ });
+ }
+ }
+
+
+ @action
+ public async Update(): Promise<void> {
+ // this.TypedViewModel.BrushColors = this.TypedViewModel.BrusherModels.map(e => e.Color);
+ return super.Update();
+ }
+}
+
+