moorhen 0.0.1 → 0.6.2

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 (43) hide show
  1. package/README.md +142 -0
  2. package/baby-gru/CootWorker.js +1 -1071
  3. package/baby-gru/CootWorker.ts +1064 -0
  4. package/baby-gru/monomers/h/HIS.cif +5 -5
  5. package/baby-gru/moorhen.css +280 -0
  6. package/baby-gru/pixmaps/{map.svg → map-grey.svg} +38 -28
  7. package/baby-gru/pixmaps/moorhen-ligand.svg +213 -0
  8. package/baby-gru/pixmaps/secondary-structure-grey.svg +158 -0
  9. package/baby-gru/wasm/RDKit_minimal.js +1 -21
  10. package/baby-gru/wasm/RDKit_minimal.wasm +0 -0
  11. package/baby-gru/wasm/cif_pdb_worker.js +1 -33
  12. package/baby-gru/wasm/coot_env_web.js +1 -5
  13. package/baby-gru/wasm/crystallography_worker.js +1 -610
  14. package/baby-gru/wasm/mini_rsr_worker.js +1 -72
  15. package/baby-gru/wasm/monid_to_pdb_worker.js +1 -253
  16. package/baby-gru/wasm/moorhen.data +2580 -739
  17. package/baby-gru/wasm/moorhen.js +1 -21
  18. package/baby-gru/wasm/moorhen.wasm +0 -0
  19. package/baby-gru/wasm/moorhen.worker.js +1 -1
  20. package/baby-gru/wasm/mtz_arraybuffer_worker.js +1 -59
  21. package/baby-gru/wasm/mtz_worker.js +1 -45
  22. package/baby-gru/wasm/nma_worker.js +1 -103
  23. package/baby-gru/wasm/papaparse.min.js +2 -7
  24. package/baby-gru/wasm/papaparse.min.js.LICENSE.txt +6 -0
  25. package/baby-gru/wasm/pdb_worker.js +1 -282
  26. package/baby-gru/wasm/smiles_to_pdb_worker.js +1 -252
  27. package/baby-gru/wasm/superpose_worker.js +1 -144
  28. package/baby-gru/wasm/web_example.js +1 -21
  29. package/baby-gru/wasm/web_example.wasm +0 -0
  30. package/moorhen.css +1 -276
  31. package/moorhen.js +86 -0
  32. package/moorhen.js.LICENSE.txt +101 -0
  33. package/package.json +72 -51
  34. package/types/emscriptem.d.ts +25 -0
  35. package/types/gemmi.d.ts +115 -0
  36. package/types/index.d.ts +18 -0
  37. package/types/libcoot.d.ts +450 -0
  38. package/types/main.d.ts +428 -0
  39. package/types/mgWebGL.d.ts +398 -0
  40. package/types/moorhen.d.ts +815 -0
  41. package/baby-gru/pixmaps/diff-map.png +0 -0
  42. package/baby-gru/tutorials/legend.html +0 -3
  43. /package/baby-gru/{keyboard-blank.svg → pixmaps/keyboard-blank.svg} +0 -0
