oncoprintjs 5.0.3 → 6.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (100) hide show
  1. package/README.md +34 -0
  2. package/dist/index.d.ts +4 -0
  3. package/dist/index.es.js +14746 -0
  4. package/dist/index.es.js.map +1 -0
  5. package/dist/index.js +14760 -0
  6. package/dist/index.js.map +1 -0
  7. package/dist/js/CachedProperty.d.ts +10 -10
  8. package/dist/js/binarysearch.d.ts +1 -1
  9. package/dist/js/bucketsort.d.ts +16 -16
  10. package/dist/js/clustering.d.ts +14 -14
  11. package/dist/js/extractrgba.d.ts +4 -4
  12. package/dist/js/haselementsininterval.d.ts +1 -1
  13. package/dist/js/heatmapcolors.d.ts +5 -4
  14. package/dist/js/makesvgelement.d.ts +1 -1
  15. package/dist/js/modelutils.d.ts +7 -7
  16. package/dist/js/oncoprint.d.ts +168 -170
  17. package/dist/js/oncoprintheaderview.d.ts +23 -22
  18. package/dist/js/oncoprintlabelview.d.ts +79 -78
  19. package/dist/js/oncoprintlegendrenderer.d.ts +32 -31
  20. package/dist/js/oncoprintminimapview.d.ts +69 -68
  21. package/dist/js/oncoprintmodel.d.ts +403 -398
  22. package/dist/js/oncoprintruleset.d.ts +176 -177
  23. package/dist/js/oncoprintshape.d.ts +67 -67
  24. package/dist/js/oncoprintshapetosvg.d.ts +2 -2
  25. package/dist/js/oncoprintshapetovertexes.d.ts +5 -5
  26. package/dist/js/oncoprinttooltip.d.ts +23 -22
  27. package/dist/js/oncoprinttrackinfoview.d.ts +40 -39
  28. package/dist/js/oncoprinttrackoptionsview.d.ts +58 -57
  29. package/dist/js/oncoprintwebglcellview.d.ts +168 -167
  30. package/dist/js/oncoprintzoomslider.d.ts +28 -27
  31. package/dist/js/polyfill.d.ts +4 -4
  32. package/dist/js/precomputedcomparator.d.ts +13 -13
  33. package/dist/js/shaders.d.ts +2 -2
  34. package/dist/js/svgfactory.d.ts +24 -23
  35. package/dist/js/utils.d.ts +16 -16
  36. package/dist/js/workers/clustering-worker.d.ts +19 -20
  37. package/dist/test/gradientCategoricalRuleset.spec.d.ts +1 -1
  38. package/dist/test/monolith.spec.d.ts +1 -1
  39. package/jest.config.ts +2 -0
  40. package/package.json +20 -26
  41. package/rollup.config.ts +14 -0
  42. package/rules/geneticrules.ts +344 -305
  43. package/server.js +11 -0
  44. package/src/img/menudots.svg +9 -9
  45. package/src/img/zoomtofit.svg +12 -12
  46. package/src/index.tsx +13 -0
  47. package/src/js/CachedProperty.ts +6 -7
  48. package/src/js/binarysearch.ts +8 -3
  49. package/src/js/bucketsort.ts +89 -47
  50. package/src/js/clustering.ts +22 -10
  51. package/src/js/extractrgba.ts +16 -12
  52. package/src/js/haselementsininterval.ts +8 -4
  53. package/src/js/heatmapcolors.ts +515 -515
  54. package/src/js/main.js +1 -1
  55. package/src/js/makesvgelement.ts +2 -2
  56. package/src/js/modelutils.ts +11 -8
  57. package/src/js/oncoprint.ts +706 -385
  58. package/src/js/oncoprintheaderview.ts +165 -125
  59. package/src/js/oncoprintlabelview.ts +388 -170
  60. package/src/js/oncoprintlegendrenderer.ts +203 -72
  61. package/src/js/oncoprintminimapview.ts +965 -423
  62. package/src/js/oncoprintmodel.ts +905 -532
  63. package/src/js/oncoprintruleset.ts +694 -379
  64. package/src/js/oncoprintshape.ts +240 -97
  65. package/src/js/oncoprintshapetosvg.ts +77 -26
  66. package/src/js/oncoprintshapetovertexes.ts +153 -48
  67. package/src/js/oncoprinttooltip.ts +58 -27
  68. package/src/js/oncoprinttrackinfoview.ts +115 -59
  69. package/src/js/oncoprinttrackoptionsview.ts +354 -187
  70. package/src/js/oncoprintwebglcellview.ts +951 -415
  71. package/src/js/oncoprintzoomslider.ts +172 -107
  72. package/src/js/polyfill.ts +7 -3
  73. package/src/js/precomputedcomparator.ts +133 -50
  74. package/src/js/shaders.ts +2 -4
  75. package/src/js/svgfactory.ts +128 -73
  76. package/src/js/utils.ts +51 -31
  77. package/src/js/workers/clustering-worker.ts +50 -42
  78. package/src/test/gradientCategoricalRuleset.spec.ts +55 -38
  79. package/src/test/monolith.spec.ts +718 -285
  80. package/test/generate_data.py +108 -0
  81. package/test/glyphmap-data.js +1041 -0
  82. package/test/heatmap-data.js +1027 -0
  83. package/test/index.html +21 -0
  84. package/test/oncoprint-glyphmap.js +79 -0
  85. package/test/oncoprint-heatmap.js +123 -0
  86. package/tsconfig.json +4 -10
  87. package/tsconfig.test.json +11 -0
  88. package/.idea/misc.xml +0 -6
  89. package/.idea/modules.xml +0 -8
  90. package/.idea/oncoprintjs.iml +0 -12
  91. package/.idea/vcs.xml +0 -6
  92. package/.idea/workspace.xml +0 -105
  93. package/dist/.gitkeep +0 -0
  94. package/dist/js/minimaputils.d.ts +0 -0
  95. package/dist/oncoprint.bundle.js +0 -44313
  96. package/jest.config.js +0 -12
  97. package/src/js/minimaputils.ts +0 -0
  98. package/typings/custom.d.ts +0 -7
  99. package/typings/missing.d.ts +0 -7
  100. package/webpack.config.js +0 -43
