private void rampLoop()
{
readParametersFromUI();
ScanParameters sp = createInitialScanParameters();
initializeHardware();
CavityScanData scanData = scan(sp);
double[] masterDataFit;
double[] slaveDataFit;
System.IO.StreamWriter file = new System.IO.StreamWriter("c:\\cavityData.txt");
while (State != ControllerState.STOPPED)
{
displayData(sp, scanData);
masterDataFit = CavityScanFitHelper.FitLorenzianToMasterData(scanData, sp.Low, sp.High);
saveFitData(file, masterDataFit[1]);
displayMasterFit(sp, masterDataFit);
slaveDataFit = CavityScanFitHelper.FitLorenzianToSlaveData(scanData, sp.Low, sp.High);
saveFitData(file, slaveDataFit[1]);
displaySlaveFit(sp, slaveDataFit);
switch (State)
{
case ControllerState.FREERUNNING:
releaseLaser();
break;
case ControllerState.CAVITYSTABILIZED:
ScanOffset = calculateNewScanCentre(sp, masterDataFit);
sp.High = ScanOffset + scanWidth;
sp.Low = ScanOffset - scanWidth;
setToLaserEngaged();
break;
case ControllerState.LASERLOCKING:
ScanOffset = calculateNewScanCentre(sp, masterDataFit);
sp.High = ScanOffset + scanWidth;
sp.Low = ScanOffset - scanWidth;
LaserSetPoint = CalculateLaserSetPoint(masterDataFit, slaveDataFit);
State = ControllerState.LASERLOCKED;
ui.updateUIState(State);
break;
case ControllerState.LASERLOCKED:
ScanOffset = calculateNewScanCentre(sp, masterDataFit);
sp.High = ScanOffset + scanWidth;
sp.Low = ScanOffset - scanWidth;
LaserSetPoint = tweakSetPoint(LaserSetPoint); //does nothing if not tweaked
/*Console.WriteLine("width=" + slaveDataFit[0].ToString() + ", centre =" + slaveDataFit[1].ToString()
+ ", amp=" + slaveDataFit[2].ToString() + ", offset=" + slaveDataFit[3].ToString());*/
double shift = calculateDeviationFromSetPoint(LaserSetPoint, masterDataFit, slaveDataFit);
VoltageToLaser = calculateNewVoltageToLaser(VoltageToLaser, shift);
break;
}
if (lState == LaserState.BUSY)
{
tcl.SetLaserVoltage(VoltageToLaser);
}
scanData = scan(sp);
}
file.Close();
finalizeRamping();
}