Files
lazarus-ccr/applications/lazstats/source_orig/smoothdataunit.pas
wp_xxyyzz 819af1d403 LazStats: Adding original source, part 7.
git-svn-id: https://svn.code.sf.net/p/lazarus-ccr/svn@7886 8e941d3f-bd1b-0410-a28a-d453659cc2b4
2020-11-16 11:21:34 +00:00

131 lines
3.2 KiB
ObjectPascal

unit SmoothDataUnit;
{$mode objfpc}{$H+}
interface
uses
Classes, SysUtils, FileUtil, LResources, Forms, Controls, Graphics, Dialogs,
StdCtrls, Buttons, MainUnit, Globals, FunctionsLib, OutPutUnit,
DataProcs, DictionaryUnit, Math;
type
{ TDataSmoothingForm }
TDataSmoothingForm = class(TForm)
CancelBtn: TButton;
Memo1: TMemo;
RepeatEdit: TEdit;
RepeatChk: TCheckBox;
ResetBtn: TButton;
ComputeBtn: TButton;
ReturnBtn: TButton;
SelectedEdit: TEdit;
Label2: TLabel;
VarInBtn: TBitBtn;
VarOutBtn: TBitBtn;
Label1: TLabel;
VarList: TListBox;
procedure ComputeBtnClick(Sender: TObject);
procedure ResetBtnClick(Sender: TObject);
procedure VarInBtnClick(Sender: TObject);
procedure VarOutBtnClick(Sender: TObject);
private
{ private declarations }
public
{ public declarations }
end;
var
DataSmoothingForm: TDataSmoothingForm;
implementation
{ TDataSmoothingForm }
procedure TDataSmoothingForm.ResetBtnClick(Sender: TObject);
var i : integer;
begin
VarList.Clear;
for i := 1 to NoVariables do
VarList.Items.Add(OS3MainFrm.DataGrid.Cells[i,0]);
RepeatEdit.Text := '1';
SelectedEdit.Text := '';
VarInBtn.Visible := true;
VarOutBtn.Visible := false;
end;
procedure TDataSmoothingForm.ComputeBtnClick(Sender: TObject);
VAR
DataPts, OutPts : DblDyneVec;
avalue, dblvalue, avg : double;
result, N, Reps, intvalue, i, j, VarCol : integer;
VarLabel, strvalue : string;
begin
N := NoCases;
SetLength(DataPts,N);
SetLength(OutPts,N);
Reps := StrToInt(RepeatEdit.Text);
Varlabel := SelectedEdit.Text;
for i := 1 to NoVariables do
if VarLabel = OS3MainFrm.DataGrid.Cells[i,0] then VarCol := i;
for i := 0 to N - 1 do
begin
avalue := StrToFloat(OS3MainFrm.DataGrid.Cells[VarCol,i+1]);
DataPts[i] := avalue;
end;
// repeat smoothing for number of times elected
OutPts[0] := DataPts[0];
OutPts[N-1] := DataPts[N-1];
for j := 1 to Reps do
begin
for i := 1 to N - 2 do
begin
avg := (DataPts[i-1] + DataPts[i] + DataPts[i+1]) / 3.0;
OutPts[i] := avg;
end;
if j < reps then
for i := 0 to N - 1 do DataPts[i] := OutPts[i];
end;
// create a new variable and copy smoothed data into it
strvalue := 'Smoothed' + VarLabel;
DictionaryFrm.NewVar(NoVariables+1);
DictionaryFrm.DictGrid.Cells[1,NoVariables] := strvalue;
OS3MainFrm.DataGrid.Cells[NoVariables,0] := strvalue;
for i := 0 to N - 1 do
begin
strvalue := format('%9.3f',[OutPts[i]]);
OS3MainFrm.DataGrid.Cells[NoVariables,i+1] := strvalue;
end;
// clean up
OutPts := nil;
DataPts := nil;
end;
procedure TDataSmoothingForm.VarInBtnClick(Sender: TObject);
var index : integer;
begin
index := VarList.ItemIndex;
SelectedEdit.Text := VarList.Items.Strings[index];
VarList.Items.Delete(index);
VarInBtn.Visible := false;
VarOutBtn.Visible := true;
end;
procedure TDataSmoothingForm.VarOutBtnClick(Sender: TObject);
begin
VarList.Items.Add(SelectedEdit.Text);
SelectedEdit.Text := '';
VarInBtn.Visible := true;
VarOutBtn.Visible := false;
end;
initialization
{$I smoothdataunit.lrs}
end.