From f91fa17d9d182f82c2984814403e8d97da9c8604 Mon Sep 17 00:00:00 2001
From: karlmichaelschindler
 <karlmichaelschindler@7e267752-d5d8-41c0-93cd-a7fa012602f9>
Date: Mon, 21 Sep 2020 17:00:57 +0000
Subject: [PATCH] reading eelsin works.

git-svn-id: svn+ssh://michael-ep3.physik.uni-halle.de/Users/Shared/EELS2@105 7e267752-d5d8-41c0-93cd-a7fa012602f9
---
 source/Lazarus-GUI/EELS.lps      | 173 ++++++++++++++-----------------
 source/Lazarus-GUI/UDiagramm.lfm |   2 +-
 source/Lazarus-GUI/UFileIO.pas   |  51 ++++++---
 source/Lazarus-GUI/UMainForm.lfm |   2 +-
 source/Lazarus-GUI/UMainForm.pas | 172 ++++++++++++++++++++++++++++--
 5 files changed, 284 insertions(+), 116 deletions(-)

diff --git a/source/Lazarus-GUI/EELS.lps b/source/Lazarus-GUI/EELS.lps
index 60970f6..619fd13 100644
--- a/source/Lazarus-GUI/EELS.lps
+++ b/source/Lazarus-GUI/EELS.lps
@@ -2,11 +2,11 @@
 <CONFIG>
   <ProjectSession>
     <Version Value="11"/>
-    <Units Count="12">
+    <Units Count="10">
       <Unit0>
         <Filename Value="EELS.lpr"/>
         <IsPartOfProject Value="True"/>
-        <CursorPos X="41" Y="21"/>
+        <CursorPos X="14" Y="18"/>
         <UsageCount Value="202"/>
         <Loaded Value="True"/>
       </Unit0>
@@ -16,9 +16,10 @@
         <ComponentName Value="MainForm"/>
         <HasResources Value="True"/>
         <ResourceBaseClass Value="Form"/>
+        <IsVisibleTab Value="True"/>
         <EditorIndex Value="1"/>
-        <TopLine Value="351"/>
-        <CursorPos X="64" Y="335"/>
+        <TopLine Value="269"/>
+        <CursorPos Y="397"/>
         <UsageCount Value="202"/>
         <Loaded Value="True"/>
         <LoadedDesigner Value="True"/>
@@ -26,19 +27,18 @@
       <Unit2>
         <Filename Value="UEELSBoson.pas"/>
         <IsPartOfProject Value="True"/>
-        <EditorIndex Value="3"/>
-        <TopLine Value="45"/>
+        <EditorIndex Value="4"/>
         <CursorPos Y="74"/>
-        <UsageCount Value="173"/>
+        <UsageCount Value="255"/>
         <Loaded Value="True"/>
       </Unit2>
       <Unit3>
         <Filename Value="UFileIO.pas"/>
         <IsPartOfProject Value="True"/>
-        <EditorIndex Value="4"/>
-        <TopLine Value="61"/>
-        <CursorPos X="32" Y="69"/>
-        <UsageCount Value="121"/>
+        <EditorIndex Value="3"/>
+        <TopLine Value="104"/>
+        <CursorPos X="40" Y="86"/>
+        <UsageCount Value="203"/>
         <Loaded Value="True"/>
       </Unit3>
       <Unit4>
@@ -46,7 +46,7 @@
         <IsPartOfProject Value="True"/>
         <EditorIndex Value="5"/>
         <CursorPos Y="189"/>
-        <UsageCount Value="48"/>
+        <UsageCount Value="134"/>
         <Loaded Value="True"/>
         <DefaultSyntaxHighlighter Value="None"/>
       </Unit4>
@@ -55,7 +55,7 @@
         <IsPartOfProject Value="True"/>
         <EditorIndex Value="6"/>
         <CursorPos X="91"/>
-        <UsageCount Value="53"/>
+        <UsageCount Value="139"/>
         <Loaded Value="True"/>
         <DefaultSyntaxHighlighter Value="None"/>
       </Unit5>