@@ -0,0 +1,815 @@
1
+ import React from "react"
2
+ import { emscriptem } from "./emscriptem";
3
+ import { gemmi } from "./gemmi";
4
+ import { webGL } from "./mgWebGL";
5
+ import { MoorhenCommandCentre } from "../moorhen";
6
+
7
+ export namespace moorhen {
8
+
9
+ interface Preferences {
10
+ name: string;
11
+ static defaultPreferencesValues: PreferencesValues;
12
+ localStorageInstance: {
13
+ clear: () => void;
14
+ setItem: (key: string, value: any) => Promise<string>;
15
+ getItem: (key: string) => Promise<any>;
16
+ };
17
+ }
18
+
19
+ type ResidueInfo = {
20
+ resCode: string;
21
+ resNum: number;
22
+ cid: string;
23
+ }
24
+
25
+ type LigandInfo = {
26
+ resName: string;
27
+ chainName: string;
28
+ resNum: string;
29
+ modelName: string;
30
+ cid: string;
31
+ }
32
+
33
+ type Sequence = {
34
+ name: string;
35
+ chain: string;
36
+ type: number;
37
+ sequence: ResidueInfo[];
38
+ }
39
+
40
+ type ResidueSpec = {
41
+ mol_name: string;
42
+ mol_no: string;
43
+ chain_id: string;
44
+ res_no: number;
45
+ res_name: string;
46
+ atom_name: string;
47
+ ins_code: string;
48
+ alt_conf: string;
49
+ cid: string
50
+ }
51
+
52
+ type AtomInfo = {
53
+ pos: [number, number, number];
54
+ x: number;
55
+ y: number;
56
+ z: number;
57
+ charge: number;
58
+ element: emscriptem.instance<string>;
59
+ symbol: string;
60
+ tempFactor: number;
61
+ serial: number;
62
+ name: string;
63
+ has_altloc: boolean;
64
+ alt_loc: string;
65
+ mol_name: string;
66
+ chain_id: string;
67
+ res_no: string;
68
+ res_name: string;
69
+ label: string;
70
+ }
71
+
72
+ type DisplayObject = {
73
+ symmetryMatrices: any;
74
+ [attr: string]: any;
75
+ }
76
+
77
+ type cootBondOptions = {
78
+ smoothness: number;
79
+ width: number;
80
+ atomRadiusBondRatio: number;
81
+ }
82
+
83
+ type ColourRule = {
84
+ args: (string | number)[];
85
+ color?: string;
86
+ isMultiColourRule: boolean;
87
+ ruleType: string;
88
+ label: string;
89
+ }
90
+
91
+ interface Molecule {
92
+ animateRefine(n_cyc: number, n_iteration: number, final_n_cyc?: number): Promise<void>;
93
+ refineResidueRange(chainId: string, start: number, stop: number, ncyc?: number, redraw?: boolean): Promise<void>;
94
+ SSMSuperpose(movChainId: string, refMolNo: number, refChainId: string): Promise<WorkerResponse>;
95
+ refineResiduesUsingAtomCid(cid: string, mode: string, ncyc?: number, redraw?: boolean): Promise<void>;
96
+ deleteCid(cid: string, redraw?: boolean): Promise<{first: number, second: number}>;
97
+ getNumberOfAtoms(): Promise<number>;
98
+ moveMoleculeHere(x: number, y: number, z: number): Promise<void>;
99
+ checkHasGlycans(): Promise<boolean>;
100
+ fitLigandHere(mapMolNo: number, ligandMolNo: number, redraw?: boolean, useConformers?: boolean, conformerCount?: number): Promise<Molecule[]>;
101
+ checkIsLigand(): boolean;
102
+ removeRepresentation(representationId: string): void;
103
+ addRepresentation(style: string, cid: string, isCustom?: boolean, colour?: ColourRule[], bondOptions?: cootBondOptions, applyColourToNonCarbonAtoms?: boolean): Promise<MoleculeRepresentation>;
104
+ getNeighborResiduesCids(selectionCid: string, maxDist: number): Promise<string[]>;
105
+ drawWithStyleFromMesh(style: string, meshObjects: any[], cid?: string): Promise<void>;
106
+ updateWithMovedAtoms(movedResidues: AtomInfo[][]): Promise<void>;
107
+ transformedCachedAtomsAsMovedAtoms(selectionCid?: string): AtomInfo[][];
108
+ copyFragmentUsingCid(cid: string, doRecentre?: boolean, style?: string): Promise<Molecule>;
109
+ hideCid(cid: string, redraw?: boolean): Promise<void>;
110
+ unhideAll(redraw?: boolean): Promise<void>;
111
+ drawUnitCell(): void;
112
+ gemmiAtomsForCid: (cid: string, omitExcludedCids?: boolean) => Promise<AtomInfo[]>;
113
+ mergeMolecules(otherMolecules: Molecule[], doHide?: boolean): Promise<void>;
114
+ setBackgroundColour(backgroundColour: [number, number, number, number]): void;
115
+ addDict(fileContent: string): Promise<void>;
116
+ addDictShim(fileContent: string): void;
117
+ toggleSymmetry(): Promise<void>;
118
+ getDict(newTlc: string): string;
119
+ addLigandOfType(resType: string, fromMolNo?: number): Promise<WorkerResponse>;
120
+ updateAtoms(): Promise<void>;
121
+ rigidBodyFit(cidsString: string, mapNo: number, redraw?: boolean): Promise<void>;
122
+ generateSelfRestraints(cid?: string, maxRadius?: number): Promise<void>;
123
+ clearExtraRestraints(): Promise<WorkerResponse>;
124
+ redo(): Promise<void>;
125
+ undo(): Promise<void>;
126
+ show(style: string, cid?: string): void;
127
+ setSymmetryRadius(radius: number): Promise<void>;
128
+ drawSymmetry: (fetchSymMatrix?: boolean) => Promise<void>;
129
+ getUnitCellParams(): { a: number; b: number; c: number; alpha: number; beta: number; gamma: number; };
130
+ replaceModelWithFile(fileUrl: string, molName: string): Promise<void>
131
+ delete(): Promise<WorkerResponse>
132
+ fetchDefaultColourRules(): Promise<void>;
133
+ fetchIfDirtyAndDraw(arg0: string): Promise<void>;
134
+ drawEnvironment: (cid: string, labelled?: boolean) => Promise<void>;
135
+ centreOn: (selectionCid?: string, animate?: boolean) => Promise<void>;
136
+ drawHover: (cid: string) => Promise<void>;
137
+ drawResidueSelection: (cid: string) => Promise<void>;
138
+ clearBuffersOfStyle: (style: string) => void;
139
+ loadToCootFromURL: (inputFile: string, molName: string, options?: RequestInit) => Promise<Molecule>;
140
+ applyTransform: () => Promise<void>;
141
+ getAtoms(format?: string): Promise<string>;
142
+ hide: (style: string, cid?: string) => void;
143
+ redraw: () => Promise<void>;
144
+ setAtomsDirty: (newVal: boolean) => void;
145
+ hasVisibleBuffers: (excludeBuffers?: string[]) => boolean;
146
+ centreAndAlignViewOn(selectionCid: string, animate?: boolean): Promise<void>;
147
+ buffersInclude: (bufferIn: { id: string; }) => boolean;
148
+ redrawRepresentation: (id: string) => Promise<void>;
149
+ type: string;
150
+ isLigand: boolean;
151
+ excludedCids: string[];
152
+ commandCentre: React.RefObject<CommandCentre>;
153
+ glRef: React.RefObject<webGL.MGWebGL>;
154
+ atomsDirty: boolean;
155
+ isVisible: boolean;
156
+ name: string;
157
+ molNo: number;
158
+ gemmiStructure: gemmi.Structure;
159
+ sequences: Sequence[];
160
+ ligands: LigandInfo[];
161
+ atomCount: number;
162
+ ligandDicts: {[comp_id: string]: string};
163
+ connectedToMaps: number[];
164
+ excludedSelections: string[];
165
+ symmetryOn: boolean;
166
+ symmetryRadius : number;
167
+ symmetryMatrices: number[][][];
168
+ gaussianSurfaceSettings: {
169
+ sigma: number;
170
+ countourLevel: number;
171
+ boxRadius: number;
172
+ gridScale: number;
173
+ };
174
+ isDarkBackground: boolean;
175
+ representations: MoleculeRepresentation[];
176
+ defaultBondOptions: cootBondOptions;
177
+ displayObjectsTransformation: { origin: [number, number, number], quat: any, centre: [number, number, number] }
178
+ uniqueId: string;
179
+ defaultColourRules: ColourRule[];
180
+ restraints: {maxRadius: number, cid: string}[];
181
+ monomerLibraryPath: string;
182
+ hoverRepresentation: MoleculeRepresentation;
183
+ unitCellRepresentation: MoleculeRepresentation;
184
+ environmentRepresentation: MoleculeRepresentation;
185
+ selectionRepresentation: MoleculeRepresentation;
186
+ hasDNA: boolean;
187
+ hasGlycans: boolean;
188
+ }
189
+
190
+ type RepresentationStyles = 'VdwSpheres' | 'ligands' | 'CAs' | 'CBs' | 'CDs' | 'gaussian' | 'allHBonds' | 'rama' |
191
+ 'rotamer' | 'CRs' | 'MolecularSurface' | 'DishyBases' | 'VdWSurface' | 'Calpha' | 'unitCell' | 'hover' | 'environment' |
192
+ 'ligand_environment' | 'contact_dots' | 'chemical_features' | 'ligand_validation' | 'glycoBlocks' | 'restraints' | 'residueSelection'
193
+
194
+ interface MoleculeRepresentation {
195
+ setApplyColourToNonCarbonAtoms(newVal: boolean): void;
196
+ setBondOptions(bondOptions: cootBondOptions): void;
197
+ setStyle(style: string): void;
198
+ setUseDefaultColourRules(arg0: boolean): void;
199
+ setColourRules(ruleList: ColourRule[]): void;
200
+ buildBuffers(arg0: DisplayObject[]): Promise<void>;
201
+ setBuffers(meshObjects: DisplayObject[]): void;
202
+ drawSymmetry(): void
203
+ deleteBuffers(): void;
204
+ draw(): Promise<void>;
205
+ redraw(): Promise<void>;
206
+ setParentMolecule(arg0: Molecule): void;
207
+ show(): void;
208
+ hide(): void;
209
+ setAtomBuffers(arg0: AtomInfo[]): void;
210
+ bondOptions: cootBondOptions;
211
+ useDefaultColourRules: boolean;
212
+ useDefaultBondOptions: boolean;
213
+ applyColourToNonCarbonAtoms: boolean;
214
+ uniqueId: string;
215
+ style: string;
216
+ cid: string;
217
+ visible: boolean;
218
+ buffers: DisplayObject[];
219
+ commandCentre: React.RefObject<CommandCentre>;
220
+ glRef: React.RefObject<webGL.MGWebGL>;
221
+ parentMolecule: Molecule;
222
+ colourRules: ColourRule[];
223
+ styleHasAtomBuffers: boolean;
224
+ styleHasSymmetry: boolean;
225
+ isCustom: boolean;
226
+ styleHasColourRules: boolean;
227
+ }
228
+
229
+ type ResidueSelection = {
230
+ molecule: null | moorhen.Molecule;
231
+ first: null | string;
232
+ second: null | string;
233
+ cid: null | string;
234
+ }
235
+
236
+ type HoveredAtom = {
237
+ molecule: Molecule | null,
238
+ cid: string | null
239
+ }
240
+
241
+ interface History {
242
+ reset(): void;
243
+ setSkipTracking(arg0: boolean): void;
244
+ setCurrentHead(uniqueId: string): void;
245
+ setCommandCentre(arg0: CommandCentre): void;
246
+ addEntry: (newEntry: cootCommandKwargs) => Promise<void>;
247
+ getEntriesForMolNo: (molNo: number) => cootCommandKwargs[];
248
+ getModifiedMolNo: () => number[];
249
+ lastModifiedMolNo: () => number;
250
+ rebase: (id: string) => void;
251
+ entries: HistoryEntry[];
252
+ headId: string;
253
+ headIsDetached: boolean;
254
+ }
255
+
256
+ interface HistoryEntry extends cootCommandKwargs{
257
+ uniqueId: string;
258
+ associatedBackupKey: string;
259
+ label: string;
260
+ }
261
+
262
+ interface CommandCentre {
263
+ urlPrefix: string;
264
+ cootWorker: Worker;
265
+ history: History;
266
+ activeMessages: WorkerMessage[];
267
+ unhook: () => void;
268
+ onCootInitialized: null | ( () => void );
269
+ onConsoleChanged: null | ( (msg: string) => void );
270
+ onNewCommand : null | ( (kwargs: any) => void );
271
+ onActiveMessagesChanged: null | ( (activeMessages: WorkerMessage[]) => void );
272
+ cootCommandList(commandList: cootCommandKwargs[]): Promise<WorkerResponse>;
273
+ cootCommand: (kwargs: cootCommandKwargs, doJournal?: boolean) => Promise<WorkerResponse>;
274
+ postMessage: (kwargs: cootCommandKwargs) => Promise<WorkerResponse>;
275
+ }
276
+
277
+ interface cootCommandKwargs {
278
+ message?: string;
279
+ data?: {};
280
+ returnType?: string;
281
+ command?: string;
282
+ commandArgs?: any[];
283
+ changesMolecules?: number[];
284
+ [key: string]: any;
285
+ }
286
+
287
+ type WorkerMessage = {
288
+ consoleMessage?: string;
289
+ messageId: string;
290
+ handler: (reply: WorkerResponse) => void;
291
+ kwargs: cootCommandKwargs;
292
+ }
293
+
294
+ type WorkerResult<T = any> = {
295
+ result: {
296
+ status: string;
297
+ result: T;
298
+ [key: string]: any;
299
+ }
300
+ command: string;
301
+ messageId: string;
302
+ myTimeStamp: string;
303
+ message: string;
304
+ consoleMessage: string;
305
+ }
306
+
307
+ type WorkerResponse<T = any> = {
308
+ data: WorkerResult<T>;
309
+ }
310
+
311
+ type createCovLinkAtomInput = {
312
+ selectedMolNo: number;
313
+ selectedAtom: string;
314
+ deleteAtom: boolean;
315
+ deleteSelectedAtom: string;
316
+ changeAtomCharge: boolean;
317
+ changeSelectedAtomCharge: string;
318
+ newAtomCharge: string;
319
+ changeBondOrder: boolean;
320
+ changeSelectedBondOrder: string;
321
+ newBondOrder: string;
322
+ }
323
+
324
+ interface AceDRGInstance {
325
+ createCovalentLink: (arg0: createCovLinkAtomInput, arg1: createCovLinkAtomInput) => void;
326
+ }
327
+
328
+ type selectedMtzColumns = {
329
+ F?: string;
330
+ PHI?: string;
331
+ Fobs?: string;
332
+ SigFobs?: string;
333
+ FreeR?: string;
334
+ isDifference?: boolean;
335
+ useWeight?: boolean;
336
+ calcStructFact?: any;
337
+ }
338
+
339
+ interface ScreenRecorder {
340
+ rec: MediaRecorder;
341
+ chunks: Blob[];
342
+ glRef: React.RefObject<webGL.MGWebGL>;
343
+ canvasRef: React.RefObject<HTMLCanvasElement>;
344
+ _isRecording: boolean;
345
+ stopRecording: () => void;
346
+ startRecording: () => void;
347
+ isRecording: () => boolean;
348
+ downloadVideo: (blob: Blob) => Promise<void>;
349
+ takeScreenShot: (fileName: string) => void;
350
+ }
351
+
352
+ interface Map {
353
+ getHistogram(nBins?: number, zoomFactor?: number): Promise<libcootApi.HistogramInfoJS>;
354
+ setMapWeight(weight?: number): Promise<WorkerResponse>;
355
+ estimateMapWeight(): Promise<void>;
356
+ setAlpha(alpha: number, redraw?: boolean): Promise<void>;
357
+ centreOnMap(): Promise<void>;
358
+ getSuggestedSettings(): Promise<void>;
359
+ duplicate(): Promise<Map>;
360
+ makeCootUnlive(): void;
361
+ makeCootLive(): void;
362
+ setColour(r: number, g: number, b: number, redraw?: boolean): Promise<void> ;
363
+ setDiffMapColour(type: 'positiveDiffColour' | 'negativeDiffColour', r: number, g: number, b: number, redraw?: boolean): Promise<void> ;
364
+ fetchMapRmsd(): Promise<number>;
365
+ fetchSuggestedLevel(): Promise<number>;
366
+ fetchMapCentre(): Promise<[number, number, number]>;
367
+ replaceMapWithMtzFile(fileUrl: RequestInfo | URL, name: string, selectedColumns: selectedMtzColumns, mapColour?: { [type: string]: {r: number, g: number, b: number} }): Promise<void>;
368
+ associateToReflectionData (selectedColumns: selectedMtzColumns, reflectionData: Uint8Array | ArrayBuffer): Promise<void>;
369
+ delete(): Promise<void>
370
+ doCootContour(x: number, y: number, z: number, radius: number, contourLevel: number): Promise<void>;
371
+ fetchReflectionData(): Promise<WorkerResponse<Uint8Array>>;
372
+ getMap(): Promise<WorkerResponse>;
373
+ loadToCootFromMtzURL(url: RequestInfo | URL, name: string, selectedColumns: selectedMtzColumns, options?: RequestInit): Promise<Map>;
374
+ loadToCootFromMapURL(url: RequestInfo | URL, name: string, isDiffMap?: boolean, options?: RequestInit): Promise<Map>;
375
+ setActive(): Promise<void>;
376
+ setupContourBuffers(objects: any[], keepCootColours?: boolean): void;
377
+ setOtherMapForColouring(molNo: number, min?: number, max?: number): void;
378
+ isEM: boolean;
379
+ suggestedContourLevel: number;
380
+ suggestedRadius: number;
381
+ mapCentre: [number, number, number];
382
+ type: string;
383
+ name: string;
384
+ molNo: number;
385
+ commandCentre: React.RefObject<CommandCentre>;
386
+ glRef: React.RefObject<webGL.MGWebGL>;
387
+ contourLevel: number;
388
+ mapRadius: number;
389
+ mapColour: [number, number, number, number];
390
+ webMGContour: boolean;
391
+ cootContour: boolean;
392
+ displayObjects: any;
393
+ litLines: boolean;
394
+ solid: boolean;
395
+ isDifference: boolean;
396
+ hasReflectionData: boolean;
397
+ selectedColumns: selectedMtzColumns;
398
+ associatedReflectionFileName: string;
399
+ uniqueId: string;
400
+ otherMapForColouring: {molNo: number, min: number, max: number};
401
+ mapRmsd: number;
402
+ suggestedMapWeight: number;
403
+ rgba: {
404
+ mapColour: {r: number, g: number, b: number};
405
+ positiveDiffColour: {r: number, g: number, b: number};
406
+ negativeDiffColour: {r: number, g: number, b: number};
407
+ a: number;
408
+ }
409
+ }
410
+
411
+ interface backupKey {
412
+ name?: string;
413
+ label?: string;
414
+ dateTime: string;
415
+ type: string;
416
+ molNames: string[];
417
+ mapNames?: string[];
418
+ mtzNames?: string[];
419
+ }
420
+
421
+ type moleculeSessionData = {
422
+ name: string;
423
+ molNo: number;
424
+ pdbData: string;
425
+ representations: { cid: string, style: string, isCustom: boolean, colourRules: ColourRule[], bondOptions: cootBondOptions }[];
426
+ defaultBondOptions: cootBondOptions;
427
+ defaultColourRules: ColourRule[];
428
+ connectedToMaps: number[];
429
+ ligandDicts: {[comp_id: string]: string};
430
+ }
431
+
432
+ type mapDataSession = {
433
+ name: string;
434
+ molNo: number;
435
+ uniqueId: string;
436
+ mapData: Uint8Array;
437
+ reflectionData: Uint8Array;
438
+ cootContour: boolean;
439
+ contourLevel: number;
440
+ radius: number;
441
+ colour: [number, number, number, number];
442
+ litLines: boolean;
443
+ isDifference: boolean;
444
+ selectedColumns: selectedMtzColumns;
445
+ hasReflectionData: boolean;
446
+ associatedReflectionFileName: string;
447
+ }
448
+
449
+ type viewDataSession = {
450
+ origin: [number, number, number];
451
+ backgroundColor: [number, number, number, number];
452
+ ambientLight: [number, number, number, number];
453
+ diffuseLight: [number, number, number, number];
454
+ lightPosition: [number, number, number, number];
455
+ specularLight: [number, number, number, number];
456
+ fogStart: number;
457
+ fogEnd: number;
458
+ zoom: number;
459
+ doDrawClickedAtomLines: boolean;
460
+ clipStart: number;
461
+ clipEnd: number;
462
+ quat4: any[];
463
+ }
464
+
465
+ type backupSession = {
466
+ version: string;
467
+ includesAdditionalMapData: boolean;
468
+ moleculeData: moleculeSessionData[];
469
+ mapData: mapDataSession[];
470
+ viewData: viewDataSession;
471
+ activeMapIndex: number;
472
+ }
473
+
474
+ interface TimeCapsule {
475
+ setBusy: (arg0: boolean) => void;
476
+ onIsBusyChange: (arg0: boolean) => void;
477
+ getSortedKeys(): Promise<backupKey[]>;
478
+ cleanupUnusedDataFiles(): Promise<void>;
479
+ removeBackup(key: string): Promise<void>;
480
+ updateDataFiles(): Promise<(string | void)[]>;
481
+ createBackup(keyString: string, sessionString: string): Promise<string>;
482
+ fetchSession(arg0: boolean): Promise<backupSession>;
483
+ moleculesRef: React.RefObject<Molecule[]>;
484
+ mapsRef: React.RefObject<Map[]>;
485
+ glRef: React.RefObject<webGL.MGWebGL>;
486
+ activeMapRef: React.RefObject<Map>;
487
+ busy: boolean;
488
+ modificationCount: number;
489
+ modificationCountBackupThreshold: number;
490
+ maxBackupCount: number;
491
+ version: string;
492
+ disableBackups: boolean;
493
+ storageInstance: LocalStorageInstance;
494
+ addModification: () => Promise<string>;
495
+ init: () => Promise<void>;
496
+ retrieveBackup: (arg0: string) => Promise<string | ArrayBuffer>;
497
+ }
498
+
499
+ type AtomRightClickEventInfo = {
500
+ atom: {label: string};
501
+ buffer: {id: string};
502
+ coords: string,
503
+ pageX: number;
504
+ pageY: number;
505
+ }
506
+
507
+ type AtomRightClickEvent = CustomEvent<AtomRightClickEventInfo>
508
+
509
+ type AtomDraggedEvent = CustomEvent<{ atom: {
510
+ atom: {
511
+ label: string;
512
+ };
513
+ buffer: any;
514
+ } }>
515
+
516
+ type OriginUpdateEvent = CustomEvent<{ origin: [number, number, number]; }>
517
+
518
+ type WheelContourLevelEvent = CustomEvent<{ factor: number; }>
519
+
520
+ type MapRadiusChangeEvent = CustomEvent<{ factor: number; }>
521
+
522
+ type ScoresUpdateEvent = CustomEvent<{
523
+ origin: [number, number, number];
524
+ modifiedMolecule: number;
525
+ }>
526
+
527
+ type ConnectMapsInfo = {
528
+ molecule: number;
529
+ maps: [number, number, number];
530
+ uniqueMaps: number[];
531
+ }
532
+
533
+ type AtomClickedEvent = CustomEvent<{
534
+ buffer: { id: string };
535
+ atom: { label: string };
536
+ isResidueSelection: boolean;
537
+ }>
538
+
539
+ type ConnectMapsEvent = CustomEvent<ConnectMapsInfo>
540
+
541
+ type NewMapContourEvent = CustomEvent<{
542
+ molNo: number;
543
+ mapRadius: number;
544
+ cootContour: boolean;
545
+ contourLevel: number;
546
+ mapColour: [number, number, number, number],
547
+ litLines: boolean;
548
+ }>
549
+
550
+ interface LocalStorageInstance {
551
+ clear: () => Promise<void>;
552
+ keys: () => Promise<string[]>;
553
+ setItem: (key: string, value: string) => Promise<string>;
554
+ removeItem: (key: string) => Promise<void>;
555
+ getItem: (key: string) => Promise<string>;
556
+ }
557
+
558
+ type Shortcut = {
559
+ modifiers: string[];
560
+ keyPress: string;
561
+ label: string;
562
+ viewOnly: boolean;
563
+ }
564
+
565
+ interface ContextSetters {
566
+ setDefaultMapSamplingRate: React.Dispatch<React.SetStateAction<number>>;
567
+ setDoShadowDepthDebug: React.Dispatch<React.SetStateAction<boolean>>;
568
+ setDefaultBackgroundColor: React.Dispatch<React.SetStateAction<[number, number, number, number]>>;
569
+ setDoShadow: React.Dispatch<React.SetStateAction<boolean>>;
570
+ setDoSSAO: React.Dispatch<React.SetStateAction<boolean>>;
571
+ setDoOutline: React.Dispatch<React.SetStateAction<boolean>>;
572
+ setDoSpinTest: React.Dispatch<React.SetStateAction<boolean>>;
573
+ setClipCap: React.Dispatch<React.SetStateAction<boolean>>;
574
+ setResetClippingFogging: React.Dispatch<React.SetStateAction<boolean>>;
575
+ setUseOffScreenBuffers: React.Dispatch<React.SetStateAction<boolean>>;
576
+ setDepthBlurRadius: React.Dispatch<React.SetStateAction<number>>;
577
+ setDepthBlurDepth: React.Dispatch<React.SetStateAction<number>>;
578
+ setSsaoRadius: React.Dispatch<React.SetStateAction<number>>;
579
+ setSsaoBias: React.Dispatch<React.SetStateAction<number>>;
580
+ setDoPerspectiveProjection: React.Dispatch<React.SetStateAction<boolean>>;
581
+ setDrawInteractions: React.Dispatch<React.SetStateAction<boolean>>;
582
+ setDrawMissingLoops: React.Dispatch<React.SetStateAction<boolean>>;
583
+ setDrawAxes: React.Dispatch<React.SetStateAction<boolean>>;
584
+ setDrawCrosshairs: React.Dispatch<React.SetStateAction<boolean>>;
585
+ setDrawFPS: React.Dispatch<React.SetStateAction<boolean>>;
586
+ setDefaultExpandDisplayCards: React.Dispatch<React.SetStateAction<boolean>>;
587
+ setEnableRefineAfterMod: React.Dispatch<React.SetStateAction<boolean>>;
588
+ setDefaultMapLitLines: React.Dispatch<React.SetStateAction<boolean>>;
589
+ setMapLineWidth: React.Dispatch<React.SetStateAction<number>>;
590
+ setAtomLabelDepthMode: React.Dispatch<React.SetStateAction<boolean>>;
591
+ setMouseSensitivity: React.Dispatch<React.SetStateAction<number>>;
592
+ setShowShortcutToast: React.Dispatch<React.SetStateAction<boolean>>;
593
+ setMakeBackups: React.Dispatch<React.SetStateAction<boolean>>;
594
+ setContourWheelSensitivityFactor: React.Dispatch<React.SetStateAction<number>>;
595
+ setDevMode: React.Dispatch<React.SetStateAction<boolean>>;
596
+ setEnableTimeCapsule: React.Dispatch<React.SetStateAction<boolean>>;
597
+ setShowScoresToast: React.Dispatch<React.SetStateAction<boolean>>;
598
+ setDefaultMapSurface: React.Dispatch<React.SetStateAction<boolean>>;
599
+ setDefaultBondSmoothness: React.Dispatch<React.SetStateAction<number>>;
600
+ setGLLabelsFontFamily: React.Dispatch<React.SetStateAction<string>>;
601
+ setGLLabelsFontSize: React.Dispatch<React.SetStateAction<number>>;
602
+ setMaxBackupCount: React.Dispatch<React.SetStateAction<number>>;
603
+ setModificationCountBackupThreshold: React.Dispatch<React.SetStateAction<number>>;
604
+ setShortcutOnHoveredAtom: React.Dispatch<React.SetStateAction<boolean>>;
605
+ setZoomWheelSensitivityFactor: React.Dispatch<React.SetStateAction<number>>;
606
+ setShortCuts: React.Dispatch<React.SetStateAction<string>>;
607
+ setDefaultUpdatingScores: React.Dispatch<{
608
+ action: 'Add' | 'Remove' | 'Overwrite';
609
+ item?: string;
610
+ items?: string[];
611
+ }>;
612
+ setTransparentModalsOnMouseOut: React.Dispatch<React.SetStateAction<boolean>>;
613
+ }
614
+
615
+ interface PreferencesValues {
616
+ version?: string;
617
+ isMounted?: boolean;
618
+ defaultMapSamplingRate: number;
619
+ transparentModalsOnMouseOut: boolean;
620
+ defaultBackgroundColor: [number, number, number, number];
621
+ atomLabelDepthMode: boolean;
622
+ enableTimeCapsule: boolean;
623
+ defaultExpandDisplayCards: boolean;
624
+ defaultMapLitLines: boolean;
625
+ enableRefineAfterMod: boolean;
626
+ drawCrosshairs: boolean;
627
+ drawAxes: boolean;
628
+ drawFPS: boolean;
629
+ drawMissingLoops: boolean;
630
+ drawInteractions: boolean;
631
+ doPerspectiveProjection: boolean;
632
+ useOffScreenBuffers: boolean;
633
+ depthBlurRadius: number;
634
+ depthBlurDepth: number;
635
+ ssaoBias: number;
636
+ ssaoRadius: number;
637
+ doShadowDepthDebug: boolean;
638
+ doShadow: boolean;
639
+ doSSAO: boolean;
640
+ doOutline: boolean;
641
+ GLLabelsFontFamily: string;
642
+ GLLabelsFontSize: number;
643
+ doSpinTest: boolean;
644
+ mouseSensitivity: number;
645
+ zoomWheelSensitivityFactor: number;
646
+ contourWheelSensitivityFactor: number;
647
+ mapLineWidth: number;
648
+ makeBackups: boolean;
649
+ showShortcutToast: boolean;
650
+ defaultMapSurface: boolean;
651
+ defaultBondSmoothness: number,
652
+ showScoresToast: boolean;
653
+ shortcutOnHoveredAtom: boolean;
654
+ resetClippingFogging: boolean;
655
+ clipCap: boolean;
656
+ defaultUpdatingScores: string[],
657
+ maxBackupCount: number;
658
+ modificationCountBackupThreshold: number;
659
+ devMode: boolean;
660
+ shortCuts: string | {
661
+ [label: string]: Shortcut;
662
+ };
663
+ }
664
+
665
+ interface Context extends ContextSetters, PreferencesValues { }
666
+
667
+ type ContextButtonProps = {
668
+ mode: 'context';
669
+ monomerLibraryPath: string;
670
+ urlPrefix: string;
671
+ commandCentre: React.RefObject<CommandCentre>
672
+ selectedMolecule: Molecule;
673
+ chosenAtom: ResidueSpec;
674
+ glRef: React.RefObject<webGL.MGWebGL>;
675
+ setOverlayContents: React.Dispatch<React.SetStateAction<JSX.Element>>;
676
+ setShowOverlay: React.Dispatch<React.SetStateAction<boolean>>;
677
+ timeCapsuleRef: React.RefObject<TimeCapsule>;
678
+ setToolTip: React.Dispatch<React.SetStateAction<string>>;
679
+ setShowContextMenu: React.Dispatch<React.SetStateAction<false | AtomRightClickEventInfo>>;
680
+ setOpacity: React.Dispatch<React.SetStateAction<number>>;
681
+ setOverrideMenuContents: React.Dispatch<React.SetStateAction<JSX.Element | boolean>>;
682
+ showContextMenu: false | AtomRightClickEventInfo;
683
+ defaultActionButtonSettings: actionButtonSettings;
684
+ setDefaultActionButtonSettings: (arg0: {key: string; value: string}) => void;
685
+ }
686
+
687
+ interface ContainerRefs {
688
+ glRef: React.MutableRefObject<null | webGL.MGWebGL>;
689
+ timeCapsuleRef: React.MutableRefObject<null | TimeCapsule>;
690
+ commandCentre: React.MutableRefObject<CommandCentre>;
691
+ videoRecorderRef: React.MutableRefObject<null | ScreenRecorder>;
692
+ moleculesRef: React.MutableRefObject<null | Molecule[]>;
693
+ mapsRef: React.MutableRefObject<null | Map[]>;
694
+ activeMapRef: React.MutableRefObject<Map>;
695
+ lastHoveredAtomRef: React.MutableRefObject<null | HoveredAtom>;
696
+ }
697
+
698
+ interface ContainerOptionalProps {
699
+ onUserPreferencesChange: (key: string, value: any) => void;
700
+ disableFileUploads: boolean;
701
+ urlPrefix: string;
702
+ extraNavBarMenus: {name: string; ref: React.RefObject<any> ; icon: JSX.Element; JSXElement: JSX.Element}[];
703
+ extraNavBarModals: {name: string; ref: React.RefObject<any> ; icon: JSX.Element; JSXElement: JSX.Element; show: boolean; setShow: React.Dispatch<React.SetStateAction<boolean>>;}[];
704
+ viewOnly: boolean;
705
+ extraDraggableModals: JSX.Element[];
706
+ monomerLibraryPath: string;
707
+ setMoorhenDimensions?: null | ( () => [number, number] );
708
+ extraFileMenuItems: JSX.Element[];
709
+ allowScripting: boolean;
710
+ backupStorageInstance?: any;
711
+ extraEditMenuItems: JSX.Element[];
712
+ extraCalculateMenuItems: JSX.Element[];
713
+ aceDRGInstance: AceDRGInstance | null;
714
+ includeNavBarMenuNames: string[]
715
+ }
716
+
717
+ interface ContainerProps extends Partial<ContainerRefs>, Partial<ContainerOptionalProps> { }
718
+
719
+ interface CollectedProps extends ContainerRefs, ContainerOptionalProps { }
720
+
721
+ interface State {
722
+ molecules: Molecule[];
723
+ maps: Map[];
724
+ canvasStates: {
725
+ backgroundColor: [number, number, number, number];
726
+ height: number;
727
+ width: number;
728
+ isDark: boolean
729
+ };
730
+ mapSettings: {
731
+ defaultMapSamplingRate: number;
732
+ defaultMapLitLines: boolean;
733
+ mapLineWidth: number;
734
+ defaultMapSurface: boolean;
735
+ };
736
+ mouseSettings: {
737
+ contourWheelSensitivityFactor: number;
738
+ zoomWheelSensitivityFactor: number;
739
+ mouseSensitivity: number;
740
+ };
741
+ backupSettings: {
742
+ enableTimeCapsule: boolean;
743
+ makeBackups: boolean;
744
+ maxBackupCount: number;
745
+ modificationCountBackupThreshold: number;
746
+ };
747
+ updatingMapScoresSettings: {
748
+ defaultUpdatingScores: string[];
749
+ showScoresToast: boolean;
750
+ };
751
+ shortcutSettings: {
752
+ shortcutOnHoveredAtom: boolean;
753
+ showShortcutToast: boolean;
754
+ shortCuts: string;
755
+ };
756
+ labelSettings: {
757
+ atomLabelDepthMode: boolean;
758
+ GLLabelsFontFamily: string;
759
+ GLLabelsFontSize: number;
760
+ availableFonts: string[];
761
+ };
762
+ sceneSettings: {
763
+ defaultBackgroundColor: [number, number, number, number];
764
+ drawCrosshairs: boolean;
765
+ drawAxes: boolean;
766
+ drawFPS: boolean;
767
+ drawMissingLoops: boolean;
768
+ drawInteractions: boolean;
769
+ doPerspectiveProjection: boolean;
770
+ useOffScreenBuffers: boolean;
771
+ depthBlurRadius: number;
772
+ depthBlurDepth: number;
773
+ ssaoBias: number;
774
+ ssaoRadius: number;
775
+ doShadowDepthDebug: boolean;
776
+ doShadow: boolean;
777
+ doSSAO: boolean;
778
+ doOutline: boolean;
779
+ doSpinTest: boolean;
780
+ defaultBondSmoothness: number,
781
+ resetClippingFogging: boolean;
782
+ clipCap: boolean;
783
+ };
784
+ miscAppSettings: {
785
+ defaultExpandDisplayCards: boolean;
786
+ transparentModalsOnMouseOut: boolean;
787
+ enableRefineAfterMod: boolean;
788
+ };
789
+ generalStates: {
790
+ devMode: boolean;
791
+ userPreferencesMounted: boolean;
792
+ appTitle: string;
793
+ cootInitialized: boolean;
794
+ notificationContent: JSX.Element;
795
+ activeMap: Map;
796
+ theme: string;
797
+ residueSelection: ResidueSelection;
798
+ };
799
+ hoveringStates: {
800
+ enableAtomHovering: boolean;
801
+ hoveredAtom: HoveredAtom;
802
+ cursorStyle: string;
803
+ };
804
+ }
805
+
806
+ type actionButtonSettings = {
807
+ mutate: 'ALA' | 'CYS' | 'ASP' | 'GLU' | 'PHE' | 'GLY' | 'HIS' | 'ILE' | 'LYS' | 'LEU' | 'MET' | 'ASN' | 'PRO' | 'GLN' | 'ARG' | 'SER' | 'THR' | 'VAL' | 'TRP' | 'TYR';
808
+ refine: 'SINGLE' | 'TRIPLE' | 'QUINTUPLE' | 'HEPTUPLE' | 'SPHERE' | 'BIG_SPHERE' | 'CHAIN' | 'ALL';
809
+ delete: 'ATOM' | 'RESIDUE' | 'RESIDUE HYDROGENS' | 'RESIDUE SIDE-CHAIN' | 'CHAIN' | 'CHAIN HYDROGENS' | 'MOLECULE HYDROGENS';
810
+ rotateTranslate: 'ATOM' | 'RESIDUE' | 'CHAIN' | 'MOLECULE';
811
+ drag: 'SINGLE' | 'TRIPLE' | 'QUINTUPLE' | 'HEPTUPLE' | 'SPHERE';
812
+ rigidBodyFit: 'SINGLE' | 'TRIPLE' | 'QUINTUPLE' | 'HEPTUPLE' | 'CHAIN' | 'ALL';
813
+ }
814
+
815
+ }