UNPKG

kekule

Version:

Open source JavaScript toolkit for chemoinformatics

1 lines 17.7 kB
Kekule.LOCAL_RES=!0,Kekule.Localization.setCurrModule("extra.openbabel"),Kekule.Localization.addResource("en","ErrorMsg",{OpenBabel:{CHEM_NODE_TYPE_NOT_SUITABLE:"Unsuitable node type",CHEM_CONNECTOR_TYPE_NOT_SUITABLE:"Unsuitable connector type",ONLY_STR_INPUT_DATA_ALLOWED:"Input data must be text",ONLY_STR_OUTPUT_DATA_ALLOWED:"Output data must be text",FAIL_TO_GENERATE_3D_STRUCTURE:"Fail to generate 3D structure coordinates"}}),function(){var e=Kekule.EmscriptenUtils,t={usingModulaize:!0,moduleName:"OpenBabelModule",moduleInitEventName:"OpenBabel.Initialized",moduleInitCallbackName:"__$openBabelInitialized$__"};Kekule.OpenBabel={_autoEnabled:!0,_module:null,SCRIPT_FILE:"openbabel.js",_enableFuncs:[],BondOrder:{SINGLE:1,DOUBLE:2,TRIPLE:3,EXPLICIT_AROMATIC:5},getObInitOptions:function(){return t},getModule:function(){return r._module||(r._module=e.getRootModule(t.moduleName,t)),r._module},setModule:function(n){r._module=n,e.setRootModule(t.moduleName,n)},getMember:function(t){return e.getMember(t,r.getModule())},getClassCtor:function(t){return e.getClassCtor(t,r.getModule())},isScriptLoaded:function(){return e.isSupported(t.moduleName)},isModuleReady:function(){return e.isModuleReady(t.moduleName)},enable:function(e){r.isScriptLoaded()?(r._enableAllFunctions(),e&&e()):r.loadObScript(Kekule.$jsRoot.document,function(t){Kekule.OpenBabel.AdaptUtils.isAvailable()&&(t||r._enableAllFunctions(),e&&e(t))})},_enableAllFunctions:function(){if(r.isModuleReady())for(var e=r._enableFuncs,t=0,n=e.length;t<n;++t){var a=e[t];a&&a()}}};var r=Kekule.OpenBabel;Kekule._registerAfterLoadSysProc(function(){r._autoEnabled&&r.isScriptLoaded()&&e.ensureModuleReady(Kekule.$jsRoot.document,t,r._enableAllFunctions)}),Kekule.OpenBabel.getObPath=function(){var e=Kekule.environment.getEnvVar("openbabel.path");e||(e=Kekule.isUsingMinJs()?"extra/":"_extras/OpenBabel/",e=Kekule.getScriptPath()+e);return e},Kekule.OpenBabel.getObScriptUrl=function(){var e=Kekule.environment.getEnvVar("openbabel.scriptSrc");e||(e=Kekule.OpenBabel.getObPath()+Kekule.OpenBabel.SCRIPT_FILE,Kekule.isUsingMinJs()||(e+=".dev"));return e},Kekule.OpenBabel.loadObScript=function(n,a){n||(n=Kekule.$jsRoot.document);var o=function(e){r._obScriptLoadedBySelf=!e,a&&a(e)};if(r._obScriptLoadedBySelf||r.isScriptLoaded())o();else{var l=Kekule.OpenBabel.getObScriptUrl();e.loadScript(l,o,n,t)}},Kekule.OpenBabel.AdaptUtils={DEF_ATOM_ID_PREFIX:"A",DEF_BOND_ID_PREFIX:"B",DEF_MOL_ID_PREFIX:"M",wrapCFuncs:function(){if(!Kekule.OpenBabel._funcInited){Object.extend(Kekule.OpenBabel,{}),Kekule.OpenBabel._funcInited=!0}},isAvailable:function(){return void 0!==r.getClassCtor("ObBaseHelper")},obObjToKekule:function(e,t,r){var n=Kekule.OpenBabel.AdaptUtils,a=Kekule.ObjUtils.getPrototypeOf(e).constructor.name;return("OBReaction"===a?n.obReactionToKekule:"OBMol"===a?n.obMolToKekule:n.obBaseToKekule)(e,t,r)},kObjToOB:function(e,t,r){var n=Kekule.OpenBabel.AdaptUtils,a=e instanceof Kekule.Reaction?n.kReactionToOB:e instanceof Kekule.StructureFragment?n.kMolToOB:null;return a?a(e,t,r):null},kIdToOB:function(e){var t=parseInt(e,10);return t||null},obBondOrderToKekule:function(e){return e<=3?e:e===Kekule.OpenBabel.BondOrder.EXPLICIT_AROMATIC?Kekule.BondOrder.EXPLICIT_AROMATIC:Kekule.BondOrder.OTHER},kBondOrderToOB:function(e){return e<=3?e:e===Kekule.BondOrder.EXPLICIT_AROMATIC?Kekule.OpenBabel.BondOrder.EXPLICIT_AROMATIC:0},obBaseToKekule:function(e,t){var n=t||new Kekule.ChemObject,a=new(r.getClassCtor("ObBaseHelper"))(e),o=a.getTitle();o&&n.setName&&n.setName(o);var l=a.getDataSize();if(l)for(var u=n.getInfo(!0),i=0;i<l;++i){var s=a.getDataAt(i);if(s){var O=s.GetAttribute(),d=s.GetValue();O&&d&&(u[O]=d)}}return n},kChemObjToOB:function(e,t){var n=t||new(r.getClassCtor("OBBase"));e.getName&&n.SetTitle&&n.SetTitle(e.getName());var a=e.getInfo();if(a)for(var o=Kekule.ObjUtils.getOwnedFieldNames(a),l=0,u=o.length;l<u;++l){var i=o[l],s=a[i];if(i&&s){var O=new(r.getClassCtor("OBPairData"));O.SetAttribute(""+i),O.SetValue(""+s),n.SetData(O)}}},obAtomToKekule:function(e,t,r){var n=e.GetAtomicNum(),a=n?Kekule.Atom:Kekule.SubGroup;!t||t instanceof a||Kekule.Error(Kekule.$L("ErrorMsg.OpenBabel.CHEM_NODE_TYPE_NOT_SUITABLE"));var o,l=t||new a;return Kekule.OpenBabel.AdaptUtils.obBaseToKekule(e,l),o=e.GetId(),Kekule.ObjUtils.notUnset(o)&&l.setId(Kekule.OpenBabel.AdaptUtils.DEF_ATOM_ID_PREFIX+o),(o=e.GetFormalCharge())&&l.setCharge(o),(o=e.GetSpinMultiplicity())&&l.setRadical(o),o={x:e.GetX(),y:e.GetY()},r===Kekule.CoordMode.COORD3D&&(o.z=e.GetZ()),l.setAbsCoordOfMode?l.setAbsCoordOfMode(o,r):l.setCoordOfMode(o,r),l instanceof Kekule.Atom&&(n&&l.setAtomicNumber(n),(o=e.GetIsotope())&&l.setMassNumber(o),(o=e.GetHyb())&&l.setHybridizationType(o)),l},kChemNodeToOB:function(e,t,n){var a,o=t||new(r.getClassCtor("OBAtom"));if(a=e.getId(),a=Kekule.OpenBabel.AdaptUtils.kIdToOB(a),Kekule.ObjUtils.notUnset(a)&&o.SetId(a),a=e.getCharge())if(parseInt(a,10)===parseFloat(a))o.SetFormalCharge(a);else{var l=parseInt(a,10),u=a-l;o.SetFormalCharge(l),o.SetPartialCharge(u)}if((a=e.getRadical())&&o.SetSpinMultiplicity(a),a=e.getAbsCoordOfMode?e.getAbsCoordOfMode(n):e.getCoordOfMode(n),o.SetVector(a.x||0,a.y||0,a.z||0),e instanceof Kekule.Atom){o.SetAtomicNum(e.getAtomicNumber()),(a=e.getMassNumber())&&o.SetIsotope(a),(a=e.getHybridizationType())&&o.SetHyb(a);var i=e.getImplicitHydrogenCount();i&&o.SetImplicitHCount(i)}else o.SetAtomicNum(0);return o},obBondToKekule:function(e,t,r){var n,a=t||new Kekule.Bond;Kekule.OpenBabel.AdaptUtils.obBaseToKekule(e,a),n=e.GetId(),Kekule.ObjUtils.notUnset(n)&&a.setId(Kekule.OpenBabel.AdaptUtils.DEF_BOND_ID_PREFIX+n),n=e.GetBondOrder(),a.setBondOrder(Kekule.OpenBabel.AdaptUtils.obBondOrderToKekule(n));var o=Kekule.BondStereo;if(n=e.IsWedge()?o.UP:e.IsHash()?o.DOWN:e.IsWedgeOrHash()?o.UP_OR_DOWN:e.IsCisOrTrans()?o.CIS_OR_TRANS:e.IsDoubleBondGeometry()?o.E_Z_BY_COORDINATES:o.NONE,a.setStereo(n),console.log(e.GetFlags().toString(2)),r){n=null;for(var l=[e.GetBeginAtom(),e.GetEndAtom()],u=0,i=l.length;u<i;++u){var s=l[u];s&&(n=r.get(s.GetIdx()))&&a.appendConnectedObj(n)}}return a},kBondToOB:function(e,t,n,a){var o=t||new(r.getClassCtor("OBBond"));Kekule.OpenBabel.AdaptUtils.kChemObjToOB(e,o),O=Kekule.OpenBabel.AdaptUtils.kIdToOB(e.getId()),Kekule.ObjUtils.notUnset(O)&&o.SetId(O),(O=e.getBondOrder())&&(o.SetBondOrder(Kekule.OpenBabel.AdaptUtils.kBondOrderToOB(O)),O===Kekule.BondOrder.EXPLICIT_AROMATIC&&o.SetAromatic()),o.UnsetHash(),o.UnsetWedge(),o.UnsetUp(),o.UnsetDown(),o.UnsetAromatic();var l=Kekule.BondStereo;if((O=e.getStereo())===l.UP?o.SetWedge(!0):O===l.DOWN?o.SetHash(!0):O===l.UP_OR_DOWN&&o.SetWedgeOrHash(!0),n)for(var u=0,i=0,s=e.getConnectedObjCount();i<s;++i){var O,d=e.getConnectedObjAt(i);if(d&&d instanceof Kekule.ChemStructureNode)if((O=n.get(d))&&(0===u?o.SetBegin(O):1===u&&o.SetEnd(O),++u),O.AddBond&&O.AddBond(o),u>1)break}return o},obMolToKekule:function(e,t,n){var a=t,o=new(r.getClassCtor("ObConversionWrapper"));try{o.setOutFormat("","mol");var l=o.writeString(e,!1),u=Kekule.IO.loadFormatData(l,Kekule.IO.DataFormat.MOL);a?a.assign(u):a=u,u.finalize()}finally{o.delete()}if(Kekule.OpenBabel.AdaptUtils.obBaseToKekule(e,a),n){var i;if((i=e.NumAtoms())===a.getNodeCount())for(var s=0;s<i;++s){var O=e.GetAtom(s+1);if(O){var d=a.getNodeAt(s);d&&n.set(O,d)}}if((i=e.NumBonds())===a.getConnectorCount())for(s=0;s<i;++s){var c=e.GetBond(s);if(c){var p=a.getConnectorAt(s);p&&n.set(c,p)}}}return a},kMolToOB:function(e,t,n){var a=e.nodesHasCoord3D()?Kekule.CoordMode.COORD3D:Kekule.CoordMode.COORD2D,o=t||new(r.getClassCtor("OBMol"));t&&o.Clear();for(var l=new Kekule.MapEx(!1),u=e.getFlattenedShadowFragment(!0),i=0,s=u.getNodeCount();i<s;++i){var O=u.getNodeAt(i);if(O){var d=Kekule.OpenBabel.AdaptUtils.kChemNodeToOB(O,o.NewAtom(),a);if(d&&(l.set(O,d),n)){var c=e.getFlatternedShadowSourceObj(O);n.set(c,d)}}}for(i=0,s=u.getConnectorCount();i<s;++i){var p=u.getConnectorAt(i);if(p&&p instanceof Kekule.Bond){var b=Kekule.OpenBabel.AdaptUtils.kBondToOB(p,o.NewBond(),l,o);if(n&&b){var k=e.getFlatternedShadowSourceObj(p);n.set(k,b)}}}return l.finalize(),l=null,o},obReactionToKekule:function(e,t,r){var n=t||new Kekule.Reaction;n.clearAll(),Kekule.OpenBabel.AdaptUtils.obBaseToKekule(e,n),n.setDirection(e.IsReversible()?Kekule.ReactionDirection.BIDIRECTION:Kekule.ReactionDirection.FORWARD);for(var a=0,o=e.NumReactants();a<o;++a){var l=e.GetReactant(a),u=Kekule.OpenBabel.AdaptUtils.obMolToKekule(l,null,r);n.appendReactant(u),r&&r.set(l,u)}for(a=0,o=e.NumProducts();a<o;++a){l=e.GetProduct(a),u=Kekule.OpenBabel.AdaptUtils.obMolToKekule(l,null,r);n.appendProduct(u),r&&r.set(l,u)}return n},kReactionToOB:function(e,t,n){var a=t||new(r.getClassCtor("OBReaction"));a.Clear(),Kekule.OpenBabel.AdaptUtils.kChemObjToOB(e,a);var o=!1,l=e.getDirection();l===Kekule.ReactionDirection.BIDIRECTION?a.SetReversible(!0):l===Kekule.ReactionDirection.BACKWARD&&(o=!0);for(var u=0,i=e.getReactantCount();u<i;++u){if(O=e.getReactantAt(u)){var s=Kekule.OpenBabel.AdaptUtils.kMolToOB(O,null,n);o?a.AddProduct(s):a.AddReactant(s),n&&n.set(O,s)}}for(u=0,i=e.getProductCount();u<i;++u){var O;if(O=e.getProductAt(u)){s=Kekule.OpenBabel.AdaptUtils.kMolToOB(O,null,n);o?a.AddReactant(s):a.AddProduct(s),n&&n.set(O,s)}}}}}(),function(){Kekule.EmscriptenUtils;var e=Kekule.OpenBabel,t=Kekule.OpenBabel.AdaptUtils;Kekule.IO.OpenBabelReader=Class.create(Kekule.IO.ChemDataReader,{CLASS_NAME:"Kekule.IO.OpenBabelReader",initialize:function(e){this.tryApplySuper("initialize")},finalize:function(){this.tryApplySuper("finalize")},getFormatTargetObClassName:function(e){return e.getTypeName().toLowerCase().indexOf("reaction")>=0?"OBReaction":"OBMol"},doReadData:function(r,n,a){this._obConv=new(e.getClassCtor("ObConversionWrapper"));try{var o=Kekule.IO.DataFormatsManager.getFormatInfo(a),l=(o.mimeType,o.fileExts[0],this._obConv.setInFormatId(o.id)),u=this.getFormatTargetObClassName(l);try{var i=[];this._obConv.setInStr(r);for(var s=new(e.getClassCtor(u)),O=this._obConv.readFromInput(s);O;){if(s.NumAtoms&&s.NumAtoms()>0){var d=t.obObjToKekule(s);i.push(d)}O=this._obConv.readFromInput(s)}var c=i.length;if(c<=0)return null;if(1===c)return i[0];for(var p=new Kekule.ChemObjList,b=0;b<c;++b)p.append(i[b]);return p}finally{s&&(s.delete(),s=null)}}finally{this._obConv&&(this._obConv.delete(),this._obConv=null)}}}),Kekule.IO.OpenBabelWriter=Class.create(Kekule.IO.ChemDataWriter,{CLASS_NAME:"Kekule.IO.OpenBabelWriter",initialize:function(e){this.tryApplySuper("initialize",[e])},finalize:function(){this.tryApplySuper("finalize")},doWriteData:function(r,n,a){this._obConv=new(e.getClassCtor("ObConversionWrapper"));try{var o=Kekule.IO.DataFormatsManager.getFormatInfo(a);o.mimeType,o.fileExts[0];this._obConv.setOutFormatId(o.id);for(var l=Kekule.ChemStructureUtils.getChildStructureObjs(r,!0),u=0,i=l.length;u<i;++u){var s=l[u];if(s){var O=t.kObjToOB(s);if(O)try{if(!this._obConv.writeToOutput(O))break}finally{O.delete(),O=null}}}return this._obConv.getOutStr()}finally{this._obConv&&this._obConv.delete()}},isAllowedObj:function(e){var t=Kekule.IO.OpenBabelWriter.ALLOWED_CLASSES;return Kekule.ObjUtils.isInstanceOf(e,t)}}),Kekule.IO.OpenBabelWriter.ALLOWED_CLASSES=[Kekule.StructureFragment,Kekule.Reaction,Kekule.ChemObjList,Kekule.ChemStructureObjectGroup,Kekule.ChemSpaceElement,Kekule.ChemSpace],Kekule.OpenBabel.IORegHelper=Class.create({listFormatInfo:function(e,t){for(var r=[],n=("in"===e?t.getSupportedInputFormatsStr("\n"):t.getSupportedOutputFormatsStr("\n")).split("\n"),a=0,o=n.length;a<o;++a){var l=n[a],u=l.indexOf("--");if(u>0){var i=l.substring(0,u).trim(),s=t.getFormatInfoById(i);r.push(s)}}return r},registerByInfos:function(e,t){for(var r=Kekule.IO.DataFormatsManager,n=[],a=0,o=e.length;a<o;++a){var l=e[a],u=l.id,i=l.mimeType;if((s=r.findFormatId(i))&&(s=r.findFormatId(null,u)),!s)var s=r.register(u,i,u,Kekule.IO.ChemDataType.UNKNOWN,l.description,l.description,{specificationUrl:l.specificationURL}).id;("in"===t?Kekule.IO.ChemDataReaderManager.getReaderInfoByFormat(s):Kekule.IO.ChemDataWriterManager.getWriterInfoByFormat(s))||Kekule.ArrayUtils.pushUnique(n,s)}n.length&&("in"===t?Kekule.IO.ChemDataReaderManager.register("openbabel",Kekule.IO.OpenBabelReader,n):Kekule.IO.ChemDataWriterManager.register("openbabel",Kekule.IO.OpenBabelWriter,Kekule.IO.OpenBabelWriter.ALLOWED_CLASSES,n))},registerAll:function(){var t=new(e.getClassCtor("ObConversionWrapper"));try{var r=this.listFormatInfo("in",t);this.registerByInfos(r,"in");r=this.listFormatInfo("out",t);this.registerByInfos(r,"out")}finally{t.delete()}}}),Kekule.IO.registerAllOpenBabelFormats=function(){if(Kekule.OpenBabel.AdaptUtils.isAvailable())try{var e=new Kekule.OpenBabel.IORegHelper;e.registerAll()}finally{e=null}},Kekule.OpenBabel._enableFuncs.push(Kekule.IO.registerAllOpenBabelFormats),Kekule.IO.enableOpenBabelFormats=function(){Kekule.OpenBabel.AdaptUtils.isAvailable()?Kekule.IO.registerAllOpenBabelFormats():Kekule.OpenBabel.loadObScript(document,function(){Kekule.IO.registerAllOpenBabelFormats()})}}(),function(){"use strict";Kekule.EmscriptenUtils;var e=Kekule.OpenBabel,t=Kekule.OpenBabel.AdaptUtils;Kekule.OpenBabel.StructUtils={generate2DStructure:function(e,r,n){var a=r||{};try{var o=new Kekule.MapEx,l=new Kekule.MapEx,u=t.kObjToOB(e,null,o);if(Kekule.OpenBabel.StructUtils._gen2DByObOperation(u,a)||(u.delete(),u=null),u){if(e=t.obObjToKekule(u,null,l),n)for(var i=o.getKeys(),s=0,O=i.length;s<O;++s){var d=i[s],c=o.get(d);if(c){var p=l.get(c);p&&n.set(d,p)}}}else Kekule.raise(Kekule.$L("ErrorMsg.OpenBabel.FAIL_TO_GENERATE_3D_STRUCTURE"))}finally{u&&u.delete()}return e},generate3DStructure:function(r,n,a){var o,l=n||{},u=l.forceField;try{var i=new Kekule.MapEx,s=new Kekule.MapEx,O=t.kObjToOB(r,null,i);if(l.applyFFCalc){var d=new(e.getClassCtor("OB3DGenWrapper"));try{d.generate3DStructure(O,u||"")}finally{d.delete()}}else Kekule.OpenBabel.StructUtils._gen3DByObOperation(O,l)||(O.delete(),O=null);if(O){if(o=t.obObjToKekule(O,null,s),a)for(var c=i.getKeys(),p=0,b=c.length;p<b;++p){var k=c[p],g=i.get(k);if(g){var f=s.get(g);f&&a.set(k,f)}}}else Kekule.raise(Kekule.$L("ErrorMsg.OpenBabel.FAIL_TO_GENERATE_3D_STRUCTURE"))}finally{O&&O.delete()}return o},_gen2DByObOperation:function(t,r){var n=!1,a=e.getModule().OBOp.FindType("Gen2D");if(a){var o=""+r.speed||"";a.Do(t,o),n=!0}return n},_gen3DByObOperation:function(t,r){var n=""+r.speed||"",a=!1,o=e.getModule().OBOp.FindType("Gen3D");return o&&(o.Do(t,n),a=!0),a}},Kekule.Calculator&&(Kekule.Calculator.ObStructureBaseGenerator=Class.create(Kekule.Calculator.AbstractStructureGenerator,{CLASS_NAME:"Kekule.Calculator.ObStructureBaseGenerator",isWorkerShared:function(){return!0},getGeneratorCoordMode:function(){return 2===this.getOutputDimension()?Kekule.CoordMode.COORD2D:Kekule.CoordMode.COORD3D},getOutputDimension:function(){return 3},_getInputMsgName:function(){return"gen"+this.getOutputDimension()+"D"},_getOutputMsgName:function(){return"output"+this.getOutputDimension()+"D"},getObInitOptions:function(){return Kekule.OpenBabel.getObInitOptions()},getForceField:function(){return this.getOptions().forceField},doGetWorker:function(){var e=this.tryApplySuper("doGetWorker");return e||(e=Kekule.Calculator.ObStructureBaseGenerator._worker),e},_requestImportingObScriptInWorker:function(){var e=Kekule.OpenBabel.getObScriptUrl();this.importWorkerScriptFile(e)},createWorker:function(){var e=this.tryApplySuper("createWorker");if(e){this._requestImportingObScriptInWorker();var t=this.getObInitOptions();this.postWorkerMessage({type:"obInit",usingModulaize:t.usingModulaize,moduleName:t.moduleName,initCallbackName:t.moduleInitCallbackName}),Kekule.Calculator.ObStructureBaseGenerator._worker=e}return e},getWorkerScriptFile:function(){return Kekule.OpenBabel.getObPath()+"kekule.worker.obStructureGenerator.js"},doReactWorkerMessage:function(e,t){if(this.tryApplySuper("doReactWorkerMessage",[e,t]),e.type===this._getOutputMsgName()){var r=e.molData;if(r){var n=Kekule.IO.loadMimeData(r,"chemical/x-mdl-molfile"),a=this.getChildObjMap();if(a){for(var o=this.getSourceMol().getFlattenedShadowFragment(!0),l=0,u=o.getNodeCount();l<u;++l)a.set(o.getNodeAt(l),n.getNodeAt(l));for(l=0,u=o.getConnectorCount();l<u;++l)a.set(o.getConnectorAt(l),n.getConnectorAt(l))}this.setGeneratedMol(n),this.done()}}},workerStartCalc:function(e){this._requestImportingObScriptInWorker();var t=this.getSourceMol().getFlattenedShadowFragment(!0),r=Kekule.IO.saveMimeData(t,"chemical/x-mdl-molfile"),n=Object.extend(this.getOptions(),{type:this._getInputMsgName(),molData:r});this.postWorkerMessage(n)},doExecuteSync:function(e){if(Kekule.OpenBabel){var t=this;Kekule.OpenBabel.loadObScript(null,function(){var r;try{var n=(2===t.getOutputDimension()?Kekule.OpenBabel.StructUtils.generate2DStructure:Kekule.OpenBabel.StructUtils.generate3DStructure)(t.getSourceMol(),t.getOptions());t.setGeneratedMol(n)}catch(e){throw r=e,e}return r||t.done(),e&&e(r),!0})}else Kekule.error(Kekule.$L("ErrorMsg.MODULE_NOT_LOADED").format("OpenBabel"));return!1}}),Kekule.Calculator.ObStructure3DGenerator=Class.create(Kekule.Calculator.ObStructureBaseGenerator,{CLASS_NAME:"Kekule.Calculator.ObStructure3DGenerator",getOutputDimension:function(){return 3}}),Kekule.Calculator.ObStructure2DGenerator=Class.create(Kekule.Calculator.ObStructureBaseGenerator,{CLASS_NAME:"Kekule.Calculator.ObStructure2DGenerator",getOutputDimension:function(){return 2}}),Kekule.Calculator.ServiceManager.register(Kekule.Calculator.Services.GEN3D,Kekule.Calculator.ObStructure3DGenerator,"openbabel",10),Kekule.Calculator.ServiceManager.register(Kekule.Calculator.Services.GEN2D,Kekule.Calculator.ObStructure2DGenerator,"openbabel",10))}();