@@ -65,172 +65,155 @@
         <ComponentName Value="DiagrammForm"/>
         <HasResources Value="True"/>
         <ResourceBaseClass Value="Form"/>
-        <IsVisibleTab Value="True"/>
         <EditorIndex Value="2"/>
-        <TopLine Value="25"/>
-        <CursorPos X="33" Y="45"/>
-        <UsageCount Value="22"/>
+        <CursorPos Y="4"/>
+        <UsageCount Value="108"/>
         <Loaded Value="True"/>
         <LoadedDesigner Value="True"/>
       </Unit6>
       <Unit7>
-        <Filename Value="/opt/sw/share/lazarus/lcl/grids.pas"/>
-        <UnitName Value="Grids"/>
+        <Filename Value="/opt/sw/share/lazarus/lcl/include/control.inc"/>
         <EditorIndex Value="-1"/>
-        <TopLine Value="5257"/>
-        <CursorPos Y="5270"/>
-        <UsageCount Value="2"/>
+        <TopLine Value="3534"/>
+        <CursorPos Y="3554"/>
+        <UsageCount Value="10"/>
       </Unit7>
       <Unit8>
-        <Filename Value="/opt/sw/share/lazarus/lcl/include/wincontrol.inc"/>
+        <Filename Value="/opt/sw/share/lazarus/lcl/include/menuitem.inc"/>
         <EditorIndex Value="-1"/>
-        <TopLine Value="8371"/>
-        <CursorPos Y="8387"/>
-        <UsageCount Value="1"/>
+        <TopLine Value="72"/>
+        <CursorPos Y="85"/>
+        <UsageCount Value="2"/>
       </Unit8>
       <Unit9>
-        <Filename Value="/opt/sw/share/lazarus/lcl/include/customedit.inc"/>
+        <Filename Value="/opt/sw/share/lazarus/lcl/grids.pas"/>
+        <UnitName Value="Grids"/>
         <EditorIndex Value="-1"/>
-        <TopLine Value="656"/>
-        <CursorPos Y="672"/>
-        <UsageCount Value="1"/>
+        <TopLine Value="2525"/>
+        <CursorPos Y="2539"/>
+        <UsageCount Value="10"/>
       </Unit9>
-      <Unit10>
-        <Filename Value="/opt/sw/share/lazarus/lcl/forms.pp"/>
-        <UnitName Value="Forms"/>
-        <EditorIndex Value="-1"/>
-        <TopLine Value="799"/>
-        <CursorPos X="3" Y="750"/>
-        <UsageCount Value="2"/>
-      </Unit10>
-      <Unit11>
-        <Filename Value="/opt/sw/share/lazarus/lcl/include/control.inc"/>
-        <EditorIndex Value="-1"/>
-        <TopLine Value="3534"/>
-        <CursorPos Y="3548"/>
-        <UsageCount Value="4"/>
-      </Unit11>
     </Units>
     <JumpHistory Count="30" HistoryIndex="29">
       <Position1>
         <Filename Value="UMainForm.pas"/>
-        <Caret Line="478" TopLine="465"/>
+        <Caret Line="344" Column="19" TopLine="322"/>
       </Position1>
       <Position2>
         <Filename Value="UMainForm.pas"/>
-        <Caret Line="481" TopLine="465"/>
+        <Caret Line="345" Column="44" TopLine="323"/>
       </Position2>
       <Position3>
         <Filename Value="UMainForm.pas"/>
-        <Caret Line="491" Column="22" TopLine="473"/>
+        <Caret Line="347" Column="19" TopLine="325"/>
       </Position3>
       <Position4>
         <Filename Value="UMainForm.pas"/>
-        <Caret Line="494" TopLine="473"/>
+        <Caret Line="348" Column="19" TopLine="326"/>
       </Position4>
       <Position5>
         <Filename Value="UMainForm.pas"/>
-        <Caret Line="493" TopLine="473"/>
+        <Caret Line="349" Column="19" TopLine="327"/>
       </Position5>
       <Position6>
