//---------------------------------------------------------------------------

#include <vcl.h>
#pragma hdrstop

#include "Plot.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TPlotFrame *PlotFrame;
//---------------------------------------------------------------------------
__fastcall TPlotFrame::TPlotFrame(TComponent* Owner)
  : TForm(Owner)
{
  select = 0;
  nodata = 240;
}
//---------------------------------------------------------------------------

void __fastcall TPlotFrame::DisplayLiftData()
{
  float r1,r2,c1,c2,integ1,integ2,ain1,ain2,dt,error,dr1;
  float df;
  r1 = 250;
  r2 = 175;
  c1 = 10e-6;
  c2 = 10e-6;
  dt = 50e-9;
  float startint, devint;
  if (!Profile == NULL) Profile->Free();
  if (!corr == NULL)    corr->Free();
  if (!corr1 == NULL)   corr1->Free();
  Profile = new TFastLineSeries(this);
  Profile->SeriesColor = clBlack;
  Profile->ParentChart = ProfileChart;
  corr = new TFastLineSeries(this);
  corr->SeriesColor = clRed;
  corr->ParentChart = ProfileChart;
  corr1 = new TFastLineSeries(this);
  corr1->SeriesColor = clGreen;
  corr1->ParentChart = ProfileChart;

  ProfileChart->BackColor = clWhite;
  ProfileChart->LeftAxis  ->Grid->Color = clSilver;   //Grid Color
  ProfileChart->BottomAxis->Grid->Color = clSilver;
  //Chart1->BottomAxis->MinorTicks->Visible = false;
  ProfileChart->LeftAxis->LabelStyle = talValue;      //Value in the Label
  ProfileChart->LeftAxis->Increment = 100;

  ProfileChart->BottomAxis->LabelStyle = talValue;
  ProfileChart->BottomAxis->Increment = 10000;
  int i;
  for (i = 0; i < nop; i++)
  {
    Profile->AddXY(i, fi[i], ' ', clBlack);
  }
  ain1 = dt/(r1 * c1);
  ain2 = dt/(r2 * c2);
  integ1 = 0;
  integ2 = 0;
  error = 0;
  for (i = 0; i < nop; i++)
  {
    integ1 += fi[i]* ain1;
    integ2 += (fi[i] + integ1)*ain2;
    dev[i] = -(integ1 + integ2);
    fo[i] = fi[i] + integ1 + integ2;
  }
  for (i = izero; i<izero + 2000; i++) error += fo[i];
  nozero = 2000;
  error = error/nozero;
//----- Correction for the unknown input resistance

  df = error * 0.24;
  //dr1 = 1.0/(0.7316-0.2778) * error;
  //r1 += dr1;
  ain1 = dt/(r1 * c1);
  ain2 = dt/(r2 * c2);
  integ1 = 0;
  integ2 = 0;
  error = 0;
  for (i = 0; i < nop; i++)
  {
    fi[i] = fi[i] - df;
    integ1 += fi[i]* ain1;
    integ2 += (fi[i] + integ1)*ain2;
    dev[i] = -(integ1 + integ2);
    fo[i] = fi[i] + integ1 + integ2;
  }
  for (i = izero; i<izero + 2000; i++) error += fo[i];
  nozero = 2000;
  error = error/nozero;
  for (i = 0; i < nop; i++)
  {
    corr->AddXY(i, fo[i] , ' ', clBlack);
    corr1->AddXY(i, dev[i], ' ', clBlack);
  }
  PlotData();
}

void __fastcall TPlotFrame::PlotData()
{
  int point, point_index,i;
  float value;
  select ++;
  if (select == 3) select = 1;
  DataChart->BackColor = clWhite;
  DataChart->LeftAxis  ->Grid->Color = clSilver;   //Grid Color
  DataChart->BottomAxis->Grid->Color = clSilver;
  //Chart1->BottomAxis->MinorTicks->Visible = false;
  DataChart->LeftAxis->LabelStyle = talValue;      //Value in the Label
  DataChart->LeftAxis->Increment = 100;
  DataChart->BottomAxis->LabelStyle = talValue;
  DataChart->BottomAxis->Increment = 40;

  if ((!F1 == NULL) && (select == 1)) F1->Free();
  if ((!F2 == NULL) && (select == 2)) F2->Free();
  if (select == 1)
  {
    F1 = new TPointSeries(this);
    F1->Pointer->Style = psCircle;
    F1->Pointer->VertSize = 2;
    F1->Pointer->HorizSize = 2;
    F1->Pointer->Brush->Color = clRed;
    F1->Pointer->Pen->Color = clRed;
    F1->SeriesColor = clRed;
    F1->ParentChart = DataChart;
    f1[0] = 0;
  }
  if (select == 2)
  {
    F2 = new TPointSeries(this);
    F2->Pointer->Style = psCircle;
    F2->Pointer->VertSize = 2;
    F2->Pointer->HorizSize = 2;
    F2->Pointer->Brush->Color = clBlue;
    F2->Pointer->Pen->Color = clBlue;
    F2->SeriesColor = clBlue;
    F2->ParentChart = DataChart;
    f2[0] = 0;
  }
  point = 1;
  point_index = 0;
  value = 0;
  for (i = 0; i < nop; i++)
  {
    value += fo[i];
    point_index ++;
    if (point_index == 200)
    {
      if (select == 1) f1[point] = value/50;
      else f2[point] = value/20;
      value = 0;
      point_index = 0;
      point ++;
    }
  }
  for (i = 1; i < nodata+1; i++)
  {
    if (select == 1) F1->AddXY(i, f1[i], ' ', clBlack);
    if (select == 2) F2->AddXY(i, f2[i], ' ', clBlack);
  }
  //TODO: Add your source code here
}
void __fastcall TPlotFrame::FitClick(TObject *Sender)
{
  if (!Fit1 == NULL)  Fit1->Free();
  if (!Fit2 == NULL)  Fit2->Free();
  Fit1 = new TLineSeries(this);
  Fit1->ParentChart = DataChart;
  Fit2 = new TLineSeries(this);
  Fit2->ParentChart = DataChart;
}
//---------------------------------------------------------------------------

