From 943af6d08c3a3672b2375eb59d0b060defd20ab4 Mon Sep 17 00:00:00 2001
From: karlmichaelschindler
 <karlmichaelschindler@7e267752-d5d8-41c0-93cd-a7fa012602f9>
Date: Tue, 22 Sep 2020 10:03:27 +0000
Subject: [PATCH] eelsin export working

git-svn-id: svn+ssh://michael-ep3.physik.uni-halle.de/Users/Shared/EELS2@106 7e267752-d5d8-41c0-93cd-a7fa012602f9
---
 source/Lazarus-GUI/EELS.lps       | 113 +++++++++++++++---------------
 source/Lazarus-GUI/UEELSBoson.pas |   3 +
 source/Lazarus-GUI/UFileIO.pas    |  78 ++++++++++++++++++++-
 source/Lazarus-GUI/UMainForm.pas  |  38 ++++++----
 4 files changed, 159 insertions(+), 73 deletions(-)

diff --git a/source/Lazarus-GUI/EELS.lps b/source/Lazarus-GUI/EELS.lps
index 619fd13..a69ccd9 100644
--- a/source/Lazarus-GUI/EELS.lps
+++ b/source/Lazarus-GUI/EELS.lps
@@ -16,10 +16,9 @@
         <ComponentName Value="MainForm"/>
         <HasResources Value="True"/>
         <ResourceBaseClass Value="Form"/>
-        <IsVisibleTab Value="True"/>
         <EditorIndex Value="1"/>
-        <TopLine Value="269"/>
-        <CursorPos Y="397"/>
+        <TopLine Value="383"/>
+        <CursorPos X="6" Y="411"/>
         <UsageCount Value="202"/>
         <Loaded Value="True"/>
         <LoadedDesigner Value="True"/>
@@ -28,16 +27,18 @@
         <Filename Value="UEELSBoson.pas"/>
         <IsPartOfProject Value="True"/>
         <EditorIndex Value="4"/>
-        <CursorPos Y="74"/>
+        <TopLine Value="28"/>
+        <CursorPos X="3" Y="40"/>
         <UsageCount Value="255"/>
         <Loaded Value="True"/>
       </Unit2>
       <Unit3>
         <Filename Value="UFileIO.pas"/>
         <IsPartOfProject Value="True"/>
+        <IsVisibleTab Value="True"/>
         <EditorIndex Value="3"/>
-        <TopLine Value="104"/>
-        <CursorPos X="40" Y="86"/>
+        <TopLine Value="167"/>
+        <CursorPos X="104" Y="184"/>
         <UsageCount Value="203"/>
         <Loaded Value="True"/>
       </Unit3>
@@ -46,7 +47,7 @@
         <IsPartOfProject Value="True"/>
         <EditorIndex Value="5"/>
         <CursorPos Y="189"/>
-        <UsageCount Value="134"/>
+        <UsageCount Value="135"/>
         <Loaded Value="True"/>
         <DefaultSyntaxHighlighter Value="None"/>
       </Unit4>
@@ -55,7 +56,7 @@
         <IsPartOfProject Value="True"/>
         <EditorIndex Value="6"/>
         <CursorPos X="91"/>
-        <UsageCount Value="139"/>
+        <UsageCount Value="140"/>
         <Loaded Value="True"/>
         <DefaultSyntaxHighlighter Value="None"/>
       </Unit5>
@@ -66,8 +67,8 @@
         <HasResources Value="True"/>
         <ResourceBaseClass Value="Form"/>
         <EditorIndex Value="2"/>
-        <CursorPos Y="4"/>
-        <UsageCount Value="108"/>
+        <CursorPos Y="14"/>
+        <UsageCount Value="109"/>
         <Loaded Value="True"/>
         <LoadedDesigner Value="True"/>
       </Unit6>
@@ -97,123 +98,123 @@
     <JumpHistory Count="30" HistoryIndex="29">
       <Position1>
         <Filename Value="UMainForm.pas"/>
