PageSourceSearch

https://comp-chem-lab.de/esr/js/rs-mimla/app-core/system-loader.js

js comp-chem-lab.de collected 2026-10-07 12:29:15 UTC 10,921 bytes, 288 lines download raw bytes

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.