moorhen 0.6.7 → 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 +118 -74
- 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 +4 -3
- package/types/libcoot.d.ts +60 -21
- package/types/main.d.ts +30 -27
- package/types/mgWebGL.d.ts +12 -5
- package/types/moorhen.d.ts +74 -36
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,s=arguments.length;t<s;t++)for(var r in a=arguments[t])Object.prototype.hasOwnProperty.call(a,r)&&(e[r]=a[r]);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,s){void 0===t&&(t=!1),void 0===s&&(s=1e4);for(var r=[],o=[],n=[],i=[],c=[],l=[],_=[],d=[],u=[],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 F=A.size(),J=0;J<F;J++){var N=A.get(J),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]),N.delete()}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]>s)){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(),x.delete(),n.push(b),o.push(y),r.push(v),i.push(S),l.push(M),_.push(T),c.push(z),d.push(!0),f?u.push("PERFECT_SPHERES"):u.push("TRIANGLES")}m.delete();var K=simpleMeshToMeshData(p);return e.delete(),K.idx_tri.length>0&&K.idx_tri[0].length>0&&K.idx_tri[0][0].length>0?t?{prim_types:[u,K.prim_types[0]],idx_tri:[r,K.idx_tri[0]],vert_tri:[l,K.vert_tri[0]],norm_tri:[n,K.norm_tri[0]],col_tri:[c,K.col_tri[0]],instance_use_colors:[d,null],instance_sizes:[i,null],instance_origins:[l,null],instance_orientations:[_,null]}:{prim_types:[u,K.prim_types[0]],idx_tri:[r,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:[d,null],instance_sizes:[i,null],instance_origins:[l,null],instance_orientations:[_,null]}:{prim_types:[u],idx_tri:[r],vert_tri:[o],norm_tri:[n],col_tri:[c],instance_use_colors:[d],instance_sizes:[i],instance_origins:[l],instance_orientations:[_]}},simpleMeshToMeshData=function(e,a){void 0===a&&(a=!1);for(var t=e.vertices,s=e.triangles,r=[],o=[],n=[],i=[],c=s.size(),l=0;l<c;l++){var _=s.get(l).point_id;a?r.push.apply(r,[_[0],_[2],_[1]]):r.push.apply(r,_)}s.delete();var d=t.size();for(l=0;l<d;l++){var u=t.get(l),m=u.pos,p=u.normal,h=u.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),u.delete()}return t.delete(),e.delete(),{prim_types:[["TRIANGLES"]],idx_tri:[[r]],vert_tri:[[o]],norm_tri:[[n]],col_tri:[[i]]}},SuperposeResultsToJSArray=function(e){for(var a=e.aligned_pairs,t=a.size(),s=[],r=0;r<t;r++){var o=a.get(r),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}};c.delete(),l.delete(),n.delete(),i.delete(),s.push(_)}return a.delete(),{referenceSequence:e.alignment.first,movingSequence:e.alignment.second,supperposeInfo:e.superpose_info,alignedPairsData:s}},colourRulesToJSArray=function(e){for(var a=[],t=e.size(),s=0;s<t;s++){var r=e.get(s);a.push(r)}return e.delete(),a},floatArrayToJSArray=function(e){for(var a=[],t=e.size(),s=0;s<t;s++){var r=e.get(s);a.push(r)}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(),s=0;s<t;s++){var r=e.get(s);a.push(r)}return e.delete(),a},stringArrayToJSArray=function(e){for(var a=[],t=e.size(),s=0;s<t;s++){var r=e.get(s);a.push(r)}return e.delete(),a},symmetryToJSData=function(e){for(var a=[],t=e.first,s=e.second,r=t.cell,o=t.symm_trans,n=o.size(),i=0;i<n;i++){var c=o.get(i),l=c.first,_=c.second,d=s.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:d}),l.delete()}return r.delete(),o.delete(),s.delete(),t.delete(),a},mmrrccStatsToJSArray=function(e){var a=function(e){for(var a=[],t=e.keys(),s=t.size(),r=0;r<s;r++){var o=t.get(r),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()}),o.delete(),n.delete()}return t.delete(),a},t=e.first,s=e.second,r={"All atoms":a(t),"Side-chains":a(s)};return t.delete(),s.delete(),r},atomSpecToJSArray=function(e){for(var a=[],t=e.size(),s=0;s<t;s++){var r=e.get(s);a.push({chain_id:r.chain_id,res_no:r.res_no,ins_code:r.ins_code,atom_name:r.atom_name,alt_conf:r.alt_conf,int_user_data:r.int_user_data,float_user_data:r.float_user_data,string_user_data:r.string_user_data,model_number:r.model_number}),r.delete()}return e.delete(),a},residueSpecToJSArray=function(e){for(var a=[],t=e.size(),s=0;s<t;s++){var r=e.get(s);a.push({resNum:r.res_no,insCode:r.ins_code,modelNumber:r.model_number,chainId:r.chain_id}),r.delete()}return e.delete(),a},validationDataToJSArray=function(e,a){void 0===a&&(a=null);for(var t=[],s=e.cviv,r=s.size(),o=0;o<r;o++){var n=s.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),d=_.residue_spec;t.push({chainId:d.chain_id,insCode:d.ins_code,seqNum:d.res_no,restype:"UNK",value:_.function_value}),_.delete(),d.delete()}i.delete()}n.delete()}return s.delete(),e.delete(),t},linesBoxToJSArray=function(e){for(var a=[],t=e.line_segments,s=t.size(),r=0;r<s;r++){for(var o=[],n=t.get(r),i=n.size(),c=0;c<i;c++){var l=n.get(c),_=l.getStart(),d=l.getFinish(),u=l.amplitude(),m={x:_.x(),y:_.y(),z:_.z()},p={x:d.x(),y:d.y(),z:d.z()};o.push({start:m,end:p,dist:u}),_.delete(),d.delete(),l.delete()}n.delete(),a.push(o)}return t.delete(),e.delete(),a},vectorHBondToJSArray=function(e){for(var a=[],t=e.size(),s=0;s<t;s++){var r=e.get(s);a.push({hb_hydrogen:r.hb_hydrogen,donor:r.donor,acceptor:r.acceptor,donor_neigh:r.donor_neigh,acceptor_neigh:r.acceptor_neigh,angle_1:r.angle_1,angle_2:r.angle_2,angle_3:r.angle_3,dist:r.dist,ligand_atom_is_donor:r.ligand_atom_is_donor,hydrogen_is_ligand_atom:r.hydrogen_is_ligand_atom,bond_has_hydrogen_flag:r.bond_has_hydrogen_flag})}return e.delete(),a},interestingPlaceDataToJSArray=function(e){for(var a=[],t=e.size(),s=0;s<t;s++){var r=e.get(s),o=r.residue_spec;a.push({modelNumber:o.model_number,chainId:o.chain_id,insCode:o.ins_code,resNum:o.res_no,featureType:r.feature_type,featureValue:r.feature_value,buttonLabel:r.button_label,badness:r.badness,coordX:r.x,coordY:r.y,coordZ:r.z}),r.delete(),o.delete()}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(),s=0;s<t;s++){var r=e.get(s);a.push({idx:r.idx,F:r.F,phi:r.phi,w:r.w,Rfree:r.Rfree,F_obs:r.F_obs,sigF_obs:r.sigF_obs,weights_used:r.weights_used}),r.delete()}return e.delete(),a},ramachandranDataToJSArray=function(e,a){for(var t=[],s=e.size(),r=0;r<s;r++){var o=e.get(r),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,s=e.triangles,r=[],o=[],n=[],i=[],c=s.size(),l=0;l<c;l++){var _=s.get(l).point_id;r.push.apply(r,[_[0],_[1],_[0],_[2],_[1],_[2]])}s.delete();var d=t.size();for(l=0;l<d;l++){var u=t.get(l);o.push.apply(o,u.pos),n.push.apply(n,u.normal),i.push.apply(i,u.color),u.delete()}return t.delete(),e.delete(),a?{prim_types:[["NORMALLINES"]],useIndices:[[!0]],idx_tri:[[r]],vert_tri:[[o]],additional_norm_tri:[[n]],norm_tri:[[n]],col_tri:[[i]]}:{prim_types:[["LINES"]],useIndices:[[!0]],idx_tri:[[r]],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 s="./".concat(a,".mtz"),r=molecules_container.auto_read_mtz(s);return cootModule.FS_unlink(s),r},replace_map_by_mtz_from_file=function(e,a,t){var s=guid(),r="./".concat(s,".mtz"),o=new Uint8Array(a);cootModule.FS_createDataFile(".",r,o,!0,!0);var n=[e,r,t.F,t.PHI,"",!1],i=molecules_container.replace_map_by_mtz_from_file.apply(molecules_container,n);return cootModule.FS_unlink(r),i},new_positions_for_residue_atoms=function(e,a){var t=0,s=new cootModule.Vectormoved_residue_t;return a.forEach((function(e){if(e.length>0){var a=e[0].label.split("/"),t=a[3].split("."),r=t[0],o=t[1];o=o||"";var n=new cootModule.moved_residue_t(a[2],parseInt(r),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()})),s.push_back(n),n.delete()}})),t+=molecules_container.new_positions_for_atoms_in_residues(e,s),s.delete(),t},read_mtz=function(e,a,t){var s=guid(),r=new Uint8Array(e);cootModule.FS_createDataFile(".","".concat(s,".mtz"),r,!0,!0);var o="./".concat(s,".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,s,r){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,s,r];return molecules_container.associate_data_mtz_file_with_map.apply(molecules_container,i),n},read_ccp4_map=function(e,a,t){var s=guid(),r=new Uint8Array(e),o="";a.endsWith(".map.gz")?o="map.gz":a.endsWith(".mrc.gz")&&(o="mrc.gz"),cootModule.FS_createDataFile(".","".concat(s).concat(o),r,!0,!0);var n="./".concat(s).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 s=new cootModule.MapIntFloat3,r=new cootModule.VectorStringUInt_pair;a.forEach((function(e,a){s.set(a+51,e.rgb);var t={first:e.cid,second:a+51};r.push_back(t)})),molecules_container.set_user_defined_bond_colours(e,s),molecules_container.set_user_defined_atom_colour_by_selection(e,r,t),r.delete(),s.delete()},doCootCommand=function(e){var a=e.returnType,t=e.command,s=e.commandArgs,r=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,s);break;case"shim_read_mtz":i=read_mtz.apply(void 0,s);break;case"shim_auto_open_mtz":i=auto_open_mtz.apply(void 0,s);break;case"shim_read_ccp4_map":i=read_ccp4_map.apply(void 0,s);break;case"shim_associate_data_mtz_file_with_map":i=associate_data_mtz_file_with_map.apply(void 0,s);break;case"shim_replace_map_by_mtz_from_file":i=replace_map_by_mtz_from_file.apply(void 0,s);break;case"shim_set_bond_colours":i=setUserDefinedBondColours.apply(void 0,s);break;default:i=molecules_container[t].apply(molecules_container,s)}var c=void 0;switch(a){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:r,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:r,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(),s="./".concat(t,".map");molecules_container.writeCCP4Map(e.data.molNo,s);var r=cootModule.FS.readFile(s,{encoding:"binary"});cootModule.FS_unlink(s),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:r.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
|
@@ -82,7 +82,6 @@ const instancedMeshToMeshData = (instanceMesh: libcootApi.InstancedMeshT, perm:
|
|
|
82
82
|
thisNorm.push(vertNormal[0])
|
|
83
83
|
thisNorm.push(vertNormal[1])
|
|
84
84
|
thisNorm.push(vertNormal[2])
|
|
85
|
-
vert.delete()
|
|
86
85
|
}
|
|
87
86
|
vertices.delete()
|
|
88
87
|
|
|
@@ -115,8 +114,6 @@ const instancedMeshToMeshData = (instanceMesh: libcootApi.InstancedMeshT, perm:
|
|
|
115
114
|
0.0, 0.0, 1.0, 0.0,
|
|
116
115
|
0.0, 0.0, 0.0, 1.0,
|
|
117
116
|
])
|
|
118
|
-
|
|
119
|
-
inst_data.delete()
|
|
120
117
|
}
|
|
121
118
|
}
|
|
122
119
|
As.delete()
|
|
@@ -165,12 +162,9 @@ const instancedMeshToMeshData = (instanceMesh: libcootApi.InstancedMeshT, perm:
|
|
|
165
162
|
thisInstance_orientations.push(instDataOrientation[3][1])
|
|
166
163
|
thisInstance_orientations.push(instDataOrientation[3][2])
|
|
167
164
|
thisInstance_orientations.push(instDataOrientation[3][3])
|
|
168
|
-
|
|
169
|
-
inst_data.delete()
|
|
170
165
|
}
|
|
171
166
|
}
|
|
172
167
|
Bs.delete()
|
|
173
|
-
inst.delete()
|
|
174
168
|
|
|
175
169
|
totNorm.push(thisNorm)
|
|
176
170
|
totPos.push(thisPos)
|
|
@@ -188,8 +182,7 @@ const instancedMeshToMeshData = (instanceMesh: libcootApi.InstancedMeshT, perm:
|
|
|
188
182
|
}
|
|
189
183
|
|
|
190
184
|
geom.delete()
|
|
191
|
-
const simpleMeshData = simpleMeshToMeshData(markup)
|
|
192
|
-
instanceMesh.delete()
|
|
185
|
+
const simpleMeshData = simpleMeshToMeshData(markup)
|
|
193
186
|
|
|
194
187
|
if (simpleMeshData.idx_tri.length > 0 && simpleMeshData.idx_tri[0].length > 0 && simpleMeshData.idx_tri[0][0].length > 0) {
|
|
195
188
|
if (toSpheres) {
|
|
@@ -233,41 +226,47 @@ const instancedMeshToMeshData = (instanceMesh: libcootApi.InstancedMeshT, perm:
|
|
|
233
226
|
}
|
|
234
227
|
|
|
235
228
|
const simpleMeshToMeshData = (simpleMesh: libcootApi.SimpleMeshT, perm: boolean = false): libcootApi.SimpleMeshJS => {
|
|
229
|
+
|
|
230
|
+
const print_timing = true;
|
|
231
|
+
const ts = performance.now()
|
|
232
|
+
|
|
236
233
|
const vertices = simpleMesh.vertices;
|
|
237
234
|
const triangles = simpleMesh.triangles;
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
let totNorm: number[] = [];
|
|
241
|
-
let totCol: number[] = [];
|
|
242
|
-
|
|
235
|
+
|
|
236
|
+
const verticesSize = vertices.size();
|
|
243
237
|
const trianglesSize = triangles.size()
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
|
|
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)
|
|
251
253
|
}
|
|
252
|
-
triangles.delete()
|
|
253
254
|
|
|
254
|
-
const
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
|
|
260
|
-
|
|
261
|
-
|
|
262
|
-
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
totCol.push(...vertColor);
|
|
266
|
-
vert.delete()
|
|
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)
|
|
267
266
|
}
|
|
268
|
-
vertices.delete()
|
|
269
267
|
|
|
270
|
-
|
|
268
|
+
vertices.delete();
|
|
269
|
+
triangles.delete();
|
|
271
270
|
|
|
272
271
|
return {
|
|
273
272
|
prim_types: [["TRIANGLES"]],
|
|
@@ -307,11 +306,6 @@ const SuperposeResultsToJSArray = (superposeResults: libcootApi.SuperposeResults
|
|
|
307
306
|
label: movResidueData.label,
|
|
308
307
|
}
|
|
309
308
|
}
|
|
310
|
-
|
|
311
|
-
movResidueData.delete()
|
|
312
|
-
movResidueSpec.delete()
|
|
313
|
-
refResidueData.delete()
|
|
314
|
-
refResidueSpec.delete()
|
|
315
309
|
|
|
316
310
|
alignedPairsData.push(currentPairData)
|
|
317
311
|
}
|
|
@@ -337,6 +331,24 @@ const colourRulesToJSArray = (colourRulesArray: emscriptem.vector<libcootApi.Pai
|
|
|
337
331
|
return returnResult;
|
|
338
332
|
}
|
|
339
333
|
|
|
334
|
+
const stringArrayArrayToJSArray = (stringArrayArray: emscriptem.vector<emscriptem.vector<string>>) => {
|
|
335
|
+
let returnResult: string[][] = []
|
|
336
|
+
const stringArrayArraySize = stringArrayArray.size()
|
|
337
|
+
for (let i = 0; i < stringArrayArraySize; i++) {
|
|
338
|
+
const stringArray = stringArrayArray.get(i)
|
|
339
|
+
const stringArraySize = stringArray.size()
|
|
340
|
+
let currentResultArray: string[] = []
|
|
341
|
+
for (let j = 0; j < stringArraySize; j++) {
|
|
342
|
+
const s = stringArray.get(j)
|
|
343
|
+
currentResultArray.push(s)
|
|
344
|
+
}
|
|
345
|
+
returnResult.push(currentResultArray)
|
|
346
|
+
stringArray.delete()
|
|
347
|
+
}
|
|
348
|
+
stringArrayArray.delete()
|
|
349
|
+
return returnResult
|
|
350
|
+
}
|
|
351
|
+
|
|
340
352
|
const floatArrayToJSArray = (floatArray: emscriptem.vector<number>) => {
|
|
341
353
|
let returnResult: number[] = []
|
|
342
354
|
const floatArraySize = floatArray.size()
|
|
@@ -345,7 +357,7 @@ const floatArrayToJSArray = (floatArray: emscriptem.vector<number>) => {
|
|
|
345
357
|
returnResult.push(f);
|
|
346
358
|
}
|
|
347
359
|
floatArray.delete()
|
|
348
|
-
return returnResult
|
|
360
|
+
return returnResult
|
|
349
361
|
}
|
|
350
362
|
|
|
351
363
|
const mapMoleculeCentreInfoToJSObject = (mapMoleculeCentreInfo: libcootApi.MapMoleculeCentreInfo): libcootApi.MapMoleculeCentreInfoJS => {
|
|
@@ -366,6 +378,19 @@ const mapMoleculeCentreInfoToJSObject = (mapMoleculeCentreInfo: libcootApi.MapMo
|
|
|
366
378
|
return returnResult;
|
|
367
379
|
}
|
|
368
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
|
+
|
|
369
394
|
const intArrayToJSArray = (intArray: emscriptem.vector<number>) => {
|
|
370
395
|
let returnResult: number[] = []
|
|
371
396
|
const intArraySize = intArray.size()
|
|
@@ -419,7 +444,6 @@ const symmetryToJSData = (symmetryDataPair: libcootApi.PairType<libcootApi.Symme
|
|
|
419
444
|
cell.delete()
|
|
420
445
|
symm_trans.delete()
|
|
421
446
|
symmetryMatrices.delete()
|
|
422
|
-
symmetryData.delete()
|
|
423
447
|
return result
|
|
424
448
|
}
|
|
425
449
|
|
|
@@ -439,7 +463,6 @@ const mmrrccStatsToJSArray = (mmrrccStats: libcootApi.PairType<emscriptem.map<li
|
|
|
439
463
|
n: densityCorrStat.n,
|
|
440
464
|
correlation: densityCorrStat.correlation()
|
|
441
465
|
})
|
|
442
|
-
residueSpec.delete()
|
|
443
466
|
densityCorrStat.delete()
|
|
444
467
|
}
|
|
445
468
|
residueSpecs.delete()
|
|
@@ -475,7 +498,6 @@ const atomSpecToJSArray = (atomSpecs: emscriptem.vector<libcootApi.AtomSpecT>):
|
|
|
475
498
|
string_user_data: atom.string_user_data,
|
|
476
499
|
model_number: atom.model_number
|
|
477
500
|
})
|
|
478
|
-
atom.delete()
|
|
479
501
|
}
|
|
480
502
|
atomSpecs.delete()
|
|
481
503
|
return returnResult
|
|
@@ -492,12 +514,22 @@ const residueSpecToJSArray = (residueSpecs: emscriptem.vector<libcootApi.Residue
|
|
|
492
514
|
modelNumber: residue.model_number,
|
|
493
515
|
chainId: residue.chain_id
|
|
494
516
|
})
|
|
495
|
-
residue.delete()
|
|
496
517
|
}
|
|
497
518
|
residueSpecs.delete()
|
|
498
519
|
return returnResult
|
|
499
520
|
}
|
|
500
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
|
+
|
|
501
533
|
const validationDataToJSArray = (validationData: libcootApi.ValidationInformationT, chainID: string | null = null): libcootApi.ValidationInformationJS[] => {
|
|
502
534
|
let returnResult: { chainId: string; insCode: string; seqNum: number; restype: string; value: number; }[] = []
|
|
503
535
|
const cviv = validationData.cviv
|
|
@@ -519,12 +551,9 @@ const validationDataToJSArray = (validationData: libcootApi.ValidationInformatio
|
|
|
519
551
|
restype: "UNK",
|
|
520
552
|
value: residue.function_value
|
|
521
553
|
})
|
|
522
|
-
residue.delete()
|
|
523
|
-
residueSpec.delete()
|
|
524
554
|
}
|
|
525
555
|
resInfo.delete()
|
|
526
556
|
}
|
|
527
|
-
chain.delete()
|
|
528
557
|
}
|
|
529
558
|
cviv.delete()
|
|
530
559
|
validationData.delete()
|
|
@@ -559,7 +588,6 @@ const linesBoxToJSArray = (BoxData: libcootApi.Generic3dLinesBondsBoxT): libcoot
|
|
|
559
588
|
envdata.push(thisEnvdata)
|
|
560
589
|
}
|
|
561
590
|
segments.delete()
|
|
562
|
-
BoxData.delete()
|
|
563
591
|
|
|
564
592
|
return envdata
|
|
565
593
|
}
|
|
@@ -620,8 +648,6 @@ const interestingPlaceDataToJSArray = (interestingPlaceData: emscriptem.vector<l
|
|
|
620
648
|
coordY: residue.y,
|
|
621
649
|
coordZ: residue.z
|
|
622
650
|
})
|
|
623
|
-
residue.delete()
|
|
624
|
-
residueSpec.delete()
|
|
625
651
|
}
|
|
626
652
|
interestingPlaceData.delete()
|
|
627
653
|
return returnResult
|
|
@@ -662,7 +688,6 @@ const autoReadMtzInfoVectToJSArray = (autoReadMtzInfoArray: emscriptem.vector<li
|
|
|
662
688
|
sigF_obs: autoReadMtzInfo.sigF_obs,
|
|
663
689
|
weights_used: autoReadMtzInfo.weights_used,
|
|
664
690
|
})
|
|
665
|
-
autoReadMtzInfo.delete()
|
|
666
691
|
}
|
|
667
692
|
autoReadMtzInfoArray.delete()
|
|
668
693
|
|
|
@@ -695,32 +720,39 @@ const ramachandranDataToJSArray = (ramachandraData: emscriptem.vector<libcootApi
|
|
|
695
720
|
}
|
|
696
721
|
|
|
697
722
|
const simpleMeshToLineMeshData = (simpleMesh: libcootApi.SimpleMeshT, normalLighting: boolean): libcootApi.SimpleMeshJS => {
|
|
723
|
+
|
|
724
|
+
const print_timing = false;
|
|
725
|
+
const ts = performance.now()
|
|
726
|
+
|
|
698
727
|
const vertices = simpleMesh.vertices;
|
|
699
728
|
const triangles = simpleMesh.triangles;
|
|
700
|
-
let totIdxs: number[] = [];
|
|
701
|
-
let totPos: number[] = [];
|
|
702
|
-
let totNorm: number[] = [];
|
|
703
|
-
let totCol: number[] = [];
|
|
704
|
-
|
|
705
729
|
const trianglesSize = triangles.size()
|
|
706
|
-
for (let i = 0; i < trianglesSize; i++) {
|
|
707
|
-
const triangle = triangles.get(i)
|
|
708
|
-
const idxs = triangle.point_id;
|
|
709
|
-
totIdxs.push(...[idxs[0], idxs[1], idxs[0], idxs[2], idxs[1], idxs[2]]);
|
|
710
|
-
}
|
|
711
|
-
triangles.delete()
|
|
712
|
-
|
|
713
730
|
const verticesSize = vertices.size()
|
|
714
|
-
|
|
715
|
-
|
|
716
|
-
|
|
717
|
-
|
|
718
|
-
|
|
719
|
-
|
|
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)
|
|
720
752
|
}
|
|
721
|
-
vertices.delete()
|
|
722
753
|
|
|
723
|
-
|
|
754
|
+
vertices.delete();
|
|
755
|
+
triangles.delete();
|
|
724
756
|
|
|
725
757
|
if (normalLighting)
|
|
726
758
|
return { prim_types: [["NORMALLINES"]], useIndices: [[true]], idx_tri: [[totIdxs]], vert_tri: [[totPos]], additional_norm_tri: [[totNorm]], norm_tri: [[totNorm]], col_tri: [[totCol]] };
|
|
@@ -873,6 +905,12 @@ const doCootCommand = (messageData: {
|
|
|
873
905
|
|
|
874
906
|
let returnResult;
|
|
875
907
|
switch (returnType) {
|
|
908
|
+
case 'fit_ligand_info_array':
|
|
909
|
+
returnResult = fitLigandInfoArrayToJSArray(cootResult)
|
|
910
|
+
break;
|
|
911
|
+
case 'string_array_array':
|
|
912
|
+
returnResult = stringArrayArrayToJSArray(cootResult)
|
|
913
|
+
break;
|
|
876
914
|
case 'instanced_mesh_perm':
|
|
877
915
|
returnResult = instancedMeshToMeshData(cootResult, true)
|
|
878
916
|
break;
|
|
@@ -948,6 +986,9 @@ const doCootCommand = (messageData: {
|
|
|
948
986
|
case 'status_instanced_mesh_pair':
|
|
949
987
|
returnResult = { status: cootResult.first, mesh: instancedMeshToMeshData(cootResult.second, false, false, 5) }
|
|
950
988
|
break;
|
|
989
|
+
case 'string_string_pair_vector':
|
|
990
|
+
returnResult = stringPairVectorToJSArray(cootResult)
|
|
991
|
+
break
|
|
951
992
|
case 'void':
|
|
952
993
|
returnResult = null
|
|
953
994
|
break
|
|
@@ -955,6 +996,7 @@ const doCootCommand = (messageData: {
|
|
|
955
996
|
default:
|
|
956
997
|
returnResult = cootResult
|
|
957
998
|
break;
|
|
999
|
+
//cootResult.delete()
|
|
958
1000
|
}
|
|
959
1001
|
|
|
960
1002
|
return {
|
|
@@ -990,7 +1032,9 @@ onmessage = function (e) {
|
|
|
990
1032
|
molecules_container.set_show_timings(false)
|
|
991
1033
|
molecules_container.fill_rotamer_probability_tables()
|
|
992
1034
|
molecules_container.set_map_sampling_rate(1.7)
|
|
993
|
-
|
|
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")
|
|
994
1038
|
})
|
|
995
1039
|
.catch((e) => {
|
|
996
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
|
|