-        <Caret Line="344" Column="19" TopLine="322"/>
+        <Caret Line="363" Column="19" TopLine="341"/>
       </Position1>
       <Position2>
         <Filename Value="UMainForm.pas"/>
-        <Caret Line="345" Column="44" TopLine="323"/>
+        <Caret Line="364" Column="19" TopLine="342"/>
       </Position2>
       <Position3>
         <Filename Value="UMainForm.pas"/>
-        <Caret Line="347" Column="19" TopLine="325"/>
+        <Caret Line="365" Column="52" TopLine="343"/>
       </Position3>
       <Position4>
         <Filename Value="UMainForm.pas"/>
-        <Caret Line="348" Column="19" TopLine="326"/>
+        <Caret Line="366" Column="19" TopLine="344"/>
       </Position4>
       <Position5>
         <Filename Value="UMainForm.pas"/>
-        <Caret Line="349" Column="19" TopLine="327"/>
+        <Caret Line="255" TopLine="255"/>
       </Position5>
       <Position6>
         <Filename Value="UMainForm.pas"/>
-        <Caret Line="350" Column="19" TopLine="328"/>
+        <Caret Line="345" Column="89" TopLine="333"/>
       </Position6>
       <Position7>
-        <Filename Value="UMainForm.pas"/>
-        <Caret Line="351" Column="56" TopLine="329"/>
+        <Filename Value="UDiagramm.pas"/>
+        <Caret Line="4"/>
       </Position7>
       <Position8>
         <Filename Value="UMainForm.pas"/>
-        <Caret Line="352" Column="19" TopLine="330"/>
+        <Caret Line="384" Column="43" TopLine="374"/>
       </Position8>
       <Position9>
         <Filename Value="UMainForm.pas"/>
-        <Caret Line="353" Column="19" TopLine="331"/>
+        <Caret Line="253" TopLine="233"/>
       </Position9>
       <Position10>
-        <Filename Value="UMainForm.pas"/>
-        <Caret Line="354" Column="49" TopLine="332"/>
+        <Filename Value="UFileIO.pas"/>
+        <Caret Line="86" Column="40" TopLine="81"/>
       </Position10>
       <Position11>
         <Filename Value="UMainForm.pas"/>
-        <Caret Line="355" Column="19" TopLine="333"/>
+        <Caret Line="391" TopLine="312"/>
       </Position11>
       <Position12>
         <Filename Value="UMainForm.pas"/>
-        <Caret Line="356" Column="21" TopLine="334"/>
+        <Caret Line="264" Column="53" TopLine="251"/>
       </Position12>
       <Position13>
         <Filename Value="UMainForm.pas"/>
-        <Caret Line="358" Column="19" TopLine="336"/>
+        <Caret Line="253" Column="57" TopLine="251"/>
       </Position13>
       <Position14>
-        <Filename Value="UMainForm.pas"/>
-        <Caret Line="359" Column="19" TopLine="337"/>
+        <Filename Value="UDiagramm.pas"/>
+        <Caret Line="4"/>
       </Position14>
       <Position15>
-        <Filename Value="UMainForm.pas"/>
-        <Caret Line="360" Column="19" TopLine="338"/>
+        <Filename Value="UFileIO.pas"/>
+        <Caret Line="168" Column="9" TopLine="148"/>
       </Position15>
       <Position16>
-        <Filename Value="UMainForm.pas"/>
-        <Caret Line="361" Column="19" TopLine="339"/>
+        <Filename Value="UFileIO.pas"/>
+        <Caret Line="167" Column="35" TopLine="141"/>
       </Position16>
       <Position17>
-        <Filename Value="UMainForm.pas"/>
-        <Caret Line="362" Column="59" TopLine="340"/>
+        <Filename Value="UFileIO.pas"/>
+        <Caret Line="168" Column="12" TopLine="145"/>
       </Position17>
       <Position18>
