@jbrowse/plugin-hic 2.6.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 (96) hide show
  1. package/LICENSE +201 -0
  2. package/dist/HicAdapter/HicAdapter.d.ts +32 -0
  3. package/dist/HicAdapter/HicAdapter.js +85 -0
  4. package/dist/HicAdapter/HicAdapter.js.map +1 -0
  5. package/dist/HicAdapter/configSchema.d.ts +13 -0
  6. package/dist/HicAdapter/configSchema.js +22 -0
  7. package/dist/HicAdapter/configSchema.js.map +1 -0
  8. package/dist/HicAdapter/index.d.ts +3 -0
  9. package/dist/HicAdapter/index.js +39 -0
  10. package/dist/HicAdapter/index.js.map +1 -0
  11. package/dist/HicRenderer/HicRenderer.d.ts +53 -0
  12. package/dist/HicRenderer/HicRenderer.js +126 -0
  13. package/dist/HicRenderer/HicRenderer.js.map +1 -0
  14. package/dist/HicRenderer/components/HicRendering.d.ts +10 -0
  15. package/dist/HicRenderer/components/HicRendering.js +16 -0
  16. package/dist/HicRenderer/components/HicRendering.js.map +1 -0
  17. package/dist/HicRenderer/configSchema.d.ts +28 -0
  18. package/dist/HicRenderer/configSchema.js +37 -0
  19. package/dist/HicRenderer/configSchema.js.map +1 -0
  20. package/dist/HicRenderer/index.d.ts +3 -0
  21. package/dist/HicRenderer/index.js +17 -0
  22. package/dist/HicRenderer/index.js.map +1 -0
  23. package/dist/HicTrack/configSchema.d.ts +75 -0
  24. package/dist/HicTrack/configSchema.js +17 -0
  25. package/dist/HicTrack/configSchema.js.map +1 -0
  26. package/dist/HicTrack/index.d.ts +3 -0
  27. package/dist/HicTrack/index.js +20 -0
  28. package/dist/HicTrack/index.js.map +1 -0
  29. package/dist/LinearHicDisplay/configSchema.d.ts +33 -0
  30. package/dist/LinearHicDisplay/configSchema.js +25 -0
  31. package/dist/LinearHicDisplay/configSchema.js.map +1 -0
  32. package/dist/LinearHicDisplay/index.d.ts +3 -0
  33. package/dist/LinearHicDisplay/index.js +24 -0
  34. package/dist/LinearHicDisplay/index.js.map +1 -0
  35. package/dist/LinearHicDisplay/model.d.ts +332 -0
  36. package/dist/LinearHicDisplay/model.js +95 -0
  37. package/dist/LinearHicDisplay/model.js.map +1 -0
  38. package/dist/index.d.ts +7 -0
  39. package/dist/index.js +56 -0
  40. package/dist/index.js.map +1 -0
  41. package/esm/HicAdapter/HicAdapter.d.ts +32 -0
  42. package/esm/HicAdapter/HicAdapter.js +77 -0
  43. package/esm/HicAdapter/HicAdapter.js.map +1 -0
  44. package/esm/HicAdapter/configSchema.d.ts +13 -0
  45. package/esm/HicAdapter/configSchema.js +20 -0
  46. package/esm/HicAdapter/configSchema.js.map +1 -0
  47. package/esm/HicAdapter/index.d.ts +3 -0
  48. package/esm/HicAdapter/index.js +11 -0
  49. package/esm/HicAdapter/index.js.map +1 -0
  50. package/esm/HicRenderer/HicRenderer.d.ts +53 -0
  51. package/esm/HicRenderer/HicRenderer.js +97 -0
  52. package/esm/HicRenderer/HicRenderer.js.map +1 -0
  53. package/esm/HicRenderer/components/HicRendering.d.ts +10 -0
  54. package/esm/HicRenderer/components/HicRendering.js +11 -0
  55. package/esm/HicRenderer/components/HicRendering.js.map +1 -0
  56. package/esm/HicRenderer/configSchema.d.ts +28 -0
  57. package/esm/HicRenderer/configSchema.js +35 -0
  58. package/esm/HicRenderer/configSchema.js.map +1 -0
  59. package/esm/HicRenderer/index.d.ts +3 -0
  60. package/esm/HicRenderer/index.js +12 -0
  61. package/esm/HicRenderer/index.js.map +1 -0
  62. package/esm/HicTrack/configSchema.d.ts +75 -0
  63. package/esm/HicTrack/configSchema.js +15 -0
  64. package/esm/HicTrack/configSchema.js.map +1 -0
  65. package/esm/HicTrack/index.d.ts +3 -0
  66. package/esm/HicTrack/index.js +15 -0
  67. package/esm/HicTrack/index.js.map +1 -0
  68. package/esm/LinearHicDisplay/configSchema.d.ts +33 -0
  69. package/esm/LinearHicDisplay/configSchema.js +23 -0
  70. package/esm/LinearHicDisplay/configSchema.js.map +1 -0
  71. package/esm/LinearHicDisplay/index.d.ts +3 -0
  72. package/esm/LinearHicDisplay/index.js +19 -0
  73. package/esm/LinearHicDisplay/index.js.map +1 -0
  74. package/esm/LinearHicDisplay/model.d.ts +332 -0
  75. package/esm/LinearHicDisplay/model.js +93 -0
  76. package/esm/LinearHicDisplay/model.js.map +1 -0
  77. package/esm/index.d.ts +7 -0
  78. package/esm/index.js +50 -0
  79. package/esm/index.js.map +1 -0
  80. package/package.json +60 -0
  81. package/src/HicAdapter/HicAdapter.ts +150 -0
  82. package/src/HicAdapter/configSchema.ts +26 -0
  83. package/src/HicAdapter/index.ts +15 -0
  84. package/src/HicRenderer/HicRenderer.tsx +170 -0
  85. package/src/HicRenderer/components/HicRendering.test.tsx +21 -0
  86. package/src/HicRenderer/components/HicRendering.tsx +24 -0
  87. package/src/HicRenderer/components/__snapshots__/HicRendering.test.tsx.snap +14 -0
  88. package/src/HicRenderer/configSchema.ts +42 -0
  89. package/src/HicRenderer/index.ts +17 -0
  90. package/src/HicTrack/configSchema.ts +23 -0
  91. package/src/HicTrack/index.ts +16 -0
  92. package/src/LinearHicDisplay/configSchema.ts +33 -0
  93. package/src/LinearHicDisplay/index.ts +21 -0
  94. package/src/LinearHicDisplay/model.ts +104 -0
  95. package/src/declare.d.ts +2 -0
  96. package/src/index.ts +71 -0
