moorhen 0.6.8 → 0.7.0
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/README.md +6 -17
- package/baby-gru/CootWorker.js +1 -1
- package/baby-gru/CootWorker.ts +97 -49
- package/baby-gru/moorhen.css +12 -1
- package/baby-gru/wasm/moorhen.js +1 -1
- package/baby-gru/wasm/moorhen.wasm +0 -0
- package/baby-gru/wasm/web_example.wasm +0 -0
- package/moorhen.js +8 -8
- package/package.json +1 -1
- package/types/libcoot.d.ts +37 -8
- package/types/main.d.ts +24 -23
- package/types/mgWebGL.d.ts +6 -3
- package/types/moorhen.d.ts +62 -32
package/README.md
CHANGED
|
@@ -15,16 +15,11 @@ The sources of CCP4, Coot, Privateer, FFTW, and GSL are not included. They are d
|
|
|
15
15
|
the `get_sources` script, which is part of the build process of this project.
|
|
16
16
|
|
|
17
17
|
The following libraries/programs are compiled to Web Assembly:
|
|
18
|
-
* libccp4 (
|
|
19
|
-
* clipper (
|
|
20
|
-
* ssm (
|
|
21
|
-
* mmdb2 (
|
|
22
|
-
* ccp4srs (bzr)
|
|
18
|
+
* libccp4 (8.0.0)
|
|
19
|
+
* clipper (2.1)
|
|
20
|
+
* ssm (1.4.0)
|
|
21
|
+
* mmdb2 (2.0.22)
|
|
23
22
|
* gemmi 0.5.8
|
|
24
|
-
* rvapi (bzr)
|
|
25
|
-
* gesamt (bzr)
|
|
26
|
-
* ccp4mg (partial) (bzr)
|
|
27
|
-
* privateer MKIV
|
|
28
23
|
* Coot 1.0 ('gtk3' git branch)
|
|
29
24
|
* fftw 2.1.5
|
|
30
25
|
* gsl 2.7.1
|
|
@@ -45,7 +40,6 @@ Binaries are available on the releases page. Please read the instructions there
|
|
|
45
40
|
**Requirements**
|
|
46
41
|
|
|
47
42
|
* A Bourne-like shell
|
|
48
|
-
* bzr
|
|
49
43
|
* git
|
|
50
44
|
* curl
|
|
51
45
|
* patch
|
|
@@ -79,7 +73,7 @@ This should build all dependencies and then `Moorhen`.
|
|
|
79
73
|
6. To run the Moorhen molecular graphics application:
|
|
80
74
|
`cd baby-gru`
|
|
81
75
|
`npm start`
|
|
82
|
-
And then point a web browser at `http://localhost:
|
|
76
|
+
And then point a web browser at `http://localhost:5173/` .
|
|
83
77
|
|
|
84
78
|
## **Updating**
|
|
85
79
|
|
|
@@ -96,14 +90,9 @@ And then point a web browser at `http://localhost:3000/` .
|
|
|
96
90
|
|
|
97
91
|
## **What else can do with the compiled libraries?**
|
|
98
92
|
|
|
99
|
-
See `example/example.cc` or `checkout/privateer-MKIV/src/privateer.cpp` to see how to create a command line (node) program. The
|
|
100
|
-
latter is quite long and a patched version of the original privateer code. It might be more helpful to look at the patch file
|
|
101
|
-
`patches/privateer-emscripten.patch`. This should show how to patch an existing command line program which reads files to one
|
|
102
|
-
that will work within node.
|
|
103
|
-
|
|
104
93
|
See `coot/moorhen-wrappers.cc` to see use of `EMSCRIPTEN_BINDINGS` to expose Coot methods to the web browser.
|
|
105
94
|
|
|
106
|
-
Any program you write, which uses the *subset* of Coot, Clipper,
|
|
95
|
+
Any program you write, which uses the *subset* of Coot, Clipper, code which this project compiles to WASM, can
|
|
107
96
|
itself be compiled to WASM and used within node or Web Browser. Studying the examples should show you to do I/O, which is
|
|
108
97
|
different in the 2 cases. If you require more classes or methods from the libraries to be exposed to JavaScript, then changes need to be made to
|
|
109
98
|
`coot/moorhen-wrappers.cc`. This should only be necessary for browser usage - in node your whole program can be written in C++.
|
package/baby-gru/CootWorker.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
var cootModule,molecules_container,ccp4Module,__assign=this&&this.__assign||function(){return __assign=Object.assign||function(e){for(var a,t=1,r=arguments.length;t<r;t++)for(var s in a=arguments[t])Object.prototype.hasOwnProperty.call(a,s)&&(e[s]=a[s]);return e},__assign.apply(this,arguments)};importScripts("./wasm/moorhen.js"),importScripts("./wasm/web_example.js");var guid=function(){var e=Date.now();return"xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx".replace(/[xy]/g,(function(a){var t=(e+16*Math.random())%16|0;return e=Math.floor(e/16),("x"===a?t:3&t|8).toString(16)}))},print=function(e){console.log(e),postMessage({consoleMessage:JSON.stringify(e)})},instancedMeshToMeshData=function(e,a,t,r){void 0===t&&(t=!1),void 0===r&&(r=1e4);for(var s=[],o=[],n=[],i=[],c=[],_=[],l=[],u=[],d=[],m=e.geom,p=e.markup,h=m.size(),g=0;g<h;g++){var f=t,v=[],y=[],b=[],S=[],z=[],M=[],T=[],x=m.get(g);"spherical-atoms"===x.name&&(f=!0);for(var A=x.vertices,I=x.triangles,k=I.size(),w=0;w<k;w++){var D=I.get(w).point_id;a?(v.push(D[0]),v.push(D[2]),v.push(D[1])):(v.push(D[0]),v.push(D[1]),v.push(D[2]))}I.delete();for(var J=A.size(),F=0;F<J;F++){var N=A.get(F),C=N.pos;y.push(C[0]),y.push(C[1]),y.push(C[2]);var R=N.normal;b.push(R[0]),b.push(R[1]),b.push(R[2])}A.delete();var E=x.instancing_data_A,O=E.size();if(O>0)for(var U=0;U<O;U++){var P=(H=E.get(U)).position;M.push(P[0]),M.push(P[1]),M.push(P[2]);var L=H.colour;z.push(L[0]),z.push(L[1]),z.push(L[2]),z.push(L[3]);var B=H.size;S.push(B[0]),S.push(B[1]),S.push(B[2]),T.push.apply(T,[1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1]),H.delete()}E.delete();var j=x.instancing_data_B,q=j.size();if(q>0)for(U=0;U<q;U++){var H;if(!((B=(H=j.get(U)).size)[2]>r)){S.push(B[0]),S.push(B[1]),S.push(B[2]),P=H.position,M.push(P[0]),M.push(P[1]),M.push(P[2]),L=H.colour,z.push(L[0]),z.push(L[1]),z.push(L[2]),z.push(L[3]);var V=H.orientation;T.push(V[0][0]),T.push(V[0][1]),T.push(V[0][2]),T.push(V[0][3]),T.push(V[1][0]),T.push(V[1][1]),T.push(V[1][2]),T.push(V[1][3]),T.push(V[2][0]),T.push(V[2][1]),T.push(V[2][2]),T.push(V[2][3]),T.push(V[3][0]),T.push(V[3][1]),T.push(V[3][2]),T.push(V[3][3]),H.delete()}}j.delete(),n.push(b),o.push(y),s.push(v),i.push(S),_.push(M),l.push(T),c.push(z),u.push(!0),f?d.push("PERFECT_SPHERES"):d.push("TRIANGLES")}m.delete();var K=simpleMeshToMeshData(p);return K.idx_tri.length>0&&K.idx_tri[0].length>0&&K.idx_tri[0][0].length>0?t?{prim_types:[d,K.prim_types[0]],idx_tri:[s,K.idx_tri[0]],vert_tri:[_,K.vert_tri[0]],norm_tri:[n,K.norm_tri[0]],col_tri:[c,K.col_tri[0]],instance_use_colors:[u,null],instance_sizes:[i,null],instance_origins:[_,null],instance_orientations:[l,null]}:{prim_types:[d,K.prim_types[0]],idx_tri:[s,K.idx_tri[0]],vert_tri:[o,K.vert_tri[0]],norm_tri:[n,K.norm_tri[0]],col_tri:[c,K.col_tri[0]],instance_use_colors:[u,null],instance_sizes:[i,null],instance_origins:[_,null],instance_orientations:[l,null]}:{prim_types:[d],idx_tri:[s],vert_tri:[o],norm_tri:[n],col_tri:[c],instance_use_colors:[u],instance_sizes:[i],instance_origins:[_],instance_orientations:[l]}},simpleMeshToMeshData=function(e,a){void 0===a&&(a=!1);for(var t=e.vertices,r=e.triangles,s=[],o=[],n=[],i=[],c=r.size(),_=0;_<c;_++){var l=r.get(_).point_id;a?s.push.apply(s,[l[0],l[2],l[1]]):s.push.apply(s,l)}r.delete();var u=t.size();for(_=0;_<u;_++){var d=t.get(_),m=d.pos,p=d.normal,h=d.color;o.push.apply(o,m),a?n.push.apply(n,[-p[0],-p[1],-p[2]]):n.push.apply(n,p),i.push.apply(i,h)}return t.delete(),{prim_types:[["TRIANGLES"]],idx_tri:[[s]],vert_tri:[[o]],norm_tri:[[n]],col_tri:[[i]]}},SuperposeResultsToJSArray=function(e){for(var a=e.aligned_pairs,t=a.size(),r=[],s=0;s<t;s++){var o=a.get(s),n=o.first,i=n.residue_spec,c=o.second,_=c.residue_spec,l={reference:{chainId:i.chain_id,insCode:i.ins_code,seqNum:i.res_no,restype:"UNK",value:n.function_value,label:n.label},moving:{chainId:_.chain_id,insCode:_.ins_code,seqNum:_.res_no,restype:"UNK",value:c.function_value,label:c.label}};r.push(l)}return a.delete(),{referenceSequence:e.alignment.first,movingSequence:e.alignment.second,supperposeInfo:e.superpose_info,alignedPairsData:r}},colourRulesToJSArray=function(e){for(var a=[],t=e.size(),r=0;r<t;r++){var s=e.get(r);a.push(s)}return e.delete(),a},stringArrayArrayToJSArray=function(e){for(var a=[],t=e.size(),r=0;r<t;r++){for(var s=e.get(r),o=s.size(),n=[],i=0;i<o;i++){var c=s.get(i);n.push(c)}a.push(n),s.delete()}return e.delete(),a},floatArrayToJSArray=function(e){for(var a=[],t=e.size(),r=0;r<t;r++){var s=e.get(r);a.push(s)}return e.delete(),a},mapMoleculeCentreInfoToJSObject=function(e){var a=e.updated_centre,t={updated_centre:[a.x(),a.y(),a.z()],success:e.success,suggested_radius:e.suggested_radius,suggested_contour_level:e.suggested_contour_level};return a.delete(),t},intArrayToJSArray=function(e){for(var a=[],t=e.size(),r=0;r<t;r++){var s=e.get(r);a.push(s)}return e.delete(),a},stringArrayToJSArray=function(e){for(var a=[],t=e.size(),r=0;r<t;r++){var s=e.get(r);a.push(s)}return e.delete(),a},symmetryToJSData=function(e){for(var a=[],t=e.first,r=e.second,s=t.cell,o=t.symm_trans,n=o.size(),i=0;i<n;i++){var c=o.get(i),_=c.first,l=c.second,u=r.get(i);a.push({x:_.x(),y:_.y(),z:_.z(),asString:_.symm_as_string,isym:_.isym(),us:l.us,ws:l.ws,vs:l.vs,matrix:u}),_.delete()}return s.delete(),o.delete(),r.delete(),a},mmrrccStatsToJSArray=function(e){var a=function(e){for(var a=[],t=e.keys(),r=t.size(),s=0;s<r;s++){var o=t.get(s),n=e.get(o);a.push({resNum:o.res_no,insCode:o.ins_code,modelNumber:o.model_number,chainId:o.chain_id,n:n.n,correlation:n.correlation()}),n.delete()}return t.delete(),a},t=e.first,r=e.second,s={"All atoms":a(t),"Side-chains":a(r)};return t.delete(),r.delete(),s},atomSpecToJSArray=function(e){for(var a=[],t=e.size(),r=0;r<t;r++){var s=e.get(r);a.push({chain_id:s.chain_id,res_no:s.res_no,ins_code:s.ins_code,atom_name:s.atom_name,alt_conf:s.alt_conf,int_user_data:s.int_user_data,float_user_data:s.float_user_data,string_user_data:s.string_user_data,model_number:s.model_number})}return e.delete(),a},residueSpecToJSArray=function(e){for(var a=[],t=e.size(),r=0;r<t;r++){var s=e.get(r);a.push({resNum:s.res_no,insCode:s.ins_code,modelNumber:s.model_number,chainId:s.chain_id})}return e.delete(),a},validationDataToJSArray=function(e,a){void 0===a&&(a=null);for(var t=[],r=e.cviv,s=r.size(),o=0;o<s;o++){var n=r.get(o);if(null!==a&&n.chain_id!==a);else{for(var i=n.rviv,c=i.size(),_=0;_<c;_++){var l=i.get(_),u=l.residue_spec;t.push({chainId:u.chain_id,insCode:u.ins_code,seqNum:u.res_no,restype:"UNK",value:l.function_value})}i.delete()}}return r.delete(),e.delete(),t},linesBoxToJSArray=function(e){for(var a=[],t=e.line_segments,r=t.size(),s=0;s<r;s++){for(var o=[],n=t.get(s),i=n.size(),c=0;c<i;c++){var _=n.get(c),l=_.getStart(),u=_.getFinish(),d=_.amplitude(),m={x:l.x(),y:l.y(),z:l.z()},p={x:u.x(),y:u.y(),z:u.z()};o.push({start:m,end:p,dist:d}),l.delete(),u.delete(),_.delete()}n.delete(),a.push(o)}return t.delete(),a},vectorHBondToJSArray=function(e){for(var a=[],t=e.size(),r=0;r<t;r++){var s=e.get(r);a.push({hb_hydrogen:s.hb_hydrogen,donor:s.donor,acceptor:s.acceptor,donor_neigh:s.donor_neigh,acceptor_neigh:s.acceptor_neigh,angle_1:s.angle_1,angle_2:s.angle_2,angle_3:s.angle_3,dist:s.dist,ligand_atom_is_donor:s.ligand_atom_is_donor,hydrogen_is_ligand_atom:s.hydrogen_is_ligand_atom,bond_has_hydrogen_flag:s.bond_has_hydrogen_flag})}return e.delete(),a},interestingPlaceDataToJSArray=function(e){for(var a=[],t=e.size(),r=0;r<t;r++){var s=e.get(r),o=s.residue_spec;a.push({modelNumber:o.model_number,chainId:o.chain_id,insCode:o.ins_code,resNum:o.res_no,featureType:s.feature_type,featureValue:s.feature_value,buttonLabel:s.button_label,badness:s.badness,coordX:s.x,coordY:s.y,coordZ:s.z})}return e.delete(),a},histogramInfoToJSData=function(e){var a=e.counts;return{counts:intArrayToJSArray(a),bin_width:e.bin_width,base:e.base}},autoReadMtzInfoVectToJSArray=function(e){for(var a=[],t=e.size(),r=0;r<t;r++){var s=e.get(r);a.push({idx:s.idx,F:s.F,phi:s.phi,w:s.w,Rfree:s.Rfree,F_obs:s.F_obs,sigF_obs:s.sigF_obs,weights_used:s.weights_used})}return e.delete(),a},ramachandranDataToJSArray=function(e,a){for(var t=[],r=e.size(),s=0;s<r;s++){var o=e.get(s),n=o.phi_psi;n.chain_id===a&&t.push({chainId:n.chain_id,insCode:n.ins_code,seqNum:n.residue_number,restype:o.residue_name(),isOutlier:!o.is_allowed_flag,phi:n.phi(),psi:n.psi(),is_pre_pro:"PRO"===o.residue_name()}),o.delete(),n.delete()}return e.delete(),t},simpleMeshToLineMeshData=function(e,a){for(var t=e.vertices,r=e.triangles,s=[],o=[],n=[],i=[],c=r.size(),_=0;_<c;_++){var l=r.get(_).point_id;s.push.apply(s,[l[0],l[1],l[0],l[2],l[1],l[2]])}r.delete();var u=t.size();for(_=0;_<u;_++){var d=t.get(_);o.push.apply(o,d.pos),n.push.apply(n,d.normal),i.push.apply(i,d.color)}return t.delete(),a?{prim_types:[["NORMALLINES"]],useIndices:[[!0]],idx_tri:[[s]],vert_tri:[[o]],additional_norm_tri:[[n]],norm_tri:[[n]],col_tri:[[i]]}:{prim_types:[["LINES"]],useIndices:[[!0]],idx_tri:[[s]],vert_tri:[[o]],norm_tri:[[n]],col_tri:[[i]]}},auto_open_mtz=function(e){var a=guid(),t=new Uint8Array(e);cootModule.FS_createDataFile(".","".concat(a,".mtz"),t,!0,!0);var r="./".concat(a,".mtz"),s=molecules_container.auto_read_mtz(r);return cootModule.FS_unlink(r),s},replace_map_by_mtz_from_file=function(e,a,t){var r=guid(),s="./".concat(r,".mtz"),o=new Uint8Array(a);cootModule.FS_createDataFile(".",s,o,!0,!0);var n=[e,s,t.F,t.PHI,"",!1],i=molecules_container.replace_map_by_mtz_from_file.apply(molecules_container,n);return cootModule.FS_unlink(s),i},new_positions_for_residue_atoms=function(e,a){var t=0,r=new cootModule.Vectormoved_residue_t;return a.forEach((function(e){if(e.length>0){var a=e[0].label.split("/"),t=a[3].split("."),s=t[0],o=t[1];o=o||"";var n=new cootModule.moved_residue_t(a[2],parseInt(s),o);e.forEach((function(e){var a=new cootModule.moved_atom_t(e.name,e.alt_loc,e.x,e.y,e.z,-1);n.add_atom(a),a.delete()})),r.push_back(n),n.delete()}})),t+=molecules_container.new_positions_for_atoms_in_residues(e,r),r.delete(),t},read_mtz=function(e,a,t){var r=guid(),s=new Uint8Array(e);cootModule.FS_createDataFile(".","".concat(r,".mtz"),s,!0,!0);var o="./".concat(r,".mtz"),n=[o,t.F,t.PHI,"",!1,t.isDifference],i=molecules_container.read_mtz.apply(molecules_container,n);return cootModule.FS_unlink(o),i},associate_data_mtz_file_with_map=function(e,a,t,r,s){var o=new Uint8Array(a.data);cootModule.FS_createDataFile(".","".concat(a.fileName,".mtz"),o,!0,!0);var n="./".concat(a.fileName,".mtz"),i=[e,n,t,r,s];return molecules_container.associate_data_mtz_file_with_map.apply(molecules_container,i),n},read_ccp4_map=function(e,a,t){var r=guid(),s=new Uint8Array(e),o="";a.endsWith(".map.gz")?o="map.gz":a.endsWith(".mrc.gz")&&(o="mrc.gz"),cootModule.FS_createDataFile(".","".concat(r).concat(o),s,!0,!0);var n="./".concat(r).concat(o),i=[n,t],c=molecules_container.read_ccp4_map.apply(molecules_container,i);return cootModule.FS_unlink(n),c},setUserDefinedBondColours=function(e,a,t){void 0===t&&(t=!1);var r=new cootModule.MapIntFloat3,s=new cootModule.VectorStringUInt_pair;a.forEach((function(e,a){r.set(a+51,e.rgb);var t={first:e.cid,second:a+51};s.push_back(t)})),molecules_container.set_user_defined_bond_colours(e,r),molecules_container.set_user_defined_atom_colour_by_selection(e,s,t),s.delete(),r.delete()},doCootCommand=function(e){var a=e.returnType,t=e.command,r=e.commandArgs,s=e.messageId,o=e.myTimeStamp,n=e.message;try{var i=void 0;switch(t){case"shim_new_positions_for_residue_atoms":i=new_positions_for_residue_atoms.apply(void 0,r);break;case"shim_read_mtz":i=read_mtz.apply(void 0,r);break;case"shim_auto_open_mtz":i=auto_open_mtz.apply(void 0,r);break;case"shim_read_ccp4_map":i=read_ccp4_map.apply(void 0,r);break;case"shim_associate_data_mtz_file_with_map":i=associate_data_mtz_file_with_map.apply(void 0,r);break;case"shim_replace_map_by_mtz_from_file":i=replace_map_by_mtz_from_file.apply(void 0,r);break;case"shim_set_bond_colours":i=setUserDefinedBondColours.apply(void 0,r);break;default:i=molecules_container[t].apply(molecules_container,r)}var c=void 0;switch(a){case"string_array_array":c=stringArrayArrayToJSArray(i);break;case"instanced_mesh_perm":c=instancedMeshToMeshData(i,!0);break;case"histogram_info_t":c=histogramInfoToJSData(i);break;case"symmetry":c=symmetryToJSData(i);break;case"mmrrcc_stats":c=mmrrccStatsToJSArray(i);break;case"colour_rules":c=colourRulesToJSArray(i);break;case"instanced_mesh_perfect_spheres":c=instancedMeshToMeshData(i,!1,!0);break;case"instanced_mesh":c=instancedMeshToMeshData(i,!1,!1,5);break;case"mesh_perm":c=simpleMeshToMeshData(i,!0);break;case"mesh":c=simpleMeshToMeshData(i);break;case"lit_lines_mesh":c=simpleMeshToLineMeshData(i,!0);break;case"lines_mesh":c=simpleMeshToLineMeshData(i,!1);break;case"float_array":c=floatArrayToJSArray(i);break;case"int_array":c=intArrayToJSArray(i);break;case"auto_read_mtz_info_array":c=autoReadMtzInfoVectToJSArray(i);break;case"map_molecule_centre_info_t":c=mapMoleculeCentreInfoToJSObject(i);break;case"string_array":c=stringArrayToJSArray(i);break;case"residue_specs":c=residueSpecToJSArray(i);break;case"atom_specs":c=atomSpecToJSArray(i);break;case"ramachandran_data":c=ramachandranDataToJSArray(i,e.chainID);break;case"validation_data":c=validationDataToJSArray(i,e.chainID);break;case"interesting_places_data":c=interestingPlaceDataToJSArray(i);break;case"superpose_results":c=SuperposeResultsToJSArray(i);break;case"generic_3d_lines_bonds_box":c=linesBoxToJSArray(i);break;case"vector_hbond":c=vectorHBondToJSArray(i);break;case"status_instanced_mesh_pair":c={status:i.first,mesh:instancedMeshToMeshData(i.second,!1,!1,5)};break;case"void":c=null;break;default:c=i}return{messageId:s,messageSendTime:Date.now(),command:t,consoleMessage:"Completed ".concat(t," in ").concat(Date.now()-o," ms"),result:{status:"Completed",result:c}}}catch(e){return console.log(e),{messageId:s,myTimeStamp:o,message:n,consoleMessage:"EXCEPTION RAISED IN ".concat(t,", ").concat(e),result:{status:"Exception"}}}};onmessage=function(e){if("CootInitialize"===e.data.message)createRSRModule({locateFile:function(e){return"./wasm/".concat(e)},onRuntimeInitialized:function(){},mainScriptUrlOrBlob:"moorhen.js",print,printErr:print}).then((function(a){postMessage({consoleMessage:"Initialized molecules_container",message:e.data.message,messageId:e.data.messageId}),(molecules_container=new(cootModule=a).molecules_container_js(!1)).set_show_timings(!1),molecules_container.fill_rotamer_probability_tables(),molecules_container.set_map_sampling_rate(1.7),cootModule.FS.mkdir("COOT_BACKUP")})).catch((function(e){console.log(e),print(e)})),createCCP4Module({locateFile:function(e){return"./wasm/".concat(e)},onRuntimeInitialized:function(){},mainScriptUrlOrBlob:"web_example.js",print,printErr:print}).then((function(e){ccp4Module=e})).catch((function(e){console.log(e),print(e)}));else if("get_mtz_data"===e.data.message){var a=cootModule.FS.readFile(e.data.fileName,{encoding:"binary"});postMessage({messageId:e.data.messageId,myTimeStamp:e.data.myTimeStamp,consoleMessage:"Fetched mtz data for map ".concat(e.data.molNo),message:e.data.message,result:{molNo:e.data.molNo,mtzData:a}})}else if("get_map"===e.data.message){var t=guid(),r="./".concat(t,".map");molecules_container.writeCCP4Map(e.data.molNo,r);var s=cootModule.FS.readFile(r,{encoding:"binary"});cootModule.FS_unlink(r),postMessage({messageId:e.data.messageId,myTimeStamp:e.data.myTimeStamp,consoleMessage:"Fetched map of map ".concat(e.data.molNo),message:e.data.message,result:{molNo:e.data.molNo,mapData:s.buffer}})}else if("delete_file_name"===e.data.message){var o=cootModule.FS_unlink(e.data.fileName);postMessage({messageId:e.data.messageId,myTimeStamp:e.data.myTimeStamp,messageTag:"result",result:o})}else if("coot_command_list"===e.data.message){var n=e.data.commandList.map((function(a){return doCootCommand(__assign(__assign({},e.data),a))}));postMessage({messageId:e.data.messageId,resultList:n})}"coot_command"===e.data.message&&(o=doCootCommand(e.data),postMessage(o))};
|
|
1
|
+
var cootModule,molecules_container,ccp4Module,__assign=this&&this.__assign||function(){return __assign=Object.assign||function(e){for(var a,r=1,t=arguments.length;r<t;r++)for(var s in a=arguments[r])Object.prototype.hasOwnProperty.call(a,s)&&(e[s]=a[s]);return e},__assign.apply(this,arguments)};importScripts("./wasm/moorhen.js"),importScripts("./wasm/web_example.js");var guid=function(){var e=Date.now();return"xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx".replace(/[xy]/g,(function(a){var r=(e+16*Math.random())%16|0;return e=Math.floor(e/16),("x"===a?r:3&r|8).toString(16)}))},print=function(e){console.log(e),postMessage({consoleMessage:JSON.stringify(e)})},instancedMeshToMeshData=function(e,a,r,t){void 0===r&&(r=!1),void 0===t&&(t=1e4);for(var s=[],o=[],n=[],i=[],c=[],l=[],_=[],u=[],d=[],m=e.geom,p=e.markup,h=m.size(),g=0;g<h;g++){var f=r,v=[],y=[],S=[],M=[],b=[],z=[],T=[],A=m.get(g);"spherical-atoms"===A.name&&(f=!0);for(var x=A.vertices,w=A.triangles,I=w.size(),F=0;F<I;F++){var k=w.get(F).point_id;a?(v.push(k[0]),v.push(k[2]),v.push(k[1])):(v.push(k[0]),v.push(k[1]),v.push(k[2]))}w.delete();for(var D=x.size(),J=0;J<D;J++){var N=x.get(J),C=N.pos;y.push(C[0]),y.push(C[1]),y.push(C[2]);var E=N.normal;S.push(E[0]),S.push(E[1]),S.push(E[2])}x.delete();var P=A.instancing_data_A,R=P.size();if(R>0)for(var U=0;U<R;U++){var L=(V=P.get(U)).position;z.push(L[0]),z.push(L[1]),z.push(L[2]);var O=V.colour;b.push(O[0]),b.push(O[1]),b.push(O[2]),b.push(O[3]);var B=V.size;M.push(B[0]),M.push(B[1]),M.push(B[2]),T.push.apply(T,[1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1])}P.delete();var j=A.instancing_data_B,H=j.size();if(H>0)for(U=0;U<H;U++){var V;if(!((B=(V=j.get(U)).size)[2]>t)){M.push(B[0]),M.push(B[1]),M.push(B[2]),L=V.position,z.push(L[0]),z.push(L[1]),z.push(L[2]),O=V.colour,b.push(O[0]),b.push(O[1]),b.push(O[2]),b.push(O[3]);var q=V.orientation;T.push(q[0][0]),T.push(q[0][1]),T.push(q[0][2]),T.push(q[0][3]),T.push(q[1][0]),T.push(q[1][1]),T.push(q[1][2]),T.push(q[1][3]),T.push(q[2][0]),T.push(q[2][1]),T.push(q[2][2]),T.push(q[2][3]),T.push(q[3][0]),T.push(q[3][1]),T.push(q[3][2]),T.push(q[3][3])}}j.delete(),n.push(S),o.push(y),s.push(v),i.push(M),l.push(z),_.push(T),c.push(b),u.push(!0),f?d.push("PERFECT_SPHERES"):d.push("TRIANGLES")}m.delete();var G=simpleMeshToMeshData(p);return G.idx_tri.length>0&&G.idx_tri[0].length>0&&G.idx_tri[0][0].length>0?r?{prim_types:[d,G.prim_types[0]],idx_tri:[s,G.idx_tri[0]],vert_tri:[l,G.vert_tri[0]],norm_tri:[n,G.norm_tri[0]],col_tri:[c,G.col_tri[0]],instance_use_colors:[u,null],instance_sizes:[i,null],instance_origins:[l,null],instance_orientations:[_,null]}:{prim_types:[d,G.prim_types[0]],idx_tri:[s,G.idx_tri[0]],vert_tri:[o,G.vert_tri[0]],norm_tri:[n,G.norm_tri[0]],col_tri:[c,G.col_tri[0]],instance_use_colors:[u,null],instance_sizes:[i,null],instance_origins:[l,null],instance_orientations:[_,null]}:{prim_types:[d],idx_tri:[s],vert_tri:[o],norm_tri:[n],col_tri:[c],instance_use_colors:[u],instance_sizes:[i],instance_origins:[l],instance_orientations:[_]}},simpleMeshToMeshData=function(e,a){void 0===a&&(a=!1);var r=performance.now(),t=e.vertices,s=e.triangles,o=t.size(),n=s.size(),i=new Uint32Array(3*n),c=new Float32Array(3*o),l=new Float32Array(3*o),_=new Float32Array(4*o);cootModule.getPositionsFromSimpleMesh2(e,c),cootModule.getColoursFromSimpleMesh2(e,_),a?(cootModule.getReversedNormalsFromSimpleMesh2(e,l),cootModule.getPermutedTriangleIndicesFromSimpleMesh2(e,i)):(cootModule.getNormalsFromSimpleMesh2(e,l),cootModule.getTriangleIndicesFromSimpleMesh2(e,i));var u=performance.now();console.log("DEBUG: SIMPLE MESH TO MESH DATA C++",u-r);var d=c,m=_,p=l,h=i,g=performance.now();return console.log("DEBUG: SIMPLE MESH TO MESH DATA",g-r),t.delete(),s.delete(),{prim_types:[["TRIANGLES"]],idx_tri:[[h]],vert_tri:[[d]],norm_tri:[[p]],col_tri:[[m]]}},SuperposeResultsToJSArray=function(e){for(var a=e.aligned_pairs,r=a.size(),t=[],s=0;s<r;s++){var o=a.get(s),n=o.first,i=n.residue_spec,c=o.second,l=c.residue_spec,_={reference:{chainId:i.chain_id,insCode:i.ins_code,seqNum:i.res_no,restype:"UNK",value:n.function_value,label:n.label},moving:{chainId:l.chain_id,insCode:l.ins_code,seqNum:l.res_no,restype:"UNK",value:c.function_value,label:c.label}};t.push(_)}return a.delete(),{referenceSequence:e.alignment.first,movingSequence:e.alignment.second,supperposeInfo:e.superpose_info,alignedPairsData:t}},colourRulesToJSArray=function(e){for(var a=[],r=e.size(),t=0;t<r;t++){var s=e.get(t);a.push(s)}return e.delete(),a},stringArrayArrayToJSArray=function(e){for(var a=[],r=e.size(),t=0;t<r;t++){for(var s=e.get(t),o=s.size(),n=[],i=0;i<o;i++){var c=s.get(i);n.push(c)}a.push(n),s.delete()}return e.delete(),a},floatArrayToJSArray=function(e){for(var a=[],r=e.size(),t=0;t<r;t++){var s=e.get(t);a.push(s)}return e.delete(),a},mapMoleculeCentreInfoToJSObject=function(e){var a=e.updated_centre,r={updated_centre:[a.x(),a.y(),a.z()],success:e.success,suggested_radius:e.suggested_radius,suggested_contour_level:e.suggested_contour_level};return a.delete(),r},fitLigandInfoArrayToJSArray=function(e){for(var a=[],r=e.size(),t=0;t<r;t++){var s=e.get(t);a.push(__assign({},s))}return e.delete(),a},intArrayToJSArray=function(e){for(var a=[],r=e.size(),t=0;t<r;t++){var s=e.get(t);a.push(s)}return e.delete(),a},stringArrayToJSArray=function(e){for(var a=[],r=e.size(),t=0;t<r;t++){var s=e.get(t);a.push(s)}return e.delete(),a},symmetryToJSData=function(e){for(var a=[],r=e.first,t=e.second,s=r.cell,o=r.symm_trans,n=o.size(),i=0;i<n;i++){var c=o.get(i),l=c.first,_=c.second,u=t.get(i);a.push({x:l.x(),y:l.y(),z:l.z(),asString:l.symm_as_string,isym:l.isym(),us:_.us,ws:_.ws,vs:_.vs,matrix:u}),l.delete()}return s.delete(),o.delete(),t.delete(),a},mmrrccStatsToJSArray=function(e){var a=function(e){for(var a=[],r=e.keys(),t=r.size(),s=0;s<t;s++){var o=r.get(s),n=e.get(o);a.push({resNum:o.res_no,insCode:o.ins_code,modelNumber:o.model_number,chainId:o.chain_id,n:n.n,correlation:n.correlation()}),n.delete()}return r.delete(),a},r=e.first,t=e.second,s={"All atoms":a(r),"Side-chains":a(t)};return r.delete(),t.delete(),s},atomSpecToJSArray=function(e){for(var a=[],r=e.size(),t=0;t<r;t++){var s=e.get(t);a.push({chain_id:s.chain_id,res_no:s.res_no,ins_code:s.ins_code,atom_name:s.atom_name,alt_conf:s.alt_conf,int_user_data:s.int_user_data,float_user_data:s.float_user_data,string_user_data:s.string_user_data,model_number:s.model_number})}return e.delete(),a},residueSpecToJSArray=function(e){for(var a=[],r=e.size(),t=0;t<r;t++){var s=e.get(t);a.push({resNum:s.res_no,insCode:s.ins_code,modelNumber:s.model_number,chainId:s.chain_id})}return e.delete(),a},stringPairVectorToJSArray=function(e){for(var a=[],r=e.size(),t=0;t<r;t++){var s=e.get(t);a.push({first:s.first,second:s.second})}return e.delete(),a},validationDataToJSArray=function(e,a){void 0===a&&(a=null);for(var r=[],t=e.cviv,s=t.size(),o=0;o<s;o++){var n=t.get(o);if(null!==a&&n.chain_id!==a);else{for(var i=n.rviv,c=i.size(),l=0;l<c;l++){var _=i.get(l),u=_.residue_spec;r.push({chainId:u.chain_id,insCode:u.ins_code,seqNum:u.res_no,restype:"UNK",value:_.function_value})}i.delete()}}return t.delete(),e.delete(),r},linesBoxToJSArray=function(e){for(var a=[],r=e.line_segments,t=r.size(),s=0;s<t;s++){for(var o=[],n=r.get(s),i=n.size(),c=0;c<i;c++){var l=n.get(c),_=l.getStart(),u=l.getFinish(),d=l.amplitude(),m={x:_.x(),y:_.y(),z:_.z()},p={x:u.x(),y:u.y(),z:u.z()};o.push({start:m,end:p,dist:d}),_.delete(),u.delete(),l.delete()}n.delete(),a.push(o)}return r.delete(),a},vectorHBondToJSArray=function(e){for(var a=[],r=e.size(),t=0;t<r;t++){var s=e.get(t);a.push({hb_hydrogen:s.hb_hydrogen,donor:s.donor,acceptor:s.acceptor,donor_neigh:s.donor_neigh,acceptor_neigh:s.acceptor_neigh,angle_1:s.angle_1,angle_2:s.angle_2,angle_3:s.angle_3,dist:s.dist,ligand_atom_is_donor:s.ligand_atom_is_donor,hydrogen_is_ligand_atom:s.hydrogen_is_ligand_atom,bond_has_hydrogen_flag:s.bond_has_hydrogen_flag})}return e.delete(),a},interestingPlaceDataToJSArray=function(e){for(var a=[],r=e.size(),t=0;t<r;t++){var s=e.get(t),o=s.residue_spec;a.push({modelNumber:o.model_number,chainId:o.chain_id,insCode:o.ins_code,resNum:o.res_no,featureType:s.feature_type,featureValue:s.feature_value,buttonLabel:s.button_label,badness:s.badness,coordX:s.x,coordY:s.y,coordZ:s.z})}return e.delete(),a},histogramInfoToJSData=function(e){var a=e.counts;return{counts:intArrayToJSArray(a),bin_width:e.bin_width,base:e.base}},autoReadMtzInfoVectToJSArray=function(e){for(var a=[],r=e.size(),t=0;t<r;t++){var s=e.get(t);a.push({idx:s.idx,F:s.F,phi:s.phi,w:s.w,Rfree:s.Rfree,F_obs:s.F_obs,sigF_obs:s.sigF_obs,weights_used:s.weights_used})}return e.delete(),a},ramachandranDataToJSArray=function(e,a){for(var r=[],t=e.size(),s=0;s<t;s++){var o=e.get(s),n=o.phi_psi;n.chain_id===a&&r.push({chainId:n.chain_id,insCode:n.ins_code,seqNum:n.residue_number,restype:o.residue_name(),isOutlier:!o.is_allowed_flag,phi:n.phi(),psi:n.psi(),is_pre_pro:"PRO"===o.residue_name()}),o.delete(),n.delete()}return e.delete(),r},simpleMeshToLineMeshData=function(e,a){performance.now();var r=e.vertices,t=e.triangles,s=t.size(),o=r.size(),n=new Uint32Array(6*s),i=new Float32Array(3*o),c=new Float32Array(3*o),l=new Float32Array(4*o);cootModule.getLineIndicesFromSimpleMesh2(e,n),cootModule.getPositionsFromSimpleMesh2(e,i),cootModule.getNormalsFromSimpleMesh2(e,c),cootModule.getColoursFromSimpleMesh2(e,l),performance.now();var _=n,u=i,d=c,m=l;return r.delete(),t.delete(),a?{prim_types:[["NORMALLINES"]],useIndices:[[!0]],idx_tri:[[_]],vert_tri:[[u]],additional_norm_tri:[[d]],norm_tri:[[d]],col_tri:[[m]]}:{prim_types:[["LINES"]],useIndices:[[!0]],idx_tri:[[_]],vert_tri:[[u]],norm_tri:[[d]],col_tri:[[m]]}},auto_open_mtz=function(e){var a=guid(),r=new Uint8Array(e);cootModule.FS_createDataFile(".","".concat(a,".mtz"),r,!0,!0);var t="./".concat(a,".mtz"),s=molecules_container.auto_read_mtz(t);return cootModule.FS_unlink(t),s},replace_map_by_mtz_from_file=function(e,a,r){var t=guid(),s="./".concat(t,".mtz"),o=new Uint8Array(a);cootModule.FS_createDataFile(".",s,o,!0,!0);var n=[e,s,r.F,r.PHI,"",!1],i=molecules_container.replace_map_by_mtz_from_file.apply(molecules_container,n);return cootModule.FS_unlink(s),i},new_positions_for_residue_atoms=function(e,a){var r=0,t=new cootModule.Vectormoved_residue_t;return a.forEach((function(e){if(e.length>0){var a=e[0].label.split("/"),r=a[3].split("."),s=r[0],o=r[1];o=o||"";var n=new cootModule.moved_residue_t(a[2],parseInt(s),o);e.forEach((function(e){var a=new cootModule.moved_atom_t(e.name,e.alt_loc,e.x,e.y,e.z,-1);n.add_atom(a),a.delete()})),t.push_back(n),n.delete()}})),r+=molecules_container.new_positions_for_atoms_in_residues(e,t),t.delete(),r},read_mtz=function(e,a,r){var t=guid(),s=new Uint8Array(e);cootModule.FS_createDataFile(".","".concat(t,".mtz"),s,!0,!0);var o="./".concat(t,".mtz"),n=[o,r.F,r.PHI,"",!1,r.isDifference],i=molecules_container.read_mtz.apply(molecules_container,n);return cootModule.FS_unlink(o),i},associate_data_mtz_file_with_map=function(e,a,r,t,s){var o=new Uint8Array(a.data);cootModule.FS_createDataFile(".","".concat(a.fileName,".mtz"),o,!0,!0);var n="./".concat(a.fileName,".mtz"),i=[e,n,r,t,s];return molecules_container.associate_data_mtz_file_with_map.apply(molecules_container,i),n},read_ccp4_map=function(e,a,r){var t=guid(),s=new Uint8Array(e),o="";a.endsWith(".map.gz")?o="map.gz":a.endsWith(".mrc.gz")&&(o="mrc.gz"),cootModule.FS_createDataFile(".","".concat(t).concat(o),s,!0,!0);var n="./".concat(t).concat(o),i=[n,r],c=molecules_container.read_ccp4_map.apply(molecules_container,i);return cootModule.FS_unlink(n),c},setUserDefinedBondColours=function(e,a,r){void 0===r&&(r=!1);var t=new cootModule.MapIntFloat3,s=new cootModule.VectorStringUInt_pair;a.forEach((function(e,a){t.set(a+51,e.rgb);var r={first:e.cid,second:a+51};s.push_back(r)})),molecules_container.set_user_defined_bond_colours(e,t),molecules_container.set_user_defined_atom_colour_by_selection(e,s,r),s.delete(),t.delete()},doCootCommand=function(e){var a=e.returnType,r=e.command,t=e.commandArgs,s=e.messageId,o=e.myTimeStamp,n=e.message;try{var i=void 0;switch(r){case"shim_new_positions_for_residue_atoms":i=new_positions_for_residue_atoms.apply(void 0,t);break;case"shim_read_mtz":i=read_mtz.apply(void 0,t);break;case"shim_auto_open_mtz":i=auto_open_mtz.apply(void 0,t);break;case"shim_read_ccp4_map":i=read_ccp4_map.apply(void 0,t);break;case"shim_associate_data_mtz_file_with_map":i=associate_data_mtz_file_with_map.apply(void 0,t);break;case"shim_replace_map_by_mtz_from_file":i=replace_map_by_mtz_from_file.apply(void 0,t);break;case"shim_set_bond_colours":i=setUserDefinedBondColours.apply(void 0,t);break;default:i=molecules_container[r].apply(molecules_container,t)}var c=void 0;switch(a){case"fit_ligand_info_array":c=fitLigandInfoArrayToJSArray(i);break;case"string_array_array":c=stringArrayArrayToJSArray(i);break;case"instanced_mesh_perm":c=instancedMeshToMeshData(i,!0);break;case"histogram_info_t":c=histogramInfoToJSData(i);break;case"symmetry":c=symmetryToJSData(i);break;case"mmrrcc_stats":c=mmrrccStatsToJSArray(i);break;case"colour_rules":c=colourRulesToJSArray(i);break;case"instanced_mesh_perfect_spheres":c=instancedMeshToMeshData(i,!1,!0);break;case"instanced_mesh":c=instancedMeshToMeshData(i,!1,!1,5);break;case"mesh_perm":c=simpleMeshToMeshData(i,!0);break;case"mesh":c=simpleMeshToMeshData(i);break;case"lit_lines_mesh":c=simpleMeshToLineMeshData(i,!0);break;case"lines_mesh":c=simpleMeshToLineMeshData(i,!1);break;case"float_array":c=floatArrayToJSArray(i);break;case"int_array":c=intArrayToJSArray(i);break;case"auto_read_mtz_info_array":c=autoReadMtzInfoVectToJSArray(i);break;case"map_molecule_centre_info_t":c=mapMoleculeCentreInfoToJSObject(i);break;case"string_array":c=stringArrayToJSArray(i);break;case"residue_specs":c=residueSpecToJSArray(i);break;case"atom_specs":c=atomSpecToJSArray(i);break;case"ramachandran_data":c=ramachandranDataToJSArray(i,e.chainID);break;case"validation_data":c=validationDataToJSArray(i,e.chainID);break;case"interesting_places_data":c=interestingPlaceDataToJSArray(i);break;case"superpose_results":c=SuperposeResultsToJSArray(i);break;case"generic_3d_lines_bonds_box":c=linesBoxToJSArray(i);break;case"vector_hbond":c=vectorHBondToJSArray(i);break;case"status_instanced_mesh_pair":c={status:i.first,mesh:instancedMeshToMeshData(i.second,!1,!1,5)};break;case"string_string_pair_vector":c=stringPairVectorToJSArray(i);break;case"void":c=null;break;default:c=i}return{messageId:s,messageSendTime:Date.now(),command:r,consoleMessage:"Completed ".concat(r," in ").concat(Date.now()-o," ms"),result:{status:"Completed",result:c}}}catch(e){return console.log(e),{messageId:s,myTimeStamp:o,message:n,consoleMessage:"EXCEPTION RAISED IN ".concat(r,", ").concat(e),result:{status:"Exception"}}}};onmessage=function(e){if("CootInitialize"===e.data.message)createRSRModule({locateFile:function(e){return"./wasm/".concat(e)},onRuntimeInitialized:function(){},mainScriptUrlOrBlob:"moorhen.js",print,printErr:print}).then((function(a){postMessage({consoleMessage:"Initialized molecules_container",message:e.data.message,messageId:e.data.messageId}),(molecules_container=new(cootModule=a).molecules_container_js(!1)).set_show_timings(!1),molecules_container.fill_rotamer_probability_tables(),molecules_container.set_map_sampling_rate(1.7),molecules_container.set_map_is_contoured_with_thread_pool(!0),molecules_container.set_max_number_of_threads(3),cootModule.FS.mkdir("COOT_BACKUP")})).catch((function(e){console.log(e),print(e)})),createCCP4Module({locateFile:function(e){return"./wasm/".concat(e)},onRuntimeInitialized:function(){},mainScriptUrlOrBlob:"web_example.js",print,printErr:print}).then((function(e){ccp4Module=e})).catch((function(e){console.log(e),print(e)}));else if("get_mtz_data"===e.data.message){var a=cootModule.FS.readFile(e.data.fileName,{encoding:"binary"});postMessage({messageId:e.data.messageId,myTimeStamp:e.data.myTimeStamp,consoleMessage:"Fetched mtz data for map ".concat(e.data.molNo),message:e.data.message,result:{molNo:e.data.molNo,mtzData:a}})}else if("get_map"===e.data.message){var r=guid(),t="./".concat(r,".map");molecules_container.writeCCP4Map(e.data.molNo,t);var s=cootModule.FS.readFile(t,{encoding:"binary"});cootModule.FS_unlink(t),postMessage({messageId:e.data.messageId,myTimeStamp:e.data.myTimeStamp,consoleMessage:"Fetched map of map ".concat(e.data.molNo),message:e.data.message,result:{molNo:e.data.molNo,mapData:s.buffer}})}else if("delete_file_name"===e.data.message){var o=cootModule.FS_unlink(e.data.fileName);postMessage({messageId:e.data.messageId,myTimeStamp:e.data.myTimeStamp,messageTag:"result",result:o})}else if("coot_command_list"===e.data.message){var n=e.data.commandList.map((function(a){return doCootCommand(__assign(__assign({},e.data),a))}));postMessage({messageId:e.data.messageId,resultList:n})}"coot_command"===e.data.message&&(o=doCootCommand(e.data),postMessage(o))};
|
package/baby-gru/CootWorker.ts
CHANGED
|
@@ -114,8 +114,6 @@ const instancedMeshToMeshData = (instanceMesh: libcootApi.InstancedMeshT, perm:
|
|
|
114
114
|
0.0, 0.0, 1.0, 0.0,
|
|
115
115
|
0.0, 0.0, 0.0, 1.0,
|
|
116
116
|
])
|
|
117
|
-
|
|
118
|
-
inst_data.delete()
|
|
119
117
|
}
|
|
120
118
|
}
|
|
121
119
|
As.delete()
|
|
@@ -164,8 +162,6 @@ const instancedMeshToMeshData = (instanceMesh: libcootApi.InstancedMeshT, perm:
|
|
|
164
162
|
thisInstance_orientations.push(instDataOrientation[3][1])
|
|
165
163
|
thisInstance_orientations.push(instDataOrientation[3][2])
|
|
166
164
|
thisInstance_orientations.push(instDataOrientation[3][3])
|
|
167
|
-
|
|
168
|
-
inst_data.delete()
|
|
169
165
|
}
|
|
170
166
|
}
|
|
171
167
|
Bs.delete()
|
|
@@ -230,38 +226,47 @@ const instancedMeshToMeshData = (instanceMesh: libcootApi.InstancedMeshT, perm:
|
|
|
230
226
|
}
|
|
231
227
|
|
|
232
228
|
const simpleMeshToMeshData = (simpleMesh: libcootApi.SimpleMeshT, perm: boolean = false): libcootApi.SimpleMeshJS => {
|
|
229
|
+
|
|
230
|
+
const print_timing = true;
|
|
231
|
+
const ts = performance.now()
|
|
232
|
+
|
|
233
233
|
const vertices = simpleMesh.vertices;
|
|
234
234
|
const triangles = simpleMesh.triangles;
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
let totNorm: number[] = [];
|
|
238
|
-
let totCol: number[] = [];
|
|
239
|
-
|
|
235
|
+
|
|
236
|
+
const verticesSize = vertices.size();
|
|
240
237
|
const trianglesSize = triangles.size()
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
|
|
238
|
+
|
|
239
|
+
let totIdxs_C = new Uint32Array(trianglesSize*3)
|
|
240
|
+
let totPos_C = new Float32Array(verticesSize*3)
|
|
241
|
+
let totNorm_C = new Float32Array(verticesSize*3)
|
|
242
|
+
let totCol_C = new Float32Array(verticesSize*4)
|
|
243
|
+
|
|
244
|
+
cootModule.getPositionsFromSimpleMesh2(simpleMesh,totPos_C)
|
|
245
|
+
cootModule.getColoursFromSimpleMesh2(simpleMesh,totCol_C)
|
|
246
|
+
|
|
247
|
+
if (perm){
|
|
248
|
+
cootModule.getReversedNormalsFromSimpleMesh2(simpleMesh,totNorm_C)
|
|
249
|
+
cootModule.getPermutedTriangleIndicesFromSimpleMesh2(simpleMesh,totIdxs_C)
|
|
250
|
+
} else {
|
|
251
|
+
cootModule.getNormalsFromSimpleMesh2(simpleMesh,totNorm_C)
|
|
252
|
+
cootModule.getTriangleIndicesFromSimpleMesh2(simpleMesh,totIdxs_C)
|
|
248
253
|
}
|
|
249
|
-
triangles.delete()
|
|
250
254
|
|
|
251
|
-
const
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
|
|
260
|
-
|
|
261
|
-
|
|
262
|
-
totCol.push(...vertColor);
|
|
255
|
+
const tm = performance.now()
|
|
256
|
+
if(print_timing) console.log("DEBUG: SIMPLE MESH TO MESH DATA C++",tm-ts)
|
|
257
|
+
|
|
258
|
+
let totPos = totPos_C
|
|
259
|
+
let totCol = totCol_C
|
|
260
|
+
let totNorm = totNorm_C
|
|
261
|
+
let totIdxs = totIdxs_C
|
|
262
|
+
|
|
263
|
+
if(print_timing) {
|
|
264
|
+
const te = performance.now()
|
|
265
|
+
console.log("DEBUG: SIMPLE MESH TO MESH DATA",te-ts)
|
|
263
266
|
}
|
|
264
|
-
|
|
267
|
+
|
|
268
|
+
vertices.delete();
|
|
269
|
+
triangles.delete();
|
|
265
270
|
|
|
266
271
|
return {
|
|
267
272
|
prim_types: [["TRIANGLES"]],
|
|
@@ -373,6 +378,19 @@ const mapMoleculeCentreInfoToJSObject = (mapMoleculeCentreInfo: libcootApi.MapMo
|
|
|
373
378
|
return returnResult;
|
|
374
379
|
}
|
|
375
380
|
|
|
381
|
+
const fitLigandInfoArrayToJSArray = (fitLigandInfoVec: emscriptem.vector<libcootApi.fitLigandInfo>): libcootApi.fitLigandInfo[] => {
|
|
382
|
+
const result: libcootApi.fitLigandInfo[] = []
|
|
383
|
+
|
|
384
|
+
const fitLigandInfoVecSize = fitLigandInfoVec.size()
|
|
385
|
+
for (let i = 0; i < fitLigandInfoVecSize; i++) {
|
|
386
|
+
const fitLigandInfo = fitLigandInfoVec.get(i)
|
|
387
|
+
result.push({ ...fitLigandInfo })
|
|
388
|
+
}
|
|
389
|
+
|
|
390
|
+
fitLigandInfoVec.delete()
|
|
391
|
+
return result
|
|
392
|
+
}
|
|
393
|
+
|
|
376
394
|
const intArrayToJSArray = (intArray: emscriptem.vector<number>) => {
|
|
377
395
|
let returnResult: number[] = []
|
|
378
396
|
const intArraySize = intArray.size()
|
|
@@ -501,6 +519,17 @@ const residueSpecToJSArray = (residueSpecs: emscriptem.vector<libcootApi.Residue
|
|
|
501
519
|
return returnResult
|
|
502
520
|
}
|
|
503
521
|
|
|
522
|
+
const stringPairVectorToJSArray = (stringPairsVector: emscriptem.vector<libcootApi.PairType<string, string>>) => {
|
|
523
|
+
let result: { first: string; second: string }[] = []
|
|
524
|
+
const stringPairsVectorSize = stringPairsVector.size()
|
|
525
|
+
for (let ic = 0; ic < stringPairsVectorSize; ic++) {
|
|
526
|
+
const data = stringPairsVector.get(ic)
|
|
527
|
+
result.push({first: data.first, second: data.second})
|
|
528
|
+
}
|
|
529
|
+
stringPairsVector.delete()
|
|
530
|
+
return result
|
|
531
|
+
}
|
|
532
|
+
|
|
504
533
|
const validationDataToJSArray = (validationData: libcootApi.ValidationInformationT, chainID: string | null = null): libcootApi.ValidationInformationJS[] => {
|
|
505
534
|
let returnResult: { chainId: string; insCode: string; seqNum: number; restype: string; value: number; }[] = []
|
|
506
535
|
const cviv = validationData.cviv
|
|
@@ -691,29 +720,39 @@ const ramachandranDataToJSArray = (ramachandraData: emscriptem.vector<libcootApi
|
|
|
691
720
|
}
|
|
692
721
|
|
|
693
722
|
const simpleMeshToLineMeshData = (simpleMesh: libcootApi.SimpleMeshT, normalLighting: boolean): libcootApi.SimpleMeshJS => {
|
|
723
|
+
|
|
724
|
+
const print_timing = false;
|
|
725
|
+
const ts = performance.now()
|
|
726
|
+
|
|
694
727
|
const vertices = simpleMesh.vertices;
|
|
695
728
|
const triangles = simpleMesh.triangles;
|
|
696
|
-
let totIdxs: number[] = [];
|
|
697
|
-
let totPos: number[] = [];
|
|
698
|
-
let totNorm: number[] = [];
|
|
699
|
-
let totCol: number[] = [];
|
|
700
|
-
|
|
701
729
|
const trianglesSize = triangles.size()
|
|
702
|
-
for (let i = 0; i < trianglesSize; i++) {
|
|
703
|
-
const triangle = triangles.get(i)
|
|
704
|
-
const idxs = triangle.point_id;
|
|
705
|
-
totIdxs.push(...[idxs[0], idxs[1], idxs[0], idxs[2], idxs[1], idxs[2]]);
|
|
706
|
-
}
|
|
707
|
-
triangles.delete()
|
|
708
|
-
|
|
709
730
|
const verticesSize = vertices.size()
|
|
710
|
-
|
|
711
|
-
|
|
712
|
-
|
|
713
|
-
|
|
714
|
-
|
|
731
|
+
|
|
732
|
+
let totIdxs_C = new Uint32Array(trianglesSize*6)
|
|
733
|
+
let totPos_C = new Float32Array(verticesSize*3)
|
|
734
|
+
let totNorm_C = new Float32Array(verticesSize*3)
|
|
735
|
+
let totCol_C = new Float32Array(verticesSize*4)
|
|
736
|
+
cootModule.getLineIndicesFromSimpleMesh2(simpleMesh,totIdxs_C)
|
|
737
|
+
cootModule.getPositionsFromSimpleMesh2(simpleMesh,totPos_C)
|
|
738
|
+
cootModule.getNormalsFromSimpleMesh2(simpleMesh,totNorm_C)
|
|
739
|
+
cootModule.getColoursFromSimpleMesh2(simpleMesh,totCol_C)
|
|
740
|
+
|
|
741
|
+
const tm = performance.now()
|
|
742
|
+
if(print_timing) console.log("DEBUG: SIMPLE MESH TO LINE MESH DATA C++",tm-ts)
|
|
743
|
+
|
|
744
|
+
let totIdxs = totIdxs_C
|
|
745
|
+
let totPos = totPos_C
|
|
746
|
+
let totNorm = totNorm_C
|
|
747
|
+
let totCol = totCol_C
|
|
748
|
+
|
|
749
|
+
if(print_timing) {
|
|
750
|
+
const te = performance.now()
|
|
751
|
+
console.log("SIMPLE MESH TO LINE MESH DATA",te-ts)
|
|
715
752
|
}
|
|
716
|
-
|
|
753
|
+
|
|
754
|
+
vertices.delete();
|
|
755
|
+
triangles.delete();
|
|
717
756
|
|
|
718
757
|
if (normalLighting)
|
|
719
758
|
return { prim_types: [["NORMALLINES"]], useIndices: [[true]], idx_tri: [[totIdxs]], vert_tri: [[totPos]], additional_norm_tri: [[totNorm]], norm_tri: [[totNorm]], col_tri: [[totCol]] };
|
|
@@ -866,6 +905,9 @@ const doCootCommand = (messageData: {
|
|
|
866
905
|
|
|
867
906
|
let returnResult;
|
|
868
907
|
switch (returnType) {
|
|
908
|
+
case 'fit_ligand_info_array':
|
|
909
|
+
returnResult = fitLigandInfoArrayToJSArray(cootResult)
|
|
910
|
+
break;
|
|
869
911
|
case 'string_array_array':
|
|
870
912
|
returnResult = stringArrayArrayToJSArray(cootResult)
|
|
871
913
|
break;
|
|
@@ -944,6 +986,9 @@ const doCootCommand = (messageData: {
|
|
|
944
986
|
case 'status_instanced_mesh_pair':
|
|
945
987
|
returnResult = { status: cootResult.first, mesh: instancedMeshToMeshData(cootResult.second, false, false, 5) }
|
|
946
988
|
break;
|
|
989
|
+
case 'string_string_pair_vector':
|
|
990
|
+
returnResult = stringPairVectorToJSArray(cootResult)
|
|
991
|
+
break
|
|
947
992
|
case 'void':
|
|
948
993
|
returnResult = null
|
|
949
994
|
break
|
|
@@ -951,6 +996,7 @@ const doCootCommand = (messageData: {
|
|
|
951
996
|
default:
|
|
952
997
|
returnResult = cootResult
|
|
953
998
|
break;
|
|
999
|
+
//cootResult.delete()
|
|
954
1000
|
}
|
|
955
1001
|
|
|
956
1002
|
return {
|
|
@@ -986,7 +1032,9 @@ onmessage = function (e) {
|
|
|
986
1032
|
molecules_container.set_show_timings(false)
|
|
987
1033
|
molecules_container.fill_rotamer_probability_tables()
|
|
988
1034
|
molecules_container.set_map_sampling_rate(1.7)
|
|
989
|
-
|
|
1035
|
+
molecules_container.set_map_is_contoured_with_thread_pool(true)
|
|
1036
|
+
molecules_container.set_max_number_of_threads(3)
|
|
1037
|
+
cootModule.FS.mkdir("COOT_BACKUP")
|
|
990
1038
|
})
|
|
991
1039
|
.catch((e) => {
|
|
992
1040
|
console.log(e)
|
package/baby-gru/moorhen.css
CHANGED
|
@@ -72,11 +72,18 @@ div.darkly text.end-label {fill:#FFF !important;}
|
|
|
72
72
|
height: 3rem;
|
|
73
73
|
}
|
|
74
74
|
|
|
75
|
+
.rama-validation-tool-container-row {
|
|
76
|
+
width: 100%;
|
|
77
|
+
margin: 0;
|
|
78
|
+
padding: 0;
|
|
79
|
+
height: 100%;
|
|
80
|
+
}
|
|
81
|
+
|
|
75
82
|
.big-validation-tool-container-row {
|
|
76
83
|
width: 100%;
|
|
77
84
|
margin: 0;
|
|
78
85
|
padding: 0;
|
|
79
|
-
height: calc(100% -
|
|
86
|
+
height: calc(100% - 6rem);
|
|
80
87
|
}
|
|
81
88
|
|
|
82
89
|
.small-validation-tool-container-row {
|
|
@@ -177,6 +184,10 @@ div.darkly text.end-label {fill:#FFF !important;}
|
|
|
177
184
|
}
|
|
178
185
|
|
|
179
186
|
.moorhen-draggable-card {
|
|
187
|
+
box-shadow: 0px 2px 2px -1px rgba(0,0,0,0.2),0px 3px 5px 0px rgba(0,0,0,0.14),0px 1px 9px 0px rgba(0,0,0,0.12);
|
|
188
|
+
}
|
|
189
|
+
|
|
190
|
+
.moorhen-draggable-card-focused {
|
|
180
191
|
box-shadow: 0px 3px 5px -1px rgba(0,0,0,0.2),0px 6px 10px 0px rgba(0,0,0,0.14),0px 1px 18px 0px rgba(0,0,0,0.12);
|
|
181
192
|
}
|
|
182
193
|
|