summaryrefslogtreecommitdiff
path: root/epostunit.pas
diff options
context:
space:
mode:
authorErich Eckner <git@eckner.net>2019-01-24 15:45:23 +0100
committerErich Eckner <git@eckner.net>2019-01-24 15:45:23 +0100
commit591b6d542b52951c10f94749d48c9b2207c12159 (patch)
tree3d9621a8713eedf1c1ab32dad38b432cf7cb2d6c /epostunit.pas
parentd24c1a7fc56d261e5fec8baf082a3e53eaf2d266 (diff)
downloadepost-591b6d542b52951c10f94749d48c9b2207c12159.tar.xz
Töpfe speicher- und ladebar, Spektrometerverzerrung beachtbar
Diffstat (limited to 'epostunit.pas')
-rw-r--r--epostunit.pas128
1 files changed, 88 insertions, 40 deletions
diff --git a/epostunit.pas b/epostunit.pas
index eba3ee1..a4e797b 100644
--- a/epostunit.pas
+++ b/epostunit.pas
@@ -3944,9 +3944,9 @@ end;
function tWerte.faktorisiere(sT: boolean; f: tMyStringList): boolean;
var
bekannteBefehle: tMyStringList;
- Zeit,tmpE: extended;
+ Zeit,tmpE,nullteSpektrometerordnung: extended;
anzahl,i,j: longint;
- s,aDatei,iDatei: string;
+ s,aDatei,iDatei,tDatei: string;
pDatei: textFile;
lineOut,tmpEA: tExtendedArray;
maxima,maxima2: tLongintArray;
@@ -3959,22 +3959,43 @@ begin
gibAus('faktorisiere ...',3);
bekannteBefehle:=tMyStringList.create;
Zeit:=now;
- anzahl:=1;
+ anzahl:=-1;
aDatei:='';
iDatei:='';
+ tDatei:='';
residuenBerechnen:=false;
auszenHorizontal:=false;
+ nullteSpektrometerordnung:=nan;
repeat
if not f.metaReadln(s,true) then begin
gibAus('Unerwartetes Dateiende!',3);
exit;
end;
bekannteBefehle.clear;
- if istDasBefehl('Ende',s,bekannteBefehle,false) then break;
+ if istDasBefehl('Ende',s,bekannteBefehle,false) then
+ break;
if istDasBefehl('Anzahl:',s,bekannteBefehle,true) then begin
anzahl:=round(exprToFloat(sT,s));
continue;
end;
+ if istDasBefehl('nullte Spektrometerordnung:',s,bekannteBefehle,true) then begin
+ if not isNaN(nullteSpektrometerordnung) then begin
+ gibAus('Habe bereits eine nullte Spektrometerordnung beim Faktorisieren!',3);
+ bekannteBefehle.free;
+ exit;
+ end;
+ nullteSpektrometerordnung:=exprToFloat(sT,s);
+ continue;
+ end;
+ if istDasBefehl('Topf-Datei:',s,bekannteBefehle,true) then begin
+ if tDatei<>'' then begin
+ gibAus('Habe bereits eine Datei mit den Töpfen beim Faktorisieren!',3);
+ bekannteBefehle.free;
+ exit;
+ end;
+ tDatei:=s;
+ continue;
+ end;
if istDasBefehl('Residuen berechnen',s,bekannteBefehle,false) then begin
residuenBerechnen:=true;
continue;
@@ -4021,6 +4042,11 @@ begin
exit;
end;
+ if (anzahl=-1) and (tDatei='') then begin
+ gibAus('Keine Anzahl und keine Datei mit Töpfen beim Faktorisieren!',3);
+ exit;
+ end;
+
if sT then begin
result:=true;
exit;
@@ -4035,43 +4061,65 @@ begin
lineOut:=eWerte.integriereZuLineOut(not auszenHorizontal,true);
end{of case};
- setLength(maxima,0);
- i:=0;
- for j:=0 to length(lineOut)-1 do
- if ((j=0) or (lineOut[j]>lineOut[j-1])) and
- ((j=length(lineOut)-1) or (lineOut[j]>lineOut[j+1])) then begin
- if length(maxima)<=i then
- setLength(maxima,i+128);
- maxima[i]:=j;
- inc(i);
+ if anzahl<>-1 then begin
+ setLength(maxima,0);
+ i:=0;
+ for j:=0 to length(lineOut)-1 do
+ if ((j=0) or (lineOut[j]>lineOut[j-1])) and
+ ((j=length(lineOut)-1) or (lineOut[j]>lineOut[j+1])) then begin
+ if length(maxima)<=i then
+ setLength(maxima,i+128);
+ maxima[i]:=j;
+ inc(i);
+ end;
+ setLength(maxima,i);
+
+ sortiereNachDominanz(maxima,lineOut,nullteSpektrometerordnung);
+ setLength(maxima,anzahl);
+
+ setLength(maxima2,anzahl);
+ setLength(tmpEA,anzahl);
+ for i:=0 to length(tmpEA)-1 do begin
+ tmpEA[i]:=maxima[i];
+ maxima2[i]:=maxima[i];
+ maxima[i]:=i;
+ end;
+ sortiereNachWert(maxima,tmpEA,false);
+ setLength(tmpEA,0);
+ setLength(toepfe,anzahl);
+ for i:=0 to length(toepfe)-1 do begin
+ if i>0 then
+ toepfe[length(toepfe)-1-i]['y']:=(maxima2[maxima[i-1]]+maxima2[maxima[i]]) div 2
+ else if auszenHorizontal then
+ toepfe[length(toepfe)-1-i]['y']:=_xSteps-1
+ else
+ toepfe[length(toepfe)-1-i]['y']:=_tSiz-1;
+ if i<length(toepfe)-1 then
+ toepfe[length(toepfe)-1-i]['x']:=(maxima2[maxima[i]]+maxima2[maxima[i+1]]) div 2 + 1
+ else
+ toepfe[length(toepfe)-1-i]['x']:=0;
+ end;
+ if tDatei<>'' then begin
+ assignFile(pDatei,tDatei);
+ rewrite(pDatei);
+ writeln(pDatei,length(toepfe));
+ for i:=0 to length(toepfe)-1 do
+ writeln(pDatei,tIntPointToStr(toepfe[i]));
+ closeFile(pDatei);
+ end;
+ end
+ else
+ if tDatei<>'' then begin
+ assignFile(pDatei,tDatei);
+ reset(pDatei);
+ readln(pDatei,i);
+ setLength(toepfe,i);
+ for i:=0 to length(toepfe)-1 do begin
+ readln(pDatei,s);
+ toepfe[i]:=strToTIntPoint(s);
+ end;
+ closeFile(pDatei);
end;
- setLength(maxima,i);
-
- sortiereNachDominanz(maxima,lineOut);
- setLength(maxima,anzahl);
-
- setLength(maxima2,anzahl);
- setLength(tmpEA,anzahl);
- for i:=0 to length(tmpEA)-1 do begin
- tmpEA[i]:=maxima[i];
- maxima2[i]:=maxima[i];
- maxima[i]:=i;
- end;
- sortiereNachWert(maxima,tmpEA,false);
- setLength(tmpEA,0);
- setLength(toepfe,anzahl);
- for i:=0 to length(toepfe)-1 do begin
- if i>0 then
- toepfe[length(toepfe)-1-i]['y']:=(maxima2[maxima[i-1]]+maxima2[maxima[i]]) div 2
- else if auszenHorizontal then
- toepfe[length(toepfe)-1-i]['y']:=_xSteps-1
- else
- toepfe[length(toepfe)-1-i]['y']:=_tSiz-1;
- if i<length(toepfe)-1 then
- toepfe[length(toepfe)-1-i]['x']:=(maxima2[maxima[i]]+maxima2[maxima[i+1]]) div 2 + 1
- else
- toepfe[length(toepfe)-1-i]['x']:=0;
- end;
case genauigkeit of
gSingle: