moorhen 0.8.5 → 0.9.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (37) hide show
  1. package/README.md +11 -1
  2. package/baby-gru/CootWorker.js +1 -1
  3. package/baby-gru/CootWorker.ts +77 -22
  4. package/baby-gru/monomers/p/PRO.cif +118 -115
  5. package/baby-gru/monomers/t/TYR.cif +26 -25
  6. package/baby-gru/moorhen.css +15 -0
  7. package/baby-gru/{wasm/moorhen.data → moorhen.data} +381 -379
  8. package/baby-gru/moorhen.js +1 -0
  9. package/baby-gru/{wasm/moorhen.wasm → moorhen.wasm} +0 -0
  10. package/baby-gru/moorhen.worker.js +1 -0
  11. package/baby-gru/web_example.js +1 -0
  12. package/baby-gru/web_example.wasm +0 -0
  13. package/moorhen.js +91 -14
  14. package/package.json +4 -2
  15. package/types/libcoot.d.ts +24 -4
  16. package/types/main.d.ts +68 -317
  17. package/types/mgWebGL.d.ts +14 -0
  18. package/types/moorhen.d.ts +136 -57
  19. package/baby-gru/wasm/RDKit_minimal.js +0 -1
  20. package/baby-gru/wasm/RDKit_minimal.wasm +0 -0
  21. package/baby-gru/wasm/cif_pdb_worker.js +0 -1
  22. package/baby-gru/wasm/crystallography_worker.js +0 -1
  23. package/baby-gru/wasm/mini_rsr_worker.js +0 -1
  24. package/baby-gru/wasm/monid_to_pdb_worker.js +0 -1
  25. package/baby-gru/wasm/moorhen.js +0 -1
  26. package/baby-gru/wasm/moorhen.worker.js +0 -1
  27. package/baby-gru/wasm/mtz_arraybuffer_worker.js +0 -1
  28. package/baby-gru/wasm/mtz_worker.js +0 -1
  29. package/baby-gru/wasm/nma_worker.js +0 -1
  30. package/baby-gru/wasm/papaparse.min.js +0 -2
  31. package/baby-gru/wasm/papaparse.min.js.LICENSE.txt +0 -6
  32. package/baby-gru/wasm/pdb_worker.js +0 -1
  33. package/baby-gru/wasm/smiles_to_pdb_worker.js +0 -1
  34. package/baby-gru/wasm/superpose_worker.js +0 -1
  35. package/baby-gru/wasm/web_example.js +0 -1
  36. package/baby-gru/wasm/web_example.wasm +0 -0
  37. /package/baby-gru/{wasm/coot_env_web.js → coot_env_web.js} +0 -0
package/README.md CHANGED
@@ -43,11 +43,21 @@ Binaries are available on the releases page. Please read the instructions there
43
43
  * git
44
44
  * curl
45
45
  * patch
46
- * emsdk (Steps 1 and 2 below)
46
+ * ninja
47
+ * meson
47
48
  * cmake
49
+ * flex
50
+ * bison
48
51
  * A *native* C++ compiler. (This is required for part of the `boost` build system).
49
52
  * `autoconf`,`autotools`
50
53
  * `libtool`
54
+ * emsdk/emscripten (Steps 1 and 2 below)
55
+ \
56
+ \
57
+ Most of these (except emscripten) can be installed by somelike like `sudo apt install git cmake curl patch meson ninja-build autoconf automake libtool flex bison g++` on a Debian like system. All of these should be available through Homebrew or Ports on macOS.
58
+ \
59
+ \
60
+ Moorhen should build on any reasonably recent version of macOS (Intel or Arm64) and any reasonly recent Linux distribution (x86_64 or aarch64). Tested on Ubuntu 22.04 x86_64, Raspberry Pi OS Bookworm/Debian 12 on Pi5, macOS Monteray and Sonama and others.
51
61
 