-        <Filename Value="../f90/doboson.f90"/>
-        <Caret Line="50" TopLine="36"/>
+        <Filename Value="UMainForm.pas"/>
+        <Caret Line="350" Column="19" TopLine="328"/>
       </Position6>
       <Position7>
-        <Filename Value="../f90/doboson.f90"/>
-        <Caret Line="112" TopLine="98"/>
+        <Filename Value="UMainForm.pas"/>
+        <Caret Line="351" Column="56" TopLine="329"/>
       </Position7>
       <Position8>
-        <Filename Value="../f90/doboson.f90"/>
-        <Caret Line="113" TopLine="98"/>
+        <Filename Value="UMainForm.pas"/>
+        <Caret Line="352" Column="19" TopLine="330"/>
       </Position8>
       <Position9>
-        <Filename Value="../f90/doboson.f90"/>
-        <Caret Line="115" TopLine="98"/>
+        <Filename Value="UMainForm.pas"/>
+        <Caret Line="353" Column="19" TopLine="331"/>
       </Position9>
       <Position10>
-        <Filename Value="../f90/doboson.f90"/>
-        <Caret Line="149" Column="29" TopLine="142"/>
+        <Filename Value="UMainForm.pas"/>
+        <Caret Line="354" Column="49" TopLine="332"/>
       </Position10>
       <Position11>
-        <Filename Value="../f90/doboson.f90"/>
-        <Caret Column="90"/>
+        <Filename Value="UMainForm.pas"/>
+        <Caret Line="355" Column="19" TopLine="333"/>
       </Position11>
       <Position12>
-        <Filename Value="../f90/doboson.f90"/>
-        <Caret Line="22" Column="9"/>
+        <Filename Value="UMainForm.pas"/>
+        <Caret Line="356" Column="21" TopLine="334"/>
       </Position12>
       <Position13>
-        <Filename Value="../f90/doboson.f90"/>
-        <Caret Line="35" Column="60" TopLine="11"/>
+        <Filename Value="UMainForm.pas"/>
+        <Caret Line="358" Column="19" TopLine="336"/>
       </Position13>
       <Position14>
-        <Filename Value="../f90/doboson.f90"/>
-        <Caret Line="36" Column="34" TopLine="12"/>
+        <Filename Value="UMainForm.pas"/>
+        <Caret Line="359" Column="19" TopLine="337"/>
       </Position14>
       <Position15>
-        <Filename Value="../f90/doboson.f90"/>
-        <Caret Line="236" Column="7" TopLine="212"/>
+        <Filename Value="UMainForm.pas"/>
+        <Caret Line="360" Column="19" TopLine="338"/>
       </Position15>
       <Position16>
-        <Filename Value="../f90/doboson.f90"/>
-        <Caret Line="247" Column="18" TopLine="223"/>
+        <Filename Value="UMainForm.pas"/>
+        <Caret Line="361" Column="19" TopLine="339"/>
       </Position16>
       <Position17>
-        <Filename Value="../f90/doboson.f90"/>
-        <Caret Line="248" Column="16" TopLine="224"/>
+        <Filename Value="UMainForm.pas"/>
+        <Caret Line="362" Column="59" TopLine="340"/>
       </Position17>
       <Position18>
-        <Filename Value="../f90/doboson.f90"/>
-        <Caret Line="249" Column="16" TopLine="225"/>
+        <Filename Value="UMainForm.pas"/>
+        <Caret Line="363" Column="19" TopLine="341"/>
       </Position18>
       <Position19>
-        <Filename Value="../f90/doboson.f90"/>
-        <Caret Line="263" Column="22" TopLine="239"/>
+        <Filename Value="UMainForm.pas"/>
+        <Caret Line="364" Column="19" TopLine="342"/>
       </Position19>
       <Position20>
-        <Filename Value="../f90/doboson.f90"/>
-        <Caret Line="264" Column="20" TopLine="240"/>
+        <Filename Value="UMainForm.pas"/>
+        <Caret Line="365" Column="52" TopLine="343"/>
       </Position20>
       <Position21>
         <Filename Value="UMainForm.pas"/>
-        <Caret Line="493" Column="14" TopLine="468"/>
+        <Caret Line="366" Column="19" TopLine="344"/>
       </Position21>
       <Position22>
         <Filename Value="UMainForm.pas"/>