-        <Filename Value="UMainForm.pas"/>
-        <Caret Line="363" Column="19" TopLine="341"/>
+        <Filename Value="UFileIO.pas"/>
+        <Caret Line="169" Column="12" TopLine="146"/>
       </Position18>
       <Position19>
-        <Filename Value="UMainForm.pas"/>
-        <Caret Line="364" Column="19" TopLine="342"/>
+        <Filename Value="UFileIO.pas"/>
+        <Caret Line="170" Column="12" TopLine="147"/>
       </Position19>
       <Position20>
-        <Filename Value="UMainForm.pas"/>
-        <Caret Line="365" Column="52" TopLine="343"/>
+        <Filename Value="UFileIO.pas"/>
+        <Caret Line="171" Column="12" TopLine="148"/>
       </Position20>
       <Position21>
-        <Filename Value="UMainForm.pas"/>
-        <Caret Line="366" Column="19" TopLine="344"/>
+        <Filename Value="UFileIO.pas"/>
+        <Caret Line="172" Column="12" TopLine="149"/>
       </Position21>
       <Position22>
-        <Filename Value="UMainForm.pas"/>
-        <Caret Line="255" TopLine="255"/>
+        <Filename Value="UFileIO.pas"/>
+        <Caret Line="173" Column="12" TopLine="150"/>
       </Position22>
       <Position23>
-        <Filename Value="UMainForm.pas"/>
-        <Caret Line="345" Column="89" TopLine="333"/>
+        <Filename Value="UFileIO.pas"/>
+        <Caret Line="174" Column="12" TopLine="151"/>
       </Position23>
       <Position24>
-        <Filename Value="UDiagramm.pas"/>
-        <Caret Line="4"/>
+        <Filename Value="UFileIO.pas"/>
+        <Caret Line="175" Column="12" TopLine="152"/>
       </Position24>
       <Position25>
-        <Filename Value="UMainForm.pas"/>
-        <Caret Line="384" Column="43" TopLine="374"/>
+        <Filename Value="UDiagramm.pas"/>
+        <Caret Line="14"/>
       </Position25>
       <Position26>
-        <Filename Value="UMainForm.pas"/>
-        <Caret Line="253" TopLine="233"/>
+        <Filename Value="UFileIO.pas"/>
+        <Caret Line="158" Column="26" TopLine="144"/>
       </Position26>
       <Position27>
         <Filename Value="UFileIO.pas"/>
-        <Caret Line="86" Column="40" TopLine="81"/>
+        <Caret Line="190" Column="26" TopLine="177"/>
       </Position27>
       <Position28>
         <Filename Value="UMainForm.pas"/>
-        <Caret Line="391" TopLine="312"/>
+        <Caret Line="77" Column="40" TopLine="220"/>
       </Position28>
       <Position29>
         <Filename Value="UMainForm.pas"/>
-        <Caret Line="264" Column="53" TopLine="251"/>
+        <Caret Line="403" Column="3" TopLine="233"/>
       </Position29>
       <Position30>
-        <Filename Value="UMainForm.pas"/>
-        <Caret Line="253" Column="57" TopLine="251"/>
+        <Filename Value="UFileIO.pas"/>
+        <Caret Line="184" Column="104" TopLine="167"/>
       </Position30>
     </JumpHistory>
     <RunParams>
diff --git a/source/Lazarus-GUI/UEELSBoson.pas b/source/Lazarus-GUI/UEELSBoson.pas
index f6bf1a3..7d5b64d 100644
--- a/source/Lazarus-GUI/UEELSBoson.pas
+++ b/source/Lazarus-GUI/UEELSBoson.pas
@@ -26,14 +26,17 @@ var
   Comment1: string;
   Comment2: string;
   Comment_size:     Finteger;
+  Comment1_length:  integer;
   NumberOfPeriodic: Finteger;
   NumberOfLayers:   Finteger;
   NumberOfEpsilons: Finteger;
   LayerName:  array of string;
