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 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 (bzr)
19
- * clipper (bzr)
20
- * ssm (bzr)
21
- * mmdb2 (bzr)
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:3000/` .
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, Privateer code which this project compiles to WASM, can
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++.
@@ -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))};
@@ -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
- let totIdxs: number[] = [];
236
- let totPos: number[] = [];
237
- let totNorm: number[] = [];
238
- let totCol: number[] = [];
239
-
235
+
236
+ const verticesSize = vertices.size();
240
237
  const trianglesSize = triangles.size()
241
- for (let i = 0; i < trianglesSize; i++) {
242
- const triangle = triangles.get(i)
243
- const idxs = triangle.point_id;
244
- if (perm)
245
- totIdxs.push(...[idxs[0], idxs[2], idxs[1]]);
246
- else
247
- totIdxs.push(...idxs);
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 verticesSize = vertices.size()
252
- for (let i = 0; i < verticesSize; i++) {
253
- const vert = vertices.get(i);
254
- const vertPos = vert.pos
255
- const vertNormal = vert.normal
256
- const vertColor = vert.color
257
- totPos.push(...vertPos);
258
- if (perm)
259
- totNorm.push(...[-vertNormal[0], -vertNormal[1], -vertNormal[2]]);
260
- else
261
- totNorm.push(...vertNormal);
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
- vertices.delete()
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
- for (let i = 0; i < verticesSize; i++) {
711
- const vert = vertices.get(i);
712
- totPos.push(...vert.pos);
713
- totNorm.push(...vert.normal);
714
- totCol.push(...vert.color);
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
- vertices.delete()
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
- cootModule.FS.mkdir("COOT_BACKUP");
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)
@@ -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% - 10rem);
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