1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
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();
}
}
|