-        <Caret Line="478" TopLine="468"/>
+        <Caret Line="255" TopLine="255"/>
       </Position22>
       <Position23>
         <Filename Value="UMainForm.pas"/>
-        <Caret Line="475" Column="34" TopLine="470"/>
+        <Caret Line="345" Column="89" TopLine="333"/>
       </Position23>
       <Position24>
         <Filename Value="UDiagramm.pas"/>
-        <Caret Line="19" Column="30"/>
+        <Caret Line="4"/>
       </Position24>
       <Position25>
-        <Filename Value="UDiagramm.pas"/>
-        <Caret Line="24" Column="30"/>
+        <Filename Value="UMainForm.pas"/>
+        <Caret Line="384" Column="43" TopLine="374"/>
       </Position25>
       <Position26>
         <Filename Value="UMainForm.pas"/>
-        <Caret Line="496" Column="31" TopLine="472"/>
+        <Caret Line="253" TopLine="233"/>
       </Position26>
       <Position27>
-        <Filename Value="UDiagramm.pas"/>
-        <Caret Line="34" Column="33" TopLine="10"/>
+        <Filename Value="UFileIO.pas"/>
+        <Caret Line="86" Column="40" TopLine="81"/>
       </Position27>
       <Position28>
-        <Filename Value="UDiagramm.pas"/>
-        <Caret Line="9" Column="23" TopLine="9"/>
+        <Filename Value="UMainForm.pas"/>
+        <Caret Line="391" TopLine="312"/>
       </Position28>
       <Position29>
-        <Filename Value="UDiagramm.pas"/>
-        <Caret Line="46" Column="28" TopLine="22"/>
+        <Filename Value="UMainForm.pas"/>
+        <Caret Line="264" Column="53" TopLine="251"/>
       </Position29>
       <Position30>
-        <Filename Value="UDiagramm.pas"/>
-        <Caret Line="53" Column="28" TopLine="25"/>
+        <Filename Value="UMainForm.pas"/>
+        <Caret Line="253" Column="57" TopLine="251"/>
       </Position30>
     </JumpHistory>
     <RunParams>
diff --git a/source/Lazarus-GUI/UDiagramm.lfm b/source/Lazarus-GUI/UDiagramm.lfm
index e4b5dea..b6d4164 100644
--- a/source/Lazarus-GUI/UDiagramm.lfm
+++ b/source/Lazarus-GUI/UDiagramm.lfm
@@ -1,7 +1,7 @@
 object DiagrammForm: TDiagrammForm
   Left = 384
   Height = 532
-  Top = 134
+  Top = 414
   Width = 662
   Caption = 'DiagrammForm'
   ClientHeight = 532
diff --git a/source/Lazarus-GUI/UFileIO.pas b/source/Lazarus-GUI/UFileIO.pas
index b2c1810..e8a61b1 100644
--- a/source/Lazarus-GUI/UFileIO.pas
+++ b/source/Lazarus-GUI/UFileIO.pas
@@ -5,12 +5,14 @@ unit UFileIO;
 interface
 
 uses
-  Classes, SysUtils,
+  Classes, SysUtils, Dialogs,
   UEELSBoson;
 
 type
   Tdoublearray = array of double;
   Tintegerarray = array of integer;
