| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108 |
- export class Sampler {
- constructor(id, data, classes, depositRatio, maxSamples, voffsets) {
- this.data = data;
- this.samples = [];
- this.voffsets = [];
- this.classes = classes;
- this.id = id;
- this.depositRatio = depositRatio;
- this.svgclass = 'sampler-' + this.id;
- this.currentSampleId = undefined;
- this.currentYield = undefined;
- this.maxSamples = maxSamples;
- }
- // actual sampling implemented as importance sampling in app.js
- drawSample(d) {
- let y = (1 - this.depositRatio) * d.values[0] + this.depositRatio * d.values[1];
- // compare yield to thresholds defined in classes
- for (let j = 0; j < this.classes.length; ++j) {
- // if (y >= this.classes[j].min && y < this.classes[j].max) {
- if (y > this.classes[j].min && y <= this.classes[j].max) {
- this.currentSampleId = this.classes[j].id;
- this.currentYield = y;
- this.samples.push(this.currentSampleId);
- return;
- }
- }
- }
- updateOffsets(iconBlockSize) {
- for (let cidx = 0; cidx < this.classes.length; ++cidx) {
- this.voffsets[cidx] = 1; // calculate number of lines occupied by class
- }
- return this.voffsets;
- }
- get calculatedYield() {
- let factor = Math.pow(10, 0);
- let val = Math.round(this.currentYield * 100 * factor) / factor;
- let sign = '';
- if (val > 0) {
- sign = '+';
- } else if (sign < 0) {
- sign = '-';
- }
- let result = (sign + val + '%').replace('.', ',');
- return result;
- }
- getStockRatioRepr() {
- let val = Math.round((1 - this.depositRatio) * 100000) / 1000;
- return val + '%';
- }
- get stockRatioRepr() {
- let val = Math.round((1 - this.depositRatio) * 100000) / 1000;
- return val + '%';
- }
- getDepositRatioRepr() {
- let val = Math.round(this.depositRatio * 100000) / 1000;
- return val + '%';
- }
- get depositRatioRepr() {
- let val = Math.round(this.depositRatio * 100000) / 1000;
- return val + '%';
- }
- setPeriod(val) {
- this.period = val;
- }
- isSafeToSample(amount) {
- for (s in this.samplesPerClass()) {
- s.length < this;
- }
- }
- samplesPerClass() {
- let samplesIsolated = [];
- let samples = [];
- for (let s of this.samples) { // deep copy of samples
- samples.push(s);
- }
- for (let cls of this.classes) {
- let arr = samples.filter(function(c) {
- return c === cls.id;
- }, cls);
- samplesIsolated.push(arr);
- }
- // console.log('samplesIsolated', this.id, samplesIsolated);
- return samplesIsolated;
- }
- reset() {
- this.samples = [];
- this.currentSampleId = undefined;
- this.currentYield = undefined;
- }
- }
|