+  LayerName_length: integer;
   Thickness:  array of Fdouble;
   Epsilon:    array of Fdouble;
   NumberOfOscillators: array of Finteger;
   Oscillator: array of Fosc_array;
+  Oscillator_length: integer;
   Control: string;
   Mode:    string;
   Wn_Array: array of Fdouble;
diff --git a/source/Lazarus-GUI/UFileIO.pas b/source/Lazarus-GUI/UFileIO.pas
index e8a61b1..84990b0 100644
--- a/source/Lazarus-GUI/UFileIO.pas
+++ b/source/Lazarus-GUI/UFileIO.pas
@@ -33,7 +33,25 @@ procedure read_eelsin(
             var NumberOfOscillators: Tintegerarray;
             var Oscillator: Toscarray
           );
-procedure write_eelsin;
+procedure write_eelsin(
+            const ImpactEnergy: double;
+            const IncidenceAngle: double;
+            const AngularAperturePhiA: double;
+            const AngularAperturePhiB: double;
+            const IntervalWMin: double;
+            const IntervalWMax: double;
+            const IntervalWDelta: double;
+            const Comment1: string;
+            const Comment2: string;
+            const NumberOfLayers:   integer;
+            const NumberOfEpsilons: integer;
+            const NumberOfPeriodic: integer;
+            const LayerName:  Tstringarray;
+            const Thickness:  Tdoublearray;
+            const Epsilon:    Tdoublearray;
+            const NumberOfOscillators: Tintegerarray;
+            const Oscillator: Toscarray
+          );
 procedure read_bosin;
 procedure write_bosin;
 
@@ -113,9 +131,63 @@ begin
   FileOpenDialog.Destroy;
 end;
 
-procedure write_eelsin;
+procedure write_eelsin(
+            const ImpactEnergy: double;
+            const IncidenceAngle: double;
+            const AngularAperturePhiA: double;
+            const AngularAperturePhiB: double;
+            const IntervalWMin: double;
+            const IntervalWMax: double;
+            const IntervalWDelta: double;
+            const Comment1: string;
+            const Comment2: string;
+            const NumberOfLayers:   integer;
+            const NumberOfEpsilons: integer;
+            const NumberOfPeriodic: integer;
+            const LayerName:  Tstringarray;
+            const Thickness:  Tdoublearray;
+            const Epsilon:    Tdoublearray;
+            const NumberOfOscillators: Tintegerarray;
+            const Oscillator: Toscarray
+          );
+var
+  eelsin: text;
+  i, j, index, Oscillator_length, here: integer;
+  FileSaveDialog: TSaveDialog;
 begin
-
+  FileSaveDialog := TSaveDialog.Create(nil);
+  FileSaveDialog.Filename := 'eelsin';
+  FileSaveDialog.Title := 'Save file eelsin as:';
+  if not FileSaveDialog.Execute then
+    ShowMessage('Save file eelsin was cancelled')
+  else
+  begin
+    assign(eelsin, FileSaveDialog.FileName);
+    rewrite(eelsin);
+    writeln(eelsin, ImpactEnergy:10:2);
+    writeln(eelsin, IncidenceAngle:10:2);
+    writeln(eelsin, AngularAperturePhiA:10:2);
+    writeln(eelsin, AngularAperturePhiB:10:2);
+    writeln(eelsin, IntervalWMin:10:2);
+    writeln(eelsin, IntervalWMax:10:2);
+    writeln(eelsin, IntervalWDelta:10:2);
+    writeln(eelsin, Comment1);
+    writeln(eelsin, Comment2);
+    writeln(eelsin, NumberOfLayers:10, NumberOfPeriodic:10);
+    index := 0;
+    for i := 0 to NumberOfLayers - 1 do
+    begin
+      writeln(eelsin, Layername[i], thickness[i]:10:2);
+      writeln(eelsin, Epsilon[i]:10:2, NumberOfOscillators[i]:10);
+      for j := 1 to NumberOfOscillators[i] do
+      begin
+        writeln(eelsin, Oscillator[index][1]:10:2, Oscillator[index][2]:10:3, Oscillator[index][3]:10:3);
+        inc(index);
+      end;
+    end;
+    close(eelsin);
+  end;
+  FileSaveDialog.Destroy;
 end;
 
 procedure read_bosin;
