@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.
- package/LICENSE +201 -0
- package/dist/HicAdapter/HicAdapter.d.ts +32 -0
- package/dist/HicAdapter/HicAdapter.js +85 -0
- package/dist/HicAdapter/HicAdapter.js.map +1 -0
- package/dist/HicAdapter/configSchema.d.ts +13 -0
- package/dist/HicAdapter/configSchema.js +22 -0
- package/dist/HicAdapter/configSchema.js.map +1 -0
- package/dist/HicAdapter/index.d.ts +3 -0
- package/dist/HicAdapter/index.js +39 -0
- package/dist/HicAdapter/index.js.map +1 -0
- package/dist/HicRenderer/HicRenderer.d.ts +53 -0
- package/dist/HicRenderer/HicRenderer.js +126 -0
- package/dist/HicRenderer/HicRenderer.js.map +1 -0
- package/dist/HicRenderer/components/HicRendering.d.ts +10 -0
- package/dist/HicRenderer/components/HicRendering.js +16 -0
- package/dist/HicRenderer/components/HicRendering.js.map +1 -0
- package/dist/HicRenderer/configSchema.d.ts +28 -0
- package/dist/HicRenderer/configSchema.js +37 -0
- package/dist/HicRenderer/configSchema.js.map +1 -0
- package/dist/HicRenderer/index.d.ts +3 -0
- package/dist/HicRenderer/index.js +17 -0
- package/dist/HicRenderer/index.js.map +1 -0
- package/dist/HicTrack/configSchema.d.ts +75 -0
- package/dist/HicTrack/configSchema.js +17 -0
- package/dist/HicTrack/configSchema.js.map +1 -0
- package/dist/HicTrack/index.d.ts +3 -0
- package/dist/HicTrack/index.js +20 -0
- package/dist/HicTrack/index.js.map +1 -0
- package/dist/LinearHicDisplay/configSchema.d.ts +33 -0
- package/dist/LinearHicDisplay/configSchema.js +25 -0
- package/dist/LinearHicDisplay/configSchema.js.map +1 -0
- package/dist/LinearHicDisplay/index.d.ts +3 -0
- package/dist/LinearHicDisplay/index.js +24 -0
- package/dist/LinearHicDisplay/index.js.map +1 -0
- package/dist/LinearHicDisplay/model.d.ts +332 -0
- package/dist/LinearHicDisplay/model.js +95 -0
- package/dist/LinearHicDisplay/model.js.map +1 -0
- package/dist/index.d.ts +7 -0
- package/dist/index.js +56 -0
- package/dist/index.js.map +1 -0
- package/esm/HicAdapter/HicAdapter.d.ts +32 -0
- package/esm/HicAdapter/HicAdapter.js +77 -0
- package/esm/HicAdapter/HicAdapter.js.map +1 -0
- package/esm/HicAdapter/configSchema.d.ts +13 -0
- package/esm/HicAdapter/configSchema.js +20 -0
- package/esm/HicAdapter/configSchema.js.map +1 -0
- package/esm/HicAdapter/index.d.ts +3 -0
- package/esm/HicAdapter/index.js +11 -0
- package/esm/HicAdapter/index.js.map +1 -0
- package/esm/HicRenderer/HicRenderer.d.ts +53 -0
- package/esm/HicRenderer/HicRenderer.js +97 -0
- package/esm/HicRenderer/HicRenderer.js.map +1 -0
- package/esm/HicRenderer/components/HicRendering.d.ts +10 -0
- package/esm/HicRenderer/components/HicRendering.js +11 -0
- package/esm/HicRenderer/components/HicRendering.js.map +1 -0
- package/esm/HicRenderer/configSchema.d.ts +28 -0
- package/esm/HicRenderer/configSchema.js +35 -0
- package/esm/HicRenderer/configSchema.js.map +1 -0
- package/esm/HicRenderer/index.d.ts +3 -0
- package/esm/HicRenderer/index.js +12 -0
- package/esm/HicRenderer/index.js.map +1 -0
- package/esm/HicTrack/configSchema.d.ts +75 -0
- package/esm/HicTrack/configSchema.js +15 -0
- package/esm/HicTrack/configSchema.js.map +1 -0
- package/esm/HicTrack/index.d.ts +3 -0
- package/esm/HicTrack/index.js +15 -0
- package/esm/HicTrack/index.js.map +1 -0
- package/esm/LinearHicDisplay/configSchema.d.ts +33 -0
- package/esm/LinearHicDisplay/configSchema.js +23 -0
- package/esm/LinearHicDisplay/configSchema.js.map +1 -0
- package/esm/LinearHicDisplay/index.d.ts +3 -0
- package/esm/LinearHicDisplay/index.js +19 -0
- package/esm/LinearHicDisplay/index.js.map +1 -0
- package/esm/LinearHicDisplay/model.d.ts +332 -0
- package/esm/LinearHicDisplay/model.js +93 -0
- package/esm/LinearHicDisplay/model.js.map +1 -0
- package/esm/index.d.ts +7 -0
- package/esm/index.js +50 -0
- package/esm/index.js.map +1 -0
- package/package.json +60 -0
- package/src/HicAdapter/HicAdapter.ts +150 -0
- package/src/HicAdapter/configSchema.ts +26 -0
- package/src/HicAdapter/index.ts +15 -0
- package/src/HicRenderer/HicRenderer.tsx +170 -0
- package/src/HicRenderer/components/HicRendering.test.tsx +21 -0
- package/src/HicRenderer/components/HicRendering.tsx +24 -0
- package/src/HicRenderer/components/__snapshots__/HicRendering.test.tsx.snap +14 -0
- package/src/HicRenderer/configSchema.ts +42 -0
- package/src/HicRenderer/index.ts +17 -0
- package/src/HicTrack/configSchema.ts +23 -0
- package/src/HicTrack/index.ts +16 -0
- package/src/LinearHicDisplay/configSchema.ts +33 -0
- package/src/LinearHicDisplay/index.ts +21 -0
- package/src/LinearHicDisplay/model.ts +104 -0
- package/src/declare.d.ts +2 -0
- 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"}
|
package/dist/index.d.ts
ADDED
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,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":"AAAA,OAAO,sBAKN,MAAM,sEAAsE,CAAA;AAE7E,OAAO,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAA;AACpD,OAAO,EAAE,sBAAsB,EAAE,MAAM,yCAAyC,CAAA;AAChF,OAAO,EAAE,OAAO,EAAE,MAAM,gBAAgB,CAAA;AACxC,OAAO,EAAE,cAAc,EAAE,MAAM,6BAA6B,CAAA;AAE5D,OAAO,EAAE,UAAU,EAAE,MAAM,8CAA8C,CAAA;AAoCzE,MAAM,CAAC,OAAO,OAAO,WAAY,SAAQ,sBAAsB;IAA/D;;QACE,gBAAW,GAAG,IAAI,CAAA;IAmHpB,CAAC;IAjHC,KAAK,CAAC,aAAa,CACjB,GAA6B,EAC7B,KAAyC;QAEzC,MAAM,EACJ,QAAQ,EACR,MAAM,EACN,OAAO,EACP,MAAM,EACN,UAAU,EACV,SAAS,EACT,aAAa,EACb,OAAO,GACR,GAAG,KAAK,CAAA;QACT,MAAM,CAAC,MAAM,CAAC,GAAG,OAAO,CAAA;QACxB,MAAM,EAAE,WAAW,EAAE,GAAG,MAAM,UAAU,CACtC,IAAI,CAAC,aAAa,EAClB,SAAS,EACT,aAAa,CACd,CAAA;QACD,MAAM,GAAG,GAAG,MAAO,WAA8B,CAAC,aAAa,CAC7D,OAAO,GAAG,UAAU,CACrB,CAAA;QAED,MAAM,KAAK,GAAG,MAAM,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,CAAA;QACxD,MAAM,CAAC,GAAG,GAAG,GAAG,CAAC,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAA;QACxC,MAAM,SAAS,GAAG,KAAK,CAAC,cAAc,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC,CAAA;QAC5D,IAAI,QAAQ,CAAC,MAAM,EAAE;YACnB,MAAM,MAAM,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC,IAAI,CAAA;YAC/B,IAAI,QAAQ,GAAG,CAAC,CAAA;YAChB,IAAI,MAAM,GAAG,CAAC,CAAA;YACd,IAAI,MAAM,GAAG,CAAC,CAAA;YACd,MAAM,eAAe,CAAC,MAAM,CAAC,CAAA;YAC7B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,QAAQ,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;gBACxC,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAA;gBAC1C,QAAQ,GAAG,IAAI,CAAC,GAAG,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAA;gBACrC,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,MAAM,CAAC,CAAA;gBAC/C,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,MAAM,CAAC,CAAA;aAChD;YACD,MAAM,eAAe,CAAC,MAAM,CAAC,CAAA;YAC7B,SAAS,gBAAgB;gBACvB,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAA;gBAChB,MAAM,KAAK,GAAG,CAAC,MAAM,CAAC,GAAG,GAAG,MAAM,CAAC,KAAK,CAAC,GAAG,OAAO,CAAA;gBACnD,GAAG,CAAC,SAAS,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC,CAAA;YAC1B,CAAC;YACD,IAAI,MAAM,CAAC,QAAQ,KAAK,IAAI,EAAE;gBAC5B,gBAAgB,EAAE,CAAA;aACnB;YACD,GAAG,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,EAAE,GAAG,CAAC,CAAC,CAAA;YACxB,IAAI,KAAK,GAAG,IAAI,CAAC,GAAG,EAAE,CAAA;YACtB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,QAAQ,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;gBACxC,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAA;gBAC1C,GAAG,CAAC,SAAS,GAAG,cAAc,CAAC,MAAM,EAAE,OAAO,EAAE;oBAC9C,KAAK,EAAE,MAAM;oBACb,QAAQ;oBACR,SAAS;iBACV,CAAC,CAAA;gBACF,GAAG,CAAC,QAAQ,CAAC,CAAC,IAAI,GAAG,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,GAAG,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAA;gBAC5D,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,KAAK,GAAG,GAAG,EAAE;oBAC7B,MAAM,eAAe,CAAC,MAAM,CAAC,CAAA;oBAC7B,KAAK,GAAG,CAAC,IAAI,CAAC,GAAG,EAAE,CAAA;iBACpB;aACF;SACF;IACH,CAAC;IAED,KAAK,CAAC,MAAM,CAAC,WAAmC;QAC9C,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,GAAG,WAAW,CAAA;QAChD,MAAM,CAAC,MAAM,CAAC,GAAG,OAAO,CAAA;QACxB,MAAM,KAAK,GAAG,CAAC,MAAM,CAAC,GAAG,GAAG,MAAM,CAAC,KAAK,CAAC,GAAG,OAAO,CAAA;QACnD,MAAM,MAAM,GAAG,cAAc,CAAC,MAAM,EAAE,WAAW,CAAC,CAAA;QAClD,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,WAAW,CAAC,WAAW,CAAC,CAAA;QAEpD,MAAM,GAAG,GAAG,MAAM,sBAAsB,CAAC,KAAK,EAAE,MAAM,EAAE,WAAW,EAAE,GAAG,CAAC,EAAE,CACzE,IAAI,CAAC,aAAa,CAAC,GAAG,EAAE;YACtB,GAAG,WAAW;YACd,QAAQ;SACT,CAAC,CACH,CAAA;QACD,MAAM,OAAO,GAAG,MAAM,KAAK,CAAC,MAAM,CAAC;YACjC,GAAG,WAAW;YACd,GAAG,GAAG;YACN,QAAQ;YACR,MAAM,EAAE,WAAW,CAAC,OAAO,CAAC,CAAC,CAAC;YAC9B,MAAM;YACN,KAAK;SACN,CAAC,CAAA;QAEF,OAAO;YACL,GAAG,OAAO;YACV,GAAG,GAAG;YACN,MAAM;YACN,KAAK;SACN,CAAA;IACH,CAAC;IAED,KAAK,CAAC,WAAW,CAAC,IAA4B;QAC5C,MAAM,EAAE,OAAO,EAAE,SAAS,EAAE,aAAa,EAAE,GAAG,IAAI,CAAA;QAClD,MAAM,EAAE,WAAW,EAAE,GAAG,MAAM,UAAU,CACtC,IAAI,CAAC,aAAa,EAClB,SAAS,EACT,aAAa,CACd,CAAA;QACD,MAAM,QAAQ,GAAG,MAAO,WAAsC;aAC3D,WAAW,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC;aAC7B,IAAI,CAAC,OAAO,EAAE,CAAC;aACf,SAAS,EAAE,CAAA;QACd,yDAAyD;QACzD,0DAA0D;QAC1D,oCAAoC;QACpC,8DAA8D;QAC9D,OAAO,QAAe,CAAA;IACxB,CAAC;CACF"}
|
|
@@ -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,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"}
|