@@ -0,0 +1,95 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const configuration_1 = require("@jbrowse/core/configuration");
4
+ const plugin_linear_genome_view_1 = require("@jbrowse/plugin-linear-genome-view");
5
+ const mobx_state_tree_1 = require("mobx-state-tree");
6
+ /**
7
+ * #stateModel LinearHicDisplay
8
+ * #category display
9
+ * extends `BaseLinearDisplay`
10
+ */
11
+ function x() { } // eslint-disable-line @typescript-eslint/no-unused-vars
12
+ exports.default = (configSchema) => mobx_state_tree_1.types
13
+ .compose('LinearHicDisplay', plugin_linear_genome_view_1.BaseLinearDisplay, mobx_state_tree_1.types.model({
14
+ /**
15
+ * #property
16
+ */
17
+ type: mobx_state_tree_1.types.literal('LinearHicDisplay'),
18
+ /**
19
+ * #property
20
+ */
21
+ configuration: (0, configuration_1.ConfigurationReference)(configSchema),
22
+ /**
23
+ * #property
24
+ */
25
+ resolution: mobx_state_tree_1.types.optional(mobx_state_tree_1.types.number, 1),
26
+ }))
27
+ .views(self => {
28
+ const { renderProps: superRenderProps } = self;
29
+ return {
30
+ /**
31
+ * #getter
32
+ */
33
+ get blockType() {
34
+ return 'dynamicBlocks';
35
+ },
36
+ /**
37
+ * #getter
38
+ */
39
+ get rendererTypeName() {
40
+ return 'HicRenderer';
41
+ },
42
+ /**
43
+ * #method
44
+ */
45
+ renderProps() {
46
+ const config = self.rendererType.configSchema.create((0, configuration_1.getConf)(self, 'renderer') || {}, (0, mobx_state_tree_1.getEnv)(self));
47
+ return {
48
+ ...superRenderProps(),
49
+ config,
50
+ rpcDriverName: self.rpcDriverName,
51
+ displayModel: self,
52
+ resolution: self.resolution,
53
+ };
54
+ },
55
+ };
56
+ })
57
+ .actions(self => ({
58
+ /**
59
+ * #action
60
+ */
61
+ setResolution(n) {
62
+ self.resolution = n;
63
+ },
64
+ }))
65
+ .views(self => {
66
+ const { trackMenuItems: superTrackMenuItems } = self;
67
+ return {
68
+ /**
69
+ * #getter
70
+ */
71
+ trackMenuItems() {
72
+ return [
73
+ ...superTrackMenuItems(),
74
+ {
75
+ label: 'Resolution',
76
+ subMenu: [
77
+ {
78
+ label: 'Finer resolution',
79
+ onClick: () => {
80
+ self.setResolution(self.resolution * 2);
81
+ },
82
+ },
83
+ {
84
+ label: 'Coarser resolution',
85
+ onClick: () => {
86
+ self.setResolution(self.resolution / 2);
87
+ },
88
+ },
89
+ ],
90
+ },
91
+ ];
92
+ },
93
+ };
94
+ });
95
+ //# sourceMappingURL=model.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"model.js","sourceRoot":"","sources":["../../src/LinearHicDisplay/model.ts"],"names":[],"mappings":";;AAAA,+DAA6E;AAC7E,kFAAsE;AACtE,qDAA+C;AAG/C;;;;GAIG;AACH,SAAS,CAAC,KAAI,CAAC,CAAC,wDAAwD;AAExE,kBAAe,CAAC,YAAwC,EAAE,EAAE,CAC1D,uBAAK;KACF,OAAO,CACN,kBAAkB,EAClB,6CAAiB,EACjB,uBAAK,CAAC,KAAK,CAAC;IACV;;OAEG;IACH,IAAI,EAAE,uBAAK,CAAC,OAAO,CAAC,kBAAkB,CAAC;IACvC;;OAEG;IACH,aAAa,EAAE,IAAA,sCAAsB,EAAC,YAAY,CAAC;IACnD;;OAEG;IACH,UAAU,EAAE,uBAAK,CAAC,QAAQ,CAAC,uBAAK,CAAC,MAAM,EAAE,CAAC,CAAC;CAC5C,CAAC,CACH;KACA,KAAK,CAAC,IAAI,CAAC,EAAE;IACZ,MAAM,EAAE,WAAW,EAAE,gBAAgB,EAAE,GAAG,IAAI,CAAA;IAC9C,OAAO;QACL;;WAEG;QACH,IAAI,SAAS;YACX,OAAO,eAAe,CAAA;QACxB,CAAC;QACD;;WAEG;QACH,IAAI,gBAAgB;YAClB,OAAO,aAAa,CAAA;QACtB,CAAC;QACD;;WAEG;QACH,WAAW;YACT,MAAM,MAAM,GAAG,IAAI,CAAC,YAAY,CAAC,YAAY,CAAC,MAAM,CAClD,IAAA,uBAAO,EAAC,IAAI,EAAE,UAAU,CAAC,IAAI,EAAE,EAC/B,IAAA,wBAAM,EAAC,IAAI,CAAC,CACb,CAAA;YAED,OAAO;gBACL,GAAG,gBAAgB,EAAE;gBACrB,MAAM;gBACN,aAAa,EAAE,IAAI,CAAC,aAAa;gBACjC,YAAY,EAAE,IAAI;gBAClB,UAAU,EAAE,IAAI,CAAC,UAAU;aAC5B,CAAA;QACH,CAAC;KACF,CAAA;AACH,CAAC,CAAC;KACD,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IAChB;;OAEG;IACH,aAAa,CAAC,CAAS;QACrB,IAAI,CAAC,UAAU,GAAG,CAAC,CAAA;IACrB,CAAC;CACF,CAAC,CAAC;KACF,KAAK,CAAC,IAAI,CAAC,EAAE;IACZ,MAAM,EAAE,cAAc,EAAE,mBAAmB,EAAE,GAAG,IAAI,CAAA;IACpD,OAAO;QACL;;WAEG;QACH,cAAc;YACZ,OAAO;gBACL,GAAG,mBAAmB,EAAE;gBACxB;oBACE,KAAK,EAAE,YAAY;oBACnB,OAAO,EAAE;wBACP;4BACE,KAAK,EAAE,kBAAkB;4BACzB,OAAO,EAAE,GAAG,EAAE;gCACZ,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,UAAU,GAAG,CAAC,CAAC,CAAA;4BACzC,CAAC;yBACF;wBACD;4BACE,KAAK,EAAE,oBAAoB;4BAC3B,OAAO,EAAE,GAAG,EAAE;gCACZ,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,UAAU,GAAG,CAAC,CAAC,CAAA;4BACzC,CAAC;yBACF;qBACF;iBACF;aACF,CAAA;QACH,CAAC;KACF,CAAA;AACH,CAAC,CAAC,CAAA"}
@@ -0,0 +1,7 @@
1
+ import Plugin from '@jbrowse/core/Plugin';
2
+ import PluginManager from '@jbrowse/core/PluginManager';
3
+ export default class HicPlugin extends Plugin {
4
+ name: string;
5
+ install(pluginManager: PluginManager): void;
6
+ configure(pluginManager: PluginManager): void;
7
+ }
package/dist/index.js ADDED
@@ -0,0 +1,56 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ const Plugin_1 = __importDefault(require("@jbrowse/core/Plugin"));
7
+ const HicRenderer_1 = __importDefault(require("./HicRenderer"));
8
+ const HicTrack_1 = __importDefault(require("./HicTrack"));
9
+ const LinearHicDisplay_1 = __importDefault(require("./LinearHicDisplay"));
10
+ const HicAdapter_1 = __importDefault(require("./HicAdapter"));
11
+ const tracks_1 = require("@jbrowse/core/util/tracks");
12
+ class HicPlugin extends Plugin_1.default {
13
+ constructor() {
14
+ super(...arguments);
15
+ this.name = 'HicPlugin';
16
+ }
17
+ install(pluginManager) {
18
+ (0, HicAdapter_1.default)(pluginManager);
19
+ (0, HicRenderer_1.default)(pluginManager);
20
+ (0, HicTrack_1.default)(pluginManager);
21
+ (0, LinearHicDisplay_1.default)(pluginManager);
22
+ pluginManager.addToExtensionPoint('Core-guessAdapterForLocation', (adapterGuesser) => {
23
+ return (file, index, adapterHint) => {
24
+ const regexGuess = /\.hic/i;
25
+ const adapterName = 'HicAdapter';
26
+ const fileName = (0, tracks_1.getFileName)(file);
27
+ const obj = {
28
+ type: adapterName,
29
+ hicLocation: file,
30
+ };
31
+ if (regexGuess.test(fileName) && !adapterHint) {
32
+ return obj;
33
+ }
34
+ else if (adapterHint === adapterName) {
35
+ return obj;
36
+ }
37
+ return adapterGuesser(file, index, adapterHint);
38
+ };
39
+ });
40
+ pluginManager.addToExtensionPoint('Core-guessTrackTypeForLocation', (trackTypeGuesser) => {
41
+ return (adapterName) => {
42
+ if (adapterName === 'HicAdapter') {
43
+ return 'HicTrack';
44
+ }
45
+ return trackTypeGuesser(adapterName);
46
+ };
47
+ });
48
+ }
49
+ configure(pluginManager) {
50
+ pluginManager.jexl.addFunction('alpha', (color, value) => color.alpha(value));
51
+ pluginManager.jexl.addFunction('hsl', (color) => color.hsl());
52
+ pluginManager.jexl.addFunction('colorString', (color) => color.string());
53
+ }
54
+ }
55
+ exports.default = HicPlugin;
56
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;;;AAAA,kEAAyC;AAIzC,gEAAwC;AACxC,0DAAkC;AAClC,0EAAkD;AAClD,8DAAsC;AACtC,sDAIkC;AAElC,MAAqB,SAAU,SAAQ,gBAAM;IAA7C;;QACE,SAAI,GAAG,WAAW,CAAA;IAuDpB,CAAC;IArDC,OAAO,CAAC,aAA4B;QAClC,IAAA,oBAAW,EAAC,aAAa,CAAC,CAAA;QAC1B,IAAA,qBAAY,EAAC,aAAa,CAAC,CAAA;QAC3B,IAAA,kBAAS,EAAC,aAAa,CAAC,CAAA;QACxB,IAAA,0BAAiB,EAAC,aAAa,CAAC,CAAA;QAEhC,aAAa,CAAC,mBAAmB,CAC/B,8BAA8B,EAC9B,CAAC,cAA8B,EAAE,EAAE;YACjC,OAAO,CACL,IAAkB,EAClB,KAAoB,EACpB,WAAoB,EACpB,EAAE;gBACF,MAAM,UAAU,GAAG,QAAQ,CAAA;gBAC3B,MAAM,WAAW,GAAG,YAAY,CAAA;gBAChC,MAAM,QAAQ,GAAG,IAAA,oBAAW,EAAC,IAAI,CAAC,CAAA;gBAClC,MAAM,GAAG,GAAG;oBACV,IAAI,EAAE,WAAW;oBACjB,WAAW,EAAE,IAAI;iBAClB,CAAA;gBAED,IAAI,UAAU,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,WAAW,EAAE;oBAC7C,OAAO,GAAG,CAAA;iBACX;qBAAM,IAAI,WAAW,KAAK,WAAW,EAAE;oBACtC,OAAO,GAAG,CAAA;iBACX;gBACD,OAAO,cAAc,CAAC,IAAI,EAAE,KAAK,EAAE,WAAW,CAAC,CAAA;YACjD,CAAC,CAAA;QACH,CAAC,CACF,CAAA;QACD,aAAa,CAAC,mBAAmB,CAC/B,gCAAgC,EAChC,CAAC,gBAAkC,EAAE,EAAE;YACrC,OAAO,CAAC,WAAmB,EAAE,EAAE;gBAC7B,IAAI,WAAW,KAAK,YAAY,EAAE;oBAChC,OAAO,UAAU,CAAA;iBAClB;gBACD,OAAO,gBAAgB,CAAC,WAAW,CAAC,CAAA;YACtC,CAAC,CAAA;QACH,CAAC,CACF,CAAA;IACH,CAAC;IAED,SAAS,CAAC,aAA4B;QACpC,aAAa,CAAC,IAAI,CAAC,WAAW,CAAC,OAAO,EAAE,CAAC,KAAY,EAAE,KAAa,EAAE,EAAE,CACtE,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,CACnB,CAAA;QACD,aAAa,CAAC,IAAI,CAAC,WAAW,CAAC,KAAK,EAAE,CAAC,KAAY,EAAE,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,CAAA;QACpE,aAAa,CAAC,IAAI,CAAC,WAAW,CAAC,aAAa,EAAE,CAAC,KAAY,EAAE,EAAE,CAC7D,KAAK,CAAC,MAAM,EAAE,CACf,CAAA;IACH,CAAC;CACF;AAxDD,4BAwDC"}
@@ -0,0 +1,32 @@
1
+ import { BaseFeatureDataAdapter, BaseOptions } from '@jbrowse/core/data_adapters/BaseAdapter';
2
+ import { Region, FileLocation } from '@jbrowse/core/util/types';
3
+ import type { GenericFilehandle } from 'generic-filehandle';
4
+ import PluginManager from '@jbrowse/core/PluginManager';
5
+ import { getSubAdapterType } from '@jbrowse/core/data_adapters/dataAdapterCache';
6
+ import { AnyConfigurationModel } from '@jbrowse/core/configuration';
7
+ interface HicOptions extends BaseOptions {
8
+ resolution?: number;
9
+ bpPerPx?: number;
10
+ }
11
+ declare class GenericFilehandleWrapper {
12
+ private filehandle;
13
+ constructor(filehandle: GenericFilehandle);
14
+ read(position: number, length: number): Promise<ArrayBuffer>;
15
+ }
16
+ export declare function openFilehandleWrapper(location: FileLocation, pluginManager?: PluginManager): GenericFilehandleWrapper;
17
+ export default class HicAdapter extends BaseFeatureDataAdapter {
18
+ private hic;
19
+ constructor(config: AnyConfigurationModel, getSubAdapter?: getSubAdapterType, pluginManager?: PluginManager);
20
+ private setup;
21
+ getHeader(opts?: BaseOptions): Promise<{
22
+ resolutions: number[];
23
+ }>;
24
+ getRefNames(opts?: BaseOptions): Promise<string[]>;
25
+ getResolution(bpPerPx: number, opts?: BaseOptions): Promise<number>;
26
+ getFeatures(region: Region, opts?: HicOptions): any;
27
+ getMultiRegionFeatureDensityStats(_regions: Region[]): Promise<{
28
+ featureDensity: number;
29
+ }>;
30
+ freeResources(): void;
31
+ }
32
+ export {};
@@ -0,0 +1,77 @@
1
+ import { BaseFeatureDataAdapter, } from '@jbrowse/core/data_adapters/BaseAdapter';
2
+ import { ObservableCreate } from '@jbrowse/core/util/rxjs';
3
+ import { openLocation } from '@jbrowse/core/util/io';
4
+ import HicStraw from 'hic-straw';
5
+ // wraps generic-filehandle so the read function only takes a position and length
6
+ // in some ways, generic-filehandle wishes it was just this but it has
7
+ // to adapt to the node.js fs promises API
8
+ class GenericFilehandleWrapper {
9
+ constructor(filehandle) {
10
+ this.filehandle = filehandle;
11
+ }
12
+ async read(position, length) {
13
+ const { buffer: b, bytesRead } = await this.filehandle.read(Buffer.allocUnsafe(length), 0, length, position);
14
+ // xref https://stackoverflow.com/a/31394257/2129219
15
+ return b.buffer.slice(b.byteOffset, b.byteOffset + bytesRead);
16
+ }
17
+ }
18
+ export function openFilehandleWrapper(location, pluginManager) {
19
+ return new GenericFilehandleWrapper(openLocation(location, pluginManager));
20
+ }
21
+ export default class HicAdapter extends BaseFeatureDataAdapter {
22
+ constructor(config, getSubAdapter, pluginManager) {
23
+ super(config, getSubAdapter, pluginManager);
24
+ const hicLocation = this.getConf('hicLocation');
25
+ this.hic = new HicStraw({
26
+ file: openFilehandleWrapper(hicLocation, this.pluginManager),
27
+ });
28
+ }
29
+ async setup(opts) {
30
+ const { statusCallback = () => { } } = opts || {};
31
+ statusCallback('Downloading .hic header');
32
+ const result = await this.hic.getMetaData();
33
+ statusCallback('');
34
+ return result;
35
+ }
36
+ async getHeader(opts) {
37
+ const ret = await this.setup(opts);
38
+ const { chromosomes, ...rest } = ret;
39
+ return rest;
40
+ }
41
+ async getRefNames(opts) {
42
+ const metadata = await this.setup(opts);
43
+ return metadata.chromosomes.map(chr => chr.name);
44
+ }
45
+ async getResolution(bpPerPx, opts) {
46
+ const { resolutions } = await this.setup(opts);
47
+ // eslint-disable-next-line @typescript-eslint/no-non-null-assertion
48
+ let chosenResolution = resolutions.at(-1);
49
+ for (let i = resolutions.length - 1; i >= 0; i -= 1) {
50
+ const r = resolutions[i];
51
+ if (r <= 2 * bpPerPx) {
52
+ chosenResolution = r;
53
+ }
54
+ }
55
+ return chosenResolution;
56
+ }
57
+ getFeatures(region, opts = {}) {
58
+ return ObservableCreate(async (observer) => {
59
+ const { refName: chr, start, end } = region;
60
+ const { resolution, bpPerPx = 1, statusCallback = () => { } } = opts;
61
+ const res = await this.getResolution(bpPerPx / (resolution || 1000), opts);
62
+ statusCallback('Downloading .hic data');
63
+ const records = await this.hic.getContactRecords('KR', { start, chr, end }, { start, chr, end }, 'BP', res);
64
+ records.forEach(record => {
65
+ observer.next(record);
66
+ });
67
+ statusCallback('');
68
+ observer.complete();
69
+ }, opts.signal); // eslint-disable-line @typescript-eslint/no-explicit-any
70
+ }
71
+ // don't do feature stats estimation, similar to bigwigadapter
72
+ async getMultiRegionFeatureDensityStats(_regions) {
73
+ return { featureDensity: 0 };
74
+ }
75
+ freeResources( /* { region } */) { }
76
+ }
77
+ //# sourceMappingURL=HicAdapter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"HicAdapter.js","sourceRoot":"","sources":["../../src/HicAdapter/HicAdapter.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,13 @@
1
+ declare const HicAdapter: import("@jbrowse/core/configuration/configurationSchema").ConfigurationSchemaType<{
2
+ /**
3
+ * #slot
4
+ */
5
+ hicLocation: {
6
+ type: string;
7
+ defaultValue: {
8
+ uri: string;
9
+ locationType: string;
10
+ };
11
+ };
12
+ }, import("@jbrowse/core/configuration/configurationSchema").ConfigurationSchemaOptions<undefined, undefined>>;
13
+ export default HicAdapter;
@@ -0,0 +1,20 @@
1
+ import { ConfigurationSchema } from '@jbrowse/core/configuration';
2
+ /**
3
+ * #config HicAdapter
4
+ * #category adapter
5
+ */
6
+ function x() { } // eslint-disable-line @typescript-eslint/no-unused-vars
7
+ const HicAdapter = ConfigurationSchema('HicAdapter', {
8
+ /**
9
+ * #slot
10
+ */
11
+ hicLocation: {
12
+ type: 'fileLocation',
13
+ defaultValue: {
14
+ uri: '/path/to/my.hic',
15
+ locationType: 'UriLocation',
16
+ },
17
+ },
18
+ }, { explicitlyTyped: true });
19
+ export default HicAdapter;
20
+ //# sourceMappingURL=configSchema.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"configSchema.js","sourceRoot":"","sources":["../../src/HicAdapter/configSchema.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,mBAAmB,EAAE,MAAM,6BAA6B,CAAA;AAEjE;;;GAGG;AACH,SAAS,CAAC,KAAI,CAAC,CAAC,wDAAwD;AAExE,MAAM,UAAU,GAAG,mBAAmB,CACpC,YAAY,EACZ;IACE;;OAEG;IACH,WAAW,EAAE;QACX,IAAI,EAAE,cAAc;QACpB,YAAY,EAAE;YACZ,GAAG,EAAE,iBAAiB;YACtB,YAAY,EAAE,aAAa;SAC5B;KACF;CACF,EACD,EAAE,eAAe,EAAE,IAAI,EAAE,CAC1B,CAAA;AAED,eAAe,UAAU,CAAA"}
@@ -0,0 +1,3 @@
1
+ import PluginManager from '@jbrowse/core/PluginManager';
2
+ declare const _default: (pluginManager: PluginManager) => void;
3
+ export default _default;
@@ -0,0 +1,11 @@
1
+ import { AdapterType } from '@jbrowse/core/pluggableElementTypes';
2
+ import configSchema from './configSchema';
3
+ export default (pluginManager) => {
4
+ pluginManager.addAdapterType(() => new AdapterType({
5
+ name: 'HicAdapter',
6
+ displayName: 'Hi-C adapter',
7
+ configSchema,
8
+ getAdapterClass: () => import('./HicAdapter').then(r => r.default),
9
+ }));
10
+ };
11
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/HicAdapter/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,qCAAqC,CAAA;AAEjE,OAAO,YAAY,MAAM,gBAAgB,CAAA;AAEzC,eAAe,CAAC,aAA4B,EAAE,EAAE;IAC9C,aAAa,CAAC,cAAc,CAC1B,GAAG,EAAE,CACH,IAAI,WAAW,CAAC;QACd,IAAI,EAAE,YAAY;QAClB,WAAW,EAAE,cAAc;QAC3B,YAAY;QACZ,eAAe,EAAE,GAAG,EAAE,CAAC,MAAM,CAAC,cAAc,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC;KACnE,CAAC,CACL,CAAA;AACH,CAAC,CAAA"}
@@ -0,0 +1,53 @@
1
+ /// <reference types="react" />
2
+ import ServerSideRendererType, { RenderArgs as ServerSideRenderArgs, RenderArgsDeserialized as ServerSideRenderArgsDeserialized, ResultsSerialized as ServerSideResultsSerialized, ResultsDeserialized as ServerSideResultsDeserialized } from '@jbrowse/core/pluggableElementTypes/renderers/ServerSideRendererType';
3
+ import { Region } from '@jbrowse/core/util/types';
4
+ import { BaseFeatureDataAdapter } from '@jbrowse/core/data_adapters/BaseAdapter';
5
+ import { AnyConfigurationModel } from '@jbrowse/core/configuration';
6
+ interface HicFeature {
7
+ bin1: number;
8
+ bin2: number;
9
+ counts: number;
10
+ }
11
+ interface HicDataAdapter extends BaseFeatureDataAdapter {
12
+ getResolution: (bp: number) => Promise<number>;
13
+ }
14
+ export interface RenderArgs extends ServerSideRenderArgs {
15
+ regions: Region[];
16
+ }
17
+ export interface RenderArgsDeserialized extends ServerSideRenderArgsDeserialized {
18
+ regions: Region[];
19
+ dataAdapter: HicDataAdapter;
20
+ bpPerPx: number;
21
+ highResolutionScaling: number;
22
+ resolution: number;
23
+ adapterConfig: AnyConfigurationModel;
24
+ }
25
+ export interface RenderArgsDeserializedWithFeatures extends RenderArgsDeserialized {
26
+ features: HicFeature[];
27
+ }
28
+ export type ResultsSerialized = ServerSideResultsSerialized;
29
+ export type ResultsDeserialized = ServerSideResultsDeserialized;
30
+ export default class HicRenderer extends ServerSideRendererType {
31
+ supportsSVG: boolean;
32
+ makeImageData(ctx: CanvasRenderingContext2D, props: RenderArgsDeserializedWithFeatures): Promise<void>;
33
+ render(renderProps: RenderArgsDeserialized): Promise<{
34
+ height: any;
35
+ width: number;
36
+ canvasRecordedData: any;
37
+ reactElement?: import("react").ReactElement<any, string | import("react").JSXElementConstructor<any>> | undefined;
38
+ html?: string | undefined;
39
+ } | {
40
+ height: any;
41
+ width: number;
42
+ reactElement: import("react").JSX.Element;
43
+ html?: string | undefined;
44
+ } | {
45
+ height: any;
46
+ width: number;
47
+ imageData: any;
48
+ reactElement?: import("react").ReactElement<any, string | import("react").JSXElementConstructor<any>> | undefined;
49
+ html?: string | undefined;
50
+ }>;
51
+ getFeatures(args: RenderArgsDeserialized): Promise<any>;
52
+ }
53
+ export { type RenderArgsSerialized, type RenderResults, } from '@jbrowse/core/pluggableElementTypes/renderers/ServerSideRendererType';
@@ -0,0 +1,97 @@
1
+ import ServerSideRendererType from '@jbrowse/core/pluggableElementTypes/renderers/ServerSideRendererType';
2
+ import { abortBreakPoint } from '@jbrowse/core/util';
3
+ import { renderToAbstractCanvas } from '@jbrowse/core/util/offscreenCanvasUtils';
4
+ import { toArray } from 'rxjs/operators';
5
+ import { readConfObject } from '@jbrowse/core/configuration';
6
+ import { getAdapter } from '@jbrowse/core/data_adapters/dataAdapterCache';
7
+ export default class HicRenderer extends ServerSideRendererType {
8
+ constructor() {
9
+ super(...arguments);
10
+ this.supportsSVG = true;
11
+ }
12
+ async makeImageData(ctx, props) {
13
+ const { features, config, bpPerPx, signal, resolution, sessionId, adapterConfig, regions, } = props;
14
+ const [region] = regions;
15
+ const { dataAdapter } = await getAdapter(this.pluginManager, sessionId, adapterConfig);
16
+ const res = await dataAdapter.getResolution(bpPerPx / resolution);
17
+ const Color = await import('color').then(f => f.default);
18
+ const w = res / (bpPerPx * Math.sqrt(2));
19
+ const baseColor = Color(readConfObject(config, 'baseColor'));
20
+ if (features.length) {
21
+ const offset = features[0].bin1;
22
+ let maxScore = 0;
23
+ let minBin = 0;
24
+ let maxBin = 0;
25
+ await abortBreakPoint(signal);
26
+ for (let i = 0; i < features.length; i++) {
27
+ const { bin1, bin2, counts } = features[i];
28
+ maxScore = Math.max(counts, maxScore);
29
+ minBin = Math.min(Math.min(bin1, bin2), minBin);
30
+ maxBin = Math.max(Math.max(bin1, bin2), maxBin);
31
+ }
32
+ await abortBreakPoint(signal);
33
+ function horizontallyFlip() {
34
+ ctx.scale(-1, 1);
35
+ const width = (region.end - region.start) / bpPerPx;
36
+ ctx.translate(-width, 0);
37
+ }
38
+ if (region.reversed === true) {
39
+ horizontallyFlip();
40
+ }
41
+ ctx.rotate(-Math.PI / 4);
42
+ let start = Date.now();
43
+ for (let i = 0; i < features.length; i++) {
44
+ const { bin1, bin2, counts } = features[i];
45
+ ctx.fillStyle = readConfObject(config, 'color', {
46
+ count: counts,
47
+ maxScore,
48
+ baseColor,
49
+ });
50
+ ctx.fillRect((bin1 - offset) * w, (bin2 - offset) * w, w, w);
51
+ if (+Date.now() - start > 400) {
52
+ await abortBreakPoint(signal);
53
+ start = +Date.now();
54
+ }
55
+ }
56
+ }
57
+ }
58
+ async render(renderProps) {
59
+ const { config, regions, bpPerPx } = renderProps;
60
+ const [region] = regions;
61
+ const width = (region.end - region.start) / bpPerPx;
62
+ const height = readConfObject(config, 'maxHeight');
63
+ const features = await this.getFeatures(renderProps);
64
+ const res = await renderToAbstractCanvas(width, height, renderProps, ctx => this.makeImageData(ctx, {
65
+ ...renderProps,
66
+ features,
67
+ }));
68
+ const results = await super.render({
69
+ ...renderProps,
70
+ ...res,
71
+ features,
72
+ region: renderProps.regions[0],
73
+ height,
74
+ width,
75
+ });
76
+ return {
77
+ ...results,
78
+ ...res,
79
+ height,
80
+ width,
81
+ };
82
+ }
83
+ async getFeatures(args) {
84
+ const { regions, sessionId, adapterConfig } = args;
85
+ const { dataAdapter } = await getAdapter(this.pluginManager, sessionId, adapterConfig);
86
+ const features = await dataAdapter
87
+ .getFeatures(regions[0], args)
88
+ .pipe(toArray())
89
+ .toPromise();
90
+ // cast to any to avoid return-type conflict, because the
91
+ // types of features returned by our getFeatures are quite
92
+ // different from the base interface
93
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
94
+ return features;
95
+ }
96
+ }
97
+ //# sourceMappingURL=HicRenderer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"HicRenderer.js","sourceRoot":"","sources":["../../src/HicRenderer/HicRenderer.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,10 @@
1
+ import React from 'react';
2
+ import { Region } from '@jbrowse/core/util/types';
3
+ declare const _default: (props: {
4
+ blockKey: string;
5
+ width: number;
6
+ height: number;
7
+ regions: Region[];
8
+ bpPerPx: number;
9
+ }) => React.JSX.Element;
10
+ export default _default;
@@ -0,0 +1,11 @@
1
+ import React from 'react';
2
+ import { PrerenderedCanvas } from '@jbrowse/core/ui';
3
+ import { observer } from 'mobx-react';
4
+ export default observer(function HicRendering(props) {
5
+ const { width, height } = props;
6
+ const canvasWidth = Math.ceil(width);
7
+ // need to call this in render so we get the right observer behavior
8
+ return (React.createElement("div", { style: { position: 'relative', width: canvasWidth, height } },
9
+ React.createElement(PrerenderedCanvas, { ...props, style: { position: 'absolute', left: 0, top: 0 } })));
10
+ });
11
+ //# sourceMappingURL=HicRendering.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"HicRendering.js","sourceRoot":"","sources":["../../../src/HicRenderer/components/HicRendering.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAA;AAEzB,OAAO,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAA;AACpD,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAA;AAErC,eAAe,QAAQ,CAAC,SAAS,YAAY,CAAC,KAM7C;IACC,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,KAAK,CAAA;IAC/B,MAAM,WAAW,GAAG,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA;IACpC,oEAAoE;IACpE,OAAO,CACL,6BAAK,KAAK,EAAE,EAAE,QAAQ,EAAE,UAAU,EAAE,KAAK,EAAE,WAAW,EAAE,MAAM,EAAE;QAC9D,oBAAC,iBAAiB,OACZ,KAAK,EACT,KAAK,EAAE,EAAE,QAAQ,EAAE,UAAU,EAAE,IAAI,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,GAChD,CACE,CACP,CAAA;AACH,CAAC,CAAC,CAAA"}
@@ -0,0 +1,28 @@
1
+ declare const HicRenderer: import("@jbrowse/core/configuration/configurationSchema").ConfigurationSchemaType<{
2
+ /**
3
+ * #slot
4
+ */
5
+ baseColor: {
6
+ type: string;
7
+ description: string;
8
+ defaultValue: string;
9
+ };
10
+ /**
11
+ * #slot
12
+ */
13
+ color: {
14
+ type: string;
15
+ description: string;
16
+ defaultValue: string;
17
+ contextVariable: string[];
18
+ };
19
+ /**
20
+ * #slot
21
+ */
22
+ maxHeight: {
23
+ type: string;
24
+ description: string;
25
+ defaultValue: number;
26
+ };
27
+ }, import("@jbrowse/core/configuration/configurationSchema").ConfigurationSchemaOptions<undefined, undefined>>;
28
+ export default HicRenderer;
@@ -0,0 +1,35 @@
1
+ import { ConfigurationSchema } from '@jbrowse/core/configuration';
2
+ /**
3
+ * #config HicRenderer
4
+ * #category renderer
5
+ */
6
+ function x() { } // eslint-disable-line @typescript-eslint/no-unused-vars
7
+ const HicRenderer = ConfigurationSchema('HicRenderer', {
8
+ /**
9
+ * #slot
10
+ */
11
+ baseColor: {
12
+ type: 'color',
13
+ description: 'base color to be used in the hic alignment',
14
+ defaultValue: '#f00',
15
+ },
16
+ /**
17
+ * #slot
18
+ */
19
+ color: {
20
+ type: 'color',
21
+ description: 'the color of each feature in a hic alignment',
22
+ defaultValue: `jexl:colorString(hsl(alpha(baseColor,min(1,count/(maxScore/20)))))`,
23
+ contextVariable: ['count', 'maxScore', 'baseColor'],
24
+ },
25
+ /**
26
+ * #slot
27
+ */
28
+ maxHeight: {
29
+ type: 'integer',
30
+ description: 'the maximum height to be used in a hic rendering',
31
+ defaultValue: 600,
32
+ },
33
+ }, { explicitlyTyped: true });
34
+ export default HicRenderer;
35
+ //# sourceMappingURL=configSchema.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"configSchema.js","sourceRoot":"","sources":["../../src/HicRenderer/configSchema.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,mBAAmB,EAAE,MAAM,6BAA6B,CAAA;AAEjE;;;GAGG;AACH,SAAS,CAAC,KAAI,CAAC,CAAC,wDAAwD;AAExE,MAAM,WAAW,GAAG,mBAAmB,CACrC,aAAa,EACb;IACE;;OAEG;IACH,SAAS,EAAE;QACT,IAAI,EAAE,OAAO;QACb,WAAW,EAAE,4CAA4C;QACzD,YAAY,EAAE,MAAM;KACrB;IACD;;OAEG;IACH,KAAK,EAAE;QACL,IAAI,EAAE,OAAO;QACb,WAAW,EAAE,8CAA8C;QAC3D,YAAY,EAAE,oEAAoE;QAClF,eAAe,EAAE,CAAC,OAAO,EAAE,UAAU,EAAE,WAAW,CAAC;KACpD;IAED;;OAEG;IACH,SAAS,EAAE;QACT,IAAI,EAAE,SAAS;QACf,WAAW,EAAE,kDAAkD;QAC/D,YAAY,EAAE,GAAG;KAClB;CACF,EACD,EAAE,eAAe,EAAE,IAAI,EAAE,CAC1B,CAAA;AAED,eAAe,WAAW,CAAA"}
@@ -0,0 +1,3 @@
1
+ import PluginManager from '@jbrowse/core/PluginManager';
2
+ declare const _default: (pluginManager: PluginManager) => void;
3
+ export default _default;
@@ -0,0 +1,12 @@
1
+ import ReactComponent from './components/HicRendering';
2
+ import configSchema from './configSchema';
3
+ import HicRenderer from './HicRenderer';
4
+ export default (pluginManager) => {
5
+ pluginManager.addRendererType(() => new HicRenderer({
6
+ name: 'HicRenderer',
7
+ ReactComponent,
8
+ configSchema,
9
+ pluginManager,
10
+ }));
11
+ };
12
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/HicRenderer/index.ts"],"names":[],"mappings":"AAEA,OAAO,cAAc,MAAM,2BAA2B,CAAA;AACtD,OAAO,YAAY,MAAM,gBAAgB,CAAA;AACzC,OAAO,WAAW,MAAM,eAAe,CAAA;AAEvC,eAAe,CAAC,aAA4B,EAAE,EAAE;IAC9C,aAAa,CAAC,eAAe,CAC3B,GAAG,EAAE,CACH,IAAI,WAAW,CAAC;QACd,IAAI,EAAE,aAAa;QACnB,cAAc;QACd,YAAY;QACZ,aAAa;KACd,CAAC,CACL,CAAA;AACH,CAAC,CAAA"}