diff options
-rw-r--r-- | GTIWebServerTestAggActionHandlerUnit.pas | 268 | ||||
-rw-r--r-- | epost.lpr | 159 | ||||
-rw-r--r-- | epost.lps | 214 | ||||
-rw-r--r-- | epostunit.pas | 4650 | ||||
-rw-r--r-- | typenunit.pas | 1124 | ||||
-rw-r--r-- | werteunit.pas | 1650 |
6 files changed, 4186 insertions, 3879 deletions
diff --git a/GTIWebServerTestAggActionHandlerUnit.pas b/GTIWebServerTestAggActionHandlerUnit.pas index c49259b..b96e218 100644 --- a/GTIWebServerTestAggActionHandlerUnit.pas +++ b/GTIWebServerTestAggActionHandlerUnit.pas @@ -1,134 +1,134 @@ -unit GTIWebServerTestAggActionHandlerUnit;
-
-interface
-
-uses
- sysutils,
- zstream,
- ftfont,
- agg_2D,
- FPimage,
- FPImgCanv,
- FPWritePNG,
- FPWriteJPEG,
- agg_basics;
-
-type
-
- { TTestAggActionHandler }
-
- TTestAggActionHandler = class
- public
- const ImageWidth = 800;
- const ImageHeight = 480;
- const RGBA_Width = 4;
- const LineCount = 30;
- const FontFilePath = '/usr/share/fonts/TTF/DejaVuSans.ttf';
- procedure HandlePlug;
- procedure DrawStuff(agg: Agg2D_ptr);
- procedure DrawText(aImage: TFPMemoryImage);
- end;
-
-implementation
-
-{ TTestAggActionHandler }
-
-procedure TTestAggActionHandler.HandlePlug;
-var
- agg: Agg2D_ptr;
- buf: array of int8;
- image: TFPMemoryImage;
- writer: TFPWriterJPEG;
- x, y: Integer;
- c: TFPColor;
- function getBufItemAsWord(aDelta: byte): Word;
- var
- actualY: Integer;
- begin
- actualY := ImageHeight - y - 1;
- result :=
- Word(buf[x * RGBA_Width + actualY * ImageWidth * RGBA_Width + aDelta] shl 8)
- or Word(128);
- end;
-begin
- SetLength(buf, ImageWidth * ImageHeight * RGBA_Width);
- New(agg, Construct);
- agg^.attach(@(buf[0]), ImageWidth, ImageHeight, ImageWidth * RGBA_Width);
- DrawStuff(agg);
- Dispose(agg, Destruct); // not necessary to keep it after rendering is finished
- image := TFPMemoryImage.create(ImageWidth, ImageHeight);
- for x := 0 to ImageWidth - 1 do
- for y := 0 to ImageHeight - 1 do
- begin
- c.red := getBufItemAsWord(2);
- c.green := getBufItemAsWord(1);
- c.blue := getBufItemAsWord(0);
- c.alpha := getBufItemAsWord(3);
- image.Colors[x, y] := c;
- end;
- {
- writer := TFPWriterPNG.create;
- writer.CompressionLevel := clmax;
- writer.WordSized := False; // reduce size
- }
- writer := TFPWriterJPEG.Create;
- writer.CompressionQuality := $FF div 3; // bad quality plz
- writer.ProgressiveEncoding := True;
- image.SaveToFile('wut.jpeg', writer);
- image.Free;
- writer.Free;
-end;
-
-procedure TTestAggActionHandler.DrawStuff(agg: Agg2D_ptr);
-var
- i: Integer;
- x, y, px, py, d: Double;
-begin
- agg^.clearAll(0, 0, 0);
- agg^.lineColor(0, 0, 0, 255);
- agg^.lineWidth(3);
- agg^.rectangle(0, 0, ImageWidth, ImageHeight);
- agg^.font(FontFilePath, 16);
- d := ImageWidth / LineCount;
- agg^.lineColor(0, 0, 0, 100);
- for i := 1 to LineCount - 1 do
- begin
- x := i * d;
- agg^.line(x, 0, x, ImageHeight );
- end;
- for i := 1 to trunc(ImageHeight / d) - 1 do
- begin
- y := i * d;
- agg^.line(0, y, ImageWidth, y);
- end;
- x := 0;
- y := ImageHeight / 2;
- px := x;
- py := y;
- agg^.lineColor(255, 0, 0, 200);
- agg^.fillColor(0, 0, 0, 200);
- for i := 0 to LineCount - 1 do
- begin
- x := x + d;
- y := y + Random(Round(ImageHeight / 3)) - ImageHeight / 6;
- if y < 0 then
- y := ImageHeight / 6;
- if y >= ImageHeight then
- y := ImageHeight - ImageHeight / 6;
- agg^.line(px, py, x, y);
- agg^.text(x, y, char_ptr(IntToStr(i) + ' bla'));
- px := x;
- py := y;
- end;
-end;
-
-procedure TTestAggActionHandler.DrawText(aImage: TFPMemoryImage);
-var
- canvas: TFPImageCanvas;
- font: TFreeTypeFont;
-begin
- font := TFreeTypeFont.create;
- canvas := TFPImageCanvas.create(aImage);
-end;
-
-end.
\ No newline at end of file +unit GTIWebServerTestAggActionHandlerUnit; + +interface + +uses + sysutils, + zstream, + ftfont, + agg_2D, + FPimage, + FPImgCanv, + FPWritePNG, + FPWriteJPEG, + agg_basics; + +type + + { TTestAggActionHandler } + + TTestAggActionHandler = class + public + const ImageWidth = 800; + const ImageHeight = 480; + const RGBA_Width = 4; + const LineCount = 30; + const FontFilePath = '/usr/share/fonts/TTF/DejaVuSans.ttf'; + procedure HandlePlug; + procedure DrawStuff(agg: agg2D_ptr); + procedure DrawText(aImage: TFPMemoryImage); + end; + +implementation + +{ TTestAggActionHandler } + +procedure TTestAggActionHandler.HandlePlug; +var + agg: agg2D_ptr; + buf: array of int8; + image: TFPMemoryImage; + writer: TFPWriterJPEG; + x, y: integer; + c: TFPColor; + function getBufItemAsWord(aDelta: byte): word; + var + actualY: integer; + begin + actualY := ImageHeight - y - 1; + result := + word(buf[x * RGBA_Width + actualY * ImageWidth * RGBA_Width + aDelta] shl 8) + or word(128); + end; +begin + setLength(buf, ImageWidth * ImageHeight * RGBA_Width); + New(agg, Construct); + agg^.attach(@(buf[0]), ImageWidth, ImageHeight, ImageWidth * RGBA_Width); + DrawStuff(agg); + Dispose(agg, Destruct); // not necessary to keep it after rendering is finished + image := TFPMemoryImage.create(ImageWidth, ImageHeight); + for x := 0 to ImageWidth - 1 do + for y := 0 to ImageHeight - 1 do + begin + c.red := getBufItemAsWord(2); + c.green := getBufItemAsWord(1); + c.blue := getBufItemAsWord(0); + c.alpha := getBufItemAsWord(3); + image.Colors[x, y] := c; + end; + { + writer := TFPWriterPNG.create; + writer.CompressionLevel := clmax; + writer.WordSized := false; // reduce size + } + writer := TFPWriterJPEG.create; + writer.CompressionQuality := $FF div 3; // bad quality plz + writer.ProgressiveEncoding := true; + image.SaveToFile('wut.jpeg', writer); + image.free; + writer.free; +end; + +procedure TTestAggActionHandler.DrawStuff(agg: agg2D_ptr); +var + i: integer; + x, y, px, py, d: double; +begin + agg^.clearAll(0, 0, 0); + agg^.lineColor(0, 0, 0, 255); + agg^.lineWidth(3); + agg^.rectangle(0, 0, ImageWidth, ImageHeight); + agg^.font(FontFilePath, 16); + d := ImageWidth / LineCount; + agg^.lineColor(0, 0, 0, 100); + for i := 1 to LineCount - 1 do + begin + x := i * d; + agg^.line(x, 0, x, ImageHeight ); + end; + for i := 1 to trunc(ImageHeight / d) - 1 do + begin + y := i * d; + agg^.line(0, y, ImageWidth, y); + end; + x := 0; + y := ImageHeight / 2; + px := x; + py := y; + agg^.lineColor(255, 0, 0, 200); + agg^.fillColor(0, 0, 0, 200); + for i := 0 to LineCount - 1 do + begin + x := x + d; + y := y + Random(round(ImageHeight / 3)) - ImageHeight / 6; + if y < 0 then + y := ImageHeight / 6; + if y >= ImageHeight then + y := ImageHeight - ImageHeight / 6; + agg^.line(px, py, x, y); + agg^.text(x, y, char_ptr(intToStr(i) + ' bla')); + px := x; + py := y; + end; +end; + +procedure TTestAggActionHandler.DrawText(aImage: TFPMemoryImage); +var + canvas: TFPImageCanvas; + font: TFreeTypeFont; +begin + font := TFreeTypeFont.create; + canvas := TFPImageCanvas.create(aImage); +end; + +end. @@ -8,37 +8,37 @@ uses {$IFDEF UNIX}{$IFDEF UseCThreads} cthreads, {$ENDIF}{$ENDIF} - Classes, + classes, { you can add units after this } sysutils, epostunit, mystringlistunit, lowlevelunit; var - maxthreads,i,j,k: longint; - inf,bekannteBefehle: tMyStringlist; + maxThreads,i,j,k: longint; + inf,bekannteBefehle: tMyStringList; s: string; b,syntaxtest,parallelLesen: boolean; wertes: tWerteArray; - Konturen: tKonturenArray; + konturen: tKonturenArray; Warnstufe: tWarnstufe; -procedure werte_aufraeumen; +procedure werteAufraeumen; var i: integer; begin for i:=0 to length(wertes)-1 do if assigned(wertes[i]) then wertes[i].free; - setlength(wertes,0); - for i:=0 to length(Konturen)-1 do - if assigned(Konturen[i]) then - Konturen[i].free; - setlength(Konturen,0); + setLength(wertes,0); + for i:=0 to length(konturen)-1 do + if assigned(konturen[i]) then + konturen[i].free; + setLength(konturen,0); end; procedure aufraeumen; begin - warte_auf_externeBefehle; - werte_aufraeumen; + warteAufExterneBefehle; + werteAufraeumen; inf.free; end; @@ -51,13 +51,13 @@ begin gibAus('oder: '+paramstr(0)+' input.epost -L',3); halt(1); end; - maxthreads:=1; + maxThreads:=1; Warnstufe:=wsStreng; parallelLesen:=false; - setlength(wertes,0); - setlength(Konturen,0); + setLength(wertes,0); + setLength(konturen,0); behalteLogs:=(paramcount=2) and (paramstr(2)='-L'); - inf:=tMyStringlist.create(nil,''); + inf:=tMyStringList.create(nil,''); inf.nichtInSubRoutine('^lösche Werte '); // Zeilen, die hierauf passen, werden nicht an subRoutinen-Aufrufe inf.nichtInSubRoutine('^lösche Kontur '); // von metaReadln gegeben, sondern nach hinten ans Hauptprogramm verschoben inf.loadFromFile(paramstr(1)); @@ -121,18 +121,18 @@ begin end; if istDasBefehl('warte auf externe Befehle',s,bekannteBefehle,false) then begin if not syntaxtest then begin - warte_auf_externeBefehle; + warteAufExterneBefehle; for i:=0 to length(wertes)-1 do wertes[i].warteAufBeendigungDesLeseThreads; end; continue; end; if istDasBefehl('exprtofloat-Test:',s,bekannteBefehle,true) then begin - gibAus('exprtofloat-Test: '+s+'='+floattostr(wertes[length(wertes)-1].exprtofloat(syntaxtest,s)),3); + gibAus('exprtofloat-Test: '+s+'='+floatToStr(wertes[length(wertes)-1].exprToFloat(syntaxtest,s)),3); continue; end; if istDasBefehl('dupliziere',s,bekannteBefehle,true) then begin - i:=findeWerte(erstesArgument(s),nil,@wertes,@Konturen,false); + i:=findeWerte(erstesArgument(s),nil,@wertes,@konturen,false); if i<0 then begin aufraeumen; halt(1); @@ -142,7 +142,7 @@ begin aufraeumen; halt(1); end; - j:=findeWerte(s,inf,@wertes,@Konturen,true); + j:=findeWerte(s,inf,@wertes,@konturen,true); if j<0 then begin aufraeumen; halt(1); @@ -151,19 +151,19 @@ begin continue; end; if istDasBefehl('erzeuge Dummy-Werte',s,bekannteBefehle,true) then begin - i:=findeWerte(s,inf,@wertes,@Konturen,true); + i:=findeWerte(s,inf,@wertes,@konturen,true); if i<0 then begin aufraeumen; halt(1); end; wertes[i].free; - wertes[i]:=tWerte.create(@Konturen,@wertes); + wertes[i]:=tWerte.create(@konturen,@wertes); wertes[i].bezeichner:=s; continue; end; if istDasBefehl('Daten einlesen',s,bekannteBefehle,true) then begin b:=not startetMit('(ohne Ausgaben)',s); - i:=findeWerte(s,inf,@wertes,@Konturen,true); + i:=findeWerte(s,inf,@wertes,@konturen,true); if i<0 then begin aufraeumen; halt(1); @@ -175,25 +175,25 @@ begin halt(1); end; if istDasBefehl('Ascii laden',s,bekannteBefehle,true) then begin - i:=findeWerte(erstesArgument(s),inf,@wertes,@Konturen,true); + i:=findeWerte(erstesArgument(s),inf,@wertes,@konturen,true); if wertes[i].ladeAscii(syntaxtest,s) then continue; aufraeumen; halt(1); end; if istDasBefehl('Linearkombination',s,bekannteBefehle,true) then begin - i:=findeWerte(s,inf,@wertes,@Konturen,true); + i:=findeWerte(s,inf,@wertes,@konturen,true); if i<0 then begin aufraeumen; halt(1); end; - if wertes[i].berechneLiKo(syntaxtest,inf,maxthreads) then + if wertes[i].berechneLiKo(syntaxtest,inf,maxThreads) then continue; aufraeumen; halt(1); end; if istDasBefehl('Agglomeration',s,bekannteBefehle,true) then begin - i:=findeWerte(s,inf,@wertes,@Konturen,true); + i:=findeWerte(s,inf,@wertes,@konturen,true); if i<0 then begin aufraeumen; halt(1); @@ -204,7 +204,7 @@ begin halt(1); end; if istDasBefehl('teile',s,bekannteBefehle,true) then begin - i:=findeWerte(erstesArgument(s),nil,@wertes,@Konturen,false); + i:=findeWerte(erstesArgument(s),nil,@wertes,@konturen,false); if i<0 then begin aufraeumen; halt(1); @@ -214,7 +214,7 @@ begin aufraeumen; halt(1); end; - j:=findeWerte(erstesArgument(s),nil,@wertes,@Konturen,false); + j:=findeWerte(erstesArgument(s),nil,@wertes,@konturen,false); if j<0 then begin aufraeumen; halt(1); @@ -224,18 +224,18 @@ begin aufraeumen; halt(1); end; - k:=findeWerte(s,inf,@wertes,@Konturen,true); + k:=findeWerte(s,inf,@wertes,@konturen,true); if k<0 then begin aufraeumen; halt(1); end; - if wertes[k].berechneQuotient(syntaxtest,inf,maxthreads,i,j) then + if wertes[k].berechneQuotient(syntaxtest,inf,maxThreads,i,j) then continue; aufraeumen; halt(1); end; if istDasBefehl('multipliziere',s,bekannteBefehle,true) then begin - i:=findeWerte(erstesArgument(s),nil,@wertes,@Konturen,false); + i:=findeWerte(erstesArgument(s),nil,@wertes,@konturen,false); if i<0 then begin aufraeumen; halt(1); @@ -245,7 +245,7 @@ begin aufraeumen; halt(1); end; - j:=findeWerte(erstesArgument(s),nil,@wertes,@Konturen,false); + j:=findeWerte(erstesArgument(s),nil,@wertes,@konturen,false); if j<0 then begin aufraeumen; halt(1); @@ -255,51 +255,51 @@ begin aufraeumen; halt(1); end; - k:=findeWerte(s,inf,@wertes,@Konturen,true); + k:=findeWerte(s,inf,@wertes,@konturen,true); if k<0 then begin aufraeumen; halt(1); end; - if wertes[k].berechneProdukt(syntaxtest,inf,maxthreads,i,j) then + if wertes[k].berechneProdukt(syntaxtest,inf,maxThreads,i,j) then continue; aufraeumen; halt(1); end; if istDasBefehl('FFT2d',s,bekannteBefehle,true) then begin - i:=findeWerte(s,inf,@wertes,@Konturen,true); + i:=findeWerte(s,inf,@wertes,@konturen,true); if i<0 then begin aufraeumen; halt(1); end; - if wertes[i].berechneFFT2d(syntaxtest,inf,maxthreads,Warnstufe) then + if wertes[i].berechneFFT2d(syntaxtest,inf,maxThreads,Warnstufe) then continue; aufraeumen; halt(1); end; if istDasBefehl('FFT',s,bekannteBefehle,true) then begin - i:=findeWerte(s,inf,@wertes,@Konturen,false); + i:=findeWerte(s,inf,@wertes,@konturen,false); if i<0 then begin aufraeumen; halt(1); end; - if wertes[i].berechneFFT(syntaxtest,inf,maxthreads,Warnstufe) then + if wertes[i].berechneFFT(syntaxtest,inf,maxThreads,Warnstufe) then continue; aufraeumen; halt(1); end; if istDasBefehl('fitte Gauße an',s,bekannteBefehle,true) then begin - i:=findeWerte(s,nil,@wertes,@Konturen,false); + i:=findeWerte(s,nil,@wertes,@konturen,false); if i<0 then begin aufraeumen; halt(1); end; - if wertes[i].fitteGausze(syntaxtest,inf,maxthreads) then + if wertes[i].fitteGausze(syntaxtest,inf,maxThreads) then continue; aufraeumen; halt(1); end; if istDasBefehl('Zeitfrequenzanalyse',s,bekannteBefehle,true) then begin - j:=findeWerte(erstesArgument(s),nil,@wertes,@Konturen,false); + j:=findeWerte(erstesArgument(s),nil,@wertes,@konturen,false); if j<0 then begin aufraeumen; halt(1); @@ -309,18 +309,18 @@ begin aufraeumen; halt(1); end; - i:=findeWerte(s,inf,@wertes,@Konturen,true); + i:=findeWerte(s,inf,@wertes,@konturen,true); if i<0 then begin aufraeumen; halt(1); end; - if wertes[i].berechneZeitfrequenzanalyse(syntaxtest,inf,maxthreads,wertes[j],Warnstufe) then + if wertes[i].berechneZeitfrequenzanalyse(syntaxtest,inf,maxThreads,wertes[j],Warnstufe) then continue; aufraeumen; halt(1); end; if istDasBefehl('Verzerrung',s,bekannteBefehle,true) then begin - j:=findeWerte(erstesArgument(s),nil,@wertes,@Konturen,false); + j:=findeWerte(erstesArgument(s),nil,@wertes,@konturen,false); if j<0 then begin aufraeumen; halt(1); @@ -330,18 +330,18 @@ begin aufraeumen; halt(1); end; - i:=findeWerte(s,inf,@wertes,@Konturen,true); + i:=findeWerte(s,inf,@wertes,@konturen,true); if i<0 then begin aufraeumen; halt(1); end; - if wertes[i].berechneVerzerrung(syntaxtest,inf,maxthreads,wertes[j],Warnstufe) then + if wertes[i].berechneVerzerrung(syntaxtest,inf,maxThreads,wertes[j],Warnstufe) then continue; aufraeumen; halt(1); end; if istDasBefehl('lambda',s,bekannteBefehle,true) then begin - j:=findeWerte(erstesArgument(s),nil,@wertes,@Konturen,false); + j:=findeWerte(erstesArgument(s),nil,@wertes,@konturen,false); if j<0 then begin aufraeumen; halt(1); @@ -351,40 +351,51 @@ begin aufraeumen; halt(1); end; - i:=findeWerte(s,inf,@wertes,@Konturen,true); + i:=findeWerte(s,inf,@wertes,@konturen,true); if i<0 then begin aufraeumen; halt(1); end; - if wertes[i].berechneLambdaZuOmegaVerzerrung(syntaxtest,inf,maxthreads,wertes[j]) then + if wertes[i].berechneLambdaZuOmegaVerzerrung(syntaxtest,inf,maxThreads,wertes[j]) then continue; aufraeumen; halt(1); end; if istDasBefehl('entferne Artefakte in',s,bekannteBefehle,true) then begin - i:=findeWerte(s,nil,@wertes,@Konturen,false); + i:=findeWerte(s,nil,@wertes,@konturen,false); if i<0 then begin aufraeumen; halt(1); end; - if wertes[i].entferneArtefakte(syntaxtest,inf,maxthreads) then + if wertes[i].entferneArtefakte(syntaxtest,inf,maxThreads) then continue; aufraeumen; halt(1); end; if istDasBefehl('extrahiere Einhüllende von',s,bekannteBefehle,true) then begin - i:=findeWerte(s,nil,@wertes,@Konturen,false); + i:=findeWerte(s,nil,@wertes,@konturen,false); if i<0 then begin aufraeumen; halt(1); end; - if wertes[i].extrahiereEinhuellende(syntaxtest,inf,maxthreads,Warnstufe) then + if wertes[i].extrahiereEinhuellende(syntaxtest,inf,maxThreads,Warnstufe) then + continue; + aufraeumen; + halt(1); + end; + if istDasBefehl('extrahiere Phase von',s,bekannteBefehle,true) then begin + i:=findeWerte(s,nil,@wertes,@konturen,false); + if i<0 then begin + aufraeumen; + halt(1); + end; + if wertes[i].extrahierePhase(syntaxtest,inf,maxThreads,Warnstufe) then continue; aufraeumen; halt(1); end; if istDasBefehl('integriere',s,bekannteBefehle,true) then begin - j:=findeWerte(erstesArgument(s),nil,@wertes,@Konturen,false); + j:=findeWerte(erstesArgument(s),nil,@wertes,@konturen,false); if j<0 then begin aufraeumen; halt(1); @@ -394,18 +405,18 @@ begin aufraeumen; halt(1); end; - i:=findeWerte(s,inf,@wertes,@Konturen,true); + i:=findeWerte(s,inf,@wertes,@konturen,true); if i<0 then begin aufraeumen; halt(1); end; - if wertes[i].berechneIntegral(syntaxtest,inf,maxthreads,wertes[j]) then + if wertes[i].berechneIntegral(syntaxtest,inf,maxThreads,wertes[j]) then continue; aufraeumen; halt(1); end; if istDasBefehl('korreliere',s,bekannteBefehle,true) then begin - j:=findeWerte(erstesArgument(s),nil,@wertes,@Konturen,false); + j:=findeWerte(erstesArgument(s),nil,@wertes,@konturen,false); if j<0 then begin aufraeumen; halt(1); @@ -415,12 +426,12 @@ begin aufraeumen; halt(1); end; - i:=findeWerte(s,inf,@wertes,@Konturen,true); + i:=findeWerte(s,inf,@wertes,@konturen,true); if i<0 then begin aufraeumen; halt(1); end; - if wertes[i].berechneKorrelation(syntaxtest,inf,maxthreads,wertes[j]) then + if wertes[i].berechneKorrelation(syntaxtest,inf,maxThreads,wertes[j]) then continue; aufraeumen; halt(1); @@ -431,7 +442,7 @@ begin end; if istDasBefehl('maximale und minimale Dichten bestimmen',s,bekannteBefehle,true) then begin b:=startetMit('(symmetrisch) ',s); - i:=findeWerte(s,nil,@wertes,@Konturen,false); + i:=findeWerte(s,nil,@wertes,@konturen,false); if i<0 then begin aufraeumen; halt(1); @@ -441,7 +452,7 @@ begin end; if istDasBefehl('maximale und minimale Dichten angleichen',s,bekannteBefehle,true) then begin b:=startetMit('(symmetrisch) ',s); - i:=findeWerte(s,nil,@wertes,@Konturen,false); + i:=findeWerte(s,nil,@wertes,@konturen,false); if i<0 then begin aufraeumen; halt(1); @@ -450,19 +461,19 @@ begin continue; end; if istDasBefehl('lineares Bild',s,bekannteBefehle,true) then begin - i:=findeWerte(s,nil,@wertes,@Konturen,false); + i:=findeWerte(s,nil,@wertes,@konturen,false); if i<0 then begin aufraeumen; halt(1); end; - if not wertes[i].erzeugeLinearesBild(syntaxtest,inf,maxthreads) then begin + if not wertes[i].erzeugeLinearesBild(syntaxtest,inf,maxThreads) then begin aufraeumen; halt(1); end; continue; end; if istDasBefehl('Ascii',s,bekannteBefehle,true) then begin - i:=findeWerte(s,nil,@wertes,@Konturen,false); + i:=findeWerte(s,nil,@wertes,@konturen,false); if i<0 then begin aufraeumen; halt(1); @@ -474,7 +485,7 @@ begin continue; end; if istDasBefehl('Lineout',s,bekannteBefehle,true) then begin - i:=findeWerte(erstesArgument(s),nil,@wertes,@Konturen,false); + i:=findeWerte(erstesArgument(s),nil,@wertes,@konturen,false); if (i<0) or not wertes[i].erzeugeLineout(syntaxtest,s) then begin aufraeumen; halt(1); @@ -482,7 +493,7 @@ begin continue; end; if istDasBefehl('Binning',s,bekannteBefehle,true) then begin - i:=findeWerte(erstesArgument(s),nil,@wertes,@Konturen,false); + i:=findeWerte(erstesArgument(s),nil,@wertes,@konturen,false); if (i<0) or not wertes[i].erzeugeBinning(syntaxtest,s) then begin aufraeumen; halt(1); @@ -491,7 +502,7 @@ begin end; if istDasBefehl('lösche Werte',s,bekannteBefehle,true) then begin while s<>'' do begin - j:=findeWerte(erstesArgument(s),nil,@wertes,@Konturen,false); + j:=findeWerte(erstesArgument(s),nil,@wertes,@konturen,false); if j<0 then begin aufraeumen; halt(1); @@ -499,13 +510,13 @@ begin wertes[j].free; for i:=j+1 to length(wertes)-1 do wertes[i-1]:=wertes[i]; - setlength(wertes,length(wertes)-1); + setLength(wertes,length(wertes)-1); end; continue; end; if istDasBefehl('lösche Kontur',s,bekannteBefehle,true) then begin while s<>'' do begin - j:=findeKontur(erstesArgument(s),nil,@Wertes,@Konturen,false); + j:=findeKontur(erstesArgument(s),nil,@wertes,@konturen,false); if j<0 then begin aufraeumen; halt(1); @@ -513,7 +524,7 @@ begin konturen[j].free; for i:=j+1 to length(konturen)-1 do konturen[i-1]:=konturen[i]; - setlength(konturen,length(konturen)-1); + setLength(konturen,length(konturen)-1); end; continue; end; @@ -523,8 +534,8 @@ begin halt(1); end; if istDasBefehl('Kontur',s,bekannteBefehle,true) then begin - i:=findeKontur(s,inf,@Wertes,@Konturen,true); - if (i>=0) and Konturen[i].Init(syntaxtest,inf,@wertes,maxthreads) then continue; + i:=findeKontur(s,inf,@wertes,@konturen,true); + if (i>=0) and konturen[i].init(syntaxtest,inf,@wertes,maxThreads) then continue; aufraeumen; halt(1); end; @@ -535,7 +546,7 @@ begin aufraeumen; halt(1); until false; - werte_aufraeumen; + werteAufraeumen; end; aufraeumen; if not behalteLogs then cleanupLogs; @@ -3,13 +3,12 @@ <ProjectSession> <Version Value="10"/> <BuildModes Active="Default"/> - <Units Count="24"> + <Units Count="26"> <Unit0> <Filename Value="epost.lpr"/> <IsPartOfProject Value="True"/> - <TopLine Value="206"/> - <CursorPos X="35" Y="134"/> - <FoldState Value=" T0iWg4A123111221]6515]6[A431313[A821[Y4121[85]i5"/> + <TopLine Value="41"/> + <CursorPos X="86" Y="131"/> <UsageCount Value="202"/> <Loaded Value="True"/> </Unit0> @@ -23,11 +22,9 @@ <Unit2> <Filename Value="epostunit.pas"/> <IsPartOfProject Value="True"/> - <IsVisibleTab Value="True"/> <EditorIndex Value="1"/> - <TopLine Value="3832"/> - <CursorPos X="54" Y="3846"/> - <FoldState Value=" T0\Zm$0C191g"/> + <TopLine Value="7019"/> + <CursorPos X="92" Y="7031"/> <UsageCount Value="201"/> <Loaded Value="True"/> </Unit2> @@ -41,43 +38,45 @@ <Unit4> <Filename Value="werteunit.pas"/> <IsPartOfProject Value="True"/> - <EditorIndex Value="4"/> - <TopLine Value="1855"/> - <CursorPos X="87" Y="1872"/> - <FoldState Value=" T0wEkl051X111B"/> + <EditorIndex Value="6"/> + <TopLine Value="634"/> + <CursorPos X="16" Y="652"/> <UsageCount Value="200"/> <Loaded Value="True"/> </Unit4> <Unit5> <Filename Value="typenunit.pas"/> <IsPartOfProject Value="True"/> - <EditorIndex Value="6"/> - <TopLine Value="1855"/> - <CursorPos Y="1872"/> + <EditorIndex Value="8"/> + <TopLine Value="1271"/> + <CursorPos X="35" Y="1284"/> <UsageCount Value="200"/> <Loaded Value="True"/> </Unit5> <Unit6> <Filename Value="../units/fftunit.pas"/> <IsPartOfProject Value="True"/> - <EditorIndex Value="-1"/> - <CursorPos X="3" Y="15"/> - <UsageCount Value="159"/> + <EditorIndex Value="2"/> + <TopLine Value="55"/> + <CursorPos X="126" Y="71"/> + <UsageCount Value="174"/> + <Loaded Value="True"/> </Unit6> <Unit7> <Filename Value="../units/fftunit.inc"/> <IsPartOfProject Value="True"/> - <EditorIndex Value="-1"/> - <TopLine Value="10"/> - <CursorPos X="22" Y="10"/> - <UsageCount Value="156"/> + <EditorIndex Value="3"/> + <TopLine Value="133"/> + <CursorPos X="99" Y="152"/> + <UsageCount Value="171"/> + <Loaded Value="True"/> </Unit7> <Unit8> <Filename Value="gauszFit.inc"/> <IsPartOfProject Value="True"/> - <EditorIndex Value="5"/> + <EditorIndex Value="7"/> <CursorPos X="35" Y="10"/> - <UsageCount Value="62"/> + <UsageCount Value="77"/> <Loaded Value="True"/> </Unit8> <Unit9> @@ -85,34 +84,35 @@ <EditorIndex Value="-1"/> <TopLine Value="1612"/> <CursorPos X="2" Y="1675"/> - <UsageCount Value="10"/> + <UsageCount Value="8"/> </Unit9> <Unit10> <Filename Value="../units/mystringlistunit.pas"/> <EditorIndex Value="-1"/> <TopLine Value="638"/> <CursorPos X="58" Y="660"/> - <UsageCount Value="12"/> + <UsageCount Value="10"/> </Unit10> <Unit11> <Filename Value="../units/lowlevelunit.pas"/> - <EditorIndex Value="3"/> - <TopLine Value="61"/> - <CursorPos Y="79"/> - <UsageCount Value="60"/> + <IsVisibleTab Value="True"/> + <EditorIndex Value="5"/> + <TopLine Value="380"/> + <CursorPos X="70" Y="403"/> + <UsageCount Value="68"/> <Loaded Value="True"/> </Unit11> <Unit12> <Filename Value="../units/randomunit.pas"/> <EditorIndex Value="-1"/> - <UsageCount Value="10"/> + <UsageCount Value="8"/> </Unit12> <Unit13> <Filename Value="../units/matheunit.pas"/> - <EditorIndex Value="2"/> + <EditorIndex Value="4"/> <TopLine Value="517"/> <CursorPos X="21" Y="393"/> - <UsageCount Value="34"/> + <UsageCount Value="42"/> <Loaded Value="True"/> </Unit13> <Unit14> @@ -120,48 +120,48 @@ <EditorIndex Value="-1"/> <TopLine Value="186"/> <CursorPos Y="161"/> - <UsageCount Value="12"/> + <UsageCount Value="10"/> </Unit14> <Unit15> <Filename Value="/usr/lib/fpc/src/rtl/inc/objpash.inc"/> <EditorIndex Value="-1"/> <TopLine Value="182"/> <CursorPos X="21" Y="202"/> - <UsageCount Value="3"/> + <UsageCount Value="1"/> </Unit15> <Unit16> <Filename Value="/usr/lib/fpc/src/rtl/unix/bunxovlh.inc"/> <EditorIndex Value="-1"/> <TopLine Value="61"/> <CursorPos X="10" Y="99"/> - <UsageCount Value="1"/> + <UsageCount Value="9"/> </Unit16> <Unit17> <Filename Value="/usr/lib/fpc/src/rtl/unix/baseunix.pp"/> <UnitName Value="BaseUnix"/> <EditorIndex Value="-1"/> <TopLine Value="61"/> - <UsageCount Value="1"/> + <UsageCount Value="9"/> </Unit17> <Unit18> <Filename Value="/usr/lib/fpc/src/rtl/unix/bunxovl.inc"/> <EditorIndex Value="-1"/> <TopLine Value="414"/> <CursorPos X="20" Y="434"/> - <UsageCount Value="1"/> + <UsageCount Value="9"/> </Unit18> <Unit19> <Filename Value="/usr/lib/fpc/src/rtl/linux/bunxsysc.inc"/> <EditorIndex Value="-1"/> <TopLine Value="16"/> - <UsageCount Value="1"/> + <UsageCount Value="9"/> </Unit19> <Unit20> <Filename Value="/usr/lib/fpc/src/rtl/unix/bunxh.inc"/> <EditorIndex Value="-1"/> <TopLine Value="74"/> <CursorPos X="15" Y="102"/> - <UsageCount Value="1"/> + <UsageCount Value="9"/> </Unit20> <Unit21> <Filename Value="/usr/lib/fpc/src/packages/fcl-image/src/fpimage.pp"/> @@ -169,142 +169,156 @@ <EditorIndex Value="-1"/> <TopLine Value="10"/> <CursorPos X="3" Y="30"/> - <UsageCount Value="1"/> + <UsageCount Value="9"/> </Unit21> <Unit22> <Filename Value="../fpGUI/src/corelib/render/software/agg_basics.pas"/> <EditorIndex Value="-1"/> <TopLine Value="327"/> <CursorPos X="12" Y="347"/> - <UsageCount Value="4"/> + <UsageCount Value="2"/> </Unit22> <Unit23> <Filename Value="/usr/lib/fpc/src/rtl/objpas/classes/classesh.inc"/> <EditorIndex Value="-1"/> <TopLine Value="673"/> <CursorPos X="42" Y="705"/> - <UsageCount Value="4"/> + <UsageCount Value="2"/> </Unit23> + <Unit24> + <Filename Value="/usr/lib/fpc/src/rtl/objpas/math.pp"/> + <EditorIndex Value="-1"/> + <TopLine Value="166"/> + <CursorPos X="10" Y="183"/> + <UsageCount Value="10"/> + </Unit24> + <Unit25> + <Filename Value="GTIWebServerTestAggActionHandlerUnit.pas"/> + <EditorIndex Value="-1"/> + <TopLine Value="53"/> + <CursorPos X="49" Y="82"/> + <UsageCount Value="10"/> + </Unit25> </Units> <JumpHistory Count="30" HistoryIndex="29"> <Position1> - <Filename Value="epostunit.pas"/> - <Caret Line="4038" Column="58" TopLine="4022"/> + <Filename Value="werteunit.pas"/> + <Caret Line="374" Column="18" TopLine="345"/> </Position1> <Position2> - <Filename Value="epostunit.pas"/> - <Caret Line="3524" Column="68" TopLine="3504"/> + <Filename Value="werteunit.pas"/> + <Caret Line="379" Column="17" TopLine="350"/> </Position2> <Position3> - <Filename Value="epostunit.pas"/> - <Caret Line="3624" Column="53" TopLine="3602"/> + <Filename Value="werteunit.pas"/> + <Caret Line="382" Column="12" TopLine="353"/> </Position3> <Position4> - <Filename Value="epostunit.pas"/> - <Caret Line="3453" Column="67" TopLine="3437"/> + <Filename Value="werteunit.pas"/> + <Caret Line="393" Column="12" TopLine="364"/> </Position4> <Position5> - <Filename Value="epostunit.pas"/> - <Caret Line="3719" Column="28" TopLine="3703"/> + <Filename Value="werteunit.pas"/> + <Caret Line="399" Column="31" TopLine="370"/> </Position5> <Position6> - <Filename Value="epostunit.pas"/> + <Filename Value="werteunit.pas"/> + <Caret Line="405" Column="16" TopLine="376"/> </Position6> <Position7> - <Filename Value="epostunit.pas"/> - <Caret Line="923" Column="27" TopLine="895"/> + <Filename Value="werteunit.pas"/> + <Caret Line="406" Column="18" TopLine="377"/> </Position7> <Position8> - <Filename Value="epostunit.pas"/> - <Caret Line="2018" Column="27" TopLine="1993"/> + <Filename Value="werteunit.pas"/> + <Caret Line="411" Column="17" TopLine="382"/> </Position8> <Position9> - <Filename Value="epostunit.pas"/> - <Caret Line="2082" Column="27" TopLine="2146"/> + <Filename Value="werteunit.pas"/> + <Caret Line="414" Column="12" TopLine="385"/> </Position9> <Position10> - <Filename Value="epostunit.pas"/> - <Caret Line="2236" Column="27" TopLine="2249"/> + <Filename Value="werteunit.pas"/> + <Caret Line="425" Column="12" TopLine="396"/> </Position10> <Position11> - <Filename Value="epostunit.pas"/> - <Caret Line="2405" Column="27" TopLine="2376"/> + <Filename Value="werteunit.pas"/> + <Caret Line="431" Column="31" TopLine="402"/> </Position11> <Position12> - <Filename Value="epostunit.pas"/> - <Caret Line="2506" TopLine="2475"/> + <Filename Value="werteunit.pas"/> + <Caret Line="437" Column="16" TopLine="408"/> </Position12> <Position13> - <Filename Value="epostunit.pas"/> - <Caret Line="2600" Column="40" TopLine="2598"/> + <Filename Value="werteunit.pas"/> + <Caret Line="438" Column="18" TopLine="409"/> </Position13> <Position14> - <Filename Value="epostunit.pas"/> - <Caret Line="2616" Column="55" TopLine="2599"/> + <Filename Value="werteunit.pas"/> + <Caret Line="443" Column="17" TopLine="414"/> </Position14> <Position15> - <Filename Value="epostunit.pas"/> - <Caret Line="2617" Column="101" TopLine="2603"/> + <Filename Value="werteunit.pas"/> + <Caret Line="446" Column="12" TopLine="417"/> </Position15> <Position16> - <Filename Value="epostunit.pas"/> - <Caret Line="4097" Column="77" TopLine="4075"/> + <Filename Value="werteunit.pas"/> + <Caret Line="497" Column="12" TopLine="469"/> </Position16> <Position17> - <Filename Value="typenunit.pas"/> - <Caret Line="2482" Column="28" TopLine="2489"/> + <Filename Value="werteunit.pas"/> + <Caret Line="500" Column="16" TopLine="472"/> </Position17> <Position18> - <Filename Value="typenunit.pas"/> - <Caret Line="2635" Column="41" TopLine="2616"/> + <Filename Value="werteunit.pas"/> + <Caret Line="501" Column="18" TopLine="473"/> </Position18> <Position19> - <Filename Value="typenunit.pas"/> - <Caret Line="1673" Column="9" TopLine="1655"/> + <Filename Value="werteunit.pas"/> + <Caret Line="502" Column="28" TopLine="474"/> </Position19> <Position20> - <Filename Value="typenunit.pas"/> - <Caret Line="2635" TopLine="2617"/> + <Filename Value="werteunit.pas"/> + <Caret Line="504" Column="14" TopLine="476"/> </Position20> <Position21> - <Filename Value="typenunit.pas"/> - <Caret Line="2636" Column="15" TopLine="2617"/> + <Filename Value="werteunit.pas"/> + <Caret Line="505" Column="16" TopLine="477"/> </Position21> <Position22> - <Filename Value="typenunit.pas"/> - <Caret Line="2658" Column="35" TopLine="2630"/> + <Filename Value="werteunit.pas"/> + <Caret Line="557" Column="12" TopLine="529"/> </Position22> <Position23> - <Filename Value="typenunit.pas"/> - <Caret Line="2659" Column="9" TopLine="2631"/> + <Filename Value="werteunit.pas"/> + <Caret Line="1078" Column="74" TopLine="1050"/> </Position23> <Position24> - <Filename Value="typenunit.pas"/> - <Caret Line="2667" Column="35" TopLine="2639"/> + <Filename Value="werteunit.pas"/> </Position24> <Position25> - <Filename Value="typenunit.pas"/> - <Caret Line="2668" Column="9" TopLine="2640"/> + <Filename Value="epostunit.pas"/> + <Caret Line="5678" Column="108" TopLine="5666"/> </Position25> <Position26> - <Filename Value="typenunit.pas"/> - <Caret Line="2677" Column="9" TopLine="2649"/> + <Filename Value="werteunit.pas"/> + <Caret Line="1026" Column="67" TopLine="1020"/> </Position26> <Position27> <Filename Value="typenunit.pas"/> - <Caret Line="2638" Column="83" TopLine="2620"/> + <Caret Line="2475" Column="86" TopLine="2463"/> </Position27> <Position28> - <Filename Value="werteunit.pas"/> - <Caret Line="53" TopLine="53"/> + <Filename Value="../units/lowlevelunit.pas"/> + <Caret Line="41" Column="44" TopLine="24"/> </Position28> <Position29> <Filename Value="epostunit.pas"/> - <Caret Line="2680" TopLine="2663"/> + <Caret Line="9" Column="62"/> </Position29> <Position30> - <Filename Value="epostunit.pas"/> - <Caret Line="3773" TopLine="3746"/> + <Filename Value="../units/lowlevelunit.pas"/> + <Caret Line="388" Column="58" TopLine="380"/> </Position30> </JumpHistory> </ProjectSession> diff --git a/epostunit.pas b/epostunit.pas index bec70d4..5c62226 100644 --- a/epostunit.pas +++ b/epostunit.pas @@ -5,10 +5,10 @@ unit epostunit; interface uses - Classes, SysUtils, mystringlistunit, werteunit, typenunit, process, lowlevelunit, matheunit, fftunit; + classes, sysutils, mystringlistunit, werteunit, typenunit, process, lowlevelunit, matheunit, fftunit; type - TBmpHeader = packed record + tBmpHeader = packed record bfType1 : byte; bfType2 : byte; bfSize : longint; @@ -48,9 +48,9 @@ type tDatenVorfahr = class(tObject) bezeichner: string; - Konturen: pTKonturenArray; + konturen: pTKonturenArray; wertes: pTWerteArray; - constructor create(Kont: pTKonturenArray; wert: pTWerteArray); + constructor create(kont: pTKonturenArray; wert: pTWerteArray); function callBackGetValue(s: string): extended; end; @@ -60,20 +60,20 @@ type function rxmax: extended; function rtmin: extended; function rtmax: extended; - function sortiere_nach_y(mt: longint): boolean; overload; - function sortiere_nach_y(mt,von,bis: longint): boolean; overload; - function exprtofloat(st: boolean; s: string; kvs: tKnownValues): extended; + function sortiereNachY(mT: longint): boolean; overload; + function sortiereNachY(mT,von,bis: longint): boolean; overload; + function exprToFloat(sT: boolean; s: string; kvs: tKnownValues): extended; public orte: tExtPointArray; - function init(st: boolean; f: tMyStringlist; w: pTWerteArray; mt: longint): boolean; - function liesVonDatei(st: boolean; s: string; xmi,xma,tmi,tma: extended): boolean; - function erzeugeAusWerten(st: boolean; s: string; w: pTWerteArray; mt: longint; _xmin,_xmax,_tmin,_tmax: string): boolean; - function erzeugeAusFunktion(st: boolean; s: string; xmi,xma,tmi,tma,dx,dt: extended; mt: longint): boolean; - property xmin: extended read rxmin; - property xmax: extended read rxmax; - property tmin: extended read rtmin; - property tmax: extended read rtmax; - constructor create(Kont: pTKonturenArray; wert: pTWerteArray); + function init(sT: boolean; f: tMyStringList; w: pTWerteArray; mT: longint): boolean; + function liesVonDatei(sT: boolean; s: string; xMi,xMa,tMi,tMa: extended): boolean; + function erzeugeAusWerten(sT: boolean; s: string; w: pTWerteArray; mT: longint; _xmin,_xmax,_tmin,_tmax: string): boolean; + function erzeugeAusFunktion(sT: boolean; s: string; xMi,xMa,tMi,tMa,dx,dt: extended; mT: longint): boolean; + property xMin: extended read rxmin; + property xMax: extended read rxmax; + property tMin: extended read rtmin; + property tMax: extended read rtmax; + constructor create(kont: pTKonturenArray; wert: pTWerteArray); destructor destroy; override; end; tLeseThread = class; @@ -85,34 +85,34 @@ type private leseThread: tLeseThread; function findeAlleDateien(nam: string; var dat: tGenerischeInputDateiInfoArray; Vorlage: tGenerischeInputDateiInfo): boolean; - function ermittleExterneInputParameter(f: tMyStringlist; out dateien: tGenerischeInputDateiInfoArray): boolean; + function ermittleExterneInputParameter(f: tMyStringList; out dateien: tGenerischeInputDateiInfoArray): boolean; function ermittleInterneInputParameter(var dateien: tGenerischeInputDateiInfoArray): boolean; - procedure initVerzerrung(quelle: tWerte; xMin,xMax,tMin,tMax,x0Abs,t0Abs,mt: longint; oberst: boolean; epsilon: extended; verzerrung: tTransformation; verzerrAnzahl: longint; ZPs: tIntPointArray; ZGs: tExtPointArray; ZAs: tExtendedArray; Warn: tWarnstufe); + procedure initVerzerrung(quelle: tWerte; xMin,xMax,tMin,tMax,x0Abs,t0Abs,mT: longint; oberst: boolean; epsilon: extended; verzerrung: tTransformation; verzerrAnzahl: longint; zPs: tIntPointArray; zGs: tExtPointArray; zAs: tExtendedArray; Warn: tWarnstufe); function rTransformationen: tTransformation; procedure wTransformationen(tr: tTransformation); - function rXsteps: longint; - procedure wXsteps(xs: longint); - function rTsiz: longint; - procedure wTsiz(ts: longint); - function rXstart: extended; - procedure wXstart(xs: extended); - function rXstop: extended; - procedure wXstop(xs: extended); - function rTstart: extended; - procedure wTstart(ts: extended); - function rTstop: extended; - procedure wTstop(ts: extended); + function rXSteps: longint; + procedure wXSteps(xS: longint); + function rTSiz: longint; + procedure wTSiz(tS: longint); + function rXStart: extended; + procedure wXStart(xS: extended); + function rXStop: extended; + procedure wXStop(xS: extended); + function rTStart: extended; + procedure wTStart(tS: extended); + function rTStop: extended; + procedure wTStop(tS: extended); function rNp: extended; procedure wNp(np: extended); function rBeta: extended; procedure wBeta(beta: extended); - function rMinw: extended; - procedure wMinw(miw: extended); - function rMaxw: extended; - procedure wMaxw(maw: extended); - function xscale: extended; - function tscale: extended; - function dichtenParameterErkannt(st: boolean; s: string; var bekannteBefehle: tMyStringList; threads,xmin,xmax,tmin,tmax: longint): boolean; + function rMinW: extended; + procedure wMinW(miW: extended); + function rMaxW: extended; + procedure wMaxW(maW: extended); + function xScale: extended; + function tScale: extended; + function dichtenParameterErkannt(sT: boolean; s: string; var bekannteBefehle: tMyStringList; threads,xMin,xMax,tMin,tMax: longint): boolean; function kont2disk(senkrecht: boolean; x: extended): longint; overload; inline; function kont2disk(dir: char; x: extended): longint; overload; function kont2diskFak(senkrecht: boolean; x: extended): extended; overload; inline; @@ -121,70 +121,72 @@ type function disk2kontFak(senkrecht: boolean; x: longint): extended; overload; inline; function disk2kontFak(dir: char; x: longint): extended; overload; procedure schreibeWertIntegriert(var f: textfile; i: longint; hor: boolean); + procedure holeRAM(ausgaben: byte); inline; public eWerte: tLLWerteExtended; dWerte: tLLWerteDouble; sWerte: tLLWerteSingle; - Genauigkeit: tGenauigkeit; - constructor create(Kont: pTKonturenArray; wert: pTWerteArray); overload; - constructor create(original: tWerte; xmin,xmax: longint); overload; + genauigkeit: tGenauigkeit; + constructor create(kont: pTKonturenArray; wert: pTWerteArray); overload; + constructor create(original: tWerte; xMin,xMax: longint); overload; destructor destroy; override; procedure warteAufBeendigungDesLeseThreads; - procedure kopiereVon(st: boolean; original: tWerte); overload; - procedure kopiereVon(st: boolean; original: tWerte; xmin,xmax: longint); overload; - function ladeDateien(st: boolean; f: tMyStringlist; pl,sa: boolean): boolean; - function ladeAscii(st: boolean; datei: string): boolean; - function berechneLiKo(st: boolean; f: tMyStringlist; threads: longint): boolean; - function berechneAgglomeration(st: boolean; var f: tMyStringlist): boolean; - function berechneQuotient(st: boolean; f: tMyStringlist; threads, dividend, divisor: longint): boolean; - function berechneProdukt(st: boolean; f: tMyStringlist; threads, faktor1, faktor2: longint): boolean; - function berechneKorrelation(st: boolean; f: tMyStringlist; threads: longint; quelle: tWerte): boolean; - procedure ermittleMinMaxDichten(st: boolean; threads: longint; symmetrisch: boolean); overload; - procedure ermittleMinMaxDichten(st: boolean; threads,xmin,xmax,tmin,tmax: longint; symmetrisch: boolean); overload; - procedure gleicheMinMaxDichtenAn(st: boolean; f: tMyStringlist; symmetrisch: boolean); + procedure kopiereVon(sT: boolean; original: tWerte); overload; + procedure kopiereVon(sT: boolean; original: tWerte; xMin,xMax: longint); overload; + function ladeDateien(sT: boolean; f: tMyStringList; pl,sA: boolean): boolean; + function ladeAscii(sT: boolean; datei: string): boolean; + function berechneLiKo(sT: boolean; f: tMyStringList; threads: longint): boolean; + function berechneAgglomeration(sT: boolean; var f: tMyStringList): boolean; + function berechneQuotient(sT: boolean; f: tMyStringList; threads, dividend, divisor: longint): boolean; + function berechneProdukt(sT: boolean; f: tMyStringList; threads, faktor1, faktor2: longint): boolean; + function berechneKorrelation(sT: boolean; f: tMyStringList; threads: longint; quelle: tWerte): boolean; + procedure ermittleMinMaxDichten(sT: boolean; threads: longint; symmetrisch: boolean); overload; + procedure ermittleMinMaxDichten(sT: boolean; threads,xMin,xMax,tMin,tMax: longint; symmetrisch: boolean); overload; + procedure gleicheMinMaxDichtenAn(sT: boolean; f: tMyStringList; symmetrisch: boolean); function fft(threads: longint; senkrecht,invers: boolean; const vor,nach: tFFTDatenordnung; fen: tFenster; hg: extended; out pvFehler: extended; Warn: tWarnstufe): boolean; overload; - procedure initFuerGauszFit(st: boolean; daten: tWerte; senkrecht: boolean; adLaenge: longint; adStart,adStop: extended); - function fitteGausze(st: boolean; f: tMyStringlist; threads: longint): boolean; - function berechneZeitfrequenzanalyse(st: boolean; f: tMyStringlist; threads: longint; quelle: tWerte; Warn: tWarnstufe): boolean; - function berechneVerzerrung(st: boolean; f: tMyStringlist; threads: longint; quelle: tWerte; Warn: tWarnstufe): boolean; - function berechneLambdaZuOmegaVerzerrung(st: boolean; f: tMyStringList; threads: longint; quelle: tWerte): boolean; - function entferneArtefakte(st: boolean; f: tMyStringlist; threads: longint): boolean; - function extrahiereEinhuellende(st: boolean; f: tMyStringlist; threads: longint; Warn: tWarnstufe): boolean; - function berechneIntegral(st: boolean; f: tMyStringlist; threads: longint; quelle: tWerte): boolean; - function berechneFFT(st: boolean; f: tMyStringlist; threads: longint; Warn: tWarnstufe): boolean; - function berechneFFT2d(st: boolean; f: tMyStringlist; threads: longint; Warn: tWarnstufe): boolean; - function erzeugeLinearesBild(st: boolean; var f: tMyStringlist; maxThreads: longint): boolean; - function erzeugeAscii(st: boolean; f: tMyStringlist): boolean; - function erzeugeLineout(st: boolean; params: string): boolean; - function erzeugeBinning(st: boolean; params: string): boolean; + procedure initFuerGauszFit(sT: boolean; daten: tWerte; senkrecht: boolean; adLaenge: longint; adStart,adStop: extended); + function fitteGausze(sT: boolean; f: tMyStringList; threads: longint): boolean; + function berechneZeitfrequenzanalyse(sT: boolean; f: tMyStringList; threads: longint; quelle: tWerte; Warn: tWarnstufe): boolean; + function berechneVerzerrung(sT: boolean; f: tMyStringList; threads: longint; quelle: tWerte; Warn: tWarnstufe): boolean; + function berechneLambdaZuOmegaVerzerrung(sT: boolean; f: tMyStringList; threads: longint; quelle: tWerte): boolean; + function entferneArtefakte(sT: boolean; f: tMyStringList; threads: longint): boolean; + function extrahiereEinhuellende(sT: boolean; f: tMyStringList; threads: longint; Warn: tWarnstufe): boolean; + function extrahierePhase(sT: boolean; f: tMyStringList; threads: longint; Warn: tWarnstufe): boolean; + function berechneIntegral(sT: boolean; f: tMyStringList; threads: longint; quelle: tWerte): boolean; + function berechneFFT(sT: boolean; f: tMyStringList; threads: longint; Warn: tWarnstufe): boolean; + function berechneFFT2d(sT: boolean; f: tMyStringList; threads: longint; Warn: tWarnstufe): boolean; + function erzeugeLinearesBild(sT: boolean; var f: tMyStringList; maxThreads: longint): boolean; + function erzeugeAscii(sT: boolean; f: tMyStringList): boolean; + function erzeugeLineout(sT: boolean; params: string): boolean; + function erzeugeBinning(sT: boolean; params: string): boolean; procedure spiegle(threads: longint); overload; - procedure spiegle(threads,tmin,tmax: longint); overload; - procedure fft2dNachbearbeitung(threads: longint; nb: tFFTDatenordnung); + procedure spiegle(threads,tMin,tMax: longint); overload; + procedure fft2dNachbearbeitung(threads: longint; nB: tFFTDatenordnung); procedure schreibeWert(var f: textfile; x,y: longint); - function exprtofloat(st: boolean; s: string): extended; - function paramsdump: string; + function exprToFloat(sT: boolean; s: string): extended; + function paramsDump: string; procedure beendeLeseThreadWennFertig; - property Transformationen: tTransformation read rTransformationen write wTransformationen; - property _xsteps: longint read rXsteps write wXsteps; - property _tsiz: longint read rTsiz write wTsiz; -// property _xstart: extended read rXstart write wXstart; -// property _xstop: extended read rXstop write wXstop; -// property _tstart: extended read rTstart write wTstart; -// property _tstop: extended read rTstop write wTstop; + property transformationen: tTransformation read rTransformationen write wTransformationen; + property _xSteps: longint read rXSteps write wXSteps; + property _tSiz: longint read rTSiz write wTSiz; +// property _xStart: extended read rXStart write wXStart; +// property _xStop: extended read rXStop write wXStop; +// property _tStart: extended read rTStart write wTStart; +// property _tStop: extended read rTStop write wTStop; property _np: extended read rNp write wNp; property _beta: extended read rBeta write wBeta; - property _minw: extended read rMinw write wMinw; - property _maxw: extended read rMaxw write wMaxw; + property _minW: extended read rMinW write wMinW; + property _maxW: extended read rMaxW write wMaxW; end; tAchse = record - Lage: TLage; - Striche: Longint; - Faktor: extended; + lage: tLage; + striche: longint; + faktor: extended; end; - tBeschriftungsschritt = record + tBeschriftungsSchritt = record bis,faktor: extended; - schritte: longint; - linear: boolean; + schritte: longint; + linear: boolean; end; tZuZeichnendeKontur = class farbe: tRGB; @@ -229,42 +231,42 @@ type constructor create(faktor1, faktor2, produkt: tWerte; xMin,xMax,tMin,tMax,xOff,tOff: longint); procedure stExecute; override; end; - tBilderthread = class(tLogThread) - nummer,mt,breite,wbreite,hoehe, - whoehe,gesbreite,lof,oof,rof,uof: longint; + tBilderThread = class(tLogThread) + nummer,mT,breite,wBreite,hoehe, + wHoehe,gesBreite,lOf,oOf,rOf,uOf: longint; ws: tWerteArray; - xmi,xma,tmi,tma,xpmi,xpma: Longint; - xz,yz: extended; + xMi,xMa,tMi,tMa,xPMi,xPMa: longint; + xZ,yZ: extended; nbs: tTransformationArray; - farben: trgbArray; + farben: tRGBArray; wertes: array of tExtendedArray; anzahlens: array of tLongintArray; pals: tRGBArrayArray; rahmen: boolean; beschr: pTBeschriftungen; - constructor create(i,maxthreads,ibreite,ihoehe,lo,oo,ro,uo: longint; const wes: tWerteArray; xmin,xmax,tmin,tmax: Longint; xzoom,yzoom: extended; Nachbearbeitungen: tTransformationArray; paletten: pTPalettenArray; beschri: pTBeschriftungen; rm: boolean); + constructor create(i,maxThreads,iBreite,iHoehe,lO,oO,rO,uO: longint; const wes: tWerteArray; xMin,xMax,tMin,tMax: longint; xZoom,yZoom: extended; nachbearbeitungen: tTransformationArray; paletten: pTPalettenArray; beschri: pTBeschriftungen; rm: boolean); destructor destroy; override; procedure stExecute; override; procedure initAnzahlensFuerKontur; end; tDichteThread = class(tLogThread) maxDichte,minDichte: extended; - xmin,xmax,tmin,tmax: longint; + xMin,xMax,tMin,tMax: longint; w: tWerte; - constructor create(xmi,xma,tmi,tma: longint; const werte: tWerte); + constructor create(xMi,xMa,tMi,tMa: longint; const werte: tWerte); procedure stExecute; override; end; tSpiegelThread = class(tLogThread) - tmin,tmax: longint; + tMin,tMax: longint; pW: tWerte; - constructor create(tmi,tma: longint; pWerte: tWerte); + constructor create(tMi,tMa: longint; pWerte: tWerte); procedure stExecute; override; end; tFFT2dNBThread = class(tLogThread) - xmin,xmax: longint; + xMin,xMax: longint; pW: tWerte; - nb: tFFTDatenordnung; - constructor create(xmi,xma: longint; pWerte: tWerte; endordnung: tFFTDatenordnung); + nB: tFFTDatenordnung; + constructor create(xMi,xMa: longint; pWerte: tWerte; endordnung: tFFTDatenordnung); procedure stExecute; override; end; tFFTThread = class(tLogThread) @@ -300,29 +302,29 @@ type tKonturAusWertenThread = class(tLogThread) w: tWerte; s: extended; - xmi,xma,tmi,tma: longint; + xMi,xMa,tMi,tMa: longint; punkte: tExtPointArray; - constructor create(werte: tWerte; schwelle: extended; xmin, xmax, tmin, tmax: longint); + constructor create(werte: tWerte; schwelle: extended; xMin, xMax, tMin, tMax: longint); destructor destroy; override; procedure stExecute; override; end; tIntegralThread = class(tLogThread) qu,zi: tWerte; - xmi,xma,tmi,tma,xof,tof: longint; + xMi,xMa,tMi,tMa,xOf,tOf: longint; rtg: tIntegrationsRichtung; - constructor create(quelle, ziel: tWerte; xmin, xmax, tmin, tmax, xoff, toff: longint; richtung: tIntegrationsRichtung); + constructor create(quelle, ziel: tWerte; xMin, xMax, tMin, tMax, xOff, tOff: longint; richtung: tIntegrationsRichtung); procedure stExecute; override; end; tSortiereNachYThread = class(tLogThread) - Kont: tKontur; - vo,bi,mt: longint; - constructor create(K: tKontur; threads,von,bis: longint); + kont: tKontur; + vo,bi,mT: longint; + constructor create(k: tKontur; threads,von,bis: longint); procedure stExecute; override; end; tBefehlThread = class(tLogThread) bg: boolean; p: tProcess; - constructor create(st: boolean; cmd: string; out erzeugungsErfolg: boolean); + constructor create(sT: boolean; cmd: string; out erzeugungsErfolg: boolean); destructor destroy; override; procedure stExecute; override; end; @@ -335,26 +337,26 @@ type end; tVerzerrInitThread = class(tLogThread) qu,zi: tWerte; - ZPs: tIntPointArray; - ZGs: tExtPointArray; - ZAs: tExtendedArray; - xMi,xMa,tMi,tMa,x0,t0,mt,va: longint; // bzgl. Ziel + zPs: tIntPointArray; + zGs: tExtPointArray; + zAs: tExtendedArray; + xMi,xMa,tMi,tMa,x0,t0,mT,vA: longint; // bzgl. Ziel eps: extended; verz: tTransformation; Warnstufe: tWarnstufe; - constructor create(quelle,ziel: tWerte; xMin,xMax,tMin,tMax,x0Abs,t0Abs,threads: longint; epsilon: extended; verzerrung: tTransformation; verzerrAnz: longint; zielpositionen: tIntPointArray; zielgewichte: tExtPointArray; Warn: tWarnstufe); + constructor create(quelle,ziel: tWerte; xMin,xMax,tMin,tMax,x0Abs,t0Abs,threads: longint; epsilon: extended; verzerrung: tTransformation; verzerrAnz: longint; zielPositionen: tIntPointArray; zielGewichte: tExtPointArray; Warn: tWarnstufe); destructor destroy; override; procedure stExecute; override; end; tVerzerrThread = class(tLogThread) qu,zi: tWerte; - ZPs: tIntPointArray; - ZGs: tExtPointArray; - ZAs: tExtendedArray; + zPs: tIntPointArray; + zGs: tExtPointArray; + zAs: tExtendedArray; xMi,xMa,tMi,tMa: longint; // bzgl. Ziel - vb,nb: tTransformation; - va,na: longint; - constructor create(quelle,ziel: tWerte; xMin,xMax,tMin,tMax: longint; zielpositionen: tIntPointArray; zielgewichte: tExtPointArray; zielanzahlen: tExtendedArray; Vorbearbeitungen,Nachbearbeitungen: tTransformation; vorAnz,nachAnz: longint); + vB,nB: tTransformation; + vA,nA: longint; + constructor create(quelle,ziel: tWerte; xMin,xMax,tMin,tMax: longint; zielPositionen: tIntPointArray; zielGewichte: tExtPointArray; zielAnzahlen: tExtendedArray; vorbearbeitungen,nachbearbeitungen: tTransformation; vorAnz,nachAnz: longint); procedure stExecute; override; end; tVerzerrLOThread = class(tLogThread) @@ -370,24 +372,23 @@ type xFen,tFen: tFenster; hg: extended; xMi,xMa,tMi,tMa: longint; - constructor create(werte: tWerte; xMin,xMax,tMin,tMax: longint; x_Fenster,t_Fenster: tFenster; hintergrund: extended); + constructor create(werte: tWerte; xMin,xMax,tMin,tMax: longint; fensterX,fensterT: tFenster; hintergrund: extended); procedure stExecute; override; end; -function neuePalette(f: tMyStringlist): boolean; +function neuePalette(f: tMyStringList): boolean; function initBmpHeader(w,h: longint): tBmpHeader; procedure schreibeBmpHeader(var f: file; w,h: longint); -function findePalette(out Palette: pTPalette; name: string): boolean; -function erzeugeLegende(st: boolean; f: tMyStringlist; datei: string; Qu: tWerte; minDichte,maxDichte: extended; nb: tTransformation; pal: pTPalette): boolean; -function strToFftDo(out fftDo: tFFTDatenordnung; s: string): boolean; -function findeWerte(s: String; f: tMyStringlist; pws: pTWerteArray; Kont: pTKonturenArray; darfErstellen: boolean): integer; -function findeKontur(s: String; f: tMyStringlist; pws: pTWerteArray; pks: pTKonturenArray; darfErstellen: boolean): integer; -function externerBefehl(st: boolean; s: string): boolean; -procedure warte_auf_externeBefehle; +function findePalette(out palette: pTPalette; name: string): boolean; +function erzeugeLegende(sT: boolean; f: tMyStringList; datei: string; qu: tWerte; minDichte,maxDichte: extended; nB: tTransformation; pal: pTPalette): boolean; +function findeWerte(s: string; f: tMyStringList; pws: pTWerteArray; kont: pTKonturenArray; darfErstellen: boolean): integer; +function findeKontur(s: string; f: tMyStringList; pws: pTWerteArray; pks: pTKonturenArray; darfErstellen: boolean): integer; +function externerBefehl(sT: boolean; s: string): boolean; +procedure warteAufExterneBefehle; procedure beendeExterneBefehleWennFertig; var - Paletten: array of tPalette; + paletten: array of tPalette; behalteLogs: boolean; externeBefehle: array of tBefehlThread; @@ -397,10 +398,10 @@ uses math, systemunit; // tDatenVorfahr *************************************************************** -constructor tDatenVorfahr.create(Kont: pTKonturenArray; wert: pTWerteArray); +constructor tDatenVorfahr.create(kont: pTKonturenArray; wert: pTWerteArray); begin inherited create; - Konturen:=Kont; + konturen:=kont; wertes:=wert; bezeichner:=''; end; @@ -413,56 +414,56 @@ begin if startetMit('Kontur[',s) or startetMit('Konturen[',s) then begin if pos('].',s)=0 then fehler('Syntaxfehler, '']'' fehlt!'); - i:=findeKontur(erstesArgument(s,'].'),nil,Wertes,Konturen,false); + i:=findeKontur(erstesArgument(s,'].'),nil,wertes,konturen,false); if i<0 then fehler('Finde Kontur nicht!'); - if s='xmin' then result:=Konturen^[i].xmin - else if s='xmax' then result:=Konturen^[i].xmax - else if s='tmin' then result:=Konturen^[i].tmin - else if s='tmax' then result:=Konturen^[i].tmax - else if s='Breite' then result:=Konturen^[i].xmax-Konturen^[i].xmin - else if s='Hoehe' then result:=Konturen^[i].tmax-Konturen^[i].tmin + if s='xMin' then result:=konturen^[i].xMin + else if s='xMax' then result:=konturen^[i].xMax + else if s='tMin' then result:=konturen^[i].tMin + else if s='tMax' then result:=konturen^[i].tMax + else if s='Breite' then result:=konturen^[i].xMax-konturen^[i].xMin + else if s='Hoehe' then result:=konturen^[i].tMax-konturen^[i].tMin else fehler('Kenne Bezeichner '''+s+''' nicht als Eigenschaft einer Kontur!'#10 + 'Ich kenne:'#10 + - '''xmin'''#10 + - '''xmax'''#10 + - '''tmin'''#10 + - '''tmax'''#10 + + '''xMin'''#10 + + '''xMax'''#10 + + '''tMin'''#10 + + '''tMax'''#10 + '''Breite'''#10 + '''Hoehe''' ); exit; end; - if startetMit('Wert[',s) or startetMit('Werte[',s) or startetMit('Wertes[',s) then begin + if startetMit('Wert[',s) or startetMit('Werte[',s) or startetMit('wertes[',s) then begin if pos('].',s)=0 then fehler('Syntaxfehler, '']'' fehlt!'); - i:=findeWerte(erstesArgument(s,'].'),nil,wertes,Konturen,false); + i:=findeWerte(erstesArgument(s,'].'),nil,wertes,konturen,false); if i<0 then fehler('Finde Werte nicht!'); - if (s='xmin') or (s='xstart') then result:=wertes^[i].Transformationen.xstart - else if (s='xmax') or (s='xstop') then result:=wertes^[i].Transformationen.xstop - else if (s='tmin') or (s='tstart') then result:=wertes^[i].Transformationen.tstart - else if (s='tmax') or (s='tstop') then result:=wertes^[i].Transformationen.tstop - else if (s='wmin') or (s='minw') then result:=wertes^[i]._minw - else if (s='wmax') or (s='maxw') then result:=wertes^[i]._maxw + if (s='xMin') or (s='xStart') then result:=wertes^[i].transformationen.xStart + else if (s='xMax') or (s='xStop') then result:=wertes^[i].transformationen.xStop + else if (s='tMin') or (s='tStart') then result:=wertes^[i].transformationen.tStart + else if (s='tMax') or (s='tStop') then result:=wertes^[i].transformationen.tStop + else if (s='wMin') or (s='minW') then result:=wertes^[i]._minW + else if (s='wMax') or (s='maxW') then result:=wertes^[i]._maxW else if s='np' then result:=wertes^[i]._np else if (s='beta') or (s='β') then result:=wertes^[i]._beta - else if s='Breite' then result:=wertes^[i].Transformationen.xstart-wertes^[i].Transformationen.xstop - else if s='Hoehe' then result:=wertes^[i].Transformationen.tstart-wertes^[i].Transformationen.tstop + else if s='Breite' then result:=wertes^[i].transformationen.xStart-wertes^[i].transformationen.xStop + else if s='Hoehe' then result:=wertes^[i].transformationen.tStart-wertes^[i].transformationen.tStop else fehler('Kenne Bezeichner '''+s+''' nicht als Eigenschaft von Werten!'#10 + 'Ich kenne:'#10 + - '''xmin'''#10 + - '''xstart'''#10 + - '''xmax'''#10 + - '''xstop'''#10 + - '''tmin'''#10 + - '''tstart'''#10 + - '''tmax'''#10 + - '''tstop'''#10 + - '''wmin'''#10 + - '''minw'''#10 + - '''wmax'''#10 + - '''maxw'''#10 + + '''xMin'''#10 + + '''xStart'''#10 + + '''xMax'''#10 + + '''xStop'''#10 + + '''tMin'''#10 + + '''tStart'''#10 + + '''tMax'''#10 + + '''tStop'''#10 + + '''wMin'''#10 + + '''minW'''#10 + + '''wMax'''#10 + + '''maxW'''#10 + '''np'''#10 + '''beta'''#10 + '''β'''#10 + @@ -476,48 +477,48 @@ end; // tWerte ********************************************************************** -constructor tWerte.create(Kont: pTKonturenArray; wert: pTWerteArray); +constructor tWerte.create(kont: pTKonturenArray; wert: pTWerteArray); var - ps: tExtrainfos; + ps: tExtraInfos; begin - inherited create(Kont,wert); - ps:=tExtrainfos.create; - Genauigkeit:=gSingle; + inherited create(kont,wert); + ps:=tExtraInfos.create; + genauigkeit:=gSingle; leseThread:=nil; sWerte:=tLLWerteSingle.create(ps); dWerte:=tLLWerteDouble.create(ps); eWerte:=tLLWerteExtended.create(ps); end; -constructor tWerte.create(original: tWerte; xmin,xmax: longint); +constructor tWerte.create(original: tWerte; xMin,xMax: longint); var - ps: tExtrainfos; + ps: tExtraInfos; begin - inherited create(original.Konturen,original.wertes); + inherited create(original.konturen,original.wertes); original.warteAufBeendigungDesLeseThreads; - ps:=tExtrainfos.create; + ps:=tExtraInfos.create; leseThread:=nil; - Genauigkeit:=original.Genauigkeit; - case Genauigkeit of + genauigkeit:=original.genauigkeit; + case genauigkeit of gSingle: begin - sWerte:=tLLWerteSingle.create(pTLLWerteSingle(@original.sWerte),ps,xmin,xmax); + sWerte:=tLLWerteSingle.create(pTLLWerteSingle(@original.sWerte),ps,xMin,xMax); dWerte:=tLLWerteDouble.create(ps); eWerte:=tLLWerteExtended.create(ps); end; gDouble: begin sWerte:=tLLWerteSingle.create(ps); - dWerte:=tLLWerteDouble.create(pTLLWerteDouble(@original.dWerte),ps,xmin,xmax); + dWerte:=tLLWerteDouble.create(pTLLWerteDouble(@original.dWerte),ps,xMin,xMax); eWerte:=tLLWerteExtended.create(ps); end; gExtended: begin sWerte:=tLLWerteSingle.create(ps); dWerte:=tLLWerteDouble.create(ps); - eWerte:=tLLWerteExtended.create(pTLLWerteExtended(@original.eWerte),ps,xmin,xmax); + eWerte:=tLLWerteExtended.create(pTLLWerteExtended(@original.eWerte),ps,xMin,xMax); end; end{of case}; if original.bezeichner='' then bezeichner:='' else bezeichner:=original.bezeichner+''''; - Transformationen:=original.Transformationen; + transformationen:=original.transformationen; end; destructor tWerte.destroy; @@ -550,20 +551,20 @@ begin end; end; -procedure tWerte.kopiereVon(st: boolean; original: tWerte); overload; +procedure tWerte.kopiereVon(sT: boolean; original: tWerte); overload; begin - kopiereVon(st,original,0,original._xsteps-1); + kopiereVon(sT,original,0,original._xSteps-1); end; -procedure tWerte.kopiereVon(st: boolean; original: tWerte; xmin,xmax: longint); overload; +procedure tWerte.kopiereVon(sT: boolean; original: tWerte; xMin,xMax: longint); overload; begin original.warteAufBeendigungDesLeseThreads; - Transformationen:=tIdentitaet.create(original.Transformationen); - Genauigkeit:=original.Genauigkeit; - case Genauigkeit of - gSingle: sWerte.kopiereVon(st,pTLLWerteSingle(@original.sWerte),xmin,xmax); - gDouble: dWerte.kopiereVon(st,pTLLWerteDouble(@original.dWerte),xmin,xmax); - gExtended: eWerte.kopiereVon(st,pTLLWerteExtended(@original.eWerte),xmin,xmax); + transformationen:=tIdentitaet.create(original.transformationen); + genauigkeit:=original.genauigkeit; + case genauigkeit of + gSingle: sWerte.kopiereVon(sT,pTLLWerteSingle(@original.sWerte),xMin,xMax); + gDouble: dWerte.kopiereVon(sT,pTLLWerteDouble(@original.dWerte),xMin,xMax); + gExtended: eWerte.kopiereVon(sT,pTLLWerteExtended(@original.eWerte),xMin,xMax); end{of case}; end; @@ -586,147 +587,147 @@ begin end{of case}; end; -function tWerte.rXsteps: longint; +function tWerte.rXSteps: longint; begin case genauigkeit of - gSingle: result:=sWerte.params.xsteps; - gDouble: result:=dWerte.params.xsteps; - gExtended: result:=eWerte.params.xsteps; + gSingle: result:=sWerte.params.xSteps; + gDouble: result:=dWerte.params.xSteps; + gExtended: result:=eWerte.params.xSteps; end{of case}; end; -procedure tWerte.wXsteps(xs: longint); +procedure tWerte.wXSteps(xS: longint); begin - sWerte.params.xsteps:=xs; + sWerte.params.xSteps:=xS; sWerte.params.refreshKnownValues; - dWerte.params.xsteps:=xs; + dWerte.params.xSteps:=xS; dWerte.params.refreshKnownValues; - eWerte.params.xsteps:=xs; + eWerte.params.xSteps:=xS; eWerte.params.refreshKnownValues; end; -function tWerte.rTsiz: longint; +function tWerte.rTSiz: longint; begin case genauigkeit of - gSingle: result:=sWerte.params.tsiz; - gDouble: result:=dWerte.params.tsiz; - gExtended: result:=eWerte.params.tsiz; + gSingle: result:=sWerte.params.tSiz; + gDouble: result:=dWerte.params.tSiz; + gExtended: result:=eWerte.params.tSiz; end{of case}; end; -procedure tWerte.wTsiz(ts: longint); +procedure tWerte.wTSiz(tS: longint); begin - sWerte.params.tsiz:=ts; + sWerte.params.tSiz:=tS; sWerte.params.refreshKnownValues; - dWerte.params.tsiz:=ts; + dWerte.params.tSiz:=tS; dWerte.params.refreshKnownValues; - eWerte.params.tsiz:=ts; + eWerte.params.tSiz:=tS; eWerte.params.refreshKnownValues; end; -function tWerte.rXstart: extended; +function tWerte.rXStart: extended; begin case genauigkeit of - gSingle: result:=sWerte.params.xstart; - gDouble: result:=dWerte.params.xstart; - gExtended: result:=eWerte.params.xstart; + gSingle: result:=sWerte.params.xStart; + gDouble: result:=dWerte.params.xStart; + gExtended: result:=eWerte.params.xStart; end{of case}; end; -procedure tWerte.wXstart(xs: extended); +procedure tWerte.wXStart(xS: extended); begin case genauigkeit of gSingle: begin - sWerte.params.transformationen.xstart:=xs; + sWerte.params.transformationen.xStart:=xS; sWerte.params.refreshKnownValues; end; gDouble: begin - dWerte.params.transformationen.xstart:=xs; + dWerte.params.transformationen.xStart:=xS; dWerte.params.refreshKnownValues; end; gExtended: begin - eWerte.params.transformationen.xstart:=xs; + eWerte.params.transformationen.xStart:=xS; eWerte.params.refreshKnownValues; end; end{of case}; end; -function tWerte.rXstop: extended; +function tWerte.rXStop: extended; begin case genauigkeit of - gSingle: result:=sWerte.params.xstop; - gDouble: result:=dWerte.params.xstop; - gExtended: result:=eWerte.params.xstop; + gSingle: result:=sWerte.params.xStop; + gDouble: result:=dWerte.params.xStop; + gExtended: result:=eWerte.params.xStop; end{of case}; end; -procedure tWerte.wXstop(xs: extended); +procedure tWerte.wXStop(xS: extended); begin case genauigkeit of gSingle: begin - sWerte.params.transformationen.xstop:=xs; + sWerte.params.transformationen.xStop:=xS; sWerte.params.refreshKnownValues; end; gDouble: begin - dWerte.params.transformationen.xstop:=xs; + dWerte.params.transformationen.xStop:=xS; dWerte.params.refreshKnownValues; end; gExtended: begin - eWerte.params.transformationen.xstop:=xs; + eWerte.params.transformationen.xStop:=xS; eWerte.params.refreshKnownValues; end; end{of case}; end; -function tWerte.rTstart: extended; +function tWerte.rTStart: extended; begin case genauigkeit of - gSingle: result:=sWerte.params.tstart; - gDouble: result:=dWerte.params.tstart; - gExtended: result:=eWerte.params.tstart; + gSingle: result:=sWerte.params.tStart; + gDouble: result:=dWerte.params.tStart; + gExtended: result:=eWerte.params.tStart; end{of case}; end; -procedure tWerte.wTstart(ts: extended); +procedure tWerte.wTStart(tS: extended); begin case genauigkeit of gSingle: begin - sWerte.params.transformationen.tstart:=ts; + sWerte.params.transformationen.tStart:=tS; sWerte.params.refreshKnownValues; end; gDouble: begin - dWerte.params.transformationen.tstart:=ts; + dWerte.params.transformationen.tStart:=tS; dWerte.params.refreshKnownValues; end; gExtended: begin - eWerte.params.transformationen.tstart:=ts; + eWerte.params.transformationen.tStart:=tS; eWerte.params.refreshKnownValues; end; end{of case}; end; -function tWerte.rTstop: extended; +function tWerte.rTStop: extended; begin case genauigkeit of - gSingle: result:=sWerte.params.tstop; - gDouble: result:=dWerte.params.tstop; - gExtended: result:=eWerte.params.tstop; + gSingle: result:=sWerte.params.tStop; + gDouble: result:=dWerte.params.tStop; + gExtended: result:=eWerte.params.tStop; end{of case}; end; -procedure tWerte.wTstop(ts: extended); +procedure tWerte.wTStop(tS: extended); begin case genauigkeit of gSingle: begin - sWerte.params.transformationen.tstop:=ts; + sWerte.params.transformationen.tStop:=tS; sWerte.params.refreshKnownValues; end; gDouble: begin - dWerte.params.transformationen.tstop:=ts; + dWerte.params.transformationen.tStop:=tS; dWerte.params.refreshKnownValues; end; gExtended: begin - eWerte.params.transformationen.tstop:=ts; + eWerte.params.transformationen.tStop:=tS; eWerte.params.refreshKnownValues; end; end{of case}; @@ -786,57 +787,57 @@ begin end{of case}; end; -function tWerte.rMinw: extended; +function tWerte.rMinW: extended; begin case genauigkeit of - gSingle: result:=sWerte.params.minw; - gDouble: result:=dWerte.params.minw; - gExtended: result:=eWerte.params.minw; + gSingle: result:=sWerte.params.minW; + gDouble: result:=dWerte.params.minW; + gExtended: result:=eWerte.params.minW; end{of case}; end; -procedure tWerte.wMinw(miw: extended); +procedure tWerte.wMinW(miW: extended); begin - Transformationen.wmin:=miw; + transformationen.wMin:=miW; case genauigkeit of gSingle: begin - sWerte.params.minw:=miw; + sWerte.params.minW:=miW; sWerte.params.refreshKnownValues; end; gDouble: begin - dWerte.params.minw:=miw; + dWerte.params.minW:=miW; dWerte.params.refreshKnownValues; end; gExtended: begin - eWerte.params.minw:=miw; + eWerte.params.minW:=miW; eWerte.params.refreshKnownValues; end; end{of case}; end; -function tWerte.rMaxw: extended; +function tWerte.rMaxW: extended; begin case genauigkeit of - gSingle: result:=sWerte.params.maxw; - gDouble: result:=dWerte.params.maxw; - gExtended: result:=eWerte.params.maxw; + gSingle: result:=sWerte.params.maxW; + gDouble: result:=dWerte.params.maxW; + gExtended: result:=eWerte.params.maxW; end{of case}; end; -procedure tWerte.wMaxw(maw: extended); +procedure tWerte.wMaxW(maW: extended); begin - Transformationen.wmax:=maw; + transformationen.wMax:=maW; case genauigkeit of gSingle: begin - sWerte.params.maxw:=maw; + sWerte.params.maxW:=maW; sWerte.params.refreshKnownValues; end; gDouble: begin - dWerte.params.maxw:=maw; + dWerte.params.maxW:=maW; dWerte.params.refreshKnownValues; end; gExtended: begin - eWerte.params.maxw:=maw; + eWerte.params.maxW:=maW; eWerte.params.refreshKnownValues; end; end{of case}; @@ -846,21 +847,21 @@ function tWerte.findeAlleDateien(nam: string; var dat: tGenerischeInputDateiInfo var err: longint; i: longint; - sr: tSearchRec; - sa: tMyStringList; + sR: tSearchRec; + sA: tMyStringList; begin result:=false; - shellExpand(nam,sa); - for i:=0 to sa.count-1 do begin - err:=findfirst(sa[i],$3f,sr); + shellExpand(nam,sA); + for i:=0 to sA.count-1 do begin + err:=findFirst(sA[i],$3f,sR); if err<>0 then begin - findclose(sr); - sa.free; - gibAus('Keine Datei passt zum Muster '''+sa[i]+'''!',3); + findClose(sR); + sA.free; + gibAus('Keine Datei passt zum Muster '''+sA[i]+'''!',3); exit; end; while err=0 do begin - setlength(dat,length(dat)+1); + setLength(dat,length(dat)+1); if Vorlage is tTraceInputDateiInfo then dat[length(dat)-1]:=tTraceInputDateiInfo.create(Vorlage); if Vorlage is tPhaseSpaceInputDateiInfo then @@ -869,53 +870,53 @@ begin dat[length(dat)-1]:=tSpaceTimeInputDateiInfo.create(Vorlage); if Vorlage is tPipeInputDateiInfo then dat[length(dat)-1]:=tPipeInputDateiInfo.create(Vorlage); - dat[length(dat)-1].Name:=extractfilepath(nam)+extractfilename(sr.Name); - err:=findnext(sr); + dat[length(dat)-1].name:=extractfilepath(nam)+extractfilename(sR.name); + err:=findNext(sR); end; - findclose(sr); + findClose(sR); end; - sa.free; + sA.free; result:=true; end; -function tWerte.ermittleExterneInputParameter(f: tMyStringlist; out dateien: tGenerischeInputDateiInfoArray): boolean; +function tWerte.ermittleExterneInputParameter(f: tMyStringList; out dateien: tGenerischeInputDateiInfoArray): boolean; // Parameter ermitteln, die in der Config-Datei stehen var s: string; ne,be,maxAmp: extended; - Vorlagen: tInputDateiInfoVorlagen; + vorlagen: tInputDateiInfoVorlagen; g: textfile; - erfolg: Word; - i: Longint; + erfolg: word; + i: longint; mitGewalt: boolean; bekannteBefehle: tMyStringList; procedure aufraeumen; var ii: longint; begin - if assigned(Vorlagen) then Vorlagen.free; + if assigned(vorlagen) then vorlagen.free; for ii:=0 to length(dateien)-1 do if assigned(dateien[ii]) then dateien[ii].free; - setlength(dateien,0); + setLength(dateien,0); bekannteBefehle.free; end; begin result:=false; - setlength(dateien,0); - Vorlagen:=tInputDateiInfoVorlagen.create; - Vorlagen.params:=sWerte.params; + setLength(dateien,0); + vorlagen:=tInputDateiInfoVorlagen.create; + vorlagen.params:=sWerte.params; ne:=0; maxAmp:=0; sWerte.params.beta:=-1; sWerte.params.maxW:=0; sWerte.params.minW:=0; sWerte.params.np:=0; - sWerte.params.transformationen.tstart:=0; - sWerte.params.transformationen.tstop:=0; - sWerte.params.transformationen.xstart:=0; - sWerte.params.transformationen.xstop:=0; + sWerte.params.transformationen.tStart:=0; + sWerte.params.transformationen.tStop:=0; + sWerte.params.transformationen.xStart:=0; + sWerte.params.transformationen.xStop:=0; bekannteBefehle:=tMyStringList.create; mitGewalt:=false; repeat @@ -932,67 +933,67 @@ begin continue; end; if istDasBefehl('Genauigkeit:',s,bekannteBefehle,true) then begin - if not Vorlagen.GenauigkeitFromStr(s) then begin + if not vorlagen.genauigkeitFromStr(s) then begin aufraeumen; exit; end; - if (Genauigkeit < Vorlagen.Genauigkeit) then - Genauigkeit:=Vorlagen.Genauigkeit; + if (genauigkeit < vorlagen.genauigkeit) then + genauigkeit:=vorlagen.genauigkeit; continue; end; if istDasBefehl('Gamma:',s,bekannteBefehle,true) then begin - Vorlagen.Gamma:=exprtofloat(false,s); + vorlagen.gamma:=exprToFloat(false,s); continue; end; - if istDasBefehl('tmin:',s,bekannteBefehle,true) then begin - Vorlagen.tstart:=exprtofloat(false,s); + if istDasBefehl('tMin:',s,bekannteBefehle,true) then begin + vorlagen.tStart:=exprToFloat(false,s); continue; end; - if istDasBefehl('tmax:',s,bekannteBefehle,true) then begin - Vorlagen.tstop:=exprtofloat(false,s); + if istDasBefehl('tMax:',s,bekannteBefehle,true) then begin + vorlagen.tStop:=exprToFloat(false,s); continue; end; - if istDasBefehl('xmin:',s,bekannteBefehle,true) then begin - Vorlagen.xstart:=exprtofloat(false,s); + if istDasBefehl('xMin:',s,bekannteBefehle,true) then begin + vorlagen.xStart:=exprToFloat(false,s); continue; end; - if istDasBefehl('xmax:',s,bekannteBefehle,true) then begin - Vorlagen.xstop:=exprtofloat(false,s); + if istDasBefehl('xMax:',s,bekannteBefehle,true) then begin + vorlagen.xStop:=exprToFloat(false,s); continue; end; if istDasBefehl('Inputparameterdatei:',s,bekannteBefehle,true) then begin if (not mitGewalt) and (not fileexists(extractfilepath(s)+'times-1')) and - ((Vorlagen.Fehlerbehebungskommando='') or - (sysutils.ExecuteProcess(Vorlagen.Fehlerbehebungsprogramm,Vorlagen.Fehlerbehebungsparameter,[])<>0) or + ((vorlagen.fehlerBehebungsKommando='') or + (sysutils.executeProcess(vorlagen.fehlerBehebungsProgramm,vorlagen.fehlerBehebungsParameter,[])<>0) or not fileexists(extractfilepath(s)+'times-1')) then begin gibAus('Die Simulation in '''+extractfilepath(s)+''' ist nicht abgeschlossen!',3); aufraeumen; exit; end; - assignfile(g,s); + assignFile(g,s); reset(g); erfolg:=0; while not eof(g) do begin readln(g,s); s:=erstesArgument(s,'#'); if startetMit('Gamma :',s) then begin - Vorlagen.Gamma:=strtofloat(s); + vorlagen.gamma:=strToFloat(s); erfolg:=erfolg or 1; continue; end; if startetMit('Beta :',s) then begin - be:=strtofloat(s); + be:=strToFloat(s); erfolg:=erfolg or 2; continue; end; if startetMit('n_el_over_nc :',s) then begin - ne:=strtofloat(s); + ne:=strToFloat(s); erfolg:=erfolg or 4; continue; end; if startetMit('.a0 :',s) then begin - if strtofloat(s)>maxAmp then begin - maxAmp:=strtofloat(s); + if strToFloat(s)>maxAmp then begin + maxAmp:=strToFloat(s); erfolg:=erfolg or 8; end; continue; @@ -1002,7 +1003,7 @@ begin continue; end; if odd(erfolg shr 3) and startetMit('.frequency :',s) then begin - Vorlagen.groeszenFaktor:=strtofloat(s); + vorlagen.groeszenFaktor:=strToFloat(s); erfolg:=erfolg and (not 8); continue; end; @@ -1013,15 +1014,15 @@ begin aufraeumen; exit; end; - ne:=sqrt(ne)/Vorlagen.groeszenFaktor; + ne:=sqrt(ne)/vorlagen.groeszenFaktor; if (sWerte.params.np<>0) and (ne<>sWerte.params.np) then begin - gibAus('Die Plasmafrequenzen in den Eingangsdateien unterscheiden sich ('+floattostr(sWerte.params.np)+' vs. '+floattostr(ne)+')!',3); + gibAus('Die Plasmafrequenzen in den Eingangsdateien unterscheiden sich ('+floatToStr(sWerte.params.np)+' vs. '+floatToStr(ne)+')!',3); aufraeumen; exit; end; sWerte.params.np:=ne; if (sWerte.params.beta<>-1) and (be<>sWerte.params.beta) then begin - gibAus('Die Bezugssystemgeschwindigkeiten in den Eingangsdateien unterscheiden sich ('+floattostr(sWerte.params.beta)+' vs. '+floattostr(be)+')!',3); + gibAus('Die Bezugssystemgeschwindigkeiten in den Eingangsdateien unterscheiden sich ('+floatToStr(sWerte.params.beta)+' vs. '+floatToStr(be)+')!',3); aufraeumen; exit; end; @@ -1029,41 +1030,41 @@ begin continue; end; if istDasBefehl('Fehlerbehebungskommando:',s,bekannteBefehle,true) then begin - Vorlagen.Fehlerbehebungskommando:=s; + vorlagen.fehlerBehebungsKommando:=s; continue; end; if istDasBefehl('Spurnummer:',s,bekannteBefehle,true) then begin - Vorlagen.SpurNummer:=strtoint(s); + vorlagen.spurNummer:=strtoint(s); continue; end; if istDasBefehl('Feldnummer:',s,bekannteBefehle,true) then begin - Vorlagen.FeldNummer:=strtoint(s); + vorlagen.feldNummer:=strtoint(s); continue; end; if istDasBefehl('Feld:',s,bekannteBefehle,true) then begin - Vorlagen.FeldNummer:=-1; - for i:=0 to length(FeldgroeszenNamen)-1 do - if uppercase(s)=FeldgroeszenNamen[i] then begin - Vorlagen.FeldNummer:=i; + vorlagen.feldNummer:=-1; + for i:=0 to length(feldGroeszenNamen)-1 do + if uppercase(s)=feldGroeszenNamen[i] then begin + vorlagen.feldNummer:=i; break; end; - if Vorlagen.FeldNummer>=0 then continue; + if vorlagen.feldNummer>=0 then continue; gibAus('Unbekannte Feldgröße '''+s+'''!',3); aufraeumen; exit; end; if istDasBefehl('Analysator:',s,bekannteBefehle,true) then begin - Vorlagen.Analysator:=s; + vorlagen.analysator:=s; continue; end; if istDasBefehl('PhaseSpace-Datei:',s,bekannteBefehle,true) then begin if fileexists(s) then begin - setlength(dateien,length(dateien)+1); - dateien[length(dateien)-1]:=tPhaseSpaceInputDateiInfo.create(Vorlagen.PhaseSpaceVorlage); - dateien[length(dateien)-1].Name:=s; + setLength(dateien,length(dateien)+1); + dateien[length(dateien)-1]:=tPhaseSpaceInputDateiInfo.create(vorlagen.phaseSpaceVorlage); + dateien[length(dateien)-1].name:=s; continue; end; - if not findeAlleDateien(s,dateien,Vorlagen.PhaseSpaceVorlage) then begin + if not findeAlleDateien(s,dateien,vorlagen.phaseSpaceVorlage) then begin aufraeumen; exit; end; @@ -1071,12 +1072,12 @@ begin end; if istDasBefehl('SpaceTime-Datei:',s,bekannteBefehle,true) then begin if fileexists(s) then begin - setlength(dateien,length(dateien)+1); - dateien[length(dateien)-1]:=tSpaceTimeInputDateiInfo.create(Vorlagen.SpaceTimeVorlage); - dateien[length(dateien)-1].Name:=s; + setLength(dateien,length(dateien)+1); + dateien[length(dateien)-1]:=tSpaceTimeInputDateiInfo.create(vorlagen.spaceTimeVorlage); + dateien[length(dateien)-1].name:=s; continue; end; - if not findeAlleDateien(s,dateien,Vorlagen.SpaceTimeVorlage) then begin + if not findeAlleDateien(s,dateien,vorlagen.spaceTimeVorlage) then begin aufraeumen; exit; end; @@ -1084,12 +1085,12 @@ begin end; if istDasBefehl('Trace-Datei:',s,bekannteBefehle,true) then begin if fileexists(s) then begin - setlength(dateien,length(dateien)+1); - dateien[length(dateien)-1]:=tTraceInputDateiInfo.create(Vorlagen.TraceVorlage); - dateien[length(dateien)-1].Name:=s; + setLength(dateien,length(dateien)+1); + dateien[length(dateien)-1]:=tTraceInputDateiInfo.create(vorlagen.traceVorlage); + dateien[length(dateien)-1].name:=s; continue; end; - if not findeAlleDateien(s,dateien,Vorlagen.TraceVorlage) then begin + if not findeAlleDateien(s,dateien,vorlagen.traceVorlage) then begin aufraeumen; exit; end; @@ -1101,25 +1102,25 @@ begin aufraeumen; exit; end; - setlength(dateien,length(dateien)+1); - dateien[length(dateien)-1]:=tSergeyInputDateiInfo.create(Vorlagen.SergeyVorlage); - dateien[length(dateien)-1].Name:=s; + setLength(dateien,length(dateien)+1); + dateien[length(dateien)-1]:=tSergeyInputDateiInfo.create(vorlagen.sergeyVorlage); + dateien[length(dateien)-1].name:=s; continue; end; if istDasBefehl('Pipe:',s,bekannteBefehle,true) then begin - setlength(dateien,length(dateien)+1); - dateien[length(dateien)-1]:=tPipeInputDateiInfo.create(Vorlagen.PipeVorlage); - dateien[length(dateien)-1].Name:=s; + setLength(dateien,length(dateien)+1); + dateien[length(dateien)-1]:=tPipeInputDateiInfo.create(vorlagen.pipeVorlage); + dateien[length(dateien)-1].name:=s; continue; end; if istDasBefehl('Andor-Datei:',s,bekannteBefehle,true) then begin if fileexists(s) then begin - setlength(dateien,length(dateien)+1); - dateien[length(dateien)-1]:=tAndorInputDateiInfo.create(Vorlagen.AndorVorlage); - dateien[length(dateien)-1].Name:=s; + setLength(dateien,length(dateien)+1); + dateien[length(dateien)-1]:=tAndorInputDateiInfo.create(vorlagen.andorVorlage); + dateien[length(dateien)-1].name:=s; continue; end; - if not findeAlleDateien(s,dateien,Vorlagen.AndorVorlage) then begin + if not findeAlleDateien(s,dateien,vorlagen.andorVorlage) then begin aufraeumen; exit; end; @@ -1131,67 +1132,67 @@ begin exit; until false; sWerte.params.refreshKnownValues; - Vorlagen.free; + vorlagen.free; result:=true; end; -function tWerte.ermittleInterneInputParameter(var Dateien: tGenerischeInputDateiInfoArray): boolean; +function tWerte.ermittleInterneInputParameter(var dateien: tGenerischeInputDateiInfoArray): boolean; // Parameter ermitteln, die aus der einzulesenden Datei hervorgehen var - i,j,k,num,tmpi,br,SpAnz: longint; - tmps: single; - tmpd: double; - tmpe: extended; + i,j,k,num,tmpI,br,spAnz: longint; + tmpS: single; + tmpD: double; + tmpE: extended; f: file; tf: textfile; - Positionen,iArr: tLongintArray; - Sortiert: tGenerischeInputDateiInfoArray; - ipp,ipap: tProcess; + positionen,iArr: tLongintArray; + sortiert: tGenerischeInputDateiInfoArray; + iPP,iPAP: tProcess; buf: array of byte; s,t: string; sl: tMyStringList; begin result:=false; - if length(Dateien)=0 then begin + if length(dateien)=0 then begin gibAus('Keine Dateien zum Einlesen!',3); exit; end; - tmpi:=0; + tmpI:=0; num:=0; - tmps:=0; - tmpd:=0; - SpAnz:=-1; - setlength(Positionen,length(dateien)); - for i:=0 to length(Positionen)-1 do - Positionen[i]:=-1; + tmpS:=0; + tmpD:=0; + spAnz:=-1; + setLength(positionen,length(dateien)); + for i:=0 to length(positionen)-1 do + positionen[i]:=-1; for i:=0 to length(dateien)-1 do begin if dateien[i] is tPipeInputDateiInfo then begin - ipp:=tProcess.create(nil); // dieser Prozess generiert die Daten - ipp.Executable:=(dateien[i] as tPipeInputDateiInfo).Executable; - ipp.Parameters.Text:=(dateien[i] as tPipeInputDateiInfo).ParametersText; - ipp.Options:=ipp.Options + [poUsePipes]; - ipap:=tProcess.create(nil); // dieser Prozess analysiert die Daten - ipap.Executable:=(dateien[i] as tPipeInputDateiInfo).AnalysatorExecutable; - ipap.Parameters.Text:=(dateien[i] as tPipeInputDateiInfo).AnalysatorParametersText; - ipap.Options:=ipp.Options + [poUsePipes]; - ipp.execute; - ipap.execute; + iPP:=tProcess.create(nil); // dieser Prozess generiert die Daten + iPP.executable:=(dateien[i] as tPipeInputDateiInfo).executable; + iPP.parameters.text:=(dateien[i] as tPipeInputDateiInfo).parametersText; + iPP.options:=iPP.options + [poUsePipes]; + iPAP:=tProcess.create(nil); // dieser Prozess analysiert die Daten + iPAP.executable:=(dateien[i] as tPipeInputDateiInfo).analysatorExecutable; + iPAP.parameters.text:=(dateien[i] as tPipeInputDateiInfo).analysatorParametersText; + iPAP.options:=iPP.options + [poUsePipes]; + iPP.execute; + iPAP.execute; s:=''; br:=0; - while (ipp.running or (ipp.Output.NumBytesAvailable > 0)) and ipap.running do begin - if ipap.Output.NumBytesAvailable>0 then begin - setlength(s,br+ipap.Output.NumBytesAvailable); - br:=br+ipap.Output.Read(s[br+1],length(s)-br); + while (iPP.running or (iPP.output.numBytesAvailable > 0)) and iPAP.running do begin + if iPAP.output.numBytesAvailable>0 then begin + setLength(s,br+iPAP.output.numBytesAvailable); + br:=br+iPAP.output.read(s[br+1],length(s)-br); continue; end; - if ipp.Output.NumBytesAvailable > 0 then begin - setlength(buf,ipp.Output.NumBytesAvailable); - setlength(buf,ipp.Output.Read(buf[0],length(buf))); + if iPP.output.numBytesAvailable > 0 then begin + setLength(buf,iPP.output.numBytesAvailable); + setLength(buf,iPP.output.read(buf[0],length(buf))); j:=0; k:=-1; while (j<length(buf)) and (k<>0) do begin - k:=ipap.Input.Write(buf[j],length(buf)-j); + k:=iPAP.Input.write(buf[j],length(buf)-j); j:=j+k; end; sleep(100); // SEHR DRECKIG !!! @@ -1200,31 +1201,31 @@ begin sleep(10); end; - if not ipap.running then - ipp.CloseOutput; - if not ipp.running then - ipap.CloseInput; + if not iPAP.running then + iPP.CloseOutput; + if not iPP.running then + iPAP.CloseInput; - setlength(buf,0); + setLength(buf,0); - while ipap.running or (ipap.Output.NumBytesAvailable>0) do begin - setlength(s,br+ipap.Output.NumBytesAvailable); - br:=br+ipap.Output.Read(s[br+1],length(s)-br); - if ipap.running then + while iPAP.running or (iPAP.output.numBytesAvailable>0) do begin + setLength(s,br+iPAP.output.numBytesAvailable); + br:=br+iPAP.output.read(s[br+1],length(s)-br); + if iPAP.running then sleep(10); end; - if not ipp.waitOnExit then begin - gibAus('ErmittleInterneInputParameter hat ohne Erfolg auf Ende von ipp gewartet!',3); + if not iPP.waitOnExit then begin + gibAus('ErmittleInterneInputParameter hat ohne Erfolg auf Ende von iPP gewartet!',3); exit; end; - if not ipap.waitOnExit then begin - gibAus('ErmittleInterneInputParameter hat ohne Erfolg auf Ende von ipap gewartet!',3); + if not iPAP.waitOnExit then begin + gibAus('ErmittleInterneInputParameter hat ohne Erfolg auf Ende von iPAP gewartet!',3); exit; end; - ipp.free; - ipap.free; + iPP.free; + iPAP.free; dateien[i].groeszenFaktor:=1; @@ -1236,11 +1237,11 @@ begin delete(s,1,length(t)+1); t:=trim(t); if startetMit('Channels',t) and startetMit(':',t) then begin - dateien[i].xsteps:=strtoint(t); + dateien[i].xSteps:=strtoint(t); continue; end; if startetMit('Sample Rate',t) and startetMit(':',t) then begin - dateien[i].groeszenFaktor:=dateien[i].groeszenFaktor/strtofloat(t); + dateien[i].groeszenFaktor:=dateien[i].groeszenFaktor/strToFloat(t); continue; end; if startetMit('Precision',t) and startetMit(':',t) then begin @@ -1249,14 +1250,14 @@ begin exit; end; delete(t,length(t)-3,4); - (dateien[i] as tPipeInputDateiInfo).bytesPerSample:=ceil(strtofloat(trim(t))/8); + (dateien[i] as tPipeInputDateiInfo).bytesPerSample:=ceil(strToFloat(trim(t))/8); continue; end; if startetMit('Duration',t) and startetMit(':',t) then begin erstesArgument(t,'='); t:=erstesArgument(t); - dateien[i].tsiz:=strtoint(t); - dateien[i].groeszenFaktor:=dateien[i].groeszenFaktor*dateien[i].tsiz; + dateien[i].tSiz:=strtoint(t); + dateien[i].groeszenFaktor:=dateien[i].groeszenFaktor*dateien[i].tSiz; continue; end; if startetMit('Sample Encoding',t) and startetMit(':',t) then begin @@ -1272,155 +1273,155 @@ begin repeat k:=-1; for j:=0 to i-1 do - if Positionen[j]=num then begin + if positionen[j]=num then begin inc(k); inc(num); end; until k=-1; - Positionen[i]:=num; + positionen[i]:=num; end; if (dateien[i] is tSpaceTimeInputDateiInfo) or (dateien[i] is tTraceInputDateiInfo) then begin - assign(f,dateien[i].Name); + assign(f,dateien[i].name); reset(f,1); - blockread(f,num,sizeof(longint)); + blockread(f,num,sizeOf(longint)); dec(num); if dateien[i] is tTraceInputDateiInfo then begin - dateien[i].xsteps:=1; - dateien[i].xstop:=dateien[i].xstart; - blockread(f,tmpi,sizeof(longint)); - if spAnz<0 then spAnz:=tmpi; - if spAnz<>tmpi then begin - gibAus('Falsche Anzahl an Spuren ('+inttostr(tmpi)+' statt '+inttostr(spAnz)+') in Datei '''+dateien[i].Name+'''!',3); + dateien[i].xSteps:=1; + dateien[i].xStop:=dateien[i].xStart; + blockread(f,tmpI,sizeOf(longint)); + if spAnz<0 then spAnz:=tmpI; + if spAnz<>tmpI then begin + gibAus('Falsche Anzahl an Spuren ('+intToStr(tmpI)+' statt '+intToStr(spAnz)+') in Datei '''+dateien[i].name+'''!',3); close(f); exit; end; - if ((dateien[i] as TTraceInputDateiInfo).Spurnummer<0) or ((dateien[i] as TTraceInputDateiInfo).Spurnummer>=spAnz) then begin - gibAus('Ausgewählte Spurnummer ('+inttostr((dateien[i] as TTraceInputDateiInfo).Spurnummer)+') liegt außerhalb des verfügbaren Bereiches (0..'+inttostr(spAnz-1)+')!',3); + if ((dateien[i] as tTraceInputDateiInfo).spurNummer<0) or ((dateien[i] as tTraceInputDateiInfo).spurNummer>=spAnz) then begin + gibAus('Ausgewählte Spurnummer ('+intToStr((dateien[i] as tTraceInputDateiInfo).spurNummer)+') liegt außerhalb des verfügbaren Bereiches (0..'+intToStr(spAnz-1)+')!',3); close(f); exit; end; - if ((dateien[i] as TTraceInputDateiInfo).Feldnummer<0) or ((dateien[i] as TTraceInputDateiInfo).Feldnummer>=length(FeldgroeszenNamen)) then begin - gibAus('Ausgewählte Feldnummer ('+inttostr((dateien[i] as TTraceInputDateiInfo).Feldnummer)+') liegt außerhalb des verfügbaren Bereiches (0..'+inttostr(length(FeldgroeszenNamen)-1)+')!',3); + if ((dateien[i] as tTraceInputDateiInfo).feldNummer<0) or ((dateien[i] as tTraceInputDateiInfo).feldNummer>=length(feldGroeszenNamen)) then begin + gibAus('Ausgewählte Feldnummer ('+intToStr((dateien[i] as tTraceInputDateiInfo).feldNummer)+') liegt außerhalb des verfügbaren Bereiches (0..'+intToStr(length(feldGroeszenNamen)-1)+')!',3); close(f); exit; end; end; - blockread(f,tmpi,sizeof(longint)); - dateien[i].tsiz:=tmpi; + blockread(f,tmpI,sizeOf(longint)); + dateien[i].tSiz:=tmpI; if dateien[i] is tSpaceTimeInputDateiInfo then begin - case dateien[i].Genauigkeit of + case dateien[i].genauigkeit of gSingle: begin - blockread(f,tmps,sizeof(single)); - tmpe:=tmps; + blockread(f,tmpS,sizeOf(single)); + tmpE:=tmpS; end; gDouble: begin - blockread(f,tmpd,sizeof(double)); - tmpe:=tmpd; + blockread(f,tmpD,sizeOf(double)); + tmpE:=tmpD; end; - gExtended: blockread(f,tmpe,sizeof(extended)); + gExtended: blockread(f,tmpE,sizeOf(extended)); end{of case}; - tmpe:=tmpe*dateien[i].groeszenFaktor; - if i=0 then Transformationen.xstart:=tmpe; - if tmpe<>Transformationen.xstart then begin - gibAus('Falscher linker Rand in '''+dateien[i].Name+''', nämlich '+myfloattostr(tmpe)+' statt '+myfloattostr(Transformationen.xstart)+'.',3); + tmpE:=tmpE*dateien[i].groeszenFaktor; + if i=0 then transformationen.xStart:=tmpE; + if tmpE<>transformationen.xStart then begin + gibAus('Falscher linker Rand in '''+dateien[i].name+''', nämlich '+myFloatToStr(tmpE)+' statt '+myFloatToStr(transformationen.xStart)+'.',3); close(f); exit; end; - case dateien[i].Genauigkeit of + case dateien[i].genauigkeit of gSingle: begin - blockread(f,tmps,sizeof(single)); - tmpe:=tmps; + blockread(f,tmpS,sizeOf(single)); + tmpE:=tmpS; end; gDouble: begin - blockread(f,tmpd,sizeof(double)); - tmpe:=tmpd; + blockread(f,tmpD,sizeOf(double)); + tmpE:=tmpD; end; - gExtended: blockread(f,tmpe,sizeof(extended)); + gExtended: blockread(f,tmpE,sizeOf(extended)); end{of case}; - tmpe:=tmpe*dateien[i].groeszenFaktor; - if i=0 then Transformationen.xstop:=tmpe; - if tmpe<>Transformationen.xstop then begin - gibAus('Falscher rechter Rand in '''+dateien[i].Name+''', nämlich '+myfloattostr(tmpe)+' statt '+myfloattostr(Transformationen.xstop)+'.',3); + tmpE:=tmpE*dateien[i].groeszenFaktor; + if i=0 then transformationen.xStop:=tmpE; + if tmpE<>transformationen.xStop then begin + gibAus('Falscher rechter Rand in '''+dateien[i].name+''', nämlich '+myFloatToStr(tmpE)+' statt '+myFloatToStr(transformationen.xStop)+'.',3); close(f); exit; end; - blockread(f,tmpi,sizeof(longint)); - dateien[i].xsteps:=tmpi; + blockread(f,tmpI,sizeOf(longint)); + dateien[i].xSteps:=tmpI; end; close(f); for j:=0 to i-1 do - if Positionen[j]=num then begin - gibAus('Datei '''+dateien[i].Name+''' ist redundant zu '''+dateien[j].Name+'''.',3); + if positionen[j]=num then begin + gibAus('Datei '''+dateien[i].name+''' ist redundant zu '''+dateien[j].name+'''.',3); exit; end; - Positionen[i]:=num; + positionen[i]:=num; end; if dateien[i] is tPhaseSpaceInputDateiInfo then begin if (i<>0) or (length(dateien)<>1) then begin gibAus('Ich kann Phasenraumdateien nicht kaskadieren!',3); exit; end; - assign(f,dateien[i].Name); + assign(f,dateien[i].name); reset(f,1); - case dateien[i].Genauigkeit of + case dateien[i].genauigkeit of gSingle: begin - blockread(f,tmps,sizeof(single)); - tmpe:=tmps; + blockread(f,tmpS,sizeOf(single)); + tmpE:=tmpS; end; gDouble: begin - blockread(f,tmpd,sizeof(double)); - tmpe:=tmpd; + blockread(f,tmpD,sizeOf(double)); + tmpE:=tmpD; end; - gExtended: blockread(f,tmpe,sizeof(extended)); + gExtended: blockread(f,tmpE,sizeOf(extended)); end{of case}; - tmpe:=tmpe*dateien[i].groeszenFaktor; - Transformationen.tstart:=tmpe; - case dateien[i].Genauigkeit of + tmpE:=tmpE*dateien[i].groeszenFaktor; + transformationen.tStart:=tmpE; + case dateien[i].genauigkeit of gSingle: begin - blockread(f,tmps,sizeof(single)); - tmpe:=tmps; + blockread(f,tmpS,sizeOf(single)); + tmpE:=tmpS; end; gDouble: begin - blockread(f,tmpd,sizeof(double)); - tmpe:=tmpd; + blockread(f,tmpD,sizeOf(double)); + tmpE:=tmpD; end; - gExtended: blockread(f,tmpe,sizeof(extended)); + gExtended: blockread(f,tmpE,sizeOf(extended)); end{of case}; - tmpe:=tmpe*dateien[i].groeszenFaktor; - Transformationen.tstop:=tmpe; - blockread(f,tmpi,sizeof(longint)); - dateien[i].tsiz:=tmpi; - case dateien[i].Genauigkeit of + tmpE:=tmpE*dateien[i].groeszenFaktor; + transformationen.tStop:=tmpE; + blockread(f,tmpI,sizeOf(longint)); + dateien[i].tSiz:=tmpI; + case dateien[i].genauigkeit of gSingle: begin - blockread(f,tmps,sizeof(single)); - tmpe:=tmps; + blockread(f,tmpS,sizeOf(single)); + tmpE:=tmpS; end; gDouble: begin - blockread(f,tmpd,sizeof(double)); - tmpe:=tmpd; + blockread(f,tmpD,sizeOf(double)); + tmpE:=tmpD; end; - gExtended: blockread(f,tmpe,sizeof(extended)); + gExtended: blockread(f,tmpE,sizeOf(extended)); end{of case}; - tmpe:=tmpe*dateien[i].groeszenFaktor; - Transformationen.xstart:=tmpe; - case dateien[i].Genauigkeit of + tmpE:=tmpE*dateien[i].groeszenFaktor; + transformationen.xStart:=tmpE; + case dateien[i].genauigkeit of gSingle: begin - blockread(f,tmps,sizeof(single)); - tmpe:=tmps; + blockread(f,tmpS,sizeOf(single)); + tmpE:=tmpS; end; gDouble: begin - blockread(f,tmpd,sizeof(double)); - tmpe:=tmpd; + blockread(f,tmpD,sizeOf(double)); + tmpE:=tmpD; end; - gExtended: blockread(f,tmpe,sizeof(extended)); + gExtended: blockread(f,tmpE,sizeOf(extended)); end{of case}; - tmpe:=tmpe*dateien[i].groeszenFaktor; - Transformationen.xstop:=tmpe; - blockread(f,tmpi,sizeof(longint)); - dateien[i].xsteps:=tmpi; + tmpE:=tmpE*dateien[i].groeszenFaktor; + transformationen.xStop:=tmpE; + blockread(f,tmpI,sizeOf(longint)); + dateien[i].xSteps:=tmpI; close(f); - Positionen[i]:=0; + positionen[i]:=0; end; if dateien[i] is tSergeyInputDateiInfo then begin if (i<>0) or (length(dateien)<>1) then begin @@ -1428,38 +1429,38 @@ begin exit; end; - if rightstr(dateien[i].Name,1)<>'/' then - dateien[i].Name:=dateien[i].Name+'/'; + if rightStr(dateien[i].name,1)<>'/' then + dateien[i].name:=dateien[i].name+'/'; - if not fileexists(dateien[i].Name+'numberoftimesteps') then begin - gibAus('Datei '''+dateien[i].Name+'numberoftimesteps'' existiert nicht!',3); + if not fileexists(dateien[i].name+'numberoftimesteps') then begin + gibAus('Datei '''+dateien[i].name+'numberoftimesteps'' existiert nicht!',3); exit; end; - if not fileexists(dateien[i].Name+'dt') then begin - gibAus('Datei '''+dateien[i].Name+'dt'' existiert nicht!',3); + if not fileexists(dateien[i].name+'dt') then begin + gibAus('Datei '''+dateien[i].name+'dt'' existiert nicht!',3); exit; end; - if not fileexists(dateien[i].Name+'traces/traces.dat') then begin - gibAus('Datei '''+dateien[i].Name+'traces/traces.dat'' existiert nicht!',3); + if not fileexists(dateien[i].name+'traces/traces.dat') then begin + gibAus('Datei '''+dateien[i].name+'traces/traces.dat'' existiert nicht!',3); exit; end; - if not fileexists(dateien[i].Name+'../xrom.ini') then begin - gibAus('Datei '''+dateien[i].Name+'../xrom.ini'' existiert nicht!',3); + if not fileexists(dateien[i].name+'../xrom.ini') then begin + gibAus('Datei '''+dateien[i].name+'../xrom.ini'' existiert nicht!',3); exit; end; - if ((dateien[i] as TSergeyInputDateiInfo).Feldnummer<0) or ((dateien[i] as TSergeyInputDateiInfo).Feldnummer>=anzSergeyFelder) then begin - gibAus('Ausgewählte Feldnummer ('+inttostr((dateien[i] as TSergeyInputDateiInfo).Feldnummer)+') liegt außerhalb des verfügbaren Bereiches (0..'+inttostr(anzSergeyFelder-1)+')!',3); + if ((dateien[i] as tSergeyInputDateiInfo).feldNummer<0) or ((dateien[i] as tSergeyInputDateiInfo).feldNummer>=anzSergeyFelder) then begin + gibAus('Ausgewählte Feldnummer ('+intToStr((dateien[i] as tSergeyInputDateiInfo).feldNummer)+') liegt außerhalb des verfügbaren Bereiches (0..'+intToStr(anzSergeyFelder-1)+')!',3); exit; end; - assign(tf,dateien[i].Name+'numberoftimesteps'); + assign(tf,dateien[i].name+'numberoftimesteps'); reset(tf); - readln(tf,tmpi); + readln(tf,tmpI); close(tf); - dateien[i].tsiz:=tmpi+1; + dateien[i].tSiz:=tmpI+1; - sl:=tMyStringlist.create; - sl.loadFromFile(dateien[i].Name+'../xrom.ini'); + sl:=tMyStringList.create; + sl.loadFromFile(dateien[i].name+'../xrom.ini'); t:=sl.grepFirst('^\s*Pulse[12]\.a0\s*=.*[^0 ].*$'); if t='' then begin gibAus(''''+s+''' enthält keinen Puls, den ich erkenne!',3); @@ -1474,83 +1475,83 @@ begin exit; end; erstesArgument(t,'='); - dateien[i].params.np:=sqrt(strtofloat(t))/dateien[i].groeszenFaktor; + dateien[i].params.np:=sqrt(strToFloat(t))/dateien[i].groeszenFaktor; sl.free; - assign(tf,dateien[i].Name+'dt'); + assign(tf,dateien[i].name+'dt'); reset(tf); - readln(tf,tmpe); + readln(tf,tmpE); close(tf); - tmpe:=tmpe*dateien[i].groeszenFaktor; - dateien[i].tstart:=0; - dateien[i].tstop:=tmpe/2/pi*(dateien[i].tsiz-1); - dateien[i].xstart:=0; - dateien[i].xstop:=0; - dateien[i].xsteps:=1; - - assignfile(f,dateien[i].Name+'traces/traces.dat'); + tmpE:=tmpE*dateien[i].groeszenFaktor; + dateien[i].tStart:=0; + dateien[i].tStop:=tmpE/2/pi*(dateien[i].tSiz-1); + dateien[i].xStart:=0; + dateien[i].xStop:=0; + dateien[i].xSteps:=1; + + assignFile(f,dateien[i].name+'traces/traces.dat'); reset(f,1); - if filesize(f)<>wertGroesze(dateien[i].Genauigkeit)*dateien[i].tsiz*anzSergeyFelder then begin - gibAus(''''+dateien[i].Name+'traces/traces.dat'' hat die falsche Größe ('+inttostr(filesize(f))+' statt '+inttostr(wertGroesze(dateien[i].Genauigkeit)*dateien[i].tsiz*anzSergeyFelder)+' Byte)!',3); + if filesize(f)<>wertGroesze(dateien[i].genauigkeit)*dateien[i].tSiz*anzSergeyFelder then begin + gibAus(''''+dateien[i].name+'traces/traces.dat'' hat die falsche Größe ('+intToStr(filesize(f))+' statt '+intToStr(wertGroesze(dateien[i].genauigkeit)*dateien[i].tSiz*anzSergeyFelder)+' Byte)!',3); close(f); exit; end; close(f); - Positionen[i]:=0; + positionen[i]:=0; end; if dateien[i] is tAndorInputDateiInfo then begin if (i<>0) or (length(dateien)<>1) then begin gibAus('Ich kann Andor-Dateien nicht kaskadieren!',3); exit; end; - assignfile(f,dateien[i].Name); + assignFile(f,dateien[i].name); reset(f,1); readALine(f,s); if s<>'Andor Technology Multi-Channel File' then begin - gibAus('Syntax-Fehler in '''+dateien[i].Name+''': erkenne Andor Datei nicht!',3); - closefile(f); + gibAus('Syntax-Fehler in '''+dateien[i].name+''': erkenne Andor Datei nicht!',3); + closeFile(f); exit; end; readALine(f,s); if s<>'65538 1' then begin - gibAus('Syntax-Fehler in '''+dateien[i].Name+''': diese Andor Datei hält der strengen Prüfung nicht stand!',3); - closefile(f); + gibAus('Syntax-Fehler in '''+dateien[i].name+''': diese Andor Datei hält der strengen Prüfung nicht stand!',3); + closeFile(f); exit; end; readALine(f,s); for j:=0 to 4 do erstesArgument(s,' ',false); - (dateien[i] as TAndorInputDateiInfo).temperatur:=strToFloat(erstesArgument(s,' ',false)); + (dateien[i] as tAndorInputDateiInfo).temperatur:=strToFloat(erstesArgument(s,' ',false)); for j:=6 to 11 do erstesArgument(s,' ',false); - (dateien[i] as TAndorInputDateiInfo).belichtungsZeit:=strToFloat(erstesArgument(s,' ',false)); - (dateien[i] as TAndorInputDateiInfo).zyklusZeit:=strToFloat(erstesArgument(s,' ',false)); - (dateien[i] as TAndorInputDateiInfo).akkumulierteZyklusZeit:=strToFloat(erstesArgument(s,' ',false)); - (dateien[i] as TAndorInputDateiInfo).akkumulierteZyklen:=strToInt64(erstesArgument(s,' ',false)); + (dateien[i] as tAndorInputDateiInfo).belichtungsZeit:=strToFloat(erstesArgument(s,' ',false)); + (dateien[i] as tAndorInputDateiInfo).zyklusZeit:=strToFloat(erstesArgument(s,' ',false)); + (dateien[i] as tAndorInputDateiInfo).akkumulierteZyklusZeit:=strToFloat(erstesArgument(s,' ',false)); + (dateien[i] as tAndorInputDateiInfo).akkumulierteZyklen:=strToInt64(erstesArgument(s,' ',false)); erstesArgument(s,' ',false); // 16 - (dateien[i] as TAndorInputDateiInfo).zyklusStapelZeit:=strToFloat(erstesArgument(s,' ',false)); - (dateien[i] as TAndorInputDateiInfo).pixelAusleseZeit:=strToFloat(erstesArgument(s,' ',false)); + (dateien[i] as tAndorInputDateiInfo).zyklusStapelZeit:=strToFloat(erstesArgument(s,' ',false)); + (dateien[i] as tAndorInputDateiInfo).pixelAusleseZeit:=strToFloat(erstesArgument(s,' ',false)); for j:=19 to 20 do erstesArgument(s,' ',false); - (dateien[i] as TAndorInputDateiInfo).verstaerkungADW:=strToFloat(erstesArgument(s,' ',false)); + (dateien[i] as tAndorInputDateiInfo).verstaerkungADW:=strToFloat(erstesArgument(s,' ',false)); for j:=22 to 75 do erstesArgument(s,' ',false); try - readAnAndorString(f,(dateien[i] as TAndorInputDateiInfo).detektorTyp,strToInt64(s),true); + readAnAndorString(f,(dateien[i] as tAndorInputDateiInfo).detektorTyp,strToInt64(s),true); except - gibAus('Syntax-Fehler in '''+dateien[i].Name+''': Detektor-String nicht lesbar!',3); + gibAus('Syntax-Fehler in '''+dateien[i].name+''': Detektor-String nicht lesbar!',3); closeFile(f); exit; end; readALine(f,s); s:=trim(s); - (dateien[i] as TAndorInputDateiInfo).detektorGroesze['x']:=strToInt64(erstesArgument(s,' ',false)); - (dateien[i] as TAndorInputDateiInfo).detektorGroesze['y']:=strToInt64(erstesArgument(s,' ',false)); + (dateien[i] as tAndorInputDateiInfo).detektorGroesze['x']:=strToInt64(erstesArgument(s,' ',false)); + (dateien[i] as tAndorInputDateiInfo).detektorGroesze['y']:=strToInt64(erstesArgument(s,' ',false)); try - readAnAndorString(f,(dateien[i] as TAndorInputDateiInfo).dateiName,strToInt64(s),true); + readAnAndorString(f,(dateien[i] as tAndorInputDateiInfo).dateiName,strToInt64(s),true); except - gibAus('Syntax-Fehler in '''+dateien[i].Name+''': originaler Dateiname nicht lesbar!',3); + gibAus('Syntax-Fehler in '''+dateien[i].name+''': originaler Dateiname nicht lesbar!',3); closeFile(f); exit; end; @@ -1561,19 +1562,19 @@ begin readALine(f,s); for j:=0 to 2 do erstesArgument(s,' ',false); - dateien[i].xstart:=strToFloat(erstesArgument(s,' ',false)); - (dateien[i] as TAndorInputDateiInfo).shutterZeit['x']:=strToFloat(erstesArgument(s,' ',false)); - (dateien[i] as TAndorInputDateiInfo).shutterZeit['y']:=strToFloat(erstesArgument(s,' ',false)); + dateien[i].xStart:=strToFloat(erstesArgument(s,' ',false)); + (dateien[i] as tAndorInputDateiInfo).shutterZeit['x']:=strToFloat(erstesArgument(s,' ',false)); + (dateien[i] as tAndorInputDateiInfo).shutterZeit['y']:=strToFloat(erstesArgument(s,' ',false)); erstesArgument(s,' ',false); // Gitter-abstand? - dateien[i].xstop:=strToFloat(erstesArgument(s,'nm',false)); - for j:=0 to (dateien[i] as TAndorInputDateiInfo).detectorSkipLines-1 do + dateien[i].xStop:=strToFloat(erstesArgument(s,'nm',false)); + for j:=0 to (dateien[i] as tAndorInputDateiInfo).detectorSkipLines-1 do readALine(f,s); try - readAnAndorString(f,(dateien[i] as TAndorInputDateiInfo).xAchsenTitel,false); - readAnAndorString(f,(dateien[i] as TAndorInputDateiInfo).datenTypTitel,false); - readAnAndorString(f,(dateien[i] as TAndorInputDateiInfo).yAchsenTitel,false); + readAnAndorString(f,(dateien[i] as tAndorInputDateiInfo).xAchsenTitel,false); + readAnAndorString(f,(dateien[i] as tAndorInputDateiInfo).datenTypTitel,false); + readAnAndorString(f,(dateien[i] as tAndorInputDateiInfo).yAchsenTitel,false); except - gibAus('Syntax-Fehler in '''+dateien[i].Name+''': Achsenbeschriftung nicht lesbar!',3); + gibAus('Syntax-Fehler in '''+dateien[i].name+''': Achsenbeschriftung nicht lesbar!',3); closeFile(f); exit; end; @@ -1581,72 +1582,72 @@ begin readALine(f,t); splitStrToInt(s+' '+t,iArr); if (iArr[0]<>65541) or (iArr[9]<>65538) or (iArr[13]<>1) or (iArr[16]<>0) then begin - gibAus('Syntax-Fehler in '''+dateien[i].Name+''': inkonsistenter Kopf.',3); - closefile(f); + gibAus('Syntax-Fehler in '''+dateien[i].name+''': inkonsistenter Kopf.',3); + closeFile(f); exit; end; - (dateien[i] as TAndorInputDateiInfo).bildBereich['x','x']:=iArr[1]; - (dateien[i] as TAndorInputDateiInfo).bildBereich['x','y']:=iArr[3]; - (dateien[i] as TAndorInputDateiInfo).bildBereich['y','x']:=iArr[4]; - (dateien[i] as TAndorInputDateiInfo).bildBereich['y','y']:=iArr[2]; - (dateien[i] as TAndorInputDateiInfo).bildBereichStapel['x']:=iArr[6]; - (dateien[i] as TAndorInputDateiInfo).bildBereichStapel['y']:=iArr[5]; - (dateien[i] as TAndorInputDateiInfo).rahmenBereich['x','x']:=iArr[10]; - (dateien[i] as TAndorInputDateiInfo).rahmenBereich['x','y']:=iArr[12]; - (dateien[i] as TAndorInputDateiInfo).rahmenBereich['x','x']:=iArr[13]; - (dateien[i] as TAndorInputDateiInfo).rahmenBereich['x','y']:=iArr[11]; - (dateien[i] as TAndorInputDateiInfo).rahmenToepfe['x']:=iArr[15]; - (dateien[i] as TAndorInputDateiInfo).rahmenToepfe['y']:=iArr[14]; - - j:=(dateien[i] as TAndorInputDateiInfo).bildBereichStapel['y'] - - (dateien[i] as TAndorInputDateiInfo).bildBereichStapel['x'] + 1; + (dateien[i] as tAndorInputDateiInfo).bildBereich['x','x']:=iArr[1]; + (dateien[i] as tAndorInputDateiInfo).bildBereich['x','y']:=iArr[3]; + (dateien[i] as tAndorInputDateiInfo).bildBereich['y','x']:=iArr[4]; + (dateien[i] as tAndorInputDateiInfo).bildBereich['y','y']:=iArr[2]; + (dateien[i] as tAndorInputDateiInfo).bildBereichStapel['x']:=iArr[6]; + (dateien[i] as tAndorInputDateiInfo).bildBereichStapel['y']:=iArr[5]; + (dateien[i] as tAndorInputDateiInfo).rahmenBereich['x','x']:=iArr[10]; + (dateien[i] as tAndorInputDateiInfo).rahmenBereich['x','y']:=iArr[12]; + (dateien[i] as tAndorInputDateiInfo).rahmenBereich['x','x']:=iArr[13]; + (dateien[i] as tAndorInputDateiInfo).rahmenBereich['x','y']:=iArr[11]; + (dateien[i] as tAndorInputDateiInfo).rahmenToepfe['x']:=iArr[15]; + (dateien[i] as tAndorInputDateiInfo).rahmenToepfe['y']:=iArr[14]; + + j:=(dateien[i] as tAndorInputDateiInfo).bildBereichStapel['y'] - + (dateien[i] as tAndorInputDateiInfo).bildBereichStapel['x'] + 1; if j<>1 then begin - gibAus('So ein Mist - Ich kenn hier nur den Wert "1" in '''+dateien[i].Name+'''.',3); + gibAus('So ein Mist - Ich kenn hier nur den Wert "1" in '''+dateien[i].name+'''.',3); closeFile(f); exit; end; - dateien[i].xsteps:= - ((dateien[i] as TAndorInputDateiInfo).bildBereich['x','y']- - (dateien[i] as TAndorInputDateiInfo).bildBereich['x','x']+1) div - (dateien[i] as TAndorInputDateiInfo).rahmenToepfe['x']; - dateien[i].tsiz:= - ((dateien[i] as TAndorInputDateiInfo).bildBereich['y','y']- - (dateien[i] as TAndorInputDateiInfo).bildBereich['y','x']+1) div - (dateien[i] as TAndorInputDateiInfo).rahmenToepfe['y']; - if (dateien[i].xsteps*dateien[i].tsiz <> iArr[8]) or + dateien[i].xSteps:= + ((dateien[i] as tAndorInputDateiInfo).bildBereich['x','y']- + (dateien[i] as tAndorInputDateiInfo).bildBereich['x','x']+1) div + (dateien[i] as tAndorInputDateiInfo).rahmenToepfe['x']; + dateien[i].tSiz:= + ((dateien[i] as tAndorInputDateiInfo).bildBereich['y','y']- + (dateien[i] as tAndorInputDateiInfo).bildBereich['y','x']+1) div + (dateien[i] as tAndorInputDateiInfo).rahmenToepfe['y']; + if (dateien[i].xSteps*dateien[i].tSiz <> iArr[8]) or (iArr[8]*j <> iArr[7]) then begin - gibAus('Syntax-Fehler in '''+dateien[i].Name+''': inkonsistenter Kopf.',3); - closefile(f); + gibAus('Syntax-Fehler in '''+dateien[i].name+''': inkonsistenter Kopf.',3); + closeFile(f); exit; end; while j>=0 do begin readAnAndorString(f,s,false); // labels dec(j); end; - (dateien[i] as TAndorInputDateiInfo).datenStart:=filePos(f); - seek(f,(dateien[i] as TAndorInputDateiInfo).datenStart+dateien[i].xsteps*dateien[i].tsiz*sizeof(single)); + (dateien[i] as tAndorInputDateiInfo).datenStart:=filePos(f); + seek(f,(dateien[i] as tAndorInputDateiInfo).datenStart+dateien[i].xSteps*dateien[i].tSiz*sizeOf(single)); try readAnAndorString(f,s,false); except s:='falsch'; end; if s<>'' then begin - gibAus('Syntax-Fehler in '''+dateien[i].Name+''': vmtl. zu viele/wenige Daten.',3); - closefile(f); + gibAus('Syntax-Fehler in '''+dateien[i].name+''': vmtl. zu viele/wenige Daten.',3); + closeFile(f); exit; end; - closefile(f); + closeFile(f); end; end; - _tsiz:=0; - _xsteps:=dateien[0].xsteps; + _tSiz:=0; + _xSteps:=dateien[0].xSteps; for i:=0 to length(dateien)-1 do begin - if dateien[i].xsteps<>_xsteps then begin - gibAus('Falsche Anzahl an x-Werten in '''+dateien[i].Name+''', nämlich '+inttostr(dateien[i].xsteps)+' statt '+inttostr(_xsteps)+'.',3); + if dateien[i].xSteps<>_xSteps then begin + gibAus('Falsche Anzahl an x-Werten in '''+dateien[i].name+''', nämlich '+intToStr(dateien[i].xSteps)+' statt '+intToStr(_xSteps)+'.',3); exit; end; - _tsiz:=_tsiz+dateien[i].tsiz; + _tSiz:=_tSiz+dateien[i].tSiz; if dateien[i].groeszenFaktor<>dateien[0].groeszenFaktor then begin gibAus('Die Dateien haben nicht alle den gleichen Größenfaktor!',3); exit; @@ -1655,39 +1656,39 @@ begin if (dateien[0] is tSergeyInputDateiInfo) or (dateien[0] is tAndorInputDateiInfo) then begin - transformationen.xstart:=Dateien[0].xstart; - transformationen.xstop:=Dateien[0].xstop; - transformationen.tstart:=Dateien[0].tstart; - transformationen.tstop:=Dateien[0].tstop; + transformationen.xStart:=dateien[0].xStart; + transformationen.xStop:=dateien[0].xStop; + transformationen.tStart:=dateien[0].tStart; + transformationen.tStop:=dateien[0].tStop; end; if not ((dateien[0] is tPhaseSpaceInputDateiInfo) or (dateien[0] is tSergeyInputDateiInfo)) then begin - Transformationen.tstart:=Positionen[0]*dateien[0].groeszenFaktor; - Transformationen.tstop:=(Positionen[0]+1)*dateien[0].groeszenFaktor; - for i:=1 to length(Positionen)-1 do begin - Transformationen.tstart:=min(Transformationen.tstart,Positionen[i]*dateien[i].groeszenFaktor); - Transformationen.tstop:=max(Transformationen.tstop,(Positionen[i]+1)*dateien[i].groeszenFaktor); - end; - if 0<>round(Transformationen.tstart+length(dateien)*dateien[0].groeszenFaktor-Transformationen.tstop) then begin - gibAus('Die Dateien decken nicht den kompletten Zeitbereich von '+inttostr(round(Transformationen.tstart))+'T bis '+inttostr(round(Transformationen.tstop))+'T ab!',3); + transformationen.tStart:=positionen[0]*dateien[0].groeszenFaktor; + transformationen.tStop:=(positionen[0]+1)*dateien[0].groeszenFaktor; + for i:=1 to length(positionen)-1 do begin + transformationen.tStart:=min(transformationen.tStart,positionen[i]*dateien[i].groeszenFaktor); + transformationen.tStop:=max(transformationen.tStop,(positionen[i]+1)*dateien[i].groeszenFaktor); + end; + if 0<>round(transformationen.tStart+length(dateien)*dateien[0].groeszenFaktor-transformationen.tStop) then begin + gibAus('Die Dateien decken nicht den kompletten Zeitbereich von '+intToStr(round(transformationen.tStart))+'T bis '+intToStr(round(transformationen.tStop))+'T ab!',3); exit; end; - setlength(sortiert,length(dateien)); - for i:=0 to length(Positionen)-1 do - sortiert[Positionen[i]-round(Transformationen.tstart/dateien[i].groeszenFaktor)]:=dateien[i]; - for i:=0 to length(Positionen)-1 do begin + setLength(sortiert,length(dateien)); + for i:=0 to length(positionen)-1 do + sortiert[positionen[i]-round(transformationen.tStart/dateien[i].groeszenFaktor)]:=dateien[i]; + for i:=0 to length(positionen)-1 do begin dateien[i]:=sortiert[i]; if i=0 then begin - dateien[i].t0abs:=0; - sWerte.params.tsiz_:=dateien[i].tmax-dateien[i].tmin+1; - sWerte.params.xsteps_:=dateien[i].xmax-dateien[i].xmin+1; + dateien[i].t0Abs:=0; + sWerte.params.tSiz_:=dateien[i].tMax-dateien[i].tMin+1; + sWerte.params.xSteps_:=dateien[i].xMax-dateien[i].xMin+1; end else begin - dateien[i].t0abs:= - dateien[i-1].t0abs + dateien[i-1].tsiz; - sWerte.params.tsiz_:= - sWerte.params.tsiz_ + dateien[i].tmax-dateien[i].tmin+1; - if sWerte.params.xsteps_<>dateien[i].xmax-dateien[i].xmin+1 then begin + dateien[i].t0Abs:= + dateien[i-1].t0Abs + dateien[i-1].tSiz; + sWerte.params.tSiz_:= + sWerte.params.tSiz_ + dateien[i].tMax-dateien[i].tMin+1; + if sWerte.params.xSteps_<>dateien[i].xMax-dateien[i].xMin+1 then begin gibAus('Die Dateien haben unterschiedliche Anzahlen an x-Werten im ausgewählten Bereich!',3); exit; end; @@ -1699,35 +1700,35 @@ begin result:=true; end; -procedure tWerte.initVerzerrung(quelle: tWerte; xMin,xMax,tMin,tMax,x0Abs,t0Abs,mt: longint; oberst: boolean; epsilon: extended; verzerrung: tTransformation; verzerrAnzahl: longint; ZPs: tIntPointArray; ZGs: tExtPointArray; ZAs: tExtendedArray; Warn: tWarnstufe); +procedure tWerte.initVerzerrung(quelle: tWerte; xMin,xMax,tMin,tMax,x0Abs,t0Abs,mT: longint; oberst: boolean; epsilon: extended; verzerrung: tTransformation; verzerrAnzahl: longint; zPs: tIntPointArray; zGs: tExtPointArray; zAs: tExtendedArray; Warn: tWarnstufe); var i,j: longint; vits: array[boolean] of tVerzerrInitThread; b: boolean; begin - if mt<=1 then begin - for i:=0 to _tsiz-1 do - for j:=0 to _xsteps-1 do - ZAs[j + i*_xsteps]:=0; + if mT<=1 then begin + for i:=0 to _tSiz-1 do + for j:=0 to _xSteps-1 do + zAs[j + i*_xSteps]:=0; for i:=tMin to tMax do for j:=xMin to xMax do begin - ZGs[j+i*quelle._xsteps]:=verzerrung.transformiereKoordinaten(j,i,verzerrAnzahl-1); - ZPs[j+i*quelle._xsteps]['x']:=floor(ZGs[j+i*quelle._xsteps]['x']); - ZPs[j+i*quelle._xsteps]['y']:=floor(ZGs[j+i*quelle._xsteps]['y']); - ZGs[j+i*quelle._xsteps]['x']:= - ZGs[j+i*quelle._xsteps]['x'] - ZPs[j+i*quelle._xsteps]['x']; - ZGs[j+i*quelle._xsteps]['y']:= - ZGs[j+i*quelle._xsteps]['y'] - ZPs[j+i*quelle._xsteps]['y']; - ZPs[j+i*quelle._xsteps]['x']:=ZPs[j+i*quelle._xsteps]['x'] - x0Abs; // Zielpositionen um die Nullposition verschieben - ZPs[j+i*quelle._xsteps]['y']:=ZPs[j+i*quelle._xsteps]['y'] - t0Abs; - ZAs[ZPs[j+i*quelle._xsteps]['x'] + ZPs[j+i*quelle._xsteps]['y']*_xsteps]:= - ZAs[ZPs[j+i*quelle._xsteps]['x'] + ZPs[j+i*quelle._xsteps]['y']*_xsteps] + (1-ZGs[j+i*quelle._xsteps]['x'])*(1-ZGs[j+i*quelle._xsteps]['y']); - ZAs[ZPs[j+i*quelle._xsteps]['x'] + 1 + ZPs[j+i*quelle._xsteps]['y']*_xsteps]:= - ZAs[ZPs[j+i*quelle._xsteps]['x'] + 1 + ZPs[j+i*quelle._xsteps]['y']*_xsteps] + ZGs[j+i*quelle._xsteps]['x']*(1-ZGs[j+i*quelle._xsteps]['y']); - ZAs[ZPs[j+i*quelle._xsteps]['x'] + (ZPs[j+i*quelle._xsteps]['y'] + 1)*_xsteps]:= - ZAs[ZPs[j+i*quelle._xsteps]['x'] + (ZPs[j+i*quelle._xsteps]['y'] + 1)*_xsteps] + (1-ZGs[j+i*quelle._xsteps]['x'])*ZGs[j+i*quelle._xsteps]['y']; - ZAs[ZPs[j+i*quelle._xsteps]['x'] + 1 + (ZPs[j+i*quelle._xsteps]['y'] + 1)*_xsteps]:= - ZAs[ZPs[j+i*quelle._xsteps]['x'] + 1 + (ZPs[j+i*quelle._xsteps]['y'] + 1)*_xsteps] + ZGs[j+i*quelle._xsteps]['x']*ZGs[j+i*quelle._xsteps]['y']; + zGs[j+i*quelle._xSteps]:=verzerrung.transformiereKoordinaten(j,i,verzerrAnzahl-1); + zPs[j+i*quelle._xSteps]['x']:=floor(zGs[j+i*quelle._xSteps]['x']); + zPs[j+i*quelle._xSteps]['y']:=floor(zGs[j+i*quelle._xSteps]['y']); + zGs[j+i*quelle._xSteps]['x']:= + zGs[j+i*quelle._xSteps]['x'] - zPs[j+i*quelle._xSteps]['x']; + zGs[j+i*quelle._xSteps]['y']:= + zGs[j+i*quelle._xSteps]['y'] - zPs[j+i*quelle._xSteps]['y']; + zPs[j+i*quelle._xSteps]['x']:=zPs[j+i*quelle._xSteps]['x'] - x0Abs; // Zielpositionen um die Nullposition verschieben + zPs[j+i*quelle._xSteps]['y']:=zPs[j+i*quelle._xSteps]['y'] - t0Abs; + zAs[zPs[j+i*quelle._xSteps]['x'] + zPs[j+i*quelle._xSteps]['y']*_xSteps]:= + zAs[zPs[j+i*quelle._xSteps]['x'] + zPs[j+i*quelle._xSteps]['y']*_xSteps] + (1-zGs[j+i*quelle._xSteps]['x'])*(1-zGs[j+i*quelle._xSteps]['y']); + zAs[zPs[j+i*quelle._xSteps]['x'] + 1 + zPs[j+i*quelle._xSteps]['y']*_xSteps]:= + zAs[zPs[j+i*quelle._xSteps]['x'] + 1 + zPs[j+i*quelle._xSteps]['y']*_xSteps] + zGs[j+i*quelle._xSteps]['x']*(1-zGs[j+i*quelle._xSteps]['y']); + zAs[zPs[j+i*quelle._xSteps]['x'] + (zPs[j+i*quelle._xSteps]['y'] + 1)*_xSteps]:= + zAs[zPs[j+i*quelle._xSteps]['x'] + (zPs[j+i*quelle._xSteps]['y'] + 1)*_xSteps] + (1-zGs[j+i*quelle._xSteps]['x'])*zGs[j+i*quelle._xSteps]['y']; + zAs[zPs[j+i*quelle._xSteps]['x'] + 1 + (zPs[j+i*quelle._xSteps]['y'] + 1)*_xSteps]:= + zAs[zPs[j+i*quelle._xSteps]['x'] + 1 + (zPs[j+i*quelle._xSteps]['y'] + 1)*_xSteps] + zGs[j+i*quelle._xSteps]['x']*zGs[j+i*quelle._xSteps]['y']; end; end else begin @@ -1742,58 +1743,58 @@ begin tMax, x0Abs, t0Abs, - mt div 2 + byte(odd(mt) and b), + mT div 2 + byte(odd(mT) and b), epsilon, verzerrung, verzerrAnzahl, - ZPs, - ZGs, + zPs, + zGs, Warn); while not (vits[false].fertig and vits[true].fertig) do sleep(10); - for i:=0 to length(ZAs)-1 do - ZAs[i]:= - vits[false].ZAs[i] + - vits[true].ZAs[i]; + for i:=0 to length(zAs)-1 do + zAs[i]:= + vits[false].zAs[i] + + vits[true].zAs[i]; for b:=false to true do vits[b].free; end; if oberst then - for i:=0 to length(ZAs)-1 do - if ZAs[i]<epsilon then begin + for i:=0 to length(zAs)-1 do + if zAs[i]<epsilon then begin if Warn=wsStreng then - gibAus('Warnung: Erhöhe Divisor ['+inttostr(i)+':'+inttostr(i mod _xsteps)+','+inttostr(i div _xsteps)+'] von '+floattostr(ZAs[i])+' auf epsilon='+floattostr(epsilon)+'.',1); - ZAs[i]:=epsilon; + gibAus('Warnung: Erhöhe Divisor ['+intToStr(i)+':'+intToStr(i mod _xSteps)+','+intToStr(i div _xSteps)+'] von '+floatToStr(zAs[i])+' auf epsilon='+floatToStr(epsilon)+'.',1); + zAs[i]:=epsilon; end; end; -function tWerte.xscale: extended; +function tWerte.xScale: extended; begin - if Transformationen.xstop=Transformationen.xstart then result:=1 - else result:=(Transformationen.xstop-Transformationen.xstart)/(Transformationen.xsteps-1); + if transformationen.xStop=transformationen.xStart then result:=1 + else result:=(transformationen.xStop-transformationen.xStart)/(transformationen.xSteps-1); end; -function tWerte.tscale: extended; +function tWerte.tScale: extended; begin - if Transformationen.tstop=Transformationen.tstart then result:=1 - else result:=(Transformationen.tstop-Transformationen.tstart)/(Transformationen.tsiz-1); + if transformationen.tStop=transformationen.tStart then result:=1 + else result:=(transformationen.tStop-transformationen.tStart)/(transformationen.tSiz-1); end; -function tWerte.dichtenParameterErkannt(st: boolean; s: string; var bekannteBefehle: tMyStringList; threads,xmin,xmax,tmin,tmax: longint): boolean; +function tWerte.dichtenParameterErkannt(sT: boolean; s: string; var bekannteBefehle: tMyStringList; threads,xMin,xMax,tMin,tMax: longint): boolean; begin result:=true; bekannteBefehle.add('''maximale und minimale Dichten bestimmen'''); bekannteBefehle.add('''maximale und minimale Dichten bestimmen (symmetrisch)'''); if startetMit('maximale und minimale Dichten bestimmen',s) then begin - ermittleMinMaxDichten(st,threads,xmin,xmax,tmin,tmax,s='(symmetrisch)'); + ermittleMinMaxDichten(sT,threads,xMin,xMax,tMin,tMax,s='(symmetrisch)'); exit; end; if istDasBefehl('Minimaldichte:',s,bekannteBefehle,true) then begin - _minW:=exprtofloat(st,s); + _minW:=exprToFloat(sT,s); exit; end; if istDasBefehl('Maximaldichte:',s,bekannteBefehle,true) then begin - _maxW:=exprtofloat(st,s); + _maxW:=exprToFloat(sT,s); exit; end; result:=false; @@ -1808,9 +1809,9 @@ function tWerte.kont2disk(dir: char; x: extended): longint; begin case dir of 'x': - result:=min(_xsteps-1,max(0,round(kont2diskFak(dir,x-Transformationen.xstart)))); + result:=min(_xSteps-1,max(0,round(kont2diskFak(dir,x-transformationen.xStart)))); 'y','t': - result:=min(_tsiz-1,max(0,round(kont2diskFak(dir,x-Transformationen.tstart)))); + result:=min(_tSiz-1,max(0,round(kont2diskFak(dir,x-transformationen.tStart)))); else result:=-1; end; @@ -1825,9 +1826,9 @@ function tWerte.kont2diskFak(dir: char; x: extended): extended; begin case dir of 'x': - result:=x*(_xsteps-1)/(Transformationen.xstop-Transformationen.xstart); + result:=x*(_xSteps-1)/(transformationen.xStop-transformationen.xStart); 'y','t': - result:=x*(_tsiz-1)/(Transformationen.tstop-Transformationen.tstart); + result:=x*(_tSiz-1)/(transformationen.tStop-transformationen.tStart); else result:=-1; end; @@ -1837,9 +1838,9 @@ function tWerte.disk2kont(dir: char; x: longint): extended; begin case dir of 'x': - result:=disk2kontFak(dir,x)+Transformationen.xstart; + result:=disk2kontFak(dir,x)+transformationen.xStart; 'y','t': - result:=disk2kontFak(dir,x)+Transformationen.tstart; + result:=disk2kontFak(dir,x)+transformationen.tStart; else result:=nan; end; @@ -1854,9 +1855,9 @@ function tWerte.disk2kontFak(dir: char; x: longint): extended; begin case dir of 'x': - result:=x/(_xsteps-1)*(Transformationen.xstop-Transformationen.xstart); + result:=x/(_xSteps-1)*(transformationen.xStop-transformationen.xStart); 'y','t': - result:=x/(_tsiz-1)*(Transformationen.tstop-Transformationen.tstart); + result:=x/(_tSiz-1)*(transformationen.tStop-transformationen.tStart); else result:=nan; end; @@ -1864,7 +1865,7 @@ end; procedure tWerte.schreibeWertIntegriert(var f: textfile; i: longint; hor: boolean); begin - case Genauigkeit of + case genauigkeit of gSingle: sWerte.schreibeWertIntegriert(f,i,hor); gDouble: @@ -1874,7 +1875,19 @@ begin end{of case}; end; -function tWerte.ladeDateien(st: boolean; f: tMyStringlist; pl,sa: boolean): boolean; +procedure tWerte.holeRAM(ausgaben: byte); +begin + case genauigkeit of + gSingle: + sWerte.holeRAM(ausgaben); + gDouble: + dWerte.holeRAM(ausgaben); + gExtended: + eWerte.holeRAM(ausgaben); + end{of case}; +end; + +function tWerte.ladeDateien(sT: boolean; f: tMyStringList; pl,sA: boolean): boolean; var inputs: tGenerischeInputDateiInfoArray; @@ -1885,14 +1898,14 @@ begin for ii:=0 to length(inputs)-1 do if assigned(inputs[ii]) then inputs[ii].free; - setlength(inputs,0); + setLength(inputs,0); end; begin result:=false; - warteaufBeendigungDesLeseThreads; - Transformationen:=tKeineTransformation.create; - Genauigkeit:=gSingle; + warteAufBeendigungDesLeseThreads; + transformationen:=tKeineTransformation.create; + genauigkeit:=gSingle; if not ermittleExterneInputParameter(f,inputs) then begin aufraeumen; exit; @@ -1901,21 +1914,14 @@ begin aufraeumen; exit; end; - if not st then begin - case Genauigkeit of - gSingle: - sWerte.holeRam(3*byte(sa)); - gDouble: - dWerte.holeRam(3*byte(sa)); - gExtended: - eWerte.holeRam(3*byte(sa)); - end{of case}; + if not sT then begin + holeRAM(3*byte(sA)); if pl then begin leseThread:=tLeseThread.create(self,inputs); result:=true; end else - case Genauigkeit of + case genauigkeit of gSingle: result:=sWerte.liesDateien(inputs); gDouble: @@ -1926,11 +1932,11 @@ begin end else result:=true; - Transformationen.xsteps:=_xsteps; - Transformationen.tsiz:=_tsiz; + transformationen.xSteps:=_xSteps; + transformationen.tSiz:=_tSiz; end; -function tWerte.ladeAscii(st: boolean; datei: string): boolean; +function tWerte.ladeAscii(sT: boolean; datei: string): boolean; var i,j,k: integer; Zeit: extended; @@ -1938,17 +1944,17 @@ var s,t: string; begin result:=false; - warteaufBeendigungDesLeseThreads; - Genauigkeit:=gExtended; - _tsiz:=-100; + warteAufBeendigungDesLeseThreads; + genauigkeit:=gExtended; + _tSiz:=-100; - Transformationen:=tKeineTransformation.create; + transformationen:=tKeineTransformation.create; - Transformationen.tstart:=-100; - Transformationen.tstop:=-100; - _xsteps:=-100; - Transformationen.xstart:=-100; - Transformationen.xstop:=-100; + transformationen.tStart:=-100; + transformationen.tStop:=-100; + _xSteps:=-100; + transformationen.xStart:=-100; + transformationen.xStop:=-100; _np:=-100; _beta:=-100; assignFile(g,datei); @@ -1958,56 +1964,56 @@ begin s:=erstesArgument(s,'#'); if s='' then continue; if s='Header Ende' then break; - if startetMit('tsiz',s) then begin - _tsiz:=strtoint(s); + if startetMit('tSiz',s) then begin + _tSiz:=strtoint(s); continue; end; - if startetMit('tstart',s) then begin - Transformationen.tstart:=exprtofloat(st,s); + if startetMit('tStart',s) then begin + transformationen.tStart:=exprToFloat(sT,s); continue; end; - if startetMit('tstop',s) then begin - Transformationen.tstop:=exprtofloat(st,s); + if startetMit('tStop',s) then begin + transformationen.tStop:=exprToFloat(sT,s); continue; end; - if startetMit('xsteps',s) then begin - _xsteps:=strtoint(s); + if startetMit('xSteps',s) then begin + _xSteps:=strtoint(s); continue; end; - if startetMit('xstart',s) then begin - Transformationen.xstart:=exprtofloat(st,s); + if startetMit('xStart',s) then begin + transformationen.xStart:=exprToFloat(sT,s); continue; end; - if startetMit('xstop',s) then begin - Transformationen.xstop:=exprtofloat(st,s); + if startetMit('xStop',s) then begin + transformationen.xStop:=exprToFloat(sT,s); continue; end; if startetMit('np',s) then begin - _np:=exprtofloat(st,s); + _np:=exprToFloat(sT,s); continue; end; if startetMit('beta',s) then begin - _beta:=exprtofloat(st,s); + _beta:=exprToFloat(sT,s); continue; end; gibAus('Verstehe Option '''+s+''' in Asci-Input-Datei '''+datei+''' nicht!',3); - closefile(g); + closeFile(g); exit; end; - if (_tsiz=-100) or - (Transformationen.tstart=-100) or - (Transformationen.tstop=-100) or - (_xsteps=-100) or - (Transformationen.xstart=-100) or - (Transformationen.xstop=-100) or + if (_tSiz=-100) or + (transformationen.tStart=-100) or + (transformationen.tStop=-100) or + (_xSteps=-100) or + (transformationen.xStart=-100) or + (transformationen.xStop=-100) or (_np=-100) or (_beta=-100) then begin gibAus('Ungenügende Informationen über Raumzeitfenster in Asci-Input-Datei '''+datei+'''!',3); - closefile(g); + closeFile(g); exit; end; - if not st then begin - eWerte.holeRam(3); + if not sT then begin + holeRAM(3); gibAus('Datei einlesen ...',3); end; Zeit:=now; @@ -2016,7 +2022,7 @@ begin repeat if eof(g) then begin gibAus('Unerwartetes Dateiende in Asci-Input-Datei '''+datei+'''!',3); - closefile(g); + closeFile(g); exit; end; readln(g,t); @@ -2029,41 +2035,41 @@ begin until (i=0) and (length(s)>0); if not eof(g) then begin gibAus('Zu viele Zeilen in Asci-Input-Datei '''+datei+'''!',3); - closefile(g); + closeFile(g); exit; end; - closefile(g); + closeFile(g); k:=1; while s[k]<>'{' do inc(k); inc(k); - for i:=0 to _tsiz-1 do begin + for i:=0 to _tSiz-1 do begin while s[k]<>'{' do inc(k); - for j:=0 to _xsteps-1 do begin + for j:=0 to _xSteps-1 do begin t:=''; while not (s[k] in [',','}']) do begin if s[k] in ['-','0'..'9','e','E','.'] then t:=t+s[k]; if s[k] = '^' then t:=t+'E'; inc(k); end; - if (s[k]='}') xor (j=_xsteps-1) then begin - gibAus('Falsche Anzahl an Datenspalten in Asci-Input-Datei '''+datei+''' in Datenzeile '+inttostr(i+1)+'!',3); + if (s[k]='}') xor (j=_xSteps-1) then begin + gibAus('Falsche Anzahl an Datenspalten in Asci-Input-Datei '''+datei+''' in Datenzeile '+intToStr(i+1)+'!',3); exit; end; if (pos(',',t)>0) and (pos('e',t)=0) and (pos('E',t)=0) then t:=t+'0'; - if not st then - eWerte.werte[j+i*_tsiz]:=strtofloat(t); + if not sT then + eWerte.werte[j+i*_tSiz]:=strToFloat(t); inc(k); end; end; - Transformationen.xsteps:=_xsteps; - Transformationen.tsiz:=_tsiz; + transformationen.xSteps:=_xSteps; + transformationen.tSiz:=_tSiz; gibAus('... fertig '+timetostr(now-Zeit),3); result:=true; end; -function tWerte.berechneLiKo(st: boolean; f: tMyStringlist; threads: longint): boolean; +function tWerte.berechneLiKo(sT: boolean; f: tMyStringList; threads: longint): boolean; var - i,xmin,xmax,tmin,tmax: longint; + i,xMin,xMax,tMin,tMax: longint; liKo: tLiKo; s: string; fertig: boolean; @@ -2071,11 +2077,11 @@ var Zeit: extended; begin result:=false; - warteaufBeendigungDesLeseThreads; - setlength(liKo,0); - Genauigkeit:=gExtended; - _xsteps:=0; - _tsiz:=0; + warteAufBeendigungDesLeseThreads; + setLength(liKo,0); + genauigkeit:=gExtended; + _xSteps:=0; + _tSiz:=0; Zeit:=now; repeat if not f.metaReadln(s,true) then begin @@ -2083,94 +2089,94 @@ begin exit; end; if s='Ende' then break; - if startetMit('xmin:',s) then begin + if startetMit('xMin:',s) then begin if length(liKo)=0 then begin - gibAus('xmin kann erst gesetzt werden, wenn wenigstens eine Komponente bekannt ist',3); + gibAus('xMin kann erst gesetzt werden, wenn wenigstens eine Komponente bekannt ist',3); exit; end; - xmin:=liKo[0].werte.kont2disk('x',exprtofloat(st,s)); + xMin:=liKo[0].werte.kont2disk('x',exprToFloat(sT,s)); continue; end; - if startetMit('xmax:',s) then begin + if startetMit('xMax:',s) then begin if length(liKo)=0 then begin - gibAus('xmax kann erst gesetzt werden, wenn wenigstens eine Komponente bekannt ist',3); + gibAus('xMax kann erst gesetzt werden, wenn wenigstens eine Komponente bekannt ist',3); exit; end; - xmax:=liKo[0].werte.kont2disk('x',exprtofloat(st,s)); + xMax:=liKo[0].werte.kont2disk('x',exprToFloat(sT,s)); continue; end; - if startetMit('tmin:',s) then begin + if startetMit('tMin:',s) then begin if length(liKo)=0 then begin - gibAus('tmin kann erst gesetzt werden, wenn wenigstens eine Komponente bekannt ist',3); + gibAus('tMin kann erst gesetzt werden, wenn wenigstens eine Komponente bekannt ist',3); exit; end; - tmin:=liKo[0].werte.kont2disk('t',exprtofloat(st,s)); + tMin:=liKo[0].werte.kont2disk('t',exprToFloat(sT,s)); continue; end; - if startetMit('tmax:',s) then begin + if startetMit('tMax:',s) then begin if length(liKo)=0 then begin - gibAus('tmax kann erst gesetzt werden, wenn wenigstens eine Komponente bekannt ist',3); + gibAus('tMax kann erst gesetzt werden, wenn wenigstens eine Komponente bekannt ist',3); exit; end; - tmax:=liKo[0].werte.kont2disk('t',exprtofloat(st,s)); + tMax:=liKo[0].werte.kont2disk('t',exprToFloat(sT,s)); continue; end; if (s='in t auf Zweierpotenz kürzen') or (s='in y auf Zweierpotenz kürzen') then begin - i:=round(power(2,floor(ln(tmax-tmin+1)/ln(2)))); - tmax:=(tmax+tmin+i) div 2; - tmin:=tmax-i+1; + i:=round(power(2,floor(ln(tMax-tMin+1)/ln(2)))); + tMax:=(tMax+tMin+i) div 2; + tMin:=tMax-i+1; continue; end; if s='in x auf Zweierpotenz kürzen' then begin - i:=round(power(2,floor(ln(xmax-xmin+1)/ln(2)))); - xmax:=(xmax+xmin+i) div 2; - xmin:=xmax-i+1; + i:=round(power(2,floor(ln(xMax-xMin+1)/ln(2)))); + xMax:=(xMax+xMin+i) div 2; + xMin:=xMax-i+1; continue; end; - setlength(liKo,length(liKo)+1); - i:=findeWerte(erstesArgument(s),nil,wertes,Konturen,false); + setLength(liKo,length(liKo)+1); + i:=findeWerte(erstesArgument(s),nil,wertes,konturen,false); if i<0 then exit; - liKo[length(liKo)-1].alpha:=wertes^[i].exprtofloat(st,s); + liKo[length(liKo)-1].alpha:=wertes^[i].exprToFloat(sT,s); while i<0 do i:=i+length(wertes^)-1; liKo[length(liKo)-1].werte:=wertes^[i mod (length(wertes^)-1)]; - if _xsteps=0 then begin - _xsteps:=liKo[length(liKo)-1].werte._xsteps; - xmin:=0; - xmax:=_xsteps-1; - end; - if _tsiz=0 then begin - _tsiz:=liKo[length(liKo)-1].werte._tsiz; - tmin:=0; - tmax:=_tsiz-1; - end; - if _xsteps<>liKo[length(liKo)-1].werte._xsteps then begin - gibAus('Unterschiedliche Anzahl an x-Schritten: '+inttostr(_xsteps)+' bisher vs. '+inttostr(liKo[length(liKo)-1].werte._xsteps)+' bei '+inttostr(i)+'!',3); + if _xSteps=0 then begin + _xSteps:=liKo[length(liKo)-1].werte._xSteps; + xMin:=0; + xMax:=_xSteps-1; + end; + if _tSiz=0 then begin + _tSiz:=liKo[length(liKo)-1].werte._tSiz; + tMin:=0; + tMax:=_tSiz-1; + end; + if _xSteps<>liKo[length(liKo)-1].werte._xSteps then begin + gibAus('Unterschiedliche Anzahl an x-Schritten: '+intToStr(_xSteps)+' bisher vs. '+intToStr(liKo[length(liKo)-1].werte._xSteps)+' bei '+intToStr(i)+'!',3); exit; end; - if _tsiz<>liKo[length(liKo)-1].werte._tsiz then begin - gibAus('Unterschiedliche Anzahl an t-Schritten: '+inttostr(_tsiz)+' bisher vs. '+inttostr(liKo[length(liKo)-1].werte._tsiz)+' bei '+inttostr(i)+'!',3); + if _tSiz<>liKo[length(liKo)-1].werte._tSiz then begin + gibAus('Unterschiedliche Anzahl an t-Schritten: '+intToStr(_tSiz)+' bisher vs. '+intToStr(liKo[length(liKo)-1].werte._tSiz)+' bei '+intToStr(i)+'!',3); exit; end; - if liKo[length(liKo)-1].werte.Genauigkeit<>liKo[0].werte.Genauigkeit then begin + if liKo[length(liKo)-1].werte.genauigkeit<>liKo[0].werte.genauigkeit then begin gibAus('Ich bin dumm, ich kann nur Werte mit gleicher Genauigkeit zusammenrechnen!',3); exit; end; - if liKo[length(liKo)-1].werte.Transformationen.xstart<>liKo[0].werte.Transformationen.xstart then begin - gibAus('Anfangspostionen passen nicht zusammen ('+floattostr(liKo[0].werte.Transformationen.xstart)+' bisher vs. '+floattostr(liKo[length(liKo)-1].werte.Transformationen.xstart)+' bei '+inttostr(i)+')!',3); + if liKo[length(liKo)-1].werte.transformationen.xStart<>liKo[0].werte.transformationen.xStart then begin + gibAus('Anfangspostionen passen nicht zusammen ('+floatToStr(liKo[0].werte.transformationen.xStart)+' bisher vs. '+floatToStr(liKo[length(liKo)-1].werte.transformationen.xStart)+' bei '+intToStr(i)+')!',3); exit; end; - if liKo[length(liKo)-1].werte.Transformationen.xstop<>liKo[0].werte.Transformationen.xstop then begin - gibAus('Endpostionen passen nicht zusammen ('+floattostr(liKo[0].werte.Transformationen.xstop)+' bisher vs. '+floattostr(liKo[length(liKo)-1].werte.Transformationen.xstop)+' bei '+inttostr(i)+')!',3); + if liKo[length(liKo)-1].werte.transformationen.xStop<>liKo[0].werte.transformationen.xStop then begin + gibAus('Endpostionen passen nicht zusammen ('+floatToStr(liKo[0].werte.transformationen.xStop)+' bisher vs. '+floatToStr(liKo[length(liKo)-1].werte.transformationen.xStop)+' bei '+intToStr(i)+')!',3); exit; end; - if liKo[length(liKo)-1].werte.Transformationen.tstart<>liKo[0].werte.Transformationen.tstart then begin - gibAus('Anfangszeiten passen nicht zusammen ('+floattostr(liKo[0].werte.Transformationen.tstart)+' bisher vs. '+floattostr(liKo[length(liKo)-1].werte.Transformationen.tstart)+' bei '+inttostr(i)+')!',3); + if liKo[length(liKo)-1].werte.transformationen.tStart<>liKo[0].werte.transformationen.tStart then begin + gibAus('Anfangszeiten passen nicht zusammen ('+floatToStr(liKo[0].werte.transformationen.tStart)+' bisher vs. '+floatToStr(liKo[length(liKo)-1].werte.transformationen.tStart)+' bei '+intToStr(i)+')!',3); exit; end; - if liKo[length(liKo)-1].werte.Transformationen.tstop<>liKo[0].werte.Transformationen.tstop then begin - gibAus('Endzeiten passen nicht zusammen ('+floattostr(liKo[0].werte.Transformationen.tstop)+' bisher vs. '+floattostr(liKo[length(liKo)-1].werte.Transformationen.tstop)+' bei '+inttostr(i)+')!',3); + if liKo[length(liKo)-1].werte.transformationen.tStop<>liKo[0].werte.transformationen.tStop then begin + gibAus('Endzeiten passen nicht zusammen ('+floatToStr(liKo[0].werte.transformationen.tStop)+' bisher vs. '+floatToStr(liKo[length(liKo)-1].werte.transformationen.tStop)+' bei '+intToStr(i)+')!',3); exit; end; until false; @@ -2179,24 +2185,24 @@ begin gibAus('Leere Linearkombination!',3); exit; end; - _xsteps:=xmax-xmin+1; - _tsiz:=tmax-tmin+1; - Transformationen:=tUeberlagerung.create; + _xSteps:=xMax-xMin+1; + _tSiz:=tMax-tMin+1; + transformationen:=tUeberlagerung.create; for i:=0 to length(liKo)-1 do - (Transformationen as tUeberlagerung).addKomponente(liKo[i].werte.Transformationen); - Transformationen:=tKoordinatenAusschnitt.create(Transformationen,xmin,xmax,tmin,tmax); + (transformationen as tUeberlagerung).addKomponente(liKo[i].werte.transformationen); + transformationen:=tKoordinatenAusschnitt.create(transformationen,xMin,xMax,tMin,tMax); _np:=liKo[0].werte._np; _beta:=liKo[0].werte._beta; - if st then begin + if sT then begin result:=true; exit; end; - eWerte.holeRam(3); + holeRAM(3); gibAus('Berechne ...',3); Zeit:=now; - setlength(liKoThreads,threads); + setLength(liKoThreads,threads); for i:=0 to length(liKoThreads)-1 do - liKoThreads[i]:=tLiKoThread.create(@liKo,self,round(i*_xsteps/threads),round((i+1)*_xsteps/threads-1),0,_tsiz-1,xmin,tmin); + liKoThreads[i]:=tLiKoThread.create(@liKo,self,round(i*_xSteps/threads),round((i+1)*_xSteps/threads-1),0,_tSiz-1,xMin,tMin); repeat sleep(10); fertig:=true; @@ -2209,97 +2215,97 @@ begin result:=true; end; -function tWerte.berechneAgglomeration(st: boolean; var f: tMyStringlist): boolean; +function tWerte.berechneAgglomeration(sT: boolean; var f: tMyStringList): boolean; var - i,xmin,xmax,tmin,tmax: longint; + i,xMin,xMax,tMin,tMax: longint; quellen: tWerteArray; s: string; Zeit: extended; begin result:=false; - warteaufBeendigungDesLeseThreads; - setlength(quellen,0); - Genauigkeit:=gExtended; - _xsteps:=0; - _tsiz:=0; - xmin:=-1; - xmax:=-1; - tmin:=-1; - tmax:=-1; + warteAufBeendigungDesLeseThreads; + setLength(quellen,0); + genauigkeit:=gExtended; + _xSteps:=0; + _tSiz:=0; + xMin:=-1; + xMax:=-1; + tMin:=-1; + tMax:=-1; Zeit:=now; - Transformationen:=tAgglomeration.create; - (Transformationen as tAgglomeration).schritt:=-1; - (Transformationen as tAgglomeration).horizontal:=false; + transformationen:=tAgglomeration.create; + (transformationen as tAgglomeration).schritt:=-1; + (transformationen as tAgglomeration).horizontal:=false; repeat if not f.metaReadln(s,true) then begin gibAus('Unerwartetes Dateiende!',3); exit; end; if s='Ende' then break; - if startetMit('xmin:',s) then begin - xmin:=quellen[0].kont2disk('x',exprtofloat(st,s)); + if startetMit('xMin:',s) then begin + xMin:=quellen[0].kont2disk('x',exprToFloat(sT,s)); continue; end; - if startetMit('xmax:',s) then begin - xmax:=quellen[0].kont2disk('x',exprtofloat(st,s)); + if startetMit('xMax:',s) then begin + xMax:=quellen[0].kont2disk('x',exprToFloat(sT,s)); continue; end; - if startetMit('tmin:',s) then begin - tmin:=quellen[0].kont2disk('t',exprtofloat(st,s)); + if startetMit('tMin:',s) then begin + tMin:=quellen[0].kont2disk('t',exprToFloat(sT,s)); continue; end; - if startetMit('tmax:',s) then begin - tmax:=quellen[0].kont2disk('t',exprtofloat(st,s)); + if startetMit('tMax:',s) then begin + tMax:=quellen[0].kont2disk('t',exprToFloat(sT,s)); continue; end; if startetMit('Schritt:',s) then begin - (Transformationen as tAgglomeration).schritt:=exprtofloat(st,s); + (transformationen as tAgglomeration).schritt:=exprToFloat(sT,s); continue; end; if startetMit('Nullposition:',s) then begin - (Transformationen as tAgglomeration).nullposition:=exprtofloat(st,s); + (transformationen as tAgglomeration).nullposition:=exprToFloat(sT,s); continue; end; if s='waagerecht' then begin - (Transformationen as tAgglomeration).horizontal:=true; + (transformationen as tAgglomeration).horizontal:=true; continue; end; if s='senkrecht' then begin - (Transformationen as tAgglomeration).horizontal:=true; + (transformationen as tAgglomeration).horizontal:=true; continue; end; - setlength(quellen,length(quellen)+1); - i:=findeWerte(erstesArgument(s),nil,wertes,Konturen,false); + setLength(quellen,length(quellen)+1); + i:=findeWerte(erstesArgument(s),nil,wertes,konturen,false); if (i<0) or (wertes^[i]=self) then exit; quellen[length(quellen)-1]:=wertes^[i]; if length(quellen)=1 then begin - _xsteps:=quellen[0]._xsteps; - _tsiz:=quellen[0]._tsiz; + _xSteps:=quellen[0]._xSteps; + _tSiz:=quellen[0]._tSiz; end; - if _xsteps<>quellen[length(quellen)-1]._xsteps then begin - gibAus('Unterschiedliche Anzahl an x-Schritten: '+inttostr(_xsteps)+' bisher vs. '+inttostr(quellen[length(quellen)-1]._xsteps)+' bei '+inttostr(i)+'!',3); + if _xSteps<>quellen[length(quellen)-1]._xSteps then begin + gibAus('Unterschiedliche Anzahl an x-Schritten: '+intToStr(_xSteps)+' bisher vs. '+intToStr(quellen[length(quellen)-1]._xSteps)+' bei '+intToStr(i)+'!',3); exit; end; - if _tsiz<>quellen[length(quellen)-1]._tsiz then begin - gibAus('Unterschiedliche Anzahl an t-Schritten: '+inttostr(_tsiz)+' bisher vs. '+inttostr(quellen[length(quellen)-1]._tsiz)+' bei '+inttostr(i)+'!',3); + if _tSiz<>quellen[length(quellen)-1]._tSiz then begin + gibAus('Unterschiedliche Anzahl an t-Schritten: '+intToStr(_tSiz)+' bisher vs. '+intToStr(quellen[length(quellen)-1]._tSiz)+' bei '+intToStr(i)+'!',3); exit; end; - if quellen[length(quellen)-1].Transformationen.xstart<>quellen[0].Transformationen.xstart then begin - gibAus('Anfangspostionen passen nicht zusammen ('+floattostr(quellen[0].Transformationen.xstart)+' bisher vs. '+floattostr(quellen[length(quellen)-1].Transformationen.xstart)+' bei '+inttostr(i)+')!',3); + if quellen[length(quellen)-1].transformationen.xStart<>quellen[0].transformationen.xStart then begin + gibAus('Anfangspostionen passen nicht zusammen ('+floatToStr(quellen[0].transformationen.xStart)+' bisher vs. '+floatToStr(quellen[length(quellen)-1].transformationen.xStart)+' bei '+intToStr(i)+')!',3); exit; end; - if quellen[length(quellen)-1].Transformationen.xstop<>quellen[0].Transformationen.xstop then begin - gibAus('Endpostionen passen nicht zusammen ('+floattostr(quellen[0].Transformationen.xstop)+' bisher vs. '+floattostr(quellen[length(quellen)-1].Transformationen.xstop)+' bei '+inttostr(i)+')!',3); + if quellen[length(quellen)-1].transformationen.xStop<>quellen[0].transformationen.xStop then begin + gibAus('Endpostionen passen nicht zusammen ('+floatToStr(quellen[0].transformationen.xStop)+' bisher vs. '+floatToStr(quellen[length(quellen)-1].transformationen.xStop)+' bei '+intToStr(i)+')!',3); exit; end; - if quellen[length(quellen)-1].Transformationen.tstart<>quellen[0].Transformationen.tstart then begin - gibAus('Anfangszeiten passen nicht zusammen ('+floattostr(quellen[0].Transformationen.tstart)+' bisher vs. '+floattostr(quellen[length(quellen)-1].Transformationen.tstart)+' bei '+inttostr(i)+')!',3); + if quellen[length(quellen)-1].transformationen.tStart<>quellen[0].transformationen.tStart then begin + gibAus('Anfangszeiten passen nicht zusammen ('+floatToStr(quellen[0].transformationen.tStart)+' bisher vs. '+floatToStr(quellen[length(quellen)-1].transformationen.tStart)+' bei '+intToStr(i)+')!',3); exit; end; - if quellen[length(quellen)-1].Transformationen.tstop<>quellen[0].Transformationen.tstop then begin - gibAus('Endzeiten passen nicht zusammen ('+floattostr(quellen[0].Transformationen.tstop)+' bisher vs. '+floattostr(quellen[length(quellen)-1].Transformationen.tstop)+' bei '+inttostr(i)+')!',3); + if quellen[length(quellen)-1].transformationen.tStop<>quellen[0].transformationen.tStop then begin + gibAus('Endzeiten passen nicht zusammen ('+floatToStr(quellen[0].transformationen.tStop)+' bisher vs. '+floatToStr(quellen[length(quellen)-1].transformationen.tStop)+' bei '+intToStr(i)+')!',3); exit; end; until false; @@ -2309,63 +2315,63 @@ begin exit; end; - if xmin<0 then - xmin:=0; - if xmax<0 then - xmax:=quellen[0].Transformationen.xsteps-1; - if tmin<0 then - tmin:=0; - if tmax<0 then - tmax:=quellen[0].Transformationen.tsiz-1; + if xMin<0 then + xMin:=0; + if xMax<0 then + xMax:=quellen[0].transformationen.xSteps-1; + if tMin<0 then + tMin:=0; + if tMax<0 then + tMax:=quellen[0].transformationen.tSiz-1; for i:=0 to length(quellen)-1 do - (Transformationen as tAgglomeration).addKomponente( + (transformationen as tAgglomeration).addKomponente( tKoordinatenAusschnitt.create( - quellen[i].Transformationen, - xmin,xmax,tmin,tmax) + quellen[i].transformationen, + xMin,xMax,tMin,tMax) ); - _xsteps:=Transformationen.xsteps; - _tsiz:=Transformationen.tsiz; + _xSteps:=transformationen.xSteps; + _tSiz:=transformationen.tSiz; - _minW:=Transformationen.wmin; - _maxW:=Transformationen.wmax; + _minW:=transformationen.wMin; + _maxW:=transformationen.wMax; _np:=quellen[0]._np; _beta:=quellen[0]._beta; - if st then begin + if sT then begin result:=true; exit; end; - eWerte.holeRam(3); + holeRAM(3); gibAus('Berechne ...',3); Zeit:=now; for i:=0 to length(quellen)-1 do - case quellen[i].Genauigkeit of + case quellen[i].genauigkeit of gSingle: eWerte.kopiereVonNach( pTLLWerteSingle(@quellen[i].sWerte), - xmin,xmax, - tmin,tmax, - (1+xmax-xmin)*i*byte((Transformationen as tAgglomeration).horizontal), - (1+tmax-tmin)*i*byte(not (Transformationen as tAgglomeration).horizontal) + xMin,xMax, + tMin,tMax, + (1+xMax-xMin)*i*byte((transformationen as tAgglomeration).horizontal), + (1+tMax-tMin)*i*byte(not (transformationen as tAgglomeration).horizontal) ); gDouble: eWerte.kopiereVonNach( pTLLWerteDouble(@quellen[i].dWerte), - xmin,xmax, - tmin,tmax, - (1+xmax-xmin)*i*byte((Transformationen as tAgglomeration).horizontal), - (1+tmax-tmin)*i*byte(not (Transformationen as tAgglomeration).horizontal) + xMin,xMax, + tMin,tMax, + (1+xMax-xMin)*i*byte((transformationen as tAgglomeration).horizontal), + (1+tMax-tMin)*i*byte(not (transformationen as tAgglomeration).horizontal) ); gExtended: eWerte.kopiereVonNach( pTLLWerteExtended(@quellen[i].eWerte), - xmin,xmax, - tmin,tmax, - (1+xmax-xmin)*i*byte((Transformationen as tAgglomeration).horizontal), - (1+tmax-tmin)*i*byte(not (Transformationen as tAgglomeration).horizontal) + xMin,xMax, + tMin,tMax, + (1+xMax-xMin)*i*byte((transformationen as tAgglomeration).horizontal), + (1+tMax-tMin)*i*byte(not (transformationen as tAgglomeration).horizontal) ); end; @@ -2373,9 +2379,9 @@ begin result:=true; end; -function tWerte.berechneQuotient(st: boolean; f: tMyStringlist; threads, dividend, divisor: longint): boolean; +function tWerte.berechneQuotient(sT: boolean; f: tMyStringList; threads, dividend, divisor: longint): boolean; var - i,xmin,xmax,tmin,tmax: longint; + i,xMin,xMax,tMin,tMax: longint; s: string; fertig: boolean; quotientThreads: array of tQuotientThread; @@ -2383,18 +2389,18 @@ var bekannteBefehle: tMyStringList; begin result:=false; - warteaufBeendigungDesLeseThreads; + warteAufBeendigungDesLeseThreads; Zeit:=now; - Transformationen:=tUeberlagerung.create; - (Transformationen as tUeberlagerung).addKomponente(wertes^[dividend].Transformationen); - (Transformationen as tUeberlagerung).addKomponente(wertes^[divisor].Transformationen); - _xsteps:=wertes^[dividend]._xsteps; - xmin:=0; - xmax:=_xsteps-1; - _tsiz:=wertes^[dividend]._tsiz; - tmin:=0; - tmax:=_tsiz-1; + transformationen:=tUeberlagerung.create; + (transformationen as tUeberlagerung).addKomponente(wertes^[dividend].transformationen); + (transformationen as tUeberlagerung).addKomponente(wertes^[divisor].transformationen); + _xSteps:=wertes^[dividend]._xSteps; + xMin:=0; + xMax:=_xSteps-1; + _tSiz:=wertes^[dividend]._tSiz; + tMin:=0; + tMax:=_tSiz-1; _np:=wertes^[dividend]._np; _beta:=wertes^[dividend]._beta; epsilon:=1e-9; @@ -2408,24 +2414,24 @@ begin end; bekannteBefehle.clear; if istDasBefehl('Ende',s,bekannteBefehle,false) then break; - if istDasBefehl('xmin:',s,bekannteBefehle,true) then begin - xmin:=kont2disk('x',exprtofloat(st,s)); + if istDasBefehl('xMin:',s,bekannteBefehle,true) then begin + xMin:=kont2disk('x',exprToFloat(sT,s)); continue; end; - if istDasBefehl('xmax:',s,bekannteBefehle,true) then begin - xmax:=kont2disk('x',exprtofloat(st,s)); + if istDasBefehl('xMax:',s,bekannteBefehle,true) then begin + xMax:=kont2disk('x',exprToFloat(sT,s)); continue; end; - if istDasBefehl('tmin:',s,bekannteBefehle,true) then begin - tmin:=kont2disk('t',exprtofloat(st,s)); + if istDasBefehl('tMin:',s,bekannteBefehle,true) then begin + tMin:=kont2disk('t',exprToFloat(sT,s)); continue; end; - if istDasBefehl('tmax:',s,bekannteBefehle,true) then begin - tmax:=kont2disk('t',exprtofloat(st,s)); + if istDasBefehl('tMax:',s,bekannteBefehle,true) then begin + tMax:=kont2disk('t',exprToFloat(sT,s)); continue; end; if istDasBefehl('epsilon:',s,bekannteBefehle,true) then begin - epsilon:=exprtofloat(st,s); + epsilon:=exprToFloat(sT,s); continue; end; bekannteBefehle.sort; @@ -2435,32 +2441,32 @@ begin until false; bekannteBefehle.free; - _xsteps:=xmax-xmin+1; - _tsiz:=tmax-tmin+1; - if (wertes^[dividend].Transformationen.xstart<>wertes^[divisor].Transformationen.xstart) or - (wertes^[dividend].Transformationen.xstop<>wertes^[divisor].Transformationen.xstop) or - (wertes^[dividend].Transformationen.tstart<>wertes^[divisor].Transformationen.tstart) or - (wertes^[dividend].Transformationen.tstop<>wertes^[divisor].Transformationen.tstop) or - (wertes^[dividend]._xsteps<>wertes^[divisor]._xsteps) or - (wertes^[dividend]._tsiz<>wertes^[divisor]._tsiz) then begin + _xSteps:=xMax-xMin+1; + _tSiz:=tMax-tMin+1; + if (wertes^[dividend].transformationen.xStart<>wertes^[divisor].transformationen.xStart) or + (wertes^[dividend].transformationen.xStop<>wertes^[divisor].transformationen.xStop) or + (wertes^[dividend].transformationen.tStart<>wertes^[divisor].transformationen.tStart) or + (wertes^[dividend].transformationen.tStop<>wertes^[divisor].transformationen.tStop) or + (wertes^[dividend]._xSteps<>wertes^[divisor]._xSteps) or + (wertes^[dividend]._tSiz<>wertes^[divisor]._tSiz) then begin // gibAus('Dividend und Divisor haben verschiedene Abmessungen oder verschiedene Genauigkeiten, sowas verstehe ich nicht!',3); gibAus('Dividend und Divisor haben verschiedene Abmessungen, sowas verstehe ich nicht!',3); exit; end; - Transformationen:=tKoordinatenAusschnitt.create(Transformationen,xmin,xmax,tmin,tmax); + transformationen:=tKoordinatenAusschnitt.create(transformationen,xMin,xMax,tMin,tMax); _np:=wertes^[dividend]._np; _beta:=wertes^[dividend]._beta; - Genauigkeit:=gExtended; - if st then begin + genauigkeit:=gExtended; + if sT then begin result:=true; exit; end; - eWerte.holeRam(3); + holeRAM(3); gibAus('Berechne ...',3); Zeit:=now; - setlength(quotientThreads,threads); + setLength(quotientThreads,threads); for i:=0 to length(quotientThreads)-1 do - quotientThreads[i]:=tQuotientThread.create(wertes^[dividend],wertes^[divisor],self,epsilon,round(i*_xsteps/threads),round((i+1)*_xsteps/threads-1),0,_tsiz-1,xmin,tmin); + quotientThreads[i]:=tQuotientThread.create(wertes^[dividend],wertes^[divisor],self,epsilon,round(i*_xSteps/threads),round((i+1)*_xSteps/threads-1),0,_tSiz-1,xMin,tMin); repeat sleep(10); fertig:=true; @@ -2473,9 +2479,9 @@ begin result:=true; end; -function tWerte.berechneProdukt(st: boolean; f: tMyStringlist; threads, faktor1, faktor2: longint): boolean; +function tWerte.berechneProdukt(sT: boolean; f: tMyStringList; threads, faktor1, faktor2: longint): boolean; var - i,xmin,xmax,tmin,tmax: longint; + i,xMin,xMax,tMin,tMax: longint; s: string; fertig: boolean; produktThreads: array of tProduktThread; @@ -2483,18 +2489,18 @@ var bekannteBefehle: tMyStringList; begin result:=false; - warteaufBeendigungDesLeseThreads; + warteAufBeendigungDesLeseThreads; Zeit:=now; - Transformationen:=tUeberlagerung.create; - (Transformationen as tUeberlagerung).addKomponente(wertes^[faktor1].Transformationen); - (Transformationen as tUeberlagerung).addKomponente(wertes^[faktor2].Transformationen); - _xsteps:=Transformationen.xsteps; - xmin:=0; - xmax:=_xsteps-1; - _tsiz:=Transformationen.tsiz; - tmin:=0; - tmax:=_tsiz-1; + transformationen:=tUeberlagerung.create; + (transformationen as tUeberlagerung).addKomponente(wertes^[faktor1].transformationen); + (transformationen as tUeberlagerung).addKomponente(wertes^[faktor2].transformationen); + _xSteps:=transformationen.xSteps; + xMin:=0; + xMax:=_xSteps-1; + _tSiz:=transformationen.tSiz; + tMin:=0; + tMax:=_tSiz-1; _np:=wertes^[faktor1]._np; _beta:=wertes^[faktor1]._beta; Zeit:=now; @@ -2507,20 +2513,20 @@ begin end; bekannteBefehle.clear; if istDasBefehl('Ende',s,bekannteBefehle,false) then break; - if istDasBefehl('xmin:',s,bekannteBefehle,true) then begin - xmin:=kont2disk('x',exprtofloat(st,s)); + if istDasBefehl('xMin:',s,bekannteBefehle,true) then begin + xMin:=kont2disk('x',exprToFloat(sT,s)); continue; end; - if istDasBefehl('xmax:',s,bekannteBefehle,true) then begin - xmax:=kont2disk('x',exprtofloat(st,s)); + if istDasBefehl('xMax:',s,bekannteBefehle,true) then begin + xMax:=kont2disk('x',exprToFloat(sT,s)); continue; end; - if istDasBefehl('tmin:',s,bekannteBefehle,true) then begin - tmin:=kont2disk('t',exprtofloat(st,s)); + if istDasBefehl('tMin:',s,bekannteBefehle,true) then begin + tMin:=kont2disk('t',exprToFloat(sT,s)); continue; end; - if istDasBefehl('tmax:',s,bekannteBefehle,true) then begin - tmax:=kont2disk('t',exprtofloat(st,s)); + if istDasBefehl('tMax:',s,bekannteBefehle,true) then begin + tMax:=kont2disk('t',exprToFloat(sT,s)); continue; end; bekannteBefehle.sort; @@ -2530,31 +2536,31 @@ begin until false; bekannteBefehle.free; - _xsteps:=xmax-xmin+1; - _tsiz:=tmax-tmin+1; - if (wertes^[faktor1].Transformationen.xstart<>wertes^[faktor2].Transformationen.xstart) or - (wertes^[faktor1].Transformationen.xstop<>wertes^[faktor2].Transformationen.xstop) or - (wertes^[faktor1].Transformationen.tstart<>wertes^[faktor2].Transformationen.tstart) or - (wertes^[faktor1].Transformationen.tstop<>wertes^[faktor2].Transformationen.tstop) or - (wertes^[faktor1]._xsteps<>wertes^[faktor2]._xsteps) or - (wertes^[faktor1]._tsiz<>wertes^[faktor2]._tsiz) then begin + _xSteps:=xMax-xMin+1; + _tSiz:=tMax-tMin+1; + if (wertes^[faktor1].transformationen.xStart<>wertes^[faktor2].transformationen.xStart) or + (wertes^[faktor1].transformationen.xStop<>wertes^[faktor2].transformationen.xStop) or + (wertes^[faktor1].transformationen.tStart<>wertes^[faktor2].transformationen.tStart) or + (wertes^[faktor1].transformationen.tStop<>wertes^[faktor2].transformationen.tStop) or + (wertes^[faktor1]._xSteps<>wertes^[faktor2]._xSteps) or + (wertes^[faktor1]._tSiz<>wertes^[faktor2]._tSiz) then begin gibAus('Faktor1 und Faktor2 haben verschiedene Abmessungen, sowas verstehe ich nicht!',3); exit; end; - Transformationen:=tKoordinatenAusschnitt.create(Transformationen,xmin,xmax,tmin,tmax); + transformationen:=tKoordinatenAusschnitt.create(transformationen,xMin,xMax,tMin,tMax); _np:=wertes^[faktor1]._np; _beta:=wertes^[faktor1]._beta; - Genauigkeit:=gExtended; - if st then begin + genauigkeit:=gExtended; + if sT then begin result:=true; exit; end; - eWerte.holeRam(3); + holeRAM(3); gibAus('Berechne ...',3); Zeit:=now; - setlength(produktThreads,threads); + setLength(produktThreads,threads); for i:=0 to length(produktThreads)-1 do - produktThreads[i]:=tProduktThread.create(wertes^[faktor1],wertes^[faktor2],self,round(i*_xsteps/threads),round((i+1)*_xsteps/threads-1),0,_tsiz-1,xmin,tmin); + produktThreads[i]:=tProduktThread.create(wertes^[faktor1],wertes^[faktor2],self,round(i*_xSteps/threads),round((i+1)*_xSteps/threads-1),0,_tSiz-1,xMin,tMin); repeat sleep(10); fertig:=true; @@ -2567,7 +2573,7 @@ begin result:=true; end; -function tWerte.berechneKorrelation(st: boolean; f: tMyStringlist; threads: longint; quelle: tWerte): boolean; +function tWerte.berechneKorrelation(sT: boolean; f: tMyStringList; threads: longint; quelle: tWerte): boolean; var i: longint; s: string; @@ -2578,18 +2584,18 @@ var bekannteBefehle: tMyStringList; begin result:=false; - warteaufBeendigungDesLeseThreads; + warteAufBeendigungDesLeseThreads; genauigkeit:=gExtended; wavelet:=tWavelet.create; wavelet.mitFFT:=false; Zeit:=now; - Transformationen:=quelle.Transformationen; + transformationen:=quelle.transformationen; wavelet.freq:=0; wavelet.tfwhm:=1; wavelet.typ:=wtSin2; - _xsteps:=quelle._xsteps; - _tsiz:=quelle._tsiz; + _xSteps:=quelle._xSteps; + _tSiz:=quelle._tSiz; _np:=quelle._np; _beta:=quelle._beta; bekannteBefehle:=tMyStringList.create; @@ -2602,11 +2608,11 @@ begin bekannteBefehle.clear; if istDasBefehl('Ende',s,bekannteBefehle,false) then break; if istDasBefehl('freq:',s,bekannteBefehle,true) then begin - wavelet.freq:=1/kont2diskFak('t',1/exprtofloat(st,s)); + wavelet.freq:=1/kont2diskFak('t',1/exprToFloat(sT,s)); continue; end; if istDasBefehl('tfwhm:',s,bekannteBefehle,true) then begin - wavelet.tfwhm:=round(kont2diskFak('t',exprtofloat(st,s))); + wavelet.tfwhm:=round(kont2diskFak('t',exprToFloat(sT,s))); continue; end; if istDasBefehl('Wavelettyp:',s,bekannteBefehle,true) then begin @@ -2628,36 +2634,36 @@ begin until false; bekannteBefehle.free; - if st then begin + if sT then begin result:=true; exit; end; if wavelet.mitFFT then begin - gibAus('Fordere '+inttostr(floor(_tsiz*_xsteps*sizeof(extended)/1024/1024))+' MB RAM an ('+inttostr(_xsteps)+' x-Schritte mal '+inttostr(_tsiz)+' t-Schritte). ...',3); + gibAus('Fordere '+intToStr(floor(_tSiz*_xSteps*sizeOf(extended)/1024/1024))+' MB RAM an ('+intToStr(_xSteps)+' x-Schritte mal '+intToStr(_tSiz)+' t-Schritte). ...',3); gibAus(paramsDump,3); gibAus(quelle.paramsDump,3); case quelle.genauigkeit of - gSingle: eWerte.kopiereVon(st,pTLLWerteSingle(@quelle.sWerte)); - gDouble: dWerte.kopiereVon(st,pTLLWerteDouble(@quelle.dWerte)); - gExtended: eWerte.kopiereVon(st,pTLLWerteExtended(@quelle.eWerte)); + gSingle: eWerte.kopiereVon(sT,pTLLWerteSingle(@quelle.sWerte)); + gDouble: dWerte.kopiereVon(sT,pTLLWerteDouble(@quelle.dWerte)); + gExtended: eWerte.kopiereVon(sT,pTLLWerteExtended(@quelle.eWerte)); end{of case}; gibAus('... fertig '+timetostr(now-Zeit)+', berechne ...',3); end else begin genauigkeit:=gExtended; - eWerte.holeRam(3); + holeRAM(3); gibAus('Berechne ...',3); end; Zeit:=now; - wavelet.werte.params.tsiz:=_tsiz; + wavelet.werte.params.tSiz:=_tSiz; wavelet.werte.params.refreshKnownValues; if not wavelet.berechneWerte then begin gibAus('Es traten Fehler bei der Waveletberechnung auf!',3); exit; end; - setlength(korrelThreads,threads); + setLength(korrelThreads,threads); for i:=0 to length(korrelThreads)-1 do - korrelThreads[i]:=tKorrelThread.create(quelle,self,round(i*_xsteps/threads),round((i+1)*_xsteps/threads-1),wavelet); + korrelThreads[i]:=tKorrelThread.create(quelle,self,round(i*_xSteps/threads),round((i+1)*_xSteps/threads-1),wavelet); repeat sleep(10); fertig:=true; @@ -2669,37 +2675,37 @@ begin pvFehler:=pvFehler+korrelThreads[i].pvFehler; korrelThreads[i].free; end; - gibAus(' (Parseval-Fehler = '+floattostr(pvFehler/length(korrelThreads))+')',3); + gibAus(' (Parseval-Fehler = '+floatToStr(pvFehler/length(korrelThreads))+')',3); wavelet.free; gibAus('... fertig '+timetostr(now-Zeit),3); result:=true; end; -procedure tWerte.ermittleMinMaxDichten(st: boolean; threads: longint; symmetrisch: boolean); +procedure tWerte.ermittleMinMaxDichten(sT: boolean; threads: longint; symmetrisch: boolean); begin - ermittleMinMaxDichten(st,threads,0,_xsteps-1,0,_tsiz-1,symmetrisch); + ermittleMinMaxDichten(sT,threads,0,_xSteps-1,0,_tSiz-1,symmetrisch); end; -procedure tWerte.ermittleMinMaxDichten(st: boolean; threads,xmin,xmax,tmin,tmax: longint; symmetrisch: boolean); +procedure tWerte.ermittleMinMaxDichten(sT: boolean; threads,xMin,xMax,tMin,tMax: longint; symmetrisch: boolean); var i,j: longint; DTs: array of tDichteThread; fertig: boolean; Zeit: extended; begin - if st then begin + if sT then begin if _minW>=_maxW then _maxW:=_minW+1; exit; end; - warteaufBeendigungDesLeseThreads; + warteAufBeendigungDesLeseThreads; Zeit:=now; - setlength(DTs,min(threads,xmax+1-xmin)); + setLength(DTs,min(threads,xMax+1-xMin)); gibAus('Ermittle maximale und minimale Dichten ...',3); - j:=xmin; + j:=xMin; for i:=0 to length(DTs)-1 do begin - DTs[i]:=tDichteThread.create(j,Byte(i=length(DTs)-1)*xmax + Byte(i<length(DTs)-1)*(j+ ((xmax+1-xmin) div length(DTs))),tmin,tmax,self); - j:=Byte(i=length(DTs)-1)*xmax + Byte(i<length(DTs)-1)*(j+((xmax+1-xmin) div length(DTs)))+1; - gibAus('Dichtethread '+inttostr(i)+' gestartet!',1); + DTs[i]:=tDichteThread.create(j,byte(i=length(DTs)-1)*xMax + byte(i<length(DTs)-1)*(j+ ((xMax+1-xMin) div length(DTs))),tMin,tMax,self); + j:=byte(i=length(DTs)-1)*xMax + byte(i<length(DTs)-1)*(j+((xMax+1-xMin) div length(DTs)))+1; + gibAus('Dichtethread '+intToStr(i)+' gestartet!',1); end; repeat sleep(10); @@ -2715,22 +2721,22 @@ begin _minW:=min(_minW,DTs[i].minDichte); DTs[i].free; end; - gibAus('... sie sind '+myfloattostr(_minW)+' und '+myfloattostr(_maxW)+'. '+timetostr(now-Zeit),3); + gibAus('... sie sind '+myFloatToStr(_minW)+' und '+myFloatToStr(_maxW)+'. '+timetostr(now-Zeit),3); if symmetrisch then begin _minW:=min(_minW,-_maxW); _maxW:=max(_maxW,-_minW); - gibAus('Jetzt sind sie '+myfloattostr(_minW)+' und '+myfloattostr(_maxW)+'. '+timetostr(now-Zeit),3); + gibAus('Jetzt sind sie '+myFloatToStr(_minW)+' und '+myFloatToStr(_maxW)+'. '+timetostr(now-Zeit),3); end; end; -procedure tWerte.gleicheMinMaxDichtenAn(st: boolean; f: tMyStringlist; symmetrisch: boolean); +procedure tWerte.gleicheMinMaxDichtenAn(sT: boolean; f: tMyStringList; symmetrisch: boolean); var i: longint; s: string; Zeit: extended; vgWs: array of tWerte; begin - setlength(vgWs,0); + setLength(vgWs,0); repeat if not f.metaReadln(s,true) then begin @@ -2738,23 +2744,23 @@ begin exit; end; if s='Ende' then break; - setlength(vgWs,length(vgWs)+1); - vgWs[length(vgWs)-1]:=wertes^[findeWerte(s,nil,wertes,Konturen,false)]; + setLength(vgWs,length(vgWs)+1); + vgWs[length(vgWs)-1]:=wertes^[findeWerte(s,nil,wertes,konturen,false)]; until false; - if st then begin + if sT then begin if _minW>=_maxW then _maxW:=_minW+1; exit; end; - warteaufBeendigungDesLeseThreads; + warteAufBeendigungDesLeseThreads; for i:=0 to length(vgWs)-1 do vgWs[i].warteAufBeendigungDesLeseThreads; Zeit:=now; gibAus('Gleiche maximale und minimale Dichten an ...',3); for i:=0 to length(vgWs)-1 do begin - _minW:=min(_minW,vgWs[i]._minw); - _maxW:=max(_maxW,vgWs[i]._maxw); + _minW:=min(_minW,vgWs[i]._minW); + _maxW:=max(_maxW,vgWs[i]._maxW); end; if symmetrisch then begin @@ -2763,47 +2769,57 @@ begin end; for i:=0 to length(vgWs)-1 do begin - vgWs[i]._minw:=_minW; - vgWs[i]._maxw:=_maxW; + vgWs[i]._minW:=_minW; + vgWs[i]._maxW:=_maxW; end; - gibAus('... sie sind '+myfloattostr(_minW)+' und '+myfloattostr(_maxW)+'. '+timetostr(now-Zeit),3); + gibAus('... sie sind '+myFloatToStr(_minW)+' und '+myFloatToStr(_maxW)+'. '+timetostr(now-Zeit),3); if symmetrisch then begin _minW:=min(_minW,-_maxW); _maxW:=max(_maxW,-_minW); - gibAus('Jetzt sind sie '+myfloattostr(_minW)+' und '+myfloattostr(_maxW)+'. '+timetostr(now-Zeit),3); + gibAus('Jetzt sind sie '+myFloatToStr(_minW)+' und '+myFloatToStr(_maxW)+'. '+timetostr(now-Zeit),3); end; end; function tWerte.fft(threads: longint; senkrecht,invers: boolean; const vor,nach: tFFTDatenordnung; fen: tFenster; hg: extended; out pvFehler: extended; Warn: tWarnstufe): boolean; var - fftThreads: array of tFFTThread; - i: longint; - fertig: boolean; + fftThreads: array of tFFTThread; + i: int64; + fertig: boolean; begin result:=false; + + if (vor in [doAlleResIms,doAlleResSmi]) xor (nach in [doAlleResIms,doAlleResSmi]) then begin + gibAus('Eine FFT kann nicht von voll-komplex zu halb-komplex oder umgekehrt transformieren - das muss außerhalb erledigt werden ('+fftDoToStr(vor)+' -> '+fftDoToStr(nach)+')!',3); + exit; + end; + if (vor in [doGetrennt]) or (nach in [doGetrennt]) then begin + gibAus('tWerte.fft kann nicht mit getrenntem Input oder Output umgehen!',3); + exit; + end; + if senkrecht then begin if assigned(fen) and - (length(fen.Werte)<>_tsiz) then - fen.berechneWerte(_tsiz); - if threads>_xsteps then - threads:=_xsteps; + (length(fen.werte)<>_tSiz) then + fen.berechneWerte(_tSiz); + if threads>_xSteps then + threads:=_xSteps; end else begin if assigned(fen) and - (length(fen.Werte)<>_xsteps) then - fen.berechneWerte(_xsteps); - if threads>_tsiz then - threads:=_tsiz; + (length(fen.werte)<>_xSteps) then + fen.berechneWerte(_xSteps); + if threads>_tSiz then + threads:=_tSiz; end; - setlength(fftThreads,threads); + setLength(fftThreads,threads); if senkrecht then begin fftThreads[0]:= tFFTThread.create( self, 0, - round(_xsteps/threads-1), + round(_xSteps/threads-1), senkrecht, invers, vor, @@ -2814,8 +2830,8 @@ begin fftThreads[i]:= tFFTThread.create( self, - round(_xsteps/threads*i), - round(_xsteps/threads*(i+1)-1), + round(_xSteps/threads*i), + round(_xSteps/threads*(i+1)-1), senkrecht, invers, fftThreads[0].algo, @@ -2827,7 +2843,7 @@ begin tFFTThread.create( self, 0, - round(_tsiz/threads-1), + round(_tSiz/threads-1), senkrecht, invers, vor, @@ -2838,8 +2854,8 @@ begin fftThreads[i]:= tFFTThread.create( self, - round(_tsiz/threads*i), - round(_tsiz/threads*(i+1)-1), + round(_tSiz/threads*i), + round(_tSiz/threads*(i+1)-1), senkrecht, invers, fftThreads[0].algo, @@ -2861,21 +2877,21 @@ begin fftThreads[i].free; end; pvFehler:=pvFehler/length(fftThreads); - gibAus(' (Parseval-Fehler = '+floattostr(pvFehler)+')',1); + gibAus(' (Parseval-Fehler = '+floatToStr(pvFehler)+')',1); gibAus('Alle FFTThreads fertig!',1); end; -procedure tWerte.initFuerGauszFit(st: boolean; daten: tWerte; senkrecht: boolean; adLaenge: longint; adStart,adStop: extended); +procedure tWerte.initFuerGauszFit(sT: boolean; daten: tWerte; senkrecht: boolean; adLaenge: longint; adStart,adStop: extended); begin - Transformationen:=tFitTransformation.create(daten.Transformationen,senkrecht,adLaenge,adStart,adStop); - _xsteps:=Transformationen.xsteps; - _tsiz:=Transformationen.tsiz; - Genauigkeit:=gExtended; - if not st then - eWerte.holeRam(3); + transformationen:=tFitTransformation.create(daten.transformationen,senkrecht,adLaenge,adStart,adStop); + _xSteps:=transformationen.xSteps; + _tSiz:=transformationen.tSiz; + genauigkeit:=gExtended; + if not sT then + holeRAM(3); end; -function tWerte.fitteGausze(st: boolean; f: tMyStringlist; threads: longint): boolean; +function tWerte.fitteGausze(sT: boolean; f: tMyStringList; threads: longint): boolean; var Zeit: extended; senkrecht,fertig: boolean; @@ -2889,7 +2905,7 @@ var begin result:=false; Zeit:=now; - if not st then + if not sT then gibAus('Gauße fitten ...',3); ampl:=nil; br:=nil; @@ -2900,7 +2916,7 @@ begin maxBreite:=-1; maxVerschiebung:=-1; fensterBreite:=-1; - setlength(posiMitten,0); + setLength(posiMitten,0); bekannteBefehle:=tMyStringList.create; repeat if not f.metaReadln(s,true) then begin @@ -2973,20 +2989,20 @@ begin continue; end; if istDasBefehl('Maximalverschiebung:',s,bekannteBefehle,true) then begin - maxVerschiebung:=kont2diskFak(senkrecht,exprtofloat(st,s)); + maxVerschiebung:=kont2diskFak(senkrecht,exprToFloat(sT,s)); continue; end; if istDasBefehl('Maximalbreite:',s,bekannteBefehle,true) then begin - maxBreite:=kont2diskFak(senkrecht,exprtofloat(st,s)); + maxBreite:=kont2diskFak(senkrecht,exprToFloat(sT,s)); continue; end; if istDasBefehl('Fensterbreite:',s,bekannteBefehle,true) then begin - fensterBreite:=kont2diskFak(senkrecht,exprtofloat(st,s)); + fensterBreite:=kont2diskFak(senkrecht,exprToFloat(sT,s)); continue; end; if istDasBefehl('Positionsbereichsmitten:',s,bekannteBefehle,true) then begin while s<>'' do - fuegeSortiertHinzu(kont2disk(senkrecht,exprToFloat(st,erstesArgument(s))),posiMitten); + fuegeSortiertHinzu(kont2disk(senkrecht,exprToFloat(sT,erstesArgument(s))),posiMitten); continue; end; bekannteBefehle.sort; @@ -3010,30 +3026,30 @@ begin end; if assigned(ampl) then - ampl.initFuerGauszFit(st,self,senkrecht,length(posiMitten),posiMitten[0],posiMitten[length(posiMitten)-1]); + ampl.initFuerGauszFit(sT,self,senkrecht,length(posiMitten),posiMitten[0],posiMitten[length(posiMitten)-1]); if assigned(br) then - br.initFuerGauszFit(st,self,senkrecht,length(posiMitten),posiMitten[0],posiMitten[length(posiMitten)-1]); + br.initFuerGauszFit(sT,self,senkrecht,length(posiMitten),posiMitten[0],posiMitten[length(posiMitten)-1]); if assigned(posi) then - posi.initFuerGauszFit(st,self,senkrecht,length(posiMitten),posiMitten[0],posiMitten[length(posiMitten)-1]); + posi.initFuerGauszFit(sT,self,senkrecht,length(posiMitten),posiMitten[0],posiMitten[length(posiMitten)-1]); if assigned(ueberl) then - ueberl.initFuerGauszFit(st,self,senkrecht,length(posiMitten),posiMitten[0],posiMitten[length(posiMitten)-1]); + ueberl.initFuerGauszFit(sT,self,senkrecht,length(posiMitten),posiMitten[0],posiMitten[length(posiMitten)-1]); if assigned(hint) then - hint.initFuerGauszFit(st,self,senkrecht,length(posiMitten),posiMitten[0],posiMitten[length(posiMitten)-1]); + hint.initFuerGauszFit(sT,self,senkrecht,length(posiMitten),posiMitten[0],posiMitten[length(posiMitten)-1]); if senkrecht then - iterDim:=_xsteps + iterDim:=_xSteps else - iterDim:=_tsiz; + iterDim:=_tSiz; if threads > iterDim then threads:=iterDim; - if st then begin + if sT then begin result:=true; exit; end; - setlength(gauszFitThreads,threads); + setLength(gauszFitThreads,threads); for i:=0 to threads-1 do gauszFitThreads[i]:= tGauszFitThread.create( @@ -3066,9 +3082,9 @@ begin result:=true; end; -function tWerte.berechneZeitfrequenzanalyse(st: boolean; f: tMyStringlist; threads: longint; quelle: tWerte; Warn: tWarnstufe): boolean; +function tWerte.berechneZeitfrequenzanalyse(sT: boolean; f: tMyStringList; threads: longint; quelle: tWerte; Warn: tWarnstufe): boolean; var - i,tmin,tmax,qlen: longint; + i,tMin,tMax,qlen: longint; Zeit,pvFehler,total: extended; wavelet: tGauszFenster; fenster: tSin2Fenster; @@ -3078,22 +3094,22 @@ var bekannteBefehle: tMyStringList; begin result:=false; - if not ((quelle._xsteps<>1) xor (quelle._tsiz<>1)) then begin - gibAus('Eine Zeitfrequenzanalyse geht nur auf eindimensionalen Daten! ('+inttostr(quelle._xsteps)+'x'+inttostr(quelle._tsiz)+')',3); + if not ((quelle._xSteps<>1) xor (quelle._tSiz<>1)) then begin + gibAus('Eine Zeitfrequenzanalyse geht nur auf eindimensionalen Daten! ('+intToStr(quelle._xSteps)+'x'+intToStr(quelle._tSiz)+')',3); exit; end; - warteaufBeendigungDesLeseThreads; - senkrecht:=quelle._tsiz<>1; - tmin:=0; + warteAufBeendigungDesLeseThreads; + senkrecht:=quelle._tSiz<>1; + tMin:=0; rundeAuf2:=false; if senkrecht then - tmax:=quelle._tsiz-1 + tMax:=quelle._tSiz-1 else - tmax:=quelle._xsteps-1; + tMax:=quelle._xSteps-1; Zeit:=now; wavelet:=tGauszFenster.create; fenster:=tSin2Fenster.create; - Genauigkeit:=gExtended; + genauigkeit:=gExtended; bekannteBefehle:=tMyStringList.create; repeat if not f.metaReadln(s,true) then begin @@ -3105,12 +3121,12 @@ begin bekannteBefehle.clear; if istDasBefehl('Ende',s,bekannteBefehle,false) then break; if istDasBefehl('Breite:',s,bekannteBefehle,true) then begin - wavelet.breite:=quelle.kont2diskFak(senkrecht,quelle.exprtofloat(st,s)); + wavelet.breite:=quelle.kont2diskFak(senkrecht,quelle.exprToFloat(sT,s)); wavelet.aktiv:=true; continue; end; if istDasBefehl('Rand:',s,bekannteBefehle,true) then begin - fenster.rand:=round(quelle.kont2diskFak(senkrecht,quelle.exprtofloat(st,s))); + fenster.rand:=round(quelle.kont2diskFak(senkrecht,quelle.exprToFloat(sT,s))); fenster.aktiv:=true; continue; end; @@ -3123,22 +3139,22 @@ begin continue; end; if senkrecht then begin - if istDasBefehl('tmin:',s,bekannteBefehle,true) or istDasBefehl('ymin:',s,bekannteBefehle,true) then begin - tmin:=round(quelle.kont2disk('t',quelle.exprtofloat(st,s))); + if istDasBefehl('tMin:',s,bekannteBefehle,true) or istDasBefehl('yMin:',s,bekannteBefehle,true) then begin + tMin:=round(quelle.kont2disk('t',quelle.exprToFloat(sT,s))); continue; end; - if istDasBefehl('tmax:',s,bekannteBefehle,true) or istDasBefehl('ymax:',s,bekannteBefehle,true) then begin - tmax:=round(quelle.kont2disk('t',quelle.exprtofloat(st,s))); + if istDasBefehl('tMax:',s,bekannteBefehle,true) or istDasBefehl('yMax:',s,bekannteBefehle,true) then begin + tMax:=round(quelle.kont2disk('t',quelle.exprToFloat(sT,s))); continue; end; end; if senkrecht then begin - if istDasBefehl('xmin:',s,bekannteBefehle,true) then begin - tmin:=round(quelle.kont2disk('x',quelle.exprtofloat(st,s))); + if istDasBefehl('xMin:',s,bekannteBefehle,true) then begin + tMin:=round(quelle.kont2disk('x',quelle.exprToFloat(sT,s))); continue; end; - if istDasBefehl('xmax:',s,bekannteBefehle,true) then begin - tmax:=round(quelle.kont2disk('x',quelle.exprtofloat(st,s))); + if istDasBefehl('xMax:',s,bekannteBefehle,true) then begin + tMax:=round(quelle.kont2disk('x',quelle.exprToFloat(sT,s))); continue; end; end; @@ -3152,46 +3168,46 @@ begin bekannteBefehle.free; if senkrecht then - qlen:=quelle._tsiz + qlen:=quelle._tSiz else - qlen:=quelle._xsteps; + qlen:=quelle._xSteps; - tmin:=max(tmin,0); - tmax:=min(tmax,qlen-1); - _xsteps:=tmax+1-tmin; + tMin:=max(tMin,0); + tMax:=min(tMax,qlen-1); + _xSteps:=tMax+1-tMin; if rundeAuf2 then begin - _xsteps:=round(power(2,round(ln(_xsteps)/ln(2)))); - if _xsteps>qlen then - _xsteps:=_xsteps div 2; - tmax:=(tmin+tmax+_xsteps) div 2; - tmin:=tmax+1-_xsteps; - if tmin<0 then begin - tmin:=0; - tmax:=_xsteps-1; - end; - if tmax>=qlen then begin - tmax:=qlen-1; - tmin:=tmax+1-_xsteps; - end; - if tmin<0 then begin + _xSteps:=round(power(2,round(ln(_xSteps)/ln(2)))); + if _xSteps>qlen then + _xSteps:=_xSteps div 2; + tMax:=(tMin+tMax+_xSteps) div 2; + tMin:=tMax+1-_xSteps; + if tMin<0 then begin + tMin:=0; + tMax:=_xSteps-1; + end; + if tMax>=qlen then begin + tMax:=qlen-1; + tMin:=tMax+1-_xSteps; + end; + if tMin<0 then begin gibAus('Das Fenster passt nicht in die Werte - das sollte nicht passieren können! ('+ - inttostr(tmin)+'..'+ - inttostr(tmax)+': '+ - inttostr(qlen)+' ('+ - inttostr(quelle._xsteps)+'x'+ - inttostr(quelle._tsiz)+'))',3); + intToStr(tMin)+'..'+ + intToStr(tMax)+': '+ + intToStr(qlen)+' ('+ + intToStr(quelle._xSteps)+'x'+ + intToStr(quelle._tSiz)+'))',3); wavelet.free; fenster.free; exit; end; end; - _tsiz:=_xsteps; - if wavelet.breite>_xsteps then begin + _tSiz:=_xSteps; + if wavelet.breite>_xSteps then begin gibAus('Die angegebene Breite ist größer als die Anzahl der Werte! ('+ floattostrtrunc(wavelet.breite,2,true)+'>='+ - inttostr(_xsteps)+')',3); + intToStr(_xSteps)+')',3); wavelet.free; fenster.free; exit; @@ -3206,34 +3222,34 @@ begin fenster.berechneWerte(qlen,true); if senkrecht then - Transformationen:=tKoordinatenAusschnitt.create(quelle.Transformationen,0,0,tmin,tmax) + transformationen:=tKoordinatenAusschnitt.create(quelle.transformationen,0,0,tMin,tMax) else - Transformationen:=tKoordinatenAusschnitt.create(quelle.Transformationen,tmin,tmax,0,0); - Transformationen:=tDiagonaleAgglomeration.create(Transformationen); + transformationen:=tKoordinatenAusschnitt.create(quelle.transformationen,tMin,tMax,0,0); + transformationen:=tDiagonaleAgglomeration.create(transformationen); - if not st then begin + if not sT then begin total:=0; - tmin:=tmin - _xsteps div 2; - while tmin<0 do - tmin:=tmin+qlen; + tMin:=tMin - _xSteps div 2; + while tMin<0 do + tMin:=tMin+qlen; - eWerte.holeRam(3); - setlength(tmpW,2*_xsteps-1); + holeRAM(3); + setLength(tmpW,2*_xSteps-1); gibAus('kopiere Inhalt ...',3); - case quelle.Genauigkeit of + case quelle.genauigkeit of gSingle: - for i:=0 to 2*_xsteps-2 do - tmpW[i]:=quelle.sWerte.werte[(i+tmin) mod qlen] * fenster.werte[(i+tmin) mod qlen]; + for i:=0 to 2*_xSteps-2 do + tmpW[i]:=quelle.sWerte.werte[(i+tMin) mod qlen] * fenster.werte[(i+tMin) mod qlen]; gDouble: - for i:=0 to 2*_xsteps-2 do - tmpW[i]:=quelle.dWerte.werte[(i+tmin) mod qlen] * fenster.werte[(i+tmin) mod qlen]; + for i:=0 to 2*_xSteps-2 do + tmpW[i]:=quelle.dWerte.werte[(i+tMin) mod qlen] * fenster.werte[(i+tMin) mod qlen]; gExtended: - for i:=0 to 2*_xsteps-2 do - tmpW[i]:=quelle.eWerte.werte[(i+tmin) mod qlen] * fenster.werte[(i+tmin) mod qlen]; + for i:=0 to 2*_xSteps-2 do + tmpW[i]:=quelle.eWerte.werte[(i+tMin) mod qlen] * fenster.werte[(i+tMin) mod qlen]; end{of case}; - for i:=0 to _xsteps-1 do - move(tmpW[i],eWerte.werte[i*_xsteps],_xsteps*sizeof(extended)); + for i:=0 to _xSteps-1 do + move(tmpW[i],eWerte.werte[i*_xSteps],_xSteps*sizeOf(extended)); for i:=0 to length(eWerte.werte)-1 do total:=total+sqr(eWerte.werte[i]); gibAus('... fertig ('+floatToStr(total)+'), berechne Fouriertransformation ...',3); @@ -3246,15 +3262,15 @@ begin total:=0; for i:=0 to length(eWerte.werte)-1 do total:=total+sqr(eWerte.werte[i]); - gibAus(' (Parseval-Fehler = '+floattostr(pvFehler)+') -> '+floattostr(total),3); + gibAus(' (Parseval-Fehler = '+floatToStr(pvFehler)+') -> '+floatToStr(total),3); end; - Transformationen:=tFFTTransformation.create(Transformationen,not senkrecht,senkrecht); + transformationen:=tFFTTransformation.create(transformationen,not senkrecht,senkrecht); if senkrecht then // die zweite Hälfte der Werte ist redundant - _tsiz:=_tsiz div 2 + 1 + _tSiz:=_tSiz div 2 + 1 else - _xsteps:=_xsteps div 2 + 1; - Transformationen:=tKoordinatenAusschnitt.create(Transformationen,0,_xsteps-1,0,_tsiz-1); - if not st then + _xSteps:=_xSteps div 2 + 1; + transformationen:=tKoordinatenAusschnitt.create(transformationen,0,_xSteps-1,0,_tSiz-1); + if not sT then eWerte.holeRAM(0); gibAus('... fertig '+timetostr(now-Zeit),3); wavelet.free; @@ -3262,13 +3278,13 @@ begin result:=true; end; -function tWerte.berechneVerzerrung(st: boolean; f: tMyStringlist; threads: longint; quelle: tWerte; Warn: tWarnstufe): boolean; +function tWerte.berechneVerzerrung(sT: boolean; f: tMyStringList; threads: longint; quelle: tWerte; Warn: tWarnstufe): boolean; var i,j: longint; grenzen: t2x2Longint; - ZPs: tIntPointArray; // Zielpositionen - ZGs: tExtPointArray; // Zielgewichte - ZAs: tExtendedArray; // Anzahl Quellen, die auf entsprechende Zielposition abgebildet werden + zPs: tIntPointArray; // Zielpositionen + zGs: tExtPointArray; // Zielgewichte + zAs: tExtendedArray; // Anzahl quellen, die auf entsprechende Zielposition abgebildet werden Zeit,epsilon: extended; Vorbearbeitung, Nachbearbeitung, @@ -3286,27 +3302,27 @@ begin for ii:=0 to length(verzerrThreads)-1 do if assigned(verzerrThreads[ii]) then verzerrThreads[ii].free; - setlength(verzerrThreads,0); + setLength(verzerrThreads,0); if bearbeitungenLoeschen then begin zerstoereTransformationWennObsolet(Vorbearbeitung); zerstoereTransformationWennObsolet(Nachbearbeitung); - zerstoereTransformationWennObsolet(Verzerrung); + zerstoereTransformationWennObsolet(verzerrung); end; - setlength(ZPs,0); - setlength(ZGs,0); - setlength(ZAs,0); + setLength(zPs,0); + setLength(zGs,0); + setLength(zAs,0); bekannteBefehle.free; end; begin result:=false; - warteaufBeendigungDesLeseThreads; + warteAufBeendigungDesLeseThreads; gibAus('Verzerrung berechnen ... ',3); Zeit:=now; bearbeitungenLoeschen:=true; verzerrung:=tKeineTransformation.create; verAnz:=0; epsilon:=1e-9; - Genauigkeit:=gExtended; + genauigkeit:=gExtended; Vorbearbeitung:=tKeineTransformation.create; vorAnz:=0; Nachbearbeitung:=tKeineTransformation.create; @@ -3320,13 +3336,13 @@ begin end; bekannteBefehle.clear; if istDasBefehl('Ende',s,bekannteBefehle,false) then break; - if quelle.dichtenParameterErkannt(st,s,bekannteBefehle,threads,0,_xsteps-1,0,_tsiz-1) then continue; + if quelle.dichtenParameterErkannt(sT,s,bekannteBefehle,threads,0,_xSteps-1,0,_tSiz-1) then continue; if istDasBefehl('Threadanzahl:',s,bekannteBefehle,true) then begin threads:=strtoint(s); continue; end; if istDasBefehl('Epsilon:',s,bekannteBefehle,true) then begin - epsilon:=exprtofloat(st,s); + epsilon:=exprToFloat(sT,s); continue; end; if istDasBefehl('Abbildung:',s,bekannteBefehle,true) then begin @@ -3334,24 +3350,24 @@ begin if assigned(verzerrung) then tmp.fuegeVorgaengerHinzu(verzerrung); verzerrung:=tmp; - if not (verzerrung as tKonkreteKoordinatenTransformation).initAbbildung(st,s,quelle.xscale,quelle.tscale,@exprtofloat) then begin + if not (verzerrung as tKonkreteKoordinatenTransformation).initAbbildung(sT,s,quelle.xScale,quelle.tScale,@exprToFloat) then begin gibAus('Syntaxfehler in der Funktion '''+s+'''!',3); aufraeumen; exit; end; inc(verAnz); - if not st then begin + if not sT then begin gibAus(verzerrung.dumpParams(verAnz),3); for i:=0 to 1 do for j:=0 to 1 do gibAus( - inttostr(i*(quelle._xsteps-1))+';'+inttostr(j*(quelle._tsiz-1))+' -> '+ - tExtPointToStr(verzerrung.transformiereKoordinaten(i*(quelle._xsteps-1),j*(quelle._tsiz-1),verAnz-1)),3); + intToStr(i*(quelle._xSteps-1))+';'+intToStr(j*(quelle._tSiz-1))+' -> '+ + tExtPointToStr(verzerrung.transformiereKoordinaten(i*(quelle._xSteps-1),j*(quelle._tSiz-1),verAnz-1)),3); end; continue; end; if istDasBefehl('Nachbearbeitung:',s,bekannteBefehle,true) then begin - if not liesTWerteTransformationen(st,s,f,@exprtofloat,Nachbearbeitung) then begin + if not liesTWerteTransformationen(sT,s,f,@exprToFloat,Nachbearbeitung) then begin aufraeumen; exit; end; @@ -3359,7 +3375,7 @@ begin continue; end; if istDasBefehl('Vorbearbeitung:',s,bekannteBefehle,true) then begin - if not liesTWerteTransformationen(st,s,f,@exprtofloat,Vorbearbeitung) then begin + if not liesTWerteTransformationen(sT,s,f,@exprToFloat,Vorbearbeitung) then begin aufraeumen; exit; end; @@ -3371,31 +3387,31 @@ begin aufraeumen; exit; until false; - Transformationen:=quelle.Transformationen; - Vorbearbeitung.ersetzeAnfangDurch(Transformationen); - Verzerrung.ersetzeAnfangDurch(Vorbearbeitung); + transformationen:=quelle.transformationen; + Vorbearbeitung.ersetzeAnfangDurch(transformationen); + verzerrung.ersetzeAnfangDurch(Vorbearbeitung); Nachbearbeitung.ersetzeAnfangDurch(verzerrung); - if not st then begin + if not sT then begin gibAus('... Zielausdehnung berechnen ... ',3); grenzen:=(verzerrung as tKonkreteKoordinatenTransformation).zielausdehnung; - _xsteps:=grenzen['x','y']-grenzen['x','x']+2; - _tsiz:=grenzen['y','y']-grenzen['y','x']+2; - if (_xsteps<=1) or (_tsiz<=1) then begin + _xSteps:=grenzen['x','y']-grenzen['x','x']+2; + _tSiz:=grenzen['y','y']-grenzen['y','x']+2; + if (_xSteps<=1) or (_tSiz<=1) then begin gibAus('Es passt kein Rechteck des Ziels vollständig in die Quelldaten!',3); aufraeumen; exit; end; - eWerte.holeRam(3); + holeRAM(3); gibAus('Positionen und Gewichte initialisieren ...',3); - setlength(ZPs,quelle._xsteps*quelle._tsiz); - setlength(ZGs,quelle._xsteps*quelle._tsiz); - setlength(ZAs,_xsteps*_tsiz); - initVerzerrung(quelle,0,quelle._xsteps-1,0,quelle._tsiz-1,grenzen['x','x'],grenzen['y','x'],threads,true,epsilon,verzerrung,verAnz,ZPs,ZGs,ZAs,Warn); + setLength(zPs,quelle._xSteps*quelle._tSiz); + setLength(zGs,quelle._xSteps*quelle._tSiz); + setLength(zAs,_xSteps*_tSiz); + initVerzerrung(quelle,0,quelle._xSteps-1,0,quelle._tSiz-1,grenzen['x','x'],grenzen['y','x'],threads,true,epsilon,verzerrung,verAnz,zPs,zGs,zAs,Warn); gibAus('... fertig, Threads starten',3); - setlength(verzerrThreads,threads); + setLength(verzerrThreads,threads); for i:=0 to length(verzerrThreads)-1 do - verzerrThreads[i]:=tVerzerrThread.create(quelle,self,round(i/length(verzerrThreads)*_xsteps),round((i+1)/length(verzerrThreads)*_xsteps-1),0,_tsiz-1,ZPs,ZGs,ZAs,Vorbearbeitung,Nachbearbeitung,vorAnz,nachAnz); + verzerrThreads[i]:=tVerzerrThread.create(quelle,self,round(i/length(verzerrThreads)*_xSteps),round((i+1)/length(verzerrThreads)*_xSteps-1),0,_tSiz-1,zPs,zGs,zAs,Vorbearbeitung,Nachbearbeitung,vorAnz,nachAnz); repeat fertig:=true; for i:=0 to length(verzerrThreads)-1 do @@ -3403,13 +3419,13 @@ begin if not fertig then sleep(10); until fertig; end; - Transformationen:=Nachbearbeitung; + transformationen:=Nachbearbeitung; aufraeumen; gibAus('... fertig '+timetostr(now-Zeit),3); result:=true; end; -function tWerte.berechneLambdaZuOmegaVerzerrung(st: boolean; f: tMyStringList; threads: longint; quelle: tWerte): boolean; +function tWerte.berechneLambdaZuOmegaVerzerrung(sT: boolean; f: tMyStringList; threads: longint; quelle: tWerte): boolean; var i: longint; Zeit: extended; @@ -3424,17 +3440,17 @@ begin for ii:=0 to length(verzerrLOThreads)-1 do if assigned(verzerrLOThreads[ii]) then verzerrLOThreads[ii].free; - setlength(verzerrLOThreads,0); + setLength(verzerrLOThreads,0); bekannteBefehle.free; end; begin result:=false; - warteaufBeendigungDesLeseThreads; + warteAufBeendigungDesLeseThreads; gibAus('lambda-zu-omega-Verzerrung berechnen ... ',3); Zeit:=now; - Genauigkeit:=gExtended; - Transformationen:=tLambdaZuOmegaTransformation.create; - Transformationen.fuegeVorgaengerHinzu(quelle.Transformationen); + genauigkeit:=gExtended; + transformationen:=tLambdaZuOmegaTransformation.create; + transformationen.fuegeVorgaengerHinzu(quelle.transformationen); bekannteBefehle:=tMyStringList.create; repeat @@ -3445,17 +3461,17 @@ begin end; bekannteBefehle.clear; if istDasBefehl('Ende',s,bekannteBefehle,false) then break; - if quelle.dichtenParameterErkannt(st,s,bekannteBefehle,threads,0,_xsteps-1,0,_tsiz-1) then continue; + if quelle.dichtenParameterErkannt(sT,s,bekannteBefehle,threads,0,_xSteps-1,0,_tSiz-1) then continue; if istDasBefehl('Threadanzahl:',s,bekannteBefehle,true) then begin threads:=strtoint(s); continue; end; if istDasBefehl('horizontal',s,bekannteBefehle,false) then begin - (Transformationen as tLambdaZuOmegaTransformation).horizontal:=true; + (transformationen as tLambdaZuOmegaTransformation).horizontal:=true; continue; end; if istDasBefehl('vertikal',s,bekannteBefehle,false) then begin - (Transformationen as tLambdaZuOmegaTransformation).vertikal:=true; + (transformationen as tLambdaZuOmegaTransformation).vertikal:=true; continue; end; bekannteBefehle.sort; @@ -3464,23 +3480,23 @@ begin exit; until false; - _xsteps:=quelle._xsteps; - _tsiz:=quelle._tsiz; - if not st then begin - eWerte.holeRam(3); + _xSteps:=quelle._xSteps; + _tSiz:=quelle._tSiz; + if not sT then begin + holeRAM(3); gibAus('Threads starten',3); - setlength(verzerrLOThreads,threads); + setLength(verzerrLOThreads,threads); for i:=0 to length(verzerrLOThreads)-1 do verzerrLOThreads[i]:= tVerzerrLOThread.create( quelle, self, - round(i/length(verzerrLOThreads)*_xsteps), - round((i+1)/length(verzerrLOThreads)*_xsteps-1), + round(i/length(verzerrLOThreads)*_xSteps), + round((i+1)/length(verzerrLOThreads)*_xSteps-1), 0, - _tsiz-1, - (Transformationen as tLambdaZuOmegaTransformation).verhaeltnisHorizontal, - (Transformationen as tLambdaZuOmegaTransformation).verhaeltnisVertikal); + _tSiz-1, + (transformationen as tLambdaZuOmegaTransformation).verhaeltnisHorizontal, + (transformationen as tLambdaZuOmegaTransformation).verhaeltnisVertikal); repeat fertig:=true; for i:=0 to length(verzerrLOThreads)-1 do @@ -3493,10 +3509,10 @@ begin result:=true; end; -function tWerte.entferneArtefakte(st: boolean; f: tMyStringlist; threads: longint): boolean; +function tWerte.entferneArtefakte(sT: boolean; f: tMyStringList; threads: longint): boolean; var Zeit,hintergrund: extended; - Fensters: array[boolean] of tSin2Fenster; + fensters: array[boolean] of tSin2Fenster; s: string; b,hintergrundAbziehen,fertig: boolean; fensterThreads: array of tFensterThread; @@ -3505,16 +3521,18 @@ var begin result:=false; Zeit:=now; - if not st then + if not sT then gibAus('Artefakte entfernen ...',3); for b:=false to true do - Fensters[b]:=tSin2Fenster.create; + fensters[b]:=tSin2Fenster.create; hintergrundAbziehen:=false; hintergrund:=0; bekannteBefehle:=tMyStringList.create; repeat if not f.metaReadln(s,true) then begin gibAus('Unerwartetes Dateiende!',3); + for b:=false to true do + fensters[b].free; exit; end; bekannteBefehle.clear; @@ -3525,9 +3543,9 @@ begin b:=s[1]='t'; delete(s,1,pos(':',s)); s:=trim(s); - if b then Fensters[b].Rand:=round(kont2diskFak('t',exprtofloat(st,s))) - else Fensters[b].Rand:=round(kont2diskFak('x',exprtofloat(st,s))); - Fensters[b].aktiv:=true; + if b then fensters[b].rand:=round(kont2diskFak('t',exprToFloat(sT,s))) + else fensters[b].rand:=round(kont2diskFak('x',exprToFloat(sT,s))); + fensters[b].aktiv:=true; continue; end; if istDasBefehl('Hintergrund abziehen',s,bekannteBefehle,false) then begin @@ -3540,18 +3558,18 @@ begin exit; until false; bekannteBefehle.free; - Fensters[true].Breite:=_tsiz-Fensters[true].Breite; - Fensters[false].Breite:=_xsteps-Fensters[false].Breite; + fensters[true].breite:=_tSiz-fensters[true].breite; + fensters[false].breite:=_xSteps-fensters[false].breite; - if st then begin + if sT then begin for b:=false to true do - Fensters[b].free; + fensters[b].free; result:=true; exit; end; if hintergrundAbziehen then - case Genauigkeit of + case genauigkeit of gSingle: hintergrund:=sWerte.ermittleHintergrund; gDouble: @@ -3561,15 +3579,15 @@ begin end{of case}; gibAus('Threads starten',3); - setlength(fensterThreads,threads); + setLength(fensterThreads,threads); for i:=0 to length(fensterThreads)-1 do fensterThreads[i]:= tFensterThread.create( self, - round(i/length(fensterThreads)*_xsteps), - round((i+1)/length(fensterThreads)*_xsteps-1), + round(i/length(fensterThreads)*_xSteps), + round((i+1)/length(fensterThreads)*_xSteps-1), 0, - _tsiz-1, + _tSiz-1, fensters[false], fensters[true], hintergrund); @@ -3584,10 +3602,10 @@ begin result:=true; end; -function tWerte.extrahiereEinhuellende(st: boolean; f: tMyStringlist; threads: longint; Warn: tWarnstufe): boolean; +function tWerte.extrahiereEinhuellende(sT: boolean; f: tMyStringList; threads: longint; Warn: tWarnstufe): boolean; var Zeit,pvFehler,hintergrund,xFak,yFak: extended; - Fensters: array[boolean] of tSin2Fenster; + fensters: array[boolean] of tSin2Fenster; s: string; b,hintergrundAbziehen: boolean; betraege: tWerte; @@ -3595,10 +3613,10 @@ var begin result:=false; Zeit:=now; - if not st then + if not sT then gibAus('Einhüllende extrahieren ...',3); for b:=false to true do - Fensters[b]:=tSin2Fenster.create; + fensters[b]:=tSin2Fenster.create; hintergrundAbziehen:=false; hintergrund:=0; xFak:=1; @@ -3607,6 +3625,8 @@ begin repeat if not f.metaReadln(s,true) then begin gibAus('Unerwartetes Dateiende!',3); + for b:=false to true do + fensters[b].free; exit; end; bekannteBefehle.clear; @@ -3617,9 +3637,9 @@ begin b:=s[1]='t'; delete(s,1,pos(':',s)); s:=trim(s); - if b then Fensters[b].Rand:=round(kont2diskFak('t',exprtofloat(st,s))) - else Fensters[b].Rand:=round(kont2diskFak('x',exprtofloat(st,s))); - Fensters[b].aktiv:=true; + if b then fensters[b].rand:=round(kont2diskFak('t',exprToFloat(sT,s))) + else fensters[b].rand:=round(kont2diskFak('x',exprToFloat(sT,s))); + fensters[b].aktiv:=true; continue; end; if istDasBefehl('Hintergrund abziehen',s,bekannteBefehle,false) then begin @@ -3627,8 +3647,8 @@ begin continue; end; if istDasBefehl('Abstandsmetrik',s,bekannteBefehle,true) then begin - xFak:=round(kont2diskFak('x',exprtofloat(st,erstesArgument(s)))); - yFak:=round(kont2diskFak('t',exprtofloat(st,s))); + xFak:=round(kont2diskFak('x',exprToFloat(sT,erstesArgument(s)))); + yFak:=round(kont2diskFak('t',exprToFloat(sT,s))); end; bekannteBefehle.sort; gibAus('Verstehe Option '''+s+''' nicht beim Extrahieren der Einhüllenden!'#10'Ich kenne:'#10+bekannteBefehle.text,3); @@ -3636,18 +3656,18 @@ begin exit; until false; bekannteBefehle.free; - Fensters[true].Breite:=_tsiz-Fensters[true].Breite; - Fensters[false].Breite:=_xsteps-Fensters[false].Breite; + fensters[true].breite:=_tSiz-fensters[true].breite; + fensters[false].breite:=_xSteps-fensters[false].breite; - if st then begin + if sT then begin for b:=false to true do - Fensters[b].free; + fensters[b].free; result:=true; exit; end; if hintergrundAbziehen then - case Genauigkeit of + case genauigkeit of gSingle: hintergrund:=sWerte.ermittleHintergrund; gDouble: @@ -3657,32 +3677,32 @@ begin end{of case}; gibAus('berechne t-FFT ...',3); - if not fft(threads,true,false,doRes,doResSmi,Fensters[true],hintergrund,pvFehler,Warn) then begin + if not fft(threads,true,false,doRes,doResSmi,fensters[true],hintergrund,pvFehler,Warn) then begin gibAus('Es traten Fehler auf!',3); exit; end; - gibAus(' (Parseval-Fehler = '+floattostr(pvFehler)+')',3); + gibAus(' (Parseval-Fehler = '+floatToStr(pvFehler)+')',3); gibAus('berechne x-FFT ...',3); - if not fft(threads,false,false,doRes,doResSmi,Fensters[false],0,pvFehler,Warn) then begin + if not fft(threads,false,false,doRes,doResSmi,fensters[false],0,pvFehler,Warn) then begin gibAus('Es traten Fehler auf!',3); exit; end; - gibAus(' (Parseval-Fehler = '+floattostr(pvFehler)+')',3); + gibAus(' (Parseval-Fehler = '+floatToStr(pvFehler)+')',3); for b:=false to true do - Fensters[b].free; + fensters[b].free; gibAus('spektrale Beträge ermitteln',3); - betraege:=tWerte.create(self,0,_xsteps-1); + betraege:=tWerte.create(self,0,_xSteps-1); betraege.fft2dNachbearbeitung(threads,doBetrQdr); gibAus('hohe Frequenzen filtern',3); - case Genauigkeit of + case genauigkeit of gSingle: - sWerte.filtereHoheFrequenzen(betraege.sWerte,xFak,yFak); + sWerte.kantenFilter(betraege.sWerte,xFak,yFak,kfTiefpass); gDouble: - dWerte.filtereHoheFrequenzen(betraege.dWerte,xFak,yFak); + dWerte.kantenFilter(betraege.dWerte,xFak,yFak,kfTiefpass); gExtended: - eWerte.filtereHoheFrequenzen(betraege.eWerte,xFak,yFak); + eWerte.kantenFilter(betraege.eWerte,xFak,yFak,kfTiefpass); end{of case}; betraege.free; @@ -3691,20 +3711,143 @@ begin gibAus('Es traten Fehler auf!',3); exit; end; - gibAus(' (Parseval-Fehler = '+floattostr(pvFehler)+')',3); + gibAus(' (Parseval-Fehler = '+floatToStr(pvFehler)+')',3); + gibAus('berechne inverse t-FFT ...',3); + if not fft(threads,true,true,doResSmi,doBetr,nil,hintergrund,pvFehler,Warn) then begin + gibAus('Es traten Fehler auf!',3); + exit; + end; + gibAus(' (Parseval-Fehler = '+floatToStr(pvFehler)+')',3); + gibAus('... fertig '+timetostr(now-Zeit),3); + result:=true; +end; + +function tWerte.extrahierePhase(sT: boolean; f: tMyStringList; threads: longint; Warn: tWarnstufe): boolean; +var + Zeit,pvFehler,hintergrund,xFak,yFak: extended; + fensters: array[boolean] of tSin2Fenster; + s: string; + b,hintergrundAbziehen: boolean; + bekannteBefehle: tMyStringList; + maxPos: tIntPoint; + betraege: tWerte; +begin + result:=false; + Zeit:=now; + if not sT then + gibAus('Phase extrahieren ...',3); + for b:=false to true do + fensters[b]:=tSin2Fenster.create; + hintergrundAbziehen:=false; + hintergrund:=0; + xFak:=1; + yFak:=1; + bekannteBefehle:=tMyStringList.create; + repeat + if not f.metaReadln(s,true) then begin + gibAus('Unerwartetes Dateiende!',3); + for b:=false to true do + fensters[b].free; + exit; + end; + bekannteBefehle.clear; + if istDasBefehl('Ende',s,bekannteBefehle,false) then break; + bekannteBefehle.add('''x-Fenster: ...'''); + bekannteBefehle.add('''t-Fenster: ...'''); + if (pos('-Fenster:',s)=2) and (s[1] in ['x','t']) then begin + b:=s[1]='t'; + delete(s,1,pos(':',s)); + s:=trim(s); + if b then fensters[b].rand:=round(kont2diskFak('t',exprToFloat(sT,s))) + else fensters[b].rand:=round(kont2diskFak('x',exprToFloat(sT,s))); + fensters[b].aktiv:=true; + continue; + end; + if istDasBefehl('Hintergrund abziehen',s,bekannteBefehle,false) then begin + hintergrundAbziehen:=true; + continue; + end; + if istDasBefehl('Abstandsmetrik',s,bekannteBefehle,true) then begin + xFak:=round(kont2diskFak('x',exprToFloat(sT,erstesArgument(s)))); + yFak:=round(kont2diskFak('t',exprToFloat(sT,s))); + end; + bekannteBefehle.sort; + gibAus('Verstehe Option '''+s+''' nicht beim Extrahieren der Phase!'#10'Ich kenne:'#10+bekannteBefehle.text,3); + bekannteBefehle.free; + exit; + until false; + bekannteBefehle.free; + fensters[true].breite:=_tSiz-fensters[true].breite; + fensters[false].breite:=_xSteps-fensters[false].breite; + + if sT then begin + for b:=false to true do + fensters[b].free; + result:=true; + exit; + end; + + if hintergrundAbziehen then + case genauigkeit of + gSingle: + hintergrund:=sWerte.ermittleHintergrund; + gDouble: + hintergrund:=dWerte.ermittleHintergrund; + gExtended: + hintergrund:=eWerte.ermittleHintergrund; + end{of case}; + + gibAus('berechne t-FFT ...',3); + if not fft(threads,true,false,doRes,doResSmi,fensters[true],hintergrund,pvFehler,Warn) then begin + gibAus('Es traten Fehler auf!',3); + exit; + end; + gibAus(' (Parseval-Fehler = '+floatToStr(pvFehler)+')',3); + gibAus('berechne x-FFT ...',3); + if not fft(threads,false,false,doRes,doResSmi,fensters[false],0,pvFehler,Warn) then begin + gibAus('Es traten Fehler auf!',3); + exit; + end; + gibAus(' (Parseval-Fehler = '+floatToStr(pvFehler)+')',3); + for b:=false to true do + fensters[b].free; + + gibAus('spektrale Beträge ermitteln',3); + betraege:=tWerte.create(self,0,_xSteps-1); + betraege.fft2dNachbearbeitung(threads,doBetrQdr); + + fft2dNachbearbeitung(threads,doAlleResIms); + + gibAus('tiefe Frequenzen filtern',3); + case genauigkeit of + gSingle: + sWerte.kantenFilter(betraege.sWerte,xFak,yFak,kfHochpass,true,maxPos); + gDouble: + dWerte.kantenFilter(betraege.dWerte,xFak,yFak,kfHochpass,true,maxPos); + gExtended: + eWerte.kantenFilter(betraege.eWerte,xFak,yFak,kfHochpass,true,maxPos); + end{of case}; + betraege.free; + + gibAus('berechne inverse x-FFT ...',3); + if not fft(threads,false,true,doAlleResIms,doAlleResIms,nil,0,pvFehler,wsLasch) then begin + gibAus('Es traten Fehler auf!',3); + exit; + end; + gibAus(' (Parseval-Fehler = '+floatToStr(pvFehler)+')',3); gibAus('berechne inverse t-FFT ...',3); - if not fft(threads,true,true,doResSmi,doRes,nil,hintergrund,pvFehler,Warn) then begin + if not fft(threads,true,true,doAlleResIms,doAlleResIms,nil,hintergrund,pvFehler,Warn) then begin gibAus('Es traten Fehler auf!',3); exit; end; - gibAus(' (Parseval-Fehler = '+floattostr(pvFehler)+')',3); + gibAus(' (Parseval-Fehler = '+floatToStr(pvFehler)+')',3); gibAus('... fertig '+timetostr(now-Zeit),3); result:=true; end; -function tWerte.berechneIntegral(st: boolean; f: tMyStringlist; threads: longint; quelle: tWerte): boolean; +function tWerte.berechneIntegral(sT: boolean; f: tMyStringList; threads: longint; quelle: tWerte): boolean; var - i,tmin,tmax,xmin,xmax: longint; + i,tMin,tMax,xMin,xMax: longint; Zeit: extended; s: string; rtg: tIntegrationsRichtung; @@ -3713,13 +3856,13 @@ var bekannteBefehle: tMyStringList; begin result:=false; - warteaufBeendigungDesLeseThreads; + warteAufBeendigungDesLeseThreads; Zeit:=now; - tmin:=0; - tmax:=quelle._tsiz-1; - xmin:=0; - xmax:=quelle._xsteps-1; - Genauigkeit:=gExtended; + tMin:=0; + tMax:=quelle._tSiz-1; + xMin:=0; + xMax:=quelle._xSteps-1; + genauigkeit:=gExtended; rtg:=irHorizontal; bekannteBefehle:=tMyStringList.create; repeat @@ -3734,20 +3877,20 @@ begin threads:=strtoint(s); continue; end; - if istDasBefehl('xmin:',s,bekannteBefehle,true) then begin - xmin:=quelle.kont2disk('x',quelle.exprtofloat(st,s)); + if istDasBefehl('xMin:',s,bekannteBefehle,true) then begin + xMin:=quelle.kont2disk('x',quelle.exprToFloat(sT,s)); continue; end; - if istDasBefehl('xmax:',s,bekannteBefehle,true) then begin - xmax:=quelle.kont2disk('x',quelle.exprtofloat(st,s)); + if istDasBefehl('xMax:',s,bekannteBefehle,true) then begin + xMax:=quelle.kont2disk('x',quelle.exprToFloat(sT,s)); continue; end; - if istDasBefehl('tmin:',s,bekannteBefehle,true) then begin - tmin:=quelle.kont2disk('t',quelle.exprtofloat(st,s)); + if istDasBefehl('tMin:',s,bekannteBefehle,true) then begin + tMin:=quelle.kont2disk('t',quelle.exprToFloat(sT,s)); continue; end; - if istDasBefehl('tmax:',s,bekannteBefehle,true) then begin - tmax:=quelle.kont2disk('t',quelle.exprtofloat(st,s)); + if istDasBefehl('tMax:',s,bekannteBefehle,true) then begin + tMax:=quelle.kont2disk('t',quelle.exprToFloat(sT,s)); continue; end; if istDasBefehl('Richtung:',s,bekannteBefehle,true) then begin @@ -3775,29 +3918,29 @@ begin exit; until false; bekannteBefehle.free; - tmin:=max(0,tmin); - tmax:=min(quelle._tsiz-1,tmax); - xmin:=max(0,xmin); - xmax:=min(quelle._xsteps-1,xmax); - Transformationen:=tKoordinatenAusschnitt.create(quelle.Transformationen,xmin,xmax,tmin,tmax); - if not st then begin - _tsiz:=tmax-tmin+1; - _xsteps:=xmax-xmin+1; - - eWerte.holeRam(3); + tMin:=max(0,tMin); + tMax:=min(quelle._tSiz-1,tMax); + xMin:=max(0,xMin); + xMax:=min(quelle._xSteps-1,xMax); + transformationen:=tKoordinatenAusschnitt.create(quelle.transformationen,xMin,xMax,tMin,tMax); + if not sT then begin + _tSiz:=tMax-tMin+1; + _xSteps:=xMax-xMin+1; + + holeRAM(3); gibAus('Berechne Integrale ...',3); - setlength(intThreads,threads); + setLength(intThreads,threads); for i:=0 to length(intThreads)-1 do intThreads[i]:= tIntegralThread.create( quelle, self, - xmin, - xmax, - tmin+round( i /length(intThreads)*(tmax+1-tmin)), - tmin+round((i+1)/length(intThreads)*(tmax+1-tmin)-1), - xmin, - tmin, + xMin, + xMax, + tMin+round( i /length(intThreads)*(tMax+1-tMin)), + tMin+round((i+1)/length(intThreads)*(tMax+1-tMin)-1), + xMin, + tMin, rtg); repeat fertig:=true; @@ -3814,41 +3957,41 @@ begin result:=true; end; -function tWerte.berechneFFT(st: boolean; f: tMyStringlist; threads: longint; Warn: tWarnstufe): boolean; +function tWerte.berechneFFT(sT: boolean; f: tMyStringList; threads: longint; Warn: tWarnstufe): boolean; var Zeit,pvFehler: extended; - NB: tFFTDatenordnung; - Fenster: tSin2Fenster; + nB: tFFTDatenordnung; + fenster: tSin2Fenster; senkrecht: boolean; s: string; bekannteBefehle: tMyStringList; begin result:=false; - warteaufBeendigungDesLeseThreads; + warteAufBeendigungDesLeseThreads; Zeit:=now; - NB:=doBetrQdr; - Fenster:=tSin2Fenster.create; + nB:=doBetrQdr; + fenster:=tSin2Fenster.create; senkrecht:=true; bekannteBefehle:=tMyStringList.create; repeat if not f.metaReadln(s,true) then begin gibAus('Unerwartetes Dateiende!',3); - Fenster.free; + fenster.free; bekannteBefehle.free; exit; end; bekannteBefehle.clear; if istDasBefehl('Ende',s,bekannteBefehle,false) then break; if istDasBefehl('Nachbereitung:',s,bekannteBefehle,true) then begin - if not strToFftDo(NB,s) then exit; + if not strToFftDo(nB,s) then exit; continue; end; if istDasBefehl('Fenster:',s,bekannteBefehle,true) then begin if senkrecht then - Fenster.Rand:=round(kont2diskFak('t',exprtofloat(st,s))) + fenster.rand:=round(kont2diskFak('t',exprToFloat(sT,s))) else - Fenster.Rand:=round(kont2diskFak('x',exprtofloat(st,s))); - Fenster.aktiv:=true; + fenster.rand:=round(kont2diskFak('x',exprToFloat(sT,s))); + fenster.aktiv:=true; continue; end; if istDasBefehl('senkrecht',s,bekannteBefehle,false) then begin @@ -3861,62 +4004,62 @@ begin end; bekannteBefehle.sort; gibAus('Verstehe Option '''+s+''' nicht bei Erstellung einer FFT!'#10'Ich kenne:'#10+bekannteBefehle.text,3); - Fenster.free; + fenster.free; bekannteBefehle.free; exit; until false; bekannteBefehle.free; if senkrecht then - Fenster.Breite:=_tsiz - Fenster.Rand + fenster.breite:=_tSiz - fenster.rand else - Fenster.Breite:=_xsteps - Fenster.Rand; - if not st then begin + fenster.breite:=_xSteps - fenster.rand; + if not sT then begin gibAus('berechne FFT ...',3); - if not fft(threads,senkrecht,false,doRes,NB,Fenster,0,pvFehler,Warn) then begin + if not fft(threads,senkrecht,false,doRes,nB,fenster,0,pvFehler,Warn) then begin gibAus('Es traten Fehler auf!',3); - Fenster.free; + fenster.free; exit; end; - gibAus(' (Parseval-Fehler = '+floattostr(pvFehler)+')',3); + gibAus(' (Parseval-Fehler = '+floatToStr(pvFehler)+')',3); end; - Transformationen:=tFFTTransformation.create(Transformationen,not senkrecht,senkrecht); - if not st then begin - eWerte.holeRam(0); + transformationen:=tFFTTransformation.create(transformationen,not senkrecht,senkrecht); + if not sT then begin + holeRAM(0); gibAus('... fertig! '+timetostr(now-Zeit),3); end; - Fenster.free; + fenster.free; result:=true; end; -function tWerte.berechneFFT2d(st: boolean; f: tMyStringlist; threads: longint; Warn: tWarnstufe): boolean; +function tWerte.berechneFFT2d(sT: boolean; f: tMyStringList; threads: longint; Warn: tWarnstufe): boolean; var Zeit,pvFehler: extended; - NB,preOrd: tFFTDatenordnung; - Fensters: array[boolean] of tSin2Fenster; + nB,preOrd: tFFTDatenordnung; + fensters: array[boolean] of tSin2Fenster; s: string; b,spiegeln: boolean; bekannteBefehle: tMyStringList; begin result:=false; - warteaufBeendigungDesLeseThreads; + warteAufBeendigungDesLeseThreads; Zeit:=now; - NB:=doBetrQdr; + nB:=doBetrQdr; for b:=false to true do - Fensters[b]:=tSin2Fenster.create; + fensters[b]:=tSin2Fenster.create; spiegeln:=false; bekannteBefehle:=tMyStringList.create; repeat if not f.metaReadln(s,true) then begin gibAus('Unerwartetes Dateiende!',3); for b:=false to true do - Fensters[b].free; + fensters[b].free; bekannteBefehle.free; exit; end; bekannteBefehle.clear; if istDasBefehl('Ende',s,bekannteBefehle,false) then break; if istDasBefehl('Nachbereitung:',s,bekannteBefehle,true) then begin - if not strToFftDo(NB,s) then exit; + if not strToFftDo(nB,s) then exit; continue; end; bekannteBefehle.add('''x-Fenster: ...'''); @@ -3925,9 +4068,9 @@ begin b:=s[1]='t'; delete(s,1,pos(':',s)); s:=trim(s); - if b then Fensters[b].Rand:=round(kont2diskFak('t',exprtofloat(st,s))) - else Fensters[b].Rand:=round(kont2diskFak('x',exprtofloat(st,s))); - Fensters[b].aktiv:=true; + if b then fensters[b].rand:=round(kont2diskFak('t',exprToFloat(sT,s))) + else fensters[b].rand:=round(kont2diskFak('x',exprToFloat(sT,s))); + fensters[b].aktiv:=true; continue; end; if istDasBefehl('x-Spiegelung',s,bekannteBefehle,false) then begin @@ -3937,69 +4080,69 @@ begin bekannteBefehle.sort; gibAus('Verstehe Option '''+s+''' nicht bei Erstellung einer zweidimensionalen FFT!'#10'Ich kenne:'#10+bekannteBefehle.text,3); for b:=false to true do - Fensters[b].free; + fensters[b].free; bekannteBefehle.free; exit; until false; bekannteBefehle.free; - Fensters[true].Breite:=_tsiz-Fensters[true].Breite; - Fensters[false].Breite:=_xsteps-Fensters[false].Breite; - if NB=doResIms then preOrd:=doResIms + fensters[true].breite:=_tSiz-fensters[true].breite; + fensters[false].breite:=_xSteps-fensters[false].breite; + if nB=doResIms then preOrd:=doResIms else preOrd:=doResSmi; - if st then begin + if sT then begin result:=true; for b:=false to true do - Fensters[b].free; + fensters[b].free; exit; end; - Transformationen:=tFFTTransformation.create(Transformationen,true,true); + transformationen:=tFFTTransformation.create(transformationen,true,true); if spiegeln then begin gibAus('Werte spiegeln ...',3); spiegle(threads); gibAus('... fertig! '+timetostr(now-Zeit),3); end; gibAus('berechne t-FFT ...',3); - if not fft(threads,true,false,doRes,preOrd,Fensters[true],0,pvFehler,Warn) then begin + if not fft(threads,true,false,doRes,preOrd,fensters[true],0,pvFehler,Warn) then begin gibAus('Es traten Fehler auf!',3); exit; end; - gibAus(' (Parseval-Fehler = '+floattostr(pvFehler)+')',3); + gibAus(' (Parseval-Fehler = '+floatToStr(pvFehler)+')',3); gibAus('... fertig! '+timetostr(now-Zeit),3); gibAus('berechne x-FFT ...',3); - if not fft(threads,false,false,doRes,preOrd,Fensters[false],0,pvFehler,Warn) then begin + if not fft(threads,false,false,doRes,preOrd,fensters[false],0,pvFehler,Warn) then begin gibAus('Es traten Fehler auf!',3); exit; end; - gibAus(' (Parseval-Fehler = '+floattostr(pvFehler)+')',3); + gibAus(' (Parseval-Fehler = '+floatToStr(pvFehler)+')',3); gibAus('... fertig! '+timetostr(now-Zeit),3); gibAus('Wertenachbearbeiten ...',3); - case NB of + case nB of doBetr,doBetrQdr: - fft2dNachbearbeitung(threads,nb); + fft2dNachbearbeitung(threads,nB); end{of case}; gibAus('... fertig! '+timetostr(now-Zeit),3); for b:=false to true do - Fensters[b].free; + fensters[b].free; result:=true; end; -function tWerte.erzeugeLinearesBild(st: boolean; var f: tMyStringlist; maxThreads: longint): boolean; +function tWerte.erzeugeLinearesBild(sT: boolean; var f: tMyStringList; maxThreads: longint): boolean; var s,datei: string; i,j,k,schriftgroesze: longint; - xzoom,yzoom,wert,schritt,miw,maw,Zeit, + xZoom,yZoom,wert,schritt,miW,maW,Zeit, xp0,tp0: extended; - xmin,xmax,tmin,tmax,xp,tp, - breite,hoehe,lof,rof,oof,uof: longint; - Paletten: pTPalettenArray; - Nachbearbeitungen: tTransformationArray; + xMin,xMax,tMin,tMax,xp,tp, + breite,hoehe,lOf,rOf,oOf,uOf: longint; + paletten: pTPalettenArray; + nachbearbeitungen: tTransformationArray; Ausschnitt: tTransformation; - BilderThreads: array of TBilderthread; - fertig,Rahmen: boolean; + bilderThreads: array of tBilderThread; + fertig,rahmen,komplex: boolean; img: file; - Achsen: array of TAchse; + achsen: array of tAchse; fontRenderer: tFontRenderer; beschriftungen: array of tBeschriftung; verwKonturen: array of tZuZeichnendeKontur; @@ -4011,56 +4154,57 @@ procedure aufraeumen; var ii: longint; begin - for ii:=0 to length(Nachbearbeitungen)-1 do - zerstoereTransformationWennObsolet(Nachbearbeitungen[ii]); - setlength(Nachbearbeitungen,0); + for ii:=0 to length(nachbearbeitungen)-1 do + zerstoereTransformationWennObsolet(nachbearbeitungen[ii]); + setLength(nachbearbeitungen,0); Ausschnitt.free; Ausschnitt:=nil; - for ii:=0 to length(BilderThreads)-1 do - if assigned(BilderThreads[ii]) then - BilderThreads[ii].free; - setlength(BilderThreads,0); + for ii:=0 to length(bilderThreads)-1 do + if assigned(bilderThreads[ii]) then + bilderThreads[ii].free; + setLength(bilderThreads,0); for ii:=0 to length(beschriftungen)-1 do if assigned(beschriftungen[ii]) then beschriftungen[ii].free; - setlength(beschriftungen,0); - setlength(Achsen,0); + setLength(beschriftungen,0); + setLength(achsen,0); if assigned(fontRenderer) then fontRenderer.free; for ii:=0 to length(verwKonturen)-1 do verwKonturen[ii].free; - setlength(verwKonturen,0); + setLength(verwKonturen,0); musterKontur.free; bekannteBefehle.free; end; begin result:=false; - warteaufBeendigungDesLeseThreads; + warteAufBeendigungDesLeseThreads; Zeit:=now; - if not st then gibAus('erzeuge lineares Bild aus '+bezeichner+' ...',3); + if not sT then gibAus('erzeuge lineares Bild aus '+bezeichner+' ...',3); datei:=''; - xzoom:=1; - yzoom:=1; - xmin:=0; - xmax:=_xsteps-1; - tmin:=0; - tmax:=_tsiz-1; + xZoom:=1; + yZoom:=1; + xMin:=0; + xMax:=_xSteps-1; + tMin:=0; + tMax:=_tSiz-1; schriftgroesze:=24; - setlength(quellen,1); + setLength(quellen,1); quellen[0]:=self; - setlength(Nachbearbeitungen,1); - Nachbearbeitungen[0]:=tKeineTransformation.create; - setlength(Paletten,1); - findePalette(Paletten[0],'Graustufen'); - setlength(Achsen,0); - setlength(verwKonturen,0); + setLength(nachbearbeitungen,1); + nachbearbeitungen[0]:=tKeineTransformation.create; + setLength(paletten,1); + findePalette(paletten[0],'Graustufen'); + setLength(achsen,0); + setLength(verwKonturen,0); musterKontur:=tZuZeichnendeKontur.create; - setlength(beschriftungen,0); - setlength(BilderThreads,0); + setLength(beschriftungen,0); + setLength(bilderThreads,0); Ausschnitt:=nil; - Rahmen:=false; + rahmen:=false; fontRenderer:=nil; + komplex:=false; bekannteBefehle:=tMyStringList.create; repeat if not f.metaReadln(s,true) then begin @@ -4074,33 +4218,33 @@ begin continue; end; if istDasBefehl('Vergrößerung:',s,bekannteBefehle,true) then begin - xzoom:=exprtofloat(st,s); - yzoom:=exprtofloat(st,s); + xZoom:=exprToFloat(sT,s); + yZoom:=exprToFloat(sT,s); continue; end; if istDasBefehl('x-Vergrößerung:',s,bekannteBefehle,true) then begin - xzoom:=exprtofloat(st,s); + xZoom:=exprToFloat(sT,s); continue; end; if istDasBefehl('t-Vergrößerung:',s,bekannteBefehle,true) then begin - yzoom:=exprtofloat(st,s); + yZoom:=exprToFloat(sT,s); continue; end; - if self.dichtenParameterErkannt(st,s,bekannteBefehle,maxThreads,xmin,xmax,tmin,tmax) then continue; - if istDasBefehl('xmin:',s,bekannteBefehle,true) then begin - xmin:=kont2disk('x',exprtofloat(st,s)); + if self.dichtenParameterErkannt(sT,s,bekannteBefehle,maxThreads,xMin,xMax,tMin,tMax) then continue; + if istDasBefehl('xMin:',s,bekannteBefehle,true) then begin + xMin:=kont2disk('x',exprToFloat(sT,s)); continue; end; - if istDasBefehl('xmax:',s,bekannteBefehle,true) then begin - xmax:=kont2disk('x',exprtofloat(st,s)); + if istDasBefehl('xMax:',s,bekannteBefehle,true) then begin + xMax:=kont2disk('x',exprToFloat(sT,s)); continue; end; - if istDasBefehl('tmin:',s,bekannteBefehle,true) then begin - tmin:=kont2disk('t',exprtofloat(st,s)); + if istDasBefehl('tMin:',s,bekannteBefehle,true) then begin + tMin:=kont2disk('t',exprToFloat(sT,s)); continue; end; - if istDasBefehl('tmax:',s,bekannteBefehle,true) then begin - tmax:=kont2disk('t',exprtofloat(st,s)); + if istDasBefehl('tMax:',s,bekannteBefehle,true) then begin + tMax:=kont2disk('t',exprToFloat(sT,s)); continue; end; if istDasBefehl('Palette:',s,bekannteBefehle,true) then begin @@ -4108,9 +4252,9 @@ begin i:=strtoint(erstesArgument(s)) else i:=0; - if i>=length(Paletten) then - setlength(Paletten,i+1); - if not findePalette(Paletten[i],s) then begin + if i>=length(paletten) then + setLength(paletten,i+1); + if not findePalette(paletten[i],s) then begin gibAus('Kenne Palette '''+s+''' nicht!',3); aufraeumen; exit; @@ -4122,7 +4266,11 @@ begin continue; end; if istDasBefehl('Rahmen',s,bekannteBefehle,false) then begin - Rahmen:=true; + rahmen:=true; + continue; + end; + if istDasBefehl('komplex',s,bekannteBefehle,false) then begin + komplex:=true; continue; end; if istDasBefehl('Nachbearbeitung:',s,bekannteBefehle,true) then begin @@ -4132,13 +4280,13 @@ begin i:=0; if i>=length(nachbearbeitungen) then begin j:=length(nachbearbeitungen); - setlength(nachbearbeitungen,i+1); + setLength(nachbearbeitungen,i+1); while j<length(nachbearbeitungen) do begin nachbearbeitungen[j]:=tKeineTransformation.create; inc(j); end; end; - if not liesTWerteTransformationen(st,s,f,@exprtofloat,Nachbearbeitungen[i]) then begin + if not liesTWerteTransformationen(sT,s,f,@exprToFloat,nachbearbeitungen[i]) then begin aufraeumen; exit; end; @@ -4149,33 +4297,33 @@ begin i:=strtoint(erstesArgument(s)) else i:=0; - if not erzeugeLegende(st,f,s,self,_minW,_maxW,Nachbearbeitungen[i],Paletten[i]) then begin + if not erzeugeLegende(sT,f,s,self,_minW,_maxW,nachbearbeitungen[i],paletten[i]) then begin aufraeumen; exit; end; continue; end; if istDasBefehl('Achse:',s,bekannteBefehle,true) then begin - setlength(Achsen,length(Achsen)+1); + setLength(achsen,length(achsen)+1); if startetMit('oben',s) then - Achsen[length(Achsen)-1].Lage:=lOben + achsen[length(achsen)-1].lage:=lOben else if startetMit('unten',s) then - Achsen[length(Achsen)-1].Lage:=lUnten + achsen[length(achsen)-1].lage:=lUnten else if startetMit('links',s) then - Achsen[length(Achsen)-1].Lage:=lLinks + achsen[length(achsen)-1].lage:=lLinks else if startetMit('rechts',s) then - Achsen[length(Achsen)-1].Lage:=lRechts + achsen[length(achsen)-1].lage:=lRechts else begin gibAus('Ungültiger Parameter '''+s+''' für eine Achse!'#10'Ich kenne:'#10'''oben ...'''#10'''unten ...'''#10'''links ...'''#10'''rechts ...''',3); aufraeumen; exit; end; if endetMit('+',s) then - Achsen[length(Achsen)-1].faktor:=1/2 + achsen[length(achsen)-1].faktor:=1/2 else if endetMit('-',s) then - Achsen[length(Achsen)-1].faktor:=2 - else Achsen[length(Achsen)-1].faktor:=1; - Achsen[length(Achsen)-1].Striche:=strtoint(s); + achsen[length(achsen)-1].faktor:=2 + else achsen[length(achsen)-1].faktor:=1; + achsen[length(achsen)-1].striche:=strtoint(s); continue; end; if istDasBefehl('Konturen:',s,bekannteBefehle,false) then begin @@ -4187,11 +4335,11 @@ begin if s='Ende' then break; if startetMit('Dicke:',s) then begin - musterKontur.dicke:=exprToFloat(st,s); + musterKontur.dicke:=exprToFloat(sT,s); continue; end; if startetMit('Deckkraft:',s) then begin - musterKontur.deckKraft:=exprToFloat(st,s); + musterKontur.deckKraft:=exprToFloat(sT,s); continue; end; if startetMit('Farbe:',s) then begin @@ -4200,14 +4348,14 @@ begin exit; end; while s<>'' do begin - setlength(verwKonturen,length(verwKonturen)+1); - i:=findeKontur(erstesArgument(s),nil,Wertes,Konturen,false); - if (i<0) or (i>=length(Konturen^)) then begin + setLength(verwKonturen,length(verwKonturen)+1); + i:=findeKontur(erstesArgument(s),nil,wertes,konturen,false); + if (i<0) or (i>=length(konturen^)) then begin gibAus('Die Kontur '''+s+''' gibt es nicht!',3); aufraeumen; exit; end; - verwKonturen[length(verwKonturen)-1]:=tZuZeichnendeKontur.create(musterKontur,Konturen^[i]); + verwKonturen[length(verwKonturen)-1]:=tZuZeichnendeKontur.create(musterKontur,konturen^[i]); end; until false; continue; @@ -4216,14 +4364,14 @@ begin i:=strtoint(erstesArgument(s)); if i>=length(quellen) then begin j:=length(quellen); - setlength(quellen,i+1); + setLength(quellen,i+1); while j<length(quellen) do begin quellen[j]:=nil; inc(j); end; end; if assigned(quellen[i]) then begin - gibAus('Ich habe auf Position '+inttostr(i)+' schon eine Quelle fürs Bild!',3); + gibAus('Ich habe auf Position '+intToStr(i)+' schon eine Quelle fürs Bild!',3); aufraeumen; exit; end; @@ -4242,17 +4390,17 @@ begin exit; until false; - if (length(Paletten)<>length(Quellen)) or - (length(Nachbearbeitungen)<>length(Quellen)) then begin + if (length(paletten)<>length(quellen)) or + (length(nachbearbeitungen)<>length(quellen)) then begin gibAus( - 'Die Anzahl der Paletten ('+inttostr(length(Paletten))+'), '+ - 'der Daten ('+inttostr(length(Quellen))+') und '+ - 'der Nachbearbeitungen ('+inttostr(length(nachbearbeitungen))+') stimmen nicht überein!',3); + 'Die Anzahl der Paletten ('+intToStr(length(paletten))+'), '+ + 'der Daten ('+intToStr(length(quellen))+') und '+ + 'der Nachbearbeitungen ('+intToStr(length(nachbearbeitungen))+') stimmen nicht überein!',3); aufraeumen; exit; end; - if st then begin + if sT then begin result:=true; aufraeumen; exit; @@ -4263,116 +4411,116 @@ begin aufraeumen; exit; end; - xmin:=max(xmin,0); - xmax:=min(xmax,_xsteps-1); - tmin:=max(tmin,0); - tmax:=min(tmax,_tsiz-1); - gibAus('('+inttostr(xmin)+'-'+inttostr(xmax)+'x'+inttostr(tmin)+'-'+inttostr(tmax)+')',3); - gibAus(' ('+floattostr(Transformationen.xstart)+'-'+floattostr(Transformationen.xstop)+' x '+floattostr(Transformationen.tstart)+'-'+floattostr(Transformationen.tstop)+')',3); - breite:=round((xmax-xmin+1)*xzoom); - hoehe:=round((tmax-tmin+1)*yzoom); + xMin:=max(xMin,0); + xMax:=min(xMax,_xSteps-1); + tMin:=max(tMin,0); + tMax:=min(tMax,_tSiz div (1+byte(komplex))-1); + gibAus('('+intToStr(xMin)+'-'+intToStr(xMax)+'x'+intToStr(tMin)+'-'+intToStr(tMax)+')',3); + gibAus(' ('+floatToStr(transformationen.xStart)+'-'+floatToStr(transformationen.xStop)+' x '+floatToStr(transformationen.tStart)+'-'+floatToStr(transformationen.tStop)+')',3); + breite:=round((xMax-xMin+1)*xZoom); + hoehe:=round((tMax-tMin+1)*yZoom); - Ausschnitt:=tKoordinatenAusschnitt.create(Transformationen,xmin,xmax,tmin,tmax); + Ausschnitt:=tKoordinatenAusschnitt.create(transformationen,xMin,xMax,tMin,tMax); if (breite=1) or (hoehe=1) then begin gibAus('Keine/kaum Bildpunkte innerhalb der festgelegten Grenzen!',3); aufraeumen; exit; end; - gibAus(inttostr(breite)+' x '+inttostr(hoehe)+' Pixel',3); + gibAus(intToStr(breite)+' x '+intToStr(hoehe)+' Pixel',3); fontRenderer:=tFontRenderer.create(schriftgroesze); - setlength(Beschriftungen,0); - for i:=0 to length(Achsen)-1 do begin - if Achsen[i].Lage in [lOben,lUnten] then begin - miw:=Ausschnitt.achsen['x','x']; - maw:=Ausschnitt.achsen['x','y']; + setLength(beschriftungen,0); + for i:=0 to length(achsen)-1 do begin + if achsen[i].lage in [lOben,lUnten] then begin + miW:=Ausschnitt.achsen['x','x']; + maW:=Ausschnitt.achsen['x','y']; end else begin - miw:=Ausschnitt.achsen['y','x']; - maw:=Ausschnitt.achsen['y','y']; + miW:=Ausschnitt.achsen['y','x']; + maW:=Ausschnitt.achsen['y','y']; end; - schritt:=(maw-miw)/Achsen[i].Striche; + schritt:=(maW-miW)/achsen[i].striche; j:=round(ln(schritt)/ln(10)); - schritt:=Achsen[i].faktor*power(10,j); - wert:=ceil(miw/schritt)*schritt; - while wert<=maw do begin - setlength(beschriftungen,length(beschriftungen)+1); + schritt:=achsen[i].faktor*power(10,j); + wert:=ceil(miW/schritt)*schritt; + while wert<=maW do begin + setLength(beschriftungen,length(beschriftungen)+1); beschriftungen[length(beschriftungen)-1]:=tBeschriftung.create; - beschriftungen[length(beschriftungen)-1].bBreite:=Breite; - beschriftungen[length(beschriftungen)-1].bHoehe:=Hoehe; - beschriftungen[length(beschriftungen)-1].Rahmen:=Rahmen; + beschriftungen[length(beschriftungen)-1].bBreite:=breite; + beschriftungen[length(beschriftungen)-1].bHoehe:=hoehe; + beschriftungen[length(beschriftungen)-1].rahmen:=rahmen; with beschriftungen[length(beschriftungen)-1] do begin fontRend:=fontRenderer; - lage:=Achsen[i].lage; -// position:=(wert-miw)/(maw-miw); - position:=Ausschnitt.wertZuPositionAufAchse(Achsen[i].Lage,wert); + lage:=achsen[i].lage; +// position:=(wert-miW)/(maW-miW); + position:=Ausschnitt.wertZuPositionAufAchse(achsen[i].lage,wert); if (position<0) or (position>1) then begin - gibAus('Der Wert '+floattostr(wert)+' liegt außerhalb des Bildes ('+floattostr(position)+') - das sollte eigentlich nicht passieren!',3); + gibAus('Der Wert '+floatToStr(wert)+' liegt außerhalb des Bildes ('+floatToStr(position)+') - das sollte eigentlich nicht passieren!',3); beschriftungen[length(beschriftungen)-1].free; - setlength(beschriftungen,length(beschriftungen)-1); + setLength(beschriftungen,length(beschriftungen)-1); aufraeumen; exit; end else begin if lage in [lOben,lUnten] then position:=position*bBreite else position:=position*bHoehe; - inhalt:=floattostr(wert); + inhalt:=floatToStr(wert); end; end; wert:=wert+schritt; end; end; - gibAus(inttostr(length(Beschriftungen))+' Zahlen an den Achsen',3); - lof:=Byte(Rahmen); - rof:=Byte(Rahmen); - oof:=Byte(Rahmen); - uof:=Byte(Rahmen); + gibAus(intToStr(length(beschriftungen))+' Zahlen an den Achsen',3); + lOf:=byte(rahmen); + rOf:=byte(rahmen); + oOf:=byte(rahmen); + uOf:=byte(rahmen); for i:=0 to length(beschriftungen)-1 do - with Beschriftungen[i] do begin - lof:=max(lof,-links); - rof:=max(rof,1+rechts-bBreite); - oof:=max(oof,-oben); - uof:=max(uof,1+unten-bHoehe); - end; - if lof+oof+rof+uof>0 then - gibAus('Extra-Ränder: '+inttostr(lof)+' Pixel links, '+inttostr(oof)+' Pixel oben, '+inttostr(rof)+' Pixel rechts und '+inttostr(uof)+' Pixel unten.',3); - - setlength(Bilderthreads,maxThreads); - for i:=0 to length(Bilderthreads)-1 do - Bilderthreads[i]:=tBilderthread.create(i,length(Bilderthreads),breite,hoehe,lof,oof,rof,uof,quellen,xmin,xmax,tmin,tmax,xzoom,yzoom,Nachbearbeitungen,paletten,@Beschriftungen,rahmen); - for i:=0 to length(Bilderthreads)-1 do begin - gibAus('starte Thread '+inttostr(i)+' ...',1); - Bilderthreads[i].suspended:=false; + with beschriftungen[i] do begin + lOf:=max(lOf,-links); + rOf:=max(rOf,1+rechts-bBreite); + oOf:=max(oOf,-oben); + uOf:=max(uOf,1+unten-bHoehe); + end; + if lOf+oOf+rOf+uOf>0 then + gibAus('Extra-Ränder: '+intToStr(lOf)+' Pixel links, '+intToStr(oOf)+' Pixel oben, '+intToStr(rOf)+' Pixel rechts und '+intToStr(uOf)+' Pixel unten.',3); + + setLength(bilderThreads,maxThreads); + for i:=0 to length(bilderThreads)-1 do + bilderThreads[i]:=tBilderThread.create(i,length(bilderThreads),breite,hoehe,lOf,oOf,rOf,uOf,quellen,xMin,xMax,tMin,tMax,xZoom,yZoom,nachbearbeitungen,paletten,@beschriftungen,rahmen); + for i:=0 to length(bilderThreads)-1 do begin + gibAus('starte Thread '+intToStr(i)+' ...',1); + bilderThreads[i].suspended:=false; gibAus('... ok!',1); end; repeat sleep(10); fertig:=true; - for i:=0 to length(Bilderthreads)-1 do - fertig:=fertig and Bilderthreads[i].fertig; + for i:=0 to length(bilderThreads)-1 do + fertig:=fertig and bilderThreads[i].fertig; until fertig; gibAus('Alle Threads beendet, Konturen einfügen ...',1); for i:=0 to length(verwKonturen)-1 do begin - for j:=0 to length(BilderThreads)-1 do + for j:=0 to length(bilderThreads)-1 do bilderThreads[j].initAnzahlensFuerKontur; for j:=0 to length(verwKonturen[i].kontur.orte)-1 do begin - xp0:=(kont2diskFak('x',verwKonturen[i].kontur.orte[j]['x'])-xmin)*xzoom; - tp0:=(kont2diskFak('t',verwKonturen[i].kontur.orte[j]['y'])-tmin)*yzoom; + xp0:=(kont2diskFak('x',verwKonturen[i].kontur.orte[j]['x'])-xMin)*xZoom; + tp0:=(kont2diskFak('t',verwKonturen[i].kontur.orte[j]['y'])-tMin)*yZoom; for xp:=ceil(xp0-verwKonturen[i].dicke/2) to floor(xp0+verwKonturen[i].dicke/2) do for tp:=ceil(tp0-verwKonturen[i].dicke/2) to floor(tp0+verwKonturen[i].dicke/2) do - if (0<=xp) and (xp<Breite) and (0<=tp) and (tp<Hoehe) and (sqr(xp-xp0)+sqr(tp-tp0)<=sqr(verwKonturen[i].dicke/2)) then begin + if (0<=xp) and (xp<breite) and (0<=tp) and (tp<hoehe) and (sqr(xp-xp0)+sqr(tp-tp0)<=sqr(verwKonturen[i].dicke/2)) then begin k:=0; - while (k<length(Bilderthreads)-1) and (xp>=Bilderthreads[k+1].xpmi) do + while (k<length(bilderThreads)-1) and (xp>=bilderThreads[k+1].xPMi) do inc(k); - if Bilderthreads[k].anzahlens[0,(tp+oof)*Bilderthreads[k].Breite + xp - Bilderthreads[k].xpmi] = 0 then begin - Bilderthreads[k].anzahlens[0,(tp+oof)*Bilderthreads[k].Breite + xp - Bilderthreads[k].xpmi]:=1; - Bilderthreads[k].farben[(tp+oof)*Bilderthreads[k].Breite + xp - Bilderthreads[k].xpmi]:= + if bilderThreads[k].anzahlens[0,(tp+oOf)*bilderThreads[k].breite + xp - bilderThreads[k].xPMi] = 0 then begin + bilderThreads[k].anzahlens[0,(tp+oOf)*bilderThreads[k].breite + xp - bilderThreads[k].xPMi]:=1; + bilderThreads[k].farben[(tp+oOf)*bilderThreads[k].breite + xp - bilderThreads[k].xPMi]:= mischeFarben( - Bilderthreads[k].farben[(tp+oof)*Bilderthreads[k].Breite + xp - Bilderthreads[k].xpmi], + bilderThreads[k].farben[(tp+oOf)*bilderThreads[k].breite + xp - bilderThreads[k].xPMi], verwKonturen[i].farbe, verwKonturen[i].deckKraft ); @@ -4383,12 +4531,12 @@ begin gibAus('fertig, speichere Bild ...',1); assign(img,datei); rewrite(img,1); - schreibeBmpHeader(img,breite+lof+rof,hoehe+oof+uof); - for j:=-oof to uof+hoehe-1 do begin - for i:=0 to length(Bilderthreads)-1 do - blockwrite(img,Bilderthreads[i].farben[(j+oof)*Bilderthreads[i].Breite],3*Bilderthreads[i].Breite); + schreibeBmpHeader(img,breite+lOf+rOf,hoehe+oOf+uOf); + for j:=-oOf to uOf+hoehe-1 do begin + for i:=0 to length(bilderThreads)-1 do + blockwrite(img,bilderThreads[i].farben[(j+oOf)*bilderThreads[i].breite],3*bilderThreads[i].breite); i:=0; - blockwrite(img,i,(4-(((lof+breite+rof)*3) mod 4)) mod 4); + blockwrite(img,i,(4-(((lOf+breite+rOf)*3) mod 4)) mod 4); end; close(img); gibAus('... Threads freigeben ...',1); @@ -4398,25 +4546,25 @@ begin gibAus('... fertig '+timetostr(now-Zeit),3); end; -function tWerte.erzeugeAscii(st: boolean; f: tMyStringlist): boolean; +function tWerte.erzeugeAscii(sT: boolean; f: tMyStringList): boolean; var datei,s,separator: string; - outf: textfile; + outF: textfile; i,j: longint; - xmin,xmax,tmin,tmax: longint; + xMin,xMax,tMin,tMax: longint; Zeit: extended; mitKoordinaten: byte; bekannteBefehle: tMyStringList; begin result:=false; - warteaufBeendigungDesLeseThreads; + warteAufBeendigungDesLeseThreads; Zeit:=now; gibAus('erzeuge Ascii-Datei ...',3); datei:=''; - xmin:=0; - xmax:=_xsteps-1; - tmin:=0; - tmax:=_tsiz-1; + xMin:=0; + xMax:=_xSteps-1; + tMin:=0; + tMax:=_tSiz-1; mitKoordinaten:=0; separator:=','; bekannteBefehle:=tMyStringList.create; @@ -4431,25 +4579,25 @@ begin datei:=s; continue; end; - if istDasBefehl('xmin:',s,bekannteBefehle,true) then begin - xmin:=kont2disk('x',exprtofloat(st,s)); + if istDasBefehl('xMin:',s,bekannteBefehle,true) then begin + xMin:=kont2disk('x',exprToFloat(sT,s)); continue; end; - if istDasBefehl('xmax:',s,bekannteBefehle,true) then begin - xmax:=kont2disk('x',exprtofloat(st,s)); + if istDasBefehl('xMax:',s,bekannteBefehle,true) then begin + xMax:=kont2disk('x',exprToFloat(sT,s)); continue; end; - if istDasBefehl('tmin:',s,bekannteBefehle,true) then begin - tmin:=kont2disk('t',exprtofloat(st,s)); + if istDasBefehl('tMin:',s,bekannteBefehle,true) then begin + tMin:=kont2disk('t',exprToFloat(sT,s)); continue; end; - if istDasBefehl('tmax:',s,bekannteBefehle,true) then begin - tmax:=kont2disk('t',exprtofloat(st,s)); + if istDasBefehl('tMax:',s,bekannteBefehle,true) then begin + tMax:=kont2disk('t',exprToFloat(sT,s)); continue; end; if istDasBefehl('Koordinaten einfügen',s,bekannteBefehle,false) then begin - if (_xsteps=1) or (_tsiz=1) then begin - mitKoordinaten:=byte(_xsteps=1)*2 + byte(_tsiz=1); + if (_xSteps=1) or (_tSiz=1) then begin + mitKoordinaten:=byte(_xSteps=1)*2 + byte(_tSiz=1); continue; end; gibAus('Kann Koordinaten nicht in mehrdimensionale Daten einfügen!',3); @@ -4458,14 +4606,14 @@ begin end; if istDasBefehl('Separator:',s,bekannteBefehle,true) then begin if s='Leerzeichen' then begin - Separator:=' '; + separator:=' '; continue; end; if s='Tab' then begin - Separator:=#9; + separator:=#9; continue; end; - Separator:=s; + separator:=s; continue; end; if istDasBefehl('Ende',s,bekannteBefehle,false) then break; @@ -4476,81 +4624,81 @@ begin until false; bekannteBefehle.free; - if st then begin + if sT then begin result:=true; exit; end; - assign(outf,datei); - rewrite(outf); + assign(outF,datei); + rewrite(outF); case mitKoordinaten of 0: - case Genauigkeit of + case genauigkeit of gSingle: - for i:=max(0,tmin) to min(_tsiz-1,tmax) do begin + for i:=max(0,tMin) to min(_tSiz-1,tMax) do begin s:=''; - for j:=max(0,xmin) to min(_xsteps-1,xmax) do - s:=s+floattostr(sWerte.werte[i*_xsteps+j])+separator; + for j:=max(0,xMin) to min(_xSteps-1,xMax) do + s:=s+floatToStr(sWerte.werte[i*_xSteps+j])+separator; delete(s,length(s),1); - writeln(outf,s); + writeln(outF,s); end; gDouble: - for i:=max(0,tmin) to min(_tsiz-1,tmax) do begin + for i:=max(0,tMin) to min(_tSiz-1,tMax) do begin s:=''; - for j:=max(0,xmin) to min(_xsteps-1,xmax) do - s:=s+floattostr(dWerte.werte[i*_xsteps+j])+separator; + for j:=max(0,xMin) to min(_xSteps-1,xMax) do + s:=s+floatToStr(dWerte.werte[i*_xSteps+j])+separator; delete(s,length(s),1); - writeln(outf,s); + writeln(outF,s); end; gExtended: - for i:=max(0,tmin) to min(_tsiz-1,tmax) do begin + for i:=max(0,tMin) to min(_tSiz-1,tMax) do begin s:=''; - for j:=max(0,xmin) to min(_xsteps-1,xmax) do - s:=s+floattostr(eWerte.werte[i*_xsteps+j])+separator; + for j:=max(0,xMin) to min(_xSteps-1,xMax) do + s:=s+floatToStr(eWerte.werte[i*_xSteps+j])+separator; delete(s,length(s),1); - writeln(outf,s); + writeln(outF,s); end; end{of Case}; 1: - case Genauigkeit of + case genauigkeit of gSingle: - for i:=max(0,xmin) to min(_xsteps-1,xmax) do - writeln(outf,floattostr(disk2kont('x',i))+separator+floattostr(sWerte.werte[i])); + for i:=max(0,xMin) to min(_xSteps-1,xMax) do + writeln(outF,floatToStr(disk2kont('x',i))+separator+floatToStr(sWerte.werte[i])); gDouble: - for i:=max(0,xmin) to min(_xsteps-1,xmax) do - writeln(outf,floattostr(disk2kont('x',i))+separator+floattostr(dWerte.werte[i])); + for i:=max(0,xMin) to min(_xSteps-1,xMax) do + writeln(outF,floatToStr(disk2kont('x',i))+separator+floatToStr(dWerte.werte[i])); gExtended: - for i:=max(0,xmin) to min(_xsteps-1,xmax) do - writeln(outf,floattostr(disk2kont('x',i))+separator+floattostr(eWerte.werte[i])); + for i:=max(0,xMin) to min(_xSteps-1,xMax) do + writeln(outF,floatToStr(disk2kont('x',i))+separator+floatToStr(eWerte.werte[i])); end{of Case}; 2: - case Genauigkeit of + case genauigkeit of gSingle: - for i:=max(0,tmin) to min(_tsiz-1,tmax) do - writeln(outf,floattostr(disk2kont('t',i))+separator+floattostr(sWerte.werte[i])); + for i:=max(0,tMin) to min(_tSiz-1,tMax) do + writeln(outF,floatToStr(disk2kont('t',i))+separator+floatToStr(sWerte.werte[i])); gDouble: - for i:=max(0,tmin) to min(_tsiz-1,tmax) do - writeln(outf,floattostr(disk2kont('t',i))+separator+floattostr(dWerte.werte[i])); + for i:=max(0,tMin) to min(_tSiz-1,tMax) do + writeln(outF,floatToStr(disk2kont('t',i))+separator+floatToStr(dWerte.werte[i])); gExtended: - for i:=max(0,tmin) to min(_tsiz-1,tmax) do - writeln(outf,floattostr(disk2kont('t',i))+separator+floattostr(eWerte.werte[i])); + for i:=max(0,tMin) to min(_tSiz-1,tMax) do + writeln(outF,floatToStr(disk2kont('t',i))+separator+floatToStr(eWerte.werte[i])); end{of Case}; 3: - case Genauigkeit of + case genauigkeit of gSingle: - writeln(outf,floattostr(disk2kont('x',0))+separator+floattostr(disk2kont('t',0))+separator+floattostr(sWerte.werte[0])); + writeln(outF,floatToStr(disk2kont('x',0))+separator+floatToStr(disk2kont('t',0))+separator+floatToStr(sWerte.werte[0])); gDouble: - writeln(outf,floattostr(disk2kont('x',0))+separator+floattostr(disk2kont('t',0))+separator+floattostr(dWerte.werte[0])); + writeln(outF,floatToStr(disk2kont('x',0))+separator+floatToStr(disk2kont('t',0))+separator+floatToStr(dWerte.werte[0])); gExtended: - writeln(outf,floattostr(disk2kont('x',0))+separator+floattostr(disk2kont('t',0))+separator+floattostr(eWerte.werte[0])); + writeln(outF,floatToStr(disk2kont('x',0))+separator+floatToStr(disk2kont('t',0))+separator+floatToStr(eWerte.werte[0])); end{of Case}; end{of Case}; - close(outf); + close(outF); gibAus('... fertig '+timetostr(now-Zeit),3); result:=true; end; -function tWerte.erzeugeLineout(st: boolean; params: string): boolean; +function tWerte.erzeugeLineout(sT: boolean; params: string): boolean; var ab: array[boolean,boolean] of longint; s: string; @@ -4560,11 +4708,11 @@ var b1,b2: boolean; begin result:=false; - warteaufBeendigungDesLeseThreads; + warteAufBeendigungDesLeseThreads; Zeit:=now; - if not st then begin + if not sT then begin gibAus('erzeuge Lineout ...',3); - gibAus('insgesamt: '+floattostr(Transformationen.xstart)+'..'+floattostr(Transformationen.xstop)+' x '+floattostr(Transformationen.tstart)+'..'+floattostr(Transformationen.tstop),3); + gibAus('insgesamt: '+floatToStr(transformationen.xStart)+'..'+floatToStr(transformationen.xStop)+' x '+floatToStr(transformationen.tStart)+'..'+floatToStr(transformationen.tStop),3); end; for b1:=false to true do @@ -4576,7 +4724,7 @@ begin if startetMit('waagerecht',params) then b1:=true else if startetMit('senkrecht',params) then b1:=false else exit; - if st then begin + if sT then begin result:=true; exit; end; @@ -4591,26 +4739,26 @@ begin assignFile(f,params); rewrite(f); - for i:=0 to _xsteps*byte(not b1)+_tsiz*byte(b1)-1 do + for i:=0 to _xSteps*byte(not b1)+_tSiz*byte(b1)-1 do schreibeWertIntegriert(f,i,b1); - closefile(f); + closeFile(f); end else begin for b1:=false to true do if startetMit('(',params) then begin s:=erstesArgument(params,','); - ab[b1,false]:=kont2disk('x',exprtofloat(st,s)); + ab[b1,false]:=kont2disk('x',exprToFloat(sT,s)); s:=erstesArgument(params,')'); - ab[b1,true]:=kont2disk('t',exprtofloat(st,s)); + ab[b1,true]:=kont2disk('t',exprToFloat(sT,s)); end else begin ab[true,false]:=ab[false,false]; ab[true,true]:=ab[false,true]; - ab[false,false]:=(_xsteps-1)*byte(not b1); - ab[false,true]:=(_tsiz-1)*byte(not b1); + ab[false,false]:=(_xSteps-1)*byte(not b1); + ab[false,true]:=(_tSiz-1)*byte(not b1); end; - if st then begin + if sT then begin result:=true; exit; end; @@ -4622,7 +4770,7 @@ begin s:='... schreibe in '''+params+''' ('; for i:=0 to 3 do begin - s:=s+inttostr(ab[odd(i div 2),odd(i)]); + s:=s+intToStr(ab[odd(i div 2),odd(i)]); if not odd(i) then s:=s+',' else if i=1 then s:=s+')--('; end; @@ -4648,42 +4796,42 @@ begin for i:=ab[false,false] downto ab[true,false] do schreibeWert(f,i,round(ab[false,true]+i/(ab[true,false]-ab[false,false])*(ab[true,true]-ab[false,true]))); end; - closefile(f); + closeFile(f); end; gibAus('... fertig '+timetostr(now-Zeit),3); result:=true; end; -function tWerte.erzeugeBinning(st: boolean; params: string): boolean; +function tWerte.erzeugeBinning(sT: boolean; params: string): boolean; var senkrecht,linien: boolean; Zeit,x0,dx: extended; begin result:=false; - warteaufBeendigungDesLeseThreads; + warteAufBeendigungDesLeseThreads; Zeit:=now; - if not st then begin + if not sT then begin gibAus('erzeuge Binning ...',3); - gibAus('insgesamt: '+floattostr(Transformationen.xstart)+'..'+floattostr(Transformationen.xstop)+' x '+floattostr(Transformationen.tstart)+'..'+floattostr(Transformationen.tstop),3); + gibAus('insgesamt: '+floatToStr(transformationen.xStart)+'..'+floatToStr(transformationen.xStop)+' x '+floatToStr(transformationen.tStart)+'..'+floatToStr(transformationen.tStop),3); end; - senkrecht:=Transformationen.xstart=Transformationen.xstop; - if (not senkrecht) and (Transformationen.tstart<>Transformationen.tstop) then begin + senkrecht:=transformationen.xStart=transformationen.xStop; + if (not senkrecht) and (transformationen.tStart<>transformationen.tStop) then begin gibAus('Binning geht nur auf eindimensionalen Daten!',3); exit; end; params:=trim(params); linien:=startetMit('(Gnuplotlinien)',params); - x0:=kont2disk(char(ord('x')+byte(senkrecht)),exprtofloat(st,erstesArgument(params))); - dx:=kont2diskFak(char(ord('x')+byte(senkrecht)),exprtofloat(st,erstesArgument(params))); + x0:=kont2disk(char(ord('x')+byte(senkrecht)),exprToFloat(sT,erstesArgument(params))); + dx:=kont2diskFak(char(ord('x')+byte(senkrecht)),exprToFloat(sT,erstesArgument(params))); if pos(' ',params)>0 then begin gibAus('Leerzeichen im Dateinamen sind nicht erlaubt!',3); exit; end; - if not st then - case Genauigkeit of + if not sT then + case genauigkeit of gSingle: sWerte.erzeugeBinning(senkrecht,linien,x0,dx,params); gDouble: @@ -4697,7 +4845,7 @@ end; procedure tWerte.schreibeWert(var f: textfile; x,y: longint); begin - case Genauigkeit of + case genauigkeit of gSingle: sWerte.schreibeWert(f,x,y); gDouble: dWerte.schreibeWert(f,x,y); gExtended: eWerte.schreibeWert(f,x,y); @@ -4706,55 +4854,69 @@ end; procedure tWerte.spiegle(threads: longint); begin - spiegle(threads,0,_tsiz-1); + spiegle(threads,0,_tSiz-1); end; -procedure tWerte.spiegle(threads,tmin,tmax: longint); +procedure tWerte.spiegle(threads,tMin,tMax: longint); var i: longint; - sts: array of tSpiegelthread; + sTs: array of tSpiegelThread; fertig: boolean; begin - warteaufBeendigungDesLeseThreads; - setlength(sts,threads); - for i:=0 to length(sts)-1 do - sts[i]:=tSpiegelthread.create( - tmin+round(i*(tmax+1-tmin)/length(sts)), - tmin+round((i+1)*(tmax+1-tmin)/length(sts))-1, + warteAufBeendigungDesLeseThreads; + setLength(sTs,threads); + for i:=0 to length(sTs)-1 do + sTs[i]:=tSpiegelThread.create( + tMin+round(i*(tMax+1-tMin)/length(sTs)), + tMin+round((i+1)*(tMax+1-tMin)/length(sTs))-1, self); repeat sleep(10); fertig:=true; - for i:=0 to length(sts)-1 do - fertig:=fertig and sts[i].fertig; + for i:=0 to length(sTs)-1 do + fertig:=fertig and sTs[i].fertig; until fertig; - for i:=0 to length(sts)-1 do - sts[i].free; - Transformationen:=tSpiegelungsTransformation.create(Transformationen); + for i:=0 to length(sTs)-1 do + sTs[i].free; + transformationen:=tSpiegelungsTransformation.create(transformationen); gibAus('Alle Spiegelthreads fertig!',1); end; -procedure tWerte.fft2dNachbearbeitung(threads: longint; nb: tFFTDatenordnung); +procedure tWerte.fft2dNachbearbeitung(threads: longint; nB: tFFTDatenordnung); var i: longint; FNTs: array of tFFT2dNBThread; fertig: boolean; begin + if nB in [doAlleResIms,doAlleResSmi] then begin + _tSiz:=_tSiz*2; + holeRAM(3); + case genauigkeit of + gSingle: + sWerte.fft2dNachbearbeitungVerdoppeln(nB); + gDouble: + dWerte.fft2dNachbearbeitungVerdoppeln(nB); + gExtended: + eWerte.fft2dNachbearbeitungVerdoppeln(nB); + end{of case}; + exit; + end; + // der "Rand" case genauigkeit of - gSingle: sWerte.fft2dNachbearbeitungA(nb); - gDouble: dWerte.fft2dNachbearbeitungA(nb); - gExtended: eWerte.fft2dNachbearbeitungA(nb); + gSingle: sWerte.fft2dNachbearbeitungA(nB); + gDouble: dWerte.fft2dNachbearbeitungA(nB); + gExtended: eWerte.fft2dNachbearbeitungA(nB); end{of case}; // der Hauptteil (alles außer erster und mittlerer Zeile/Spalte) - setlength(FNTs,threads); + setLength(FNTs,threads); for i:=0 to length(FNTs)-1 do FNTs[i]:=tFFT2dNBThread.create( - round(i*(_xsteps div 2 -1)/length(FNTs))+1, - round((i+1)*(_xsteps div 2 -1)/length(FNTs)), + round(i*(_xSteps div 2 -1)/length(FNTs))+1, + round((i+1)*(_xSteps div 2 -1)/length(FNTs)), self, - nb); + nB); repeat sleep(10); fertig:=true; @@ -4766,20 +4928,20 @@ begin gibAus('Alle FFT2dNBThreads fertig!',1); end; -function tWerte.exprtofloat(st: boolean; s: string): extended; +function tWerte.exprToFloat(sT: boolean; s: string): extended; begin case genauigkeit of - gSingle: result:=matheunit.exprtofloat(st,s,swerte.params.knownValues,@callBackGetValue); - gDouble: result:=matheunit.exprtofloat(st,s,dwerte.params.knownValues,@callBackGetValue); - gExtended: result:=matheunit.exprtofloat(st,s,ewerte.params.knownValues,@callBackGetValue); + gSingle: result:=matheunit.exprToFloat(sT,s,sWerte.params.knownValues,@callBackGetValue); + gDouble: result:=matheunit.exprToFloat(sT,s,dWerte.params.knownValues,@callBackGetValue); + gExtended: result:=matheunit.exprToFloat(sT,s,eWerte.params.knownValues,@callBackGetValue); end; end; -function tWerte.paramsdump: string; +function tWerte.paramsDump: string; begin - result:=bezeichner+' '+inttostr(integer(genauigkeit))+' '+inttostr(_xsteps)+' '+inttostr(_tsiz) - +' '+floattostr(sWerte.params.xstart)+'-'+floattostr(sWerte.params.xstop) - +'x'+floattostr(sWerte.params.tstart)+'-'+floattostr(sWerte.params.tstop); + result:=bezeichner+' '+intToStr(integer(genauigkeit))+' '+intToStr(_xSteps)+' '+intToStr(_tSiz) + +' '+floatToStr(sWerte.params.xStart)+'-'+floatToStr(sWerte.params.xStop) + +'x'+floatToStr(sWerte.params.tStart)+'-'+floatToStr(sWerte.params.tStop); if sWerte.params<>eWerte.params then result:='!! '+result; end; @@ -4843,7 +5005,7 @@ begin if assigned(raisedException) then begin if self is tBefehlThread then begin if assigned((self as tBefehlThread).p) then begin - ei:=' '''+(self as tBefehlThread).p.Executable+''''; + ei:=' '''+(self as tBefehlThread).p.executable+''''; for i:=0 to (self as tBefehlThread).p.parameters.count-1 do ei:=ei+' '''+(self as tBefehlThread).p.parameters[i]+''''; ei:=ei; @@ -4891,55 +5053,55 @@ var i,j,k: longint; out0,in0: boolean; begin - gibAus('LiKo-Berechnungsthread gestartet ('+inttostr(xmi)+'-'+inttostr(xma)+'x'+inttostr(tmi)+'-'+inttostr(tma)+') ...',1); + gibAus('LiKo-Berechnungsthread gestartet ('+intToStr(xMi)+'-'+intToStr(xMa)+'x'+intToStr(tMi)+'-'+intToStr(tMa)+') ...',1); for i:=0 to length(liKo^)-1 do - gibAus(liko^[i].werte.bezeichner+' * '+floattostr(liko^[i].alpha),1); + gibAus(liKo^[i].werte.bezeichner+' * '+floatToStr(liKo^[i].alpha),1); out0:=true; in0:=true; - case liKo^[0].werte.Genauigkeit of //<<todo>> + case liKo^[0].werte.genauigkeit of //<<todo>> gSingle: for j:=tMi to tMa do begin if (tMa-j) mod ((tMa-tMi) div 10) = 0 then - gibAus('LiKo-Berechnungsthread: '+inttostr(j)+'/'+inttostr(tMi)+'..'+inttostr(tMa)+' ('+inttostr(xMi)+'..'+inttostr(xMa)+')',1); + gibAus('LiKo-Berechnungsthread: '+intToStr(j)+'/'+intToStr(tMi)+'..'+intToStr(tMa)+' ('+intToStr(xMi)+'..'+intToStr(xMa)+')',1); for i:=xMi to xMa do begin - pW.eWerte.werte[i+j*pW._xsteps]:=0; + pW.eWerte.werte[i+j*pW._xSteps]:=0; for k:=0 to length(liKo^)-1 do begin - pW.eWerte.werte[i+j*pW._xsteps]:= - pW.eWerte.werte[i+j*pW._xsteps] + - liKo^[k].alpha*liKo^[k].werte.sWerte.werte[(xOf+i) + (tOf+j)*liKo^[k].werte._xsteps]; - in0:=in0 and (liKo^[k].werte.sWerte.werte[(xOf+i) + (tOf+j)*liKo^[k].werte._xsteps]=0); + pW.eWerte.werte[i+j*pW._xSteps]:= + pW.eWerte.werte[i+j*pW._xSteps] + + liKo^[k].alpha*liKo^[k].werte.sWerte.werte[(xOf+i) + (tOf+j)*liKo^[k].werte._xSteps]; + in0:=in0 and (liKo^[k].werte.sWerte.werte[(xOf+i) + (tOf+j)*liKo^[k].werte._xSteps]=0); end; - out0:=out0 and (pW.eWerte.werte[i+j*pW._xsteps]=0); + out0:=out0 and (pW.eWerte.werte[i+j*pW._xSteps]=0); end; end; gDouble: for j:=tMi to tMa do begin if (tMa-j) mod ((tMa-tMi) div 10) = 0 then - gibAus('LiKo-Berechnungsthread: '+inttostr(j)+'/'+inttostr(tMi)+'..'+inttostr(tMa)+' ('+inttostr(xMi)+'..'+inttostr(xMa)+')',1); + gibAus('LiKo-Berechnungsthread: '+intToStr(j)+'/'+intToStr(tMi)+'..'+intToStr(tMa)+' ('+intToStr(xMi)+'..'+intToStr(xMa)+')',1); for i:=xMi to xMa do begin - pW.eWerte.werte[i+j*pW._xsteps]:=0; + pW.eWerte.werte[i+j*pW._xSteps]:=0; for k:=0 to length(liKo^)-1 do begin - pW.eWerte.werte[i+j*pW._xsteps]:= - pW.eWerte.werte[i+j*pW._xsteps] + - liKo^[k].alpha*liKo^[k].werte.dWerte.werte[(xOf+i) + (tOf+j)*liKo^[k].werte._xsteps]; - in0:=in0 and (liKo^[k].werte.dWerte.werte[(xOf+i) + (tOf+j)*liKo^[k].werte._xsteps]=0); + pW.eWerte.werte[i+j*pW._xSteps]:= + pW.eWerte.werte[i+j*pW._xSteps] + + liKo^[k].alpha*liKo^[k].werte.dWerte.werte[(xOf+i) + (tOf+j)*liKo^[k].werte._xSteps]; + in0:=in0 and (liKo^[k].werte.dWerte.werte[(xOf+i) + (tOf+j)*liKo^[k].werte._xSteps]=0); end; - out0:=out0 and (pW.eWerte.werte[i+j*pW._xsteps]=0); + out0:=out0 and (pW.eWerte.werte[i+j*pW._xSteps]=0); end; end; gExtended: for j:=tMi to tMa do begin if (tMa-j) mod ((tMa-tMi) div 10) = 0 then - gibAus('LiKo-Berechnungsthread: '+inttostr(j)+'/'+inttostr(tMi)+'..'+inttostr(tMa)+' ('+inttostr(xMi)+'..'+inttostr(xMa)+')',1); + gibAus('LiKo-Berechnungsthread: '+intToStr(j)+'/'+intToStr(tMi)+'..'+intToStr(tMa)+' ('+intToStr(xMi)+'..'+intToStr(xMa)+')',1); for i:=xMi to xMa do begin - pW.eWerte.werte[i+j*pW._xsteps]:=0; + pW.eWerte.werte[i+j*pW._xSteps]:=0; for k:=0 to length(liKo^)-1 do begin - pW.eWerte.werte[i+j*pW._xsteps]:= - pW.eWerte.werte[i+j*pW._xsteps] + - liKo^[k].alpha*liKo^[k].werte.eWerte.werte[(xOf+i) + (tOf+j)*liKo^[k].werte._xsteps]; - in0:=in0 and (liKo^[k].werte.eWerte.werte[(xOf+i) + (tOf+j)*liKo^[k].werte._xsteps]=0); + pW.eWerte.werte[i+j*pW._xSteps]:= + pW.eWerte.werte[i+j*pW._xSteps] + + liKo^[k].alpha*liKo^[k].werte.eWerte.werte[(xOf+i) + (tOf+j)*liKo^[k].werte._xSteps]; + in0:=in0 and (liKo^[k].werte.eWerte.werte[(xOf+i) + (tOf+j)*liKo^[k].werte._xSteps]=0); end; - out0:=out0 and (pW.eWerte.werte[i+j*pW._xsteps]=0); + out0:=out0 and (pW.eWerte.werte[i+j*pW._xSteps]=0); end; end; end{of Case}; @@ -4976,172 +5138,172 @@ begin i01:=true; i02:=true; o0:=true; - case dend.Genauigkeit of + case dend.genauigkeit of gSingle: - case sor.Genauigkeit of + case sor.genauigkeit of gSingle: // single / single for j:=tMi to tMa do begin if (tMa-j) mod ((tMa-tMi) div 10) = 0 then - gibAus('Quotient-Berechnungsthread: '+inttostr(j)+'/'+inttostr(tMi)+'..'+inttostr(tMa)+' ('+inttostr(xMi)+'..'+inttostr(xMa)+')',1); + gibAus('Quotient-Berechnungsthread: '+intToStr(j)+'/'+intToStr(tMi)+'..'+intToStr(tMa)+' ('+intToStr(xMi)+'..'+intToStr(xMa)+')',1); for i:=xMi to xMa do - if abs(sor.sWerte.werte[(xOf+i) + (tOf+j)*sor._xsteps])<eps then - quot.eWerte.werte[i+j*quot._xsteps]:= - dend.sWerte.werte[(xOf+i) + (tOf+j)*dend._xsteps] / - eps*sign(sor.sWerte.werte[(xOf+i) + (tOf+j)*sor._xsteps]) + if abs(sor.sWerte.werte[(xOf+i) + (tOf+j)*sor._xSteps])<eps then + quot.eWerte.werte[i+j*quot._xSteps]:= + dend.sWerte.werte[(xOf+i) + (tOf+j)*dend._xSteps] / + eps*sign(sor.sWerte.werte[(xOf+i) + (tOf+j)*sor._xSteps]) else - quot.eWerte.werte[i+j*quot._xsteps]:= - dend.sWerte.werte[(xOf+i) + (tOf+j)*dend._xsteps] / - sor.sWerte.werte[(xOf+i) + (tOf+j)*sor._xsteps]; - i01:=i01 and (dend.sWerte.werte[(xOf+i) + (tOf+j)*dend._xsteps]=0); - i02:=i02 and (sor.sWerte.werte[(xOf+i) + (tOf+j)*sor._xsteps]=0); - o0:=o0 and (quot.eWerte.werte[i+j*quot._xsteps]=0); + quot.eWerte.werte[i+j*quot._xSteps]:= + dend.sWerte.werte[(xOf+i) + (tOf+j)*dend._xSteps] / + sor.sWerte.werte[(xOf+i) + (tOf+j)*sor._xSteps]; + i01:=i01 and (dend.sWerte.werte[(xOf+i) + (tOf+j)*dend._xSteps]=0); + i02:=i02 and (sor.sWerte.werte[(xOf+i) + (tOf+j)*sor._xSteps]=0); + o0:=o0 and (quot.eWerte.werte[i+j*quot._xSteps]=0); end; gDouble: // single / double for j:=tMi to tMa do begin if (tMa-j) mod ((tMa-tMi) div 10) = 0 then - gibAus('Quotient-Berechnungsthread: '+inttostr(j)+'/'+inttostr(tMi)+'..'+inttostr(tMa)+' ('+inttostr(xMi)+'..'+inttostr(xMa)+')',1); + gibAus('Quotient-Berechnungsthread: '+intToStr(j)+'/'+intToStr(tMi)+'..'+intToStr(tMa)+' ('+intToStr(xMi)+'..'+intToStr(xMa)+')',1); for i:=xMi to xMa do begin - if abs(sor.dWerte.werte[(xOf+i) + (tOf+j)*sor._xsteps])<eps then - quot.eWerte.werte[i+j*quot._xsteps]:= - dend.sWerte.werte[(xOf+i) + (tOf+j)*dend._xsteps] / - eps*sign(sor.dWerte.werte[(xOf+i) + (tOf+j)*sor._xsteps]) + if abs(sor.dWerte.werte[(xOf+i) + (tOf+j)*sor._xSteps])<eps then + quot.eWerte.werte[i+j*quot._xSteps]:= + dend.sWerte.werte[(xOf+i) + (tOf+j)*dend._xSteps] / + eps*sign(sor.dWerte.werte[(xOf+i) + (tOf+j)*sor._xSteps]) else - quot.eWerte.werte[i+j*quot._xsteps]:= - dend.sWerte.werte[(xOf+i) + (tOf+j)*dend._xsteps] / - sor.dWerte.werte[(xOf+i) + (tOf+j)*sor._xsteps]; - i01:=i01 and (dend.sWerte.werte[(xOf+i) + (tOf+j)*dend._xsteps]=0); - i02:=i02 and (sor.dWerte.werte[(xOf+i) + (tOf+j)*sor._xsteps]=0); - o0:=o0 and (quot.eWerte.werte[i+j*quot._xsteps]=0); + quot.eWerte.werte[i+j*quot._xSteps]:= + dend.sWerte.werte[(xOf+i) + (tOf+j)*dend._xSteps] / + sor.dWerte.werte[(xOf+i) + (tOf+j)*sor._xSteps]; + i01:=i01 and (dend.sWerte.werte[(xOf+i) + (tOf+j)*dend._xSteps]=0); + i02:=i02 and (sor.dWerte.werte[(xOf+i) + (tOf+j)*sor._xSteps]=0); + o0:=o0 and (quot.eWerte.werte[i+j*quot._xSteps]=0); end; end; gExtended: // single / extended for j:=tMi to tMa do begin if (tMa-j) mod ((tMa-tMi) div 10) = 0 then - gibAus('Quotient-Berechnungsthread: '+inttostr(j)+'/'+inttostr(tMi)+'..'+inttostr(tMa)+' ('+inttostr(xMi)+'..'+inttostr(xMa)+')',1); + gibAus('Quotient-Berechnungsthread: '+intToStr(j)+'/'+intToStr(tMi)+'..'+intToStr(tMa)+' ('+intToStr(xMi)+'..'+intToStr(xMa)+')',1); for i:=xMi to xMa do begin - if abs(sor.eWerte.werte[(xOf+i) + (tOf+j)*sor._xsteps])<eps then - quot.eWerte.werte[i+j*quot._xsteps]:= - dend.sWerte.werte[(xOf+i) + (tOf+j)*dend._xsteps] / - eps*sign(sor.eWerte.werte[(xOf+i) + (tOf+j)*sor._xsteps]) + if abs(sor.eWerte.werte[(xOf+i) + (tOf+j)*sor._xSteps])<eps then + quot.eWerte.werte[i+j*quot._xSteps]:= + dend.sWerte.werte[(xOf+i) + (tOf+j)*dend._xSteps] / + eps*sign(sor.eWerte.werte[(xOf+i) + (tOf+j)*sor._xSteps]) else - quot.eWerte.werte[i+j*quot._xsteps]:= - dend.sWerte.werte[(xOf+i) + (tOf+j)*dend._xsteps] / - sor.eWerte.werte[(xOf+i) + (tOf+j)*sor._xsteps]; - i01:=i01 and (dend.sWerte.werte[(xOf+i) + (tOf+j)*dend._xsteps]=0); - i02:=i02 and (sor.eWerte.werte[(xOf+i) + (tOf+j)*sor._xsteps]=0); - o0:=o0 and (quot.eWerte.werte[i+j*quot._xsteps]=0); + quot.eWerte.werte[i+j*quot._xSteps]:= + dend.sWerte.werte[(xOf+i) + (tOf+j)*dend._xSteps] / + sor.eWerte.werte[(xOf+i) + (tOf+j)*sor._xSteps]; + i01:=i01 and (dend.sWerte.werte[(xOf+i) + (tOf+j)*dend._xSteps]=0); + i02:=i02 and (sor.eWerte.werte[(xOf+i) + (tOf+j)*sor._xSteps]=0); + o0:=o0 and (quot.eWerte.werte[i+j*quot._xSteps]=0); end; end; end{of case}; gDouble: - case sor.Genauigkeit of + case sor.genauigkeit of gSingle: // double / single for j:=tMi to tMa do begin if (tMa-j) mod ((tMa-tMi) div 10) = 0 then - gibAus('Quotient-Berechnungsthread: '+inttostr(j)+'/'+inttostr(tMi)+'..'+inttostr(tMa)+' ('+inttostr(xMi)+'..'+inttostr(xMa)+')',1); + gibAus('Quotient-Berechnungsthread: '+intToStr(j)+'/'+intToStr(tMi)+'..'+intToStr(tMa)+' ('+intToStr(xMi)+'..'+intToStr(xMa)+')',1); for i:=xMi to xMa do - if abs(sor.sWerte.werte[(xOf+i) + (tOf+j)*sor._xsteps])<eps then - quot.eWerte.werte[i+j*quot._xsteps]:= - dend.dWerte.werte[(xOf+i) + (tOf+j)*dend._xsteps] / - eps*sign(sor.sWerte.werte[(xOf+i) + (tOf+j)*sor._xsteps]) + if abs(sor.sWerte.werte[(xOf+i) + (tOf+j)*sor._xSteps])<eps then + quot.eWerte.werte[i+j*quot._xSteps]:= + dend.dWerte.werte[(xOf+i) + (tOf+j)*dend._xSteps] / + eps*sign(sor.sWerte.werte[(xOf+i) + (tOf+j)*sor._xSteps]) else - quot.eWerte.werte[i+j*quot._xsteps]:= - dend.dWerte.werte[(xOf+i) + (tOf+j)*dend._xsteps] / - sor.sWerte.werte[(xOf+i) + (tOf+j)*sor._xsteps]; - i01:=i01 and (dend.dWerte.werte[(xOf+i) + (tOf+j)*dend._xsteps]=0); - i02:=i02 and (sor.sWerte.werte[(xOf+i) + (tOf+j)*sor._xsteps]=0); - o0:=o0 and (quot.eWerte.werte[i+j*quot._xsteps]=0); + quot.eWerte.werte[i+j*quot._xSteps]:= + dend.dWerte.werte[(xOf+i) + (tOf+j)*dend._xSteps] / + sor.sWerte.werte[(xOf+i) + (tOf+j)*sor._xSteps]; + i01:=i01 and (dend.dWerte.werte[(xOf+i) + (tOf+j)*dend._xSteps]=0); + i02:=i02 and (sor.sWerte.werte[(xOf+i) + (tOf+j)*sor._xSteps]=0); + o0:=o0 and (quot.eWerte.werte[i+j*quot._xSteps]=0); end; gDouble: // double / double for j:=tMi to tMa do begin if (tMa-j) mod ((tMa-tMi) div 10) = 0 then - gibAus('Quotient-Berechnungsthread: '+inttostr(j)+'/'+inttostr(tMi)+'..'+inttostr(tMa)+' ('+inttostr(xMi)+'..'+inttostr(xMa)+')',1); + gibAus('Quotient-Berechnungsthread: '+intToStr(j)+'/'+intToStr(tMi)+'..'+intToStr(tMa)+' ('+intToStr(xMi)+'..'+intToStr(xMa)+')',1); for i:=xMi to xMa do begin - if abs(sor.dWerte.werte[(xOf+i) + (tOf+j)*sor._xsteps])<eps then - quot.eWerte.werte[i+j*quot._xsteps]:= - dend.dWerte.werte[(xOf+i) + (tOf+j)*dend._xsteps] / - eps*sign(sor.dWerte.werte[(xOf+i) + (tOf+j)*sor._xsteps]) + if abs(sor.dWerte.werte[(xOf+i) + (tOf+j)*sor._xSteps])<eps then + quot.eWerte.werte[i+j*quot._xSteps]:= + dend.dWerte.werte[(xOf+i) + (tOf+j)*dend._xSteps] / + eps*sign(sor.dWerte.werte[(xOf+i) + (tOf+j)*sor._xSteps]) else - quot.eWerte.werte[i+j*quot._xsteps]:= - dend.dWerte.werte[(xOf+i) + (tOf+j)*dend._xsteps] / - sor.dWerte.werte[(xOf+i) + (tOf+j)*sor._xsteps]; - i01:=i01 and (dend.dWerte.werte[(xOf+i) + (tOf+j)*dend._xsteps]=0); - i02:=i02 and (sor.dWerte.werte[(xOf+i) + (tOf+j)*sor._xsteps]=0); - o0:=o0 and (quot.eWerte.werte[i+j*quot._xsteps]=0); + quot.eWerte.werte[i+j*quot._xSteps]:= + dend.dWerte.werte[(xOf+i) + (tOf+j)*dend._xSteps] / + sor.dWerte.werte[(xOf+i) + (tOf+j)*sor._xSteps]; + i01:=i01 and (dend.dWerte.werte[(xOf+i) + (tOf+j)*dend._xSteps]=0); + i02:=i02 and (sor.dWerte.werte[(xOf+i) + (tOf+j)*sor._xSteps]=0); + o0:=o0 and (quot.eWerte.werte[i+j*quot._xSteps]=0); end; end; gExtended: // double / extended for j:=tMi to tMa do begin if (tMa-j) mod ((tMa-tMi) div 10) = 0 then - gibAus('Quotient-Berechnungsthread: '+inttostr(j)+'/'+inttostr(tMi)+'..'+inttostr(tMa)+' ('+inttostr(xMi)+'..'+inttostr(xMa)+')',1); + gibAus('Quotient-Berechnungsthread: '+intToStr(j)+'/'+intToStr(tMi)+'..'+intToStr(tMa)+' ('+intToStr(xMi)+'..'+intToStr(xMa)+')',1); for i:=xMi to xMa do begin - if abs(sor.eWerte.werte[(xOf+i) + (tOf+j)*sor._xsteps])<eps then - quot.eWerte.werte[i+j*quot._xsteps]:= - dend.dWerte.werte[(xOf+i) + (tOf+j)*dend._xsteps] / - eps*sign(sor.eWerte.werte[(xOf+i) + (tOf+j)*sor._xsteps]) + if abs(sor.eWerte.werte[(xOf+i) + (tOf+j)*sor._xSteps])<eps then + quot.eWerte.werte[i+j*quot._xSteps]:= + dend.dWerte.werte[(xOf+i) + (tOf+j)*dend._xSteps] / + eps*sign(sor.eWerte.werte[(xOf+i) + (tOf+j)*sor._xSteps]) else - quot.eWerte.werte[i+j*quot._xsteps]:= - dend.dWerte.werte[(xOf+i) + (tOf+j)*dend._xsteps] / - sor.eWerte.werte[(xOf+i) + (tOf+j)*sor._xsteps]; - i01:=i01 and (dend.dWerte.werte[(xOf+i) + (tOf+j)*dend._xsteps]=0); - i02:=i02 and (sor.eWerte.werte[(xOf+i) + (tOf+j)*sor._xsteps]=0); - o0:=o0 and (quot.eWerte.werte[i+j*quot._xsteps]=0); + quot.eWerte.werte[i+j*quot._xSteps]:= + dend.dWerte.werte[(xOf+i) + (tOf+j)*dend._xSteps] / + sor.eWerte.werte[(xOf+i) + (tOf+j)*sor._xSteps]; + i01:=i01 and (dend.dWerte.werte[(xOf+i) + (tOf+j)*dend._xSteps]=0); + i02:=i02 and (sor.eWerte.werte[(xOf+i) + (tOf+j)*sor._xSteps]=0); + o0:=o0 and (quot.eWerte.werte[i+j*quot._xSteps]=0); end; end; end{of case}; gExtended: - case sor.Genauigkeit of + case sor.genauigkeit of gSingle: // extended / single for j:=tMi to tMa do begin if (tMa-j) mod ((tMa-tMi) div 10) = 0 then - gibAus('Quotient-Berechnungsthread: '+inttostr(j)+'/'+inttostr(tMi)+'..'+inttostr(tMa)+' ('+inttostr(xMi)+'..'+inttostr(xMa)+')',1); + gibAus('Quotient-Berechnungsthread: '+intToStr(j)+'/'+intToStr(tMi)+'..'+intToStr(tMa)+' ('+intToStr(xMi)+'..'+intToStr(xMa)+')',1); for i:=xMi to xMa do - if abs(sor.sWerte.werte[(xOf+i) + (tOf+j)*sor._xsteps])<eps then - quot.eWerte.werte[i+j*quot._xsteps]:= - dend.eWerte.werte[(xOf+i) + (tOf+j)*dend._xsteps] / - eps*sign(sor.sWerte.werte[(xOf+i) + (tOf+j)*sor._xsteps]) + if abs(sor.sWerte.werte[(xOf+i) + (tOf+j)*sor._xSteps])<eps then + quot.eWerte.werte[i+j*quot._xSteps]:= + dend.eWerte.werte[(xOf+i) + (tOf+j)*dend._xSteps] / + eps*sign(sor.sWerte.werte[(xOf+i) + (tOf+j)*sor._xSteps]) else - quot.eWerte.werte[i+j*quot._xsteps]:= - dend.eWerte.werte[(xOf+i) + (tOf+j)*dend._xsteps] / - sor.sWerte.werte[(xOf+i) + (tOf+j)*sor._xsteps]; - i01:=i01 and (dend.eWerte.werte[(xOf+i) + (tOf+j)*dend._xsteps]=0); - i02:=i02 and (sor.sWerte.werte[(xOf+i) + (tOf+j)*sor._xsteps]=0); - o0:=o0 and (quot.eWerte.werte[i+j*quot._xsteps]=0); + quot.eWerte.werte[i+j*quot._xSteps]:= + dend.eWerte.werte[(xOf+i) + (tOf+j)*dend._xSteps] / + sor.sWerte.werte[(xOf+i) + (tOf+j)*sor._xSteps]; + i01:=i01 and (dend.eWerte.werte[(xOf+i) + (tOf+j)*dend._xSteps]=0); + i02:=i02 and (sor.sWerte.werte[(xOf+i) + (tOf+j)*sor._xSteps]=0); + o0:=o0 and (quot.eWerte.werte[i+j*quot._xSteps]=0); end; gDouble: // extended / double for j:=tMi to tMa do begin if (tMa-j) mod ((tMa-tMi) div 10) = 0 then - gibAus('Quotient-Berechnungsthread: '+inttostr(j)+'/'+inttostr(tMi)+'..'+inttostr(tMa)+' ('+inttostr(xMi)+'..'+inttostr(xMa)+')',1); + gibAus('Quotient-Berechnungsthread: '+intToStr(j)+'/'+intToStr(tMi)+'..'+intToStr(tMa)+' ('+intToStr(xMi)+'..'+intToStr(xMa)+')',1); for i:=xMi to xMa do begin - if abs(sor.dWerte.werte[(xOf+i) + (tOf+j)*sor._xsteps])<eps then - quot.eWerte.werte[i+j*quot._xsteps]:= - dend.eWerte.werte[(xOf+i) + (tOf+j)*dend._xsteps] / - eps*sign(sor.dWerte.werte[(xOf+i) + (tOf+j)*sor._xsteps]) + if abs(sor.dWerte.werte[(xOf+i) + (tOf+j)*sor._xSteps])<eps then + quot.eWerte.werte[i+j*quot._xSteps]:= + dend.eWerte.werte[(xOf+i) + (tOf+j)*dend._xSteps] / + eps*sign(sor.dWerte.werte[(xOf+i) + (tOf+j)*sor._xSteps]) else - quot.eWerte.werte[i+j*quot._xsteps]:= - dend.eWerte.werte[(xOf+i) + (tOf+j)*dend._xsteps] / - sor.dWerte.werte[(xOf+i) + (tOf+j)*sor._xsteps]; - i01:=i01 and (dend.eWerte.werte[(xOf+i) + (tOf+j)*dend._xsteps]=0); - i02:=i02 and (sor.dWerte.werte[(xOf+i) + (tOf+j)*sor._xsteps]=0); - o0:=o0 and (quot.eWerte.werte[i+j*quot._xsteps]=0); + quot.eWerte.werte[i+j*quot._xSteps]:= + dend.eWerte.werte[(xOf+i) + (tOf+j)*dend._xSteps] / + sor.dWerte.werte[(xOf+i) + (tOf+j)*sor._xSteps]; + i01:=i01 and (dend.eWerte.werte[(xOf+i) + (tOf+j)*dend._xSteps]=0); + i02:=i02 and (sor.dWerte.werte[(xOf+i) + (tOf+j)*sor._xSteps]=0); + o0:=o0 and (quot.eWerte.werte[i+j*quot._xSteps]=0); end; end; gExtended: // extended / extended for j:=tMi to tMa do begin if (tMa-j) mod ((tMa-tMi) div 10) = 0 then - gibAus('Quotient-Berechnungsthread: '+inttostr(j)+'/'+inttostr(tMi)+'..'+inttostr(tMa)+' ('+inttostr(xMi)+'..'+inttostr(xMa)+')',1); + gibAus('Quotient-Berechnungsthread: '+intToStr(j)+'/'+intToStr(tMi)+'..'+intToStr(tMa)+' ('+intToStr(xMi)+'..'+intToStr(xMa)+')',1); for i:=xMi to xMa do begin - if abs(sor.eWerte.werte[(xOf+i) + (tOf+j)*sor._xsteps])<eps then - quot.eWerte.werte[i+j*quot._xsteps]:= - dend.eWerte.werte[(xOf+i) + (tOf+j)*dend._xsteps] / - eps*sign(sor.eWerte.werte[(xOf+i) + (tOf+j)*sor._xsteps]) + if abs(sor.eWerte.werte[(xOf+i) + (tOf+j)*sor._xSteps])<eps then + quot.eWerte.werte[i+j*quot._xSteps]:= + dend.eWerte.werte[(xOf+i) + (tOf+j)*dend._xSteps] / + eps*sign(sor.eWerte.werte[(xOf+i) + (tOf+j)*sor._xSteps]) else - quot.eWerte.werte[i+j*quot._xsteps]:= - dend.eWerte.werte[(xOf+i) + (tOf+j)*dend._xsteps] / - sor.eWerte.werte[(xOf+i) + (tOf+j)*sor._xsteps]; - i01:=i01 and (dend.eWerte.werte[(xOf+i) + (tOf+j)*dend._xsteps]=0); - i02:=i02 and (sor.eWerte.werte[(xOf+i) + (tOf+j)*sor._xsteps]=0); - o0:=o0 and (quot.eWerte.werte[i+j*quot._xsteps]=0); + quot.eWerte.werte[i+j*quot._xSteps]:= + dend.eWerte.werte[(xOf+i) + (tOf+j)*dend._xSteps] / + sor.eWerte.werte[(xOf+i) + (tOf+j)*sor._xSteps]; + i01:=i01 and (dend.eWerte.werte[(xOf+i) + (tOf+j)*dend._xSteps]=0); + i02:=i02 and (sor.eWerte.werte[(xOf+i) + (tOf+j)*sor._xSteps]=0); + o0:=o0 and (quot.eWerte.werte[i+j*quot._xSteps]=0); end; end; end{of case}; @@ -5180,122 +5342,122 @@ begin i02:=true; o0:=true; - case f1.Genauigkeit of + case f1.genauigkeit of gSingle: - case f2.Genauigkeit of + case f2.genauigkeit of gSingle: // single * single for j:=tMi to tMa do begin if (tMa-j) mod ((tMa-tMi) div 10) = 0 then - gibAus('Produkt-Berechnungsthread: '+inttostr(j)+'/'+inttostr(tMi)+'..'+inttostr(tMa)+' ('+inttostr(xMi)+'..'+inttostr(xMa)+')',1); + gibAus('Produkt-Berechnungsthread: '+intToStr(j)+'/'+intToStr(tMi)+'..'+intToStr(tMa)+' ('+intToStr(xMi)+'..'+intToStr(xMa)+')',1); for i:=xMi to xMa do - pro.eWerte.werte[i+j*pro._xsteps]:= - f1.sWerte.werte[(xOf+i) + (tOf+j)*f1._xsteps] * - f2.sWerte.werte[(xOf+i) + (tOf+j)*f2._xsteps]; - i01:=i01 and (f1.sWerte.werte[(xOf+i) + (tOf+j)*f1._xsteps]=0); - i02:=i02 and (f2.sWerte.werte[(xOf+i) + (tOf+j)*f2._xsteps]=0); - o0:=o0 and (pro.eWerte.werte[i+j*pro._xsteps]=0); + pro.eWerte.werte[i+j*pro._xSteps]:= + f1.sWerte.werte[(xOf+i) + (tOf+j)*f1._xSteps] * + f2.sWerte.werte[(xOf+i) + (tOf+j)*f2._xSteps]; + i01:=i01 and (f1.sWerte.werte[(xOf+i) + (tOf+j)*f1._xSteps]=0); + i02:=i02 and (f2.sWerte.werte[(xOf+i) + (tOf+j)*f2._xSteps]=0); + o0:=o0 and (pro.eWerte.werte[i+j*pro._xSteps]=0); end; gDouble: // single * double for j:=tMi to tMa do begin if (tMa-j) mod ((tMa-tMi) div 10) = 0 then - gibAus('Produkt-Berechnungsthread: '+inttostr(j)+'/'+inttostr(tMi)+'..'+inttostr(tMa)+' ('+inttostr(xMi)+'..'+inttostr(xMa)+')',1); + gibAus('Produkt-Berechnungsthread: '+intToStr(j)+'/'+intToStr(tMi)+'..'+intToStr(tMa)+' ('+intToStr(xMi)+'..'+intToStr(xMa)+')',1); for i:=xMi to xMa do - pro.eWerte.werte[i+j*pro._xsteps]:= - f1.sWerte.werte[(xOf+i) + (tOf+j)*f1._xsteps] * - f2.dWerte.werte[(xOf+i) + (tOf+j)*f2._xsteps]; - i01:=i01 and (f1.sWerte.werte[(xOf+i) + (tOf+j)*f1._xsteps]=0); - i02:=i02 and (f2.dWerte.werte[(xOf+i) + (tOf+j)*f2._xsteps]=0); - o0:=o0 and (pro.eWerte.werte[i+j*pro._xsteps]=0); + pro.eWerte.werte[i+j*pro._xSteps]:= + f1.sWerte.werte[(xOf+i) + (tOf+j)*f1._xSteps] * + f2.dWerte.werte[(xOf+i) + (tOf+j)*f2._xSteps]; + i01:=i01 and (f1.sWerte.werte[(xOf+i) + (tOf+j)*f1._xSteps]=0); + i02:=i02 and (f2.dWerte.werte[(xOf+i) + (tOf+j)*f2._xSteps]=0); + o0:=o0 and (pro.eWerte.werte[i+j*pro._xSteps]=0); end; gExtended: // single * extended for j:=tMi to tMa do begin if (tMa-j) mod ((tMa-tMi) div 10) = 0 then - gibAus('Produkt-Berechnungsthread: '+inttostr(j)+'/'+inttostr(tMi)+'..'+inttostr(tMa)+' ('+inttostr(xMi)+'..'+inttostr(xMa)+')',1); + gibAus('Produkt-Berechnungsthread: '+intToStr(j)+'/'+intToStr(tMi)+'..'+intToStr(tMa)+' ('+intToStr(xMi)+'..'+intToStr(xMa)+')',1); for i:=xMi to xMa do - pro.eWerte.werte[i+j*pro._xsteps]:= - f1.sWerte.werte[(xOf+i) + (tOf+j)*f1._xsteps] * - f2.eWerte.werte[(xOf+i) + (tOf+j)*f2._xsteps]; - i01:=i01 and (f1.sWerte.werte[(xOf+i) + (tOf+j)*f1._xsteps]=0); - i02:=i02 and (f2.eWerte.werte[(xOf+i) + (tOf+j)*f2._xsteps]=0); - o0:=o0 and (pro.eWerte.werte[i+j*pro._xsteps]=0); + pro.eWerte.werte[i+j*pro._xSteps]:= + f1.sWerte.werte[(xOf+i) + (tOf+j)*f1._xSteps] * + f2.eWerte.werte[(xOf+i) + (tOf+j)*f2._xSteps]; + i01:=i01 and (f1.sWerte.werte[(xOf+i) + (tOf+j)*f1._xSteps]=0); + i02:=i02 and (f2.eWerte.werte[(xOf+i) + (tOf+j)*f2._xSteps]=0); + o0:=o0 and (pro.eWerte.werte[i+j*pro._xSteps]=0); end; end{of case}; gDouble: - case f2.Genauigkeit of + case f2.genauigkeit of gSingle: // double * single for j:=tMi to tMa do begin if (tMa-j) mod ((tMa-tMi) div 10) = 0 then - gibAus('Produkt-Berechnungsthread: '+inttostr(j)+'/'+inttostr(tMi)+'..'+inttostr(tMa)+' ('+inttostr(xMi)+'..'+inttostr(xMa)+')',1); + gibAus('Produkt-Berechnungsthread: '+intToStr(j)+'/'+intToStr(tMi)+'..'+intToStr(tMa)+' ('+intToStr(xMi)+'..'+intToStr(xMa)+')',1); for i:=xMi to xMa do - pro.eWerte.werte[i+j*pro._xsteps]:= - f1.dWerte.werte[(xOf+i) + (tOf+j)*f1._xsteps] * - f2.sWerte.werte[(xOf+i) + (tOf+j)*f2._xsteps]; - i01:=i01 and (f1.dWerte.werte[(xOf+i) + (tOf+j)*f1._xsteps]=0); - i02:=i02 and (f2.sWerte.werte[(xOf+i) + (tOf+j)*f2._xsteps]=0); - o0:=o0 and (pro.eWerte.werte[i+j*pro._xsteps]=0); + pro.eWerte.werte[i+j*pro._xSteps]:= + f1.dWerte.werte[(xOf+i) + (tOf+j)*f1._xSteps] * + f2.sWerte.werte[(xOf+i) + (tOf+j)*f2._xSteps]; + i01:=i01 and (f1.dWerte.werte[(xOf+i) + (tOf+j)*f1._xSteps]=0); + i02:=i02 and (f2.sWerte.werte[(xOf+i) + (tOf+j)*f2._xSteps]=0); + o0:=o0 and (pro.eWerte.werte[i+j*pro._xSteps]=0); end; gDouble: // double * double for j:=tMi to tMa do begin if (tMa-j) mod ((tMa-tMi) div 10) = 0 then - gibAus('Produkt-Berechnungsthread: '+inttostr(j)+'/'+inttostr(tMi)+'..'+inttostr(tMa)+' ('+inttostr(xMi)+'..'+inttostr(xMa)+')',1); + gibAus('Produkt-Berechnungsthread: '+intToStr(j)+'/'+intToStr(tMi)+'..'+intToStr(tMa)+' ('+intToStr(xMi)+'..'+intToStr(xMa)+')',1); for i:=xMi to xMa do - pro.eWerte.werte[i+j*pro._xsteps]:= - f1.dWerte.werte[(xOf+i) + (tOf+j)*f1._xsteps] * - f2.dWerte.werte[(xOf+i) + (tOf+j)*f2._xsteps]; - i01:=i01 and (f1.dWerte.werte[(xOf+i) + (tOf+j)*f1._xsteps]=0); - i02:=i02 and (f2.dWerte.werte[(xOf+i) + (tOf+j)*f2._xsteps]=0); - o0:=o0 and (pro.eWerte.werte[i+j*pro._xsteps]=0); + pro.eWerte.werte[i+j*pro._xSteps]:= + f1.dWerte.werte[(xOf+i) + (tOf+j)*f1._xSteps] * + f2.dWerte.werte[(xOf+i) + (tOf+j)*f2._xSteps]; + i01:=i01 and (f1.dWerte.werte[(xOf+i) + (tOf+j)*f1._xSteps]=0); + i02:=i02 and (f2.dWerte.werte[(xOf+i) + (tOf+j)*f2._xSteps]=0); + o0:=o0 and (pro.eWerte.werte[i+j*pro._xSteps]=0); end; gExtended: // double * extended for j:=tMi to tMa do begin if (tMa-j) mod ((tMa-tMi) div 10) = 0 then - gibAus('Produkt-Berechnungsthread: '+inttostr(j)+'/'+inttostr(tMi)+'..'+inttostr(tMa)+' ('+inttostr(xMi)+'..'+inttostr(xMa)+')',1); + gibAus('Produkt-Berechnungsthread: '+intToStr(j)+'/'+intToStr(tMi)+'..'+intToStr(tMa)+' ('+intToStr(xMi)+'..'+intToStr(xMa)+')',1); for i:=xMi to xMa do - pro.eWerte.werte[i+j*pro._xsteps]:= - f1.dWerte.werte[(xOf+i) + (tOf+j)*f1._xsteps] * - f2.eWerte.werte[(xOf+i) + (tOf+j)*f2._xsteps]; - i01:=i01 and (f1.dWerte.werte[(xOf+i) + (tOf+j)*f1._xsteps]=0); - i02:=i02 and (f2.eWerte.werte[(xOf+i) + (tOf+j)*f2._xsteps]=0); - o0:=o0 and (pro.eWerte.werte[i+j*pro._xsteps]=0); + pro.eWerte.werte[i+j*pro._xSteps]:= + f1.dWerte.werte[(xOf+i) + (tOf+j)*f1._xSteps] * + f2.eWerte.werte[(xOf+i) + (tOf+j)*f2._xSteps]; + i01:=i01 and (f1.dWerte.werte[(xOf+i) + (tOf+j)*f1._xSteps]=0); + i02:=i02 and (f2.eWerte.werte[(xOf+i) + (tOf+j)*f2._xSteps]=0); + o0:=o0 and (pro.eWerte.werte[i+j*pro._xSteps]=0); end; end{of case}; gExtended: - case f2.Genauigkeit of + case f2.genauigkeit of gSingle: // extended * single for j:=tMi to tMa do begin if (tMa-j) mod ((tMa-tMi) div 10) = 0 then - gibAus('Produkt-Berechnungsthread: '+inttostr(j)+'/'+inttostr(tMi)+'..'+inttostr(tMa)+' ('+inttostr(xMi)+'..'+inttostr(xMa)+')',1); + gibAus('Produkt-Berechnungsthread: '+intToStr(j)+'/'+intToStr(tMi)+'..'+intToStr(tMa)+' ('+intToStr(xMi)+'..'+intToStr(xMa)+')',1); for i:=xMi to xMa do - pro.eWerte.werte[i+j*pro._xsteps]:= - f1.eWerte.werte[(xOf+i) + (tOf+j)*f1._xsteps] * - f2.sWerte.werte[(xOf+i) + (tOf+j)*f2._xsteps]; - i01:=i01 and (f1.eWerte.werte[(xOf+i) + (tOf+j)*f1._xsteps]=0); - i02:=i02 and (f2.sWerte.werte[(xOf+i) + (tOf+j)*f2._xsteps]=0); - o0:=o0 and (pro.eWerte.werte[i+j*pro._xsteps]=0); + pro.eWerte.werte[i+j*pro._xSteps]:= + f1.eWerte.werte[(xOf+i) + (tOf+j)*f1._xSteps] * + f2.sWerte.werte[(xOf+i) + (tOf+j)*f2._xSteps]; + i01:=i01 and (f1.eWerte.werte[(xOf+i) + (tOf+j)*f1._xSteps]=0); + i02:=i02 and (f2.sWerte.werte[(xOf+i) + (tOf+j)*f2._xSteps]=0); + o0:=o0 and (pro.eWerte.werte[i+j*pro._xSteps]=0); end; gDouble: // extended * double for j:=tMi to tMa do begin if (tMa-j) mod ((tMa-tMi) div 10) = 0 then - gibAus('Produkt-Berechnungsthread: '+inttostr(j)+'/'+inttostr(tMi)+'..'+inttostr(tMa)+' ('+inttostr(xMi)+'..'+inttostr(xMa)+')',1); + gibAus('Produkt-Berechnungsthread: '+intToStr(j)+'/'+intToStr(tMi)+'..'+intToStr(tMa)+' ('+intToStr(xMi)+'..'+intToStr(xMa)+')',1); for i:=xMi to xMa do - pro.eWerte.werte[i+j*pro._xsteps]:= - f1.eWerte.werte[(xOf+i) + (tOf+j)*f1._xsteps] * - f2.dWerte.werte[(xOf+i) + (tOf+j)*f2._xsteps]; - i01:=i01 and (f1.eWerte.werte[(xOf+i) + (tOf+j)*f1._xsteps]=0); - i02:=i02 and (f2.dWerte.werte[(xOf+i) + (tOf+j)*f2._xsteps]=0); - o0:=o0 and (pro.eWerte.werte[i+j*pro._xsteps]=0); + pro.eWerte.werte[i+j*pro._xSteps]:= + f1.eWerte.werte[(xOf+i) + (tOf+j)*f1._xSteps] * + f2.dWerte.werte[(xOf+i) + (tOf+j)*f2._xSteps]; + i01:=i01 and (f1.eWerte.werte[(xOf+i) + (tOf+j)*f1._xSteps]=0); + i02:=i02 and (f2.dWerte.werte[(xOf+i) + (tOf+j)*f2._xSteps]=0); + o0:=o0 and (pro.eWerte.werte[i+j*pro._xSteps]=0); end; gExtended: // extended * extended for j:=tMi to tMa do begin if (tMa-j) mod ((tMa-tMi) div 10) = 0 then - gibAus('Produkt-Berechnungsthread: '+inttostr(j)+'/'+inttostr(tMi)+'..'+inttostr(tMa)+' ('+inttostr(xMi)+'..'+inttostr(xMa)+')',1); + gibAus('Produkt-Berechnungsthread: '+intToStr(j)+'/'+intToStr(tMi)+'..'+intToStr(tMa)+' ('+intToStr(xMi)+'..'+intToStr(xMa)+')',1); for i:=xMi to xMa do - pro.eWerte.werte[i+j*pro._xsteps]:= - f1.eWerte.werte[(xOf+i) + (tOf+j)*f1._xsteps] * - f2.eWerte.werte[(xOf+i) + (tOf+j)*f2._xsteps]; - i01:=i01 and (f1.eWerte.werte[(xOf+i) + (tOf+j)*f1._xsteps]=0); - i02:=i02 and (f2.eWerte.werte[(xOf+i) + (tOf+j)*f2._xsteps]=0); - o0:=o0 and (pro.eWerte.werte[i+j*pro._xsteps]=0); + pro.eWerte.werte[i+j*pro._xSteps]:= + f1.eWerte.werte[(xOf+i) + (tOf+j)*f1._xSteps] * + f2.eWerte.werte[(xOf+i) + (tOf+j)*f2._xSteps]; + i01:=i01 and (f1.eWerte.werte[(xOf+i) + (tOf+j)*f1._xSteps]=0); + i02:=i02 and (f2.eWerte.werte[(xOf+i) + (tOf+j)*f2._xSteps]=0); + o0:=o0 and (pro.eWerte.werte[i+j*pro._xSteps]=0); end; end{of case}; end{of Case}; @@ -5306,103 +5468,103 @@ begin gibAus('... und fertig!',1); end; -// tBilderthread *************************************************************** +// tBilderThread *************************************************************** -constructor tBilderthread.create(i,maxthreads,ibreite,ihoehe,lo,oo,ro,uo: longint; const wes: tWerteArray; xmin,xmax,tmin,tmax: Longint; xzoom,yzoom: extended; Nachbearbeitungen: tTransformationArray; paletten: pTPalettenArray; beschri: pTBeschriftungen; rm: boolean); +constructor tBilderThread.create(i,maxThreads,iBreite,iHoehe,lO,oO,rO,uO: longint; const wes: tWerteArray; xMin,xMax,tMin,tMax: longint; xZoom,yZoom: extended; nachbearbeitungen: tTransformationArray; paletten: pTPalettenArray; beschri: pTBeschriftungen; rm: boolean); var ii: longint; begin inherited create; beschr:=beschri; nummer:=i; - mt:=maxthreads; - whoehe:=ihoehe; - gesbreite:=ibreite; - lof:=lo; - oof:=oo; - rof:=ro; - uof:=uo; + mT:=maxThreads; + wHoehe:=iHoehe; + gesBreite:=iBreite; + lOf:=lO; + oOf:=oO; + rOf:=rO; + uOf:=uO; ws:=wes; - xmi:=xmin; - xma:=xmax; - tmi:=tmin; - tma:=tmax; - xz:=xzoom; - yz:=yzoom; - nbs:=Nachbearbeitungen; - setlength(pals,length(paletten)); + xMi:=xMin; + xMa:=xMax; + tMi:=tMin; + tMa:=tMax; + xZ:=xZoom; + yZ:=yZoom; + nbs:=nachbearbeitungen; + setLength(pals,length(paletten)); for ii:=0 to length(pals)-1 do pals[ii]:=paletten[ii]^.farben; rahmen:=rm; - xpmi:=nummer*((gesbreite+lof+rof) div mt)-lof; - if nummer=mt-1 then xpma:=gesbreite+rof-1 // der letzte Thread bekommt den Rest - else xpma:=(nummer+1)*((gesbreite+lof+rof) div mt)-lof-1; - breite:=xpma-xpmi+1; - wbreite:=max(0,min(gesbreite,xpma+1)-max(0,xpmi)); -// wbreite:=max(gesbreite div mt,byte(nummer=mt-1)*(gesbreite-(gesbreite div mt)*(mt-1))); -// breite:=wbreite+lof*byte(nummer=0)+rof*byte(nummer=mt-1); - hoehe:=oof+whoehe+uof; - gibAus('Werte: '+inttostr(xmi)+'-'+inttostr(xma)+'x'+inttostr(tmi)+'-'+inttostr(tma)+' ('+inttostr(wbreite)+'), Pixel: '+inttostr(xpmi)+'-'+inttostr(xpma)+' ('+inttostr(breite)+')',1); - gibAus('Thread '+inttostr(nummer)+': hole ' - +inttostr(round(((sizeof(extended)+sizeof(longint))*length(wes)*whoehe*wbreite+ - sizeof(tRGB)*hoehe*breite)/1024/1024))+'MB RAM ...',1); - setlength(wertes,length(wes)); - setlength(anzahlens,length(wes)); + xPMi:=nummer*((gesBreite+lOf+rOf) div mT)-lOf; + if nummer=mT-1 then xPMa:=gesBreite+rOf-1 // der letzte Thread bekommt den Rest + else xPMa:=(nummer+1)*((gesBreite+lOf+rOf) div mT)-lOf-1; + breite:=xPMa-xPMi+1; + wBreite:=max(0,min(gesBreite,xPMa+1)-max(0,xPMi)); +// wBreite:=max(gesBreite div mT,byte(nummer=mT-1)*(gesBreite-(gesBreite div mT)*(mT-1))); +// breite:=wBreite+lOf*byte(nummer=0)+rOf*byte(nummer=mT-1); + hoehe:=oOf+wHoehe+uOf; + gibAus('Werte: '+intToStr(xMi)+'-'+intToStr(xMa)+'x'+intToStr(tMi)+'-'+intToStr(tMa)+' ('+intToStr(wBreite)+'), Pixel: '+intToStr(xPMi)+'-'+intToStr(xPMa)+' ('+intToStr(breite)+')',1); + gibAus('Thread '+intToStr(nummer)+': hole ' + +intToStr(round(((sizeOf(extended)+sizeOf(longint))*length(wes)*wHoehe*wBreite+ + sizeOf(tRGB)*hoehe*breite)/1024/1024))+'MB RAM ...',1); + setLength(wertes,length(wes)); + setLength(anzahlens,length(wes)); for ii:=0 to length(wertes)-1 do begin - setlength(wertes[ii],whoehe*wbreite); - setlength(anzahlens[ii],length(wertes[ii])); + setLength(wertes[ii],wHoehe*wBreite); + setLength(anzahlens[ii],length(wertes[ii])); end; - setlength(farben,hoehe*breite); - gibAus('Thread '+inttostr(nummer)+' hat jetzt seinen Speicher.',1); + setLength(farben,hoehe*breite); + gibAus('Thread '+intToStr(nummer)+' hat jetzt seinen Speicher.',1); end; -destructor tBilderthread.destroy; +destructor tBilderThread.destroy; var ii: longint; begin - setlength(farben,0); + setLength(farben,0); for ii:=0 to length(wertes)-1 do - setlength(wertes[ii],0); - setlength(wertes,0); + setLength(wertes[ii],0); + setLength(wertes,0); for ii:=0 to length(anzahlens)-1 do - setlength(anzahlens[ii],0); - setlength(anzahlens,0); + setLength(anzahlens[ii],0); + setLength(anzahlens,0); inherited destroy; end; -procedure tBilderthread.stExecute; +procedure tBilderThread.stExecute; var i,j,k: longint; wert: extended; b: boolean; frb: tRGB; begin - gibAus('Thread '+inttostr(nummer)+' gestartet!',1); + gibAus('Thread '+intToStr(nummer)+' gestartet!',1); for i:=0 to length(ws)-1 do - case ws[i].Genauigkeit of - gSingle: if not ws[i].sWerte.zuPixelWerten(whoehe,wbreite,xpmi,xmi,tmi,xz,yz,@wertes[i],@anzahlens[i]) then exit; - gDouble: if not ws[i].dWerte.zuPixelWerten(whoehe,wbreite,xpmi,xmi,tmi,xz,yz,@wertes[i],@anzahlens[i]) then exit; - gExtended: if not ws[i].eWerte.zuPixelWerten(whoehe,wbreite,xpmi,xmi,tmi,xz,yz,@wertes[i],@anzahlens[i]) then exit; + case ws[i].genauigkeit of + gSingle: if not ws[i].sWerte.zuPixelWerten(wHoehe,wBreite,xPMi,xMi,tMi,xZ,yZ,@wertes[i],@anzahlens[i]) then exit; + gDouble: if not ws[i].dWerte.zuPixelWerten(wHoehe,wBreite,xPMi,xMi,tMi,xZ,yZ,@wertes[i],@anzahlens[i]) then exit; + gExtended: if not ws[i].eWerte.zuPixelWerten(wHoehe,wBreite,xPMi,xMi,tMi,xZ,yZ,@wertes[i],@anzahlens[i]) then exit; end{of case}; for i:=0 to length(wertes)-1 do for j:=0 to length(wertes[i])-1 do if anzahlens[i,j]=0 then begin - gibAus('Thread '+inttostr(nummer)+': keine Werte in ['+inttostr(i)+'] '+inttostr(j mod wBreite)+':'+inttostr(j div wBreite)+'!',1); + gibAus('Thread '+intToStr(nummer)+': keine Werte in ['+intToStr(i)+'] '+intToStr(j mod wBreite)+':'+intToStr(j div wBreite)+'!',1); exit; end; - gibAus('Thread '+inttostr(nummer)+': Werte -> Bild ...',1); - for j:=-oof to whoehe-1+uof do - for i:=xpmi to xpma do - if (j>=0) and (j<whoehe) and (i>=0) and (i<gesBreite) then begin // innerer Pixel - farben[i-xpmi+(j+oof)*breite].rgbRed:=0; - farben[i-xpmi+(j+oof)*breite].rgbGreen:=0; - farben[i-xpmi+(j+oof)*breite].rgbBlue:=0; + gibAus('Thread '+intToStr(nummer)+': Werte -> Bild ...',1); + for j:=-oOf to wHoehe-1+uOf do + for i:=xPMi to xPMa do + if (j>=0) and (j<wHoehe) and (i>=0) and (i<gesBreite) then begin // innerer Pixel + farben[i-xPMi+(j+oOf)*breite].rgbRed:=0; + farben[i-xPMi+(j+oOf)*breite].rgbGreen:=0; + farben[i-xPMi+(j+oOf)*breite].rgbBlue:=0; for k:=0 to length(wertes)-1 do begin - wert:=(wertes[k,i-max(0,xpmi)+j*wbreite]/anzahlens[k,i-max(0,xpmi)+j*wbreite]-ws[k]._minW)/(ws[k]._maxW-ws[k]._minW); + wert:=(wertes[k,i-max(0,xPMi)+j*wBreite]/anzahlens[k,i-max(0,xPMi)+j*wBreite]-ws[k]._minW)/(ws[k]._maxW-ws[k]._minW); wert:=max(0,min(wert,1)); wert:=nbs[k].transformiereWert(wert); frb:=wertZuFarbe(wert,pals[k]); - with farben[i-xpmi+(j+oof)*breite] do begin // farben startet bei Index 0 + 0*breite + with farben[i-xPMi+(j+oOf)*breite] do begin // farben startet bei Index 0 + 0*breite rgbRed:= rgbRed + frb.rgbRed; rgbGreen:=rgbGreen + frb.rgbGreen; rgbBlue:= rgbBlue + frb.rgbBlue; @@ -5410,51 +5572,51 @@ begin end; end else begin - farben[i-xpmi+(j+oof)*breite].rgbRed:= + farben[i-xPMi+(j+oOf)*breite].rgbRed:= $ff * byte((not rahmen) or - ((not ((i=-1) and (j>=-1) and (j<=whoehe))) and // links - (not ((i=gesBreite) and (j>=-1) and (j<=whoehe))) and // rechts + ((not ((i=-1) and (j>=-1) and (j<=wHoehe))) and // links + (not ((i=gesBreite) and (j>=-1) and (j<=wHoehe))) and // rechts (not ((j=-1) and (i>=-1) and (i<=gesBreite))) and // oben - (not ((j=whoehe) and (i>=-1) and (i<=gesBreite))))); // unten - farben[i-xpmi+(j+oof)*breite].rgbGreen:=farben[i-xpmi+(j+oof)*breite].rgbRed; - farben[i-xpmi+(j+oof)*breite].rgbBlue:=farben[i-xpmi+(j+oof)*breite].rgbRed; + (not ((j=wHoehe) and (i>=-1) and (i<=gesBreite))))); // unten + farben[i-xPMi+(j+oOf)*breite].rgbGreen:=farben[i-xPMi+(j+oOf)*breite].rgbRed; + farben[i-xPMi+(j+oOf)*breite].rgbBlue:=farben[i-xPMi+(j+oOf)*breite].rgbRed; end; - gibAus('Thread '+inttostr(nummer)+': Beschriftung einfügen ...',1); + gibAus('Thread '+intToStr(nummer)+': Beschriftung einfügen ...',1); - for i:=0 to length(Beschr^)-1 do begin - for j:=max(Beschr^[i].links,xpmi) to min(Beschr^[i].rechts,xpma) do - for k:=Beschr^[i].oben to Beschr^[i].unten do - farben[j-xpmi+(k+oof)*breite]:= + for i:=0 to length(beschr^)-1 do begin + for j:=max(beschr^[i].links,xPMi) to min(beschr^[i].rechts,xPMa) do + for k:=beschr^[i].oben to beschr^[i].unten do + farben[j-xPMi+(k+oOf)*breite]:= andFarben( - farben[j-xpmi+(k+oof)*breite], - Beschr^[i].bild.farben[j-Beschr^[i].links + (k-Beschr^[i].oben)*Beschr^[i].bild.breite]); - case Beschr^[i].lage of + farben[j-xPMi+(k+oOf)*breite], + beschr^[i].bild.farben[j-beschr^[i].links + (k-beschr^[i].oben)*beschr^[i].bild.breite]); + case beschr^[i].lage of lRechts: - for j:=max(Beschr^[i].bBreite,xpmi) to min(Beschr^[i].bBreite+3+byte(Rahmen),xpma) do begin - farben[j-xpmi+(Beschr^[i].strich+oof)*breite].rgbRed:=$00; - farben[j-xpmi+(Beschr^[i].strich+oof)*breite].rgbGreen:=$00; - farben[j-xpmi+(Beschr^[i].strich+oof)*breite].rgbBlue:=$00; + for j:=max(beschr^[i].bBreite,xPMi) to min(beschr^[i].bBreite+3+byte(rahmen),xPMa) do begin + farben[j-xPMi+(beschr^[i].strich+oOf)*breite].rgbRed:=$00; + farben[j-xPMi+(beschr^[i].strich+oOf)*breite].rgbGreen:=$00; + farben[j-xPMi+(beschr^[i].strich+oOf)*breite].rgbBlue:=$00; end; lLinks: - for j:=max(-4-byte(Rahmen),xpmi) to min(-1,xpma) do begin - farben[j-xpmi+(Beschr^[i].strich+oof)*breite].rgbRed:=$00; - farben[j-xpmi+(Beschr^[i].strich+oof)*breite].rgbGreen:=$00; - farben[j-xpmi+(Beschr^[i].strich+oof)*breite].rgbBlue:=$00; + for j:=max(-4-byte(rahmen),xPMi) to min(-1,xPMa) do begin + farben[j-xPMi+(beschr^[i].strich+oOf)*breite].rgbRed:=$00; + farben[j-xPMi+(beschr^[i].strich+oOf)*breite].rgbGreen:=$00; + farben[j-xPMi+(beschr^[i].strich+oOf)*breite].rgbBlue:=$00; end; lOben: - if (Beschr^[i].strich>=xpmi) and (Beschr^[i].strich<=xpma) then - for j:=Beschr^[i].bHoehe to Beschr^[i].bHoehe+3+byte(Rahmen) do begin - farben[Beschr^[i].strich-xpmi+(j+oof)*breite].rgbRed:=$00; - farben[Beschr^[i].strich-xpmi+(j+oof)*breite].rgbGreen:=$00; - farben[Beschr^[i].strich-xpmi+(j+oof)*breite].rgbBlue:=$00; + if (beschr^[i].strich>=xPMi) and (beschr^[i].strich<=xPMa) then + for j:=beschr^[i].bHoehe to beschr^[i].bHoehe+3+byte(rahmen) do begin + farben[beschr^[i].strich-xPMi+(j+oOf)*breite].rgbRed:=$00; + farben[beschr^[i].strich-xPMi+(j+oOf)*breite].rgbGreen:=$00; + farben[beschr^[i].strich-xPMi+(j+oOf)*breite].rgbBlue:=$00; end; lUnten: - if (Beschr^[i].strich>=xpmi) and (Beschr^[i].strich<=xpma) then - for j:=-4-byte(Rahmen) to -1 do begin - farben[Beschr^[i].strich-xpmi+(j+oof)*breite].rgbRed:=$00; - farben[Beschr^[i].strich-xpmi+(j+oof)*breite].rgbGreen:=$00; - farben[Beschr^[i].strich-xpmi+(j+oof)*breite].rgbBlue:=$00; + if (beschr^[i].strich>=xPMi) and (beschr^[i].strich<=xPMa) then + for j:=-4-byte(rahmen) to -1 do begin + farben[beschr^[i].strich-xPMi+(j+oOf)*breite].rgbRed:=$00; + farben[beschr^[i].strich-xPMi+(j+oOf)*breite].rgbGreen:=$00; + farben[beschr^[i].strich-xPMi+(j+oOf)*breite].rgbBlue:=$00; end; end{of case}; end; @@ -5467,14 +5629,14 @@ begin wert:=wertes[k,0]; for i:=0 to length(wertes[k])-1 do wert:=max(wert,wertes[k,i]); - gibAus('Thread '+inttostr(nummer)+' hat max. ['+inttostr(k)+'] '+myfloattostr(wert),1); + gibAus('Thread '+intToStr(nummer)+' hat max. ['+intToStr(k)+'] '+myFloatToStr(wert),1); for i:=0 to length(wertes[k])-1 do wert:=min(wert,wertes[k,i]); - gibAus('Thread '+inttostr(nummer)+' hat min. ['+inttostr(k)+'] '+myfloattostr(wert),1); + gibAus('Thread '+intToStr(nummer)+' hat min. ['+intToStr(k)+'] '+myFloatToStr(wert),1); if not b then - gibAus('Thread '+inttostr(nummer)+' hat nur Nullen!',1); + gibAus('Thread '+intToStr(nummer)+' hat nur Nullen!',1); end; - gibAus('Thread '+inttostr(nummer)+' fertig!',1); + gibAus('Thread '+intToStr(nummer)+' fertig!',1); end; procedure tBilderThread.initAnzahlensFuerKontur; @@ -5482,35 +5644,35 @@ var ii: longint; begin for ii:=1 to length(anzahlens)-1 do - setlength(anzahlens[ii],0); - setlength(anzahlens,1); - setlength(anzahlens[0],length(farben)); + setLength(anzahlens[ii],0); + setLength(anzahlens,1); + setLength(anzahlens[0],length(farben)); for ii:=0 to length(anzahlens[0])-1 do anzahlens[0,ii]:=0; end; // tDichteThread *************************************************************** -constructor tDichteThread.create(xmi,xma,tmi,tma: longint; const werte: tWerte); +constructor tDichteThread.create(xMi,xMa,tMi,tMa: longint; const werte: tWerte); begin inherited create; - xmin:=xmi; - xmax:=xma; - tmin:=tmi; - tmax:=tma; + xMin:=xMi; + xMax:=xMa; + tMin:=tMi; + tMax:=tMa; w:=werte; - maxdichte:=0; - gibAus('Dichtethread kreiert: '+inttostr(xmin)+'-'+inttostr(xmax)+' '+inttostr(tmin)+'-'+inttostr(tmax),1); + maxDichte:=0; + gibAus('Dichtethread kreiert: '+intToStr(xMin)+'-'+intToStr(xMax)+' '+intToStr(tMin)+'-'+intToStr(tMax),1); suspended:=false; end; procedure tDichteThread.stExecute; begin gibAus('Dichtethread gestartet!',1); - case w.Genauigkeit of - gSingle: w.sWerte.gibMinMaxDichten(minDichte,maxDichte,xmin,xmax,tmin,tmax); - gDouble: w.dWerte.gibMinMaxDichten(minDichte,maxDichte,xmin,xmax,tmin,tmax); - gExtended: w.eWerte.gibMinMaxDichten(minDichte,maxDichte,xmin,xmax,tmin,tmax); + case w.genauigkeit of + gSingle: w.sWerte.gibMinMaxDichten(minDichte,maxDichte,xMin,xMax,tMin,tMax); + gDouble: w.dWerte.gibMinMaxDichten(minDichte,maxDichte,xMin,xMax,tMin,tMax); + gExtended: w.eWerte.gibMinMaxDichten(minDichte,maxDichte,xMin,xMax,tMin,tMax); end{of case}; gibAus('Dichtethread fertig!',1); end; @@ -5519,12 +5681,16 @@ end; constructor tFFTThread.create(werte: tWerte; smin,smax: longint; senkrecht,invers: boolean; const vor,nach: tFFTDatenordnung; fenster: tFenster; hintergrund: extended); var - tmpFFTAlgo: tFFTAlgorithmus; + tmpFFTAlgo: tFFTAlgorithmus; + halberInput: boolean; begin + halberInput:=vor in [doAlleResIms,doAlleResSmi]; + if halberInput and assigned(fenster) then + gibAus('Warnung: Diese Form der FFT ('+fftDoToStr(vor)+' -> '+fftDoToStr(nach)+') verhält sich beim Fenstern nicht so, wie man meinen möchte!',3); if senkrecht then - tmpFFTAlgo:=createFFTAlgorithmus(werte._tsiz,vor,nach) + tmpFFTAlgo:=createFFTAlgorithmus(werte._tSiz div (1+byte(halberInput)),vor,nach) else - tmpFFTAlgo:=createFFTAlgorithmus(werte._xsteps,vor,nach); + tmpFFTAlgo:=createFFTAlgorithmus(werte._xSteps div (1+byte(halberInput)),vor,nach); create(werte,smin,smax,senkrecht,invers,tmpFFTAlgo,fenster,hintergrund); tmpFFTAlgo.free; end; @@ -5541,14 +5707,14 @@ begin fen:=fenster; hg:=hintergrund; erfolg:=false; - gibAus('FFTthread kreiert ('+inttostr(pW._xsteps)+' x '+inttostr(pW._tsiz)+': '+inttostr(smi)+' .. '+inttostr(sma)+'): '+algo.className,3); + gibAus('FFTthread kreiert ('+intToStr(pW._xSteps)+' x '+intToStr(pW._tSiz)+': '+intToStr(smi)+' .. '+intToStr(sma)+'): '+algo.className,3); suspended:=false; end; procedure tFFTThread.stExecute; begin - gibAus('FFTthread gestartet ('+inttostr(pW._xsteps)+' x '+inttostr(pW._tsiz)+': '+inttostr(smi)+' .. '+inttostr(sma)+'): '+algo.className+' ...',1); - case pW.Genauigkeit of + gibAus('FFTthread gestartet ('+intToStr(pW._xSteps)+' x '+intToStr(pW._tSiz)+': '+intToStr(smi)+' .. '+intToStr(sma)+'): '+algo.className+' ...',1); + case pW.genauigkeit of gSingle: erfolg:=pW.sWerte.fft(smi,sma,sen,inv,algo,fen,hg,pvFehler); gDouble: erfolg:=pW.dWerte.fft(smi,sma,sen,inv,algo,fen,hg,pvFehler); gExtended: erfolg:=pW.eWerte.fft(smi,sma,sen,inv,algo,fen,hg,pvFehler); @@ -5558,20 +5724,20 @@ end; // tSpiegelThread ************************************************************** -constructor tSpiegelThread.create(tmi,tma: longint; pWerte: tWerte); +constructor tSpiegelThread.create(tMi,tMa: longint; pWerte: tWerte); begin inherited create; - tmin:=tmi; - tmax:=tma; + tMin:=tMi; + tMax:=tMa; pW:=pWerte;; - gibAus('Spiegelthread kreiert: '+inttostr(tmin)+'-'+inttostr(tmax),1); + gibAus('Spiegelthread kreiert: '+intToStr(tMin)+'-'+intToStr(tMax),1); suspended:=false; end; procedure tSpiegelThread.stExecute; begin - gibAus('Spiegelthread gestartet: '+inttostr(tMin)+'-'+inttostr(tMax)+' ...',1); - case pW.Genauigkeit of + gibAus('Spiegelthread gestartet: '+intToStr(tMin)+'-'+intToStr(tMax)+' ...',1); + case pW.genauigkeit of gSingle: pW.sWerte.spiegle(tMin,tMax); gDouble: pW.dWerte.spiegle(tMin,tMax); gExtended: pW.eWerte.spiegle(tMin,tMax); @@ -5581,24 +5747,24 @@ end; // tFFT2dNBThread ************************************************************** -constructor tFFT2dNBThread.create(xmi,xma: longint; pWerte: tWerte; endordnung: tFFTDatenordnung); +constructor tFFT2dNBThread.create(xMi,xMa: longint; pWerte: tWerte; endordnung: tFFTDatenordnung); begin inherited create; - xmin:=xmi; - xmax:=xma; + xMin:=xMi; + xMax:=xMa; pW:=pWerte; - nb:=endordnung; - gibAus('FFT2d-Nachbearbeitungsthread kreiert: '+inttostr(xmin)+'-'+inttostr(xmax),1); + nB:=endordnung; + gibAus('FFT2d-Nachbearbeitungsthread kreiert: '+intToStr(xMin)+'-'+intToStr(xMax),1); suspended:=false; end; procedure tFFT2dNBThread.stExecute; begin - gibAus('FFT2d-Nachbearbeitungsthread gestartet: '+inttostr(xMin)+'-'+inttostr(xMax)+' ...',1); - case pW.Genauigkeit of - gSingle: pW.sWerte.fft2dNachbearbeitungB(xMin,xMax,nb); - gDouble: pW.dWerte.fft2dNachbearbeitungB(xMin,xMax,nb); - gExtended: pW.eWerte.fft2dNachbearbeitungB(xMin,xMax,nb); + gibAus('FFT2d-Nachbearbeitungsthread gestartet: '+intToStr(xMin)+'-'+intToStr(xMax)+' ...',1); + case pW.genauigkeit of + gSingle: pW.sWerte.fft2dNachbearbeitungB(xMin,xMax,nB); + gDouble: pW.dWerte.fft2dNachbearbeitungB(xMin,xMax,nB); + gExtended: pW.eWerte.fft2dNachbearbeitungB(xMin,xMax,nB); end{of case}; gibAus('... und fertig!',1); end; @@ -5636,14 +5802,14 @@ begin maxBr:=maxBreite; maxVersch:=maxVerschiebung; posiMitten:=positionsMitten; - gibAus('GaußFitThread kreiert: '+inttostr(von)+'-'+inttostr(bis),1); + gibAus('GaußFitThread kreiert: '+intToStr(von)+'-'+intToStr(bis),1); suspended:=false; end; procedure tGauszFitThread.stExecute; begin gibAus('GaußFitThread gestartet ...',1); - case qu.Genauigkeit of + case qu.genauigkeit of gSingle: qu.sWerte.gauszFit(ampl,br,posi,ueberl,hint,vo,bi,senkr,fenBr,maxBr,maxVersch,posiMitten); gDouble: @@ -5664,7 +5830,7 @@ begin xMi:=xMin; xMa:=xMax; wl:=wavelet; - gibAus('Korrelationsthread kreiert: '+inttostr(xmin)+'-'+inttostr(xmax),1); + gibAus('Korrelationsthread kreiert: '+intToStr(xMin)+'-'+intToStr(xMax),1); suspended:=false; end; @@ -5677,117 +5843,117 @@ var tmpFFTAlgo: tFFTAlgorithmus; begin gibAus('Korrelationsberechnungsthread gestartet ...',1); - gibAus('('+inttostr(xmi)+'-'+inttostr(xma)+' x '+inttostr(qu._tsiz)+'), '+inttostr(wl.werte.params.tsiz),1); + gibAus('('+intToStr(xMi)+'-'+intToStr(xMa)+' x '+intToStr(qu._tSiz)+'), '+intToStr(wl.werte.params.tSiz),1); in0:=true; out0:=true; pvFehler:=0; if wl.mitFFT then begin - for i:=xmi to xma do - for j:=0 to qu._tsiz-1 do in0:=in0 and (zi.eWerte.werte[i+j*zi._xsteps]=0); + for i:=xMi to xMa do + for j:=0 to qu._tSiz-1 do in0:=in0 and (zi.eWerte.werte[i+j*zi._xSteps]=0); gibAus('FFT berechnen ...',1); - tmpFFTAlgo:=createFFTAlgorithmus(zi._tsiz,doRes,doResIms); + tmpFFTAlgo:=createFFTAlgorithmus(zi._tSiz,doRes,doResIms); zi.eWerte.fft(true,false,tmpFFTAlgo,nil,0,pvF); tmpFFTAlgo.free; pvFehler:=pvF+pvFehler; if wl.typ=wtSin2 then // Das Sin²-Wavelet besteht eigntlich aus zwei! - tmpW:=tWerte.create(zi,xmi,xma); + tmpW:=tWerte.create(zi,xMi,xMa); gibAus('... fertig, punktweise Produkte berechnen ...',1); - hl:=qu._tsiz div 2; // halbe Länge - for i:=xmi to xma do begin + hl:=qu._tSiz div 2; // halbe Länge + for i:=xMi to xMa do begin zi.eWerte.werte[i]:=zi.eWerte.werte[i]*wl.werte.werte[0]; // f_0 - zi.eWerte.werte[i+hl*zi._xsteps]:=zi.eWerte.werte[i+hl*zi._xsteps]*wl.werte.werte[2*hl]; // f_n/2 + zi.eWerte.werte[i+hl*zi._xSteps]:=zi.eWerte.werte[i+hl*zi._xSteps]*wl.werte.werte[2*hl]; // f_n/2 if wl.typ=wtSin2 then begin // Das Sin²-Wavelet besteht eigntlich aus zwei! // und das gleiche für tmpW statt zi^: - tmpW.eWerte.werte[i-xmi]:=tmpW.eWerte.werte[i-xmi]*wl.werte.werte[1]; // f_0 - tmpW.eWerte.werte[i-xmi+hl*tmpW._xsteps]:=tmpW.eWerte.werte[i-xmi+hl*tmpW._xsteps]*wl.werte.werte[2*hl+1]; // f_n/2 + tmpW.eWerte.werte[i-xMi]:=tmpW.eWerte.werte[i-xMi]*wl.werte.werte[1]; // f_0 + tmpW.eWerte.werte[i-xMi+hl*tmpW._xSteps]:=tmpW.eWerte.werte[i-xMi+hl*tmpW._xSteps]*wl.werte.werte[2*hl+1]; // f_n/2 end; for j:=1 to hl-1 do begin - tmp:=zi.eWerte.werte[i+j*zi._xsteps]; // Re_j - zi.eWerte.werte[i+j*zi._xsteps]:=tmp*wl.werte.werte[2*j]-zi.eWerte.werte[i+(j+hl)*zi._xsteps]*wl.werte.werte[2*(j+hl)]; + tmp:=zi.eWerte.werte[i+j*zi._xSteps]; // Re_j + zi.eWerte.werte[i+j*zi._xSteps]:=tmp*wl.werte.werte[2*j]-zi.eWerte.werte[i+(j+hl)*zi._xSteps]*wl.werte.werte[2*(j+hl)]; // Re_j * wRe_j - Im_j * wIm_j - zi.eWerte.werte[i+(j+hl)*zi._xsteps]:=tmp*wl.werte.werte[2*(j+hl)]+zi.eWerte.werte[i+(j+hl)*zi._xsteps]*wl.werte.werte[2*j]; + zi.eWerte.werte[i+(j+hl)*zi._xSteps]:=tmp*wl.werte.werte[2*(j+hl)]+zi.eWerte.werte[i+(j+hl)*zi._xSteps]*wl.werte.werte[2*j]; // Re_j * wIm_j + Im_j * wRe_j if wl.typ=wtSin2 then begin // Das Sin²-Wavelet besteht eigntlich aus zwei! // und das gleiche für tmpW statt zi^: - tmp:=tmpW.eWerte.werte[i-xmi+j*tmpW._xsteps]; // Re_j - tmpW.eWerte.werte[i-xmi+j*tmpW._xsteps]:=tmp*wl.werte.werte[2*j+1]-tmpW.eWerte.werte[i-xmi+(j+hl)*tmpW._xsteps]*wl.werte.werte[2*(j+hl)+1]; + tmp:=tmpW.eWerte.werte[i-xMi+j*tmpW._xSteps]; // Re_j + tmpW.eWerte.werte[i-xMi+j*tmpW._xSteps]:=tmp*wl.werte.werte[2*j+1]-tmpW.eWerte.werte[i-xMi+(j+hl)*tmpW._xSteps]*wl.werte.werte[2*(j+hl)+1]; // Re_j * wRe_j - Im_j * wIm_j - tmpW.eWerte.werte[i-xmi+(j+hl)*tmpW._xsteps]:=tmp*wl.werte.werte[2*(j+hl)+1]+tmpW.eWerte.werte[i-xmi+(j+hl)*tmpW._xsteps]*wl.werte.werte[2*j+1]; + tmpW.eWerte.werte[i-xMi+(j+hl)*tmpW._xSteps]:=tmp*wl.werte.werte[2*(j+hl)+1]+tmpW.eWerte.werte[i-xMi+(j+hl)*tmpW._xSteps]*wl.werte.werte[2*j+1]; // Re_j * wIm_j + Im_j * wRe_j end; end; end; gibAus('... fertig, iFFT berechnen ...',1); - tmpFFTAlgo:=createFFTAlgorithmus(zi._tsiz,doResIms,doBetrQdr); - zi.eWerte.fft(xmi,xma,true,true,tmpFFTAlgo,nil,0,pvF); + tmpFFTAlgo:=createFFTAlgorithmus(zi._tSiz,doResIms,doBetrQdr); + zi.eWerte.fft(xMi,xMa,true,true,tmpFFTAlgo,nil,0,pvF); pvFehler:=pvF+pvFehler; case wl.typ of wtSin2: begin // Das Sin²-Wavelet besteht eigntlich aus zwei! tmpW.eWerte.fft(true,true,tmpFFTAlgo,nil,0,pvF); pvFehler:=(pvF+pvFehler)/3; - for i:=xmi to xma do - for j:=0 to zi._tsiz-1 do begin - zi.eWerte.werte[i+j*zi._xsteps]:=zi.eWerte.werte[i+j*zi._xsteps]+tmpW.eWerte.werte[i-xmi+j*tmpW._xsteps]; - out0:=out0 and (zi.eWerte.werte[i+j*zi._xsteps]=0); + for i:=xMi to xMa do + for j:=0 to zi._tSiz-1 do begin + zi.eWerte.werte[i+j*zi._xSteps]:=zi.eWerte.werte[i+j*zi._xSteps]+tmpW.eWerte.werte[i-xMi+j*tmpW._xSteps]; + out0:=out0 and (zi.eWerte.werte[i+j*zi._xSteps]=0); end; tmpW.free; end; wtFrequenzfenster: begin // Das Frequenzfenster-Wavelet ist nur eines! pvFehler:=pvFehler/2; - for i:=xmi to xma do - for j:=0 to zi._tsiz-1 do - out0:=out0 and (zi.eWerte.werte[i+j*zi._xsteps]=0); + for i:=xMi to xMa do + for j:=0 to zi._tSiz-1 do + out0:=out0 and (zi.eWerte.werte[i+j*zi._xSteps]=0); end; end{of case}; tmpFFTAlgo.free; - gibAus(' (Parseval-Fehler = '+floattostr(pvFehler)+')',1); + gibAus(' (Parseval-Fehler = '+floatToStr(pvFehler)+')',1); gibAus('... fertig',1); end else begin - case qu.Genauigkeit of + case qu.genauigkeit of gSingle: - for i:=xmi to xma do begin - if (xma-i) mod ((xma-xmi) div 10) = 0 then gibAus(inttostr(i)+'/'+inttostr(xmi)+'-'+inttostr(xma),1); - for j:=0 to zi._tsiz-1 do begin + for i:=xMi to xMa do begin + if (xMa-i) mod ((xMa-xMi) div 10) = 0 then gibAus(intToStr(i)+'/'+intToStr(xMi)+'-'+intToStr(xMa),1); + for j:=0 to zi._tSiz-1 do begin sus:=0; suc:=0; - for k:=max(-wl.hlen,-j) to min(wl.hlen,qu._tsiz-j-1) do begin - suc:=suc + qu.sWerte.werte[i+(j+k)*qu._xsteps]*wl.werte.werte[(k+wl.hlen)*2]; - sus:=sus + qu.sWerte.werte[i+(j+k)*qu._xsteps]*wl.werte.werte[(k+wl.hlen)*2+1]; + for k:=max(-wl.hLen,-j) to min(wl.hLen,qu._tSiz-j-1) do begin + suc:=suc + qu.sWerte.werte[i+(j+k)*qu._xSteps]*wl.werte.werte[(k+wl.hLen)*2]; + sus:=sus + qu.sWerte.werte[i+(j+k)*qu._xSteps]*wl.werte.werte[(k+wl.hLen)*2+1]; end; - zi.eWerte.werte[i+j*zi._xsteps]:=(sqr(sus)+sqr(suc))/sqr(1+2*wl.hlen); - in0:=in0 and (qu.sWerte.werte[i+j*qu._xsteps]=0); - out0:=out0 and (zi.eWerte.werte[i+j*zi._xsteps]=0); + zi.eWerte.werte[i+j*zi._xSteps]:=(sqr(sus)+sqr(suc))/sqr(1+2*wl.hLen); + in0:=in0 and (qu.sWerte.werte[i+j*qu._xSteps]=0); + out0:=out0 and (zi.eWerte.werte[i+j*zi._xSteps]=0); end; end; gDouble: - for i:=xmi to xma do begin - if (xma-i) mod ((xma-xmi) div 10) = 0 then gibAus(inttostr(i)+'/'+inttostr(xmi)+'-'+inttostr(xma),1); - for j:=0 to zi._tsiz-1 do begin + for i:=xMi to xMa do begin + if (xMa-i) mod ((xMa-xMi) div 10) = 0 then gibAus(intToStr(i)+'/'+intToStr(xMi)+'-'+intToStr(xMa),1); + for j:=0 to zi._tSiz-1 do begin sus:=0; suc:=0; - for k:=max(-wl.hlen,-j) to min(wl.hlen,qu._tsiz-j-1) do begin - suc:=suc + qu.dWerte.werte[i+(j+k)*qu._xsteps]*wl.werte.werte[(k+wl.hlen)*2]; - sus:=sus + qu.dWerte.werte[i+(j+k)*qu._xsteps]*wl.werte.werte[(k+wl.hlen)*2+1]; + for k:=max(-wl.hLen,-j) to min(wl.hLen,qu._tSiz-j-1) do begin + suc:=suc + qu.dWerte.werte[i+(j+k)*qu._xSteps]*wl.werte.werte[(k+wl.hLen)*2]; + sus:=sus + qu.dWerte.werte[i+(j+k)*qu._xSteps]*wl.werte.werte[(k+wl.hLen)*2+1]; end; - zi.eWerte.werte[i+j*zi._xsteps]:=(sqr(sus)+sqr(suc))/sqr(1+2*wl.hlen); - in0:=in0 and (qu.dWerte.werte[i+j*qu._xsteps]=0); - out0:=out0 and (zi.eWerte.werte[i+j*zi._xsteps]=0); + zi.eWerte.werte[i+j*zi._xSteps]:=(sqr(sus)+sqr(suc))/sqr(1+2*wl.hLen); + in0:=in0 and (qu.dWerte.werte[i+j*qu._xSteps]=0); + out0:=out0 and (zi.eWerte.werte[i+j*zi._xSteps]=0); end; end; gExtended: - for i:=xmi to xma do begin - if (xma-i) mod ((xma-xmi) div 10) = 0 then gibAus(inttostr(i)+'/'+inttostr(xmi)+'-'+inttostr(xma),1); - for j:=0 to zi._tsiz-1 do begin + for i:=xMi to xMa do begin + if (xMa-i) mod ((xMa-xMi) div 10) = 0 then gibAus(intToStr(i)+'/'+intToStr(xMi)+'-'+intToStr(xMa),1); + for j:=0 to zi._tSiz-1 do begin sus:=0; suc:=0; - for k:=max(-wl.hlen,-j) to min(wl.hlen,qu._tsiz-j-1) do begin - suc:=suc + qu.eWerte.werte[i+(j+k)*qu._xsteps]*wl.werte.werte[(k+wl.hlen)*2]; - sus:=sus + qu.eWerte.werte[i+(j+k)*qu._xsteps]*wl.werte.werte[(k+wl.hlen)*2+1]; + for k:=max(-wl.hLen,-j) to min(wl.hLen,qu._tSiz-j-1) do begin + suc:=suc + qu.eWerte.werte[i+(j+k)*qu._xSteps]*wl.werte.werte[(k+wl.hLen)*2]; + sus:=sus + qu.eWerte.werte[i+(j+k)*qu._xSteps]*wl.werte.werte[(k+wl.hLen)*2+1]; end; - zi.eWerte.werte[i+j*zi._xsteps]:=(sqr(sus)+sqr(suc))/sqr(1+2*wl.hlen); - in0:=in0 and (qu.eWerte.werte[i+j*qu._xsteps]=0); - out0:=out0 and (zi.eWerte.werte[i+j*zi._xsteps]=0); + zi.eWerte.werte[i+j*zi._xSteps]:=(sqr(sus)+sqr(suc))/sqr(1+2*wl.hLen); + in0:=in0 and (qu.eWerte.werte[i+j*qu._xSteps]=0); + out0:=out0 and (zi.eWerte.werte[i+j*zi._xSteps]=0); end; end; end{of case}; @@ -5799,16 +5965,16 @@ end; // tKontur ********************************************************************* -constructor tKontur.create(Kont: pTKonturenArray; wert: pTWerteArray); +constructor tKontur.create(kont: pTKonturenArray; wert: pTWerteArray); begin - inherited create(Kont,wert); - setlength(orte,0); + inherited create(kont,wert); + setLength(orte,0); bezeichner:=''; end; destructor tKontur.destroy; begin - setlength(orte,0); + setLength(orte,0); inherited destroy; end; @@ -5864,23 +6030,23 @@ begin result:=max(result,orte[i]['y']); end; -function tKontur.exprtofloat(st: boolean; s: string; kvs: tKnownValues): extended; +function tKontur.exprToFloat(sT: boolean; s: string; kvs: tKnownValues): extended; begin - result:=matheunit.exprtofloat(st,s,kvs,@callBackGetValue); + result:=matheunit.exprToFloat(sT,s,kvs,@callBackGetValue); end; -function tKontur.init(st: boolean; f: tMyStringlist; w: pTWerteArray; mt: longint): boolean; +function tKontur.init(sT: boolean; f: tMyStringList; w: pTWerteArray; mT: longint): boolean; var - s,xmi,xma,tmi,tma,dx,dt: string; + s,xMi,xMa,tMi,tMa,dx,dt: string; i,j,k: longint; bekannteBefehle: tMyStringList; begin result:=false; gibAus('Kontur erzeugen ...',1); - xmi:='-1e9'; - xma:='1e9'; - tmi:='-1e9'; - tma:='1e9'; + xMi:='-1e9'; + xMa:='1e9'; + tMi:='-1e9'; + tMa:='1e9'; dx:='1'; dt:='1'; bekannteBefehle:=tMyStringList.create; @@ -5896,7 +6062,7 @@ begin bekannteBefehle.free; exit; end; - if not liesVonDatei(st,s,exprtofloat(st,xmi,nil),exprtofloat(st,xma,nil),exprtofloat(st,tmi,nil),exprtofloat(st,tma,nil)) then begin + if not liesVonDatei(sT,s,exprToFloat(sT,xMi,nil),exprToFloat(sT,xMa,nil),exprToFloat(sT,tMi,nil),exprToFloat(sT,tMa,nil)) then begin bekannteBefehle.free; exit; end; @@ -5908,26 +6074,26 @@ begin bekannteBefehle.free; exit; end; - if not erzeugeAusWerten(st,s,w,mt,xmi,xma,tmi,tma) then begin + if not erzeugeAusWerten(sT,s,w,mT,xMi,xMa,tMi,tMa) then begin bekannteBefehle.free; exit; end; continue; end; - if istDasBefehl('xmin:',s,bekannteBefehle,true) then begin - xmi:=s; + if istDasBefehl('xMin:',s,bekannteBefehle,true) then begin + xMi:=s; continue; end; - if istDasBefehl('xmax:',s,bekannteBefehle,true) then begin - xma:=s; + if istDasBefehl('xMax:',s,bekannteBefehle,true) then begin + xMa:=s; continue; end; - if istDasBefehl('tmin:',s,bekannteBefehle,true) then begin - tmi:=s; + if istDasBefehl('tMin:',s,bekannteBefehle,true) then begin + tMi:=s; continue; end; - if istDasBefehl('tmax:',s,bekannteBefehle,true) then begin - tma:=s; + if istDasBefehl('tMax:',s,bekannteBefehle,true) then begin + tMa:=s; continue; end; if istDasBefehl('dx:',s,bekannteBefehle,true) then begin @@ -5939,8 +6105,8 @@ begin continue; end; if istDasBefehl('reduziere nach',s,bekannteBefehle,true) then begin - if not st then - if not sortiere_nach_y(mt) then begin + if not sT then + if not sortiereNachY(mT) then begin bekannteBefehle.free; exit; end; @@ -5948,33 +6114,33 @@ begin if istDasBefehl('rechts',s,bekannteBefehle,false) then begin i:=0; j:=0; - while j<length(Orte) do begin + while j<length(orte) do begin k:=j; - while (j<length(Orte)) and (Orte[j]['y']=Orte[k]['y']) do begin - if Orte[j]['x']>Orte[k]['x'] then + while (j<length(orte)) and (orte[j]['y']=orte[k]['y']) do begin + if orte[j]['x']>orte[k]['x'] then k:=j; inc(j); end; - Orte[i]:=Orte[k]; + orte[i]:=orte[k]; inc(i); end; - setlength(Orte,i); + setLength(orte,i); continue; end; if istDasBefehl('links',s,bekannteBefehle,false) then begin i:=0; j:=0; - while j<length(Orte) do begin + while j<length(orte) do begin k:=j; - while (j<length(Orte)) and (Orte[j]['y']=Orte[k]['y']) do begin - if Orte[j]['x']<Orte[k]['x'] then + while (j<length(orte)) and (orte[j]['y']=orte[k]['y']) do begin + if orte[j]['x']<orte[k]['x'] then k:=j; inc(j); end; - Orte[i]:=Orte[k]; + orte[i]:=orte[k]; inc(i); end; - setlength(Orte,i); + setLength(orte,i); continue; end; bekannteBefehle.sort; @@ -5984,15 +6150,15 @@ begin end; if istDasBefehl('Funktion:',s,bekannteBefehle,true) then begin if not erzeugeAusFunktion( - st, + sT, s, - exprtofloat(st,xmi,nil), - exprtofloat(st,xma,nil), - exprtofloat(st,tmi,nil), - exprtofloat(st,tma,nil), - exprtofloat(st,dx,nil), - exprtofloat(st,dt,nil), - mt) then begin + exprToFloat(sT,xMi,nil), + exprToFloat(sT,xMa,nil), + exprToFloat(sT,tMi,nil), + exprToFloat(sT,tMa,nil), + exprToFloat(sT,dx,nil), + exprToFloat(sT,dt,nil), + mT) then begin bekannteBefehle.free; exit; end; @@ -6005,11 +6171,11 @@ begin exit; until false; bekannteBefehle.free; - gibAus('... fertig ('+inttostr(length(Orte))+' Punkte)',1); + gibAus('... fertig ('+intToStr(length(orte))+' Punkte)',1); result:=true; end; -function tKontur.liesVonDatei(st: boolean; s: string; xmi,xma,tmi,tma: extended): boolean; +function tKontur.liesVonDatei(sT: boolean; s: string; xMi,xMa,tMi,tMa: extended): boolean; var tf: textfile; i: longint; @@ -6020,84 +6186,84 @@ begin gibAus('Datei '''+s+''' zum Einlesen einer Kontur existiert nicht!',3); exit; end; - if st then begin + if sT then begin result:=true; exit; end; i:=0; - assignfile(tf,s); + assignFile(tf,s); reset(tf); while not eof(tf) do begin readln(tf,s); s:=erstesArgument(s,'#'); if s='' then continue; - tmp['y']:=strtofloat(erstesArgument(s)); - tmp['x']:=strtofloat(erstesArgument(s)); - if (tmp['x']<xmi) or (tmp['x']>xma) or (tmp['y']<tmi) or (tmp['y']>tma) then continue; + tmp['y']:=strToFloat(erstesArgument(s)); + tmp['x']:=strToFloat(erstesArgument(s)); + if (tmp['x']<xMi) or (tmp['x']>xMa) or (tmp['y']<tMi) or (tmp['y']>tMa) then continue; if i>=length(orte) then - setlength(orte,length(orte)+Speicherhappen); + setLength(orte,length(orte)+speicherHappen); orte[i]:=tmp; inc(i); end; - closefile(tf); - setlength(orte,i); + closeFile(tf); + setLength(orte,i); result:=true; end; -function tKontur.erzeugeAusWerten(st: boolean; s: string; w: pTWerteArray; mt: longint; _xmin,_xmax,_tmin,_tmax: string): boolean; +function tKontur.erzeugeAusWerten(sT: boolean; s: string; w: pTWerteArray; mT: longint; _xmin,_xmax,_tmin,_tmax: string): boolean; var - i,j,k,l,xmi,xma,tmi,tma: longint; - Schwelle: extended; + i,j,k,l,xMi,xMa,tMi,tMa: longint; + schwelle: extended; fertig: boolean; - Konturthreads: array of tKonturAusWertenThread; + konturThreads: array of tKonturAusWertenThread; begin result:=false; i:=findeWerte(erstesArgument(s),nil,w,nil,false); if i<0 then exit; - Schwelle:=w^[i].exprtofloat(false,s); - if _xmin='' then xmi:=1 - else xmi:=max(1,w^[i].kont2disk('x',w^[i].exprtofloat(st,_xmin))); - if _xmax='' then xma:=w^[i]._xsteps-1 - else xma:=max(1,w^[i].kont2disk('x',w^[i].exprtofloat(st,_xmax))); - if _tmin='' then tmi:=1 - else tmi:=max(1,w^[i].kont2disk('t',w^[i].exprtofloat(st,_tmin))); - if _tmax='' then tma:=w^[i]._tsiz-1 - else tma:=max(1,w^[i].kont2disk('x',w^[i].exprtofloat(st,_tmax))); - if st then begin + schwelle:=w^[i].exprToFloat(false,s); + if _xmin='' then xMi:=1 + else xMi:=max(1,w^[i].kont2disk('x',w^[i].exprToFloat(sT,_xmin))); + if _xmax='' then xMa:=w^[i]._xSteps-1 + else xMa:=max(1,w^[i].kont2disk('x',w^[i].exprToFloat(sT,_xmax))); + if _tmin='' then tMi:=1 + else tMi:=max(1,w^[i].kont2disk('t',w^[i].exprToFloat(sT,_tmin))); + if _tmax='' then tMa:=w^[i]._tSiz-1 + else tMa:=max(1,w^[i].kont2disk('x',w^[i].exprToFloat(sT,_tmax))); + if sT then begin result:=true; exit; end; - setlength(Konturthreads,mt); - for j:=0 to length(Konturthreads)-1 do - Konturthreads[j]:= + setLength(konturThreads,mT); + for j:=0 to length(konturThreads)-1 do + konturThreads[j]:= tKonturAusWertenThread.create( w^[i], - Schwelle, - round(j/length(Konturthreads)*(xma+1-xmi)+xmi), - round((j+1)/length(Konturthreads)*(xma+1-xmi)+xmi-1), - tmi, - tma); + schwelle, + round(j/length(konturThreads)*(xMa+1-xMi)+xMi), + round((j+1)/length(konturThreads)*(xMa+1-xMi)+xMi-1), + tMi, + tMa); repeat fertig:=true; - for j:=0 to length(Konturthreads)-1 do - fertig:=fertig and Konturthreads[j].fertig; + for j:=0 to length(konturThreads)-1 do + fertig:=fertig and konturThreads[j].fertig; if not fertig then sleep(10); until fertig; k:=0; - for j:=0 to length(Konturthreads)-1 do - k:=k+length(Konturthreads[j].punkte); - setlength(orte,k); + for j:=0 to length(konturThreads)-1 do + k:=k+length(konturThreads[j].punkte); + setLength(orte,k); k:=0; - for j:=0 to length(Konturthreads)-1 do begin - for l:=0 to length(Konturthreads[j].punkte)-1 do - orte[k+l]:=Konturthreads[j].punkte[l]; - k:=k+length(Konturthreads[j].punkte); - Konturthreads[j].Free; + for j:=0 to length(konturThreads)-1 do begin + for l:=0 to length(konturThreads[j].punkte)-1 do + orte[k+l]:=konturThreads[j].punkte[l]; + k:=k+length(konturThreads[j].punkte); + konturThreads[j].free; end; result:=true; end; -function tKontur.erzeugeAusFunktion(st: boolean; s: string; xmi,xma,tmi,tma,dx,dt: extended; mt: longint): boolean; +function tKontur.erzeugeAusFunktion(sT: boolean; s: string; xMi,xMa,tMi,tMa,dx,dt: extended; mT: longint): boolean; var xf,yf: string; kvs: tKnownValues; @@ -6108,8 +6274,8 @@ var procedure berechnePOrt(i: longint); inline; begin kvs.add(s,pOrte[i,0]); - pOrte[i,1]:=exprToFloat(st,xf,kvs); - pOrte[i,2]:=exprToFloat(st,yf,kvs); + pOrte[i,1]:=exprToFloat(sT,xf,kvs); + pOrte[i,2]:=exprToFloat(sT,yf,kvs); end; function pOIndexInnerhalb(i: longint): boolean; inline; @@ -6119,7 +6285,7 @@ end; function liegtInnerhalb(i: longint): boolean; inline; begin - result:=pOIndexInnerhalb(i) and (pOrte[i,1]>=xmi) and (pOrte[i,1]<=xma) and (pOrte[i,2]>=tmi) and (pOrte[i,2]<=tma); + result:=pOIndexInnerhalb(i) and (pOrte[i,1]>=xMi) and (pOrte[i,1]<=xMa) and (pOrte[i,2]>=tMi) and (pOrte[i,2]<=tMa); end; function punkteFastGleich(i1,i2: longint): boolean; inline; @@ -6145,27 +6311,27 @@ begin kvs:=tKnownValues.create; lenPO:=1; - setlength(pOrte,speicherHappen); + setLength(pOrte,speicherHappen); pOrte[0,0]:=0; berechnePOrt(0); - if st then begin + if sT then begin result:=true; kvs.free; - setlength(pOrte,0); + setLength(pOrte,0); exit; end; if not liegtInnerhalb(0) then begin - gibAus('Die Funktionen '''+xf+''' bzw. '''+yf+''' erzeugen für '''+s+'''=0 keinen Punkt innerhalb der Grenzen ('+floattostr(xmi)+'..'+floattostr(xma)+' x '+floattostr(tmi)+'..'+floattostr(tma)+')!',3); + gibAus('Die Funktionen '''+xf+''' bzw. '''+yf+''' erzeugen für '''+s+'''=0 keinen Punkt innerhalb der Grenzen ('+floatToStr(xMi)+'..'+floatToStr(xMa)+' x '+floatToStr(tMi)+'..'+floatToStr(tMa)+')!',3); kvs.free; - setlength(pOrte,0); + setLength(pOrte,0); exit; end; lenB:=2; - setlength(baustellen,speicherHappen); + setLength(baustellen,speicherHappen); baustellen[0,'x']:=low(longint); baustellen[0,'y']:=0; baustellen[1,'x']:=0; @@ -6177,9 +6343,9 @@ begin continue; end; if length(baustellen)<=lenB+1 then - setlength(baustellen,lenB+speicherHappen); + setLength(baustellen,lenB+speicherHappen); if length(pOrte)<=lenPO+2 then - setlength(pOrte,lenPO+speicherHappen); + setLength(pOrte,lenPO+speicherHappen); inc(lenPO); if baustellen[lenB-1,'x']=low(longint) then @@ -6222,15 +6388,15 @@ begin end{of case}; end; - setlength(orte,lenPO); + setLength(orte,lenPO); for i:=0 to lenPO-1 do begin orte[i,'x']:=i; orte[i,'y']:=pOrte[i,0]; end; - if not sortiere_nach_y(mt) then begin - setlength(baustellen,0); - setlength(pOrte,0); + if not sortiereNachY(mT) then begin + setLength(baustellen,0); + setLength(pOrte,0); kvs.free; exit; end; @@ -6240,23 +6406,23 @@ begin orte[i,'x']:=pOrte[round(orte[i,'x']),1]; end; - setlength(baustellen,0); - setlength(pOrte,0); + setLength(baustellen,0); + setLength(pOrte,0); kvs.free; result:=true; end; -function tKontur.sortiere_nach_y(mt: longint): boolean; +function tKontur.sortiereNachY(mT: longint): boolean; begin - result:=sortiere_nach_y(mt,0,length(Orte)-1); + result:=sortiereNachY(mT,0,length(orte)-1); end; -function tKontur.sortiere_nach_y(mt,von,bis: longint): boolean; +function tKontur.sortiereNachY(mT,von,bis: longint): boolean; var i,j: longint; avg: extended; tmp: tExtPoint; - st1,st2: tSortiereNachYThread; + sT1,sT2: tSortiereNachYThread; begin result:=false; if von>=bis then begin @@ -6265,29 +6431,29 @@ begin end; avg:=0; for i:=von to bis do - avg:=avg+Orte[i]['y']; + avg:=avg+orte[i]['y']; avg:=avg/(bis-von+1); i:=von; j:=bis; while i<j do begin - while (i<=j) and (Orte[i]['y']<=avg) do + while (i<=j) and (orte[i]['y']<=avg) do inc(i); - while (i<=j) and (Orte[j]['y']>=avg) do + while (i<=j) and (orte[j]['y']>=avg) do dec(j); if i<j then begin - tmp:=Orte[i]; - Orte[i]:=Orte[j]; - Orte[j]:=tmp; + tmp:=orte[i]; + orte[i]:=orte[j]; + orte[j]:=tmp; end; end; if i<>j+1 then begin - gibAus(' interner Quicksort-Fehler: "quicksort-sanity-check nicht bestanden! (i='+inttostr(i)+' & j='+inttostr(j)+')"',1); + gibAus(' interner Quicksort-Fehler: "quicksort-sanity-check nicht bestanden! (i='+intToStr(i)+' & j='+intToStr(j)+')"',1); exit; end; if (j<von) or (i>bis) then begin for i:=von+1 to bis do - if Orte[i]['y'] <> Orte[von]['y'] then begin + if orte[i]['y'] <> orte[von]['y'] then begin gibAus(' interner Quicksort-Fehler: "komisch, die Orte sind doch unterschiedlich ..."',1); exit; end; @@ -6295,64 +6461,64 @@ begin exit; end; - if mt<=1 then - result:=sortiere_nach_y(mt,von,i-1) and sortiere_nach_y(mt,i,bis) + if mT<=1 then + result:=sortiereNachY(mT,von,i-1) and sortiereNachY(mT,i,bis) else begin - j:=min(max(1,round(mt/(bis+1-von)*(i-von))),mt-1); - st1:=tSortiereNachYThread.create(self,j,von,i-1); - st2:=tSortiereNachYThread.create(self,mt-j,i,bis); + j:=min(max(1,round(mT/(bis+1-von)*(i-von))),mT-1); + sT1:=tSortiereNachYThread.create(self,j,von,i-1); + sT2:=tSortiereNachYThread.create(self,mT-j,i,bis); repeat sleep(10); - until st1.fertig and st2.fertig; - result:=st1.erfolg and st2.erfolg; - st1.free; - st2.free; + until sT1.fertig and sT2.fertig; + result:=sT1.erfolg and sT2.erfolg; + sT1.free; + sT2.free; end; end; // tKonturAusWertenThread ****************************************************** -constructor tKonturAusWertenThread.create(werte: tWerte; schwelle: extended; xmin, xmax, tmin, tmax: longint); +constructor tKonturAusWertenThread.create(werte: tWerte; schwelle: extended; xMin, xMax, tMin, tMax: longint); begin inherited create; w:=werte; s:=schwelle; - xmi:=xmin; - xma:=xmax; - tmi:=tmin; - tma:=tmax; - setlength(punkte,0); + xMi:=xMin; + xMa:=xMax; + tMi:=tMin; + tMa:=tMax; + setLength(punkte,0); suspended:=false; end; destructor tKonturAusWertenThread.destroy; begin - setlength(punkte,0); + setLength(punkte,0); inherited destroy; end; procedure tKonturAusWertenThread.stExecute; begin - case w.Genauigkeit of - gSingle: punkte:=w.sWerte.findeSchwellwerte(xmi,xma,tmi,tma,s); - gDouble: punkte:=w.dWerte.findeSchwellwerte(xmi,xma,tmi,tma,s); - gExtended: punkte:=w.eWerte.findeSchwellwerte(xmi,xma,tmi,tma,s); + case w.genauigkeit of + gSingle: punkte:=w.sWerte.findeSchwellwerte(xMi,xMa,tMi,tMa,s); + gDouble: punkte:=w.dWerte.findeSchwellwerte(xMi,xMa,tMi,tMa,s); + gExtended: punkte:=w.eWerte.findeSchwellwerte(xMi,xMa,tMi,tMa,s); end{of case}; end; // tIntegralThread ************************************************************* -constructor tIntegralThread.create(quelle, ziel: tWerte; xmin, xmax, tmin, tmax, xoff, toff: longint; richtung: tIntegrationsRichtung); +constructor tIntegralThread.create(quelle, ziel: tWerte; xMin, xMax, tMin, tMax, xOff, tOff: longint; richtung: tIntegrationsRichtung); begin inherited create; qu:=quelle; zi:=ziel; - xmi:=xmin; - xma:=xmax; - tmi:=tmin; - tma:=tmax; - xof:=xoff; - tof:=toff; + xMi:=xMin; + xMa:=xMax; + tMi:=tMin; + tMa:=tMax; + xOf:=xOff; + tOf:=tOff; rtg:=richtung; gibAus('Integralthread kreiert',1); suspended:=false; @@ -6360,33 +6526,33 @@ end; procedure tIntegralThread.stExecute; begin - gibAus('Integralthread gestartet ('+inttostr(xmi)+'-'+inttostr(xma)+'x'+inttostr(tmi)+'-'+inttostr(tma)+') '+ - '('+inttostr(qu._xsteps)+'x'+inttostr(qu._tsiz)+') -> '+ - '('+inttostr(zi._xsteps)+'x'+inttostr(zi._tsiz)+') delta: '+ - inttostr(xof)+'x'+inttostr(tof)+' ...',1); + gibAus('Integralthread gestartet ('+intToStr(xMi)+'-'+intToStr(xMa)+'x'+intToStr(tMi)+'-'+intToStr(tMa)+') '+ + '('+intToStr(qu._xSteps)+'x'+intToStr(qu._tSiz)+') -> '+ + '('+intToStr(zi._xSteps)+'x'+intToStr(zi._tSiz)+') delta: '+ + intToStr(xOf)+'x'+intToStr(tOf)+' ...',1); case rtg of irHorizontal: gibAus(' (horizontal)',1); irEinfall: gibAus(' (einfallend)',1); irAusfall: gibAus(' (ausfallend)',1); end{of case}; - case zi.Genauigkeit of + case zi.genauigkeit of gSingle: - case qu.Genauigkeit of - gSingle: zi.sWerte.integriereSingle(@(qu.sWerte),xmi,xma,tmi,tma,xof,tof,rtg); - gDouble: zi.sWerte.integriereDouble(@(qu.dWerte),xmi,xma,tmi,tma,xof,tof,rtg); - gExtended: zi.sWerte.integriereExtended(@(qu.eWerte),xmi,xma,tmi,tma,xof,tof,rtg); + case qu.genauigkeit of + gSingle: zi.sWerte.integriereSingle(@(qu.sWerte),xMi,xMa,tMi,tMa,xOf,tOf,rtg); + gDouble: zi.sWerte.integriereDouble(@(qu.dWerte),xMi,xMa,tMi,tMa,xOf,tOf,rtg); + gExtended: zi.sWerte.integriereExtended(@(qu.eWerte),xMi,xMa,tMi,tMa,xOf,tOf,rtg); end{of case}; gDouble: - case qu.Genauigkeit of - gSingle: zi.dWerte.integriereSingle(@(qu.sWerte),xmi,xma,tmi,tma,xof,tof,rtg); - gDouble: zi.dWerte.integriereDouble(@(qu.dWerte),xmi,xma,tmi,tma,xof,tof,rtg); - gExtended: zi.dWerte.integriereExtended(@(qu.eWerte),xmi,xma,tmi,tma,xof,tof,rtg); + case qu.genauigkeit of + gSingle: zi.dWerte.integriereSingle(@(qu.sWerte),xMi,xMa,tMi,tMa,xOf,tOf,rtg); + gDouble: zi.dWerte.integriereDouble(@(qu.dWerte),xMi,xMa,tMi,tMa,xOf,tOf,rtg); + gExtended: zi.dWerte.integriereExtended(@(qu.eWerte),xMi,xMa,tMi,tMa,xOf,tOf,rtg); end{of case}; gExtended: - case qu.Genauigkeit of - gSingle: zi.eWerte.integriereSingle(@(qu.sWerte),xmi,xma,tmi,tma,xof,tof,rtg); - gDouble: zi.eWerte.integriereDouble(@(qu.dWerte),xmi,xma,tmi,tma,xof,tof,rtg); - gExtended: zi.eWerte.integriereExtended(@(qu.eWerte),xmi,xma,tmi,tma,xof,tof,rtg); + case qu.genauigkeit of + gSingle: zi.eWerte.integriereSingle(@(qu.sWerte),xMi,xMa,tMi,tMa,xOf,tOf,rtg); + gDouble: zi.eWerte.integriereDouble(@(qu.dWerte),xMi,xMa,tMi,tMa,xOf,tOf,rtg); + gExtended: zi.eWerte.integriereExtended(@(qu.eWerte),xMi,xMa,tMi,tMa,xOf,tOf,rtg); end{of case}; end{of case}; gibAus('... und fertig',1); @@ -6394,34 +6560,34 @@ end; // tSortiereNachYThread ******************************************************** -constructor tSortiereNachYThread.create(K: tKontur; threads,von,bis: longint); +constructor tSortiereNachYThread.create(k: tKontur; threads,von,bis: longint); begin inherited create; - Kont:=K; + kont:=k; vo:=von; bi:=bis; - mt:=threads; + mT:=threads; erfolg:=false; - gibAus('Sortierthread kreiert ('+inttostr(vo)+'-'+inttostr(bi)+') -> x'+inttostr(mt),1); + gibAus('Sortierthread kreiert ('+intToStr(vo)+'-'+intToStr(bi)+') -> x'+intToStr(mT),1); suspended:=false; end; procedure tSortiereNachYThread.stExecute; begin - gibAus('Sortierthread gestartet ('+inttostr(vo)+'-'+inttostr(bi)+') -> x'+inttostr(mt)+' ...',1); - erfolg:=Kont.sortiere_nach_y(mt,vo,bi); + gibAus('Sortierthread gestartet ('+intToStr(vo)+'-'+intToStr(bi)+') -> x'+intToStr(mT)+' ...',1); + erfolg:=kont.sortiereNachY(mT,vo,bi); gibAus(' ... und fertig',1); end; // tBefehlThread *************************************************************** -constructor tBefehlThread.create(st: boolean; cmd: string; out erzeugungsErfolg: boolean); +constructor tBefehlThread.create(sT: boolean; cmd: string; out erzeugungsErfolg: boolean); var nichtLeeresArgument: boolean; function shellParseNextArg(var s: string): string; var err: longint; - sr: tSearchRec; + sR: tSearchRec; begin if length(s)=0 then exit; @@ -6436,12 +6602,12 @@ begin else begin result:=stringReplace(erstesArgument(s),'$$DATETIME',mydatetimetostr(now),[rfReplaceAll]); if pos('*',result)>0 then begin - err:=findFirst(result,$3F,sr); + err:=findFirst(result,$3F,sR); while err=0 do begin - if (sr.Name<>'.') and (sr.Name<>'..') then s:=trim('"'+extractfilepath(result)+sr.Name+'" '+s); - err:=findNext(sr); + if (sR.name<>'.') and (sR.name<>'..') then s:=trim('"'+extractfilepath(result)+sR.name+'" '+s); + err:=findNext(sR); end; - findClose(sr); + findClose(sR); result:=shellParseNextArg(s); end; end; @@ -6451,49 +6617,49 @@ begin nichtLeeresArgument:=true; end; begin - if not st then + if not sT then inherited create; erzeugungsErfolg:=cmd<>''; - if st then begin + if sT then begin endetMit('&',cmd); shellParseNextArg(cmd); end else begin bg:=endetMit('&',cmd); p:=tProcess.create(nil); - p.Options:=p.Options + [poWaitOnExit]; - p.Executable:=shellParseNextArg(cmd); + p.options:=p.options + [poWaitOnExit]; + p.executable:=shellParseNextArg(cmd); end; nichtLeeresArgument:=cmd=''; if not erzeugungsErfolg then begin - if not st then begin + if not sT then begin p.free; p:=nil; end; exit; end; while length(cmd)>0 do begin - if st then + if sT then shellParseNextArg(cmd) else - p.Parameters.Add(shellParseNextArg(cmd)); + p.parameters.add(shellParseNextArg(cmd)); if not erzeugungsErfolg then begin - if not st then begin + if not sT then begin p.free; p:=nil; end; exit; end; end; - if st then + if sT then exit; if not nichtLeeresArgument then begin p.free; p:=nil; end; if assigned(p) then begin - cmd:=p.Parameters.Text; + cmd:=p.parameters.text; while (length(cmd)>0) and (cmd[length(cmd)] in [#10,#13]) do delete(cmd,length(cmd),1); cmd:=''''+cmd+''''; @@ -6501,7 +6667,7 @@ begin cmd:=leftStr(cmd,pos(#10,cmd)-1)+''' '''+copy(cmd,pos(#10,cmd)+1,length(cmd)); while pos(#13,cmd)>0 do cmd:=leftStr(cmd,pos(#13,cmd)-1)+''' '''+copy(cmd,pos(#13,cmd)+1,length(cmd)); - gibAus('Externer Befehl: '''+p.Executable+''' '+cmd+' erzeugt.',3); + gibAus('Externer Befehl: '''+p.executable+''' '+cmd+' erzeugt.',3); end else gibAus('Des Befehls zu expandierende Argumente hatten keine Treffer, er wird ignoriert.',3); @@ -6518,11 +6684,11 @@ procedure tBefehlThread.stExecute; begin if assigned(p) then begin gibAus( - 'externen Befehl ausführen ... '+inttostr(belegterSpeicher)+#10+ - p.Executable+#10+ - p.Parameters.text, + 'externen Befehl ausführen ... '+intToStr(belegterSpeicher)+#10+ + p.executable+#10+ + p.parameters.text, 3); - p.Execute; + p.execute; gibAus('... fertig!',1); end else @@ -6537,7 +6703,7 @@ var begin inherited create; w:=we; - setlength(inputs,length(inps)); + setLength(inputs,length(inps)); for i:=0 to length(inputs)-1 do begin if inps[i] is tPhaseSpaceInputDateiInfo then begin inputs[i]:=tPhaseSpaceInputDateiInfo.create(inps[i]); @@ -6570,7 +6736,7 @@ end; procedure tLeseThread.stExecute; begin gibAus('LeseThread gestartet',1); - case w.Genauigkeit of + case w.genauigkeit of gSingle: if not w.sWerte.liesDateien(inputs) then exit; @@ -6586,14 +6752,14 @@ end; // tVerzerrInitThread ********************************************************** -constructor tVerzerrInitThread.create(quelle,ziel: tWerte; xMin,xMax,tMin,tMax,x0Abs,t0Abs,threads: longint; epsilon: extended; verzerrung: tTransformation; verzerrAnz: longint; zielpositionen: tIntPointArray; zielgewichte: tExtPointArray; Warn: tWarnstufe); +constructor tVerzerrInitThread.create(quelle,ziel: tWerte; xMin,xMax,tMin,tMax,x0Abs,t0Abs,threads: longint; epsilon: extended; verzerrung: tTransformation; verzerrAnz: longint; zielPositionen: tIntPointArray; zielGewichte: tExtPointArray; Warn: tWarnstufe); begin inherited create; qu:=quelle; zi:=ziel; - ZPs:=zielpositionen; - ZGs:=zielgewichte; - setlength(ZAs,zi._xsteps*zi._tsiz); + zPs:=zielPositionen; + zGs:=zielGewichte; + setLength(zAs,zi._xSteps*zi._tSiz); xMi:=xMin; xMa:=xMax; tMi:=tMin; @@ -6602,8 +6768,8 @@ begin t0:=t0Abs; eps:=epsilon; verz:=verzerrung; - va:=verzerrAnz; - mt:=threads; + vA:=verzerrAnz; + mT:=threads; Warnstufe:=Warn; gibAus('VerzerrInitThread kreiert',1); suspended:=false; @@ -6611,69 +6777,69 @@ end; destructor tVerzerrInitThread.destroy; begin - setlength(ZAs,0); + setLength(zAs,0); inherited destroy; end; procedure tVerzerrInitThread.stExecute; begin - gibAus('VerzerrInitThread gestartet ('+inttostr(xMi)+'-'+inttostr(xMa)+'/'+inttostr(tMi)+'-'+inttostr(tMa)+')',1); - zi.initVerzerrung(qu,xMi,xMa,tMi,tMa,x0,t0,mt,false,eps,verz,va,ZPs,ZGs,ZAs,Warnstufe); + gibAus('VerzerrInitThread gestartet ('+intToStr(xMi)+'-'+intToStr(xMa)+'/'+intToStr(tMi)+'-'+intToStr(tMa)+')',1); + zi.initVerzerrung(qu,xMi,xMa,tMi,tMa,x0,t0,mT,false,eps,verz,vA,zPs,zGs,zAs,Warnstufe); gibAus('VerzerrInitThread beendet',1); end; // tVerzerrThread ************************************************************** -constructor tVerzerrThread.create(quelle,ziel: tWerte; xMin,xMax,tMin,tMax: longint; zielpositionen: tIntPointArray; zielgewichte: tExtPointArray; zielanzahlen: tExtendedArray; Vorbearbeitungen,Nachbearbeitungen: tTransformation; vorAnz,nachAnz: longint); +constructor tVerzerrThread.create(quelle,ziel: tWerte; xMin,xMax,tMin,tMax: longint; zielPositionen: tIntPointArray; zielGewichte: tExtPointArray; zielAnzahlen: tExtendedArray; vorbearbeitungen,nachbearbeitungen: tTransformation; vorAnz,nachAnz: longint); begin inherited create; qu:=quelle; zi:=ziel; - ZPs:=zielpositionen; - ZGs:=zielgewichte; - ZAs:=zielanzahlen; + zPs:=zielPositionen; + zGs:=zielGewichte; + zAs:=zielAnzahlen; xMi:=xMin; xMa:=xMax; tMi:=tMin; tMa:=tMax; - vb:=Vorbearbeitungen; - va:=vorAnz; - nb:=Nachbearbeitungen; - na:=nachAnz; + vB:=vorbearbeitungen; + vA:=vorAnz; + nB:=nachbearbeitungen; + nA:=nachAnz; gibAus('Verzerrthread erzeugt',1); suspended:=false; end; procedure tVerzerrThread.stExecute; begin - gibAus('Verzerrthread gestartet '+floattostr(qu._minW)+' '+floattostr(qu._maxW),1); + gibAus('Verzerrthread gestartet '+floatToStr(qu._minW)+' '+floatToStr(qu._maxW),1); case zi.genauigkeit of gSingle: case qu.genauigkeit of gSingle: - zi.sWerte.kopiereVerzerrt(pTLLWerteSingle(@qu.sWerte),ZPs,ZGs,ZAs,xMi,xMa,tMi,tMa,vb,nb,va,na); + zi.sWerte.kopiereVerzerrt(pTLLWerteSingle(@qu.sWerte),zPs,zGs,zAs,xMi,xMa,tMi,tMa,vB,nB,vA,nA); gDouble: - zi.sWerte.kopiereVerzerrt(pTLLWerteDouble(@qu.dWerte),ZPs,ZGs,ZAs,xMi,xMa,tMi,tMa,vb,nb,va,na); + zi.sWerte.kopiereVerzerrt(pTLLWerteDouble(@qu.dWerte),zPs,zGs,zAs,xMi,xMa,tMi,tMa,vB,nB,vA,nA); gExtended: - zi.sWerte.kopiereVerzerrt(pTLLWerteExtended(@qu.eWerte),ZPs,ZGs,ZAs,xMi,xMa,tMi,tMa,vb,nb,va,na); + zi.sWerte.kopiereVerzerrt(pTLLWerteExtended(@qu.eWerte),zPs,zGs,zAs,xMi,xMa,tMi,tMa,vB,nB,vA,nA); end{of case}; gDouble: case qu.genauigkeit of gSingle: - zi.dWerte.kopiereVerzerrt(pTLLWerteSingle(@qu.sWerte),ZPs,ZGs,ZAs,xMi,xMa,tMi,tMa,vb,nb,va,na); + zi.dWerte.kopiereVerzerrt(pTLLWerteSingle(@qu.sWerte),zPs,zGs,zAs,xMi,xMa,tMi,tMa,vB,nB,vA,nA); gDouble: - zi.dWerte.kopiereVerzerrt(pTLLWerteDouble(@qu.dWerte),ZPs,ZGs,ZAs,xMi,xMa,tMi,tMa,vb,nb,va,na); + zi.dWerte.kopiereVerzerrt(pTLLWerteDouble(@qu.dWerte),zPs,zGs,zAs,xMi,xMa,tMi,tMa,vB,nB,vA,nA); gExtended: - zi.dWerte.kopiereVerzerrt(pTLLWerteExtended(@qu.eWerte),ZPs,ZGs,ZAs,xMi,xMa,tMi,tMa,vb,nb,va,na); + zi.dWerte.kopiereVerzerrt(pTLLWerteExtended(@qu.eWerte),zPs,zGs,zAs,xMi,xMa,tMi,tMa,vB,nB,vA,nA); end{of case}; gExtended: case qu.genauigkeit of gSingle: - zi.eWerte.kopiereVerzerrt(pTLLWerteSingle(@qu.sWerte),ZPs,ZGs,ZAs,xMi,xMa,tMi,tMa,vb,nb,va,na); + zi.eWerte.kopiereVerzerrt(pTLLWerteSingle(@qu.sWerte),zPs,zGs,zAs,xMi,xMa,tMi,tMa,vB,nB,vA,nA); gDouble: - zi.eWerte.kopiereVerzerrt(pTLLWerteDouble(@qu.dWerte),ZPs,ZGs,ZAs,xMi,xMa,tMi,tMa,vb,nb,va,na); + zi.eWerte.kopiereVerzerrt(pTLLWerteDouble(@qu.dWerte),zPs,zGs,zAs,xMi,xMa,tMi,tMa,vB,nB,vA,nA); gExtended: - zi.eWerte.kopiereVerzerrt(pTLLWerteExtended(@qu.eWerte),ZPs,ZGs,ZAs,xMi,xMa,tMi,tMa,vb,nb,va,na); + zi.eWerte.kopiereVerzerrt(pTLLWerteExtended(@qu.eWerte),zPs,zGs,zAs,xMi,xMa,tMi,tMa,vB,nB,vA,nA); end{of case}; end{of case}; gibAus('Verzerrthread beendet',1); @@ -6692,13 +6858,13 @@ begin tMa:=tMax; verhHo:=verhaeltnisHorizontal; verhVe:=verhaeltnisVertikal; - gibAus('VerzerrLOthread erzeugt: '+inttostr(xmin)+'-'+inttostr(xmax)+' '+inttostr(tmin)+'-'+inttostr(tmax),1); + gibAus('VerzerrLOthread erzeugt: '+intToStr(xMin)+'-'+intToStr(xMax)+' '+intToStr(tMin)+'-'+intToStr(tMax),1); suspended:=false; end; procedure tVerzerrLOThread.stExecute; begin - gibAus('VerzerrLOthread gestartet '+floattostr(qu._minW)+' '+floattostr(qu._maxW),1); + gibAus('VerzerrLOthread gestartet '+floatToStr(qu._minW)+' '+floatToStr(qu._maxW),1); case zi.genauigkeit of gSingle: case qu.genauigkeit of @@ -6733,7 +6899,7 @@ end; // tFensterThread ************************************************************** -constructor tFensterThread.create(werte: tWerte; xMin,xMax,tMin,tMax: longint; x_Fenster,t_Fenster: tFenster; hintergrund: extended); +constructor tFensterThread.create(werte: tWerte; xMin,xMax,tMin,tMax: longint; fensterX,fensterT: tFenster; hintergrund: extended); begin inherited create; we:=werte; @@ -6741,14 +6907,14 @@ begin xMa:=xMax; tMi:=tMin; tMa:=tMax; - xFen:=x_Fenster; - tFen:=t_Fenster; + xFen:=fensterX; + tFen:=fensterT; hg:=hintergrund; - if length(xFen.werte)<>werte._xsteps then - xFen.berechneWerte(werte._xsteps); - if length(tFen.werte)<>werte._tsiz then - tFen.berechneWerte(werte._tsiz); - gibAus('FensterThread erzeugt: '+inttostr(xmin)+'-'+inttostr(xmax)+' '+inttostr(tmin)+'-'+inttostr(tmax),1); + if length(xFen.werte)<>werte._xSteps then + xFen.berechneWerte(werte._xSteps); + if length(tFen.werte)<>werte._tSiz then + tFen.berechneWerte(werte._tSiz); + gibAus('FensterThread erzeugt: '+intToStr(xMin)+'-'+intToStr(xMax)+' '+intToStr(tMin)+'-'+intToStr(tMax),1); suspended:=false; end; @@ -6768,7 +6934,7 @@ end; // sonstiges ******************************************************************* -function findePalette(out Palette: pTPalette; name: string): boolean; +function findePalette(out palette: pTPalette; name: string): boolean; var i: longint; begin @@ -6776,25 +6942,25 @@ begin for i:=0 to length(paletten)-1 do if paletten[i].name=name then begin - Palette:=@(paletten[i]); + palette:=@(paletten[i]); exit; end; - Palette:=nil; + palette:=nil; result:=false; end; -function erzeugeLegende(st: boolean; f: tMyStringlist; datei: string; Qu: tWerte; minDichte,maxDichte: extended; nb: tTransformation; pal: pTPalette): boolean; +function erzeugeLegende(sT: boolean; f: tMyStringList; datei: string; qu: tWerte; minDichte,maxDichte: extended; nB: tTransformation; pal: pTPalette): boolean; var s: string; - breite,hoehe,i,j,k,lo,ro,oo,uo, + breite,hoehe,i,j,k,lO,rO,oO,uO, schriftgroesze: longint; img: file; lineareFarbe,waagerecht,rahmen: boolean; - farben: tRgbArray; + farben: tRGBArray; col: tRGB; wert,tmp,schritt: extended; fontRenderer: tFontRenderer; - beschriftungsschritte: array of tBeschriftungsschritt; + beschriftungsschritte: array of tBeschriftungsSchritt; beschriftungen: array of tBeschriftung; tmpTr: tTransformation; bekannteBefehle: tMyStringList; @@ -6805,8 +6971,8 @@ begin waagerecht:=false; lineareFarbe:=false; schriftgroesze:=24; - setlength(beschriftungen,0); - setlength(beschriftungsschritte,2); + setLength(beschriftungen,0); + setLength(beschriftungsschritte,2); beschriftungsschritte[0].schritte:=0; beschriftungsschritte[0].bis:=minDichte; beschriftungsschritte[0].linear:=false; @@ -6855,7 +7021,7 @@ begin continue; end; if istDasBefehl('Beschriftungen:',s,bekannteBefehle,false) then begin - setlength(beschriftungsschritte,1); + setLength(beschriftungsschritte,1); beschriftungsschritte[0].schritte:=0; beschriftungsschritte[0].bis:=minDichte; beschriftungsschritte[0].linear:=false; @@ -6868,18 +7034,18 @@ begin end; if s='Ende' then break; - setlength(beschriftungsschritte,length(beschriftungsschritte)+1); + setLength(beschriftungsschritte,length(beschriftungsschritte)+1); if startetMit('linear',s) then beschriftungsschritte[length(beschriftungsschritte)-1].linear:=true else if startetMit('logarithmisch',s) then begin beschriftungsschritte[length(beschriftungsschritte)-1].linear:=false; - minDichte:=Qu.exprtofloat(st,erstesArgument(s)); + minDichte:=qu.exprToFloat(sT,erstesArgument(s)); beschriftungsschritte[0].bis:=maxDichte*minDichte; - tmpTr:=nb; + tmpTr:=nB; while assigned(tmpTr) do begin if tmpTr is tWerteLogTransformation then begin if (tmpTr as tWerteLogTransformation).logMin<>minDichte then begin - gibAus('Die minimale Dichte der logarithmischen Farbskala ('+myfloattostr(minDichte)+') und der logarithmischen Nachbearbeitung ('+myfloattostr((tmpTr as tWerteLogTransformation).logMin)+') stimmen nicht überein!',3); + gibAus('Die minimale Dichte der logarithmischen Farbskala ('+myFloatToStr(minDichte)+') und der logarithmischen Nachbearbeitung ('+myFloatToStr((tmpTr as tWerteLogTransformation).logMin)+') stimmen nicht überein!',3); exit; end; minDichte:=minDichte*maxDichte; @@ -6896,7 +7062,7 @@ begin bekannteBefehle.free; exit; end; - beschriftungsschritte[length(beschriftungsschritte)-1].bis:=Qu.exprtofloat(st,erstesArgument(s)); + beschriftungsschritte[length(beschriftungsschritte)-1].bis:=qu.exprToFloat(sT,erstesArgument(s)); if endetMit('+',s) then beschriftungsschritte[length(beschriftungsschritte)-1].faktor:=0.5 else if endetMit('-',s) then beschriftungsschritte[length(beschriftungsschritte)-1].faktor:=2 else beschriftungsschritte[length(beschriftungsschritte)-1].faktor:=1; @@ -6913,22 +7079,22 @@ begin until false; bekannteBefehle.free; - if st then begin + if sT then begin result:=true; exit; end; fontRenderer:=tFontRenderer.create(schriftgroesze); - gibAus(floattostr(minDichte)+' '+floattostr(maxDichte),1); + gibAus(floatToStr(minDichte)+' '+floatToStr(maxDichte),1); for i:=0 to length(beschriftungsschritte)-1 do - gibAus(inttostr(i)+' '+floattostr(beschriftungsschritte[i].bis)+' '+floattostr(beschriftungsschritte[i].faktor)+' '+inttostr(beschriftungsschritte[i].schritte)+' '+inttostr(byte(beschriftungsschritte[i].linear)),1); + gibAus(intToStr(i)+' '+floatToStr(beschriftungsschritte[i].bis)+' '+floatToStr(beschriftungsschritte[i].faktor)+' '+intToStr(beschriftungsschritte[i].schritte)+' '+intToStr(byte(beschriftungsschritte[i].linear)),1); i:=0; wert:=minDichte; schritt:=-1; while wert<maxDichte do begin - if i>0 then gibAus(inttostr(i)+' '+floattostr(wert)+' '+floattostr(schritt)+' '+floattostr(beschriftungsschritte[i].bis),1); + if i>0 then gibAus(intToStr(i)+' '+floatToStr(wert)+' '+floatToStr(schritt)+' '+floatToStr(beschriftungsschritte[i].bis),1); if ((i<length(beschriftungsschritte)-1) and (wert>beschriftungsschritte[i].bis)) or (i=0) then begin repeat inc(i); @@ -6942,16 +7108,16 @@ begin tmp:=round(beschriftungsschritte[i-1].bis/schritt)*schritt; while tmp<wert do tmp:=(round(tmp/schritt)+1)*schritt; wert:=tmp; - gibAus(inttostr(i)+' '+floattostr(wert)+' '+floattostr(schritt)+' '+floattostr(beschriftungsschritte[i].bis),1); + gibAus(intToStr(i)+' '+floatToStr(wert)+' '+floatToStr(schritt)+' '+floatToStr(beschriftungsschritte[i].bis),1); end; - setlength(beschriftungen,length(beschriftungen)+1); + setLength(beschriftungen,length(beschriftungen)+1); beschriftungen[length(beschriftungen)-1]:=tBeschriftung.create; beschriftungen[length(beschriftungen)-1].bBreite:=breite; beschriftungen[length(beschriftungen)-1].bHoehe:=hoehe; - beschriftungen[length(beschriftungen)-1].Rahmen:=Rahmen; + beschriftungen[length(beschriftungen)-1].rahmen:=rahmen; beschriftungen[length(beschriftungen)-1].fontRend:=fontRenderer; beschriftungen[length(beschriftungen)-1].position:=(wert-minDichte)/(maxDichte-minDichte); - beschriftungen[length(beschriftungen)-1].inhalt:=floattostr(wert); + beschriftungen[length(beschriftungen)-1].inhalt:=floatToStr(wert); if not beschriftungsschritte[i].linear then schritt:=power(10,floor(ln(wert)/ln(10)-beschriftungsschritte[i].schritte))*beschriftungsschritte[i].faktor; wert:=(round(wert/schritt)+1)*schritt; @@ -6959,36 +7125,36 @@ begin if lineareFarbe then for i:=0 to length(beschriftungen)-1 do - beschriftungen[i].position:=nb.transformiereWert(beschriftungen[i].position); + beschriftungen[i].position:=nB.transformiereWert(beschriftungen[i].position); for i:=0 to length(beschriftungen)-1 do beschriftungen[i].position:=beschriftungen[i].position*(hoehe+byte(waagerecht)*(breite-hoehe)); - lo:=Byte(Rahmen); - ro:=Byte(Rahmen); - oo:=Byte(Rahmen); - uo:=Byte(Rahmen); + lO:=byte(rahmen); + rO:=byte(rahmen); + oO:=byte(rahmen); + uO:=byte(rahmen); for i:=0 to length(beschriftungen)-1 do begin - lo:=max(lo,-beschriftungen[i].links); - ro:=max(ro,1+beschriftungen[i].rechts-breite); - oo:=max(oo,-beschriftungen[i].oben); - uo:=max(uo,1+beschriftungen[i].unten-hoehe); + lO:=max(lO,-beschriftungen[i].links); + rO:=max(rO,1+beschriftungen[i].rechts-breite); + oO:=max(oO,-beschriftungen[i].oben); + uO:=max(uO,1+beschriftungen[i].unten-hoehe); end; - if lo+oo+ro+uo>0 then - gibAus('Extra-Ränder: '+inttostr(lo)+' Pixel links, '+inttostr(oo)+' Pixel oben, '+inttostr(ro)+' Pixel rechts und '+inttostr(uo)+' Pixel unten.',3); + if lO+oO+rO+uO>0 then + gibAus('Extra-Ränder: '+intToStr(lO)+' Pixel links, '+intToStr(oO)+' Pixel oben, '+intToStr(rO)+' Pixel rechts und '+intToStr(uO)+' Pixel unten.',3); - setlength(farben,byte(waagerecht)*(breite-hoehe)+hoehe); + setLength(farben,byte(waagerecht)*(breite-hoehe)+hoehe); for i:=0 to length(farben)-1 do begin wert:=i/length(farben); if not lineareFarbe then - wert:=nb.transformiereWert(wert); + wert:=nB.transformiereWert(wert); farben[i]:=wertZuFarbe(wert,pal^.farben); end; assign(img,datei); rewrite(img,1); - schreibeBmpHeader(img,breite+lo+ro,hoehe+oo+uo); - for j:=-oo to hoehe+uo-1 do begin - i:=-lo; - while i<breite+ro do + schreibeBmpHeader(img,breite+lO+rO,hoehe+oO+uO); + for j:=-oO to hoehe+uO-1 do begin + i:=-lO; + while i<breite+rO do if waagerecht and (i=0) and (j>=0) and (j<hoehe) then begin blockwrite(img,farben[0],3*breite); i:=breite; @@ -7009,14 +7175,14 @@ begin col.rgbBlue:=$00; end; end; - for k:=0 to length(Beschriftungen)-1 do - with Beschriftungen[k] do begin + for k:=0 to length(beschriftungen)-1 do + with beschriftungen[k] do begin if (links<=i) and (rechts>=i) and (oben<=j) and (unten>=j) then col:=andFarben(col,bild.farben[i-links + (j-oben)*bild.breite]); - if ((bBreite<=i) and (i<bBreite+4+byte(Rahmen)) and (lage = lRechts) and (strich=j)) or - ((-4<=i+byte(Rahmen)) and (i<0) and (lage = lLinks) and (strich=j)) or - ((bHoehe<=j) and (j<bHoehe+4+byte(Rahmen)) and (lage = lOben) and (strich=i)) or - ((-4<=j+byte(Rahmen)) and (j<0) and (lage = lUnten) and (strich=i)) then begin + if ((bBreite<=i) and (i<bBreite+4+byte(rahmen)) and (lage = lRechts) and (strich=j)) or + ((-4<=i+byte(rahmen)) and (i<0) and (lage = lLinks) and (strich=j)) or + ((bHoehe<=j) and (j<bHoehe+4+byte(rahmen)) and (lage = lOben) and (strich=i)) or + ((-4<=j+byte(rahmen)) and (j<0) and (lage = lUnten) and (strich=i)) then begin col.rgbRed:=$00; col.rgbGreen:=$00; col.rgbBlue:=$00; @@ -7027,51 +7193,19 @@ begin inc(i); end; i:=0; - blockwrite(img,i,(4-(((breite+lo+ro)*3) mod 4)) mod 4); + blockwrite(img,i,(4-(((breite+lO+rO)*3) mod 4)) mod 4); end; for i:=0 to length(beschriftungen)-1 do beschriftungen[i].free; - setlength(beschriftungen,0); + setLength(beschriftungen,0); close(img); fontRenderer.free; result:=true; end; -function strToFftDo(out fftDo: tFFTDatenordnung; s: string): boolean; -var - bekannteBefehle: tMyStringList; -begin - result:=true; - bekannteBefehle:=tMyStringList.create; - if istDasBefehl('Realteile:Imaginärteile',s,bekannteBefehle,false) then begin - fftDo:=doResIms; - bekannteBefehle.free; - exit; - end; - if istDasBefehl('Realteile:Imaginärteile umgedreht',s,bekannteBefehle,false) then begin - fftDo:=doResSmi; - bekannteBefehle.free; - exit; - end; - if istDasBefehl('Beträge',s,bekannteBefehle,false) then begin - fftDo:=doBetr; - bekannteBefehle.free; - exit; - end; - if istDasBefehl('Betragsquadrate',s,bekannteBefehle,false) then begin - fftDo:=doBetrQdr; - bekannteBefehle.free; - exit; - end; - bekannteBefehle.sort; - gibAus('Kenne Nachbereitungsvariante '''+s+''' nicht bei Erstellung einer FFT!'#10'Ich kenne:'#10+bekannteBefehle.text,3); - bekannteBefehle.free; - result:=false; -end; - -function findeWerte(s: String; f: tMyStringlist; pws: pTWerteArray; Kont: pTKonturenArray; darfErstellen: boolean): integer; +function findeWerte(s: string; f: tMyStringList; pws: pTWerteArray; kont: pTKonturenArray; darfErstellen: boolean): integer; var i: integer; istZahl: boolean; @@ -7081,7 +7215,7 @@ begin while (result<length(pws^)) and (pws^[result].bezeichner<>s) do inc(result); if result<length(pws^) then begin // Werte gefunden! - pws^[result].warteaufBeendigungDesLeseThreads; + pws^[result].warteAufBeendigungDesLeseThreads; exit; end; @@ -7092,11 +7226,11 @@ begin if istZahl then begin // bei s handelt es sich um den Index selbst result:=strtoint(s); if (result<0) or (result>=length(pws^)) then begin - gibAus('Index ('+s+') liegt außerhalb des gültigen Bereichs (0..'+inttostr(length(pws^)-1)+')!',3); + gibAus('Index ('+s+') liegt außerhalb des gültigen Bereichs (0..'+intToStr(length(pws^)-1)+')!',3); result:=-1; end else - pws^[result].warteaufBeendigungDesLeseThreads; + pws^[result].warteAufBeendigungDesLeseThreads; exit; end; @@ -7106,8 +7240,8 @@ begin exit; end; - setlength(pws^,length(pws^)+1); - pws^[length(pws^)-1]:=tWerte.create(Kont,pws); + setLength(pws^,length(pws^)+1); + pws^[length(pws^)-1]:=tWerte.create(kont,pws); pws^[length(pws^)-1].bezeichner:=s; i:=f.count-1; @@ -7122,7 +7256,7 @@ begin result:=length(pws^)-1; end; -function findeKontur(s: String; f: tMyStringlist; pws: pTWerteArray; pks: pTKonturenArray; darfErstellen: boolean): integer; +function findeKontur(s: string; f: tMyStringList; pws: pTWerteArray; pks: pTKonturenArray; darfErstellen: boolean): integer; var i: integer; istZahl: boolean; @@ -7140,19 +7274,19 @@ begin if istZahl then begin // bei s handelt es sich um den Index selbst result:=strtoint(s); if (result<0) or (result>=length(pks^)) then begin - gibAus('Index ('+s+') liegt außerhalb des gültigen Bereichs (0..'+inttostr(length(pks^)-1)+')!',3); + gibAus('Index ('+s+') liegt außerhalb des gültigen Bereichs (0..'+intToStr(length(pks^)-1)+')!',3); result:=-1; end; exit; end; if not darfErstellen then begin - gibAus('Ich habe Konturen '''+s+''' nicht gefunden und darf sie auch nicht erstellen!',3); + gibAus('Ich habe Kontur '''+s+''' nicht gefunden und darf sie auch nicht erstellen!',3); result:=-1; exit; end; - setlength(pks^,length(pks^)+1); + setLength(pks^,length(pks^)+1); pks^[length(pks^)-1]:=tKontur.create(pks,pws); pks^[length(pks^)-1].bezeichner:=s; @@ -7170,7 +7304,7 @@ end; function initBmpHeader(w,h: longint): tBmpHeader; begin - With result do begin + with result do begin bfType1 := $42; bfType2 := $4D; bfSize := $36 + ((3*w+3) div 4)*4*h; @@ -7196,18 +7330,18 @@ var bmpHeader: tBmpHeader; begin bmpHeader:=initBmpHeader(w,h); - blockwrite(f,bmpHeader,sizeof(bmpHeader)); + blockwrite(f,bmpHeader,sizeOf(bmpHeader)); end; -function neuePalette(f: tMyStringlist): boolean; +function neuePalette(f: tMyStringList): boolean; var s,name: string; - Palette: tRGBArray; + palette: tRGBArray; i: longint; nPalette: pTPalette; begin result:=false; - setlength(Palette,0); + setLength(palette,0); name:=''; nPalette:=nil; repeat @@ -7221,8 +7355,8 @@ begin findePalette(nPalette,s); continue; end; - setlength(Palette,length(Palette)+1); - if strToTRGB(s,Palette[length(Palette)-1]) then continue; + setLength(palette,length(palette)+1); + if strToTRGB(s,palette[length(palette)-1]) then continue; gibAus(''''+s+''' ist keine Farbe für eine Palette!',3); exit; until false; @@ -7230,28 +7364,28 @@ begin gibAus('Die Palette braucht einen Namen!',3); exit; end; - if length(Palette)<2 then begin - gibAus('Zu wenige Farben in der Palette '''+name+''', nämlich nur '+inttostr(length(Palette)),3); + if length(palette)<2 then begin + gibAus('Zu wenige Farben in der Palette '''+name+''', nämlich nur '+intToStr(length(palette)),3); exit; end; if nPalette=nil then begin - setlength(Paletten,length(Paletten)+1); - nPalette:=@(Paletten[length(Paletten)-1]); + setLength(paletten,length(paletten)+1); + nPalette:=@(paletten[length(paletten)-1]); end; nPalette^.name:=name; - setlength(nPalette^.farben,length(Palette)); - for i:=0 to length(Palette)-1 do - nPalette^.farben[i]:=Palette[i]; + setLength(nPalette^.farben,length(palette)); + for i:=0 to length(palette)-1 do + nPalette^.farben[i]:=palette[i]; gibAus('Neue Palette '''+nPalette^.name+''' erstellt!',3); result:=true; end; -function externerBefehl(st: boolean; s: string): boolean; +function externerBefehl(sT: boolean; s: string): boolean; var bt: tBefehlThread; begin - bt:=tBefehlThread.create(st,s,result); - if st then begin + bt:=tBefehlThread.create(sT,s,result); + if sT then begin // bt.free; exit; end; @@ -7265,7 +7399,7 @@ begin bt.suspended:=false; gibAus('Befehl gestartet.',3); if bt.bg then begin - setlength(externeBefehle,length(externeBefehle)+1); + setLength(externeBefehle,length(externeBefehle)+1); externeBefehle[length(externeBefehle)-1]:=bt; exit; // Job läuft im Hintergrund weiter! end; @@ -7274,7 +7408,7 @@ begin bt.free; end; -procedure warte_auf_externeBefehle; +procedure warteAufExterneBefehle; var i: longint; b,c: boolean; @@ -7294,7 +7428,7 @@ begin gibAus('... alle externen Befehle fertig.',3); for i:=0 to length(externeBefehle)-1 do if assigned(externeBefehle[i]) then externeBefehle[i].free; - setlength(externeBefehle,0); + setLength(externeBefehle,0); end; procedure beendeExterneBefehleWennFertig; @@ -7307,61 +7441,61 @@ begin externeBefehle[i].free; for j:=i+1 to length(externeBefehle)-1 do externeBefehle[j-1]:=externeBefehle[j]; - setlength(externeBefehle,length(externeBefehle)-1); + setLength(externeBefehle,length(externeBefehle)-1); end; end; begin fileMode := fmOpenRead; - setlength(externeBefehle,0); - - setlength(Paletten,6); - Paletten[0].name:='Graustufen'; - setlength(Paletten[0].farben,2); - Paletten[0].farben[0]:=rgb($ff,$ff,$ff); - Paletten[0].farben[1]:=rgb($00,$00,$00); - - Paletten[1].name:='invertierte Graustufen'; - setlength(Paletten[1].farben,2); - Paletten[1].farben[0]:=rgb($00,$00,$00); - Paletten[1].farben[1]:=rgb($ff,$ff,$ff); - - Paletten[2].name:='Regenbogen'; - setlength(Paletten[2].farben,6); - Paletten[2].farben[0]:=rgb($00,$00,$ff); - Paletten[2].farben[1]:=rgb($00,$ff,$ff); - Paletten[2].farben[2]:=rgb($00,$ff,$00); - Paletten[2].farben[3]:=rgb($ff,$ff,$00); - Paletten[2].farben[4]:=rgb($ff,$00,$00); - Paletten[2].farben[5]:=rgb($00,$00,$00); - - Paletten[3].name:='invertierter Regenbogen'; - setlength(Paletten[3].farben,6); - Paletten[3].farben[0]:=rgb($00,$00,$00); - Paletten[3].farben[1]:=rgb($ff,$00,$00); - Paletten[3].farben[2]:=rgb($ff,$ff,$00); - Paletten[3].farben[3]:=rgb($00,$ff,$00); - Paletten[3].farben[4]:=rgb($00,$ff,$ff); - Paletten[3].farben[5]:=rgb($00,$00,$ff); - - Paletten[4].name:='Jet-Regenbogen'; - setlength(Paletten[4].farben,5); - Paletten[4].farben[0]:=rgb($ff,$00,$00); - Paletten[4].farben[1]:=rgb($ff,$ff,$00); - Paletten[4].farben[2]:=rgb($00,$ff,$00); - Paletten[4].farben[3]:=rgb($00,$ff,$ff); - Paletten[4].farben[4]:=rgb($00,$00,$ff); - - Paletten[5].name:='erweiterter Regenbogen'; - setlength(Paletten[5].farben,8); - Paletten[5].farben[0]:=rgb($ff,$ff,$ff); - Paletten[5].farben[1]:=rgb($00,$00,$ff); - Paletten[5].farben[2]:=rgb($00,$ff,$ff); - Paletten[5].farben[3]:=rgb($00,$ff,$00); - Paletten[5].farben[4]:=rgb($ff,$ff,$00); - Paletten[5].farben[5]:=rgb($ff,$00,$00); - Paletten[5].farben[6]:=rgb($ff,$00,$ff); - Paletten[5].farben[7]:=rgb($00,$00,$00); + setLength(externeBefehle,0); + + setLength(paletten,6); + paletten[0].name:='Graustufen'; + setLength(paletten[0].farben,2); + paletten[0].farben[0]:=rgb($ff,$ff,$ff); + paletten[0].farben[1]:=rgb($00,$00,$00); + + paletten[1].name:='invertierte Graustufen'; + setLength(paletten[1].farben,2); + paletten[1].farben[0]:=rgb($00,$00,$00); + paletten[1].farben[1]:=rgb($ff,$ff,$ff); + + paletten[2].name:='Regenbogen'; + setLength(paletten[2].farben,6); + paletten[2].farben[0]:=rgb($00,$00,$ff); + paletten[2].farben[1]:=rgb($00,$ff,$ff); + paletten[2].farben[2]:=rgb($00,$ff,$00); + paletten[2].farben[3]:=rgb($ff,$ff,$00); + paletten[2].farben[4]:=rgb($ff,$00,$00); + paletten[2].farben[5]:=rgb($00,$00,$00); + + paletten[3].name:='invertierter Regenbogen'; + setLength(paletten[3].farben,6); + paletten[3].farben[0]:=rgb($00,$00,$00); + paletten[3].farben[1]:=rgb($ff,$00,$00); + paletten[3].farben[2]:=rgb($ff,$ff,$00); + paletten[3].farben[3]:=rgb($00,$ff,$00); + paletten[3].farben[4]:=rgb($00,$ff,$ff); + paletten[3].farben[5]:=rgb($00,$00,$ff); + + paletten[4].name:='Jet-Regenbogen'; + setLength(paletten[4].farben,5); + paletten[4].farben[0]:=rgb($ff,$00,$00); + paletten[4].farben[1]:=rgb($ff,$ff,$00); + paletten[4].farben[2]:=rgb($00,$ff,$00); + paletten[4].farben[3]:=rgb($00,$ff,$ff); + paletten[4].farben[4]:=rgb($00,$00,$ff); + + paletten[5].name:='erweiterter Regenbogen'; + setLength(paletten[5].farben,8); + paletten[5].farben[0]:=rgb($ff,$ff,$ff); + paletten[5].farben[1]:=rgb($00,$00,$ff); + paletten[5].farben[2]:=rgb($00,$ff,$ff); + paletten[5].farben[3]:=rgb($00,$ff,$00); + paletten[5].farben[4]:=rgb($ff,$ff,$00); + paletten[5].farben[5]:=rgb($ff,$00,$00); + paletten[5].farben[6]:=rgb($ff,$00,$ff); + paletten[5].farben[7]:=rgb($00,$00,$00); end. diff --git a/typenunit.pas b/typenunit.pas index 5cb1621..a5fe65b 100644 --- a/typenunit.pas +++ b/typenunit.pas @@ -5,30 +5,30 @@ unit typenunit; interface uses - sysutils, agg_2D, FPimage, agg_basics, classes, Math, mystringlistunit, lowlevelunit, matheunit; + sysutils, agg_2D, FPimage, agg_basics, classes, math, mystringlistunit, lowlevelunit, matheunit; -const Speicherhappen = 32768; // Anzahl an mit einem Mal zu reservierender Arrayzellen +const speicherHappen = 32768; // Anzahl an mit einem Mal zu reservierender Arrayzellen myInf = 1e12; - FeldgroeszenNamen: array[0..9] of string = ('FP','FM','GP','GM','EX','DENS_E','DENS_I','JX','JY','JZ'); + feldGroeszenNamen: array[0..9] of string = ('FP','FM','GP','GM','EX','DENS_E','DENS_I','JX','JY','JZ'); // verbosity: longint = 0; type tExtraInfos = class; tIntegrationsRichtung = (irHorizontal,irEinfall,irAusfall); tGenerischeInputDateiInfo = class // nur zum Vererben gedacht, nie selbst instanziieren! - Name,Fehlerbehebungskommando: string; + name,fehlerBehebungsKommando: string; gamma,groeszenFaktor, - tstart,tstop,xstart,xstop: extended; - Genauigkeit: tGenauigkeit; - xsteps,tsiz,t0abs: longint; - params: tExtrainfos; + tStart,tStop,xStart,xStop: extended; + genauigkeit: tGenauigkeit; + xSteps,tSiz,t0Abs: longint; + params: tExtraInfos; constructor create(Vorlage: tGenerischeInputDateiInfo); overload; constructor create; overload; destructor destroy; override; - function xmin: longint; - function xmax: longint; - function tmin: longint; - function tmax: longint; + function xMin: longint; + function xMax: longint; + function tMin: longint; + function tMax: longint; end; tPhaseSpaceInputDateiInfo = class (tGenerischeInputDateiInfo) constructor create(Vorlage: tGenerischeInputDateiInfo); overload; @@ -41,28 +41,28 @@ type destructor destroy; override; end; tTraceInputDateiInfo = class (tGenerischeInputDateiInfo) - SpurNummer,FeldNummer: longint; + spurNummer,feldNummer: longint; constructor create(Vorlage: tGenerischeInputDateiInfo); overload; constructor create; overload; destructor destroy; override; end; tSergeyInputDateiInfo = class (tGenerischeInputDateiInfo) - FeldNummer: longint; + feldNummer: longint; constructor create(Vorlage: tGenerischeInputDateiInfo); overload; constructor create; overload; destructor destroy; override; end; tPipeInputDateiInfo = class (tGenerischeInputDateiInfo) - Analysator: string; + analysator: string; bytesPerSample: longint; Kodierung: tKodierung; constructor create(Vorlage: tGenerischeInputDateiInfo); overload; constructor create; overload; destructor destroy; override; - function Executable: string; - function ParametersText: string; - function AnalysatorExecutable: string; - function AnalysatorParametersText: string; + function executable: string; + function parametersText: string; + function analysatorExecutable: string; + function analysatorParametersText: string; end; tAndorInputDateiInfo = class (tGenerischeInputDateiInfo) temperatur,belichtungsZeit, @@ -84,15 +84,15 @@ type tGenerischeInputDateiInfoArray = specialize tArray<tGenerischeInputDateiInfo>; tInputDateiInfoVorlagen = class private - _Name,_Fehlerbehebungskommando: string; - _Gamma,_groeszenFaktor, - _tstart,_tstop,_xstart,_xstop: extended; - _Genauigkeit: tGenauigkeit; - _tsiz,_xsteps,_SpurNummer,_t0abs, - _bytesPerSample,_FeldNummer: longint; - _Analysator: string; + _name,_fehlerBehebungsKommando: string; + _gamma,_groeszenFaktor, + _tStart,_tStop,_xStart,_xStop: extended; + _genauigkeit: tGenauigkeit; + _tSiz,_xSteps,_spurNummer,_t0abs, + _bytesPerSample,_feldNummer: longint; + _analysator: string; _Kodierung: tKodierung; - _params: tExtrainfos; + _params: tExtraInfos; procedure wFehlerbehebungskommando(f: string); procedure wName(n: string); procedure wGamma(g: extended); @@ -110,71 +110,71 @@ type procedure wAnalysator(a: string); procedure wBytesPerSample(b: longint); procedure wKodierung(k: tKodierung); - procedure wParams(p: tExtrainfos); + procedure wParams(p: tExtraInfos); public - PhaseSpaceVorlage: tPhaseSpaceInputDateiInfo; - SpaceTimeVorlage: tSpaceTimeInputDateiInfo; - TraceVorlage: tTraceInputDateiInfo; - SergeyVorlage: tSergeyInputDateiInfo; - PipeVorlage: tPipeInputDateiInfo; - AndorVorlage: tAndorInputDateiInfo; - property Fehlerbehebungskommando: string - read _Fehlerbehebungskommando + phaseSpaceVorlage: tPhaseSpaceInputDateiInfo; + spaceTimeVorlage: tSpaceTimeInputDateiInfo; + traceVorlage: tTraceInputDateiInfo; + sergeyVorlage: tSergeyInputDateiInfo; + pipeVorlage: tPipeInputDateiInfo; + andorVorlage: tAndorInputDateiInfo; + property fehlerBehebungsKommando: string + read _fehlerBehebungsKommando write wFehlerbehebungskommando; - property Name: string - read _Name + property name: string + read _name write wName; - property Gamma: extended - read _Gamma + property gamma: extended + read _gamma write wGamma; - property tstart: extended - read _tstart + property tStart: extended + read _tStart write wTStart; - property tstop: extended - read _tstop + property tStop: extended + read _tStop write wTStop; - property xstart: extended - read _xstart + property xStart: extended + read _xStart write wXStart; - property xstop: extended - read _xstop + property xStop: extended + read _xStop write wXStop; - property t0abs: longint + property t0Abs: longint read _t0abs write wT0Abs; property groeszenFaktor: extended read _groeszenFaktor write wGroeszenFaktor; - property Genauigkeit: tGenauigkeit - read _Genauigkeit + property genauigkeit: tGenauigkeit + read _genauigkeit write wGenauigkeit; - property SpurNummer: longint - read _SpurNummer + property spurNummer: longint + read _spurNummer write wSpurNummer; - property FeldNummer: longint - read _FeldNummer + property feldNummer: longint + read _feldNummer write wFeldNummer; - property Analysator: string - read _Analysator + property analysator: string + read _analysator write wAnalysator; property bytesPerSample: longint read _bytesPerSample write wBytesPerSample; - property tsiz: longint - read _tsiz + property tSiz: longint + read _tSiz write wTSiz; - property xsteps: longint - read _xsteps + property xSteps: longint + read _xSteps write wXSteps; property Kodierung: tKodierung read _Kodierung write wKodierung; - property params: tExtrainfos + property params: tExtraInfos read _params write wParams; - function GenauigkeitFromStr(s: string): boolean; - function Fehlerbehebungsprogramm: string; - function Fehlerbehebungsparameter: string; + function genauigkeitFromStr(s: string): boolean; + function fehlerBehebungsProgramm: string; + function fehlerBehebungsParameter: string; constructor create; destructor destroy; override; end; @@ -194,10 +194,10 @@ type pTBeschriftungen = ^tBeschriftungen; tLage = (lLinks,lOben,lRechts,lUnten); tFenster = class - procedure testeFensterdurchschnitt(schlussBeiWenigInhalt: boolean); + procedure testeFensterDurchschnitt(schlussBeiWenigInhalt: boolean); public aktiv: boolean; - Werte: tExtendedArray; + werte: tExtendedArray; constructor create; destructor destroy; override; procedure berechneWerte(anzWerte: longint; schlussBeiWenigInhalt: boolean = false); virtual; abstract; overload; @@ -223,7 +223,7 @@ type lage: tLage; fontRend: tFontRenderer; bBreite,bHoehe: longint; - Rahmen: boolean; + rahmen: boolean; position: extended; bild: tLLBild; property inhalt: string @@ -246,14 +246,14 @@ type procedure wTransformationen(tr: tTransformation); public maxW,minW,np,beta: extended; - tsiz,xsteps,tsiz_,xsteps_: longint; + tSiz,xSteps,tSiz_,xSteps_: longint; knownValues: tKnownValues; constructor create; destructor destroy; override; - function xstart: extended; - function xstop: extended; - function tstart: extended; - function tstop: extended; + function xStart: extended; + function xStop: extended; + function tStart: extended; + function tStop: extended; procedure refreshKnownValues; property transformationen: tTransformation read _transformationen write wTransformationen; end; @@ -263,10 +263,10 @@ type // selbst nicht zum Instanziieren gedacht private vorgaenger,nachfolger: array of tTransformation; - in_xs_ts,out_xs_ts: tIntPoint; - in_achsen,out_achsen: t2x2Extended; - in_wmia,out_wmia: tExtPoint; - wmiaExplizit: boolean; // wmia wurde explizit gesetzt + inXSTS,outXSTS: tIntPoint; + inAchsen,outAchsen: t2x2Extended; + inWMia,outWMia: tExtPoint; + wmiaExplizit: boolean; // wMia wurde explizit gesetzt _anzZugehoerigerDaten: longint; procedure testeAuszerhalb(const p: tExtPoint); @@ -277,27 +277,27 @@ type procedure aktualisiereWmia; virtual; function transformiereKoordinatenEinzeln(const p: tExtPoint): tExtPoint; virtual; - // wie ändert sich die Position eines Punktes (Paradebeispiel: bei Spiegelung: x -> xsteps-1-x) + // wie ändert sich die Position eines Punktes (Paradebeispiel: bei Spiegelung: x -> xSteps-1-x) // ist für p veranwortlich? function transformiereWertEinzeln(const x: extended): extended; virtual; // wie ändert sich ein Wert - function rXstart: extended; - procedure wXstart(x: extended); - function rXstop: extended; - procedure wXstop(x: extended); - function rTstart: extended; - procedure wTstart(t: extended); - function rTstop: extended; - procedure wTstop(t: extended); - function rWmin: extended; - procedure wWmin(w: extended); - function rWmax: extended; - procedure wWmax(w: extended); - function rXsteps: longint; - procedure wXsteps(x: longint); - function rTsiz: longint; - procedure wTsiz(t: longint); + function rXStart: extended; + procedure wXStart(x: extended); + function rXStop: extended; + procedure wXStop(x: extended); + function rTStart: extended; + procedure wTStart(t: extended); + function rTStop: extended; + procedure wTStop(t: extended); + function rWMin: extended; + procedure wWMin(w: extended); + function rWMax: extended; + procedure wWMax(w: extended); + function rXSteps: longint; + procedure wXSteps(x: longint); + function rTSiz: longint; + procedure wTSiz(t: longint); public constructor create; destructor destroy; override; @@ -314,40 +314,40 @@ type procedure erhoeheZugehoerigkeitsanzahl; procedure verringereZugehoerigkeitsanzahl; - property achsen: t2x2Extended read out_achsen; - // wie lauten xstart,xstop,tstart,tstop? + property achsen: t2x2Extended read outAchsen; + // wie lauten xStart,xStop,tStart,tStop? function transformiereKoordinaten(const p: tExtPoint; const tiefe: longint = -1): tExtPoint; overload; function transformiereKoordinaten(const x,y: longint; const tiefe: longint = -1): tExtPoint; overload; function wertZuPositionAufAchse(const l: tLage; x: extended): extended; virtual; function transformiereWert(const x: extended; const tiefe: longint = -1): extended; - property xsteps_tsiz: tIntPoint read out_xs_ts; - property wmia: tExtPoint read out_wmia; + property xStepsTSiz: tIntPoint read outXSTS; + property wMia: tExtPoint read outWMia; function dumpParams: string; virtual; overload; function dumpParams(tiefe: longint): string; overload; - property xstart: extended - read rXstart - write wXstart; - property xstop: extended - read rXstop - write wXstop; - property tstart: extended - read rTstart - write wTstart; - property tstop: extended - read rTstop - write wTstop; - property wmin: extended - read rWmin - write wWmin; - property wmax: extended - read rWmax - write wWmax; - property xsteps: longint - read rXsteps - write wXsteps; - property tsiz: longint - read rTsiz - write wTsiz; + property xStart: extended + read rXStart + write wXStart; + property xStop: extended + read rXStop + write wXStop; + property tStart: extended + read rTStart + write wTStart; + property tStop: extended + read rTStop + write wTStop; + property wMin: extended + read rWMin + write wWMin; + property wMax: extended + read rWMax + write wWMax; + property xSteps: longint + read rXSteps + write wXSteps; + property tSiz: longint + read rTSiz + write wTSiz; end; tKeineTransformation = class (tTransformation) // der Beginn einer Transformationskette, z.B. das Laden von Daten @@ -388,7 +388,7 @@ type tKonkreteKoordinatenTransformation = class (tKoordinatenTransformation) private // eine konkrete Verzerrung der Koordinaten (linearer + logarithmischer + exponentieller Anteil) - function findeLineareParameter(syntaxtest: boolean; auszenSkala: char; s: string; xscale,yscale: extended; var off,xl,yl: extended; ueberschreiben: boolean; etf: tExprToFloat): boolean; + function findeLineareParameter(syntaxtest: boolean; auszenSkala: char; s: string; xScale,yScale: extended; var off,xl,yl: extended; ueberschreiben: boolean; etf: tExprToFloat): boolean; public lnInt, // Faktoren in den ln-Argumenten expExp, // Exponenten der Exponentialfunktionen @@ -399,7 +399,7 @@ type expFak: tExtPoint; // Vorfaktoren der Exponentialfunktionen constructor create; overload; function transformiereKoordinatenEinzeln(const p: tExtPoint): tExtPoint; override; overload; - function initAbbildung(syntaxtest: boolean; s: string; xscale,yscale: extended; etf: tExprToFloat): boolean; + function initAbbildung(syntaxtest: boolean; s: string; xScale,yScale: extended; etf: tExprToFloat): boolean; function zielausdehnung: t2x2Longint; procedure aktualisiereXsTs; override; // keine Änderung der Achsenbegrenzungen, der Werte(skalierung) @@ -419,7 +419,7 @@ type tKoordinatenAusschnitt = class (tKoordinatenTransformation) gr: t2x2Longint; constructor create; overload; - constructor create(vorg: tTransformation; xmin,xmax,tmin,tmax: longint); overload; + constructor create(vorg: tTransformation; xMin,xMax,tMin,tMax: longint); overload; procedure aktualisiereXsTs; override; procedure aktualisiereAchsen; override; function transformiereKoordinatenEinzeln(const p: tExtPoint): tExtPoint; override; overload; @@ -506,7 +506,7 @@ type function dumpParams: string; override; end; -function liesTWerteTransformationen(st: boolean; s: string; f: tMyStringlist; etf: tExprToFloat; var tr: tTransformation): boolean; +function liesTWerteTransformationen(sT: boolean; s: string; f: tMyStringList; etf: tExprToFloat; var tr: tTransformation): boolean; procedure zerstoereTransformationWennObsolet(tr: tTransformation); function dreheLagePositiv(l: tLage): tLage; inline; @@ -517,78 +517,78 @@ implementation constructor tGenerischeInputDateiInfo.create(Vorlage: tGenerischeInputDateiInfo); begin inherited create; - fillchar(Name,sizeof(Name),#0); - Name:=Vorlage.Name; - fillchar(Fehlerbehebungskommando,sizeof(Fehlerbehebungskommando),#0); - Fehlerbehebungskommando:=Vorlage.Fehlerbehebungskommando; + fillchar(name,sizeOf(name),#0); + name:=Vorlage.name; + fillchar(fehlerBehebungsKommando,sizeOf(fehlerBehebungsKommando),#0); + fehlerBehebungsKommando:=Vorlage.fehlerBehebungsKommando; gamma:=Vorlage.gamma; groeszenFaktor:=Vorlage.groeszenFaktor; - Genauigkeit:=Vorlage.Genauigkeit; - tsiz:=Vorlage.tsiz; - xsteps:=Vorlage.xsteps; - tstart:=Vorlage.tstart; - tstop:=Vorlage.tstop; - xstart:=Vorlage.xstart; - xstop:=Vorlage.xstop; + genauigkeit:=Vorlage.genauigkeit; + tSiz:=Vorlage.tSiz; + xSteps:=Vorlage.xSteps; + tStart:=Vorlage.tStart; + tStop:=Vorlage.tStop; + xStart:=Vorlage.xStart; + xStop:=Vorlage.xStop; params:=Vorlage.params; - t0abs:=Vorlage.t0abs; + t0Abs:=Vorlage.t0Abs; end; constructor tGenerischeInputDateiInfo.create; begin inherited create; - fillchar(Name,sizeof(Name),#0); - Name:=''; - fillchar(Fehlerbehebungskommando,sizeof(Fehlerbehebungskommando),#0); - Fehlerbehebungskommando:=''; + fillchar(name,sizeOf(name),#0); + name:=''; + fillchar(fehlerBehebungsKommando,sizeOf(fehlerBehebungsKommando),#0); + fehlerBehebungsKommando:=''; gamma:=1; groeszenFaktor:=1; - Genauigkeit:=gSingle; - tsiz:=-1; - t0abs:=-1; - xsteps:=-1; - tstart:=-myInf; - tstop:=myInf; - xstart:=-myInf; - xstop:=myInf; + genauigkeit:=gSingle; + tSiz:=-1; + t0Abs:=-1; + xSteps:=-1; + tStart:=-myInf; + tStop:=myInf; + xStart:=-myInf; + xStop:=myInf; params:=nil; end; destructor tGenerischeInputDateiInfo.destroy; begin - Name:=''; - Fehlerbehebungskommando:=''; + name:=''; + fehlerBehebungsKommando:=''; inherited destroy; end; -function tGenerischeInputDateiInfo.xmin: longint; +function tGenerischeInputDateiInfo.xMin: longint; begin result:=0; - if assigned(params) and (params.xsteps>1) and (xstart > params.xstart + result/(params.xsteps-1)*(params.xstop-params.xstart)) then - result:=min(xsteps-1,round((xstart-params.xstart)/(params.xstop-params.xstart)/(params.xsteps-1))); + if assigned(params) and (params.xSteps>1) and (xStart > params.xStart + result/(params.xSteps-1)*(params.xStop-params.xStart)) then + result:=min(xSteps-1,round((xStart-params.xStart)/(params.xStop-params.xStart)/(params.xSteps-1))); end; -function tGenerischeInputDateiInfo.xmax: longint; +function tGenerischeInputDateiInfo.xMax: longint; begin - result:=xsteps-1; - if assigned(params) and (params.xsteps>1) and (xstop < params.xstart + result/(params.xsteps-1)*(params.xstop-params.xstart)) then - result:=max(0,round((xstop-params.xstart)/(params.xstop-params.xstart)/(params.xsteps-1))); + result:=xSteps-1; + if assigned(params) and (params.xSteps>1) and (xStop < params.xStart + result/(params.xSteps-1)*(params.xStop-params.xStart)) then + result:=max(0,round((xStop-params.xStart)/(params.xStop-params.xStart)/(params.xSteps-1))); end; -function tGenerischeInputDateiInfo.tmin: longint; +function tGenerischeInputDateiInfo.tMin: longint; begin - result:=t0abs; - if assigned(params) and (params.tsiz>1) and (tstart > params.tstart + result/(params.tsiz-1)*(params.tstop-params.tstart)) then - result:=round((tstart-params.tstart)/(params.tstop-params.tstart)/(params.tsiz-1)); - result:=min(tsiz-1,max(0,result-t0abs)); + result:=t0Abs; + if assigned(params) and (params.tSiz>1) and (tStart > params.tStart + result/(params.tSiz-1)*(params.tStop-params.tStart)) then + result:=round((tStart-params.tStart)/(params.tStop-params.tStart)/(params.tSiz-1)); + result:=min(tSiz-1,max(0,result-t0Abs)); end; -function tGenerischeInputDateiInfo.tmax: longint; +function tGenerischeInputDateiInfo.tMax: longint; begin - result:=t0abs+tsiz-1; - if assigned(params) and (params.tsiz>1) and (tstop < params.tstart + result/(params.tsiz-1)*(params.tstop-params.tstart)) then - result:=round((tstop-params.tstart)/(params.tstop-params.tstart)/(params.tsiz-1)); - result:=min(tsiz-1,max(0,result-t0abs)); + result:=t0Abs+tSiz-1; + if assigned(params) and (params.tSiz>1) and (tStop < params.tStart + result/(params.tSiz-1)*(params.tStop-params.tStart)) then + result:=round((tStop-params.tStart)/(params.tStop-params.tStart)/(params.tSiz-1)); + result:=min(tSiz-1,max(0,result-t0Abs)); end; // tPhaseSpaceInputDateiInfo **************************************************** @@ -631,20 +631,20 @@ constructor tTraceInputDateiInfo.create(Vorlage: tGenerischeInputDateiInfo); begin inherited create(Vorlage); if Vorlage is tTraceInputDateiInfo then begin - Spurnummer:=(Vorlage as tTraceInputDateiInfo).Spurnummer; - FeldNummer:=(Vorlage as tTraceInputDateiInfo).FeldNummer; + spurNummer:=(Vorlage as tTraceInputDateiInfo).spurNummer; + feldNummer:=(Vorlage as tTraceInputDateiInfo).feldNummer; end else begin - Spurnummer:=0; - FeldNummer:=0; + spurNummer:=0; + feldNummer:=0; end; end; constructor tTraceInputDateiInfo.create; begin inherited create; - Spurnummer:=0; - FeldNummer:=0; + spurNummer:=0; + feldNummer:=0; end; destructor tTraceInputDateiInfo.destroy; @@ -658,15 +658,15 @@ constructor tSergeyInputDateiInfo.create(Vorlage: tGenerischeInputDateiInfo); begin inherited create(Vorlage); if Vorlage is tSergeyInputDateiInfo then - FeldNummer:=(Vorlage as tSergeyInputDateiInfo).FeldNummer + feldNummer:=(Vorlage as tSergeyInputDateiInfo).feldNummer else - FeldNummer:=0; + feldNummer:=0; end; constructor tSergeyInputDateiInfo.create; begin inherited create; - FeldNummer:=0; + feldNummer:=0; end; destructor tSergeyInputDateiInfo.destroy; @@ -679,14 +679,14 @@ end; constructor tPipeInputDateiInfo.create(Vorlage: tGenerischeInputDateiInfo); begin inherited create(Vorlage); - fillchar(Analysator,sizeof(Analysator),#0); + fillchar(analysator,sizeOf(analysator),#0); if Vorlage is tPipeInputDateiInfo then begin - Analysator:=(Vorlage as tPipeInputDateiInfo).Analysator; + analysator:=(Vorlage as tPipeInputDateiInfo).analysator; bytesPerSample:=(Vorlage as tPipeInputDateiInfo).bytesPerSample; Kodierung:=(Vorlage as tPipeInputDateiInfo).Kodierung; end else begin - Analysator:='/usr/bin/soxi -'; + analysator:='/usr/bin/soxi -'; bytesPerSample:=-1; Kodierung:=kUnbekannt; end; @@ -695,38 +695,38 @@ end; constructor tPipeInputDateiInfo.create; begin inherited create; - fillchar(Analysator,sizeof(Analysator),#0); - Analysator:='/usr/bin/soxi -'; + fillchar(analysator,sizeOf(analysator),#0); + analysator:='/usr/bin/soxi -'; bytesPerSample:=-1; Kodierung:=kUnbekannt; end; destructor tPipeInputDateiInfo.destroy; begin - Analysator:=''; + analysator:=''; inherited destroy; end; -function tPipeInputDateiInfo.Executable: string; +function tPipeInputDateiInfo.executable: string; begin - result:=leftStr(Name,pos(' ',Name+' ')-1); + result:=leftStr(name,pos(' ',name+' ')-1); end; -function tPipeInputDateiInfo.ParametersText: string; +function tPipeInputDateiInfo.parametersText: string; begin - result:=copy(Name,pos(' ',Name+' ')+1,length(Name)); + result:=copy(name,pos(' ',name+' ')+1,length(name)); while pos(' ',result)>0 do result[pos(' ',result)]:=#13; end; -function tPipeInputDateiInfo.AnalysatorExecutable: string; +function tPipeInputDateiInfo.analysatorExecutable: string; begin - result:=leftStr(Analysator,pos(' ',Analysator+' ')-1); + result:=leftStr(analysator,pos(' ',analysator+' ')-1); end; -function tPipeInputDateiInfo.AnalysatorParametersText: string; +function tPipeInputDateiInfo.analysatorParametersText: string; begin - result:=copy(Analysator,pos(' ',Analysator+' ')+1,length(Analysator)); + result:=copy(analysator,pos(' ',analysator+' ')+1,length(analysator)); while pos(' ',result)>0 do result[pos(' ',result)]:=#13; end; @@ -827,234 +827,234 @@ end; constructor tInputDateiInfoVorlagen.create; begin inherited create; - PhaseSpaceVorlage:=tPhaseSpaceInputDateiInfo.create; - SpaceTimeVorlage:=tSpaceTimeInputDateiInfo.create; - TraceVorlage:=tTraceInputDateiInfo.create; - SergeyVorlage:=tSergeyInputDateiInfo.create; - PipeVorlage:=tPipeInputDateiInfo.create; - AndorVorlage:=tAndorInputDateiInfo.create; - fillchar(_Name,sizeof(_Name),#0); - Name:=SpaceTimeVorlage.Name; - fillchar(_Fehlerbehebungskommando,sizeof(_Fehlerbehebungskommando),#0); - Fehlerbehebungskommando:=SpaceTimeVorlage.Fehlerbehebungskommando; - Gamma:=SpaceTimeVorlage.Gamma; - groeszenFaktor:=SpaceTimeVorlage.groeszenFaktor; - Genauigkeit:=SpaceTimeVorlage.Genauigkeit; - _tsiz:=SpaceTimeVorlage.tsiz; - _xsteps:=SpaceTimeVorlage.xsteps; - SpurNummer:=TraceVorlage.SpurNummer; - FeldNummer:=TraceVorlage.FeldNummer; - fillchar(_Analysator,sizeof(_Analysator),#0); - Analysator:=PipeVorlage.Analysator; - _bytesPerSample:=PipeVorlage.bytesPerSample; - _Kodierung:=PipeVorlage.Kodierung; - _tstart:=SpaceTimeVorlage.tstart; - _tstop:=SpaceTimeVorlage.tstop; - _xstart:=SpaceTimeVorlage.xstart; - _xstop:=SpaceTimeVorlage.xstop; - _t0abs:=SpaceTimeVorlage.t0abs; + phaseSpaceVorlage:=tPhaseSpaceInputDateiInfo.create; + spaceTimeVorlage:=tSpaceTimeInputDateiInfo.create; + traceVorlage:=tTraceInputDateiInfo.create; + sergeyVorlage:=tSergeyInputDateiInfo.create; + pipeVorlage:=tPipeInputDateiInfo.create; + andorVorlage:=tAndorInputDateiInfo.create; + fillchar(_name,sizeOf(_name),#0); + name:=spaceTimeVorlage.name; + fillchar(_fehlerBehebungsKommando,sizeOf(_fehlerBehebungsKommando),#0); + fehlerBehebungsKommando:=spaceTimeVorlage.fehlerBehebungsKommando; + gamma:=spaceTimeVorlage.gamma; + groeszenFaktor:=spaceTimeVorlage.groeszenFaktor; + genauigkeit:=spaceTimeVorlage.genauigkeit; + _tSiz:=spaceTimeVorlage.tSiz; + _xSteps:=spaceTimeVorlage.xSteps; + spurNummer:=traceVorlage.spurNummer; + feldNummer:=traceVorlage.feldNummer; + fillchar(_analysator,sizeOf(_analysator),#0); + analysator:=pipeVorlage.analysator; + _bytesPerSample:=pipeVorlage.bytesPerSample; + _Kodierung:=pipeVorlage.Kodierung; + _tStart:=spaceTimeVorlage.tStart; + _tStop:=spaceTimeVorlage.tStop; + _xStart:=spaceTimeVorlage.xStart; + _xStop:=spaceTimeVorlage.xStop; + _t0abs:=spaceTimeVorlage.t0Abs; end; destructor tInputDateiInfoVorlagen.destroy; begin - PhaseSpaceVorlage.free; - SpaceTimeVorlage.free; - TraceVorlage.free; - SergeyVorlage.free; - PipeVorlage.free; - AndorVorlage.free; - _Name:=''; - _Fehlerbehebungskommando:=''; - _Analysator:=''; + phaseSpaceVorlage.free; + spaceTimeVorlage.free; + traceVorlage.free; + sergeyVorlage.free; + pipeVorlage.free; + andorVorlage.free; + _name:=''; + _fehlerBehebungsKommando:=''; + _analysator:=''; inherited destroy; end; procedure tInputDateiInfoVorlagen.wFehlerbehebungskommando(f: string); begin - _Fehlerbehebungskommando:=f; - PhaseSpaceVorlage.Fehlerbehebungskommando:=f; - SpaceTimeVorlage.Fehlerbehebungskommando:=f; - TraceVorlage.Fehlerbehebungskommando:=f; - SergeyVorlage.Fehlerbehebungskommando:=f; - PipeVorlage.Fehlerbehebungskommando:=f; - AndorVorlage.Fehlerbehebungskommando:=f; + _fehlerBehebungsKommando:=f; + phaseSpaceVorlage.fehlerBehebungsKommando:=f; + spaceTimeVorlage.fehlerBehebungsKommando:=f; + traceVorlage.fehlerBehebungsKommando:=f; + sergeyVorlage.fehlerBehebungsKommando:=f; + pipeVorlage.fehlerBehebungsKommando:=f; + andorVorlage.fehlerBehebungsKommando:=f; end; procedure tInputDateiInfoVorlagen.wName(n: string); begin - _Name:=n; - PhaseSpaceVorlage.Name:=n; - SpaceTimeVorlage.Name:=n; - TraceVorlage.Name:=n; - SergeyVorlage.Name:=n; - PipeVorlage.Name:=n; - AndorVorlage.Name:=n; + _name:=n; + phaseSpaceVorlage.name:=n; + spaceTimeVorlage.name:=n; + traceVorlage.name:=n; + sergeyVorlage.name:=n; + pipeVorlage.name:=n; + andorVorlage.name:=n; end; procedure tInputDateiInfoVorlagen.wGamma(g: extended); begin - _Gamma:=g; - PhaseSpaceVorlage.Gamma:=g; - SpaceTimeVorlage.Gamma:=g; - TraceVorlage.Gamma:=g; - SergeyVorlage.Gamma:=g; - PipeVorlage.Gamma:=g; + _gamma:=g; + phaseSpaceVorlage.gamma:=g; + spaceTimeVorlage.gamma:=g; + traceVorlage.gamma:=g; + sergeyVorlage.gamma:=g; + pipeVorlage.gamma:=g; end; procedure tInputDateiInfoVorlagen.wTStart(t: extended); begin - _tstart:=t; - PhaseSpaceVorlage.tstart:=t; - SpaceTimeVorlage.tstart:=t; - TraceVorlage.tstart:=t; - SergeyVorlage.tstart:=t; - PipeVorlage.tstart:=t; - AndorVorlage.tstart:=t; + _tStart:=t; + phaseSpaceVorlage.tStart:=t; + spaceTimeVorlage.tStart:=t; + traceVorlage.tStart:=t; + sergeyVorlage.tStart:=t; + pipeVorlage.tStart:=t; + andorVorlage.tStart:=t; end; procedure tInputDateiInfoVorlagen.wTStop(t: extended); begin - _tstop:=t; - PhaseSpaceVorlage.tstop:=t; - SpaceTimeVorlage.tstop:=t; - TraceVorlage.tstop:=t; - SergeyVorlage.tstop:=t; - PipeVorlage.tstop:=t; - AndorVorlage.tstop:=t; + _tStop:=t; + phaseSpaceVorlage.tStop:=t; + spaceTimeVorlage.tStop:=t; + traceVorlage.tStop:=t; + sergeyVorlage.tStop:=t; + pipeVorlage.tStop:=t; + andorVorlage.tStop:=t; end; procedure tInputDateiInfoVorlagen.wXStart(x: extended); begin - _xstart:=x; - PhaseSpaceVorlage.xstart:=x; - SpaceTimeVorlage.xstart:=x; - TraceVorlage.xstart:=x; - SergeyVorlage.xstart:=x; - PipeVorlage.xstart:=x; - AndorVorlage.xstart:=x; + _xStart:=x; + phaseSpaceVorlage.xStart:=x; + spaceTimeVorlage.xStart:=x; + traceVorlage.xStart:=x; + sergeyVorlage.xStart:=x; + pipeVorlage.xStart:=x; + andorVorlage.xStart:=x; end; procedure tInputDateiInfoVorlagen.wXStop(x: extended); begin - _xstop:=x; - PhaseSpaceVorlage.xstop:=x; - SpaceTimeVorlage.xstop:=x; - TraceVorlage.xstop:=x; - SergeyVorlage.xstop:=x; - PipeVorlage.xstop:=x; - AndorVorlage.xstop:=x; + _xStop:=x; + phaseSpaceVorlage.xStop:=x; + spaceTimeVorlage.xStop:=x; + traceVorlage.xStop:=x; + sergeyVorlage.xStop:=x; + pipeVorlage.xStop:=x; + andorVorlage.xStop:=x; end; procedure tInputDateiInfoVorlagen.wT0Abs(t: longint); begin _t0abs:=t; - PhaseSpaceVorlage.t0abs:=t; - SpaceTimeVorlage.t0abs:=t; - TraceVorlage.t0abs:=t; - SergeyVorlage.t0abs:=t; - PipeVorlage.t0abs:=t; - AndorVorlage.t0abs:=t; + phaseSpaceVorlage.t0Abs:=t; + spaceTimeVorlage.t0Abs:=t; + traceVorlage.t0Abs:=t; + sergeyVorlage.t0Abs:=t; + pipeVorlage.t0Abs:=t; + andorVorlage.t0Abs:=t; end; procedure tInputDateiInfoVorlagen.wGroeszenFaktor(g: extended); begin _groeszenFaktor:=g; - PhaseSpaceVorlage.groeszenFaktor:=g; - SpaceTimeVorlage.groeszenFaktor:=g; - TraceVorlage.groeszenFaktor:=g; - SergeyVorlage.groeszenFaktor:=g; - PipeVorlage.groeszenFaktor:=g; + phaseSpaceVorlage.groeszenFaktor:=g; + spaceTimeVorlage.groeszenFaktor:=g; + traceVorlage.groeszenFaktor:=g; + sergeyVorlage.groeszenFaktor:=g; + pipeVorlage.groeszenFaktor:=g; end; procedure tInputDateiInfoVorlagen.wGenauigkeit(g: tGenauigkeit); begin - _Genauigkeit:=g; - PhaseSpaceVorlage.Genauigkeit:=g; - SpaceTimeVorlage.Genauigkeit:=g; - TraceVorlage.Genauigkeit:=g; - SergeyVorlage.Genauigkeit:=g; - PipeVorlage.Genauigkeit:=g; - AndorVorlage.Genauigkeit:=g; + _genauigkeit:=g; + phaseSpaceVorlage.genauigkeit:=g; + spaceTimeVorlage.genauigkeit:=g; + traceVorlage.genauigkeit:=g; + sergeyVorlage.genauigkeit:=g; + pipeVorlage.genauigkeit:=g; + andorVorlage.genauigkeit:=g; end; procedure tInputDateiInfoVorlagen.wTSiz(t: longint); begin - _tsiz:=t; - PhaseSpaceVorlage.tsiz:=t; - SpaceTimeVorlage.tsiz:=t; - TraceVorlage.tsiz:=t; - SergeyVorlage.tsiz:=t; - PipeVorlage.tsiz:=t; - AndorVorlage.tsiz:=t; + _tSiz:=t; + phaseSpaceVorlage.tSiz:=t; + spaceTimeVorlage.tSiz:=t; + traceVorlage.tSiz:=t; + sergeyVorlage.tSiz:=t; + pipeVorlage.tSiz:=t; + andorVorlage.tSiz:=t; end; procedure tInputDateiInfoVorlagen.wXSteps(x: longint); begin - _xsteps:=x; - PhaseSpaceVorlage.xsteps:=x; - SpaceTimeVorlage.xsteps:=x; - TraceVorlage.xsteps:=x; - SergeyVorlage.xsteps:=x; - PipeVorlage.xsteps:=x; - AndorVorlage.xsteps:=x; + _xSteps:=x; + phaseSpaceVorlage.xSteps:=x; + spaceTimeVorlage.xSteps:=x; + traceVorlage.xSteps:=x; + sergeyVorlage.xSteps:=x; + pipeVorlage.xSteps:=x; + andorVorlage.xSteps:=x; end; procedure tInputDateiInfoVorlagen.wSpurNummer(s: longint); begin - _SpurNummer:=s; - TraceVorlage.SpurNummer:=s; + _spurNummer:=s; + traceVorlage.spurNummer:=s; end; procedure tInputDateiInfoVorlagen.wFeldNummer(f: longint); begin - _FeldNummer:=f; - TraceVorlage.FeldNummer:=f; - SergeyVorlage.FeldNummer:=f; + _feldNummer:=f; + traceVorlage.feldNummer:=f; + sergeyVorlage.feldNummer:=f; end; procedure tInputDateiInfoVorlagen.wAnalysator(a: string); begin - _Analysator:=a; - PipeVorlage.Analysator:=a; + _analysator:=a; + pipeVorlage.analysator:=a; end; procedure tInputDateiInfoVorlagen.wBytesPerSample(b: longint); begin _bytesPerSample:=b; - PipeVorlage.bytesPerSample:=b; + pipeVorlage.bytesPerSample:=b; end; procedure tInputDateiInfoVorlagen.wKodierung(k: tKodierung); begin _Kodierung:=k; - PipeVorlage.Kodierung:=k; + pipeVorlage.Kodierung:=k; end; -function tInputDateiInfoVorlagen.GenauigkeitFromStr(s: string): boolean; +function tInputDateiInfoVorlagen.genauigkeitFromStr(s: string): boolean; begin - result:=strToGen(_Genauigkeit,s); - Genauigkeit:=_Genauigkeit; + result:=strToGen(_genauigkeit,s); + genauigkeit:=_genauigkeit; end; -function tInputDateiInfoVorlagen.Fehlerbehebungsprogramm: string; +function tInputDateiInfoVorlagen.fehlerBehebungsProgramm: string; begin - result:=copy(Fehlerbehebungskommando,1,pos(' ',Fehlerbehebungskommando+' ')-1); + result:=copy(fehlerBehebungsKommando,1,pos(' ',fehlerBehebungsKommando+' ')-1); end; -function tInputDateiInfoVorlagen.Fehlerbehebungsparameter: string; +function tInputDateiInfoVorlagen.fehlerBehebungsParameter: string; begin - result:=copy(Fehlerbehebungskommando,pos(' ',Fehlerbehebungskommando+' ')+1,length(Fehlerbehebungskommando)); + result:=copy(fehlerBehebungsKommando,pos(' ',fehlerBehebungsKommando+' ')+1,length(fehlerBehebungsKommando)); end; -procedure tInputDateiInfoVorlagen.wParams(p: tExtrainfos); +procedure tInputDateiInfoVorlagen.wParams(p: tExtraInfos); begin _params:=p; - PhaseSpaceVorlage.params:=p; - SpaceTimeVorlage.params:=p; - TraceVorlage.params:=p; - SergeyVorlage.params:=p; - PipeVorlage.params:=p; - AndorVorlage.params:=p; + phaseSpaceVorlage.params:=p; + spaceTimeVorlage.params:=p; + traceVorlage.params:=p; + sergeyVorlage.params:=p; + pipeVorlage.params:=p; + andorVorlage.params:=p; end; // tFenster ******************************************************************** @@ -1062,17 +1062,17 @@ end; constructor tFenster.create; begin inherited create; - setlength(werte,0); + setLength(werte,0); aktiv:=false; end; destructor tFenster.destroy; begin - setlength(werte,0); + setLength(werte,0); inherited destroy; end; -procedure tFenster.testeFensterdurchschnitt(schlussBeiWenigInhalt: boolean); +procedure tFenster.testeFensterDurchschnitt(schlussBeiWenigInhalt: boolean); var fenAvg: extended; i: longint; @@ -1083,15 +1083,15 @@ begin fenAvg:=fenAvg/length(werte); if fenAvg<0.5 then begin if schlussBeiWenigInhalt then - fehler('Sehr geringer Fensterdurchschnitt: '+floattostr(fenAvg)+' ('+dumpParams+')!') + fehler('Sehr geringer Fensterdurchschnitt: '+floatToStr(fenAvg)+' ('+dumpParams+')!') else - gibAus('Sehr geringer Fensterdurchschnitt: '+floattostr(fenAvg)+' ('+dumpParams+')! Ich mache aber trotzdem weiter.',3); + gibAus('Sehr geringer Fensterdurchschnitt: '+floatToStr(fenAvg)+' ('+dumpParams+')! Ich mache aber trotzdem weiter.',3); end; end; function tFenster.dumpParams: string; begin - result:=inttostr(length(werte))+' Werte '; + result:=intToStr(length(werte))+' Werte '; if not aktiv then result:=result+'in'; result:=result+'aktiv'; @@ -1102,15 +1102,15 @@ end; constructor tSin2Fenster.create; begin inherited create; - Breite:=0; - Rand:=0; + breite:=0; + rand:=0; end; procedure tSin2Fenster.berechneWerte(anzWerte: longint; schlussBeiWenigInhalt: boolean); var i: integer; begin - setlength(werte,anzWerte); + setLength(werte,anzWerte); for i:=0 to length(werte)-1 do begin if 2*i < anzWerte - breite - rand then begin werte[i]:=0; @@ -1136,8 +1136,8 @@ end; function tSin2Fenster.dumpParams: string; begin result:= - 'Breite: '+inttostr(breite)+', '+ - 'Rand: '+inttostr(rand)+', '+ + 'Breite: '+intToStr(breite)+', '+ + 'Rand: '+intToStr(rand)+', '+ inherited dumpParams; end; @@ -1146,14 +1146,14 @@ end; constructor tGauszFenster.create; begin inherited create; - Breite:=0; + breite:=0; end; procedure tGauszFenster.berechneWerte(anzWerte: longint; schlussBeiWenigInhalt: boolean = false); var i: integer; begin - setlength(werte,anzWerte); + setLength(werte,anzWerte); for i:=0 to length(werte)-1 do werte[i]:=power(2,-sqr(2*(i-anzWerte/2)/breite)); testeFensterDurchschnitt(schlussBeiWenigInhalt); @@ -1163,7 +1163,7 @@ function tGauszFenster.dumpParams: string; begin result:= 'Breite: '+floattostrtrunc(breite,2,true)+', '+ - 'Rand: '+inttostr(rand)+', '+ + 'Rand: '+intToStr(rand)+', '+ inherited dumpParams; end; @@ -1190,8 +1190,8 @@ function tBeschriftung.links: longint; begin case lage of lOben,lUnten: result:=strich-(bild.breite div 2); - lLinks: result:=-bild.breite-4-Byte(Rahmen); - lRechts: result:=bbreite+3+Byte(Rahmen); + lLinks: result:=-bild.breite-4-byte(rahmen); + lRechts: result:=bBreite+3+byte(rahmen); end{of Case}; end; @@ -1199,8 +1199,8 @@ function tBeschriftung.oben: longint; begin case lage of lLinks,lRechts: result:=strich-(bild.hoehe div 2); - lUnten: result:=-bild.hoehe-4-Byte(Rahmen); - lOben: result:=bHoehe+3+Byte(Rahmen); + lUnten: result:=-bild.hoehe-4-byte(rahmen); + lOben: result:=bHoehe+3+byte(rahmen); end{of Case}; end; @@ -1231,10 +1231,10 @@ begin transformationen.erhoeheZugehoerigkeitsanzahl; np:=1; beta:=0; - tsiz:=0; - xsteps:=0; - tsiz_:=0; - xsteps_:=0; + tSiz:=0; + xSteps:=0; + tSiz_:=0; + xSteps_:=0; knownValues:=tKnownValues.create; end; @@ -1258,36 +1258,36 @@ begin _transformationen.erhoeheZugehoerigkeitsanzahl; end; -function tExtraInfos.xstart: extended; +function tExtraInfos.xStart: extended; begin - result:=transformationen.xstart; + result:=transformationen.xStart; end; -function tExtraInfos.xstop: extended; +function tExtraInfos.xStop: extended; begin - result:=transformationen.xstop; + result:=transformationen.xStop; end; -function tExtraInfos.tstart: extended; +function tExtraInfos.tStart: extended; begin - result:=transformationen.tstart; + result:=transformationen.tStart; end; -function tExtraInfos.tstop: extended; +function tExtraInfos.tStop: extended; begin - result:=transformationen.tstop; + result:=transformationen.tStop; end; procedure tExtraInfos.refreshKnownValues; begin knownValues.add(knownValue('np',np)); - knownValues.add(knownValue('maxw',maxW)); - knownValues.add(knownValue('minw',minW)); + knownValues.add(knownValue('maxW',maxW)); + knownValues.add(knownValue('minW',minW)); knownValues.add(knownValue('beta',beta)); - knownValues.add(knownValue('xstart',xstart)); - knownValues.add(knownValue('xstop',xstop)); - knownValues.add(knownValue('tstart',tstart)); - knownValues.add(knownValue('tstop',tstop)); + knownValues.add(knownValue('xStart',xStart)); + knownValues.add(knownValue('xStop',xStop)); + knownValues.add(knownValue('tStart',tStart)); + knownValues.add(knownValue('tStop',tStop)); end; // tFontRenderer *************************************************************** @@ -1296,7 +1296,7 @@ constructor tFontRenderer.create(schriftgroesze: longint); begin inherited create; - gibAus('FontRenderer erzeugen (Schriftgröße '+inttostr(schriftgroesze)+') ...',1); + gibAus('FontRenderer erzeugen (Schriftgröße '+intToStr(schriftgroesze)+') ...',1); New(agg, Construct); agg^.font('/usr/share/fonts/TTF/DejaVuSans.ttf',schriftgroesze,false,false,RasterFontCache,0.0); @@ -1313,14 +1313,14 @@ end; function tFontRenderer.rendere(s: string): tLLBild; var buf: array of byte; - ho,br,ymax,ymin,xmax,xmin,i,j: longint; + ho,br,ymax,ymin,xMax,xMin,i,j: longint; b: boolean; begin while pos('.',s)>0 do s[pos('.',s)]:=','; br:=4*round(ceil(agg^.textWidth(char_ptr(s)))); ho:=4*round(ceil(agg^.fontHeight)); - setlength(buf,ho*br*4); + setLength(buf,ho*br*4); agg^.attach(@(buf[0]), br, ho, br * 4); agg^.clearAll(0, 0, 0); agg^.lineColor(0, 0, 0, 255); @@ -1359,28 +1359,28 @@ begin halt(1); end; - xmax:=br; + xMax:=br; b:=true; - while b and (xmax>0) do begin - dec(xmax); + while b and (xMax>0) do begin + dec(xMax); for i:=ymin to ymax do - if (buf[4*(xmax+br*i)+0]<>$ff) or - (buf[4*(xmax+br*i)+1]<>$ff) or - (buf[4*(xmax+br*i)+2]<>$ff) then + if (buf[4*(xMax+br*i)+0]<>$ff) or + (buf[4*(xMax+br*i)+1]<>$ff) or + (buf[4*(xMax+br*i)+2]<>$ff) then b:=false; end; if b then begin gibAus('Leeres Bild!',3); halt(1); end; - xmin:=-1; + xMin:=-1; b:=true; - while b and (xmin<=xmax) do begin - inc(xmin); + while b and (xMin<=xMax) do begin + inc(xMin); for i:=ymin to ymax do - if (buf[4*(xmin+br*i)+0]<>$ff) or - (buf[4*(xmin+br*i)+1]<>$ff) or - (buf[4*(xmin+br*i)+2]<>$ff) then + if (buf[4*(xMin+br*i)+0]<>$ff) or + (buf[4*(xMin+br*i)+1]<>$ff) or + (buf[4*(xMin+br*i)+2]<>$ff) then b:=false; end; if b then begin @@ -1388,20 +1388,20 @@ begin halt(1); end; - dec(xmin); + dec(xMin); dec(ymin); - inc(xmax); + inc(xMax); inc(ymax); - result.breite:=xmax-xmin+1; + result.breite:=xMax-xMin+1; result.hoehe:=ymax-ymin+1; - setlength(result.farben,result.breite*result.hoehe); + setLength(result.farben,result.breite*result.hoehe); for i:=0 to result.breite-1 do for j:=0 to result.hoehe-1 do begin - result.farben[i + j*result.breite].rgbBlue:= byte(buf[4*(i+xmin+br*(j+ymin))+0]); - result.farben[i + j*result.breite].rgbGreen:=byte(buf[4*(i+xmin+br*(j+ymin))+1]); - result.farben[i + j*result.breite].rgbRed:= byte(buf[4*(i+xmin+br*(j+ymin))+2]); + result.farben[i + j*result.breite].rgbBlue:= byte(buf[4*(i+xMin+br*(j+ymin))+0]); + result.farben[i + j*result.breite].rgbGreen:=byte(buf[4*(i+xMin+br*(j+ymin))+1]); + result.farben[i + j*result.breite].rgbRed:= byte(buf[4*(i+xMin+br*(j+ymin))+2]); end; { for i:=0 to 1 do for j:=0 to 1 do begin @@ -1412,7 +1412,7 @@ begin result.farben[i*(result.breite-1) + j*(result.hoehe-1)*result.breite].rgbBlue:= result.farben[i*(result.breite-1) + j*(result.hoehe-1)*result.breite].rgbBlue xor $ff; end; } - setlength(buf,0); + setLength(buf,0); end; // tTransformation ************************************************************* @@ -1433,7 +1433,7 @@ begin vorgaenger[i].loescheNachfolger(self); zerstoereTransformationWennObsolet(vorgaenger[i]); end; - setlength(vorgaenger,0); + setLength(vorgaenger,0); if wirdGebraucht then fehler('Ich ('+className+') werde noch gebraucht (von '+werBrauchtDas+'), da kann ich mich nicht zerstören!'); inherited destroy; @@ -1441,156 +1441,156 @@ end; procedure tTransformation.testeAuszerhalb(const p: tExtPoint); begin - if (p['x']<0) or (p['x']>in_xs_ts['x']-1) or - (p['y']<0) or (p['y']>in_xs_ts['y']-1) then - fehler('Punkt '+tExtPointToStr(p)+' liegt außerhalb des gültigen Eingabebereich (0..'+inttostr(in_xs_ts['x']-1)+' x 0..'+inttostr(in_xs_ts['y']-1)+')!'); + if (p['x']<0) or (p['x']>inXSTS['x']-1) or + (p['y']<0) or (p['y']>inXSTS['y']-1) then + fehler('Punkt '+tExtPointToStr(p)+' liegt außerhalb des gültigen Eingabebereich (0..'+intToStr(inXSTS['x']-1)+' x 0..'+intToStr(inXSTS['y']-1)+')!'); end; procedure tTransformation.holeInfosVonVorgaengern; var i: longint; begin - in_achsen:=vorgaenger[0].achsen; + inAchsen:=vorgaenger[0].achsen; for i:=1 to length(vorgaenger)-1 do - if in_achsen <> vorgaenger[i].achsen then + if inAchsen <> vorgaenger[i].achsen then fehler('Vorgänger haben verschiedene Achsen, was generisch nicht zu verstehen ist!'); - in_xs_ts:=vorgaenger[0].xsteps_tsiz; + inXSTS:=vorgaenger[0].xStepsTSiz; for i:=1 to length(vorgaenger)-1 do - if in_xs_ts <> vorgaenger[i].xsteps_tsiz then - fehler('Vorgänger haben verschiedene xsteps oder tsiz, was generisch nicht zu verstehen ist!'); + if inXSTS <> vorgaenger[i].xStepsTSiz then + fehler('Vorgänger haben verschiedene xSteps oder tSiz, was generisch nicht zu verstehen ist!'); if not wmiaExplizit then begin - in_wmia:=vorgaenger[0].wmia; + inWMia:=vorgaenger[0].wMia; for i:=1 to length(vorgaenger)-1 do - if in_wmia <> vorgaenger[i].wmia then + if inWMia <> vorgaenger[i].wMia then fehler('Vorgänger haben verschiedene wmin oder wmax, was generisch nicht zu verstehen ist!'); end; end; procedure tTransformation.aktualisiereAchsen; // nicht zum direkten Aufrufen begin - out_achsen:=in_achsen; + outAchsen:=inAchsen; end; procedure tTransformation.aktualisiereXsTs; // nicht zum direkten Aufrufen begin - out_xs_ts:=in_xs_ts; + outXSTS:=inXSTS; end; procedure tTransformation.aktualisiereWmia; // nicht zum direkten Aufrufen begin if not wmiaExplizit then - out_wmia:=in_wmia; + outWMia:=inWMia; end; -function tTransformation.rXstart: extended; +function tTransformation.rXStart: extended; begin - result:=out_achsen['x','x']; + result:=outAchsen['x','x']; end; -procedure tTransformation.wXstart(x: extended); +procedure tTransformation.wXStart(x: extended); begin if not (self is tKeineTransformation) then - fehler('Will xstart schreiben, aber bin nicht der Anfang einer Transformationskette!'); - in_achsen['x','x']:=x; + fehler('Will xStart schreiben, aber bin nicht der Anfang einer Transformationskette!'); + inAchsen['x','x']:=x; aktualisiereAlles; end; -function tTransformation.rXstop: extended; +function tTransformation.rXStop: extended; begin - result:=out_Achsen['x','y']; + result:=outAchsen['x','y']; end; -procedure tTransformation.wXstop(x: extended); +procedure tTransformation.wXStop(x: extended); begin if not (self is tKeineTransformation) then - fehler('Will xstop schreiben, aber bin nicht der Anfang einer Transformationskette!'); - in_achsen['x','y']:=x; + fehler('Will xStop schreiben, aber bin nicht der Anfang einer Transformationskette!'); + inAchsen['x','y']:=x; aktualisiereAlles; end; -function tTransformation.rTstart: extended; +function tTransformation.rTStart: extended; begin - result:=out_Achsen['y','x']; + result:=outAchsen['y','x']; end; -procedure tTransformation.wTstart(t: extended); +procedure tTransformation.wTStart(t: extended); begin if not (self is tKeineTransformation) then - fehler('Will tstart schreiben, aber bin nicht der Anfang einer Transformationskette!'); - in_achsen['y','x']:=t; + fehler('Will tStart schreiben, aber bin nicht der Anfang einer Transformationskette!'); + inAchsen['y','x']:=t; aktualisiereAlles; end; -function tTransformation.rTstop: extended; +function tTransformation.rTStop: extended; begin - result:=out_Achsen['y','y']; + result:=outAchsen['y','y']; end; -procedure tTransformation.wTstop(t: extended); +procedure tTransformation.wTStop(t: extended); begin if not (self is tKeineTransformation) then - fehler('Will tstop schreiben, aber bin nicht der Anfang einer Transformationskette!'); - in_achsen['y','y']:=t; + fehler('Will tStop schreiben, aber bin nicht der Anfang einer Transformationskette!'); + inAchsen['y','y']:=t; aktualisiereAlles; end; -function tTransformation.rWmin: extended; +function tTransformation.rWMin: extended; begin - result:=out_wmia['x']; + result:=outWMia['x']; end; -procedure tTransformation.wWmin(w: extended); +procedure tTransformation.wWMin(w: extended); begin if (self is tAgglomeration) then begin - if out_wmia['x']<>w then - fehler('Setzen von wmin für Agglomeration nicht erlaubt ( '+floattostr(w)+' ≠ '+floattostr(out_wmia['x'])+' )!'); + if outWMia['x']<>w then + fehler('Setzen von wMin für Agglomeration nicht erlaubt ( '+floatToStr(w)+' ≠ '+floatToStr(outWMia['x'])+' )!'); exit; end; - out_wmia['x']:=w; + outWMia['x']:=w; wmiaExplizit:=true; aktualisiereAlles; end; -function tTransformation.rWmax: extended; +function tTransformation.rWMax: extended; begin - result:=out_wmia['y']; + result:=outWMia['y']; end; -procedure tTransformation.wWmax(w: extended); +procedure tTransformation.wWMax(w: extended); begin if (self is tAgglomeration) then begin - if out_wmia['y']<>w then - fehler('Setzen von wmax für Agglomeration nicht erlaubt ( '+floattostr(w)+' ≠ '+floattostr(out_wmia['y'])+' )!'); + if outWMia['y']<>w then + fehler('Setzen von wMax für Agglomeration nicht erlaubt ( '+floatToStr(w)+' ≠ '+floatToStr(outWMia['y'])+' )!'); exit; end; wmiaExplizit:=true; - out_wmia['y']:=w; + outWMia['y']:=w; aktualisiereAlles; end; -function tTransformation.rXsteps: longint; +function tTransformation.rXSteps: longint; begin - result:=out_xs_ts['x']; + result:=outXSTS['x']; end; -procedure tTransformation.wXsteps(x: longint); +procedure tTransformation.wXSteps(x: longint); begin if not (self is tKeineTransformation) then - fehler('Will xsteps schreiben, aber bin nicht der Anfang einer Transformationskette!'); - in_xs_ts['x']:=x; + fehler('Will xSteps schreiben, aber bin nicht der Anfang einer Transformationskette!'); + inXSTS['x']:=x; aktualisiereAlles; end; -function tTransformation.rTsiz: longint; +function tTransformation.rTSiz: longint; begin - result:=out_xs_ts['y']; + result:=outXSTS['y']; end; -procedure tTransformation.wTsiz(t: longint); +procedure tTransformation.wTSiz(t: longint); begin if not (self is tKeineTransformation) then - fehler('Will tsiz schreiben, aber bin nicht der Anfang einer Transformationskette!'); - in_xs_ts['y']:=t; + fehler('Will tSiz schreiben, aber bin nicht der Anfang einer Transformationskette!'); + inXSTS['y']:=t; aktualisiereAlles; end; @@ -1609,7 +1609,7 @@ end; procedure tTransformation.fuegeNachfolgerHinzu(tr: tTransformation); begin if assigned(tr) then begin - setlength(nachfolger,length(nachfolger)+1); + setLength(nachfolger,length(nachfolger)+1); nachfolger[length(nachfolger)-1]:=tr; end; end; @@ -1622,7 +1622,7 @@ begin if nachfolger[i]=tr then begin for j:=i+1 to length(nachfolger)-1 do nachfolger[j-1]:=nachfolger[j]; - setlength(nachfolger,length(nachfolger)-1); + setLength(nachfolger,length(nachfolger)-1); exit; end; fehler('Kann zu löschenden Nachfolger nicht finden!'); @@ -1631,7 +1631,7 @@ end; procedure tTransformation.fuegeVorgaengerHinzu(tr: tTransformation); begin if assigned(tr) then begin - setlength(vorgaenger,length(vorgaenger)+1); + setLength(vorgaenger,length(vorgaenger)+1); vorgaenger[length(vorgaenger)-1]:=tr; tr.fuegeNachfolgerHinzu(self); end; @@ -1646,7 +1646,7 @@ begin if vorgaenger[i]=tr then begin for j:=i+1 to length(vorgaenger)-1 do vorgaenger[j-1]:=vorgaenger[j]; - setlength(vorgaenger,length(vorgaenger)-1); + setLength(vorgaenger,length(vorgaenger)-1); tr.loescheNachfolger(self); exit; end; @@ -1701,7 +1701,7 @@ var i: longint; begin if _anzZugehoerigerDaten>0 then - result:=' '+inttostr(_anzZugehoerigerDaten)+' Daten' + result:=' '+intToStr(_anzZugehoerigerDaten)+' Daten' else result:=''; for i:=0 to length(nachfolger)-1 do begin @@ -1750,13 +1750,13 @@ begin // in Koordinaten umzurechnen for d:='x' to 'y' do - p[d]:=p[d] * (in_xs_ts[d]-1); + p[d]:=p[d] * (inXSTS[d]-1); // zu transformieren p:=transformiereKoordinatenEinzeln(p); // und in Anteile zurückzurechnen - result:=p[c]/out_xs_ts[c]; + result:=p[c]/outXSTS[c]; end; function tTransformation.transformiereWertEinzeln(const x: extended): extended; @@ -1787,10 +1787,10 @@ begin else for i:=0 to length(vorgaenger)-1 do begin if length(vorgaenger)>1 then - result:=result+#13'< '+inttostr(i)+' >'; + result:=result+#13'< '+intToStr(i)+' >'; result:=result+#13+vorgaenger[i].dumpParams(tiefe-1); end; - result:=result+inttostr(tiefe+1)+': '+dumpParams; + result:=result+intToStr(tiefe+1)+': '+dumpParams; end; // tKeineTransformation ******************************************************** @@ -1805,10 +1805,10 @@ var begin // ein Wert am Anfang ist einfach linear zu interpolieren c:=char(ord('y')-byte(l in [lOben,lUnten])); - if x=out_achsen[c,'x'] then + if x=outAchsen[c,'x'] then result:=0 else - result:=(x-out_achsen[c,'x'])/(out_achsen[c,'y']-out_achsen[c,'x'])*(1-1/out_xs_ts[c]); + result:=(x-outAchsen[c,'x'])/(outAchsen[c,'y']-outAchsen[c,'x'])*(1-1/outXSTS[c]); end; // tIdentitaet ***************************************************************** @@ -1854,19 +1854,19 @@ var c: char; begin if horizontal then begin - out_achsen['x','x']:=0; - out_achsen['x','y']:=(in_xs_ts['x']-1)/(in_achsen['x','y']-in_achsen['x','x']); + outAchsen['x','x']:=0; + outAchsen['x','y']:=(inXSTS['x']-1)/(inAchsen['x','y']-inAchsen['x','x']); end else for c:='x' to 'y' do - out_achsen['x',c]:=in_achsen['x',c]; + outAchsen['x',c]:=inAchsen['x',c]; if vertikal then begin - out_achsen['y','x']:=0; - out_achsen['y','y']:=(in_xs_ts['y']-1)/(in_achsen['y','y']-in_achsen['y','x']); + outAchsen['y','x']:=0; + outAchsen['y','y']:=(inXSTS['y']-1)/(inAchsen['y','y']-inAchsen['y','x']); end else for c:='x' to 'y' do - out_achsen['y',c]:=in_achsen['y',c]; + outAchsen['y',c]:=inAchsen['y',c]; end; function tFFTTransformation.wertZuPositionAufAchse(const l: tLage; x: extended): extended; @@ -1879,12 +1879,12 @@ begin else begin // egal, wie die Werte vor der FFT aussahen, wir setzen die Frequenzen danach linear c:=char(ord('y')-byte(l in [lOben,lUnten])); - if x=out_achsen[c,'x'] then + if x=outAchsen[c,'x'] then result:=0 else - result:=(x-out_achsen[c,'x'])/(out_achsen[c,'y']-out_achsen[c,'x']); + result:=(x-outAchsen[c,'x'])/(outAchsen[c,'y']-outAchsen[c,'x']); - result:=result*(1-1/out_xs_ts[c]); + result:=result*(1-1/outXSTS[c]); end; end; @@ -1911,7 +1911,7 @@ end; function tSpiegelungsTransformation.transformiereKoordinatenEinzeln(const p: tExtPoint): tExtPoint; begin testeAuszerhalb(p); - result['x']:=in_xs_ts['x']-1-p['x']; + result['x']:=inXSTS['x']-1-p['x']; result['y']:=p['y']; end; @@ -1939,7 +1939,7 @@ begin end; end; -function tKonkreteKoordinatenTransformation.findeLineareParameter(syntaxtest: boolean; auszenSkala: char; s: string; xscale,yscale: extended; var off,xl,yl: extended; ueberschreiben: boolean; etf: tExprToFloat): boolean; +function tKonkreteKoordinatenTransformation.findeLineareParameter(syntaxtest: boolean; auszenSkala: char; s: string; xScale,yScale: extended; var off,xl,yl: extended; ueberschreiben: boolean; etf: tExprToFloat): boolean; var t: string; c: char; @@ -1970,12 +1970,12 @@ begin else try tmp:=etf(syntaxtest,t); case c of - 'x': tmp:=tmp*xscale; - 'y': tmp:=tmp*yscale; + 'x': tmp:=tmp*xScale; + 'y': tmp:=tmp*yScale; end; case auszenSkala of - 'x': tmp:=tmp/xscale; - 'y': tmp:=tmp/yscale; + 'x': tmp:=tmp/xScale; + 'y': tmp:=tmp/yScale; end; except exit; @@ -2013,7 +2013,7 @@ begin end; end; -function tKonkreteKoordinatenTransformation.initAbbildung(syntaxtest: boolean; s: string; xscale,yscale: extended; etf: tExprToFloat): boolean; +function tKonkreteKoordinatenTransformation.initAbbildung(syntaxtest: boolean; s: string; xScale,yScale: extended; etf: tExprToFloat): boolean; var c,d: char; i: longint; @@ -2056,26 +2056,26 @@ begin else if v='-' then tmp:=-1 else try tmp:=etf(syntaxtest,v); - if c='x' then tmp:=tmp/xscale - else tmp:=tmp/yscale; + if c='x' then tmp:=tmp/xScale + else tmp:=tmp/yScale; except exit; end; if copy(t,pos('(',t)-3,3)='log' then begin lnFak[c]:=tmp; - if not findeLineareParameter(syntaxtest,' ',u,xscale,yscale,lnOff[c],lnInt[c,'x'],lnInt[c,'y'],true,etf) then exit; + if not findeLineareParameter(syntaxtest,' ',u,xScale,yScale,lnOff[c],lnInt[c,'x'],lnInt[c,'y'],true,etf) then exit; end else if copy(t,pos('(',t)-3,3)='exp' then begin expFak[c]:=tmp; tmp:=0; - if not findeLineareParameter(syntaxtest,' ',u,xscale,yscale,tmp,expExp[c,'x'],expExp[c,'y'],true,etf) then exit; + if not findeLineareParameter(syntaxtest,' ',u,xScale,yScale,tmp,expExp[c,'x'],expExp[c,'y'],true,etf) then exit; if tmp<>0 then exit; end else exit; delete(t,i,pos(')',t)-i+1); end; if t<>'' then - if not findeLineareParameter(syntaxtest,c,t,xscale,yscale,off[c],lin[c,'x'],lin[c,'y'],false,etf) then exit; + if not findeLineareParameter(syntaxtest,c,t,xScale,yScale,off[c],lin[c,'x'],lin[c,'y'],false,etf) then exit; t:=s; end; result:=true; @@ -2089,24 +2089,24 @@ begin for c:='x' to 'y' do begin result:=result+#13#10+c+' = '; if off[c]<>0 then - result:=result + floattostr(off[c]) + ' '; + result:=result + floatToStr(off[c]) + ' '; for d:='x' to 'y' do if lin[c,d]<>0 then - result:=result + '+ ' + floattostr(lin[c,d]) + ' ' + d + ' '; + result:=result + '+ ' + floatToStr(lin[c,d]) + ' ' + d + ' '; if lnFak[c]<>0 then begin - result:=result + '+ ' + floattostr(lnFak[c])+' log ( '; + result:=result + '+ ' + floatToStr(lnFak[c])+' log ( '; if lnOff[c]<>0 then - result:=result + floattostr(lnoff[c]) + ' '; + result:=result + floatToStr(lnOff[c]) + ' '; for d:='x' to 'y' do if lnInt[c,d]<>0 then - result:=result + '+ ' + floattostr(lnInt[c,d]) + ' ' + d + ' '; + result:=result + '+ ' + floatToStr(lnInt[c,d]) + ' ' + d + ' '; result:=result + ') '; end; if expFak[c]<>0 then begin - result:=result + '+ ' + floattostr(expFak[c])+' exp ( '; + result:=result + '+ ' + floatToStr(expFak[c])+' exp ( '; for d:='x' to 'y' do if expExp[c,d]<>0 then - result:=result + '+ ' + floattostr(expExp[c,d]) + ' ' + d + ' '; + result:=result + '+ ' + floatToStr(expExp[c,d]) + ' ' + d + ' '; result:=result + ') '; end; end; @@ -2123,11 +2123,11 @@ begin for d:='x' to 'y' do result[c,d]:=-1; for k:=0 to 1 do - for i:=0 to (in_xs_ts['x']*(1-k)+in_xs_ts['y']*k)-1 do + for i:=0 to (inXSTS['x']*(1-k)+inXSTS['y']*k)-1 do for j:=0 to 1 do begin RandPkt:=transformiereKoordinaten( - i*(1-k) + j*k*(in_xs_ts['x']-1), - j*(1-k)*(in_xs_ts['y']-1) + i*k); + i*(1-k) + j*k*(inXSTS['x']-1), + j*(1-k)*(inXSTS['y']-1) + i*k); for c:='x' to 'y' do for d:='x' to 'y' do if ((i=0) and (j=0)) or ((d='y') xor (result[c,d]>floor(RandPkt[c]) + byte(d='y'))) then @@ -2142,7 +2142,7 @@ var begin gr:=zielausdehnung; for c:='x' to 'y' do - out_xs_ts[c]:=gr[c,'y']-gr[c,'x']+1; + outXSTS[c]:=gr[c,'y']-gr[c,'x']+1; end; // tLambdaZuOmegaTransformation ************************************************ @@ -2157,7 +2157,7 @@ end; function tLambdaZuOmegaTransformation.verhaeltnisHorizontal: extended; begin if horizontal then - result:=in_achsen['x','x']/(in_achsen['x','y']-in_achsen['x','x']) + result:=inAchsen['x','x']/(inAchsen['x','y']-inAchsen['x','x']) else result:=0; end; @@ -2165,7 +2165,7 @@ end; function tLambdaZuOmegaTransformation.verhaeltnisVertikal: extended; begin if vertikal then - result:=in_achsen['y','x']/(in_achsen['y','y']-in_achsen['y','x']) + result:=inAchsen['y','x']/(inAchsen['y','y']-inAchsen['y','x']) else result:=0; end; @@ -2183,19 +2183,19 @@ var c: char; begin if horizontal then begin - out_achsen['x','x']:=2*pi*299792458/in_achsen['x','y']; - out_achsen['x','y']:=2*pi*299792458/in_achsen['x','x']; + outAchsen['x','x']:=2*pi*299792458/inAchsen['x','y']; + outAchsen['x','y']:=2*pi*299792458/inAchsen['x','x']; end else for c:='x' to 'y' do - out_achsen['x',c]:=in_achsen['x',c]; + outAchsen['x',c]:=inAchsen['x',c]; if vertikal then begin - out_achsen['y','x']:=2*pi*299792458/in_achsen['y','y']; - out_achsen['y','y']:=2*pi*299792458/in_achsen['y','x']; + outAchsen['y','x']:=2*pi*299792458/inAchsen['y','y']; + outAchsen['y','y']:=2*pi*299792458/inAchsen['y','x']; end else for c:='x' to 'y' do - out_achsen['y',c]:=in_achsen['y',c]; + outAchsen['y',c]:=inAchsen['y',c]; end; function tLambdaZuOmegaTransformation.transformiereKoordinatenEinzeln(const p: tExtPoint): tExtPoint; @@ -2206,7 +2206,7 @@ begin if horizontal then begin verh:=verhaeltnisHorizontal; result['x']:= - (1/(verh + p['x']/(in_xs_ts['x']-1)) - 1/verh) / + (1/(verh + p['x']/(inXSTS['x']-1)) - 1/verh) / (1/(verh + 1) - 1/verh); end else @@ -2214,7 +2214,7 @@ begin if vertikal then begin verh:=verhaeltnisVertikal; result['y']:= - (1/(verh + p['y']/(in_xs_ts['y']-1)) - 1/verh) / + (1/(verh + p['y']/(inXSTS['y']-1)) - 1/verh) / (1/(verh + 1) - 1/verh); end else @@ -2243,13 +2243,13 @@ begin gr[c,d]:=0; end; -constructor tKoordinatenAusschnitt.create(vorg: tTransformation; xmin,xmax,tmin,tmax: longint); +constructor tKoordinatenAusschnitt.create(vorg: tTransformation; xMin,xMax,tMin,tMax: longint); begin inherited create; - gr['x','x']:=xmin; - gr['x','y']:=xmax; - gr['y','x']:=tmin; - gr['y','y']:=tmax; + gr['x','x']:=xMin; + gr['x','y']:=xMax; + gr['y','x']:=tMin; + gr['y','y']:=tMax; fuegeVorgaengerHinzu(vorg); end; @@ -2258,7 +2258,7 @@ var c: char; begin for c:='x' to 'y' do - out_xs_ts[c]:=max(0,min(in_xs_ts[c],gr[c,'y']+1)-gr[c,'x']); + outXSTS[c]:=max(0,min(inXSTS[c],gr[c,'y']+1)-gr[c,'x']); end; procedure tKoordinatenAusschnitt.aktualisiereAchsen; @@ -2266,15 +2266,15 @@ var c,d: char; begin for c:='x' to 'y' do - if in_xs_ts[c]<=1 then begin + if inXSTS[c]<=1 then begin for d:='x' to 'y' do - out_achsen[c,d]:=in_achsen[c,d]; - if in_achsen[c,'x']<>in_achsen[c,'y'] then - fehler('Nur eine Koordinate, aber '+floattostr(in_achsen[c,'x'])+' = '+c+'start <> '+c+'stop = '+floattostr(in_achsen[c,'y'])+'!'); + outAchsen[c,d]:=inAchsen[c,d]; + if inAchsen[c,'x']<>inAchsen[c,'y'] then + fehler('Nur eine Koordinate, aber '+floatToStr(inAchsen[c,'x'])+' = '+c+'start <> '+c+'stop = '+floatToStr(inAchsen[c,'y'])+'!'); end else for d:='x' to 'y' do - out_achsen[c,d]:=in_achsen[c,'x'] + gr[c,d]/(in_xs_ts[c]-1)*(in_achsen[c,'y']-in_achsen[c,'x']); + outAchsen[c,d]:=inAchsen[c,'x'] + gr[c,d]/(inXSTS[c]-1)*(inAchsen[c,'y']-inAchsen[c,'x']); end; function tKoordinatenAusschnitt.transformiereKoordinatenEinzeln(const p: tExtPoint): tExtPoint; @@ -2283,12 +2283,12 @@ var begin testeAuszerhalb(p); for c:='x' to 'y' do - result[c]:=max(0,min(out_xs_ts[c],p[c]-gr[c,'x'])); + result[c]:=max(0,min(outXSTS[c],p[c]-gr[c,'x'])); end; function tKoordinatenAusschnitt.dumpParams: string; begin - result:='Koordinatenausschnitt: '+inttostr(gr['x','x'])+'..'+inttostr(gr['x','y'])+' x '+inttostr(gr['y','x'])+'..'+inttostr(gr['y','y']); + result:='Koordinatenausschnitt: '+intToStr(gr['x','x'])+'..'+intToStr(gr['x','y'])+' x '+intToStr(gr['y','x'])+'..'+intToStr(gr['y','y']); end; // tFitTransformation ********************************************************** @@ -2302,7 +2302,7 @@ begin _adStao['x']:=adStart; // Start und _adStao['y']:=adStop; // Stopp in der "anderen Dimension" if (_adLaenge=1) xor (_adStao['x']=_adStao['y']) then - fehler('Die gefitteten Daten müssen genau dann eindimensional sein, wenn Start = Stopp ist. ('+inttostr(_adLaenge)+'-d vs. '+floattostr(_adStao['x'])+'..'+floattostr(_adStao['y'])+')'); + fehler('Die gefitteten Daten müssen genau dann eindimensional sein, wenn Start = Stopp ist. ('+intToStr(_adLaenge)+'-d vs. '+floatToStr(_adStao['x'])+'..'+floatToStr(_adStao['y'])+')'); fuegeVorgaengerHinzu(daten); end; @@ -2311,7 +2311,7 @@ var c: char; begin for c:='x' to 'y' do - out_xs_ts[c]:=_adLaenge+(in_xs_ts[c]-_adLaenge)*byte(_senkrecht xor (c='y')); + outXSTS[c]:=_adLaenge+(inXSTS[c]-_adLaenge)*byte(_senkrecht xor (c='y')); end; procedure tFitTransformation.aktualisiereAchsen; @@ -2319,9 +2319,9 @@ var c: char; begin for c:='x' to 'y' do begin - out_achsen[char(ord('x')+byte(_senkrecht)),c]:= - in_achsen[char(ord('x')+byte(_senkrecht)),c]; - out_achsen[char(ord('y')-byte(_senkrecht)),c]:= + outAchsen[char(ord('x')+byte(_senkrecht)),c]:= + inAchsen[char(ord('x')+byte(_senkrecht)),c]; + outAchsen[char(ord('y')-byte(_senkrecht)),c]:= _adStao[c]; end; end; @@ -2357,7 +2357,7 @@ end; function tAgglomeration.rNullposition: extended; begin if isNaN(_nullposition) then - result:=in_achsen[char(ord('y')-byte(horizontal)),'x'] + result:=inAchsen[char(ord('y')-byte(horizontal)),'x'] else result:=_nullposition; end; @@ -2373,18 +2373,18 @@ var i: longint; begin if length(vorgaenger)=0 then exit; - in_achsen:=vorgaenger[0].achsen; + inAchsen:=vorgaenger[0].achsen; for i:=1 to length(vorgaenger)-1 do - if in_achsen <> vorgaenger[i].achsen then + if inAchsen <> vorgaenger[i].achsen then fehler('Vorgänger haben verschiedene Achsen, was bei Agglomeration nicht geht!'); - in_xs_ts:=vorgaenger[0].xsteps_tsiz; + inXSTS:=vorgaenger[0].xStepsTSiz; for i:=1 to length(vorgaenger)-1 do - if in_xs_ts <> vorgaenger[i].xsteps_tsiz then - fehler('Vorgänger haben verschiedene xsteps oder tsiz, was bei Agglomeration nicht geht!'); - in_wmia:=vorgaenger[0].wmia; + if inXSTS <> vorgaenger[i].xStepsTSiz then + fehler('Vorgänger haben verschiedene xSteps oder tSiz, was bei Agglomeration nicht geht!'); + inWMia:=vorgaenger[0].wMia; for i:=1 to length(vorgaenger)-1 do begin - in_wmia['x']:=min(in_wmia['x'],vorgaenger[i].wmia['x']); - in_wmia['y']:=max(in_wmia['y'],vorgaenger[i].wmia['y']); + inWMia['x']:=min(inWMia['x'],vorgaenger[i].wMia['x']); + inWMia['y']:=max(inWMia['y'],vorgaenger[i].wMia['y']); end; end; @@ -2398,7 +2398,7 @@ var c: char; begin for c:='x' to 'y' do - out_xs_ts[c]:=in_xs_ts[c]*(1+(length(vorgaenger)-1)*byte(horizontal xor (c='y'))); + outXSTS[c]:=inXSTS[c]*(1+(length(vorgaenger)-1)*byte(horizontal xor (c='y'))); end; procedure tAgglomeration.aktualisiereAchsen; @@ -2406,25 +2406,25 @@ var c,d: char; begin for c:='x' to 'y' do - if in_xs_ts[c]<=1 then begin // diese Dimension gibt es in der Quelle nicht + if inXSTS[c]<=1 then begin // diese Dimension gibt es in der Quelle nicht if (horizontal xor (c='y')) and (schritt<0) then fehler('Die Richtung einer Agglomeration ohne explizite Schrittweite kann nicht senkrecht zur Dimension eindimensionaler Daten sein!'); for d:='x' to 'y' do - out_achsen[c,d]:= - in_achsen[c,d] + + outAchsen[c,d]:= + inAchsen[c,d] + byte(horizontal xor (c='y')) * ( // in Agglomerationsrichtung - nullposition-in_achsen[c,'x'] + // Verschiebung durch explizite Nullposition + nullposition-inAchsen[c,'x'] + // Verschiebung durch explizite Nullposition byte(d='y') * schritt*(length(vorgaenger)-1) // das Ende ); - if in_achsen[c,'x']<>in_achsen[c,'y'] then - fehler('Nur eine Koordinate, aber '+floattostr(in_achsen[c,'x'])+' = '+c+'start <> '+c+'stop = '+floattostr(in_achsen[c,'y'])+'!'); + if inAchsen[c,'x']<>inAchsen[c,'y'] then + fehler('Nur eine Koordinate, aber '+floatToStr(inAchsen[c,'x'])+' = '+c+'start <> '+c+'stop = '+floatToStr(inAchsen[c,'y'])+'!'); end else // diese Dimension gibt es in der Quelle for d:='x' to 'y' do - out_achsen[c,d]:= - in_achsen[c,d] + - (in_achsen[c,'y']-in_achsen[c,'x'])/ - (1+1/in_xs_ts[c]) * + outAchsen[c,d]:= + inAchsen[c,d] + + (inAchsen[c,'y']-inAchsen[c,'x'])/ + (1+1/inXSTS[c]) * (length(vorgaenger)-1) * byte((horizontal xor (c='y')) and (d='y')); end; @@ -2439,9 +2439,9 @@ begin i:=0; c:=char(ord('y')-byte(l in [lOben,lUnten])); if horizontal xor not (l in [lOben,lUnten]) then begin // aber nur, wenn der Wert auf einer Achse in Agglomerationsrichtung liegt - x:=x+in_achsen[c,'x']-nullposition; + x:=x+inAchsen[c,'x']-nullposition; if schritt<0 then // Schrittlänge berechnen - s:=(vorgaenger[0].achsen[c,'y']-vorgaenger[0].achsen[c,'x'])*(1+1/vorgaenger[0].xsteps_tsiz[c]) + s:=(vorgaenger[0].achsen[c,'y']-vorgaenger[0].achsen[c,'x'])*(1+1/vorgaenger[0].xStepsTSiz[c]) else s:=schritt; while (i<length(vorgaenger)) and (vorgaenger[i].achsen[c,'y']<x) do begin @@ -2460,12 +2460,12 @@ end; function tAgglomeration.dumpParams: string; begin - result:='Agglomeration: '+inttostr(length(vorgaenger))+'x '; + result:='Agglomeration: '+intToStr(length(vorgaenger))+'x '; if horizontal then result:=result+'horizont' else result:=result+'vertik'; - result:=result+'al um '+floattostr(schritt)+' versetzt'; + result:=result+'al um '+floatToStr(schritt)+' versetzt'; end; // tDiagonaleAgglomeration ***************************************************** @@ -2478,19 +2478,19 @@ end; function tDiagonaleAgglomeration.datenRichtung: char; begin - if not (in_xs_ts['x']=1) xor (in_xs_ts['y']=1) then - fehler('Diagonal zu agglomerierende Daten müssen eindimensional sein und nicht '+inttostr(in_xs_ts['x'])+'x'+inttostr(in_xs_ts['y'])+'!'); - result:=char(ord('x')+byte(in_xs_ts['y']<>1)); + if not (inXSTS['x']=1) xor (inXSTS['y']=1) then + fehler('Diagonal zu agglomerierende Daten müssen eindimensional sein und nicht '+intToStr(inXSTS['x'])+'x'+intToStr(inXSTS['y'])+'!'); + result:=char(ord('x')+byte(inXSTS['y']<>1)); end; procedure tDiagonaleAgglomeration.holeInfosVonVorgaengern; begin if length(vorgaenger)=0 then exit; - in_achsen:=vorgaenger[0].achsen; + inAchsen:=vorgaenger[0].achsen; if length(vorgaenger)>1 then fehler('Diagonale Agglomeration kann nur einen Vorgänger haben!'); - in_xs_ts:=vorgaenger[0].xsteps_tsiz; - in_wmia:=vorgaenger[0].wmia; + inXSTS:=vorgaenger[0].xStepsTSiz; + inWMia:=vorgaenger[0].wMia; end; procedure tDiagonaleAgglomeration.aktualisiereXsTs; @@ -2498,7 +2498,7 @@ var c: char; begin for c:='x' to 'y' do - out_xs_ts[c]:=in_xs_ts[datenRichtung]; + outXSTS[c]:=inXSTS[datenRichtung]; end; procedure tDiagonaleAgglomeration.aktualisiereAchsen; @@ -2507,7 +2507,7 @@ var begin for c:='x' to 'y' do for d:='x' to 'y' do - out_achsen[c,d]:=in_achsen[datenRichtung,d]; + outAchsen[c,d]:=inAchsen[datenRichtung,d]; end; function tDiagonaleAgglomeration.wertZuPositionAufAchse(const l: tLage; x: extended): extended; @@ -2528,12 +2528,12 @@ end; constructor tWerteKnickTransformation.create; begin inherited create; - setlength(parameter,0); + setLength(parameter,0); end; destructor tWerteKnickTransformation.destroy; begin - setlength(parameter,0); + setLength(parameter,0); inherited destroy; end; @@ -2559,7 +2559,7 @@ var begin result:='Knick:'; for i:=0 to length(parameter) div 2 - 1 do - result:=result + ' (' + floattostr(parameter[2*i])+';'+floattostr(parameter[2*i+1])+')'; + result:=result + ' (' + floatToStr(parameter[2*i])+';'+floatToStr(parameter[2*i+1])+')'; end; // tWerteLogTransformation ***************************************************** @@ -2577,7 +2577,7 @@ end; function tWerteLogTransformation.dumpParams: string; begin - result:='Logarithmus: '+floattostr(logMin); + result:='Logarithmus: '+floatToStr(logMin); end; // tWerteLogAbsTransformation ************************************************** @@ -2595,7 +2595,7 @@ end; function tWerteLogAbsTransformation.dumpParams: string; begin - result:='Betragslogarithmus: '+floattostr(logSkala); + result:='Betragslogarithmus: '+floatToStr(logSkala); end; // tWerteAbsTransformation ***************************************************** @@ -2615,7 +2615,7 @@ begin result:='Betrag'; end; -function liesTWerteTransformationen(st: boolean; s: string; f: tMyStringlist; etf: tExprToFloat; var tr: tTransformation): boolean; +function liesTWerteTransformationen(sT: boolean; s: string; f: tMyStringList; etf: tExprToFloat; var tr: tTransformation): boolean; var i: longint; tmp: tTransformation; @@ -2626,7 +2626,7 @@ begin if istDasBefehl('Knick',s,bekannteTransformationen,false) then begin tmp:=tWerteKnickTransformation.create; with (tmp as tWerteKnickTransformation) do begin - setlength(parameter,2); + setLength(parameter,2); parameter[0]:=0; parameter[1]:=0; repeat @@ -2636,19 +2636,19 @@ begin exit; end; if s='Ende' then break; - setlength(parameter,length(parameter)+2); + setLength(parameter,length(parameter)+2); parameter[length(parameter)-2]:= - etf(st,erstesArgument(s,' ')); - if s='' then s:=inttostr(length(parameter) div 2 - 1); + etf(sT,erstesArgument(s,' ')); + if s='' then s:=intToStr(length(parameter) div 2 - 1); parameter[length(parameter)-1]:= - etf(st,s); + etf(sT,s); until false; for i:=0 to length(parameter)-1 do if odd(i) then parameter[i]:= parameter[i]/ (length(parameter) div 2); - setlength(parameter,length(parameter)+2); + setLength(parameter,length(parameter)+2); parameter[length(parameter)-2]:= 1; parameter[length(parameter)-1]:= 1; end; @@ -2660,7 +2660,7 @@ begin end; if istDasBefehl('Log:',s,bekannteTransformationen,true) then begin tmp:=tWerteLogTransformation.create; - (tmp as tWerteLogTransformation).logMin:=etf(st,s); + (tmp as tWerteLogTransformation).logMin:=etf(sT,s); result:=true; tmp.fuegeVorgaengerHinzu(tr); tr:=tmp; @@ -2669,7 +2669,7 @@ begin end; if istDasBefehl('AbsLog:',s,bekannteTransformationen,true) then begin tmp:=tWerteLogAbsTransformation.create; - (tmp as tWerteLogAbsTransformation).logSkala:=etf(st,s); + (tmp as tWerteLogAbsTransformation).logSkala:=etf(sT,s); result:=true; tmp.fuegeVorgaengerHinzu(tr); tr:=tmp; diff --git a/werteunit.pas b/werteunit.pas index 340d3a7..e8761e2 100644 --- a/werteunit.pas +++ b/werteunit.pas @@ -5,7 +5,7 @@ unit werteunit; interface uses - Classes, SysUtils, typenunit, math, process, lowlevelunit, matheunit, fftunit; + classes, sysutils, typenunit, math, process, lowlevelunit, matheunit, fftunit; type // tLLWerte ******************************************************************** @@ -22,53 +22,55 @@ type procedure sortiereMaxima(var maxima: tIntPointArray); public werte: array of wgen; - params: tExtrainfos; - constructor create(ps: tExtrainfos); overload; - constructor create(original: pTLLWerteSingle; ps: tExtrainfos; xmin,xmax: longint); overload; - constructor create(original: pTLLWerteDouble; ps: tExtrainfos; xmin,xmax: longint); overload; - constructor create(original: pTLLWerteExtended; ps: tExtrainfos; xmin,xmax: longint); overload; - procedure kopiereVon(st: boolean; original: pTLLWerteSingle); overload; - procedure kopiereVon(st: boolean; original: pTLLWerteDouble); overload; - procedure kopiereVon(st: boolean; original: pTLLWerteExtended); overload; - procedure kopiereVon(st: boolean; original: pTLLWerteSingle; xmin,xmax: longint); overload; - procedure kopiereVon(st: boolean; original: pTLLWerteDouble; xmin,xmax: longint); overload; - procedure kopiereVon(st: boolean; original: pTLLWerteExtended; xmin,xmax: longint); overload; - procedure kopiereVon(st: boolean; original: pTLLWerteSingle; xmin,xmax,tmin,tmax: longint); overload; - procedure kopiereVon(st: boolean; original: pTLLWerteDouble; xmin,xmax,tmin,tmax: longint); overload; - procedure kopiereVon(st: boolean; original: pTLLWerteExtended; xmin,xmax,tmin,tmax: longint); overload; + params: tExtraInfos; + constructor create(ps: tExtraInfos); overload; + constructor create(original: pTLLWerteSingle; ps: tExtraInfos; xMin,xMax: longint); overload; + constructor create(original: pTLLWerteDouble; ps: tExtraInfos; xMin,xMax: longint); overload; + constructor create(original: pTLLWerteExtended; ps: tExtraInfos; xMin,xMax: longint); overload; + procedure kopiereVon(sT: boolean; original: pTLLWerteSingle); overload; + procedure kopiereVon(sT: boolean; original: pTLLWerteDouble); overload; + procedure kopiereVon(sT: boolean; original: pTLLWerteExtended); overload; + procedure kopiereVon(sT: boolean; original: pTLLWerteSingle; xMin,xMax: longint); overload; + procedure kopiereVon(sT: boolean; original: pTLLWerteDouble; xMin,xMax: longint); overload; + procedure kopiereVon(sT: boolean; original: pTLLWerteExtended; xMin,xMax: longint); overload; + procedure kopiereVon(sT: boolean; original: pTLLWerteSingle; xMin,xMax,tMin,tMax: longint); overload; + procedure kopiereVon(sT: boolean; original: pTLLWerteDouble; xMin,xMax,tMin,tMax: longint); overload; + procedure kopiereVon(sT: boolean; original: pTLLWerteExtended; xMin,xMax,tMin,tMax: longint); overload; procedure kopiereVonNach(original: pTLLWerteSingle; qxmin,qxmax,qtmin,qtmax,zxmin,ztmin: longint); overload; procedure kopiereVonNach(original: pTLLWerteDouble; qxmin,qxmax,qtmin,qtmax,zxmin,ztmin: longint); overload; procedure kopiereVonNach(original: pTLLWerteExtended; qxmin,qxmax,qtmin,qtmax,zxmin,ztmin: longint); overload; - procedure kopiereVerzerrt(original: pTLLWerteSingle; ZPs: tIntPointArray; ZGs: tExtPointArray; ZAs: tExtendedArray; xmin,xmax,tmin,tmax: longint; vb,nb: tTransformation; va,na: longint); overload; - procedure kopiereVerzerrt(original: pTLLWerteDouble; ZPs: tIntPointArray; ZGs: tExtPointArray; ZAs: tExtendedArray; xmin,xmax,tmin,tmax: longint; vb,nb: tTransformation; va,na: longint); overload; - procedure kopiereVerzerrt(original: pTLLWerteExtended; ZPs: tIntPointArray; ZGs: tExtPointArray; ZAs: tExtendedArray; xmin,xmax,tmin,tmax: longint; vb,nb: tTransformation; va,na: longint); overload; - procedure kopiereLOVerzerrt(original: pTLLWerteSingle; xmin,xmax,tmin,tmax: longint; verhHo,verhVe: extended); overload; - procedure kopiereLOVerzerrt(original: pTLLWerteDouble; xmin,xmax,tmin,tmax: longint; verhHo,verhVe: extended); overload; - procedure kopiereLOVerzerrt(original: pTLLWerteExtended; xmin,xmax,tmin,tmax: longint; verhHo,verhVe: extended); overload; + procedure kopiereVerzerrt(original: pTLLWerteSingle; zPs: tIntPointArray; zGs: tExtPointArray; zAs: tExtendedArray; xMin,xMax,tMin,tMax: longint; vB,nB: tTransformation; vA,nA: longint); overload; + procedure kopiereVerzerrt(original: pTLLWerteDouble; zPs: tIntPointArray; zGs: tExtPointArray; zAs: tExtendedArray; xMin,xMax,tMin,tMax: longint; vB,nB: tTransformation; vA,nA: longint); overload; + procedure kopiereVerzerrt(original: pTLLWerteExtended; zPs: tIntPointArray; zGs: tExtPointArray; zAs: tExtendedArray; xMin,xMax,tMin,tMax: longint; vB,nB: tTransformation; vA,nA: longint); overload; + procedure kopiereLOVerzerrt(original: pTLLWerteSingle; xMin,xMax,tMin,tMax: longint; verhHo,verhVe: extended); overload; + procedure kopiereLOVerzerrt(original: pTLLWerteDouble; xMin,xMax,tMin,tMax: longint; verhHo,verhVe: extended); overload; + procedure kopiereLOVerzerrt(original: pTLLWerteExtended; xMin,xMax,tMin,tMax: longint; verhHo,verhVe: extended); overload; destructor destroy; override; function liesDateien(dateien: tGenerischeInputDateiInfoArray): boolean; function fft(senkrecht,invers: boolean; algo: tFFTAlgorithmus; fen: tFenster; hg: extended; out pvFehler: extended): boolean; overload; inline; function fft(smin,smax: longint; senkrecht,invers: boolean; algo: tFFTAlgorithmus; fen: tFenster; hg: extended; out pvFehler: extended): boolean; overload; procedure spiegle; overload; - procedure spiegle(tmin,tmax: longint); overload; - procedure fft2dNachbearbeitungA(nb: tFFTDatenordnung); - procedure fft2dNachbearbeitungB(xmin,xmax: longint; nb: tFFTDatenordnung); + procedure spiegle(tMin,tMax: longint); overload; + procedure fft2dNachbearbeitungA(nB: tFFTDatenordnung); + procedure fft2dNachbearbeitungB(xMin,xMax: longint; nB: tFFTDatenordnung); + procedure fft2dNachbearbeitungVerdoppeln(nB: tFFTDatenordnung); procedure schreibeWert(var f: textfile; x,y: longint); overload; procedure schreibeWert(var f: textfile; x,y,wert: extended); overload; procedure schreibeWertIntegriert(var f: textfile; i: longint; hor: boolean); procedure erzeugeBinning(senkrecht,linien: boolean; x0,dx: extended; s: string); - procedure holeRam; inline; overload; - procedure holeRam(ausgaben: byte); inline; overload; - procedure holeRam(ausgaben: byte; gemaeszTXMinMax: boolean); inline; overload; - procedure gibMinMaxDichten(out wMi,wMa: extended; xmin,xmax,tmin,tmax: longint); - function zuPixelWerten(whoehe,wbreite,xpmi,xmi,tmi: longint; xz,yz: extended; pPWerte: pTExtendedArray; pPAnzahlen: pTLongintArray): boolean; - function findeSchwellwerte(xmi,xma,tmi,tma: longint; Schw: extended): tExtPointArray; - procedure integriereSingle(qu: pTLLWerteSingle; xmi,xma,tmi,tma,xof,tof: longint; richtung: tIntegrationsRichtung); - procedure integriereDouble(qu: pTLLWerteDouble; xmi,xma,tmi,tma,xof,tof: longint; richtung: tIntegrationsRichtung); - procedure integriereExtended(qu: pTLLWerteDouble; xmi,xma,tmi,tma,xof,tof: longint; richtung: tIntegrationsRichtung); + procedure holeRAM; inline; overload; + procedure holeRAM(ausgaben: byte); inline; overload; + procedure holeRAM(ausgaben: byte; gemaeszTXMinMax: boolean); inline; overload; + procedure gibMinMaxDichten(out wMi,wMa: extended; xMin,xMax,tMin,tMax: longint); + function zuPixelWerten(wHoehe,wBreite,xPMi,xMi,tMi: longint; xZ,yZ: extended; pPWerte: pTExtendedArray; pPAnzahlen: pTLongintArray): boolean; + function findeSchwellwerte(xMi,xMa,tMi,tMa: longint; Schw: extended): tExtPointArray; + procedure integriereSingle(qu: pTLLWerteSingle; xMi,xMa,tMi,tMa,xOf,tOf: longint; richtung: tIntegrationsRichtung); + procedure integriereDouble(qu: pTLLWerteDouble; xMi,xMa,tMi,tMa,xOf,tOf: longint; richtung: tIntegrationsRichtung); + procedure integriereExtended(qu: pTLLWerteDouble; xMi,xMa,tMi,tMa,xOf,tOf: longint; richtung: tIntegrationsRichtung); procedure gauszFit(amplituden,breiten,positionen,ueberlappe,hintergruende: pTLLWerteExtended; von,bis: longint; senkrecht: boolean; fensterBreite,maxBreite,maxVerschiebung: extended; positionsMitten: tExtendedArray); function ermittleHintergrund: extended; - procedure filtereHoheFrequenzen(betraege: tLLWerte; xFak,yFak: extended); + procedure kantenFilter(betraege: tLLWerte; xFak,yFak: extended; filterTyp: tKantenFilterTyp); overload; + procedure kantenFilter(betraege: tLLWerte; xFak,yFak: extended; filterTyp: tKantenFilterTyp; einseitig: boolean; out maxPos: tIntPoint); overload; procedure fenstereWerte(xMi,xMa,tMi,tMa: int64; xFen,tFen: tFenster; hg: extended); end; tLLWerteSingle = specialize tLLWerte<single>; @@ -77,7 +79,7 @@ type // andere Typen **************************************************************** tWavelet = class(tObject) freq,tfwhm,pvFehler: extended; - hlen: longint; + hLen: longint; typ: tWaveletTyp; werte: tLLWerteDouble; mitFFT: boolean; @@ -104,16 +106,16 @@ var tmp: tIntPoint; i,li,re,cnt: int64; begin - setlength(vons,1); + setLength(vons,1); vons[0]:=0; - setlength(biss,1); + setLength(biss,1); biss[0]:=length(maxima)-1; - setlength(mins,1); - setlength(maxs,1); + setLength(mins,1); + setLength(maxs,1); mins[0]:=0; maxs[0]:=0; for i:=vons[0] to biss[0] do begin - wert:=werte[maxima[i]['x']+maxima[i]['y']*params.xsteps]; + wert:=werte[maxima[i]['x']+maxima[i]['y']*params.xSteps]; if (i=vons[0]) or (wert>maxs[0]) then maxs[0]:=wert; if (i=vons[0]) or (wert<mins[0]) then @@ -131,10 +133,10 @@ begin end; if cnt>=length(vons) then begin - setlength(vons,cnt+100); - setlength(biss,cnt+100); - setlength(mins,cnt+100); - setlength(maxs,cnt+100); + setLength(vons,cnt+100); + setLength(biss,cnt+100); + setLength(mins,cnt+100); + setLength(maxs,cnt+100); end; pivot:=sqrt(maxs[cnt-1]*mins[cnt-1]);//(maxs[cnt-1]+mins[cnt-1])/2; @@ -145,14 +147,14 @@ begin mins[cnt-1]:=maxs[cnt-1]; while li<=re do begin - wertLi:=werte[maxima[li]['x']+maxima[li]['y']*params.xsteps]; + wertLi:=werte[maxima[li]['x']+maxima[li]['y']*params.xSteps]; if wertLi>=pivot then begin if wertLi<mins[cnt-1] then mins[cnt-1]:=wertLi; inc(li); continue; end; - wertRe:=werte[maxima[re]['x']+maxima[re]['y']*params.xsteps]; + wertRe:=werte[maxima[re]['x']+maxima[re]['y']*params.xSteps]; if wertRe<=pivot then begin if wertRe>maxs[cnt] then maxs[cnt]:=wertRe; @@ -180,139 +182,139 @@ begin end; end; -constructor tLLWerte.create(ps: tExtrainfos); +constructor tLLWerte.create(ps: tExtraInfos); begin inherited create; params:=ps; - setlength(werte,0); + setLength(werte,0); end; -constructor tLLWerte.create(original: pTLLWerteSingle; ps: tExtrainfos; xmin,xmax: longint); +constructor tLLWerte.create(original: pTLLWerteSingle; ps: tExtraInfos; xMin,xMax: longint); begin inherited create; params:=ps; - kopiereVon(false,original,xmin,xmax); + kopiereVon(false,original,xMin,xMax); end; -constructor tLLWerte.create(original: pTLLWerteDouble; ps: tExtrainfos; xmin,xmax: longint); +constructor tLLWerte.create(original: pTLLWerteDouble; ps: tExtraInfos; xMin,xMax: longint); begin inherited create; params:=ps; - kopiereVon(false,original,xmin,xmax); + kopiereVon(false,original,xMin,xMax); end; -constructor tLLWerte.create(original: pTLLWerteExtended; ps: tExtrainfos; xmin,xmax: longint); +constructor tLLWerte.create(original: pTLLWerteExtended; ps: tExtraInfos; xMin,xMax: longint); begin inherited create; params:=ps; - kopiereVon(false,original,xmin,xmax); + kopiereVon(false,original,xMin,xMax); end; -procedure tLLWerte.kopiereVon(st: boolean; original: pTLLWerteSingle); +procedure tLLWerte.kopiereVon(sT: boolean; original: pTLLWerteSingle); begin - kopiereVon(st,original,0,original^.params.xsteps-1); + kopiereVon(sT,original,0,original^.params.xSteps-1); end; -procedure tLLWerte.kopiereVon(st: boolean; original: pTLLWerteDouble); +procedure tLLWerte.kopiereVon(sT: boolean; original: pTLLWerteDouble); begin - kopiereVon(st,original,0,original^.params.xsteps-1); + kopiereVon(sT,original,0,original^.params.xSteps-1); end; -procedure tLLWerte.kopiereVon(st: boolean; original: pTLLWerteExtended); +procedure tLLWerte.kopiereVon(sT: boolean; original: pTLLWerteExtended); begin - kopiereVon(st,original,0,original^.params.xsteps-1); + kopiereVon(sT,original,0,original^.params.xSteps-1); end; -procedure tLLWerte.kopiereVon(st: boolean; original: pTLLWerteSingle; xmin,xmax: longint); +procedure tLLWerte.kopiereVon(sT: boolean; original: pTLLWerteSingle; xMin,xMax: longint); begin - kopiereVon(st,original,xmin,xmax,0,original^.params.tsiz-1); + kopiereVon(sT,original,xMin,xMax,0,original^.params.tSiz-1); end; -procedure tLLWerte.kopiereVon(st: boolean; original: pTLLWerteDouble; xmin,xmax: longint); +procedure tLLWerte.kopiereVon(sT: boolean; original: pTLLWerteDouble; xMin,xMax: longint); begin - kopiereVon(st,original,xmin,xmax,0,original^.params.tsiz-1); + kopiereVon(sT,original,xMin,xMax,0,original^.params.tSiz-1); end; -procedure tLLWerte.kopiereVon(st: boolean; original: pTLLWerteExtended; xmin,xmax: longint); +procedure tLLWerte.kopiereVon(sT: boolean; original: pTLLWerteExtended; xMin,xMax: longint); begin - kopiereVon(st,original,xmin,xmax,0,original^.params.tsiz-1); + kopiereVon(sT,original,xMin,xMax,0,original^.params.tSiz-1); end; -procedure tLLWerte.kopiereVon(st: boolean; original: pTLLWerteSingle; xmin,xmax,tmin,tmax: longint); +procedure tLLWerte.kopiereVon(sT: boolean; original: pTLLWerteSingle; xMin,xMax,tMin,tMax: longint); var i,j: longint; begin inherited create; - tmax:=min(tmax,original^.params.tsiz-1); - tmin:=max(tmin,0); - params.tsiz:=tmax+1-tmin; - xmax:=min(xmax,original^.params.xsteps-1); - xmin:=max(xmin,0); - params.xsteps:=xmax+1-xmin; + tMax:=min(tMax,original^.params.tSiz-1); + tMin:=max(tMin,0); + params.tSiz:=tMax+1-tMin; + xMax:=min(xMax,original^.params.xSteps-1); + xMin:=max(xMin,0); + params.xSteps:=xMax+1-xMin; zerstoereTransformationWennObsolet(params.transformationen); - params.transformationen:=tKoordinatenAusschnitt.create(original^.params.transformationen,xmin,xmax,tmin,tmax); + params.transformationen:=tKoordinatenAusschnitt.create(original^.params.transformationen,xMin,xMax,tMin,tMax); params.maxW:=0; params.minW:=0; params.np:=original^.params.np; params.beta:=original^.params.beta; params.refreshKnownValues; - if not st then begin - holeRam(0); - for i:=xmin to xmax do - for j:=tmin to tmax do - werte[i-xmin+(j-tmin)*params.xsteps]:=original^.werte[i+j*original^.params.xsteps]; + if not sT then begin + holeRAM(0); + for i:=xMin to xMax do + for j:=tMin to tMax do + werte[i-xMin+(j-tMin)*params.xSteps]:=original^.werte[i+j*original^.params.xSteps]; end; end; -procedure tLLWerte.kopiereVon(st: boolean; original: pTLLWerteDouble; xmin,xmax,tmin,tmax: longint); +procedure tLLWerte.kopiereVon(sT: boolean; original: pTLLWerteDouble; xMin,xMax,tMin,tMax: longint); var i,j: longint; begin inherited create; - tmax:=min(tmax,original^.params.tsiz-1); - tmin:=max(tmin,0); - params.tsiz:=tmax+1-tmin; - xmax:=min(xmax,original^.params.xsteps-1); - xmin:=max(xmin,0); - params.xsteps:=xmax+1-xmin; + tMax:=min(tMax,original^.params.tSiz-1); + tMin:=max(tMin,0); + params.tSiz:=tMax+1-tMin; + xMax:=min(xMax,original^.params.xSteps-1); + xMin:=max(xMin,0); + params.xSteps:=xMax+1-xMin; zerstoereTransformationWennObsolet(params.transformationen); - params.transformationen:=tKoordinatenAusschnitt.create(original^.params.transformationen,xmin,xmax,tmin,tmax); + params.transformationen:=tKoordinatenAusschnitt.create(original^.params.transformationen,xMin,xMax,tMin,tMax); params.maxW:=0; params.minW:=0; params.np:=original^.params.np; params.beta:=original^.params.beta; params.refreshKnownValues; - if not st then begin - holeRam(0); - for i:=xmin to xmax do - for j:=tmin to tmax do - werte[i-xmin+(j-tmin)*params.xsteps]:=original^.werte[i+j*original^.params.xsteps]; + if not sT then begin + holeRAM(0); + for i:=xMin to xMax do + for j:=tMin to tMax do + werte[i-xMin+(j-tMin)*params.xSteps]:=original^.werte[i+j*original^.params.xSteps]; end; end; -procedure tLLWerte.kopiereVon(st: boolean; original: pTLLWerteExtended; xmin,xmax,tmin,tmax: longint); +procedure tLLWerte.kopiereVon(sT: boolean; original: pTLLWerteExtended; xMin,xMax,tMin,tMax: longint); var i,j: longint; begin inherited create; - tmax:=min(tmax,original^.params.tsiz-1); - tmin:=max(tmin,0); - params.tsiz:=tmax+1-tmin; - xmax:=min(xmax,original^.params.xsteps-1); - xmin:=max(xmin,0); - params.xsteps:=xmax+1-xmin; + tMax:=min(tMax,original^.params.tSiz-1); + tMin:=max(tMin,0); + params.tSiz:=tMax+1-tMin; + xMax:=min(xMax,original^.params.xSteps-1); + xMin:=max(xMin,0); + params.xSteps:=xMax+1-xMin; zerstoereTransformationWennObsolet(params.transformationen); - params.transformationen:=tKoordinatenAusschnitt.create(original^.params.transformationen,xmin,xmax,tmin,tmax); + params.transformationen:=tKoordinatenAusschnitt.create(original^.params.transformationen,xMin,xMax,tMin,tMax); params.maxW:=0; params.minW:=0; params.np:=original^.params.np; params.beta:=original^.params.beta; params.refreshKnownValues; - if not st then begin - holeRam(0); - for i:=xmin to xmax do - for j:=tmin to tmax do - werte[i-xmin+(j-tmin)*params.xsteps]:=original^.werte[i+j*original^.params.xsteps]; + if not sT then begin + holeRAM(0); + for i:=xMin to xMax do + for j:=tMin to tMax do + werte[i-xMin+(j-tMin)*params.xSteps]:=original^.werte[i+j*original^.params.xSteps]; end; end; @@ -323,8 +325,8 @@ begin inherited create; for i:=qxmin to qxmax do for j:=qtmin to qtmax do - werte[i-qxmin+zxmin + (j-qtmin+ztmin)*params.xsteps]:= - original^.werte[i+j*original^.params.xsteps]; + werte[i-qxmin+zxmin + (j-qtmin+ztmin)*params.xSteps]:= + original^.werte[i+j*original^.params.xSteps]; end; procedure tLLWerte.kopiereVonNach(original: pTLLWerteDouble; qxmin,qxmax,qtmin,qtmax,zxmin,ztmin: longint); @@ -334,8 +336,8 @@ begin inherited create; for i:=qxmin to qxmax do for j:=qtmin to qtmax do - werte[i-qxmin+zxmin + (j-qtmin+ztmin)*params.xsteps]:= - original^.werte[i+j*original^.params.xsteps]; + werte[i-qxmin+zxmin + (j-qtmin+ztmin)*params.xSteps]:= + original^.werte[i+j*original^.params.xSteps]; end; procedure tLLWerte.kopiereVonNach(original: pTLLWerteExtended; qxmin,qxmax,qtmin,qtmax,zxmin,ztmin: longint); @@ -345,125 +347,125 @@ begin inherited create; for i:=qxmin to qxmax do for j:=qtmin to qtmax do - werte[i-qxmin+zxmin + (j-qtmin+ztmin)*params.xsteps]:= - original^.werte[i+j*original^.params.xsteps]; + werte[i-qxmin+zxmin + (j-qtmin+ztmin)*params.xSteps]:= + original^.werte[i+j*original^.params.xSteps]; end; -procedure tLLWerte.kopiereVerzerrt(original: pTLLWerteSingle; ZPs: tIntPointArray; ZGs: tExtPointArray; ZAs: tExtendedArray; xmin,xmax,tmin,tmax: longint; vb,nb: tTransformation; va,na: longint); +procedure tLLWerte.kopiereVerzerrt(original: pTLLWerteSingle; zPs: tIntPointArray; zGs: tExtPointArray; zAs: tExtendedArray; xMin,xMax,tMin,tMax: longint; vB,nB: tTransformation; vA,nA: longint); var i,j,k: longint; tmp: extended; begin - for i:=tmin to tmax do - for j:=xmin to xmax do - werte[j+i*params.xsteps]:=0; - for i:=0 to length(ZPs)-1 do + for i:=tMin to tMax do + for j:=xMin to xMax do + werte[j+i*params.xSteps]:=0; + for i:=0 to length(zPs)-1 do for j:=0 to 1 do for k:=0 to 1 do - if (ZPs[i]['x']+j>=xmin) and (ZPs[i]['x']+j<=xmax) and - (ZPs[i]['y']+k>=tmin) and (ZPs[i]['y']+k<=tmax) then begin + if (zPs[i]['x']+j>=xMin) and (zPs[i]['x']+j<=xMax) and + (zPs[i]['y']+k>=tMin) and (zPs[i]['y']+k<=tMax) then begin tmp:=original^.werte[i]; - if (va>0) or (na>0) then + if (vA>0) or (nA>0) then tmp:=(tmp-original^.params.minW)/(original^.params.maxW-original^.params.minW); - if va>0 then - vb.transformiereWert(tmp,va-1); - tmp:=tmp * (ZGs[i]['x'] * (2*j-1) + 1-j) * (ZGs[i]['y'] * (2*k-1) + 1-k); - werte[ZPs[i]['x']+j + (ZPs[i]['y']+k)*params.xsteps]:= - werte[ZPs[i]['x']+j + (ZPs[i]['y']+k)*params.xsteps] + + if vA>0 then + vB.transformiereWert(tmp,vA-1); + tmp:=tmp * (zGs[i]['x'] * (2*j-1) + 1-j) * (zGs[i]['y'] * (2*k-1) + 1-k); + werte[zPs[i]['x']+j + (zPs[i]['y']+k)*params.xSteps]:= + werte[zPs[i]['x']+j + (zPs[i]['y']+k)*params.xSteps] + tmp; end; - for i:=tmin to tmax do - for j:=xmin to xmax do begin - tmp:=werte[j + i*params.xsteps] / ZAs[j + i*params.xsteps]; - if na>0 then - tmp:=nb.transformiereWert(tmp,na-1); - werte[j + i*params.xsteps]:=tmp; + for i:=tMin to tMax do + for j:=xMin to xMax do begin + tmp:=werte[j + i*params.xSteps] / zAs[j + i*params.xSteps]; + if nA>0 then + tmp:=nB.transformiereWert(tmp,nA-1); + werte[j + i*params.xSteps]:=tmp; end; end; -procedure tLLWerte.kopiereVerzerrt(original: pTLLWerteDouble; ZPs: tIntPointArray; ZGs: tExtPointArray; ZAs: tExtendedArray; xmin,xmax,tmin,tmax: longint; vb,nb: tTransformation; va,na: longint); +procedure tLLWerte.kopiereVerzerrt(original: pTLLWerteDouble; zPs: tIntPointArray; zGs: tExtPointArray; zAs: tExtendedArray; xMin,xMax,tMin,tMax: longint; vB,nB: tTransformation; vA,nA: longint); var i,j,k: longint; tmp: extended; begin - for i:=tmin to tmax do - for j:=xmin to xmax do - werte[j+i*params.xsteps]:=0; - for i:=0 to length(ZPs)-1 do + for i:=tMin to tMax do + for j:=xMin to xMax do + werte[j+i*params.xSteps]:=0; + for i:=0 to length(zPs)-1 do for j:=0 to 1 do for k:=0 to 1 do - if (ZPs[i]['x']+j>=xmin) and (ZPs[i]['x']+j<=xmax) and - (ZPs[i]['y']+k>=tmin) and (ZPs[i]['y']+k<=tmax) then begin + if (zPs[i]['x']+j>=xMin) and (zPs[i]['x']+j<=xMax) and + (zPs[i]['y']+k>=tMin) and (zPs[i]['y']+k<=tMax) then begin tmp:=original^.werte[i]; - if (va>0) or (na>0) then + if (vA>0) or (nA>0) then tmp:=(tmp-original^.params.minW)/(original^.params.maxW-original^.params.minW); - if va>0 then - vb.transformiereWert(tmp,va-1); - tmp:=tmp * (ZGs[i]['x'] * (2*j-1) + 1-j) * (ZGs[i]['y'] * (2*k-1) + 1-k); - werte[ZPs[i]['x']+j + (ZPs[i]['y']+k)*params.xsteps]:= - werte[ZPs[i]['x']+j + (ZPs[i]['y']+k)*params.xsteps] + + if vA>0 then + vB.transformiereWert(tmp,vA-1); + tmp:=tmp * (zGs[i]['x'] * (2*j-1) + 1-j) * (zGs[i]['y'] * (2*k-1) + 1-k); + werte[zPs[i]['x']+j + (zPs[i]['y']+k)*params.xSteps]:= + werte[zPs[i]['x']+j + (zPs[i]['y']+k)*params.xSteps] + tmp; end; - for i:=tmin to tmax do - for j:=xmin to xmax do begin - tmp:=werte[j + i*params.xsteps] / ZAs[j + i*params.xsteps]; - if na>0 then - tmp:=nb.transformiereWert(tmp,na-1); - werte[j + i*params.xsteps]:=tmp; + for i:=tMin to tMax do + for j:=xMin to xMax do begin + tmp:=werte[j + i*params.xSteps] / zAs[j + i*params.xSteps]; + if nA>0 then + tmp:=nB.transformiereWert(tmp,nA-1); + werte[j + i*params.xSteps]:=tmp; end; end; -procedure tLLWerte.kopiereVerzerrt(original: pTLLWerteExtended; ZPs: tIntPointArray; ZGs: tExtPointArray; ZAs: tExtendedArray; xmin,xmax,tmin,tmax: longint; vb,nb: tTransformation; va,na: longint); +procedure tLLWerte.kopiereVerzerrt(original: pTLLWerteExtended; zPs: tIntPointArray; zGs: tExtPointArray; zAs: tExtendedArray; xMin,xMax,tMin,tMax: longint; vB,nB: tTransformation; vA,nA: longint); var i,j,k: longint; tmp: extended; begin - for i:=tmin to tmax do - for j:=xmin to xmax do - werte[j+i*params.xsteps]:=0; - for i:=0 to length(ZPs)-1 do + for i:=tMin to tMax do + for j:=xMin to xMax do + werte[j+i*params.xSteps]:=0; + for i:=0 to length(zPs)-1 do for j:=0 to 1 do for k:=0 to 1 do - if (ZPs[i]['x']+j>=xmin) and (ZPs[i]['x']+j<=xmax) and - (ZPs[i]['y']+k>=tmin) and (ZPs[i]['y']+k<=tmax) then begin + if (zPs[i]['x']+j>=xMin) and (zPs[i]['x']+j<=xMax) and + (zPs[i]['y']+k>=tMin) and (zPs[i]['y']+k<=tMax) then begin tmp:=original^.werte[i]; - if (va>0) or (na>0) then + if (vA>0) or (nA>0) then tmp:=(tmp-original^.params.minW)/(original^.params.maxW-original^.params.minW); - if va>0 then - vb.transformiereWert(tmp,va-1); - tmp:=tmp * (ZGs[i]['x'] * (2*j-1) + 1-j) * (ZGs[i]['y'] * (2*k-1) + 1-k); - werte[ZPs[i]['x']+j + (ZPs[i]['y']+k)*params.xsteps]:= - werte[ZPs[i]['x']+j + (ZPs[i]['y']+k)*params.xsteps] + + if vA>0 then + vB.transformiereWert(tmp,vA-1); + tmp:=tmp * (zGs[i]['x'] * (2*j-1) + 1-j) * (zGs[i]['y'] * (2*k-1) + 1-k); + werte[zPs[i]['x']+j + (zPs[i]['y']+k)*params.xSteps]:= + werte[zPs[i]['x']+j + (zPs[i]['y']+k)*params.xSteps] + tmp; end; - for i:=tmin to tmax do - for j:=xmin to xmax do begin - tmp:=werte[j + i*params.xsteps] / ZAs[j + i*params.xsteps]; - if na>0 then - tmp:=nb.transformiereWert(tmp,na-1); - werte[j + i*params.xsteps]:=tmp; + for i:=tMin to tMax do + for j:=xMin to xMax do begin + tmp:=werte[j + i*params.xSteps] / zAs[j + i*params.xSteps]; + if nA>0 then + tmp:=nB.transformiereWert(tmp,nA-1); + werte[j + i*params.xSteps]:=tmp; end; end; -procedure tLLWerte.kopiereLOVerzerrt(original: pTLLWerteSingle; xmin,xmax,tmin,tmax: longint; verhHo,verhVe: extended); overload; +procedure tLLWerte.kopiereLOVerzerrt(original: pTLLWerteSingle; xMin,xMax,tMin,tMax: longint; verhHo,verhVe: extended); overload; var i,j,hV,hB,vV,vB,h,v: int64; begin - writeln(xmin,' .. ',xmax,' x ',tmin,' .. ',tmax); - for i:=tmin to tmax do begin + writeln(xMin,' .. ',xMax,' x ',tMin,' .. ',tMax); + for i:=tMin to tMax do begin if verhVe>0 then begin vV:=max( 0, round( - (params.tsiz-1-i+0.5)/ - (1 + (i+0.5)/verhVe/(params.tsiz-1)) + (params.tSiz-1-i+0.5)/ + (1 + (i+0.5)/verhVe/(params.tSiz-1)) ) ); vB:=min( - params.tsiz-1, + params.tSiz-1, round( - (params.tsiz-1-i+0.5)/ - (1 + (i-0.5)/verhVe/(params.tsiz-1)) + (params.tSiz-1-i+0.5)/ + (1 + (i-0.5)/verhVe/(params.tSiz-1)) ) ); end @@ -471,20 +473,20 @@ begin vV:=i; vB:=i; end; - for j:=xmin to xmax do begin + for j:=xMin to xMax do begin if verhHo>0 then begin hV:=max( 0, round( - (params.xsteps-1-(j+0.5))/ - (1 + (j+0.5)/verhHo/(params.xsteps-1)) + (params.xSteps-1-(j+0.5))/ + (1 + (j+0.5)/verhHo/(params.xSteps-1)) ) ); hB:=min( - params.xsteps-1, + params.xSteps-1, round( - (params.xsteps-1-(j-0.5))/ - (1 + (j-0.5)/verhHo/(params.xsteps-1)) + (params.xSteps-1-(j-0.5))/ + (1 + (j-0.5)/verhHo/(params.xSteps-1)) ) ); end @@ -492,38 +494,38 @@ begin hV:=j; hB:=j; end; - werte[j+i*params.xsteps]:=0; + werte[j+i*params.xSteps]:=0; for h:=hV to hB do for v:=vV to vB do - werte[j+i*params.xsteps]:= - werte[j+i*params.xsteps]+ - original^.werte[h+v*params.xsteps]; + werte[j+i*params.xSteps]:= + werte[j+i*params.xSteps]+ + original^.werte[h+v*params.xSteps]; if (hB>=hV) and (vB>=vV) then - werte[j+i*params.xsteps]:= - werte[j+i*params.xsteps] / (hB+1-hV) / (vB+1-vV); + werte[j+i*params.xSteps]:= + werte[j+i*params.xSteps] / (hB+1-hV) / (vB+1-vV); end; end; end; -procedure tLLWerte.kopiereLOVerzerrt(original: pTLLWerteDouble; xmin,xmax,tmin,tmax: longint; verhHo,verhVe: extended); overload; +procedure tLLWerte.kopiereLOVerzerrt(original: pTLLWerteDouble; xMin,xMax,tMin,tMax: longint; verhHo,verhVe: extended); overload; var i,j,hV,hB,vV,vB,h,v: int64; begin - writeln(xmin,' .. ',xmax,' x ',tmin,' .. ',tmax); - for i:=tmin to tmax do begin + writeln(xMin,' .. ',xMax,' x ',tMin,' .. ',tMax); + for i:=tMin to tMax do begin if verhVe>0 then begin vV:=max( 0, round( - (params.tsiz-1-i+0.5)/ - (1 + (i+0.5)/verhVe/(params.tsiz-1)) + (params.tSiz-1-i+0.5)/ + (1 + (i+0.5)/verhVe/(params.tSiz-1)) ) ); vB:=min( - params.tsiz-1, + params.tSiz-1, round( - (params.tsiz-1-i+0.5)/ - (1 + (i-0.5)/verhVe/(params.tsiz-1)) + (params.tSiz-1-i+0.5)/ + (1 + (i-0.5)/verhVe/(params.tSiz-1)) ) ); end @@ -531,20 +533,20 @@ begin vV:=i; vB:=i; end; - for j:=xmin to xmax do begin + for j:=xMin to xMax do begin if verhHo>0 then begin hV:=max( 0, round( - (params.xsteps-1-(j+0.5))/ - (1 + (j+0.5)/verhHo/(params.xsteps-1)) + (params.xSteps-1-(j+0.5))/ + (1 + (j+0.5)/verhHo/(params.xSteps-1)) ) ); hB:=min( - params.xsteps-1, + params.xSteps-1, round( - (params.xsteps-1-(j-0.5))/ - (1 + (j-0.5)/verhHo/(params.xsteps-1)) + (params.xSteps-1-(j-0.5))/ + (1 + (j-0.5)/verhHo/(params.xSteps-1)) ) ); end @@ -552,38 +554,38 @@ begin hV:=j; hB:=j; end; - werte[j+i*params.xsteps]:=0; + werte[j+i*params.xSteps]:=0; for h:=hV to hB do for v:=vV to vB do - werte[j+i*params.xsteps]:= - werte[j+i*params.xsteps]+ - original^.werte[h+v*params.xsteps]; + werte[j+i*params.xSteps]:= + werte[j+i*params.xSteps]+ + original^.werte[h+v*params.xSteps]; if (hB>=hV) and (vB>=vV) then - werte[j+i*params.xsteps]:= - werte[j+i*params.xsteps] / (hB+1-hV) / (vB+1-vV); + werte[j+i*params.xSteps]:= + werte[j+i*params.xSteps] / (hB+1-hV) / (vB+1-vV); end; end; end; -procedure tLLWerte.kopiereLOVerzerrt(original: pTLLWerteExtended; xmin,xmax,tmin,tmax: longint; verhHo,verhVe: extended); overload; +procedure tLLWerte.kopiereLOVerzerrt(original: pTLLWerteExtended; xMin,xMax,tMin,tMax: longint; verhHo,verhVe: extended); overload; var i,j,hV,hB,vV,vB,h,v: int64; begin - writeln(xmin,' .. ',xmax,' x ',tmin,' .. ',tmax); - for i:=tmin to tmax do begin + writeln(xMin,' .. ',xMax,' x ',tMin,' .. ',tMax); + for i:=tMin to tMax do begin if verhVe>0 then begin vV:=max( 0, round( - (params.tsiz-1-i+0.5)/ - (1 + (i+0.5)/verhVe/(params.tsiz-1)) + (params.tSiz-1-i+0.5)/ + (1 + (i+0.5)/verhVe/(params.tSiz-1)) ) ); vB:=min( - params.tsiz-1, + params.tSiz-1, round( - (params.tsiz-1-i+0.5)/ - (1 + (i-0.5)/verhVe/(params.tsiz-1)) + (params.tSiz-1-i+0.5)/ + (1 + (i-0.5)/verhVe/(params.tSiz-1)) ) ); end @@ -591,20 +593,20 @@ begin vV:=i; vB:=i; end; - for j:=xmin to xmax do begin + for j:=xMin to xMax do begin if verhHo>0 then begin hV:=max( 0, round( - (params.xsteps-1-(j+0.5))/ - (1 + (j+0.5)/verhHo/(params.xsteps-1)) + (params.xSteps-1-(j+0.5))/ + (1 + (j+0.5)/verhHo/(params.xSteps-1)) ) ); hB:=min( - params.xsteps-1, + params.xSteps-1, round( - (params.xsteps-1-(j-0.5))/ - (1 + (j-0.5)/verhHo/(params.xsteps-1)) + (params.xSteps-1-(j-0.5))/ + (1 + (j-0.5)/verhHo/(params.xSteps-1)) ) ); end @@ -612,50 +614,50 @@ begin hV:=j; hB:=j; end; - werte[j+i*params.xsteps]:=0; + werte[j+i*params.xSteps]:=0; for h:=hV to hB do for v:=vV to vB do - werte[j+i*params.xsteps]:= - werte[j+i*params.xsteps]+ - original^.werte[h+v*params.xsteps]; + werte[j+i*params.xSteps]:= + werte[j+i*params.xSteps]+ + original^.werte[h+v*params.xSteps]; if (hB>=hV) and (vB>=vV) then - werte[j+i*params.xsteps]:= - werte[j+i*params.xsteps] / (hB+1-hV) / (vB+1-vV); + werte[j+i*params.xSteps]:= + werte[j+i*params.xSteps] / (hB+1-hV) / (vB+1-vV); end; end; end; destructor tLLWerte.destroy; begin - setlength(werte,0); + setLength(werte,0); inherited destroy; end; function tLLWerte.liesDateien(dateien: tGenerischeInputDateiInfoArray): boolean; var - i,j,k,l,tmpi,etsiz,spAnz,br: longint; + i,j,k,l,tmpI,etsiz,spAnz,br: longint; f: file; - tmps: single; - tmpd: double; - tmpe,Zeit: extended; - sa: tSingleArray; + tmpS: single; + tmpD: double; + tmpE,Zeit: extended; + sA: tSingleArray; da: tDoubleArray; ea: tExtendedArray; - ipp: tProcess; + iPP: tProcess; buf: tByteArray; etwasGelesen: boolean; s: string; begin result:=false; gibAus('... Dateien einlesen ...',1); - zeit:=now; - tmpi:=0; - tmps:=0; - tmpd:=0; + Zeit:=now; + tmpI:=0; + tmpS:=0; + tmpD:=0; etsiz:=0; spAnz:=-1; for i:=0 to length(dateien)-1 do begin - gibAus(' '+dateien[i].Name,1); + gibAus(' '+dateien[i].name,1); etwasGelesen:=false; if dateien[i] is tPipeInputDateiInfo then begin if ((dateien[i] as tPipeInputDateiInfo).bytesPerSample<>4) or @@ -663,42 +665,42 @@ begin gibAus('Ich kann nur vier Bytes mit einem mal als Integer interpretiert aus einer Pipe einlesen!',3); exit; end; - tmpe:=power(2,-31); - ipp:=tProcess.create(nil); - ipp.Options:=ipp.Options + [poUsePipes]; - ipp.Executable:=(dateien[i] as tPipeInputDateiInfo).Executable; - ipp.Parameters.Text:=(dateien[i] as tPipeInputDateiInfo).ParametersText; - ipp.execute; - setlength(buf,0); + tmpE:=power(2,-31); + iPP:=tProcess.create(nil); + iPP.options:=iPP.options + [poUsePipes]; + iPP.executable:=(dateien[i] as tPipeInputDateiInfo).executable; + iPP.parameters.text:=(dateien[i] as tPipeInputDateiInfo).parametersText; + iPP.execute; + setLength(buf,0); br:=0; - while ipp.running or (ipp.Output.NumBytesAvailable>0) do begin - if ipp.Output.NumBytesAvailable > 0 then begin - if br+ipp.Output.NumBytesAvailable>=length(buf) then - setlength(buf,br+ipp.Output.NumBytesAvailable+65536*1024); - tmpi:=ipp.Output.Read(buf[br],min(ipp.Output.NumBytesAvailable,length(buf)-br)); - if ((br+tmpi) shr 24) > (br shr 24) then gibAus(inttostr(br+tmpi)+' von '+inttostr(dateien[i].tsiz*dateien[i].xsteps*4)+' Bytes bisher gelesen ('+floattostrtrunc((br+tmpi)/(dateien[i].tsiz*dateien[i].xsteps*4)*100,2,true)+'%).',1); - br:=br+tmpi; + while iPP.running or (iPP.output.numBytesAvailable>0) do begin + if iPP.output.numBytesAvailable > 0 then begin + if br+iPP.output.numBytesAvailable>=length(buf) then + setLength(buf,br+iPP.output.numBytesAvailable+65536*1024); + tmpI:=iPP.output.read(buf[br],min(iPP.output.numBytesAvailable,length(buf)-br)); + if ((br+tmpI) shr 24) > (br shr 24) then gibAus(intToStr(br+tmpI)+' von '+intToStr(dateien[i].tSiz*dateien[i].xSteps*4)+' Bytes bisher gelesen ('+floattostrtrunc((br+tmpI)/(dateien[i].tSiz*dateien[i].xSteps*4)*100,2,true)+'%).',1); + br:=br+tmpI; end else sleep(10); end; - ipp.free; - gibAus('insgesamt '+inttostr(br div 1024 div 1024)+' MB gelesen.',1); - setlength(buf,br); - if dateien[i].tsiz*dateien[i].xsteps*4>length(buf) then begin - gibAus('Ich habe '+inttostr(length(buf))+' Bytes aus der Pipe gelesen, anstelle von wenigstens '+inttostr(dateien[i].tsiz*dateien[i].xsteps*4)+', wie erwartet!',3); - setlength(buf,0); + iPP.free; + gibAus('insgesamt '+intToStr(br div 1024 div 1024)+' MB gelesen.',1); + setLength(buf,br); + if dateien[i].tSiz*dateien[i].xSteps*4>length(buf) then begin + gibAus('Ich habe '+intToStr(length(buf))+' Bytes aus der Pipe gelesen, anstelle von wenigstens '+intToStr(dateien[i].tSiz*dateien[i].xSteps*4)+', wie erwartet!',3); + setLength(buf,0); exit; end; - tmpi:=length(buf)-4*dateien[i].tsiz*dateien[i].xsteps; // der Offset des ersten Daten-Wortes - for j:=dateien[i].tmin to dateien[i].tmax do - for k:=dateien[i].xmin to dateien[i].xmax do - werte[dateien[i].t0abs+ k-dateien[i].xmin + (j-dateien[i].tmin)*(dateien[i].xmax-dateien[i].xmin+1)]:= - int32((((((buf[tmpi+3+4*(k+j*dateien[i].xsteps)] shl 8) or - buf[tmpi+2+4*(k+j*dateien[i].xsteps)]) shl 8) or - buf[tmpi+1+4*(k+j*dateien[i].xsteps)]) shl 8) or - buf[tmpi+4*(k+j*dateien[i].xsteps)]) * tmpe; - setlength(buf,0); + tmpI:=length(buf)-4*dateien[i].tSiz*dateien[i].xSteps; // der Offset des ersten Daten-Wortes + for j:=dateien[i].tMin to dateien[i].tMax do + for k:=dateien[i].xMin to dateien[i].xMax do + werte[dateien[i].t0Abs+ k-dateien[i].xMin + (j-dateien[i].tMin)*(dateien[i].xMax-dateien[i].xMin+1)]:= + int32((((((buf[tmpI+3+4*(k+j*dateien[i].xSteps)] shl 8) or + buf[tmpI+2+4*(k+j*dateien[i].xSteps)]) shl 8) or + buf[tmpI+1+4*(k+j*dateien[i].xSteps)]) shl 8) or + buf[tmpI+4*(k+j*dateien[i].xSteps)]) * tmpE; + setLength(buf,0); if etwasGelesen then begin gibAus('Ich habe diese Runde schon Daten gelesen!',3); exit; @@ -707,77 +709,77 @@ begin end; if (dateien[i] is tSpaceTimeInputDateiInfo) or (dateien[i] is tTraceInputDateiInfo) then begin - assign(f,dateien[i].Name); + assign(f,dateien[i].name); reset(f,1); - blockread(f,tmpi,sizeof(integer)); - dec(tmpi); - if tmpi-round(params.tstart/dateien[i].groeszenFaktor)<>i then begin - gibAus('Datei '''+dateien[i].Name+''' kommt nicht an '+inttostr(i)+'-ter Stelle, wie sie sollte, sondern an '+inttostr(tmpi-round(params.tstart/dateien[i].groeszenFaktor))+'-ter.',3); + blockread(f,tmpI,sizeOf(integer)); + dec(tmpI); + if tmpI-round(params.tStart/dateien[i].groeszenFaktor)<>i then begin + gibAus('Datei '''+dateien[i].name+''' kommt nicht an '+intToStr(i)+'-ter Stelle, wie sie sollte, sondern an '+intToStr(tmpI-round(params.tStart/dateien[i].groeszenFaktor))+'-ter.',3); close(f); exit; end; if dateien[i] is tTraceInputDateiInfo then begin - blockread(f,tmpi,sizeof(integer)); // #Traces - spAnz:=tmpi; + blockread(f,tmpI,sizeOf(integer)); // #Traces + spAnz:=tmpI; end; - blockread(f,etsiz,sizeof(integer)); + blockread(f,etsiz,sizeOf(integer)); if dateien[i] is tSpaceTimeInputDateiInfo then begin for j:=0 to etsiz-1 do begin - case Dateien[i].Genauigkeit of + case dateien[i].genauigkeit of gSingle: begin - blockread(f,tmps,sizeof(single)); // xstart - tmpe:=tmps; + blockread(f,tmpS,sizeOf(single)); // xStart + tmpE:=tmpS; end; gDouble: begin - blockread(f,tmpd,sizeof(double)); // xstart - tmpe:=tmpd; + blockread(f,tmpD,sizeOf(double)); // xStart + tmpE:=tmpD; end; gExtended: - blockread(f,tmpe,sizeof(extended)); // xstart + blockread(f,tmpE,sizeOf(extended)); // xStart end{of Case}; - tmpe:=tmpe*dateien[i].groeszenFaktor; - if j=0 then params.transformationen.xstart:=tmpe; - if tmpe<>params.transformationen.xstart then begin - gibAus('Falscher linker Rand in '''+dateien[i].Name+''' im Schritt '+inttostr(j)+', nämlich '+myfloattostr(tmpe)+' statt '+myfloattostr(params.transformationen.xstart)+'!',3); + tmpE:=tmpE*dateien[i].groeszenFaktor; + if j=0 then params.transformationen.xStart:=tmpE; + if tmpE<>params.transformationen.xStart then begin + gibAus('Falscher linker Rand in '''+dateien[i].name+''' im Schritt '+intToStr(j)+', nämlich '+myFloatToStr(tmpE)+' statt '+myFloatToStr(params.transformationen.xStart)+'!',3); close(f); exit; end; - case Dateien[i].Genauigkeit of + case dateien[i].genauigkeit of gSingle: begin - blockread(f,tmps,sizeof(single)); // xstop - tmpe:=tmps; + blockread(f,tmpS,sizeOf(single)); // xStop + tmpE:=tmpS; end; gDouble: begin - blockread(f,tmpd,sizeof(double)); // xstop - tmpe:=tmpd; + blockread(f,tmpD,sizeOf(double)); // xStop + tmpE:=tmpD; end; gExtended: - blockread(f,tmpe,sizeof(extended)); // xstop + blockread(f,tmpE,sizeOf(extended)); // xStop end{of Case}; - tmpe:=tmpe*dateien[i].groeszenFaktor; - if j=0 then params.transformationen.xstop:=tmpe; - if tmpe<>params.transformationen.xstop then begin - gibAus('Falscher rechter Rand in '''+dateien[i].Name+''' im Schritt '+inttostr(j)+', nämlich '+myfloattostr(tmpe)+' statt '+myfloattostr(params.transformationen.xstop)+'!',3); + tmpE:=tmpE*dateien[i].groeszenFaktor; + if j=0 then params.transformationen.xStop:=tmpE; + if tmpE<>params.transformationen.xStop then begin + gibAus('Falscher rechter Rand in '''+dateien[i].name+''' im Schritt '+intToStr(j)+', nämlich '+myFloatToStr(tmpE)+' statt '+myFloatToStr(params.transformationen.xStop)+'!',3); close(f); exit; end; - blockread(f,tmpi,sizeof(integer)); // xsteps - if tmpi<>params.xsteps then begin - gibAus('Falsche Anzahl an x-Schritten in '''+dateien[i].Name+''' im Schritt '+inttostr(j)+', nämlich '+inttostr(tmpi)+' statt '+myfloattostr(params.xsteps)+'!',3); + blockread(f,tmpI,sizeOf(integer)); // xSteps + if tmpI<>params.xSteps then begin + gibAus('Falsche Anzahl an x-Schritten in '''+dateien[i].name+''' im Schritt '+intToStr(j)+', nämlich '+intToStr(tmpI)+' statt '+myFloatToStr(params.xSteps)+'!',3); close(f); exit; end; - if sizeof(wgen) = wertGroesze(Dateien[i].Genauigkeit) then - blockread(f,werte[(j+Dateien[i].t0abs)*params.xsteps],params.xsteps*sizeof(wgen)) + if sizeOf(wgen) = wertGroesze(dateien[i].genauigkeit) then + blockread(f,werte[(j+dateien[i].t0Abs)*params.xSteps],params.xSteps*sizeOf(wgen)) else begin - setlength(sa,params.xsteps); - blockread(f,sa[0],params.xsteps*sizeof(single)); - for k:=0 to params.xsteps-1 do - werte[(j+Dateien[i].t0abs)*params.xsteps+k]:=sa[k]; + setLength(sA,params.xSteps); + blockread(f,sA[0],params.xSteps*sizeOf(single)); + for k:=0 to params.xSteps-1 do + werte[(j+dateien[i].t0Abs)*params.xSteps+k]:=sA[k]; end; if power(dateien[i].gamma,3)/sqr(dateien[i].groeszenFaktor)<>1 then // gamma^3 als Skalierungsfaktor für Dichten ? - for k:=0 to params.xsteps-1 do - werte[(j+Dateien[i].t0abs)*params.xsteps+k]:=werte[(j+Dateien[i].t0abs)*params.xsteps+k]*power(dateien[i].gamma,3)/sqr(dateien[i].groeszenFaktor); + for k:=0 to params.xSteps-1 do + werte[(j+dateien[i].t0Abs)*params.xSteps+k]:=werte[(j+dateien[i].t0Abs)*params.xSteps+k]*power(dateien[i].gamma,3)/sqr(dateien[i].groeszenFaktor); end; if etwasGelesen then begin gibAus('Ich habe diese Runde schon Daten gelesen!',3); @@ -786,37 +788,37 @@ begin etwasGelesen:=true; end; if dateien[i] is tTraceInputDateiInfo then begin - case Dateien[i].Genauigkeit of + case dateien[i].genauigkeit of gSingle: begin - setlength(sa,etsiz); - setlength(da,0); - setlength(ea,0); + setLength(sA,etsiz); + setLength(da,0); + setLength(ea,0); end; gDouble: begin - setlength(sa,0); - setlength(da,etsiz); - setlength(ea,0); + setLength(sA,0); + setLength(da,etsiz); + setLength(ea,0); end; gExtended: begin - setlength(sa,0); - setlength(da,0); - setlength(ea,etsiz); + setLength(sA,0); + setLength(da,0); + setLength(ea,etsiz); end; end{of case}; for j:=0 to spAnz-1 do - case Dateien[i].Genauigkeit of + case dateien[i].genauigkeit of gSingle: begin - blockread(f,tmps,sizeof(single)); // x - if j=(Dateien[i] as tTraceInputDateiInfo).Spurnummer then begin - params.transformationen.xstop:=tmps; - params.transformationen.xstart:=params.xstop; + blockread(f,tmpS,sizeOf(single)); // x + if j=(dateien[i] as tTraceInputDateiInfo).spurNummer then begin + params.transformationen.xStop:=tmpS; + params.transformationen.xStart:=params.xStop; end; - for k:=0 to length(FeldgroeszenNamen)-1 do begin - blockread(f,sa[0],sizeof(single)*length(sa)); - if (j=(Dateien[i] as tTraceInputDateiInfo).Spurnummer) and - (k=(Dateien[i] as tTraceInputDateiInfo).Feldnummer) then begin - for l:=0 to length(sa)-1 do - werte[l+Dateien[i].t0abs]:=sa[l]*sqr(dateien[i].gamma)/sqr(dateien[i].groeszenFaktor); + for k:=0 to length(feldGroeszenNamen)-1 do begin + blockread(f,sA[0],sizeOf(single)*length(sA)); + if (j=(dateien[i] as tTraceInputDateiInfo).spurNummer) and + (k=(dateien[i] as tTraceInputDateiInfo).feldNummer) then begin + for l:=0 to length(sA)-1 do + werte[l+dateien[i].t0Abs]:=sA[l]*sqr(dateien[i].gamma)/sqr(dateien[i].groeszenFaktor); if etwasGelesen then begin gibAus('Ich habe diese Runde schon Daten gelesen!',3); exit; @@ -826,17 +828,17 @@ begin end; end; gDouble: begin - blockread(f,tmpd,sizeof(double)); // x - if j=(Dateien[i] as tTraceInputDateiInfo).Spurnummer then begin - params.transformationen.xstop:=tmpd; - params.transformationen.xstart:=params.xstop; + blockread(f,tmpD,sizeOf(double)); // x + if j=(dateien[i] as tTraceInputDateiInfo).spurNummer then begin + params.transformationen.xStop:=tmpD; + params.transformationen.xStart:=params.xStop; end; - for k:=0 to length(FeldgroeszenNamen)-1 do begin - blockread(f,da[0],sizeof(double)*length(da)); - if (j=(Dateien[i] as tTraceInputDateiInfo).Spurnummer) and - (k=(Dateien[i] as tTraceInputDateiInfo).Feldnummer) then begin + for k:=0 to length(feldGroeszenNamen)-1 do begin + blockread(f,da[0],sizeOf(double)*length(da)); + if (j=(dateien[i] as tTraceInputDateiInfo).spurNummer) and + (k=(dateien[i] as tTraceInputDateiInfo).feldNummer) then begin for l:=0 to length(da)-1 do - werte[l+dateien[i].t0abs]:=da[l]*sqr(dateien[i].gamma)/sqr(dateien[i].groeszenFaktor); + werte[l+dateien[i].t0Abs]:=da[l]*sqr(dateien[i].gamma)/sqr(dateien[i].groeszenFaktor); if etwasGelesen then begin gibAus('Ich habe diese Runde schon Daten gelesen!',3); exit; @@ -846,17 +848,17 @@ begin end; end; gExtended: begin - blockread(f,tmpe,sizeof(extended)); // x - if j=(Dateien[i] as tTraceInputDateiInfo).Spurnummer then begin - params.transformationen.xstop:=tmpe; - params.transformationen.xstart:=params.xstop; + blockread(f,tmpE,sizeOf(extended)); // x + if j=(dateien[i] as tTraceInputDateiInfo).spurNummer then begin + params.transformationen.xStop:=tmpE; + params.transformationen.xStart:=params.xStop; end; - for k:=0 to length(FeldgroeszenNamen)-1 do begin - blockread(f,ea[0],sizeof(extended)*length(ea)); - if (j=(Dateien[i] as tTraceInputDateiInfo).Spurnummer) and - (k=(Dateien[i] as tTraceInputDateiInfo).Feldnummer) then begin + for k:=0 to length(feldGroeszenNamen)-1 do begin + blockread(f,ea[0],sizeOf(extended)*length(ea)); + if (j=(dateien[i] as tTraceInputDateiInfo).spurNummer) and + (k=(dateien[i] as tTraceInputDateiInfo).feldNummer) then begin for l:=0 to length(ea)-1 do - werte[l+dateien[i].t0abs]:=ea[l]*sqr(dateien[i].gamma)/sqr(dateien[i].groeszenFaktor); + werte[l+dateien[i].t0Abs]:=ea[l]*sqr(dateien[i].gamma)/sqr(dateien[i].groeszenFaktor); if etwasGelesen then begin gibAus('Ich habe diese Runde schon Daten gelesen!',3); exit; @@ -868,7 +870,7 @@ begin end{of Case}; end; if not eof(f) then begin - gibAus('Zu viele Daten in '''+dateien[i].Name+'''!',3); + gibAus('Zu viele Daten in '''+dateien[i].name+'''!',3); close(f); exit; end; @@ -880,50 +882,50 @@ begin close(f); exit; end; - assign(f,dateien[i].Name); + assign(f,dateien[i].name); reset(f,1); - seek(f,filepos(f) - + 4*wertGroesze(dateien[i].genauigkeit) // xstart,xstop,tstart,tstop - + 2*sizeof(longint)); // xsteps,tsiz - blockread(f,werte[0],params.xsteps*params.tsiz*wertGroesze(dateien[i].genauigkeit)); + seek(f,filePos(f) + + 4*wertGroesze(dateien[i].genauigkeit) // xStart,xStop,tStart,tStop + + 2*sizeOf(longint)); // xSteps,tSiz + blockread(f,werte[0],params.xSteps*params.tSiz*wertGroesze(dateien[i].genauigkeit)); close(f); etwasGelesen:=true; end; if dateien[i] is tSergeyInputDateiInfo then begin - etsiz:=Dateien[i].tsiz; + etsiz:=dateien[i].tSiz; - setlength(buf,sizeof(extended)*anzSergeyFelder); - tmpi:=wertGroesze(Dateien[i].Genauigkeit); + setLength(buf,sizeOf(extended)*anzSergeyFelder); + tmpI:=wertGroesze(dateien[i].genauigkeit); - assign(f,dateien[i].Name+'traces/traces.dat'); + assign(f,dateien[i].name+'traces/traces.dat'); reset(f,1); - setlength(buf,tmpi*anzSergeyFelder); + setLength(buf,tmpI*anzSergeyFelder); for j:=0 to etsiz-1 do begin - if (Dateien[i] as tSergeyInputDateiInfo).Feldnummer>0 then - blockread(f,buf[0],(Dateien[i] as tSergeyInputDateiInfo).Feldnummer*tmpi); + if (dateien[i] as tSergeyInputDateiInfo).feldNummer>0 then + blockread(f,buf[0],(dateien[i] as tSergeyInputDateiInfo).feldNummer*tmpI); case dateien[i].genauigkeit of gSingle: begin - blockread(f,tmps,tmpi); - werte[j]:=tmps; + blockread(f,tmpS,tmpI); + werte[j]:=tmpS; end; gDouble: begin - blockread(f,tmpd,tmpi); - werte[j]:=tmpd; + blockread(f,tmpD,tmpI); + werte[j]:=tmpD; end; gExtended: begin - blockread(f,tmpe,tmpi); - werte[j]:=tmpe; + blockread(f,tmpE,tmpI); + werte[j]:=tmpE; end; end{of Case}; - if (Dateien[i] as tSergeyInputDateiInfo).Feldnummer<anzSergeyFelder-1 then - blockread(f,buf[0],(anzSergeyFelder-1-(Dateien[i] as tSergeyInputDateiInfo).Feldnummer)*tmpi); + if (dateien[i] as tSergeyInputDateiInfo).feldNummer<anzSergeyFelder-1 then + blockread(f,buf[0],(anzSergeyFelder-1-(dateien[i] as tSergeyInputDateiInfo).feldNummer)*tmpI); end; - setlength(buf,0); + setLength(buf,0); if not eof(f) then begin - gibAus('Zu viele Daten in '''+dateien[i].Name+'traces/traces.dat''!',3); + gibAus('Zu viele Daten in '''+dateien[i].name+'traces/traces.dat''!',3); close(f); exit; end; @@ -931,29 +933,29 @@ begin etwasGelesen:=true; end; if dateien[i] is tAndorInputDateiInfo then begin - etsiz:=dateien[i].tsiz; + etsiz:=dateien[i].tSiz; - assign(f,dateien[i].Name); + assign(f,dateien[i].name); reset(f,1); seek(f,(dateien[i] as tAndorInputDateiInfo).datenStart); - tmpi:=wertGroesze(dateien[i].genauigkeit); - if tmpi = sizeOf(wgen) then - blockread(f,werte[0],dateien[i].xsteps*dateien[i].tsiz*tmpi) + tmpI:=wertGroesze(dateien[i].genauigkeit); + if tmpI = sizeOf(wgen) then + blockread(f,werte[0],dateien[i].xSteps*dateien[i].tSiz*tmpI) else case dateien[i].genauigkeit of gSingle: - for j:=0 to dateien[i].xsteps*dateien[i].tsiz-1 do begin - blockread(f,tmps,tmpi); - werte[j]:=tmps; + for j:=0 to dateien[i].xSteps*dateien[i].tSiz-1 do begin + blockread(f,tmpS,tmpI); + werte[j]:=tmpS; end; gDouble: - for j:=0 to dateien[i].xsteps*dateien[i].tsiz-1 do begin - blockread(f,tmpd,tmpi); - werte[j]:=tmpd; + for j:=0 to dateien[i].xSteps*dateien[i].tSiz-1 do begin + blockread(f,tmpD,tmpI); + werte[j]:=tmpD; end; gExtended: - for j:=0 to dateien[i].xsteps*dateien[i].tsiz-1 do begin - blockread(f,tmpe,tmpi); - werte[j]:=tmpe; + for j:=0 to dateien[i].xSteps*dateien[i].tSiz-1 do begin + blockread(f,tmpE,tmpI); + werte[j]:=tmpE; end; end{of case}; try @@ -962,8 +964,8 @@ begin s:='falsch'; end; if s<>'' then begin - gibAus('Syntax-Fehler in '''+dateien[i].Name+''': vmtl. zu viele/wenige Daten.',3); - closefile(f); + gibAus('Syntax-Fehler in '''+dateien[i].name+''': vmtl. zu viele/wenige Daten.',3); + closeFile(f); exit; end; close(f); @@ -979,25 +981,25 @@ begin result:=true; end; -procedure tLLWerte.gibMinMaxDichten(out wMi,wMa: extended; xmin,xmax,tmin,tmax: longint); +procedure tLLWerte.gibMinMaxDichten(out wMi,wMa: extended; xMin,xMax,tMin,tMax: longint); var i,j: longint; begin - wMi:=werte[xmin+tmin*params.xsteps]; - wMa:=Werte[xmin+tmin*params.xsteps]; - for i:=xmin to xmax do - for j:=tmin to tmax do begin - wMi:=min(wMi,werte[i+j*params.xsteps]); - wMa:=max(wMa,werte[i+j*params.xsteps]); + wMi:=werte[xMin+tMin*params.xSteps]; + wMa:=werte[xMin+tMin*params.xSteps]; + for i:=xMin to xMax do + for j:=tMin to tMax do begin + wMi:=min(wMi,werte[i+j*params.xSteps]); + wMa:=max(wMa,werte[i+j*params.xSteps]); end; end; function tLLWerte.fft(senkrecht,invers: boolean; algo: tFFTAlgorithmus; fen: tFenster; hg: extended; out pvFehler: extended): boolean; begin if senkrecht then - result:=fft(0,params.xsteps-1,senkrecht,invers,algo,fen,hg,pvFehler) + result:=fft(0,params.xSteps-1,senkrecht,invers,algo,fen,hg,pvFehler) else - result:=fft(0,params.tsiz-1,senkrecht,invers,algo,fen,hg,pvFehler); + result:=fft(0,params.tSiz-1,senkrecht,invers,algo,fen,hg,pvFehler); end; function tLLWerte.fft(smin,smax: longint; senkrecht,invers: boolean; algo: tFFTAlgorithmus; fen: tFenster; hg: extended; out pvFehler: extended): boolean; @@ -1008,28 +1010,28 @@ var begin result:=false; if senkrecht then begin - pmax:=params.tsiz-1; - pstep:=params.xsteps; + pmax:=params.tSiz-1; + pstep:=params.xSteps; sstep:=1; end else begin - pmax:=params.xsteps-1; + pmax:=params.xSteps-1; pstep:=1; - sstep:=params.xsteps; + sstep:=params.xSteps; end; if assigned(fen) and fen.aktiv then begin if invers then gibAus('fft: Warnung, hier wird bei einer inversen FFT gefenstert - soll das so sein?',1); offset:=byte(not invers)*hg; - if length(fen.Werte)<>pmax+1 then begin - gibAus('Die Breite des FFT-Fensters ('+inttostr(length(fen.Werte))+') ist nicht gleich der Breite der Werte ('+inttostr(pmax+1)+')!',1); + if length(fen.werte)<>pmax+1 then begin + gibAus('Die Breite des FFT-Fensters ('+intToStr(length(fen.werte))+') ist nicht gleich der Breite der Werte ('+intToStr(pmax+1)+')!',1); exit; end; - for i:=smin to smax do // Werte fenstern + for i:=smin to smax do // werte fenstern for j:=0 to pmax do werte[i*sstep+j*pstep]:= - (werte[i*sstep+j*pstep]-offset)*fen.Werte[j]; + (werte[i*sstep+j*pstep]-offset)*fen.werte[j]; end; vorher:=0; @@ -1037,8 +1039,8 @@ begin in0:=true; out0:=true; - case sizeof(wgen) of - sizeof(single): + case sizeOf(wgen) of + sizeOf(single): for i:=smin to smax do begin algo.laden(invers,pSingle(@(werte[i*sstep])),pstep); algo.summen(true,vorher,in0); @@ -1046,7 +1048,7 @@ begin algo.summen(false,nachher,out0); algo.speichern(invers,pSingle(@(werte[i*sstep])),pstep); end; - sizeof(double): + sizeOf(double): for i:=smin to smax do begin algo.laden(invers,pDouble(@(werte[i*sstep])),pstep); algo.summen(true,vorher,in0); @@ -1054,7 +1056,7 @@ begin algo.summen(false,nachher,out0); algo.speichern(invers,pDouble(@(werte[i*sstep])),pstep); end; - sizeof(extended): + sizeOf(extended): for i:=smin to smax do begin algo.laden(invers,pExtended(@(werte[i*sstep])),pstep); algo.summen(true,vorher,in0); @@ -1073,7 +1075,7 @@ begin werte[i*sstep+j*pstep]:= werte[i*sstep+j*pstep]+hg; - gibAus(inttostr(byte(senkrecht))+' '+inttostr(byte(invers))+' (Parseval-Fehler = '+floattostr(pvFehler)+') ... nämlich von '+floattostr(vorher)+' zu '+floattostr(nachher),1); + gibAus(intToStr(byte(senkrecht))+' '+intToStr(byte(invers))+' (Parseval-Fehler = '+floatToStr(pvFehler)+') ... nämlich von '+floatToStr(vorher)+' zu '+floatToStr(nachher),1); if in0 then gibAus('Nur Nullen im Input der FFT!',1); if out0 then gibAus('Nur Nullen im Output der FFT!',1); result:=not (in0 or out0); @@ -1081,22 +1083,22 @@ end; procedure tLLWerte.schreibeWert(var f: textfile; x,y: longint); begin - schreibeWert(f,x,y,werte[x+y*params.xsteps]); + schreibeWert(f,x,y,werte[x+y*params.xSteps]); end; procedure tLLWerte.schreibeWert(var f: textfile; x,y,wert: extended); var xa,ta: extended; begin - if params.xstop=params.xstart then - xa:=params.xstop + if params.xStop=params.xStart then + xa:=params.xStop else - xa:=params.xstart+x/(params.xsteps-1)*(params.xstop-params.xstart); - if params.tstop=params.tstart then - ta:=params.tstop + xa:=params.xStart+x/(params.xSteps-1)*(params.xStop-params.xStart); + if params.tStop=params.tStart then + ta:=params.tStop else - ta:=params.tstart+y/(params.tsiz-1)*(params.tstop-params.tstart); - writeln(f,floattostr(xa)+' '+floattostr(ta)+' '+floattostr(wert)); + ta:=params.tStart+y/(params.tSiz-1)*(params.tStop-params.tStart); + writeln(f,floatToStr(xa)+' '+floatToStr(ta)+' '+floatToStr(wert)); end; procedure tLLWerte.schreibeWertIntegriert(var f: textfile; i: longint; hor: boolean); @@ -1106,14 +1108,14 @@ var begin tmp:=0; if hor then begin - for j:=0 to params.xsteps-1 do - tmp:=tmp+werte[j+i*params.xsteps]; - schreibeWert(f,(params.xsteps-1)/2,i,tmp); + for j:=0 to params.xSteps-1 do + tmp:=tmp+werte[j+i*params.xSteps]; + schreibeWert(f,(params.xSteps-1)/2,i,tmp); end else begin - for j:=0 to params.tsiz-1 do - tmp:=tmp+werte[i+j*params.xsteps]; - schreibeWert(f,i,(params.tsiz-1)/2,tmp); + for j:=0 to params.tSiz-1 do + tmp:=tmp+werte[i+j*params.xSteps]; + schreibeWert(f,i,(params.tSiz-1)/2,tmp); end; end; @@ -1123,21 +1125,21 @@ var i: longint; sum,x: extended; begin - assignfile(f,s); + assignFile(f,s); rewrite(f); sum:=0; while x0<0 do x0:=x0+dx; - for i:=0 to params.xsteps*params.tsiz-1 do + for i:=0 to params.xSteps*params.tSiz-1 do if i+1>x0 then begin sum:=sum+werte[i]*(x0-i); if senkrecht then - x:=x0/(params.tsiz-1)*(params.tstop-params.tstart)+params.tstart + x:=x0/(params.tSiz-1)*(params.tStop-params.tStart)+params.tStart else - x:=x0/(params.xsteps-1)*(params.xstop-params.xstart)+params.xstart; - writeln(f,floattostr(x)+' '+floattostr(sum/dx)); + x:=x0/(params.xSteps-1)*(params.xStop-params.xStart)+params.xStart; + writeln(f,floatToStr(x)+' '+floatToStr(sum/dx)); if linien then begin - writeln(f,floattostr(x)+' 0'); + writeln(f,floatToStr(x)+' 0'); writeln(f) end; sum:=werte[i]*(i+1-x0); @@ -1145,144 +1147,229 @@ begin end else sum:=sum+werte[i]; - closefile(f); + closeFile(f); end; procedure tLLWerte.spiegle; begin - spiegle(0,params.tsiz-1); + spiegle(0,params.tSiz-1); end; -procedure tLLWerte.spiegle(tmin,tmax: longint); +procedure tLLWerte.spiegle(tMin,tMax: longint); var i,j: longint; tmp: wgen; begin - for i:=tmin to tmax do - for j:=0 to params.xsteps div 2 -1 do begin - tmp:=werte[j+i*params.xsteps]; - werte[j+i*params.xsteps]:=werte[params.xsteps-j-1+i*params.xsteps]; - werte[params.xsteps-j-1+i*params.xsteps]:=tmp; + for i:=tMin to tMax do + for j:=0 to params.xSteps div 2 -1 do begin + tmp:=werte[j+i*params.xSteps]; + werte[j+i*params.xSteps]:=werte[params.xSteps-j-1+i*params.xSteps]; + werte[params.xSteps-j-1+i*params.xSteps]:=tmp; end; end; -procedure tLLWerte.fft2dNachbearbeitungA(nb: tFFTDatenordnung); +procedure tLLWerte.fft2dNachbearbeitungA(nB: tFFTDatenordnung); var i: longint; begin - case NB of + case nB of doResIms,doResSmi: ; doBetr: begin werte[0]:=abs(extended(werte[0])); // rein reell - for i:=1 to params.xsteps div 2 -1 do begin // unterste Zeile ist reell in t - werte[i]:=sqrt(sqr(extended(werte[i]))+sqr(extended(werte[params.xsteps-i]))); - werte[params.xsteps-i]:=werte[i]; + for i:=1 to params.xSteps div 2 -1 do begin // unterste Zeile ist reell in t + werte[i]:=sqrt(sqr(extended(werte[i]))+sqr(extended(werte[params.xSteps-i]))); + werte[params.xSteps-i]:=werte[i]; end; - for i:=1 to params.xsteps div 2 -1 do begin // mittlere Zeile ist reell in t - werte[i+(params.tsiz div 2)*params.xsteps]:=sqrt(sqr(extended(werte[i+(params.tsiz div 2)*params.xsteps]))+sqr(extended(werte[params.xsteps-i+(params.tsiz div 2)*params.xsteps]))); - werte[params.xsteps-i+(params.tsiz div 2)*params.xsteps]:=werte[i+(params.tsiz div 2)*params.xsteps]; + for i:=1 to params.xSteps div 2 -1 do begin // mittlere Zeile ist reell in t + werte[i+(params.tSiz div 2)*params.xSteps]:=sqrt(sqr(extended(werte[i+(params.tSiz div 2)*params.xSteps]))+sqr(extended(werte[params.xSteps-i+(params.tSiz div 2)*params.xSteps]))); + werte[params.xSteps-i+(params.tSiz div 2)*params.xSteps]:=werte[i+(params.tSiz div 2)*params.xSteps]; end; - werte[params.xsteps div 2]:=abs(extended(werte[params.xsteps div 2])); // rein reell - werte[params.tsiz div 2]:=abs(extended(werte[params.tsiz div 2])); // rein reell - for i:=1 to params.tsiz div 2 -1 do begin // linkeste Spalte ist reell in x - werte[i*params.xsteps]:=sqrt(sqr(extended(werte[i*params.xsteps]))+sqr(extended(werte[(params.tsiz-i)*params.xsteps]))); - werte[(params.tsiz-i)*params.xsteps]:=werte[i*params.xsteps]; + werte[params.xSteps div 2]:=abs(extended(werte[params.xSteps div 2])); // rein reell + werte[params.tSiz div 2]:=abs(extended(werte[params.tSiz div 2])); // rein reell + for i:=1 to params.tSiz div 2 -1 do begin // linkeste Spalte ist reell in x + werte[i*params.xSteps]:=sqrt(sqr(extended(werte[i*params.xSteps]))+sqr(extended(werte[(params.tSiz-i)*params.xSteps]))); + werte[(params.tSiz-i)*params.xSteps]:=werte[i*params.xSteps]; end; - for i:=1 to params.tsiz div 2 -1 do begin // mittlere Spalte ist reell in x - werte[params.xsteps div 2 + i*params.xsteps]:=sqrt(sqr(extended(werte[params.xsteps div 2 + i*params.xsteps]))+sqr(extended(werte[params.xsteps div 2 + (params.tsiz-i)*params.xsteps]))); - werte[params.xsteps div 2 + (params.tsiz-i)*params.xsteps]:=werte[params.xsteps div 2 + i*params.xsteps]; + for i:=1 to params.tSiz div 2 -1 do begin // mittlere Spalte ist reell in x + werte[params.xSteps div 2 + i*params.xSteps]:=sqrt(sqr(extended(werte[params.xSteps div 2 + i*params.xSteps]))+sqr(extended(werte[params.xSteps div 2 + (params.tSiz-i)*params.xSteps]))); + werte[params.xSteps div 2 + (params.tSiz-i)*params.xSteps]:=werte[params.xSteps div 2 + i*params.xSteps]; end; end; doBetrQdr: begin werte[0]:=sqr(extended(werte[0])); // rein reell - for i:=1 to params.xsteps div 2 -1 do begin // unterste Zeile ist reell in t - werte[i]:=sqr(extended(werte[i]))+sqr(extended(werte[params.xsteps-i])); - werte[params.xsteps-i]:=werte[i]; + for i:=1 to params.xSteps div 2 -1 do begin // unterste Zeile ist reell in t + werte[i]:=sqr(extended(werte[i]))+sqr(extended(werte[params.xSteps-i])); + werte[params.xSteps-i]:=werte[i]; end; - for i:=1 to params.xsteps div 2 -1 do begin // mittlere Zeile ist reell in t - werte[i+(params.tsiz div 2)*params.xsteps]:=sqr(extended(werte[i+(params.tsiz div 2)*params.xsteps]))+sqr(extended(werte[params.xsteps-i+(params.tsiz div 2)*params.xsteps])); - werte[params.xsteps-i+(params.tsiz div 2)*params.xsteps]:=werte[i+(params.tsiz div 2)*params.xsteps]; + for i:=1 to params.xSteps div 2 -1 do begin // mittlere Zeile ist reell in t + werte[i+(params.tSiz div 2)*params.xSteps]:=sqr(extended(werte[i+(params.tSiz div 2)*params.xSteps]))+sqr(extended(werte[params.xSteps-i+(params.tSiz div 2)*params.xSteps])); + werte[params.xSteps-i+(params.tSiz div 2)*params.xSteps]:=werte[i+(params.tSiz div 2)*params.xSteps]; end; - werte[params.xsteps div 2]:=sqr(extended(werte[params.xsteps div 2])); // rein reell - werte[params.tsiz div 2]:=sqr(extended(werte[params.tsiz div 2])); // rein reell - for i:=1 to params.tsiz div 2 -1 do begin // linkeste Spalte ist reell in x - werte[i*params.xsteps]:=sqr(extended(werte[i*params.xsteps]))+sqr(extended(werte[(params.tsiz-i)*params.xsteps])); - werte[(params.tsiz-i)*params.xsteps]:=werte[i*params.xsteps]; + werte[params.xSteps div 2]:=sqr(extended(werte[params.xSteps div 2])); // rein reell + werte[params.tSiz div 2]:=sqr(extended(werte[params.tSiz div 2])); // rein reell + for i:=1 to params.tSiz div 2 -1 do begin // linkeste Spalte ist reell in x + werte[i*params.xSteps]:=sqr(extended(werte[i*params.xSteps]))+sqr(extended(werte[(params.tSiz-i)*params.xSteps])); + werte[(params.tSiz-i)*params.xSteps]:=werte[i*params.xSteps]; end; - for i:=1 to params.tsiz div 2 -1 do begin // mittlere Spalte ist reell in x - werte[params.xsteps div 2 + i*params.xsteps]:=sqr(extended(werte[params.xsteps div 2 + i*params.xsteps]))+sqr(extended(werte[params.xsteps div 2 + (params.tsiz-i)*params.xsteps])); - werte[params.xsteps div 2 + (params.tsiz-i)*params.xsteps]:=werte[params.xsteps div 2 + i*params.xsteps]; + for i:=1 to params.tSiz div 2 -1 do begin // mittlere Spalte ist reell in x + werte[params.xSteps div 2 + i*params.xSteps]:=sqr(extended(werte[params.xSteps div 2 + i*params.xSteps]))+sqr(extended(werte[params.xSteps div 2 + (params.tSiz-i)*params.xSteps])); + werte[params.xSteps div 2 + (params.tSiz-i)*params.xSteps]:=werte[params.xSteps div 2 + i*params.xSteps]; end; end; + else + raise exception.create('Nachbearbeitungsmethode '+fftDoToStr(nB)+' nicht implementiert!'); end{of case}; end; -procedure tLLWerte.fft2dNachbearbeitungB(xmin,xmax: longint; nb: tFFTDatenordnung); +procedure tLLWerte.fft2dNachbearbeitungB(xMin,xMax: longint; nB: tFFTDatenordnung); var i,j: longint; begin // bearbeitet nur den Hauptteil (außer erster und mittlerer Zeile/Spalte) nach! - case nb of + case nB of + doResIms,doResSmi: ; doBetr: begin - for i:=xmin to xmax do - for j:=1 to params.tsiz div 2 -1 do begin - werte[i+j*params.xsteps]:= - sqrt(sqr(extended(werte[i+j*params.xsteps]-werte[params.xsteps-i+(params.tsiz-j)*params.xsteps])) // Re^2 - +sqr(extended(werte[params.xsteps-i+j*params.xsteps]+werte[i+(params.tsiz-j)*params.xsteps]))); // Im^2 - werte[params.xsteps-i+j*params.xsteps]:=werte[i+j*params.xsteps]; - werte[i+(params.tsiz-j)*params.xsteps]:=werte[i+j*params.xsteps]; - werte[params.xsteps-i+(params.tsiz-j)*params.xsteps]:=werte[i+j*params.xsteps]; + for i:=xMin to xMax do + for j:=1 to params.tSiz div 2 -1 do begin + werte[i+j*params.xSteps]:= + sqrt(sqr(extended(werte[i+j*params.xSteps]-werte[params.xSteps-i+(params.tSiz-j)*params.xSteps])) // Re^2 + +sqr(extended(werte[params.xSteps-i+j*params.xSteps]+werte[i+(params.tSiz-j)*params.xSteps]))); // Im^2 + werte[params.xSteps-i+j*params.xSteps]:=werte[i+j*params.xSteps]; + werte[i+(params.tSiz-j)*params.xSteps]:=werte[i+j*params.xSteps]; + werte[params.xSteps-i+(params.tSiz-j)*params.xSteps]:=werte[i+j*params.xSteps]; end; end; doBetrQdr: begin - for i:=xmin to xmax do - for j:=1 to params.tsiz div 2 -1 do begin - werte[i+j*params.xsteps]:= - sqr(extended(werte[i+j*params.xsteps]-werte[params.xsteps-i+(params.tsiz-j)*params.xsteps])) // Re^2 - +sqr(extended(werte[params.xsteps-i+j*params.xsteps]+werte[i+(params.tsiz-j)*params.xsteps])); // Im^2 - werte[params.xsteps-i+j*params.xsteps]:=werte[i+j*params.xsteps]; - werte[i+(params.tsiz-j)*params.xsteps]:=werte[i+j*params.xsteps]; - werte[params.xsteps-i+(params.tsiz-j)*params.xsteps]:=werte[i+j*params.xsteps]; + for i:=xMin to xMax do + for j:=1 to params.tSiz div 2 -1 do begin + werte[i+j*params.xSteps]:= + sqr(extended(werte[i+j*params.xSteps]-werte[params.xSteps-i+(params.tSiz-j)*params.xSteps])) // Re^2 + +sqr(extended(werte[params.xSteps-i+j*params.xSteps]+werte[i+(params.tSiz-j)*params.xSteps])); // Im^2 + werte[params.xSteps-i+j*params.xSteps]:=werte[i+j*params.xSteps]; + werte[i+(params.tSiz-j)*params.xSteps]:=werte[i+j*params.xSteps]; + werte[params.xSteps-i+(params.tSiz-j)*params.xSteps]:=werte[i+j*params.xSteps]; end; end; + else + raise exception.create('Nachbearbeitungsmethode '+fftDoToStr(nB)+' nicht implementiert!'); end{of case} end; -procedure tLLWerte.holeRam; +procedure tLLWerte.fft2dNachbearbeitungVerdoppeln(nB: tFFTDatenordnung); +var + i,j,xS2,tS4: int64; + reRe,reIm,imRe,imIm: extended; begin - holeRam(1); + // Vorsicht: + // Spalten sind zuerst tSiz/2 lang und dann tSiz. + // Zeilen behalten ihre Länge von xSteps. + xS2:=params.xSteps div 2; + tS4:=params.tSiz div 4; + case nB of + doAlleResSmi: + for j:=tS4 downto 0 do + for i:=xS2 downto 0 do begin + reRe:=werte[i + j*xS2]; + if (i<>0) and (i<>xS2) then + imRe:=werte[-i + (j+1)*xS2] + else + imRe:=0; // erste und mittlere Spalte ist x-reell + if (j<>0) and (j<>tS4) then + reIm:=werte[i + (2*tS4-j)*xS2] + else + reIm:=0; // erste und mittlere Zeile ist t-reell + if (i<>0) and (i<>xS2) and (j<>0) and (j<>tS4) then + imIm:=werte[-i + (2*tS4-j+1)*xS2] + else + imIm:=0; // erste und mittlere Zeile und Spalte sind x-t-reell + + werte[i + j *2*xS2]:=reRe-imIm; + werte[i + (4*tS4-j)*2*xS2]:=reIm+imRe; + if (i<>0) and (i<>xS2) then begin + werte[2*xS2-i + j *2*xS2]:= reRe+imIm; + werte[2*xS2-i + (4*tS4-j)*2*xS2]:=-imRe+reIm; + end; + if (j<>0) and (j<>2*tS4) then begin + werte[i + (2*tS4-j)*2*xS2]:=reRe+imIm; + werte[i + (2*tS4+j)*2*xS2]:=imRe-reIm; + if (i<>0) and (i<>xS2) then begin + werte[2*xS2-i + (2*tS4-j)*2*xS2]:= reRe-imIm; + werte[2*xS2-i + (2*tS4+j)*2*xS2]:=-imRe-reIm; + end; + end; + end; + doAlleResIms: + for j:=tS4 downto 0 do + for i:=xS2 downto 0 do begin + reRe:=werte[i + j*xS2]; + if (i<>0) and (i<>xS2) then + imRe:=werte[-i + (j+1)*xS2] + else + imRe:=0; // erste und mittlere Spalte ist x-reell + if (j<>0) and (j<>tS4) then + reIm:=werte[i + (2*tS4-j)*xS2] + else + reIm:=0; // erste und mittlere Zeile ist t-reell + if (i<>0) and (i<>xS2) and (j<>0) and (j<>tS4) then + imIm:=werte[-i + (2*tS4-j+1)*xS2] + else + imIm:=0; // erste und mittlere Zeile und Spalte sind x-t-reell + + werte[i + j *2*xS2]:=reRe-imIm; + werte[i + (2*tS4+j)*2*xS2]:=reIm+imRe; + if (i<>0) and (i<>xS2) then begin + werte[2*xS2-i + j *2*xS2]:= reRe+imIm; + werte[2*xS2-i + (2*tS4+j)*2*xS2]:=-imRe+reIm; + end; + if (j<>0) and (j<>2*tS4) then begin + werte[i + (2*tS4-j)*2*xS2]:=reRe+imIm; + werte[i + (4*tS4-j)*2*xS2]:=imRe-reIm; + if (i<>0) and (i<>xS2) then begin + werte[2*xS2-i + (2*tS4-j)*2*xS2]:= reRe-imIm; + werte[2*xS2-i + (4*tS4-j)*2*xS2]:=-imRe-reIm; + end; + end; + end; + else + raise exception.create('Nachbearbeitungsmethode '+fftDoToStr(nB)+' verdoppelt die Anzahl der Daten nicht!'); + end{of case}; +end; + +procedure tLLWerte.holeRAM; +begin + holeRAM(1); end; -procedure tLLWerte.holeRam(ausgaben: byte); +procedure tLLWerte.holeRAM(ausgaben: byte); begin - holeRam(ausgaben,false); + holeRAM(ausgaben,false); end; -procedure tLLWerte.holeRam(ausgaben: byte; gemaeszTXMinMax: boolean); +procedure tLLWerte.holeRAM(ausgaben: byte; gemaeszTXMinMax: boolean); var Zeit: extended; br,ho: longint; begin Zeit:=now; if gemaeszTXMinMax then begin - br:=params.xsteps_; - ho:=params.tsiz_; + br:=params.xSteps_; + ho:=params.tSiz_; end else begin - br:=params.xsteps; - ho:=params.tsiz; + br:=params.xSteps; + ho:=params.tSiz; end; if (ausgaben and __ausgabenMaske) <> 0 then - gibAus('Fordere '+inttostr(floor(ho*br*sizeof(wgen)/1024/1024))+' MB RAM an ('+inttostr(br)+' x-Schritte mal '+inttostr(ho)+' t-Schritte; bisher '+inttostr(belegterSpeicher div 1024)+' MB belegt). ...',ausgaben); + gibAus('Fordere '+intToStr(floor(ho*br*sizeOf(wgen)/1024/1024))+' MB RAM an ('+intToStr(br)+' x-Schritte mal '+intToStr(ho)+' t-Schritte; bisher '+intToStr(belegterSpeicher div 1024)+' MB belegt). ...',ausgaben); - setlength(werte,br*ho); + setLength(werte,br*ho); if (ausgaben and __ausgabenMaske) <> 0 then gibAus('... fertig '+timetostr(now-Zeit),ausgaben); end; -function tLLWerte.zuPixelWerten(whoehe,wbreite,xpmi,xmi,tmi: longint; xz,yz: extended; pPWerte: pTExtendedArray; pPAnzahlen: pTLongintArray): boolean; +function tLLWerte.zuPixelWerten(wHoehe,wBreite,xPMi,xMi,tMi: longint; xZ,yZ: extended; pPWerte: pTExtendedArray; pPAnzahlen: pTLongintArray): boolean; var i,j,k,l, - xv,xb,tv,tb: longint; + xV,xB,tV,tB: longint; b: boolean; begin result:=false; @@ -1291,33 +1378,33 @@ begin pPAnzahlen^[i]:=0; end; b:=false; - for j:=0 to whoehe-1 do - for i:=0 to wbreite-1 do begin - xv:=min(params.xsteps-1,max(0,ceil((i+max(0,xpmi)-1/2)/xz+xmi))); - xb:=min(params.xsteps-1,max(0,ceil((i+max(0,xpmi)+1/2)/xz+xmi-1))); - tv:=min(params.tsiz-1,max(0,ceil((j-1/2)/yz+tmi))); - tb:=min(params.tsiz-1,max(0,ceil((j+1/2)/yz+tmi-1))); - if xv>xb then begin - if (i>0) or (xpmi>0) then - dec(xv) + for j:=0 to wHoehe-1 do + for i:=0 to wBreite-1 do begin + xV:=min(params.xSteps-1,max(0,ceil((i+max(0,xPMi)-1/2)/xZ+xMi))); + xB:=min(params.xSteps-1,max(0,ceil((i+max(0,xPMi)+1/2)/xZ+xMi-1))); + tV:=min(params.tSiz-1,max(0,ceil((j-1/2)/yZ+tMi))); + tB:=min(params.tSiz-1,max(0,ceil((j+1/2)/yZ+tMi-1))); + if xV>xB then begin + if (i>0) or (xPMi>0) then + dec(xV) else - inc(xb); + inc(xB); end; - if tv>tb then begin + if tV>tB then begin if j>0 then - dec(tv) + dec(tV) else - inc(tb); + inc(tB); end; - if (xv>xb) or (tv>tb) then begin - gibAus('Keine Inputwerte für Position '+inttostr(i)+':'+inttostr(j)+'!',1); + if (xV>xB) or (tV>tB) then begin + gibAus('Keine Inputwerte für Position '+intToStr(i)+':'+intToStr(j)+'!',1); exit; end; - pPanzahlen^[j*wbreite+i]:=(xb-xv+1)*(tb-tv+1); - for k:=xv to xb do - for l:=tv to tb do begin - b:=b or (werte[k+l*params.xsteps]<>0); - pPWerte^[j*wbreite+i]:=pPWerte^[j*wbreite+i]+min(params.maxW,max(params.minW,werte[k+l*params.xsteps])); + pPAnzahlen^[j*wBreite+i]:=(xB-xV+1)*(tB-tV+1); + for k:=xV to xB do + for l:=tV to tB do begin + b:=b or (werte[k+l*params.xSteps]<>0); + pPWerte^[j*wBreite+i]:=pPWerte^[j*wBreite+i]+min(params.maxW,max(params.minW,werte[k+l*params.xSteps])); end; end; if not b then @@ -1325,254 +1412,254 @@ begin result:=true; end; -function tLLWerte.findeSchwellwerte(xmi,xma,tmi,tma: longint; Schw: extended): tExtPointArray; +function tLLWerte.findeSchwellwerte(xMi,xMa,tMi,tMa: longint; Schw: extended): tExtPointArray; var i,j,k,l,m,vz: longint; dx,dy,x0,y0: extended; begin - setlength(result,0); - gibAus('Schwellwerte finden ('+inttostr(xmi)+'-'+inttostr(xma)+') '+floattostr(Schw)+' ...',1); + setLength(result,0); + gibAus('Schwellwerte finden ('+intToStr(xMi)+'-'+intToStr(xMa)+') '+floatToStr(Schw)+' ...',1); i:=0; - dx:=(params.xstop-params.xstart)/(params.xsteps-1); - x0:=params.xstart; - dy:=(params.tstop-params.tstart)/(params.tsiz-1); - y0:=params.tstart; - for j:=xmi to xma do begin - for k:=tmi to tma do begin + dx:=(params.xStop-params.xStart)/(params.xSteps-1); + x0:=params.xStart; + dy:=(params.tStop-params.tStart)/(params.tSiz-1); + y0:=params.tStart; + for j:=xMi to xMa do begin + for k:=tMi to tMa do begin vz:=0; for l:=0 to 1 do for m:=0 to 1 do vz:= - vz or (byte(werte[j-l+(k-m)*params.xsteps]>=Schw) shl 1) or - byte(werte[j-l+(k-m)*params.xsteps]<=Schw); + vz or (byte(werte[j-l+(k-m)*params.xSteps]>=Schw) shl 1) or + byte(werte[j-l+(k-m)*params.xSteps]<=Schw); if vz=3 then begin if i>=length(result) then - setlength(result,length(result)+Speicherhappen); + setLength(result,length(result)+speicherHappen); result[i]['x']:=j*dx+x0; result[i]['y']:=k*dy+y0; inc(i); end; end; - if (xma-j) and $ff = 0 then - gibAus('x = '+inttostr(j)+' ('+inttostr(xmi)+'-'+inttostr(xma)+')',1); + if (xMa-j) and $ff = 0 then + gibAus('x = '+intToStr(j)+' ('+intToStr(xMi)+'-'+intToStr(xMa)+')',1); end; gibAus('... fertig!',1); - setlength(result,i); + setLength(result,i); end; -procedure tLLWerte.integriereSingle(qu: pTLLWerteSingle; xmi,xma,tmi,tma,xof,tof: longint; richtung: tIntegrationsRichtung); +procedure tLLWerte.integriereSingle(qu: pTLLWerteSingle; xMi,xMa,tMi,tMa,xOf,tOf: longint; richtung: tIntegrationsRichtung); var i,j: longint; int,faktor: extended; begin case richtung of irHorizontal: begin - faktor:=(qu^.params.xstop-qu^.params.xstart)/(qu^.params.xsteps-1); - for i:=tmi to tma do begin + faktor:=(qu^.params.xStop-qu^.params.xStart)/(qu^.params.xSteps-1); + for i:=tMi to tMa do begin int:=0; - for j:=0 to xmi-1 do - int:=int+qu^.werte[j + i*qu^.params.xsteps]; - for j:=xmi to xma do begin - int:=int+qu^.werte[j + i*qu^.params.xsteps]; - werte[j-xof + (i-tof)*params.xsteps]:=int*faktor; + for j:=0 to xMi-1 do + int:=int+qu^.werte[j + i*qu^.params.xSteps]; + for j:=xMi to xMa do begin + int:=int+qu^.werte[j + i*qu^.params.xSteps]; + werte[j-xOf + (i-tOf)*params.xSteps]:=int*faktor; end; end; end; irEinfall: begin faktor:= sqrt( - sqr((qu^.params.xstop-qu^.params.xstart)/(qu^.params.xsteps-1)) + - sqr((qu^.params.tstop-qu^.params.tstart)/(qu^.params.tsiz-1))); - gibAus('dx = '+floattostr((qu^.params.xstop-qu^.params.xstart)/(qu^.params.xsteps-1)),1); - gibAus('dt = '+floattostr((qu^.params.tstop-qu^.params.tstart)/(qu^.params.tsiz-1)),1); - for i:=tmi to tma do begin // von links eintretendes (inkl. Ecke links unten) + sqr((qu^.params.xStop-qu^.params.xStart)/(qu^.params.xSteps-1)) + + sqr((qu^.params.tStop-qu^.params.tStart)/(qu^.params.tSiz-1))); + gibAus('dx = '+floatToStr((qu^.params.xStop-qu^.params.xStart)/(qu^.params.xSteps-1)),1); + gibAus('dt = '+floatToStr((qu^.params.tStop-qu^.params.tStart)/(qu^.params.tSiz-1)),1); + for i:=tMi to tMa do begin // von links eintretendes (inkl. Ecke links unten) int:=0; - for j:=1 to min(xmi,i) do - int:=int+qu^.werte[xmi-j + (i-j)*qu^.params.xsteps]; - for j:=0 to min(tma-i,xma-xmi) do begin - int:=int+qu^.werte[xmi+j + (i+j)*qu^.params.xsteps]; - werte[j+xmi-xof + (i+j-tof)*params.xsteps]:=int*faktor; + for j:=1 to min(xMi,i) do + int:=int+qu^.werte[xMi-j + (i-j)*qu^.params.xSteps]; + for j:=0 to min(tMa-i,xMa-xMi) do begin + int:=int+qu^.werte[xMi+j + (i+j)*qu^.params.xSteps]; + werte[j+xMi-xOf + (i+j-tOf)*params.xSteps]:=int*faktor; end; end; - for i:=xmi+1 to xma do begin // von unten eintretendes (exkl. Ecke links unten) + for i:=xMi+1 to xMa do begin // von unten eintretendes (exkl. Ecke links unten) int:=0; - for j:=1 to min(tmi,i) do - int:=int+qu^.werte[i-j + (tmi-j)*qu^.params.xsteps]; - for j:=0 to min(tma-tmi,xma-i) do begin - int:=int+qu^.werte[i+j + (tmi+j)*qu^.params.xsteps]; - werte[i+j-xof + (tmi+j-tof)*params.xsteps]:=int*faktor; + for j:=1 to min(tMi,i) do + int:=int+qu^.werte[i-j + (tMi-j)*qu^.params.xSteps]; + for j:=0 to min(tMa-tMi,xMa-i) do begin + int:=int+qu^.werte[i+j + (tMi+j)*qu^.params.xSteps]; + werte[i+j-xOf + (tMi+j-tOf)*params.xSteps]:=int*faktor; end; end; end; irAusfall: begin faktor:= sqrt( - sqr((qu^.params.xstop-qu^.params.xstart)/(qu^.params.xsteps-1)) + - sqr((qu^.params.tstop-qu^.params.tstart)/(qu^.params.tsiz-1))); - gibAus('dx = '+floattostr((qu^.params.xstop-qu^.params.xstart)/(qu^.params.xsteps-1)),1); - gibAus('dt = '+floattostr((qu^.params.tstop-qu^.params.tstart)/(qu^.params.tsiz-1)),1); - for i:=tmi to tma do begin // nach links austretendes (inkl. Ecke links oben) + sqr((qu^.params.xStop-qu^.params.xStart)/(qu^.params.xSteps-1)) + + sqr((qu^.params.tStop-qu^.params.tStart)/(qu^.params.tSiz-1))); + gibAus('dx = '+floatToStr((qu^.params.xStop-qu^.params.xStart)/(qu^.params.xSteps-1)),1); + gibAus('dt = '+floatToStr((qu^.params.tStop-qu^.params.tStart)/(qu^.params.tSiz-1)),1); + for i:=tMi to tMa do begin // nach links austretendes (inkl. Ecke links oben) int:=0; - for j:=1 to min(xmi,qu^.params.tsiz-1-i) do - int:=int+qu^.werte[xmi-j + (i+j)*qu^.params.xsteps]; - for j:=0 to min(i-tmi,xma-xmi) do begin - int:=int+qu^.werte[xmi+j + (i-j)*qu^.params.xsteps]; - werte[j+xmi-xof + (i-j-tof)*params.xsteps]:=int*faktor; + for j:=1 to min(xMi,qu^.params.tSiz-1-i) do + int:=int+qu^.werte[xMi-j + (i+j)*qu^.params.xSteps]; + for j:=0 to min(i-tMi,xMa-xMi) do begin + int:=int+qu^.werte[xMi+j + (i-j)*qu^.params.xSteps]; + werte[j+xMi-xOf + (i-j-tOf)*params.xSteps]:=int*faktor; end; end; - for i:=xmi+1 to xma do begin // nach oben austretendes (exkl. Ecke links oben) + for i:=xMi+1 to xMa do begin // nach oben austretendes (exkl. Ecke links oben) int:=0; - for j:=1 to min(qu^.params.tsiz-1-tma,i) do - int:=int+qu^.werte[i-j + (tma+j)*qu^.params.xsteps]; - for j:=0 to min(tma-tmi,xma-i) do begin - int:=int+qu^.werte[i+j + (tma-j)*qu^.params.xsteps]; - werte[i+j-xof + (tma-j-tof)*params.xsteps]:=int*faktor; + for j:=1 to min(qu^.params.tSiz-1-tMa,i) do + int:=int+qu^.werte[i-j + (tMa+j)*qu^.params.xSteps]; + for j:=0 to min(tMa-tMi,xMa-i) do begin + int:=int+qu^.werte[i+j + (tMa-j)*qu^.params.xSteps]; + werte[i+j-xOf + (tMa-j-tOf)*params.xSteps]:=int*faktor; end; end; end; end{of case}; end; -procedure tLLWerte.integriereDouble(qu: pTLLWerteDouble; xmi,xma,tmi,tma,xof,tof: longint; richtung: tIntegrationsRichtung); +procedure tLLWerte.integriereDouble(qu: pTLLWerteDouble; xMi,xMa,tMi,tMa,xOf,tOf: longint; richtung: tIntegrationsRichtung); var i,j: longint; int,faktor: extended; begin case richtung of irHorizontal: begin - faktor:=(qu^.params.xstop-qu^.params.xstart)/(qu^.params.xsteps-1); - for i:=tmi to tma do begin + faktor:=(qu^.params.xStop-qu^.params.xStart)/(qu^.params.xSteps-1); + for i:=tMi to tMa do begin int:=0; - for j:=0 to xmi-1 do - int:=int+qu^.werte[j + i*qu^.params.xsteps]; - for j:=xmi to xma do begin - int:=int+qu^.werte[j + i*qu^.params.xsteps]; - werte[j-xof + (i-tof)*params.xsteps]:=int*faktor; + for j:=0 to xMi-1 do + int:=int+qu^.werte[j + i*qu^.params.xSteps]; + for j:=xMi to xMa do begin + int:=int+qu^.werte[j + i*qu^.params.xSteps]; + werte[j-xOf + (i-tOf)*params.xSteps]:=int*faktor; end; end; end; irEinfall: begin faktor:= sqrt( - sqr((qu^.params.xstop-qu^.params.xstart)/(qu^.params.xsteps-1)) + - sqr((qu^.params.tstop-qu^.params.tstart)/(qu^.params.tsiz-1))); - gibAus('dx = '+floattostr((qu^.params.xstop-qu^.params.xstart)/(qu^.params.xsteps-1)),1); - gibAus('dt = '+floattostr((qu^.params.tstop-qu^.params.tstart)/(qu^.params.tsiz-1)),1); - for i:=tmi to tma do begin // von links eintretendes (inkl. Ecke links unten) + sqr((qu^.params.xStop-qu^.params.xStart)/(qu^.params.xSteps-1)) + + sqr((qu^.params.tStop-qu^.params.tStart)/(qu^.params.tSiz-1))); + gibAus('dx = '+floatToStr((qu^.params.xStop-qu^.params.xStart)/(qu^.params.xSteps-1)),1); + gibAus('dt = '+floatToStr((qu^.params.tStop-qu^.params.tStart)/(qu^.params.tSiz-1)),1); + for i:=tMi to tMa do begin // von links eintretendes (inkl. Ecke links unten) int:=0; - for j:=1 to min(xmi,i) do - int:=int+qu^.werte[xmi-j + (i-j)*qu^.params.xsteps]; - for j:=0 to min(tma-i,xma-xmi) do begin - int:=int+qu^.werte[xmi+j + (i+j)*qu^.params.xsteps]; - werte[j+xmi-xof + (i+j-tof)*params.xsteps]:=int*faktor; + for j:=1 to min(xMi,i) do + int:=int+qu^.werte[xMi-j + (i-j)*qu^.params.xSteps]; + for j:=0 to min(tMa-i,xMa-xMi) do begin + int:=int+qu^.werte[xMi+j + (i+j)*qu^.params.xSteps]; + werte[j+xMi-xOf + (i+j-tOf)*params.xSteps]:=int*faktor; end; end; - for i:=xmi+1 to xma do begin // von unten eintretendes (exkl. Ecke links unten) + for i:=xMi+1 to xMa do begin // von unten eintretendes (exkl. Ecke links unten) int:=0; - for j:=1 to min(tmi,i) do - int:=int+qu^.werte[i-j + (tmi-j)*qu^.params.xsteps]; - for j:=0 to min(tma-tmi,xma-i) do begin - int:=int+qu^.werte[i+j + (tmi+j)*qu^.params.xsteps]; - werte[i+j-xof + (tmi+j-tof)*params.xsteps]:=int*faktor; + for j:=1 to min(tMi,i) do + int:=int+qu^.werte[i-j + (tMi-j)*qu^.params.xSteps]; + for j:=0 to min(tMa-tMi,xMa-i) do begin + int:=int+qu^.werte[i+j + (tMi+j)*qu^.params.xSteps]; + werte[i+j-xOf + (tMi+j-tOf)*params.xSteps]:=int*faktor; end; end; end; irAusfall: begin faktor:= sqrt( - sqr((qu^.params.xstop-qu^.params.xstart)/(qu^.params.xsteps-1)) + - sqr((qu^.params.tstop-qu^.params.tstart)/(qu^.params.tsiz-1))); - gibAus('dx = '+floattostr((qu^.params.xstop-qu^.params.xstart)/(qu^.params.xsteps-1)),1); - gibAus('dt = '+floattostr((qu^.params.tstop-qu^.params.tstart)/(qu^.params.tsiz-1)),1); - for i:=tmi to tma do begin // nach links austretendes (inkl. Ecke links oben) + sqr((qu^.params.xStop-qu^.params.xStart)/(qu^.params.xSteps-1)) + + sqr((qu^.params.tStop-qu^.params.tStart)/(qu^.params.tSiz-1))); + gibAus('dx = '+floatToStr((qu^.params.xStop-qu^.params.xStart)/(qu^.params.xSteps-1)),1); + gibAus('dt = '+floatToStr((qu^.params.tStop-qu^.params.tStart)/(qu^.params.tSiz-1)),1); + for i:=tMi to tMa do begin // nach links austretendes (inkl. Ecke links oben) int:=0; - for j:=1 to min(xmi,qu^.params.tsiz-1-i) do - int:=int+qu^.werte[xmi-j + (i+j)*qu^.params.xsteps]; - for j:=0 to min(i-tmi,xma-xmi) do begin - int:=int+qu^.werte[xmi+j + (i-j)*qu^.params.xsteps]; - werte[j+xmi-xof + (i-j-tof)*params.xsteps]:=int*faktor; + for j:=1 to min(xMi,qu^.params.tSiz-1-i) do + int:=int+qu^.werte[xMi-j + (i+j)*qu^.params.xSteps]; + for j:=0 to min(i-tMi,xMa-xMi) do begin + int:=int+qu^.werte[xMi+j + (i-j)*qu^.params.xSteps]; + werte[j+xMi-xOf + (i-j-tOf)*params.xSteps]:=int*faktor; end; end; - for i:=xmi+1 to xma do begin // nach oben austretendes (exkl. Ecke links oben) + for i:=xMi+1 to xMa do begin // nach oben austretendes (exkl. Ecke links oben) int:=0; - for j:=1 to min(qu^.params.tsiz-1-tma,i) do - int:=int+qu^.werte[i-j + (tma+j)*qu^.params.xsteps]; - for j:=0 to min(tma-tmi,xma-i) do begin - int:=int+qu^.werte[i+j + (tma-j)*qu^.params.xsteps]; - werte[i+j-xof + (tma-j-tof)*params.xsteps]:=int*faktor; + for j:=1 to min(qu^.params.tSiz-1-tMa,i) do + int:=int+qu^.werte[i-j + (tMa+j)*qu^.params.xSteps]; + for j:=0 to min(tMa-tMi,xMa-i) do begin + int:=int+qu^.werte[i+j + (tMa-j)*qu^.params.xSteps]; + werte[i+j-xOf + (tMa-j-tOf)*params.xSteps]:=int*faktor; end; end; end; end{of case}; end; -procedure tLLWerte.integriereExtended(qu: pTLLWerteDouble; xmi,xma,tmi,tma,xof,tof: longint; richtung: tIntegrationsRichtung); +procedure tLLWerte.integriereExtended(qu: pTLLWerteDouble; xMi,xMa,tMi,tMa,xOf,tOf: longint; richtung: tIntegrationsRichtung); var i,j: longint; int,faktor: extended; begin case richtung of irHorizontal: begin - faktor:=(qu^.params.xstop-qu^.params.xstart)/(qu^.params.xsteps-1); - for i:=tmi to tma do begin + faktor:=(qu^.params.xStop-qu^.params.xStart)/(qu^.params.xSteps-1); + for i:=tMi to tMa do begin int:=0; - for j:=0 to xmi-1 do - int:=int+qu^.werte[j + i*qu^.params.xsteps]; - for j:=xmi to xma do begin - int:=int+qu^.werte[j + i*qu^.params.xsteps]; - werte[j-xof + (i-tof)*params.xsteps]:=int*faktor; + for j:=0 to xMi-1 do + int:=int+qu^.werte[j + i*qu^.params.xSteps]; + for j:=xMi to xMa do begin + int:=int+qu^.werte[j + i*qu^.params.xSteps]; + werte[j-xOf + (i-tOf)*params.xSteps]:=int*faktor; end; end; end; irEinfall: begin faktor:= sqrt( - sqr((qu^.params.xstop-qu^.params.xstart)/(qu^.params.xsteps-1)) + - sqr((qu^.params.tstop-qu^.params.tstart)/(qu^.params.tsiz-1))); - gibAus('dx = '+floattostr((qu^.params.xstop-qu^.params.xstart)/(qu^.params.xsteps-1)),1); - gibAus('dt = '+floattostr((qu^.params.tstop-qu^.params.tstart)/(qu^.params.tsiz-1)),1); - for i:=tmi to tma do begin // von links eintretendes (inkl. Ecke links unten) + sqr((qu^.params.xStop-qu^.params.xStart)/(qu^.params.xSteps-1)) + + sqr((qu^.params.tStop-qu^.params.tStart)/(qu^.params.tSiz-1))); + gibAus('dx = '+floatToStr((qu^.params.xStop-qu^.params.xStart)/(qu^.params.xSteps-1)),1); + gibAus('dt = '+floatToStr((qu^.params.tStop-qu^.params.tStart)/(qu^.params.tSiz-1)),1); + for i:=tMi to tMa do begin // von links eintretendes (inkl. Ecke links unten) int:=0; - for j:=1 to min(xmi,i) do - int:=int+qu^.werte[xmi-j + (i-j)*qu^.params.xsteps]; - for j:=0 to min(tma-i,xma-xmi) do begin - int:=int+qu^.werte[xmi+j + (i+j)*qu^.params.xsteps]; - werte[j+xmi-xof + (i+j-tof)*params.xsteps]:=int*faktor; + for j:=1 to min(xMi,i) do + int:=int+qu^.werte[xMi-j + (i-j)*qu^.params.xSteps]; + for j:=0 to min(tMa-i,xMa-xMi) do begin + int:=int+qu^.werte[xMi+j + (i+j)*qu^.params.xSteps]; + werte[j+xMi-xOf + (i+j-tOf)*params.xSteps]:=int*faktor; end; end; - for i:=xmi+1 to xma do begin // von unten eintretendes (exkl. Ecke links unten) + for i:=xMi+1 to xMa do begin // von unten eintretendes (exkl. Ecke links unten) int:=0; - for j:=1 to min(tmi,i) do - int:=int+qu^.werte[i-j + (tmi-j)*qu^.params.xsteps]; - for j:=0 to min(tma-tmi,xma-i) do begin - int:=int+qu^.werte[i+j + (tmi+j)*qu^.params.xsteps]; - werte[i+j-xof + (tmi+j-tof)*params.xsteps]:=int*faktor; + for j:=1 to min(tMi,i) do + int:=int+qu^.werte[i-j + (tMi-j)*qu^.params.xSteps]; + for j:=0 to min(tMa-tMi,xMa-i) do begin + int:=int+qu^.werte[i+j + (tMi+j)*qu^.params.xSteps]; + werte[i+j-xOf + (tMi+j-tOf)*params.xSteps]:=int*faktor; end; end; end; irAusfall: begin faktor:= sqrt( - sqr((qu^.params.xstop-qu^.params.xstart)/(qu^.params.xsteps-1)) + - sqr((qu^.params.tstop-qu^.params.tstart)/(qu^.params.tsiz-1))); - gibAus('dx = '+floattostr((qu^.params.xstop-qu^.params.xstart)/(qu^.params.xsteps-1)),1); - gibAus('dt = '+floattostr((qu^.params.tstop-qu^.params.tstart)/(qu^.params.tsiz-1)),1); - for i:=tmi to tma do begin // nach links austretendes (inkl. Ecke links oben) + sqr((qu^.params.xStop-qu^.params.xStart)/(qu^.params.xSteps-1)) + + sqr((qu^.params.tStop-qu^.params.tStart)/(qu^.params.tSiz-1))); + gibAus('dx = '+floatToStr((qu^.params.xStop-qu^.params.xStart)/(qu^.params.xSteps-1)),1); + gibAus('dt = '+floatToStr((qu^.params.tStop-qu^.params.tStart)/(qu^.params.tSiz-1)),1); + for i:=tMi to tMa do begin // nach links austretendes (inkl. Ecke links oben) int:=0; - for j:=1 to min(xmi,qu^.params.tsiz-1-i) do - int:=int+qu^.werte[xmi-j + (i+j)*qu^.params.xsteps]; - for j:=0 to min(i-tmi,xma-xmi) do begin - int:=int+qu^.werte[xmi+j + (i-j)*qu^.params.xsteps]; - werte[j+xmi-xof + (i-j-tof)*params.xsteps]:=int*faktor; + for j:=1 to min(xMi,qu^.params.tSiz-1-i) do + int:=int+qu^.werte[xMi-j + (i+j)*qu^.params.xSteps]; + for j:=0 to min(i-tMi,xMa-xMi) do begin + int:=int+qu^.werte[xMi+j + (i-j)*qu^.params.xSteps]; + werte[j+xMi-xOf + (i-j-tOf)*params.xSteps]:=int*faktor; end; end; - for i:=xmi+1 to xma do begin // nach oben austretendes (exkl. Ecke links oben) + for i:=xMi+1 to xMa do begin // nach oben austretendes (exkl. Ecke links oben) int:=0; - for j:=1 to min(qu^.params.tsiz-1-tma,i) do - int:=int+qu^.werte[i-j + (tma+j)*qu^.params.xsteps]; - for j:=0 to min(tma-tmi,xma-i) do begin - int:=int+qu^.werte[i+j + (tma-j)*qu^.params.xsteps]; - werte[i+j-xof + (tma-j-tof)*params.xsteps]:=int*faktor; + for j:=1 to min(qu^.params.tSiz-1-tMa,i) do + int:=int+qu^.werte[i-j + (tMa+j)*qu^.params.xSteps]; + for j:=0 to min(tMa-tMi,xMa-i) do begin + int:=int+qu^.werte[i+j + (tMa-j)*qu^.params.xSteps]; + werte[i+j-xOf + (tMa-j-tOf)*params.xSteps]:=int*faktor; end; end; end; @@ -1590,7 +1677,7 @@ var aParams,nParams: longint; // Index der alten und neuen Parameter parameter: array[0..1,boolean,0..3] of extended; // dim0 nummeriert Parametersätze - // dim1: Ableitung (true) oder Werte (false) + // dim1: Ableitung (true) oder werte (false) // dim2: position, 1/breite, amplitude, hintergrund fehlers: array[0..1] of extended; t0,t1,t2,t3, // Zwischenergebnisse @@ -1600,22 +1687,22 @@ var ignBr,ignVersch: boolean; // Breite/Verschiebung am Anschlag! begin if senkrecht then begin - qpSchritt:=params.xsteps; // Schritt in der Quelle parallel zur Fit-Richtung + qpSchritt:=params.xSteps; // Schritt in der Quelle parallel zur Fit-Richtung qsSchritt:=1; // Schritt in der Quelle senkrecht zur Fit-Richtung - zpSchritt:=params.xsteps; // Schritt im Ziel in positionsMitten-Richtung + zpSchritt:=params.xSteps; // Schritt im Ziel in positionsMitten-Richtung zdSchritt:=1; // Schritt im Ziel in Daten-Richtung (= senkrecht zur Fit-Richtung) - pMi:=params.tstart; - pMa:=params.tstop; - pLen:=params.tsiz; + pMi:=params.tStart; + pMa:=params.tStop; + pLen:=params.tSiz; end else begin - qsSchritt:=params.xsteps; + qsSchritt:=params.xSteps; qpSchritt:=1; zdSchritt:=length(positionsMitten); zpSchritt:=1; - pMi:=params.xstart; - pMa:=params.xstop; - pLen:=params.xsteps; + pMi:=params.xStart; + pMa:=params.xStop; + pLen:=params.xSteps; end; maxBreite:=1/maxBreite; @@ -1660,7 +1747,7 @@ begin nParams:=aParams; {$DEFINE gauszFitBerechneWerte} - {$I gauszFit.inc} // Werte + Gradienten berechnen + {$I gauszFit.inc} // werte + Gradienten berechnen {$UNDEF} schrittFaktor:=1; @@ -1696,7 +1783,7 @@ begin end; {$DEFINE gauszFitBerechneWerte} - {$I gauszFit.inc} // Werte + Gradienten berechnen + {$I gauszFit.inc} // werte + Gradienten berechnen {$UNDEF} if fehlers[aParams]>2*fehlers[nParams] then begin @@ -1718,20 +1805,20 @@ begin end; if schrittFaktor<1e-50 then - fehler('Sehr kleiner Schrittfaktor ('+floattostr(schrittFaktor)+') beim Fitten!'); + fehler('Sehr kleiner Schrittfaktor ('+floatToStr(schrittFaktor)+') beim Fitten!'); inc(zaehl); {$IFDEF gauszFitStatus} if (zaehl mod 10000)=0 then gibAus( - floattostr(fehlers[aParams])+' '+ - floattostr(qdrSumm)+' '+ - inttostr(byte((verbesserung<-10) or (fehlers[aParams]*100<qdrSumm)))+' '+ - inttostr(byte(ignVersch or (abs(schrittFaktor*parameter[aParams,true,0])<1)))+' '+ - inttostr(byte(ignBr or (abs(schrittFaktor*parameter[aParams,true,1]/parameter[aParams,false,1])<0.01)))+' '+ - inttostr(byte(abs(schrittFaktor*parameter[aParams,true,2]/parameter[aParams,false,2])<0.01))+' '+ - inttostr(byte(abs(schrittFaktor*parameter[aParams,true,3]/max(abs(parameter[aParams,false,3]),1e-10))<0.01))+' '+ - inttostr(verbesserung), + floatToStr(fehlers[aParams])+' '+ + floatToStr(qdrSumm)+' '+ + intToStr(byte((verbesserung<-10) or (fehlers[aParams]*100<qdrSumm)))+' '+ + intToStr(byte(ignVersch or (abs(schrittFaktor*parameter[aParams,true,0])<1)))+' '+ + intToStr(byte(ignBr or (abs(schrittFaktor*parameter[aParams,true,1]/parameter[aParams,false,1])<0.01)))+' '+ + intToStr(byte(abs(schrittFaktor*parameter[aParams,true,2]/parameter[aParams,false,2])<0.01))+' '+ + intToStr(byte(abs(schrittFaktor*parameter[aParams,true,3]/max(abs(parameter[aParams,false,3]),1e-10))<0.01))+' '+ + intToStr(verbesserung), 3); {$ENDIF} @@ -1762,49 +1849,72 @@ var i: int64; begin result:=0; - for i:=0 to params.xsteps-1 do + for i:=0 to params.xSteps-1 do result:=result + werte[i]; - for i:=1 to params.tsiz-2 do - result:=result + werte[i*params.xsteps]; - for i:=0 to params.xsteps-1 do - result:=result + werte[i + (params.tsiz-1)*params.xsteps]; - for i:=1 to params.tsiz-2 do - result:=result + werte[params.xsteps-1 + i*params.xsteps]; + for i:=1 to params.tSiz-2 do + result:=result + werte[i*params.xSteps]; + for i:=0 to params.xSteps-1 do + result:=result + werte[i + (params.tSiz-1)*params.xSteps]; + for i:=1 to params.tSiz-2 do + result:=result + werte[params.xSteps-1 + i*params.xSteps]; result:= - result/2/(params.xsteps+params.tsiz-2); + result/2/(params.xSteps+params.tSiz-2); end; -procedure tLLWerte.filtereHoheFrequenzen(betraege: tLLWerte; xFak,yFak: extended); +procedure tLLWerte.kantenFilter(betraege: tLLWerte; xFak,yFak: extended; filterTyp: tKantenFilterTyp); +var + dummy: tIntPoint; +begin + kantenFilter(betraege,xFak,yFak,filterTyp,false,dummy); +end; + +procedure tLLWerte.kantenFilter(betraege: tLLWerte; xFak,yFak: extended; filterTyp: tKantenFilterTyp; einseitig: boolean; out maxPos: tIntPoint); var maxima: tIntPointArray; - i,im,j,jm,mCnt: int64; + i,iM,j,jM,mCnt,di,dj: int64; wert,minWert,maxWert: extended; + istVollKomplex: byte; // 1=nein, 2=ja + schiebung: tIntPoint; begin - setlength(maxima,0); + istVollKomplex:=(params.tSiz div betraege.params.tSiz); + if (betraege.params.tSiz*istVollKomplex <> params.tSiz) or + (betraege.params.xSteps <> params.xSteps) or + (not (istVollKomplex in [1,2])) then + raise exception.create( + 'Die Dimension der Beträge ('+intToStr(betraege.params.xSteps)+' x '+intToStr(betraege.params.tSiz)+') stimmt nicht mit '+ + 'der Dimension der Werte ('+intToStr(params.xSteps)+' x '+intToStr(params.tSiz)+') -- oder deren ersten t-Hälfte -- überein ('+intToStr(istVollKomplex)+')!'); + if einseitig then begin + if istVollKomplex<>2 then + raise exception.create('Kann nur voll komplexe Werte einseitig per Kantenfilter filtern!'); + if filterTyp<>kfHochpass then + raise exception.create('Kann nur einen Hochpass als einseitigen Kantenfilter verwenden!'); + end; + + setLength(maxima,0); mCnt:=0; - for j:=0 to params.tsiz div 2 + 1 do begin - jm:=j - 1 + params.tsiz*byte(j=0); - for i:=0 to params.xsteps div 2 + 1 do begin - im:=i - 1 + params.xsteps*byte(i=0); - wert:=betraege.werte[i+j*params.xsteps]; + for j:=0 to betraege.params.tSiz div 2 + 1 do begin + jM:=j - 1 + betraege.params.tSiz*byte(j=0); + for i:=0 to betraege.params.xSteps div 2 + 1 do begin + iM:=i - 1 + betraege.params.xSteps*byte(i=0); + wert:=betraege.werte[i+j*betraege.params.xSteps]; if - (wert > betraege.werte[im+j*params.xsteps]) and - (wert > betraege.werte[i+jm*params.xsteps]) and - (wert > betraege.werte[(i+1)+j*params.xsteps]) and - (wert > betraege.werte[i+(j+1)*params.xsteps]) then begin + (wert > betraege.werte[iM+j*betraege.params.xSteps]) and + (wert > betraege.werte[i+jM*betraege.params.xSteps]) and + (wert > betraege.werte[(i+1)+j*betraege.params.xSteps]) and + (wert > betraege.werte[i+(j+1)*betraege.params.xSteps]) then begin if length(maxima)<=mCnt then - setlength(maxima,length(maxima)+1024); + setLength(maxima,length(maxima)+1024); maxima[mCnt]['x']:=i; maxima[mCnt]['y']:=j; inc(mCnt); end; end; end; - setlength(maxima,mCnt); - writeln(length(maxima),' (von ',params.xsteps*params.tsiz,')'); + setLength(maxima,mCnt); + writeln(length(maxima),' (von ',betraege.params.xSteps*betraege.params.tSiz,')'); betraege.sortiereMaxima(maxima); - mCnt:=1; + maxPos:=maxima[1]; maxWert:=0; for i:=1 to length(maxima)-1 do begin minWert:=0; @@ -1818,34 +1928,72 @@ begin end; if (i=1) or (minWert>maxWert) then begin maxWert:=minWert; - mCnt:=i; + maxPos:=maxima[i]; end; end; - im:=params.xsteps div 2 + 1; - jm:=params.tsiz div 2 + 1; - for j:=0 to jm do - for i:=0 to im do begin - wert:=(sqr(i)*xFak+sqr(j)*yFak)/(sqr(maxima[mCnt]['x'])*xFak+sqr(maxima[mCnt]['y'])*yFak); - if wert > 0.6 then - wert:=0 - else if wert > 0.4 then - wert:=(1+cos((wert-0.4)/0.2*pi))/2 - else - wert:=1; - - werte[i+j*params.xsteps]:= - werte[i+j*params.xsteps]*wert; - if (i>0) and (i<im) then - werte[params.xsteps-i+j*params.xsteps]:= - werte[params.xsteps-i+j*params.xsteps]*wert; - if (j>0) and (j<jm) then - werte[i+(params.tsiz-j)*params.xsteps]:= - werte[i+(params.tsiz-j)*params.xsteps]*wert; - if (i>0) and (i<im) and (j>0) and (j<jm) then - werte[params.xsteps-i+(params.tsiz-j)*params.xsteps]:= - werte[params.xsteps-i+(params.tsiz-j)*params.xsteps]*wert; + if istVollKomplex=1 then begin + iM:=params.xSteps div 2 + 1; + jM:=params.tSiz div 2 + 1; + for j:=0 to jM do + for i:=0 to iM do begin + wert:=(sqr(i)*xFak+sqr(j)*yFak)/(sqr(maxPos['x'])*xFak+sqr(maxPos['y'])*yFak); + if wert > 0.6 then + wert:=0 + else if wert > 0.4 then + wert:=(1+cos((wert-0.4)/0.2*pi))/2 + else + wert:=1; + if filterTyp=kfHochpass then + wert:=1-wert; + + werte[i+j*params.xSteps]:= + werte[i+j*params.xSteps]*wert; + if (i>0) and (i<iM) then + werte[params.xSteps-i+j*params.xSteps]:= + werte[params.xSteps-i+j*params.xSteps]*wert; + if (j>0) and (j<jM) then + werte[i+(params.tSiz-j)*params.xSteps]:= + werte[i+(params.tSiz-j)*params.xSteps]*wert; + if (i>0) and (i<iM) and (j>0) and (j<jM) then + werte[params.xSteps-i+(params.tSiz-j)*params.xSteps]:= + werte[params.xSteps-i+(params.tSiz-j)*params.xSteps]*wert; + end; + end + else begin + if einseitig then begin + schiebung:=maxPos; + filterTyp:=kfTiefpass; + end + else + schiebung:=intPoint(0,0); + iM:=params.xSteps; + jM:=params.tSiz div 2; + for j:=0 to jM-1 do begin + dj:=abs(j-schiebung['y']); + if jM-dj<dj then + dj:=jM-dj; + for i:=0 to iM-1 do begin + di:=abs(i-schiebung['x']); + if iM-di<di then + di:=iM-di; + wert:=(sqr(di)*xFak+sqr(dj)*yFak)/(sqr(maxPos['x'])*xFak+sqr(maxPos['y'])*yFak); + if wert > 0.6 then + wert:=0 + else if wert > 0.4 then + wert:=(1+cos((wert-0.4)/0.2*pi))/2 + else + wert:=1; + if filterTyp=kfHochpass then + wert:=1-wert; + + werte[i+j*params.xSteps]:= // Re + werte[i+j*params.xSteps]*wert; + werte[i+(jM+j)*params.xSteps]:= // Im + werte[i+(jM+j)*params.xSteps]*wert; + end; end; + end; end; procedure tLLWerte.fenstereWerte(xMi,xMa,tMi,tMa: int64; xFen,tFen: tFenster; hg: extended); @@ -1854,8 +2002,8 @@ var begin for j:=tMi to tMa do for i:=xMi to xMa do - werte[i+j*params.xsteps]:= - (werte[i+j*params.xsteps]-hg)*xFen.Werte[i]*tFen.Werte[j]; + werte[i+j*params.xSteps]:= + (werte[i+j*params.xSteps]-hg)*xFen.werte[i]*tFen.werte[j]; end; // tWavelet ******************************************************************** @@ -1883,46 +2031,46 @@ var tmpFFTAlgo: tFFTAlgorithmus; begin result:=false; - werte.params.xsteps:=2; - werte.params.transformationen.xstart:=0; - werte.params.transformationen.xstop:=1; - werte.params.transformationen.tstart:=0; - werte.params.transformationen.tstop:=1; + werte.params.xSteps:=2; + werte.params.transformationen.xStart:=0; + werte.params.transformationen.xStop:=1; + werte.params.transformationen.tStart:=0; + werte.params.transformationen.tStop:=1; if mitFFT then begin - if round(power(2,round(ln(werte.params.tsiz)/ln(2))))<>werte.params.tsiz then begin - gibAus('Waveletlänge muss eine Zweierpotenz sein bei Faltung mittels FFT, '+inttostr(werte.params.tsiz)+' ist das nicht!',3); + if round(power(2,round(ln(werte.params.tSiz)/ln(2))))<>werte.params.tSiz then begin + gibAus('Waveletlänge muss eine Zweierpotenz sein bei Faltung mittels FFT, '+intToStr(werte.params.tSiz)+' ist das nicht!',3); exit; end; - werte.holeRam(1); + werte.holeRAM(1); case typ of wtSin2: begin - hlen:=round(tfwhm); - for i:=0 to hlen do begin + hLen:=round(tfwhm); + for i:=0 to hLen do begin tmp:=sqr(cos(i*pi/2/tfwhm)); if i>0 then begin - werte.werte[(werte.params.tsiz-i)*2]:= tmp*cos(-i*freq*2*pi); - werte.werte[(werte.params.tsiz-i)*2+1]:=tmp*sin(-i*freq*2*pi); + werte.werte[(werte.params.tSiz-i)*2]:= tmp*cos(-i*freq*2*pi); + werte.werte[(werte.params.tSiz-i)*2+1]:=tmp*sin(-i*freq*2*pi); end; werte.werte[2*i]:= tmp*cos(i*freq*2*pi); werte.werte[2*i+1]:=tmp*sin(i*freq*2*pi); end; - for i:=hlen+1 to werte.params.tsiz-1-hlen do begin + for i:=hLen+1 to werte.params.tSiz-1-hLen do begin werte.werte[2*i]:=0; werte.werte[2*i+1]:=0; end; - gibAus(inttostr(werte.params.xsteps)+' '+inttostr(werte.params.tsiz)+' '+inttostr(length(werte.werte)),1); - tmpFFTAlgo:=createFFTAlgorithmus(2*hlen,doRes,doResIms); + gibAus(intToStr(werte.params.xSteps)+' '+intToStr(werte.params.tSiz)+' '+intToStr(length(werte.werte)),1); + tmpFFTAlgo:=createFFTAlgorithmus(2*hLen,doRes,doResIms); werte.fft(true,false,tmpFFTAlgo,nil,0,pvFehler); tmpFFTAlgo.free; end; wtFrequenzfenster: begin - hlen:=werte.params.tsiz div 2; - for i:=0 to hlen do begin - werte.werte[2*i]:=Byte(tfwhm*Abs(i/werte.params.tsiz-freq)<=1); // Re=1 <=> |f-f_Mitte| < Laenge/T_fwhm + hLen:=werte.params.tSiz div 2; + for i:=0 to hLen do begin + werte.werte[2*i]:=byte(tfwhm*abs(i/werte.params.tSiz-freq)<=1); // Re=1 <=> |f-f_Mitte| < Laenge/T_fwhm werte.werte[2*i+1]:=0; // Dummy-Wavelet end; - for i:=hlen+1 to 2*hlen-1 do begin + for i:=hLen+1 to 2*hLen-1 do begin werte.werte[2*i]:=0; // Ims = 0 werte.werte[2*i+1]:=0; // Dummy-Wavelet end; @@ -1934,13 +2082,13 @@ begin gibAus('Ich kann nur das ''Sin2''-Wavelet im Zeitbereich definieren!',3); exit; end; - hlen:=round(tfwhm); - werte.params.tsiz:=2*hlen+1; - setlength(werte.werte,werte.params.xsteps*werte.params.tsiz); - for i:=-hlen to hlen do begin + hLen:=round(tfwhm); + werte.params.tSiz:=2*hLen+1; + setLength(werte.werte,werte.params.xSteps*werte.params.tSiz); + for i:=-hLen to hLen do begin tmp:=sqr(cos(i*pi/2/tfwhm)); - werte.werte[2*(i+hlen)]:= tmp*cos(i*freq*2*pi); - werte.werte[2*(i+hlen)+1]:=tmp*sin(i*freq*2*pi); + werte.werte[2*(i+hLen)]:= tmp*cos(i*freq*2*pi); + werte.werte[2*(i+hLen)+1]:=tmp*sin(i*freq*2*pi); end; end; nur0:=true; @@ -1953,17 +2101,17 @@ end; constructor tWavelet.create; var - ps: tExtrainfos; + ps: tExtraInfos; begin inherited create; - ps:=tExtrainfos.create; + ps:=tExtraInfos.create; werte:=tLLWerteDouble.create(ps); pvFehler:=0; end; destructor tWavelet.destroy; begin - werte.params.Free; + werte.params.free; werte.free; inherited destroy; end; |