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 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,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))};
@@ -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) // simpleMeshToMeshData should do the "delete"
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
- let totIdxs: number[] = [];
239
- let totPos: number[] = [];
240
- let totNorm: number[] = [];
241
- let totCol: number[] = [];
242
-
235
+
236
+ const verticesSize = vertices.size();
243
237
  const trianglesSize = triangles.size()
244
- for (let i = 0; i < trianglesSize; i++) {
245
- const triangle = triangles.get(i)
246
- const idxs = triangle.point_id;
247
- if (perm)
248
- totIdxs.push(...[idxs[0], idxs[2], idxs[1]]);
249
- else
250
- 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)
251
253
  }
252
- triangles.delete()
253
254
 
254
- const verticesSize = vertices.size()
255
- for (let i = 0; i < verticesSize; i++) {
256
- const vert = vertices.get(i);
257
- const vertPos = vert.pos
258
- const vertNormal = vert.normal
259
- const vertColor = vert.color
260
- totPos.push(...vertPos);
261
- if (perm)
262
- totNorm.push(...[-vertNormal[0], -vertNormal[1], -vertNormal[2]]);
263
- else
264
- totNorm.push(...vertNormal);
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
- simpleMesh.delete()
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
- for (let i = 0; i < verticesSize; i++) {
715
- const vert = vertices.get(i);
716
- totPos.push(...vert.pos);
717
- totNorm.push(...vert.normal);
718
- totCol.push(...vert.color);
719
- vert.delete()
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
- simpleMesh.delete()
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
- 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")
994
1038
  })
995
1039
  .catch((e) => {
996
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