52
62
  1. Install emscripten (following [https://emscripten.org/docs/getting_started/downloads.html](https://emscripten.org/docs/getting_started/downloads.html)):
53
63
  `git clone https://github.com/emscripten-core/emsdk.git`
@@ -1 +1 @@
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 o in a=arguments[r])Object.prototype.hasOwnProperty.call(a,o)&&(e[o]=a[o]);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 o=[],s=[],n=[],i=[],c=[],_=[],l=[],u=[],d=[],m=e.geom,p=e.markup,g=m.size(),h=0;h<g;h++){var f=r,v=[],y=[],S=[],b=[],M=[],z=[],T=[],x=m.get(h);"spherical-atoms"===x.name&&(f=!0);for(var A=x.vertices,F=x.triangles,w=F.size(),k=0;k<w;k++){var I=F.get(k).point_id;a?(v.push(I[0]),v.push(I[2]),v.push(I[1])):(v.push(I[0]),v.push(I[1]),v.push(I[2]))}F.delete();for(var J=A.size(),D=0;D<J;D++){var C=A.get(D),N=C.pos;y.push(N[0]),y.push(N[1]),y.push(N[2]);var R=C.normal;S.push(R[0]),S.push(R[1]),S.push(R[2])}A.delete();var P=x.instancing_data_A,E=P.size();if(E>0)for(var U=0;U<E;U++){var L=(q=P.get(U)).position;z.push(L[0]),z.push(L[1]),z.push(L[2]);var O=q.colour;M.push(O[0]),M.push(O[1]),M.push(O[2]),M.push(O[3]);var B=q.size;b.push(B[0]),b.push(B[1]),b.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=x.instancing_data_B,V=j.size();if(V>0)for(U=0;U<V;U++){var q;if(!((B=(q=j.get(U)).size)[2]>t)){b.push(B[0]),b.push(B[1]),b.push(B[2]),L=q.position,z.push(L[0]),z.push(L[1]),z.push(L[2]),O=q.colour,M.push(O[0]),M.push(O[1]),M.push(O[2]),M.push(O[3]);var H=q.orientation;T.push(H[0][0]),T.push(H[0][1]),T.push(H[0][2]),T.push(H[0][3]),T.push(H[1][0]),T.push(H[1][1]),T.push(H[1][2]),T.push(H[1][3]),T.push(H[2][0]),T.push(H[2][1]),T.push(H[2][2]),T.push(H[2][3]),T.push(H[3][0]),T.push(H[3][1]),T.push(H[3][2]),T.push(H[3][3])}}j.delete(),n.push(S),s.push(y),o.push(v),i.push(b),_.push(z),l.push(T),c.push(M),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?r?{prim_types:[d,K.prim_types[0]],idx_tri:[o,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:[o,K.idx_tri[0]],vert_tri:[s,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:[o],vert_tri:[s],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),performance.now();var r=e.vertices,t=e.triangles,o=r.size(),s=t.size(),n=new Uint32Array(3*s),i=new Float32Array(3*o),c=new Float32Array(3*o),_=new Float32Array(4*o);cootModule.getPositionsFromSimpleMesh2(e,i),cootModule.getColoursFromSimpleMesh2(e,_),a?(cootModule.getReversedNormalsFromSimpleMesh2(e,c),cootModule.getPermutedTriangleIndicesFromSimpleMesh2(e,n)):(cootModule.getNormalsFromSimpleMesh2(e,c),cootModule.getTriangleIndicesFromSimpleMesh2(e,n)),performance.now();var l=i,u=_,d=c,m=n;return r.delete(),t.delete(),{prim_types:[["TRIANGLES"]],idx_tri:[[m]],vert_tri:[[l]],norm_tri:[[d]],col_tri:[[u]]}},SuperposeResultsToJSArray=function(e){for(var a=e.aligned_pairs,r=a.size(),t=[],o=0;o<r;o++){var s=a.get(o),n=s.first,i=n.residue_spec,c=s.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}};t.push(l)}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 o=e.get(t);a.push(o)}return e.delete(),a},stringArrayArrayToJSArray=function(e){for(var a=[],r=e.size(),t=0;t<r;t++){for(var o=e.get(t),s=o.size(),n=[],i=0;i<s;i++){var c=o.get(i);n.push(c)}a.push(n),o.delete()}return e.delete(),a},floatArrayToJSArray=function(e){for(var a=[],r=e.size(),t=0;t<r;t++){var o=e.get(t);a.push(o)}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},textureAsFloatsToJSTextureAsFloats=function(e){var a=[],r=e.image_data.size();console.log(r);for(var t=0;t<r;t++){var o=e.image_data.get(t);a.push(o)}return e.image_data.delete(),{width:e.width,height:e.height,x_size:e.x_size,y_size:e.y_size,z_position:e.z_position,image_data:a}},fitLigandInfoArrayToJSArray=function(e){for(var a=[],r=e.size(),t=0;t<r;t++){var o=e.get(t);a.push(__assign({},o))}return e.delete(),a},intArrayToJSArray=function(e){for(var a=[],r=e.size(),t=0;t<r;t++){var o=e.get(t);a.push(o)}return e.delete(),a},stringArrayToJSArray=function(e){for(var a=[],r=e.size(),t=0;t<r;t++){var o=e.get(t);a.push(o)}return e.delete(),a},export_map_as_gltf=function(e,a,r,t,o,s){var n="".concat(guid(),".glb");molecules_container.export_map_molecule_as_gltf(e,a,r,t,o,s,n);var i=cootModule.FS.readFile(n,{encoding:"binary"});return cootModule.FS_unlink(n),i.buffer},export_molecule_as_gltf=function(e,a,r,t,o,s,n,i,c){var _="".concat(guid(),".glb");molecules_container.export_model_molecule_as_gltf(e,a,r,t,o,s,n,i,c,_);var l=cootModule.FS.readFile(_,{encoding:"binary"});return cootModule.FS_unlink(_),l.buffer},symmetryToJSData=function(e){for(var a=[],r=e.first,t=e.second,o=r.symm_trans,s=o.size(),n=0;n<s;n++){var i=o.get(n),c=i.first,_=i.second,l=t.get(n);a.push({x:c.x(),y:c.y(),z:c.z(),asString:c.symm_as_string,isym:c.isym(),us:_.us,ws:_.ws,vs:_.vs,matrix:l}),c.delete()}return o.delete(),t.delete(),a},mmrrccStatsToJSArray=function(e){var a=function(e){for(var a=[],r=e.keys(),t=r.size(),o=0;o<t;o++){var s=r.get(o),n=e.get(s);a.push({resNum:s.res_no,insCode:s.ins_code,modelNumber:s.model_number,chainId:s.chain_id,n:n.n,correlation:n.correlation()}),n.delete()}return r.delete(),a},r=e.first,t=e.second,o={"All atoms":a(r),"Side-chains":a(t)};return r.delete(),t.delete(),o},atomSpecToJSArray=function(e){for(var a=[],r=e.size(),t=0;t<r;t++){var o=e.get(t);a.push({chain_id:o.chain_id,res_no:o.res_no,ins_code:o.ins_code,atom_name:o.atom_name,alt_conf:o.alt_conf,int_user_data:o.int_user_data,float_user_data:o.float_user_data,string_user_data:o.string_user_data,model_number:o.model_number})}return e.delete(),a},residueSpecToJSArray=function(e){for(var a=[],r=e.size(),t=0;t<r;t++){var o=e.get(t);a.push({resNum:o.res_no,insCode:o.ins_code,modelNumber:o.model_number,chainId:o.chain_id,intUserData:o.int_user_data})}return e.delete(),a},stringPairVectorToJSArray=function(e){for(var a=[],r=e.size(),t=0;t<r;t++){var o=e.get(t);a.push({first:o.first,second:o.second})}return e.delete(),a},validationDataToJSArray=function(e,a){void 0===a&&(a=null);for(var r=[],t=e.cviv,o=t.size(),s=0;s<o;s++){var n=t.get(s);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;r.push({chainId:u.chain_id,insCode:u.ins_code,seqNum:u.res_no,restype:"UNK",value:l.function_value})}i.delete()}}return t.delete(),e.delete(),r},linesBoxToJSArray=function(e){for(var a=[],r=e.line_segments,t=r.size(),o=0;o<t;o++){for(var s=[],n=r.get(o),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()};s.push({start:m,end:p,dist:d}),l.delete(),u.delete(),_.delete()}n.delete(),a.push(s)}return r.delete(),a},vectorHBondToJSArray=function(e){for(var a=[],r=e.size(),t=0;t<r;t++){var o=e.get(t);a.push({hb_hydrogen:o.hb_hydrogen,donor:o.donor,acceptor:o.acceptor,donor_neigh:o.donor_neigh,acceptor_neigh:o.acceptor_neigh,angle_1:o.angle_1,angle_2:o.angle_2,angle_3:o.angle_3,dist:o.dist,ligand_atom_is_donor:o.ligand_atom_is_donor,hydrogen_is_ligand_atom:o.hydrogen_is_ligand_atom,bond_has_hydrogen_flag:o.bond_has_hydrogen_flag})}return e.delete(),a},interestingPlaceDataToJSArray=function(e){for(var a=[],r=e.size(),t=0;t<r;t++){var o=e.get(t),s=o.residue_spec;a.push({intUserData:s.int_user_data,modelNumber:s.model_number,chainId:s.chain_id,insCode:s.ins_code,resNum:s.res_no,featureType:o.feature_type,featureValue:o.feature_value,buttonLabel:o.button_label,badness:o.badness,coordX:o.x,coordY:o.y,coordZ:o.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 o=e.get(t);a.push({idx:o.idx,F:o.F,phi:o.phi,w:o.w,weights_used:o.weights_used,Rfree:o.Rfree?o.Rfree.split("/")[3]:"",F_obs:o.F_obs?o.F_obs.split("/")[3]:"",sigF_obs:o.sigF_obs?o.sigF_obs.split("/")[3]:""})}if(e.delete(),a.some((function(e){return-1===e.idx}))){var s=a.find((function(e){return-1===e.idx}));s&&s.F_obs&&s.Rfree&&s.sigF_obs&&a.forEach((function(e){e.F_obs=s.F_obs,e.sigF_obs=s.sigF_obs,e.Rfree=s.Rfree})),a=a.filter((function(e){return-1!==e.idx}))}return a},ramachandranDataToJSArray=function(e,a){for(var r=[],t=e.size(),o=0;o<t;o++){var s=e.get(o),n=s.phi_psi;n.chain_id===a&&r.push({chainId:n.chain_id,insCode:n.ins_code,seqNum:n.residue_number,restype:s.residue_name(),isOutlier:!s.is_allowed_flag,phi:n.phi(),psi:n.psi(),is_pre_pro:"PRO"===s.residue_name()}),s.delete(),n.delete()}return e.delete(),r},vectorPairStringIntToJSArray=function(e){for(var a=[],r=e.size(),t=0;t<r;t++){var o=e.get(t),s={residue:o.first,slice:o.second};a.push(s)}return e.delete(),a},vectorPairClipperCoordFloatToJSArray=function(e){for(var a=[],r=e.size(),t=0;t<r;t++){var o=e.get(t),s=o.second,n=o.first,i={x:n.x(),y:n.y(),z:n.z()};n.delete(),a.push({value:s,coord:i})}return e.delete(),a},simpleMeshToLineMeshData=function(e,a){performance.now();var r=e.vertices,t=e.triangles,o=t.size(),s=r.size(),n=new Uint32Array(6*o),i=new Float32Array(3*s),c=new Float32Array(3*s),_=new Float32Array(4*s);cootModule.getLineIndicesFromSimpleMesh2(e,n),cootModule.getPositionsFromSimpleMesh2(e,i),cootModule.getNormalsFromSimpleMesh2(e,c),cootModule.getColoursFromSimpleMesh2(e,_),performance.now();var l=n,u=i,d=c,m=_;return r.delete(),t.delete(),a?{prim_types:[["NORMALLINES"]],useIndices:[[!0]],idx_tri:[[l]],vert_tri:[[u]],additional_norm_tri:[[d]],norm_tri:[[d]],col_tri:[[m]]}:{prim_types:[["LINES"]],useIndices:[[!0]],idx_tri:[[l]],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"),o=molecules_container.auto_read_mtz(t);return cootModule.FS_unlink(t),o},replace_map_by_mtz_from_file=function(e,a,r){var t=guid(),o="./".concat(t,".mtz"),s=new Uint8Array(a);cootModule.FS_createDataFile(".",o,s,!0,!0);var n=[e,o,r.F,r.PHI,"",!1],i=molecules_container.replace_map_by_mtz_from_file.apply(molecules_container,n);return cootModule.FS_unlink(o),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],r=new cootModule.moved_residue_t(a.chain_id,parseInt(a.res_no),"");e.forEach((function(e){var a=new cootModule.moved_atom_t(e.name,e.alt_loc,e.x,e.y,e.z,-1);r.add_atom(a),a.delete()})),t.push_back(r),r.delete()}})),r+=molecules_container.new_positions_for_atoms_in_residues(e,t),t.delete(),r},read_mtz=function(e,a,r){var t=guid(),o=new Uint8Array(e);cootModule.FS_createDataFile(".","".concat(t,".mtz"),o,!0,!0);var s="./".concat(t,".mtz"),n=[s,r.F,r.PHI,"",!1,r.isDifference],i=molecules_container.read_mtz.apply(molecules_container,n);return cootModule.FS_unlink(s),i},associate_data_mtz_file_with_map=function(e,a,r,t,o){var s=new Uint8Array(a.data);cootModule.FS_createDataFile(".","".concat(a.fileName,".mtz"),s,!0,!0);var n="./".concat(a.fileName,".mtz"),i=[e,n,r,t,o];return molecules_container.associate_data_mtz_file_with_map.apply(molecules_container,i),n},read_ccp4_map=function(e,a,r){var t=guid(),o=new Uint8Array(e),s="";a.endsWith(".map.gz")?s="map.gz":a.endsWith(".mrc.gz")&&(s="mrc.gz"),cootModule.FS_createDataFile(".","".concat(t).concat(s),o,!0,!0);var n="./".concat(t).concat(s),i=[n,r],c=-1;try{c=molecules_container.read_ccp4_map.apply(molecules_container,i)}catch(e){console.warn(e)}finally{cootModule.FS_unlink(n)}return c},setUserDefinedBondColours=function(e,a,r){void 0===r&&(r=!1);var t=new cootModule.MapIntFloat3,o=new cootModule.VectorStringUInt_pair;a.forEach((function(e,a){t.set(a+51,e.rgb);var r={first:e.cid,second:a+51};o.push_back(r)})),molecules_container.set_user_defined_bond_colours(e,t),molecules_container.set_user_defined_atom_colour_by_selection(e,o,r),o.delete(),t.delete()},privateerValidationToJSArray=function(e){for(var a=[],r=e.size(),t=0;t<r;t++){for(var o=e.get(t),s=[],n=o.torsions,i=n.size(),c=0;c<i;c++)s.push(n.get(c));n.delete();var _={torsions:s,svg:o.svg.replace(/: *32/g,""),id:o.id.replace(/: *32/g,""),chain:o.chain,wurcs:o.wurcs,glyconnect_id:o.glyconnect_id,glytoucan_id:o.glytoucan_id,torsion_err:o.torsion_err,anomer_err:o.anomer_err,conformation_err:o.conformation_err,puckering_err:o.puckering_err,chirality_err:o.chirality_err};a.push(_)}return e.delete(),a},doCootCommand=function(e){var a=e.returnType,r=e.command,t=e.commandArgs,o=e.messageId,s=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;case"shim_export_map_as_gltf":i=export_map_as_gltf.apply(void 0,t);break;case"shim_export_molecule_as_gltf":i=export_molecule_as_gltf.apply(void 0,t);break;default:i=molecules_container[r].apply(molecules_container,t)}var c=void 0;switch(a){case"texture_as_floats_t":c=textureAsFloatsToJSTextureAsFloats(i);break;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;case"vector_pair_clipper_coord_float":c=vectorPairClipperCoordFloatToJSArray(i);break;case"vector_pair_string_int":c=vectorPairStringIntToJSArray(i);break;case"privateer_results":c=privateerValidationToJSArray(i);break;default:c=i}try{i.delete()}catch(e){}return{messageId:o,messageSendTime:Date.now(),command:r,consoleMessage:"Completed ".concat(r," in ").concat(Date.now()-s," ms"),result:{status:"Completed",result:c}}}catch(e){return console.log(e),{messageId:o,myTimeStamp:s,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_use_gemmi(!1),molecules_container.set_show_timings(!1),molecules_container.set_refinement_is_verbose(!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("close"===e.data.message)null==molecules_container||molecules_container.delete(),postMessage({messageId:e.data.messageId,myTimeStamp:e.data.myTimeStamp,consoleMessage:"Closed molecules container",message:e.data.message,result:{}});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 o=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:o.buffer}})}else if("delete_file_name"===e.data.message){var s=cootModule.FS_unlink(e.data.fileName);postMessage({messageId:e.data.messageId,myTimeStamp:e.data.myTimeStamp,messageTag:"result",result:s})}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&&(s=doCootCommand(e.data),postMessage(s))};
1
+ var cootModule,molecules_container,ccp4Module,__assign=this&&this.__assign||function(){return __assign=Object.assign||function(e){for(var r,a=1,t=arguments.length;a<t;a++)for(var o in r=arguments[a])Object.prototype.hasOwnProperty.call(r,o)&&(e[o]=r[o]);return e},__assign.apply(this,arguments)};importScripts("./moorhen.js"),importScripts("./web_example.js");var guid=function(){var e=Date.now();return"xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx".replace(/[xy]/g,(function(r){var a=(e+16*Math.random())%16|0;return e=Math.floor(e/16),("x"===r?a:3&a|8).toString(16)}))},print=function(e){console.log(e)},parseMonLibListCif=function(e){for(var r=cootModule.parse_mon_lib_list_cif(e),a=r.size(),t=[],o=0;o<a;o++){var s=r.get(o);t.push({three_letter_code:s.three_letter_code,name:s.name.replaceAll("'","").toLowerCase()})}return r.delete(),t},instancedMeshToMeshData=function(e,r,a,t){void 0===a&&(a=!1),void 0===t&&(t=1e4);for(var o=[],s=[],n=[],i=[],c=[],l=[],_=[],u=[],d=[],m=e.geom,p=e.markup,g=m.size(),h=0;h<g;h++){var f=a,v=[],y=[],b=[],S=[],M=[],z=[],A=[],T=m.get(h);"spherical-atoms"===T.name&&(f=!0);for(var x=T.vertices,F=T.triangles,k=F.size(),w=0;w<k;w++){var I=F.get(w).point_id;r?(v.push(I[0]),v.push(I[2]),v.push(I[1])):(v.push(I[0]),v.push(I[1]),v.push(I[2]))}F.delete();for(var J=x.size(),D=0;D<J;D++){var C=x.get(D),N=C.pos;y.push(N[0]),y.push(N[1]),y.push(N[2]);var R=C.normal;b.push(R[0]),b.push(R[1]),b.push(R[2])}x.delete();var P=T.instancing_data_A,L=P.size();if(L>0)for(var E=0;E<L;E++){var U=(q=P.get(E)).position;z.push(U[0]),z.push(U[1]),z.push(U[2]);var O=q.colour;M.push(O[0]),M.push(O[1]),M.push(O[2]),M.push(O[3]);var j=q.size;S.push(j[0]),S.push(j[1]),S.push(j[2]),A.push.apply(A,[1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1])}P.delete();var B=T.instancing_data_B,V=B.size();if(V>0)for(E=0;E<V;E++){var q;if(!((j=(q=B.get(E)).size)[2]>t)){S.push(j[0]),S.push(j[1]),S.push(j[2]),U=q.position,z.push(U[0]),z.push(U[1]),z.push(U[2]),O=q.colour,M.push(O[0]),M.push(O[1]),M.push(O[2]),M.push(O[3]);var H=q.orientation;A.push(H[0][0]),A.push(H[0][1]),A.push(H[0][2]),A.push(H[0][3]),A.push(H[1][0]),A.push(H[1][1]),A.push(H[1][2]),A.push(H[1][3]),A.push(H[2][0]),A.push(H[2][1]),A.push(H[2][2]),A.push(H[2][3]),A.push(H[3][0]),A.push(H[3][1]),A.push(H[3][2]),A.push(H[3][3])}}B.delete(),n.push(b),s.push(y),o.push(v),i.push(S),l.push(z),_.push(A),c.push(M),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?a?{prim_types:[d,K.prim_types[0]],idx_tri:[o,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:[u,null],instance_sizes:[i,null],instance_origins:[l,null],instance_orientations:[_,null]}:{prim_types:[d,K.prim_types[0]],idx_tri:[o,K.idx_tri[0]],vert_tri:[s,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:[l,null],instance_orientations:[_,null]}:{prim_types:[d],idx_tri:[o],vert_tri:[s],norm_tri:[n],col_tri:[c],instance_use_colors:[u],instance_sizes:[i],instance_origins:[l],instance_orientations:[_]}},simpleMeshToMeshData=function(e,r,a){void 0===r&&(r=!1),void 0===a&&(a=!1);var t=(performance.now(),e.vertices),o=e.triangles,s=t.size(),n=o.size(),i=new Uint32Array(3*n),c=new Float32Array(3*s),l=new Float32Array(3*s),_=new Float32Array(4*s);cootModule.getPositionsFromSimpleMesh2(e,c),cootModule.getColoursFromSimpleMesh2(e,_),r?(a?cootModule.getReversedNormalsFromSimpleMesh3(e,l):cootModule.getReversedNormalsFromSimpleMesh2(e,l),cootModule.getPermutedTriangleIndicesFromSimpleMesh2(e,i)):(cootModule.getNormalsFromSimpleMesh2(e,l),cootModule.getTriangleIndicesFromSimpleMesh2(e,i)),performance.now();var u=c,d=_,m=l,p=i;return t.delete(),o.delete(),{prim_types:[["TRIANGLES"]],idx_tri:[[p]],vert_tri:[[u]],norm_tri:[[m]],col_tri:[[d]]}},SuperposeResultsToJSArray=function(e){for(var r=e.aligned_pairs,a=r.size(),t=[],o=0;o<a;o++){var s=r.get(o),n=s.first,i=n.residue_spec,c=s.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 r.delete(),{referenceSequence:e.alignment.first,movingSequence:e.alignment.second,supperposeInfo:e.superpose_info,alignedPairsData:t}},colourRulesToJSArray=function(e){for(var r=[],a=e.size(),t=0;t<a;t++){var o=e.get(t);r.push(o)}return e.delete(),r},stringArrayArrayToJSArray=function(e){for(var r=[],a=e.size(),t=0;t<a;t++){for(var o=e.get(t),s=o.size(),n=[],i=0;i<s;i++){var c=o.get(i);n.push(c)}r.push(n),o.delete()}return e.delete(),r},floatArrayToJSArray=function(e){for(var r=[],a=e.size(),t=0;t<a;t++){var o=e.get(t);r.push(o)}return e.delete(),r},mapMoleculeCentreInfoToJSObject=function(e){var r=e.updated_centre,a={updated_centre:[r.x(),r.y(),r.z()],success:e.success,suggested_radius:e.suggested_radius,suggested_contour_level:e.suggested_contour_level};return r.delete(),a},textureAsFloatsToJSTextureAsFloats=function(e){var r=e.width*e.height,a=new Float32Array(r),t=performance.now();cootModule.getTextureArray(e,a);var o=performance.now();return console.log("Time to convert texture array to JS",o-t),{width:e.width,height:e.height,x_size:e.x_size,y_size:e.y_size,z_position:e.z_position,image_data:a}},fitLigandInfoArrayToJSArray=function(e){for(var r=[],a=e.size(),t=0;t<a;t++){var o=e.get(t);r.push(__assign({},o))}return e.delete(),r},intArrayToJSArray=function(e){for(var r=[],a=e.size(),t=0;t<a;t++){var o=e.get(t);r.push(o)}return e.delete(),r},stringArrayToJSArray=function(e){for(var r=[],a=e.size(),t=0;t<a;t++){var o=e.get(t);r.push(o)}return e.delete(),r},export_map_as_gltf=function(e,r,a,t,o,s){var n="".concat(guid(),".glb");molecules_container.export_map_molecule_as_gltf(e,r,a,t,o,s,n);var i=cootModule.FS.readFile(n,{encoding:"binary"});return cootModule.FS_unlink(n),i.buffer},export_molecular_represenation_as_gltf=function(e,r,a,t){var o="".concat(guid(),".glb");molecules_container.export_molecular_represenation_as_gltf(e,r,a,t,o);var s=cootModule.FS.readFile(o,{encoding:"binary"});return cootModule.FS_unlink(o),s.buffer},export_molecule_as_gltf=function(e,r,a,t,o,s,n,i,c){var l="".concat(guid(),".glb");molecules_container.export_model_molecule_as_gltf(e,r,a,t,o,s,n,i,c,l);var _=cootModule.FS.readFile(l,{encoding:"binary"});return cootModule.FS_unlink(l),_.buffer},symmetryToJSData=function(e){for(var r=[],a=e.first,t=e.second,o=a.symm_trans,s=o.size(),n=0;n<s;n++){var i=o.get(n),c=i.first,l=i.second,_=t.get(n);r.push({x:c.x(),y:c.y(),z:c.z(),asString:c.symm_as_string,isym:c.isym(),us:l.us,ws:l.ws,vs:l.vs,matrix:_}),c.delete()}return o.delete(),t.delete(),r},mmrrccStatsToJSArray=function(e){var r=function(e){for(var r=[],a=e.keys(),t=a.size(),o=0;o<t;o++){var s=a.get(o),n=e.get(s);r.push({resNum:s.res_no,insCode:s.ins_code,modelNumber:s.model_number,chainId:s.chain_id,n:n.n,correlation:n.correlation()}),n.delete()}return a.delete(),r},a=e.first,t=e.second,o={"All atoms":r(a),"Side-chains":r(t)};return a.delete(),t.delete(),o},atomSpecToJSArray=function(e){for(var r=[],a=e.size(),t=0;t<a;t++){var o=e.get(t);r.push({chain_id:o.chain_id,res_no:o.res_no,ins_code:o.ins_code,atom_name:o.atom_name,alt_conf:o.alt_conf,int_user_data:o.int_user_data,float_user_data:o.float_user_data,string_user_data:o.string_user_data,model_number:o.model_number})}return e.delete(),r},residueSpecToJSArray=function(e){for(var r=[],a=e.size(),t=0;t<a;t++){var o=e.get(t);r.push({resNum:o.res_no,insCode:o.ins_code,modelNumber:o.model_number,chainId:o.chain_id,intUserData:o.int_user_data})}return e.delete(),r},stringPairVectorToJSArray=function(e){for(var r=[],a=e.size(),t=0;t<a;t++){var o=e.get(t);r.push({first:o.first,second:o.second})}return e.delete(),r},validationDataToJSArray=function(e,r){void 0===r&&(r=null);for(var a=[],t=e.cviv,o=t.size(),s=0;s<o;s++){var n=t.get(s);if(null!==r&&n.chain_id!==r);else{for(var i=n.rviv,c=i.size(),l=0;l<c;l++){var _=i.get(l),u=_.residue_spec;a.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(),a},linesBoxToJSArray=function(e){for(var r=[],a=e.line_segments,t=a.size(),o=0;o<t;o++){for(var s=[],n=a.get(o),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()};s.push({start:m,end:p,dist:d}),_.delete(),u.delete(),l.delete()}n.delete(),r.push(s)}return a.delete(),r},vectorHBondToJSArray=function(e){for(var r=[],a=e.size(),t=0;t<a;t++){var o=e.get(t);r.push({hb_hydrogen:o.hb_hydrogen,donor:o.donor,acceptor:o.acceptor,donor_neigh:o.donor_neigh,acceptor_neigh:o.acceptor_neigh,angle_1:o.angle_1,angle_2:o.angle_2,angle_3:o.angle_3,dist:o.dist,ligand_atom_is_donor:o.ligand_atom_is_donor,hydrogen_is_ligand_atom:o.hydrogen_is_ligand_atom,bond_has_hydrogen_flag:o.bond_has_hydrogen_flag})}return e.delete(),r},interestingPlaceDataToJSArray=function(e){for(var r=[],a=e.size(),t=0;t<a;t++){var o=e.get(t),s=o.residue_spec;r.push({intUserData:s.int_user_data,modelNumber:s.model_number,chainId:s.chain_id,insCode:s.ins_code,resNum:s.res_no,featureType:o.feature_type,featureValue:o.feature_value,buttonLabel:o.button_label,badness:o.badness,coordX:o.x,coordY:o.y,coordZ:o.z})}return e.delete(),r},histogramInfoToJSData=function(e){var r=e.counts;return{counts:intArrayToJSArray(r),bin_width:e.bin_width,base:e.base}},autoReadMtzInfoVectToJSArray=function(e){for(var r=[],a=e.size(),t=0;t<a;t++){var o=e.get(t);r.push({idx:o.idx,F:o.F,phi:o.phi,w:o.w,weights_used:o.weights_used,Rfree:o.Rfree?o.Rfree.split("/")[3]:"",F_obs:o.F_obs?o.F_obs.split("/")[3]:"",sigF_obs:o.sigF_obs?o.sigF_obs.split("/")[3]:""})}if(e.delete(),r.some((function(e){return-1===e.idx}))){var s=r.find((function(e){return-1===e.idx}));s&&s.F_obs&&s.Rfree&&s.sigF_obs&&r.forEach((function(e){e.F_obs=s.F_obs,e.sigF_obs=s.sigF_obs,e.Rfree=s.Rfree})),r=r.filter((function(e){return-1!==e.idx}))}return r},ramachandranDataToJSArray=function(e,r){for(var a=[],t=e.size(),o=0;o<t;o++){var s=e.get(o),n=s.phi_psi;n.chain_id===r&&a.push({chainId:n.chain_id,insCode:n.ins_code,seqNum:n.residue_number,restype:s.residue_name(),isOutlier:!s.is_allowed_flag,phi:n.phi(),psi:n.psi(),is_pre_pro:"PRO"===s.residue_name()}),s.delete(),n.delete()}return e.delete(),a},vectorPairStringIntToJSArray=function(e){for(var r=[],a=e.size(),t=0;t<a;t++){var o=e.get(t),s={residue:o.first,slice:o.second};r.push(s)}return e.delete(),r},vectorPairClipperCoordFloatToJSArray=function(e){for(var r=[],a=e.size(),t=0;t<a;t++){var o=e.get(t),s=o.second,n=o.first,i={x:n.x(),y:n.y(),z:n.z()};n.delete(),r.push({value:s,coord:i})}return e.delete(),r},simpleMeshToLineMeshData=function(e,r){var a=(performance.now(),e.vertices),t=e.triangles,o=t.size(),s=a.size(),n=new Uint32Array(6*o),i=new Float32Array(3*s),c=new Float32Array(3*s),l=new Float32Array(4*s);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 a.delete(),t.delete(),r?{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_read_mtz=function(e){var r=guid(),a=new Uint8Array(e);cootModule.FS_createDataFile(".","".concat(r,".mtz"),a,!0,!0);var t="./".concat(r,".mtz"),o=molecules_container.auto_read_mtz(t);return cootModule.FS_unlink(t),o},replace_map_by_mtz_from_file=function(e,r,a){var t=guid(),o="./".concat(t,".mtz"),s=new Uint8Array(r);cootModule.FS_createDataFile(".",o,s,!0,!0);var n=[e,o,a.F,a.PHI,"",!1],i=molecules_container.replace_map_by_mtz_from_file.apply(molecules_container,n);return cootModule.FS_unlink(o),i},new_positions_for_residue_atoms=function(e,r){var a=0,t=new cootModule.Vectormoved_residue_t;return r.forEach((function(e){if(e.length>0){var r=e[0],a=new cootModule.moved_residue_t(r.chain_id,parseInt(r.res_no),"");e.forEach((function(e){var r=new cootModule.moved_atom_t(e.name,e.alt_loc,e.x,e.y,e.z,-1);a.add_atom(r),r.delete()})),t.push_back(a),a.delete()}})),a+=molecules_container.new_positions_for_atoms_in_residues(e,t),t.delete(),a},read_mtz=function(e,r,a){var t=guid(),o=new Uint8Array(e);cootModule.FS_createDataFile(".","".concat(t,".mtz"),o,!0,!0);var s="./".concat(t,".mtz"),n=[s,a.F,a.PHI,"",!1,a.isDifference],i=molecules_container.read_mtz.apply(molecules_container,n);return cootModule.FS_unlink(s),i},associate_data_mtz_file_with_map=function(e,r,a,t,o){var s=new Uint8Array(r.data);cootModule.FS_createDataFile(".","".concat(r.fileName,".mtz"),s,!0,!0);var n="./".concat(r.fileName,".mtz"),i=[e,n,a,t,o];return molecules_container.associate_data_mtz_file_with_map.apply(molecules_container,i),n},read_ccp4_map=function(e,r,a){var t=guid(),o=new Uint8Array(e),s="";r.endsWith(".map.gz")?s="map.gz":r.endsWith(".mrc.gz")&&(s="mrc.gz"),cootModule.FS_createDataFile(".","".concat(t).concat(s),o,!0,!0);var n="./".concat(t).concat(s),i=[n,a],c=-1;try{c=molecules_container.read_ccp4_map.apply(molecules_container,i)}catch(e){console.warn(e)}finally{cootModule.FS_unlink(n)}return c},setUserDefinedBondColours=function(e,r,a){void 0===a&&(a=!1);var t=new cootModule.MapIntFloat4,o=new cootModule.VectorStringUInt_pair;r.forEach((function(e,r){t.set(r+51,e.rgba);var a={first:e.cid,second:r+51};o.push_back(a)})),molecules_container.set_user_defined_bond_colours(e,t),molecules_container.set_user_defined_atom_colour_by_selection(e,o,a),o.delete(),t.delete()},privateerValidationToJSArray=function(e){for(var r=[],a=e.size(),t=0;t<a;t++){for(var o=e.get(t),s=[],n=o.torsions,i=n.size(),c=0;c<i;c++)s.push(n.get(c));n.delete();var l={torsions:s,svg:o.svg.replace(/: *32/g,""),id:o.id.replace(/: *32/g,""),chain:o.chain,wurcs:o.wurcs,glyconnect_id:o.glyconnect_id,glytoucan_id:o.glytoucan_id,torsion_err:o.torsion_err,anomer_err:o.anomer_err,conformation_err:o.conformation_err,puckering_err:o.puckering_err,chirality_err:o.chirality_err};r.push(l)}return e.delete(),r},headerInfoAsJSObject=function(e){var r=e.author_lines,a=stringArrayToJSArray(r),t=e.compound_lines,o=stringArrayToJSArray(t),s=e.journal_lines,n=stringArrayToJSArray(s);return{title:e.title,author_lines:a,compound_lines:o,journal_lines:n}},doCootCommand=function(e){var r=e.returnType,a=e.command,t=e.commandArgs,o=e.messageId,s=e.myTimeStamp,n=e.message;try{var i=void 0;switch(a){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_read_mtz":i=auto_read_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;case"shim_export_map_as_gltf":i=export_map_as_gltf.apply(void 0,t);break;case"shim_export_molecule_as_gltf":i=export_molecule_as_gltf.apply(void 0,t);break;case"shim_export_molecular_represenation_as_gltf":i=export_molecular_represenation_as_gltf.apply(void 0,t);break;case"parse_mon_lib_list_cif":i=parseMonLibListCif.apply(void 0,t);break;default:i=molecules_container[a].apply(molecules_container,t)}var c=void 0;switch(r){case"header_info_t":c=headerInfoAsJSObject(i);break;case"texture_as_floats_t":c=textureAsFloatsToJSTextureAsFloats(i);break;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_perm3":c=simpleMeshToMeshData(i,!0,!0);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;case"vector_pair_clipper_coord_float":c=vectorPairClipperCoordFloatToJSArray(i);break;case"vector_pair_string_int":c=vectorPairStringIntToJSArray(i);break;case"privateer_results":c=privateerValidationToJSArray(i);break;default:c=i}try{i.delete()}catch(e){}return{messageId:o,messageSendTime:Date.now(),command:a,consoleMessage:"Completed ".concat(a," in ").concat(Date.now()-s," ms"),result:{status:"Completed",result:c}}}catch(e){return console.log(e),{messageId:o,myTimeStamp:s,message:n,consoleMessage:"EXCEPTION RAISED IN ".concat(a,", ").concat(e),result:{status:"Exception"}}}};onmessage=function(e){if("CootInitialize"===e.data.message)createRSRModule({onRuntimeInitialized:function(){},mainScriptUrlOrBlob:"moorhen.js",print,printErr:print}).then((function(r){postMessage({consoleMessage:"Initialized molecules_container",message:e.data.message,messageId:e.data.messageId}),(molecules_container=new(cootModule=r).molecules_container_js(!1)).set_use_gemmi(!1),molecules_container.set_show_timings(!1),molecules_container.set_refinement_is_verbose(!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({onRuntimeInitialized:function(){},mainScriptUrlOrBlob:"web_example.js",print,printErr:print}).then((function(e){ccp4Module=e})).catch((function(e){console.log(e),print(e)}));else if("close"===e.data.message)null==molecules_container||molecules_container.delete(),postMessage({messageId:e.data.messageId,myTimeStamp:e.data.myTimeStamp,consoleMessage:"Closed molecules container",message:e.data.message,result:{}});else if("get_mtz_data"===e.data.message){var r=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:r}})}else if("get_map"===e.data.message){var a=guid(),t="./".concat(a,".map");molecules_container.writeCCP4Map(e.data.molNo,t);var o=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:o.buffer}})}else if("delete_file_name"===e.data.message){var s=cootModule.FS_unlink(e.data.fileName);postMessage({messageId:e.data.messageId,myTimeStamp:e.data.myTimeStamp,messageTag:"result",result:s})}else if("coot_command_list"===e.data.message){var n=e.data.commandList.map((function(r){return doCootCommand(__assign(__assign({},e.data),r))}));postMessage({messageId:e.data.messageId,resultList:n})}"coot_command"===e.data.message&&(s=doCootCommand(e.data),postMessage(s))};
@@ -3,9 +3,9 @@ import { emscriptem } from "../../src/types/emscriptem"
3
3
  import { privateer } from "../../src/types/privateer";
4
4
 
5
5
  // @ts-ignore
6
- importScripts('./wasm/moorhen.js')
6
+ importScripts('./moorhen.js')
7
7
  // @ts-ignore
8
- importScripts('./wasm/web_example.js')
8
+ importScripts('./web_example.js')
9
9
 
10
10
  let cootModule: libcootApi.CootModule;
11
11
  let molecules_container: libcootApi.MoleculesContainerJS;
@@ -24,7 +24,24 @@ const guid = () => {
24
24
  // @ts-ignore
25
25
  let print = (stuff) => {
26
26
  console.log(stuff)
27
- postMessage({ consoleMessage: JSON.stringify(stuff) })
27
+ }
28
+
29
+ const parseMonLibListCif = (fileContents: string): libcootApi.compoundInfo[] => {
30
+ const table = cootModule.parse_mon_lib_list_cif(fileContents)
31
+ const tableSize = table.size()
32
+
33
+ let result: libcootApi.compoundInfo[] = []
34
+ for (let i = 0; i < tableSize; i++) {
35
+ const compound = table.get(i)
36
+ result.push({
37
+ three_letter_code: compound.three_letter_code,
38
+ // @ts-ignore
39
+ name: compound.name.replaceAll("'", "").toLowerCase()
40
+ })
41
+ }
42
+
43
+ table.delete()
44
+ return result
28
45
  }
29
46
 
30
47
  const instancedMeshToMeshData = (instanceMesh: libcootApi.InstancedMeshT, perm: boolean, toSpheres: boolean = false, maxZSize: number = 10000.): libcootApi.InstancedMeshJS => {
@@ -226,7 +243,7 @@ const instancedMeshToMeshData = (instanceMesh: libcootApi.InstancedMeshT, perm:
226
243
  }
227
244
  }
228
245
 
229
- const simpleMeshToMeshData = (simpleMesh: libcootApi.SimpleMeshT, perm: boolean = false): libcootApi.SimpleMeshJS => {
246
+ const simpleMeshToMeshData = (simpleMesh: libcootApi.SimpleMeshT, perm: boolean = false, keepNorm: boolean = false): libcootApi.SimpleMeshJS => {
230
247
 
231
248
  const print_timing = false
232
249
  const ts = performance.now()
@@ -246,7 +263,11 @@ const simpleMeshToMeshData = (simpleMesh: libcootApi.SimpleMeshT, perm: boolean
246
263
  cootModule.getColoursFromSimpleMesh2(simpleMesh,totCol_C)
247
264
 
248
265
  if (perm){
249
- cootModule.getReversedNormalsFromSimpleMesh2(simpleMesh,totNorm_C)
266
+ if(keepNorm){
267
+ cootModule.getReversedNormalsFromSimpleMesh3(simpleMesh,totNorm_C)
268
+ } else {
269
+ cootModule.getReversedNormalsFromSimpleMesh2(simpleMesh,totNorm_C)
270
+ }
250
271
  cootModule.getPermutedTriangleIndicesFromSimpleMesh2(simpleMesh,totIdxs_C)
251
272
  } else {
252
273
  cootModule.getNormalsFromSimpleMesh2(simpleMesh,totNorm_C)
@@ -381,16 +402,14 @@ const mapMoleculeCentreInfoToJSObject = (mapMoleculeCentreInfo: libcootApi.MapMo
381
402
 
382
403
  const textureAsFloatsToJSTextureAsFloats = (data:libcootApi.textureAsFloats): libcootApi.textureAsFloatsJS => {
383
404
 
384
- let image_data = []
405
+ const imageDataVecSize = data.width * data.height
385
406
 
386
- const imageDataVecSize = data.image_data.size()
387
- console.log(imageDataVecSize);
388
- for (let i = 0; i < imageDataVecSize; i++) {
389
- const texVal = data.image_data.get(i)
390
- image_data.push(texVal)
391
- }
407
+ let image_data = new Float32Array(imageDataVecSize)
392
408
 
393
- data.image_data.delete()
409
+ const t1 = performance.now()
410
+ cootModule.getTextureArray(data,image_data)
411
+ const t2 = performance.now()
412
+ console.log("Time to convert texture array to JS",t2-t1)
394
413
 
395
414
  return {
396
415
  width:data.width,
@@ -445,6 +464,14 @@ const export_map_as_gltf = (imol: number, x: number, y: number, z: number, radiu
445
464
  return fileContents.buffer
446
465
  }
447
466
 
467
+ const export_molecular_represenation_as_gltf = (imol: number, cid: string, colourScheme: string, style: string) => {
468
+ const fileName = `${guid()}.glb`
469
+ molecules_container.export_molecular_represenation_as_gltf(imol, cid, colourScheme, style, fileName)
470
+ const fileContents = cootModule.FS.readFile(fileName, { encoding: 'binary' }) as Uint8Array
471
+ cootModule.FS_unlink(fileName)
472
+ return fileContents.buffer
473
+ }
474
+
448
475
  const export_molecule_as_gltf = (
449
476
  imol: number, cid: string, mode: string, isDark: boolean, bondWidth: number,
450
477
  atomRadius: number, bondSmoothness: number, drawHydrogens: boolean, drawMissingResidues: boolean
@@ -863,7 +890,7 @@ const simpleMeshToLineMeshData = (simpleMesh: libcootApi.SimpleMeshT, normalLigh
863
890
 
864
891
  }
865
892
 
866
- const auto_open_mtz = (mtzData: ArrayBufferLike) => {
893
+ const auto_read_mtz = (mtzData: ArrayBufferLike) => {
867
894
  const theGuid = guid()
868
895
  const asUint8Array = new Uint8Array(mtzData)
869
896
  cootModule.FS_createDataFile(".", `${theGuid}.mtz`, asUint8Array, true, true);
@@ -950,12 +977,12 @@ const read_ccp4_map = (mapData: ArrayBufferLike, name: string, isDiffMap: boolea
950
977
  return molNo
951
978
  }
952
979
 
953
- const setUserDefinedBondColours = (imol: number, colours: { cid: string; rgb: [number, number, number] }[], applyColourToNonCarbonAtoms: boolean = false) => {
954
- let colourMap = new cootModule.MapIntFloat3()
980
+ const setUserDefinedBondColours = (imol: number, colours: { cid: string; rgba: [number, number, number, number] }[], applyColourToNonCarbonAtoms: boolean = false) => {
981
+ let colourMap = new cootModule.MapIntFloat4()
955
982
  let indexedResiduesVec = new cootModule.VectorStringUInt_pair()
956
983
 
957
984
  colours.forEach((colour, index) => {
958
- colourMap.set(index + 51, colour.rgb)
985
+ colourMap.set(index + 51, colour.rgba)
959
986
  const i = { first: colour.cid, second: index + 51 }
960
987
  indexedResiduesVec.push_back(i)
961
988
  })
@@ -1010,7 +1037,25 @@ const privateerValidationToJSArray = (results: emscriptem.vector<privateer.Resul
1010
1037
 
1011
1038
  results.delete();
1012
1039
  return data;
1040
+ }
1041
+
1042
+ const headerInfoAsJSObject = (result: libcootApi.headerInfo): libcootApi.headerInfoJS => {
1043
+
1044
+ const authorLines = result.author_lines
1045
+ const author_lines: string[] = stringArrayToJSArray(authorLines)
1046
+
1047
+ const compoundLines = result.compound_lines
1048
+ const compound_lines: string[] = stringArrayToJSArray(compoundLines)
1013
1049
 
1050
+ const journalLines = result.journal_lines
1051
+ const journal_lines: string[] = stringArrayToJSArray(journalLines)
1052
+
1053
+ return {
1054
+ title: result.title,
1055
+ author_lines,
1056
+ compound_lines,
1057
+ journal_lines
1058
+ }
1014
1059
  }
1015
1060
 
1016
1061
  const doCootCommand = (messageData: {
@@ -1035,8 +1080,8 @@ const doCootCommand = (messageData: {
1035
1080
  case 'shim_read_mtz':
1036
1081
  cootResult = read_mtz(...commandArgs as [ArrayBufferLike, string, { F: string; PHI: string; isDifference: boolean; }])
1037
1082
  break
1038
- case 'shim_auto_open_mtz':
1039
- cootResult = auto_open_mtz(...commandArgs as [ArrayBuffer])
1083
+ case 'shim_auto_read_mtz':
1084
+ cootResult = auto_read_mtz(...commandArgs as [ArrayBuffer])
1040
1085
  break
1041
1086
  case 'shim_read_ccp4_map':
1042
1087
  cootResult = read_ccp4_map(...commandArgs as [ArrayBuffer, string, boolean])
@@ -1048,7 +1093,7 @@ const doCootCommand = (messageData: {
1048
1093
  cootResult = replace_map_by_mtz_from_file(...commandArgs as [number, ArrayBufferLike, { F: string; PHI: string; }])
1049
1094
  break
1050
1095
  case 'shim_set_bond_colours':
1051
- cootResult = setUserDefinedBondColours(...commandArgs as [number, { cid: string; rgb: [number, number, number] }[], boolean])
1096
+ cootResult = setUserDefinedBondColours(...commandArgs as [number, { cid: string; rgba: [number, number, number, number] }[], boolean])
1052
1097
  break
1053
1098
  case 'shim_export_map_as_gltf':
1054
1099
  cootResult = export_map_as_gltf(...commandArgs as [number, number, number, number, number, number])
@@ -1056,6 +1101,12 @@ const doCootCommand = (messageData: {
1056
1101
  case 'shim_export_molecule_as_gltf':
1057
1102
  cootResult = export_molecule_as_gltf(...commandArgs as [number, string, string, boolean, number, number, number, boolean, boolean])
1058
1103
  break
1104
+ case 'shim_export_molecular_represenation_as_gltf':
1105
+ cootResult = export_molecular_represenation_as_gltf(...commandArgs as [number, string, string, string])
1106
+ break
1107
+ case "parse_mon_lib_list_cif":
1108
+ cootResult = parseMonLibListCif(...commandArgs as [string])
1109
+ break
1059
1110
  default:
1060
1111
  cootResult = molecules_container[command](...commandArgs)
1061
1112
  break
@@ -1063,6 +1114,9 @@ const doCootCommand = (messageData: {
1063
1114
 
1064
1115
  let returnResult;
1065
1116
  switch (returnType) {
1117
+ case 'header_info_t':
1118
+ returnResult = headerInfoAsJSObject(cootResult)
1119
+ break
1066
1120
  case 'texture_as_floats_t':
1067
1121
  returnResult = textureAsFloatsToJSTextureAsFloats(cootResult)
1068
1122
  break;
@@ -1093,6 +1147,9 @@ const doCootCommand = (messageData: {
1093
1147
  case 'instanced_mesh':
1094
1148
  returnResult = instancedMeshToMeshData(cootResult, false, false, 5)
1095
1149
  break;
1150
+ case 'mesh_perm3':
1151
+ returnResult = simpleMeshToMeshData(cootResult, true, true)
1152
+ break;
1096
1153
  case 'mesh_perm':
1097
1154
  returnResult = simpleMeshToMeshData(cootResult, true)
1098
1155
  break;
@@ -1194,7 +1251,6 @@ const doCootCommand = (messageData: {
1194
1251
  onmessage = function (e) {
1195
1252
  if (e.data.message === 'CootInitialize') {
1196
1253
  createRSRModule({
1197
- locateFile: (file) => `./wasm/${file}`,
1198
1254
  onRuntimeInitialized: () => { },
1199
1255
  mainScriptUrlOrBlob: "moorhen.js",
1200
1256
  print: print,
@@ -1219,7 +1275,6 @@ onmessage = function (e) {
1219
1275
  });
1220
1276
 
1221
1277
  createCCP4Module({
1222
- locateFile: (file) => `./wasm/${file}`,
1223
1278
  onRuntimeInitialized: () => { },
1224
1279
  mainScriptUrlOrBlob: "web_example.js",
1225
1280
  print: print,