+  Tstringarray = array of string;
+  Toscarray = array of Fosc_array;
 
 procedure read_eelsin(
             var ImpactEnergy: double;
@@ -25,11 +27,11 @@ procedure read_eelsin(
             var NumberOfLayers:   integer;
             var NumberOfEpsilons: integer;
             var NumberOfPeriodic: integer;
-            var LayerName:  array of string;
+            var LayerName:  Tstringarray;
             var Thickness:  Tdoublearray;
             var Epsilon:    Tdoublearray;
             var NumberOfOscillators: Tintegerarray;
-            var Oscillator: array of Fosc_array
+            var Oscillator: Toscarray
           );
 procedure write_eelsin;
 procedure read_bosin;
@@ -50,17 +52,26 @@ procedure read_eelsin(
             var NumberOfLayers:   integer;
             var NumberOfEpsilons: integer;
             var NumberOfPeriodic: integer;
-            var LayerName:  array of string;
+            var LayerName:  Tstringarray;
             var Thickness:  Tdoublearray;
             var Epsilon:    Tdoublearray;
             var NumberOfOscillators: Tintegerarray;
-            var Oscillator: array of Fosc_array
+            var Oscillator: Toscarray
           );
 var
   eelsin: text;
-  i, j: integer;
+  i, j, index, Oscillator_length, here: integer;
+  FileOpenDialog: TOpenDialog;
+  line: string;
 begin
-  assign(eelsin, 'eelsin');
+  FileOpenDialog := TOpenDialog.Create(nil);
+  FileOpenDialog.Options := [ofFileMustExist];
+  FileOpenDialog.Title := 'Select eelsin file:';
+  if not FileOpenDialog.Execute then
+    ShowMessage('Open file was cancelled')
+  else
+  begin
+  assign(eelsin, FileOpenDialog.FileName);
   reset (eelsin);
   readln(eelsin, ImpactEnergy);
   readln(eelsin, IncidenceAngle);
@@ -72,18 +83,34 @@ begin
   readln(eelsin, Comment1);
   readln(eelsin, Comment2);
   readln(eelsin, NumberOfLayers, NumberOfPeriodic);
-//  setlength(LayerName, NumberOfLayers);
+  setlength(LayerName, NumberOfLayers);
   setlength(Thickness, NumberOfLayers);
   setlength(Epsilon, NumberOfLayers);
+  setlength(NumberOfOscillators, NumberOfLayers);
+  index := 0;
+  Oscillator_length := 0;
   for i := 0 to NumberOfLayers - 1 do
   begin
-    readln(eelsin, LayerName[i], Thickness[i]);
+    readln(eelsin, line);
+    LayerName[i] := copy(line,0,10);
+    line := copy(line,10, 20);
+    // replace D for double precision with E
+    here := pos('D', line);
+    if here <> 0 then
+      line[here] := 'E';
+    TryStrToFloat(line, Thickness[i]);
     readln(eelsin, Epsilon[i], NumberOfOscillators[i]);
-//    setlength(Oscillator, NumberOfLayers, NumberOfOscillators);
-    for j := 0 to NumberOfOscillators[i] - 1 do
-      readln(eelsin, Oscillator[i][1], Oscillator[i][2], Oscillator[i][3]);
+    Oscillator_length := Oscillator_length + NumberOfOscillators[i];
+    setlength(Oscillator, Oscillator_length);
+    for j := 1 to NumberOfOscillators[i] do
+    begin
+      readln(eelsin, Oscillator[index][1], Oscillator[index][2], Oscillator[index][3]);
+      inc(index);
+    end;
   end;
   close(eelsin);
+  end;
+  FileOpenDialog.Destroy;
 end;
 
 procedure write_eelsin;
diff --git a/source/Lazarus-GUI/UMainForm.lfm b/source/Lazarus-GUI/UMainForm.lfm
index bed087f..2198a69 100644
--- a/source/Lazarus-GUI/UMainForm.lfm
+++ b/source/Lazarus-GUI/UMainForm.lfm
@@ -1,7 +1,7 @@
 object MainForm: TMainForm
   Left = 314
   Height = 755
-  Top = 23
+  Top = 303
   Width = 731
   Caption = 'EELS'
   ClientHeight = 755
diff --git a/source/Lazarus-GUI/UMainForm.pas b/source/Lazarus-GUI/UMainForm.pas
index 0d2d16b..d8563c1 100644
--- a/source/Lazarus-GUI/UMainForm.pas
+++ b/source/Lazarus-GUI/UMainForm.pas
@@ -229,11 +229,171 @@ begin
 end;
 
 procedure TMainForm.EELSImportMenuItemClick(Sender: TObject);
+var
+  i, j, index: integer;
 begin
-//  read_eelsin(ImpactEnergy, IncidenceAngle, AngularAperturePhiA, AngularAperturePhiB,
-//    IntervalWMin, IntervalWMax, IntervalWDelta, Comment1, Comment2,
-//    NumberOfLayers, NumberOfEpsilons, NumberOfPeriodic, LayerName, Thickness,
-//    Epsilon, NumberOfOscillators, Oscillator);
+  read_eelsin(ImpactEnergy, IncidenceAngle, AngularAperturePhiA, AngularAperturePhiB,
+    IntervalWMin, IntervalWMax, IntervalWDelta, Comment1, Comment2,
+    NumberOfLayers, NumberOfEpsilons, NumberOfPeriodic, LayerName, Thickness,
+    Epsilon, NumberOfOscillators, Oscillator);
+
+  ImpactEnergyEdit.Text        := FormatFloat('0.00', ImpactEnergy);
+  IncidenceAngleEdit.Text      := FormatFloat('0.00', IncidenceAngle);
+  AngularAperturePhiAEdit.Text := FormatFloat('0.00', AngularAperturePhiA);
+  AngularAperturePhiBEdit.Text := FormatFloat('0.00', AngularAperturePhiB);
+  IntervalWMinEdit.Text        := FormatFloat('0.00', IntervalWMin);
+  IntervalWMaxEdit.Text        := FormatFloat('0.00', IntervalWMax);
+  IntervalWDeltaEdit.Text      := FormatFloat('0.00', IntervalWDelta);
+  Comment1Edit.Text := Comment1;
+  Comment2Edit.Text := Comment2;
+// EELS part 2
+  if length(Layergroup) > NumberOfLayers then
+  begin
+    for i := NumberOfLayers to length(Layergroup) - 1 do
+    begin
+       Layergroup[i].NameLabel.Destroy;
+       Layergroup[i].NameEdit.Destroy;
+       Layergroup[i].ThicknessLabel.Destroy;
+       Layergroup[i].ThicknessEdit.Destroy;
+       Layergroup[i].EpsilonLabel.Destroy;
+       Layergroup[i].EpsilonEdit.Destroy;
+       Layergroup[i].OsciLabel.Destroy;
+       Layergroup[i].OsciStringGrid.Destroy;
+       Layergroup[i].AddOscillatorButton.Destroy;
+       Layergroup[i].RemoveOscillatorButton.Destroy;
+    end;
+    setlength(Layergroup, NumberOfLayers);
+  end
+  else if length(Layergroup) < NumberOfLayers then
+  begin
+    setlength(LayerName, NumberOfLayers);
+    setlength(Thickness, NumberOfLayers);
+    setlength(Epsilon, NumberOfLayers);
+    setlength(NumberOfOscillators, NumberOfLayers);
+    i := length(Layergroup);
+    repeat
+      setlength(LayerGroup, i + 1);
+      Layergroup[i].NameLabel := TLabel.Create(self);
+      Layergroup[i].NameLabel.Parent := self;
+      Layergroup[i].NameLabel.Left := 320;
+      Layergroup[i].NameLabel.Height := 16;
+      Layergroup[i].NameLabel.Top := 62 + (i) * 100;
+      Layergroup[i].NameLabel.Width := 74;
+      Layergroup[i].NameLabel.Caption := 'Layer name:';
+
+      Layergroup[i].NameEdit := TEdit.Create(self);
+      Layergroup[i].NameEdit.Parent := self;
+      Layergroup[i].NameEdit.Left := 400;
+      Layergroup[i].NameEdit.Height := 22;
+      Layergroup[i].NameEdit.Top := 56 + (i) * 100;
+      Layergroup[i].NameEdit.Width := 104;
+      Layergroup[i].NameEdit.Alignment := taRightJustify;
+      Layergroup[i].NameEdit.Tag := i;
+
+      Layergroup[i].ThicknessLabel := TLabel.Create(self);
+      Layergroup[i].ThicknessLabel.Parent := self;
+      Layergroup[i].ThicknessLabel.Left := 320;
+      Layergroup[i].ThicknessLabel.Height := 16;
+      Layergroup[i].ThicknessLabel.Top := 87 + (i) * 100;
+      Layergroup[i].ThicknessLabel.Width := 97;
+      Layergroup[i].ThicknessLabel.Caption := 'Thickness (nm):';
+
+      Layergroup[i].ThicknessEdit := TEdit.Create(self);
+      Layergroup[i].ThicknessEdit.Parent := self;
+      Layergroup[i].ThicknessEdit.Left := 423;
+      Layergroup[i].ThicknessEdit.Height := 22;
+      Layergroup[i].ThicknessEdit.Top := 81 + (i) * 100;
+      Layergroup[i].ThicknessEdit.Width := 80;
+      Layergroup[i].ThicknessEdit.Alignment := taRightJustify;
+      Layergroup[i].ThicknessEdit.Tag := i;
+
+      Layergroup[i].EpsilonLabel := TLabel.Create(self);
+      Layergroup[i].EpsilonLabel.Parent := self;
+      Layergroup[i].EpsilonLabel.Left := 320;
+      Layergroup[i].EpsilonLabel.Height := 16;
+      Layergroup[i].EpsilonLabel.Top := 112 + (i) * 100;
+      Layergroup[i].EpsilonLabel.Width := 47;
+      Layergroup[i].EpsilonLabel.Caption := 'Epsilon:';
+
+      Layergroup[i].EpsilonEdit := TEdit.Create(self);
+      Layergroup[i].EpsilonEdit.Parent := self;
+      Layergroup[i].EpsilonEdit.Left := 423;
+      Layergroup[i].EpsilonEdit.Height := 22;
+      Layergroup[i].EpsilonEdit.Top := 106 + (i) * 100;
+      Layergroup[i].EpsilonEdit.Width := 80;
+      Layergroup[i].EpsilonEdit.Alignment := taRightJustify;
+      Layergroup[i].EpsilonLabel.Tag := i;
+
+      Layergroup[i].OsciLabel := TLabel.Create(self);
+      Layergroup[i].OsciLabel.Parent := self;
+      Layergroup[i].OsciLabel.Left := 320;
+      Layergroup[i].OsciLabel.Height := 16;
+      Layergroup[i].OsciLabel.Top := 135 + (i) * 100;
+      Layergroup[i].OsciLabel.Width := 68;
+      Layergroup[i].OsciLabel.Caption := 'Oscillators:';
+
+      Layergroup[i].OsciStringGrid := TStringGrid.Create(self);
+      Layergroup[i].OsciStringGrid.Parent := self;
+      Layergroup[i].OsciStringGrid.Left := 512;
+      Layergroup[i].OsciStringGrid.Height := 94;
+      Layergroup[i].OsciStringGrid.Top := 56 + (i) * 100;
+      Layergroup[i].OsciStringGrid.Width := 204;
+      Layergroup[i].OsciStringGrid.AutoAdvance := aaRightDown;
+      Layergroup[i].OsciStringGrid.ColCount := 3;
+      Layergroup[i].OsciStringGrid.Constraints.MaxHeight := 94;
+      Layergroup[i].OsciStringGrid.Constraints.MinHeight := 94;
+      Layergroup[i].OsciStringGrid.FixedCols := 0;
+      Layergroup[i].OsciStringGrid.Options := [goFixedVertLine, goFixedHorzLine, goVertLine, goHorzLine, goRangeSelect, goEditing, goSmoothScroll];
+      Layergroup[i].OsciStringGrid.RowCount := 2;
+      Layergroup[i].OsciStringGrid.RowCount := NumberOfOscillators[i] + 1;
+      Layergroup[i].OsciStringGrid.FixedRows := 1;
+      Layergroup[i].OsciStringGrid.ScrollBars := ssVertical;
+      Layergroup[i].OsciStringGrid.Rows[0].add('frequ.');
+      Layergroup[i].OsciStringGrid.Rows[0].add('q');
+      Layergroup[i].OsciStringGrid.Rows[0].add('gam/wto');
+      Layergroup[i].OsciStringGrid.Tag := i;
+
+      Layergroup[i].AddOscillatorButton := TButton.Create(self);
+      Layergroup[i].AddOscillatorButton.Parent := self;
+      Layergroup[i].AddOscillatorButton.Left := 423;
+      Layergroup[i].AddOscillatorButton.Height := 25;
+      Layergroup[i].AddOscillatorButton.Top := 128 + (i) * 100;
+      Layergroup[i].AddOscillatorButton.Width := 40;
+      Layergroup[i].AddOscillatorButton.Caption := '+';
+      Layergroup[i].AddOscillatorButton.Tag := i;
+      Layergroup[i].AddOscillatorButton.OnClick := @AddOscillatorButtonClick;
+    //  Layergroup[i].AddOscillatorButton.TabOrder := 16;
+
+      Layergroup[i].RemoveOscillatorButton := TButton.Create(self);
+      Layergroup[i].RemoveOscillatorButton.Parent := self;
+      Layergroup[i].RemoveOscillatorButton.Left := 464;
+      Layergroup[i].RemoveOscillatorButton.Height := 25;
+      Layergroup[i].RemoveOscillatorButton.Top := 128 + (i) * 100;
+      Layergroup[i].RemoveOscillatorButton.Width := 40;
+      Layergroup[i].RemoveOscillatorButton.Caption := '-';
+      Layergroup[i].RemoveOscillatorButton.Tag := i;
+      Layergroup[i].RemoveOscillatorButton.OnClick := @RemoveOscillatorButtonClick;
+    //  Layergroup[i].RemoveOscillatorButton.TabOrder := 22;
+
+      inc(i);
+    until (length(Layergroup) = NumberOfLayers);
+  end;
+  for i := 0 to NumberOfLayers - 1 do
+  begin
+    Layergroup[i].NameEdit.Text := LayerName[i];
+    Layergroup[i].ThicknessEdit.Text := FormatFloat('0.00',Thickness[i]);
+    Layergroup[i].EpsilonEdit.Text    := FormatFloat('0.00',Epsilon[i]);
+    Layergroup[i].OsciStringGrid.RowCount := NumberOfOscillators[i] + 1;
+  end;
+  index := 0;
+  for i := 0 to NumberOfLayers -1 do
+    for j := 1 to NumberOfOscillators[i] do
+    begin
+       Layergroup[i].OsciStringGrid.Cells[0,j] := FormatFloat('0.000', Oscillator[index,1]);
+       Layergroup[i].OsciStringGrid.Cells[1,j] := FormatFloat('0.000', Oscillator[index,2]);
+       Layergroup[i].OsciStringGrid.Cells[2,j] := FormatFloat('0.000', Oscillator[index,3]);
+       inc(index);
+    end;
 end;
 
 procedure TMainForm.EELSExportMenuItemClick(Sender: TObject);
@@ -405,7 +565,6 @@ begin
     OsciStringGrid.InsertRowWithValues(OsciStringGrid.RowCount, ['0','0','0']);
     OsciStringGrid.Height := OsciStringGrid.Height + 23;
     inc(NumberOfOscillators[index]);
-    //  setlength(Oscillator, NumberOfOscillators[0]);
   end;
 end;
 procedure TMainForm.RemoveOscillatorButtonClick(Sender: TObject);
@@ -419,7 +578,6 @@ begin
       OsciStringGrid.DeleteRow(OsciStringGrid.RowCount - 1);
       OsciStringGrid.Height := OsciStringGrid.Height - 23;
       dec(NumberOfOscillators[index]);
-//    setlength(Oscillator, NumberOfOscillators[0]);
     end;
 end;
 
@@ -430,7 +588,6 @@ var
   Oscillator_length: integer;
   i, j, index: integer;
 begin
-  // todo: set the variables.
   NumberOfEpsilons := NumberOfLayers;
   if NumberOfPeriodic = -1 then
   begin
@@ -493,6 +650,7 @@ begin
   setlength(yout, nout);
   doboson(TargetTemperature, InstrumentalWidth, GaussianFraction, Asymmetry, EMin, EMax,
           IntervalWMin, IntervalWMax, IntervalNW, F_Array, xout, yout, nout);
+
   DiagrammForm.Visible := true;
 end;
 
-- 
GitLab