diff --git a/source/Lazarus-GUI/UMainForm.pas b/source/Lazarus-GUI/UMainForm.pas
index d8563c1..6ddc3b0 100644
--- a/source/Lazarus-GUI/UMainForm.pas
+++ b/source/Lazarus-GUI/UMainForm.pas
@@ -74,6 +74,8 @@ type
 	
     procedure CalculateButtonClick(Sender: TObject);
 
+    procedure Convert(Sender: TObject);
+
   private
     LayerGroup: array of record
       NameLabel: TLabel;
@@ -398,7 +400,11 @@ end;
 
 procedure TMainForm.EELSExportMenuItemClick(Sender: TObject);
 begin
-  write_eelsin;
+  Convert(self);
+  write_eelsin(ImpactEnergy, IncidenceAngle, AngularAperturePhiA, AngularAperturePhiB,
+    IntervalWMin, IntervalWMax, IntervalWDelta, Comment1, Comment2,
+    NumberOfLayers, NumberOfEpsilons, NumberOfPeriodic, LayerName, Thickness,
+    Epsilon, NumberOfOscillators, Oscillator);
 end;
 
 procedure TMainForm.BosonImportMenuItemClick(Sender: TObject);
@@ -583,9 +589,23 @@ end;
 
 procedure TMainForm.CalculateButtonClick(Sender: TObject);
 var
-  Comment1_length: integer;
-  LayerName_length: integer;
-  Oscillator_length: integer;
+  i, j, index: integer;
+begin
+  Convert(self);
+  doeels(ImpactEnergy, IncidenceAngle, AngularAperturePhiA, AngularAperturePhiB,
+         IntervalWMin, IntervalWMax, IntervalWDelta, Comment1, Comment1_length,
+         NumberOfLayers, NumberOfEpsilons, NumberOfPeriodic, LayerName, LayerName_length,
+         Thickness, Epsilon, NumberOfOscillators, Oscillator, Oscillator_length,
+         Control, Mode, Wn_Array, F_Array, IntervalNW);
+
+  doboson(TargetTemperature, InstrumentalWidth, GaussianFraction, Asymmetry, EMin, EMax,
+          IntervalWMin, IntervalWMax, IntervalNW, F_Array, xout, yout, nout);
+
+  DiagrammForm.Visible := true;
+end;
+
+procedure TMainForm.Convert(Sender: TObject);
+var
   i, j, index: integer;
 begin
   NumberOfEpsilons := NumberOfLayers;
@@ -632,11 +652,6 @@ begin
   setlength(F_Array, IntervalNW);
   Control := ' ';
   Mode := ' ';
-  doeels(ImpactEnergy, IncidenceAngle, AngularAperturePhiA, AngularAperturePhiB,
-         IntervalWMin, IntervalWMax, IntervalWDelta, Comment1, Comment1_length,
-         NumberOfLayers, NumberOfEpsilons, NumberOfPeriodic, LayerName, LayerName_length,
-         Thickness, Epsilon, NumberOfOscillators, Oscillator, Oscillator_length,
-         Control, Mode, Wn_Array, F_Array, IntervalNW);
 
 // Boson part
   TryStrToFloat(TargetTemperatureEdit.Text, TargetTemperature);
@@ -648,11 +663,6 @@ begin
   nout := 3000;
   setlength(xout, nout);
   setlength(yout, nout);
-  doboson(TargetTemperature, InstrumentalWidth, GaussianFraction, Asymmetry, EMin, EMax,
-          IntervalWMin, IntervalWMax, IntervalNW, F_Array, xout, yout, nout);
-
-  DiagrammForm.Visible := true;
 end;
-
 end.
 
-- 
GitLab