package/server.js ADDED
@@ -0,0 +1,11 @@
1
+ var express = require('express');
2
+
3
+ var server = express();
4
+ server.use(express.static(__dirname + '/dist'));
5
+ server.use(express.static(__dirname + '/rules'));
6
+ server.use(express.static(__dirname + '/test'));
7
+
8
+ var port = 3000;
9
+ server.listen(port, function() {
10
+ console.log('View Oncoprint at http://localhost:' + port + '/index.html');
11
+ });
@@ -1,9 +1,9 @@
1
- <?xml version="1.0" encoding="utf-8"?>
2
- <!-- Generator: Adobe Illustrator 16.0.4, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
3
- <!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
4
- <svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
5
- width="4px" height="16px" viewBox="-0.031 0 4 16" enable-background="new -0.031 0 4 16" xml:space="preserve">
6
- <circle fill="#B2B3B3" cx="1.969" cy="4" r="1.5"/>
7
- <circle fill="#B2B3B3" cx="1.969" cy="8" r="1.5"/>
8
- <circle fill="#B2B3B3" cx="1.969" cy="12" r="1.5"/>
9
- </svg>
1
+ <?xml version="1.0" encoding="utf-8"?>
2
+ <!-- Generator: Adobe Illustrator 16.0.4, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
3
+ <!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
4
+ <svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
5
+ width="4px" height="16px" viewBox="-0.031 0 4 16" enable-background="new -0.031 0 4 16" xml:space="preserve">
6
+ <circle fill="#B2B3B3" cx="1.969" cy="4" r="1.5"/>
7
+ <circle fill="#B2B3B3" cx="1.969" cy="8" r="1.5"/>
8
+ <circle fill="#B2B3B3" cx="1.969" cy="12" r="1.5"/>
9
+ </svg>
@@ -1,12 +1,12 @@
1
- <?xml version="1.0" encoding="utf-8"?>
2
- <!-- Generator: Adobe Illustrator 16.0.4, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
3
- <!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
4
- <svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
5
- width="20px" height="20px" viewBox="0 0 20 20" enable-background="new 0 0 20 20" xml:space="preserve">
6
- <line fill="none" x1="6.792" y1="5.667" x2="6.792" y2="12.125"/>
7
- <polygon fill="#000000" points="0,5 0,0 5,0 "/>
8
- <polygon fill="#000000" points="14.999,0 20,0 20,5 "/>
9
- <polygon fill="#000000" points="20,15 20,20 15,20 "/>
10
- <polygon fill="#000000" points="5,20 0,20 0,15 "/>
11
- <rect x="3.75" y="4.708" fill="none" stroke="#000000" stroke-width="2" stroke-miterlimit="10" width="12.5" height="10.583"/>
12
- </svg>
1
+ <?xml version="1.0" encoding="utf-8"?>
2
+ <!-- Generator: Adobe Illustrator 16.0.4, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
3
+ <!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
4
+ <svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
5
+ width="20px" height="20px" viewBox="0 0 20 20" enable-background="new 0 0 20 20" xml:space="preserve">
6
+ <line fill="none" x1="6.792" y1="5.667" x2="6.792" y2="12.125"/>
7
+ <polygon fill="#000000" points="0,5 0,0 5,0 "/>
8
+ <polygon fill="#000000" points="14.999,0 20,0 20,5 "/>
9
+ <polygon fill="#000000" points="20,15 20,20 15,20 "/>
10
+ <polygon fill="#000000" points="5,20 0,20 0,15 "/>
11
+ <rect x="3.75" y="4.708" fill="none" stroke="#000000" stroke-width="2" stroke-miterlimit="10" width="12.5" height="10.583"/>
12
+ </svg>
package/src/index.tsx ADDED
@@ -0,0 +1,13 @@
1
+ export {
2
+ default as OncoprintJS,
3
+ InitParams,
4
+ HorzZoomCallback,
5
+ MinimapCloseCallback,
6
+ CellMouseOverCallback,
7
+ CellClickCallback,
8
+ ClipboardChangeCallback,
9
+ } from './js/oncoprint';
10
+
11
+ export * from './js/oncoprintruleset';
12
+ export * from './js/oncoprintmodel';
13
+ export { default as shapeToSvg } from './js/oncoprintshapetosvg';
@@ -1,12 +1,11 @@
1
1
  export default class CachedProperty<T> {
2
- private bound_properties:CachedProperty<any>[] = [];
2
+ private bound_properties: CachedProperty<any>[] = [];
3
3
 
4
- constructor(private value:T, private updateFn:(...args:any[])=>T) {
5
- }
4
+ constructor(private value: T, private updateFn: (...args: any[]) => T) {}
6
5
 
7
- public update(...args:any[]) {
6
+ public update(...args: any[]) {
8
7
  this.value = this.updateFn.apply(null, args);
9
- for (let i=0; i<this.bound_properties.length; i++) {
8
+ for (let i = 0; i < this.bound_properties.length; i++) {
10
9
  this.bound_properties[i].update(...args);
11
10
  }
12
11
  }
@@ -19,7 +18,7 @@ export default class CachedProperty<T> {
19
18
  this.update();
20
19
  return this.get();
21
20
  }
22
- public addBoundProperty(cached_property:CachedProperty<any>) {
21
+ public addBoundProperty(cached_property: CachedProperty<any>) {
23
22
  this.bound_properties.push(cached_property);
24
23
  }
25
- }
24
+ }
@@ -1,4 +1,9 @@
1
- export default function binarysearch<T>(array:T[], target_key:number, keyFn:(t:T)=>number, return_closest_lower_if_not_found?:boolean) {
1
+ export default function binarysearch<T>(
2
+ array: T[],
3
+ target_key: number,
4
+ keyFn: (t: T) => number,
5
+ return_closest_lower_if_not_found?: boolean
6
+ ) {
2
7
  if (!array.length) {
3
8
  return -1; // return -1 for an empty array
4
9
  }
@@ -21,8 +26,8 @@ export default function binarysearch<T>(array:T[], target_key:number, keyFn:(t:T
21
26
  }
22
27
  }
23
28
  if (return_closest_lower_if_not_found) {
24
- return Math.max(0, lower_incl-1);
29
+ return Math.max(0, lower_incl - 1);
25
30
  } else {
26
31
  return -1;
27
32
  }
28
- }
33
+ }
@@ -1,45 +1,58 @@
1
- import {extendArray, fastParseInt10, sgndiff} from "./utils";
1
+ import { extendArray, fastParseInt10, sgndiff } from './utils';
2
2
 
3
- const string_type = typeof "";
3
+ const string_type = typeof '';
4
4
 
5
- export type SortingVector = (number|string)[];
5
+ export type SortingVector = (number | string)[];
6
6
 
7
7
  type BucketRange = {
8
- lower_index_incl:number;
9
- upper_index_excl:number;
10
- }
8
+ lower_index_incl: number;
9
+ upper_index_excl: number;
10
+ };
11
11
 
12
- type CompareEquals<T> = (a:T, b:T)=>number;
12
+ type CompareEquals<T> = (a: T, b: T) => number;
13
13
 
14
- type GetVector<T> = (t:T)=>SortingVector;
14
+ type GetVector<T> = (t: T) => SortingVector;
15
15
 
16
- export function bucketSort<T>(array:T[], getVector?:(t:T)=>SortingVector, compareEquals?:CompareEquals<T>) {
16
+ export function bucketSort<T>(
17
+ array: T[],
18
+ getVector?: (t: T) => SortingVector,
19
+ compareEquals?: CompareEquals<T>
20
+ ) {
17
21
  // array: an array of data
18
22
  // getVector: a function that takes an element of array and returns an int vector. defaults to identity
19
23
  // compareEquals: an optional standard sort comparator - if specified it is run on the
20
24
  // results of the final buckets before returning
21
- getVector = getVector || function(d:SortingVector) { return d; } as any;
25
+ getVector =
26
+ getVector ||
27
+ (function(d: SortingVector) {
28
+ return d;
29
+ } as any);
22
30
 
23
31
  var current_sorted_array = array;
24
- var current_bucket_ranges = [{lower_index_incl: 0, upper_index_excl: array.length}];
32
+ var current_bucket_ranges = [
33
+ { lower_index_incl: 0, upper_index_excl: array.length },
34
+ ];
25
35
 
26
- var new_sorted_array:T[], new_bucket_ranges:BucketRange[], bucket_range, sorted_result;
36
+ var new_sorted_array: T[],
37
+ new_bucket_ranges: BucketRange[],
38
+ bucket_range,
39
+ sorted_result;
27
40
 
28
41
  // find max length vector, to use as template for vector component types, and whose length will be the sort depth
29
- var max_length_vector:SortingVector = [];
42
+ var max_length_vector: SortingVector = [];
30
43
  var proposed_vector;
31
- for (var i=0; i<array.length; i++) {
44
+ for (var i = 0; i < array.length; i++) {
32
45
  proposed_vector = getVector(array[i]);
33
46
  if (proposed_vector.length > max_length_vector.length) {
34
47
  max_length_vector = proposed_vector;
35
48
  }
36
49
  }
37
50
  var vector_length = max_length_vector.length;
38
- for (var vector_index=0; vector_index<vector_length; vector_index++) {
51
+ for (var vector_index = 0; vector_index < vector_length; vector_index++) {
39
52
  new_sorted_array = [];
40
53
  new_bucket_ranges = [];
41
54
  // sort each bucket range, and collect sorted array and new bucket ranges
42
- for (var j=0; j<current_bucket_ranges.length; j++) {
55
+ for (var j = 0; j < current_bucket_ranges.length; j++) {
43
56
  bucket_range = current_bucket_ranges[j];
44
57
  sorted_result = bucketSortHelper(
45
58
  current_sorted_array,
@@ -47,7 +60,7 @@ export function bucketSort<T>(array:T[], getVector?:(t:T)=>SortingVector, compar
47
60
  bucket_range.lower_index_incl,
48
61
  bucket_range.upper_index_excl,
49
62
  vector_index,
50
- (typeof max_length_vector[vector_index] === string_type)
63
+ typeof max_length_vector[vector_index] === string_type
51
64
  );
52
65
  extendArray(new_sorted_array, sorted_result.sorted_array);
53
66
  extendArray(new_bucket_ranges, sorted_result.bucket_ranges);
@@ -59,9 +72,12 @@ export function bucketSort<T>(array:T[], getVector?:(t:T)=>SortingVector, compar
59
72
  if (compareEquals) {
60
73
  new_sorted_array = [];
61
74
  var bucket_elts;
62
- for (var j=0; j<current_bucket_ranges.length; j++) {
75
+ for (var j = 0; j < current_bucket_ranges.length; j++) {
63
76
  bucket_range = current_bucket_ranges[j];
64
- bucket_elts = current_sorted_array.slice(bucket_range.lower_index_incl, bucket_range.upper_index_excl);
77
+ bucket_elts = current_sorted_array.slice(
78
+ bucket_range.lower_index_incl,
79
+ bucket_range.upper_index_excl
80
+ );
65
81
  bucket_elts.sort(compareEquals);
66
82
  extendArray(new_sorted_array, bucket_elts);
67
83
  }
@@ -70,33 +86,41 @@ export function bucketSort<T>(array:T[], getVector?:(t:T)=>SortingVector, compar
70
86
  return current_sorted_array;
71
87
  }
72
88
 
73
- export function stringSort<T>(array:T[], getString?:(t:T)=>string) {
89
+ export function stringSort<T>(array: T[], getString?: (t: T) => string) {
74
90
  // array: an array of data
75
91
  // getString: a function that takes an element of `array` and returns a string. defaults to identity
76
92
 
77
93
  // returns strings sorted in "natural order" (i.e. numbers sorted correctly - P2 comes before P10)
78
- getString = getString || function(d:string) { return d; } as any;
94
+ getString =
95
+ getString ||
96
+ (function(d: string) {
97
+ return d;
98
+ } as any);
79
99
  // compute string vectors we'll sort with
80
100
  var data = array.map(function(d) {
81
101
  return {
82
102
  d: d,
83
- vector: stringToVector(getString(d))
103
+ vector: stringToVector(getString(d)),
84
104
  };
85
105
  });
86
106
  // sort
87
- var sorted = bucketSort(data, function(d) { return d.vector; });
107
+ var sorted = bucketSort(data, function(d) {
108
+ return d.vector;
109
+ });
88
110
  // return original passed-in data
89
- return sorted.map(function(datum) { return datum.d; });
111
+ return sorted.map(function(datum) {
112
+ return datum.d;
113
+ });
90
114
  }
91
115
 
92
- export function stringToVector(string:string) {
116
+ export function stringToVector(string: string) {
93
117
  var vector = [];
94
118
  var len = string.length;
95
119
  var numberStartIncl = -1;
96
120
  var charCode;
97
- for (var i=0; i<len; i++) {
121
+ for (var i = 0; i < len; i++) {
98
122
  charCode = string.charCodeAt(i);
99
- if (charCode >=48 && charCode <= 57) {
123
+ if (charCode >= 48 && charCode <= 57) {
100
124
  // if character is numeric digit 0-9
101
125
  if (numberStartIncl === -1) {
102
126
  // if we're not in a number yet, start number
@@ -123,7 +147,12 @@ export function stringToVector(string:string) {
123
147
  return vector;
124
148
  }
125
149
 
126
- export function compareFull<T>(d1:T, d2:T, getVector:GetVector<T>, compareEquals?:CompareEquals<T>) {
150
+ export function compareFull<T>(
151
+ d1: T,
152
+ d2: T,
153
+ getVector: GetVector<T>,
154
+ compareEquals?: CompareEquals<T>
155
+ ) {
127
156
  // utility function - comparator that describes sort order given by bucketSort
128
157
  var ret = compare(getVector(d1), getVector(d2));
129
158
  if (ret === 0 && compareEquals) {
@@ -132,22 +161,25 @@ export function compareFull<T>(d1:T, d2:T, getVector:GetVector<T>, compareEquals
132
161
  return ret;
133
162
  }
134
163
 
135
- function compareVectorElements(elt1:number|string, elt2:number|string) {
164
+ function compareVectorElements(elt1: number | string, elt2: number | string) {
136
165
  if (typeof elt1 === string_type) {
137
- return compare(stringToVector(elt1 as string), stringToVector(elt2 as string));
166
+ return compare(
167
+ stringToVector(elt1 as string),
168
+ stringToVector(elt2 as string)
169
+ );
138
170
  } else {
139
171
  return sgndiff(elt1 as number, elt2 as number);
140
172
  }
141
173
  }
142
174
 
143
- export function compare(vector1:SortingVector, vector2:SortingVector) {
175
+ export function compare(vector1: SortingVector, vector2: SortingVector) {
144
176
  // utility function - comparator that describes vector sort order given by bucketSort
145
177
 
146
178
  var ret = 0;
147
179
  // go left to right, return result of first difference
148
180
  // if one vector is shorter, that one comes first
149
181
  var cmp;
150
- for (var i=0; i<vector1.length; i++) {
182
+ for (var i = 0; i < vector1.length; i++) {
151
183
  if (i >= vector2.length) {
152
184
  // if we've gotten here, that means no change up til i, and vector2 is shorter
153
185
  ret = 1;
@@ -171,32 +203,39 @@ export function compare(vector1:SortingVector, vector2:SortingVector) {
171
203
  }
172
204
 
173
205
  export function bucketSortHelper<T>(
174
- array:T[],
175
- getVector:GetVector<T>,
176
- sort_range_lower_index_incl:number,
177
- sort_range_upper_index_excl:number,
178
- vector_index:number,
179
- isStringElt:boolean
206
+ array: T[],
207
+ getVector: GetVector<T>,
208
+ sort_range_lower_index_incl: number,
209
+ sort_range_upper_index_excl: number,
210
+ vector_index: number,
211
+ isStringElt: boolean
180
212
  ) {
181
213
  // returns { sorted_array: d[], bucket_ranges:{lower_index_incl, upper_index_excl}[]}} },
182
214
  // where sorted_array only contains elements from the specified range of
183
215
  // array[sort_range_lower_index_incl:sort_range_upper_index_excl]
184
216
 
185
217
  // stop if empty sort range, or end of vector
186
- if (!array.length || sort_range_lower_index_incl >= sort_range_upper_index_excl) {
218
+ if (
219
+ !array.length ||
220
+ sort_range_lower_index_incl >= sort_range_upper_index_excl
221
+ ) {
187
222
  return {
188
223
  sorted_array: [],
189
- bucket_ranges: []
190
- }
224
+ bucket_ranges: [],
225
+ };
191
226
  }
192
227
 
193
228
  // bucket sort the specified range
194
229
  // gather elements into buckets
195
- var buckets:{[vectorElt:string]:T[]} = {};
230
+ var buckets: { [vectorElt: string]: T[] } = {};
196
231
  var keys = [];
197
232
  var vector, key;
198
233
  var sortFirst = [];
199
- for (var i=sort_range_lower_index_incl; i<sort_range_upper_index_excl; i++) {
234
+ for (
235
+ var i = sort_range_lower_index_incl;
236
+ i < sort_range_upper_index_excl;
237
+ i++
238
+ ) {
200
239
  vector = getVector(array[i]);
201
240
  if (vector.length > vector_index) {
202
241
  key = vector[vector_index];
@@ -219,7 +258,7 @@ export function bucketSortHelper<T>(
219
258
  keys = stringSort(keys);
220
259
  }
221
260
 
222
- var sorted_array:T[] = [];
261
+ var sorted_array: T[] = [];
223
262
  var bucket_ranges = [];
224
263
  var lower_index_incl, upper_index_excl;
225
264
  // add sortFirst
@@ -227,15 +266,18 @@ export function bucketSortHelper<T>(
227
266
  lower_index_incl = sort_range_lower_index_incl + sorted_array.length;
228
267
  bucket_ranges.push({
229
268
  lower_index_incl: lower_index_incl,
230
- upper_index_excl: lower_index_incl + sortFirst.length
269
+ upper_index_excl: lower_index_incl + sortFirst.length,
231
270
  });
232
271
  extendArray(sorted_array, sortFirst);
233
272
  }
234
- for (var i=0; i<keys.length; i++) {
273
+ for (var i = 0; i < keys.length; i++) {
235
274
  var bucket = buckets[keys[i]];
236
275
  lower_index_incl = sort_range_lower_index_incl + sorted_array.length;
237
276
  upper_index_excl = lower_index_incl + bucket.length;
238
- bucket_ranges.push({lower_index_incl: lower_index_incl, upper_index_excl: upper_index_excl});
277
+ bucket_ranges.push({
278
+ lower_index_incl: lower_index_incl,
279
+ upper_index_excl: upper_index_excl,
280
+ });
239
281
  extendArray(sorted_array, bucket);
240
282
  }
241
283
 
@@ -1,5 +1,10 @@
1
- import ClusteringWorker from './workers/clustering-worker';
2
- import {CaseItem, CasesAndEntities, ClusteringMessage, EntityItem} from "./workers/clustering-worker";
1
+ import ClusteringWorker from 'web-worker:./workers/clustering-worker';
2
+ import {
3
+ CaseItem,
4
+ CasesAndEntities,
5
+ ClusteringMessage,
6
+ EntityItem,
7
+ } from './workers/clustering-worker';
3
8
 
4
9
  /**
5
10
  * Executes the clustering of casesAndEntitites in the requested
@@ -21,7 +26,10 @@ import {CaseItem, CasesAndEntities, ClusteringMessage, EntityItem} from "./worke
21
26
  * @return a deferred which gets resolved with the clustering result
22
27
  * when the clustering is done.
23
28
  */
24
- function _hcluster(casesAndEntitites:ClusteringMessage["casesAndEntities"], dimension:ClusteringMessage["dimension"]) {
29
+ function _hcluster(
30
+ casesAndEntitites: ClusteringMessage['casesAndEntities'],
31
+ dimension: ClusteringMessage['dimension']
32
+ ) {
25
33
  var worker = new ClusteringWorker();
26
34
  var message = new Object() as ClusteringMessage;
27
35
  //@ts-ignore
@@ -29,8 +37,8 @@ function _hcluster(casesAndEntitites:ClusteringMessage["casesAndEntities"], dime
29
37
  message.casesAndEntities = casesAndEntitites;
30
38
  message.dimension = dimension;
31
39
  worker.postMessage(message);
32
- worker.onmessage = function(m:any) {
33
- def.resolve(m.data as (CaseItem[])|(EntityItem[]));
40
+ worker.onmessage = function(m: any) {
41
+ def.resolve(m.data as CaseItem[] | EntityItem[]);
34
42
  };
35
43
  return def.promise();
36
44
  }
@@ -41,8 +49,10 @@ function _hcluster(casesAndEntitites:ClusteringMessage["casesAndEntities"], dime
41
49
  * @return a deferred which gets resolved with the clustering result
42
50
  * when the clustering is done.
43
51
  */
44
- export function hclusterColumns(casesAndEntitites:CasesAndEntities):Promise<CaseItem[]> {
45
- return _hcluster(casesAndEntitites, "CASES");
52
+ export function hclusterColumns(
53
+ casesAndEntitites: CasesAndEntities
54
+ ): Promise<CaseItem[]> {
55
+ return _hcluster(casesAndEntitites, 'CASES');
46
56
  }
47
57
 
48
58
  /**
@@ -51,6 +61,8 @@ export function hclusterColumns(casesAndEntitites:CasesAndEntities):Promise<Case
51
61
  * @return a deferred which gets resolved with the clustering result
52
62
  * when the clustering is done.
53
63
  */
54
- export function hclusterTracks(casesAndEntitites:CasesAndEntities):Promise<EntityItem[]> {
55
- return _hcluster(casesAndEntitites, "ENTITIES");
56
- }
64
+ export function hclusterTracks(
65
+ casesAndEntitites: CasesAndEntities
66
+ ): Promise<EntityItem[]> {
67
+ return _hcluster(casesAndEntitites, 'ENTITIES');
68
+ }
@@ -1,29 +1,33 @@
1
- import { fastParseInt16 } from "./utils";
2
- import {RGBAColor} from "./oncoprintruleset";
1
+ import { fastParseInt16 } from './utils';
2
+ import { RGBAColor } from './oncoprintruleset';
3
3
 
4
- export default function extractrgba(str:string):RGBAColor {
5
- if (str[0] === "#") {
4
+ export default function extractrgba(str: string): RGBAColor {
5
+ if (str[0] === '#') {
6
6
  // hex, convert to rgba
7
7
  return hexToRGBA(str);
8
8
  }
9
- const match = str.match(/^[\s]*rgba\([\s]*([0-9.]+)[\s]*,[\s]*([0-9.]+)[\s]*,[\s]*([0-9.]+)[\s]*,[\s]*([0-9.]+)[\s]*\)[\s]*$/);
9
+ const match = str.match(
10
+ /^[\s]*rgba\([\s]*([0-9.]+)[\s]*,[\s]*([0-9.]+)[\s]*,[\s]*([0-9.]+)[\s]*,[\s]*([0-9.]+)[\s]*\)[\s]*$/
11
+ );
10
12
  if (match && match.length === 5) {
11
- return [parseFloat(match[1]) / 255,
13
+ return [
14
+ parseFloat(match[1]) / 255,
12
15
  parseFloat(match[2]) / 255,
13
16
  parseFloat(match[3]) / 255,
14
- parseFloat(match[4])];
17
+ parseFloat(match[4]),
18
+ ];
15
19
  }
16
20
  throw `could not extract rgba from ${str}`;
17
- };
21
+ }
18
22
 
19
- export function hexToRGBA(str:string):RGBAColor {
23
+ export function hexToRGBA(str: string): RGBAColor {
20
24
  const r = fastParseInt16(str[1] + str[2]);
21
25
  const g = fastParseInt16(str[3] + str[4]);
22
26
  const b = fastParseInt16(str[5] + str[6]);
23
- return [r,g,b,1];
27
+ return [r, g, b, 1];
24
28
  }
25
29
 
26
- export function rgbaToHex(rgba:RGBAColor):string {
30
+ export function rgbaToHex(rgba: RGBAColor): string {
27
31
  let hexR = rgba[0].toString(16);
28
32
  let hexG = rgba[1].toString(16);
29
33
  let hexB = rgba[2].toString(16);
@@ -37,4 +41,4 @@ export function rgbaToHex(rgba:RGBAColor):string {
37
41
  hexB = '0' + hexB;
38
42
  }
39
43
  return `#${hexR}${hexG}${hexB}`;
40
- }
44
+ }
@@ -30,8 +30,12 @@
30
30
  * along with this program. If not, see <http://www.gnu.org/licenses/>.
31
31
  */
32
32
 
33
-
34
- export default function haselementsininterval<T>(sorted_list:T[], valueFn:(t:T)=>number, lower_inc_val:number, upper_exc_val:number):boolean {
33
+ export default function haselementsininterval<T>(
34
+ sorted_list: T[],
35
+ valueFn: (t: T) => number,
36
+ lower_inc_val: number,
37
+ upper_exc_val: number
38
+ ): boolean {
35
39
  // in: sorted_list, a list sorted in increasing order of valueFn
36
40
  // valueFn, a function that takes an element of sorted_list and returns a number
37
41
  // lower_inc and upper_ex: define a half-open interval [lower_inc, upper_exc)
@@ -45,7 +49,7 @@ export default function haselementsininterval<T>(sorted_list:T[], valueFn:(t:T)=
45
49
  if (test_lower_inc >= test_upper_exc) {
46
50
  break;
47
51
  }
48
- middle = Math.floor((test_lower_inc + test_upper_exc) / 2)
52
+ middle = Math.floor((test_lower_inc + test_upper_exc) / 2);
49
53
  middle_val = valueFn(sorted_list[middle]);
50
54
  if (middle_val >= upper_exc_val) {
51
55
  test_upper_exc = middle;
@@ -59,4 +63,4 @@ export default function haselementsininterval<T>(sorted_list:T[], valueFn:(t:T)=
59
63
  }
60
64
  }
61
65
  return ret;
62
- };
66
+ }