1import {resetVar} from "/esr/js/rs-mimla/workbench-content/core/reset-var.js" 2import {loadAtomchanger} from "/esr/js/rs-mimla/workbench-content/core/atom-changer.js" 3import { isOrcaWorkbenchId } from "/esr/js/rs-mimla/app-core/workbench-registry.js"; 4import { 5 resolveWorkbenchViewPolicy, 6 applyDataToggleVisibility, 7} from "/esr/js/rs-mimla/app-core/workbench-view-policy.js"; 8import { renderWorkbenchContent } from "/esr/js/rs-mimla/app-core/workbench-content-renderer.js"; 9 10let systemLoadRequestId = 0; 11 12async function loadSystemFromFile(selectedSystem) { 13 const importedSystem = await import(`/esr/js/rs-mimla/task-content/systems/${selectedSystem}.js`); 14 currentSystem=importedSystem.system; 15 console.log(currentSystem); 16 console.log(currentSystem.name); 17 makeLinear=currentSystem.makeLinear; 18 optAtoms=currentSystem.optAtoms; 19 notoptAtoms=currentSystem.notoptAtoms; 20 fixedAtoms=currentSystem.fixedAtoms; 21 fixableAtom=currentSystem.fixableAtom; 22 ms1a=currentSystem.ms1a; 23 ms1b=currentSystem.ms1b; 24 ms2a=currentSystem.ms2a; 25 ms2b=currentSystem.ms2b; 26 startenergy = currentSystem.startenergy; 27 dist1axis=currentSystem.dist1axis; 28 dist2axis=currentSystem.dist2axis; 29 energyaxis=currentSystem.energyaxis; 30 calcMethod=currentSystem.calcMethod; 31 optMethod=currentSystem.optMethod; 32 baseSetting=currentSystem.baseSetting; 33 charge = Number.isFinite(currentSystem.charge) ? currentSystem.charge : 0; 34 fixedAtoms=currentSystem.fixedAtoms; 35 console.log("finished importing"); 36} 37 38export async function getSystem(selectedSystem) { 39 const requestId = ++systemLoadRequestId; 40 //Knöpfe ausschalten 41 document.getElementById("Calculate").disabled = true; 42 document.getElementById("neuerWeg").disabled = true; 43 document.getElementById("bearbeiten").disabled = true; 44 document.getElementById("deleteAll").disabled = true; 45 try { 46 //Funktion um Objekt zu laden starten 47 await loadSystemFromFile(selectedSystem); 48 if (requestId !== systemLoadRequestId) { 49 return; 50 } 51 loadSystem(); 52 } catch (error) { 53 if (requestId !== systemLoadRequestId) { 54 return; 55 } 56 console.error("Failed to load system:", error); 57 document.getElementById("Calculate").disabled = false; 58 document.getElementById("neuerWeg").disabled = false; 59 document.getElementById("bearbeiten").disabled = false; 60 document.getElementById("deleteAll").disabled = false; 61 } 62} 63 64export function loadSystem(){ 65 66 //Methode zum Optimieren für ORCA erstellen 67 if (notoptAtoms.length>0) { 68 let optcons="\n%geom Constraints "; 69 for (let i = 0; i < currentSystem.notoptAtoms.length; i++) { 70 optcons += "{C "+(notoptAtoms[i]-1)+" C}"; 71 } 72 if (baseSetting == 5) { 73 optcons += "{C "+currentSystem.Nucleophile+" C}"; 74 } 75 optMethod=optMethod+optcons+" end end"; 76 console.log(optMethod); 77 } 78 //Button Results erst sichtbar nach genügend Rechnungen 79 if(count>minCount){ 80 document.getElementById("Results").disabled=false; 81 }else{ 82 document.getElementById("Results").disabled=true; 83 } 84 //Atomtauscher verbergen 85 $("#changeAtom1").hide(); 86 $("#changeAtom2").hide(); 87 //Variablen die sich auf den Atomtauscher beziehen leeren 88 atomChange1 =""; 89 atomChange2 =""; 90 //überprüfen, ob sie gebraucht werden, dann über Funktion reinladen 91 if (currentSystem.changeAtom1||currentSystem.changeAtom2) { 92 loadAtomchanger(); 93 } 94 95 loadGeneral(); 96 if (currentSystem.baseSetting==1) { 97 load2D(); 98 } else if(currentSystem.baseSetting==2){ 99 load3D(); 100 } else if(currentSystem.baseSetting==5){ 101 loadSN(); 102 } 103 104 105} 106 107import {loadScatter, load3DScatter} from "/esr/js/rs-mimla/workbench-content/core/load-visuals.js" 108import { makeImageOver } from "/esr/js/rs-mimla/workbench-content/core/calculate.js"; 109import { 110 getEffectiveWorkbenchMode, 111 applyWorkbenchUiState, 112} from "/esr/js/rs-mimla/app-core/step-resolver.js"; 113 114export function load3D() { 115 //Settings für Jmol 116 const hasSecondDistinctMeasure = !( 117 (Number(ms1a) === Number(ms2a) && Number(ms1b) === Number(ms2b)) 118 || (Number(ms1a) === Number(ms2b) && Number(ms1b) === Number(ms2a)) 119 ); 120 settings_spec="measure DELETE all; measure @"+ms1a+" @"+ms1b+";" 121 + (hasSecondDistinctMeasure ? " measure @"+ms2a+" @"+ms2b+";" : "") 122 + " set measurements ON; color measures white; font measures 18 sansserif"; 123 const startFrozen = currentSystem.defaultFreeze !== false; 124 if (startFrozen) { 125 fixedAtoms=fixedAtoms+fixableAtom; //nur wenn es mit freeze startet!! 126 } 127 //Namen der Abstände festlegen 128 129 if(language=="en"){ 130 Abstand1 = currentSystem.distanceLabel1EN || ("distance "+currentSystem.ms1aN+"-"+currentSystem.ms1bN+" (pm)"); 131 Abstand2 = currentSystem.distanceLabel2EN || ("distance "+currentSystem.ms2aN+"-"+currentSystem.ms2bN+" (pm)"); 132 }else{ 133 Abstand1 = currentSystem.distanceLabel1DE || ("Abstand "+currentSystem.ms1aN+"-"+currentSystem.ms1bN+" (pm)"); 134 Abstand2 = currentSystem.distanceLabel2DE || ("Abstand "+currentSystem.ms2aN+"-"+currentSystem.ms2bN+" (pm)"); 135 } 136 //Datatable anpassen auf drei Spalten 137 $(datatable.column(2).header()).text(Abstand1); 138 $(datatable.column(3).header()).text(Abstand2); 139 $(datatable.column(1).header()).text(labelEnergy); 140 datatable.rows().remove().columns([2]).visible(true); 141 datatable.rows().remove().columns([3]).visible(true); 142 datatable.draw(); 143 // 2D-Plot auf aktuelles System zurücksetzen (verhindert geerbte Achsen/Spuren) 144 loadScatter(scatter,tdscatter,datatable); 145 //3D-Graph einblenden 146 load3DScatter(scatter,tdscatter,datatable); 147 //linear Option aktivieren und einblenden 148 149 document.getElementById("lineardiv").style.display="block"; 150 document.getElementById("linear").checked=true; 151 document.getElementById("freeze").checked=startFrozen; 152 document.getElementById("freezeComplete").style.display="block"; 153 loadSystemEnd(); 154} 155export function load2D() { 156 settings_spec="measure DELETE all; measure @"+ms1a+" @"+ms1b+"; set measurements ON; color measures white; font measures 18 sansserif; zoom 50"; 157 //Namen der Abstände festlegen 158 if(language=="en"){ 159 Abstand1 = currentSystem.distanceLabel1EN || ("distance "+currentSystem.ms1aN+"-"+currentSystem.ms1bN+" (pm)"); 160 }else{ 161 Abstand1 = currentSystem.distanceLabel1DE || ("Abstand "+currentSystem.ms1aN+"-"+currentSystem.ms1bN+" (pm)"); 162 } 163 164 //Datatable anpassen auf zwei Spalten 165 $(datatable.column(2).header()).text(Abstand1); 166 $(datatable.column(1).header()).text(labelEnergy); 167 datatable.rows().remove().columns([2]).visible(true); 168 datatable.rows().remove().columns([3]).visible(false); 169 datatable.draw(); 170 // 2D-Plot auf aktuelles System zurücksetzen (verhindert geerbte Achsen/Spuren) 171 loadScatter(scatter,tdscatter,datatable); 172 173 174 //linear und freeze Option deaktivieren und ausblenden 175 if (makeLinear==true) { 176 document.getElementById("linear").checked=true; 177 document.getElementById("lineardiv").style.display="block"; 178 } else { 179 document.getElementById("linear").checked=false; 180 document.getElementById("lineardiv").style.display="none"; 181 } 182 document.getElementById("freeze").checked=true; 183 document.getElementById("freezeComplete").style.display="none"; 184 loadSystemEnd(); 185} 186function loadGeneral() { 187 const workbenchMode = getEffectiveWorkbenchMode(currentTask); 188 const viewPolicy = resolveWorkbenchViewPolicy(currentTask, currentWorkbenchId, isOrcaWorkbenchId); 189 const { allowGraphInView, allowTableInView } = viewPolicy; 190 191 $('#snSwitcher').hide();//SN 192 $("#Results").hide(); //Resultbutton hiden 193 //Elemente für CH4Cl verstecken: 194 $('#gallery').hide(); 195 $('#wegeTitle').hide(); 196 $('#neuerWeg').hide(); 197 $('#bearbeiten').hide(); 198 $('#Overwrite').hide(); 199 //3D-Graph ausblenden, wird erst eingeblendete, wenn freeze nicht ausgewählt ist 200 $('#bGraph3D').hide(); 201 202 203 //Ergebnisanzeige nach Vorgabe in der Aufgabe anzeigen oder nicht 204 205 $('.help-text-triggerr') 206 .toggle(currentTask.allowSmallHelp); 207 208 var cb2D = document.getElementById('cb2DGraph'); 209 var cb3D = document.getElementById('cb3DGraph'); 210 var cbTbl = document.getElementById('cbTable'); 211 var toggles = document.getElementById('dataToggles'); 212 applyDataToggleVisibility( 213 { cb2D: cb2D, cb3D: cb3D, cbTable: cbTbl, toggles: toggles }, 214 viewPolicy, 215 ); 216 217 if (cb2D && cb3D && cbTbl) { 218 cb3D.checked = false;
219 cbTbl.checked = false; 220 if (!allowGraphInView) { 221 cb2D.checked = false; 222 cb3D.checked = false; 223 } 224 if (!allowTableInView) { 225 cbTbl.checked = false; 226 } 227 if (workbenchMode === "simulation" && allowGraphInView && !cb2D.checked && !cb3D.checked && !cbTbl.checked) { 228 cb2D.checked = true; 229 } 230 } 231 232 $('#graphTableBox').hide(); 233 $('#laboratory').toggle(currentTask.allowLaboratory || workbenchMode === "text"); 234 235 renderWorkbenchContent(currentTask, workbenchMode, language); 236 237 if (currentTask.allowEnergy) { 238 //todo 239 } else { 240 241 } 242 applyWorkbenchUiState(currentTask); 243 if (window.syncDataViews) { window.syncDataViews(); } 244 if (window.updateViewMode) { window.updateViewMode(); } 245 //document.getElementById('2d_info').innerHTML = ""; 246 //Unbenötigte Funktionen ausblenden 247 //document.getElementById("Zufall").checked = false; 248 //document.getElementById("Zufall_div").style.display="none"; 249 //document.getElementById("divInput").style.display="none"; 250 //Unterscheidung zwischen Scrollen und Interaktion einbauen 251// Check for touch support using the TouchEvents API 252const isTouchDevice = 'ontouchstart' in window || navigator.maxTouchPoints > 0 || navigator.msMaxTouchPoints > 0; 253if (isTouchDevice) { 254 console.log('User is using a touch device'); 255 Plotly.relayout(scatter, { 256 dragmode: false, 257 }); 258 259} 260} 261function loadSN() { 262 fixedAtoms=fixedAtoms+"|atomno="+currentSystem.LeavingGroup;//Die Abgangsgruppe fixieren, dass sie nicht bewegt werden kann 263 NucSN=true; 264 load3D(); 265 $('#snSwitcher').show();//SN 266 if (language=="en") { 267 document.getElementById('snSwitcher').value="Move leaving group"; 268 } else { 269 document.getElementById('snSwitcher').value="Abgangsgruppe bewegen"; 270 } 271} 272 273export function loadSystemEnd() { 274 //berechnete Werte für das System reinladen, alte Werte rausladen 275 resetVar(); 276//Settings für Jmol festlegen/ Struktur laden 277 settings_load="load "+currentSystem.location +"; "+settings+settings_spec; 278 console.log(settings_load); 279 Jmol.script(jmol_1, settings_load); 280 Jmol.script(jmol_1, "fix {"+fixedAtoms+"};"); 281 Jmol.script(jmol_1, "measure DELETE all; measure @"+ms1a+" @"+ms1b+"; set measurements ON; color measures white; font measures 18 sansserif;"); 282//Bedienelemente wieder freigeben 283 document.getElementById("Calculate").disabled = false; 284 document.getElementById("neuerWeg").disabled = false; 285 document.getElementById("bearbeiten").disabled = false; 286 document.getElementById("deleteAll").disabled = false; 287} 288
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.