Example #1
0
        /// <summary>
        /// Reads some analogue inputs.
        /// The basic unit of the program.
        /// </summary>
        private CavityScanData acquireAI(ScanParameters sp)
        {
            CavityScanData scanData = new CavityScanData(sp.Steps, aiChannels, lookupAI, photodiodes[0], photodiodes[1]); //How many channels we expect. one pd for each slave, the He-Ne and the cavity voltage.

            scanData.AIData = tcl.ReadAI(sp.Steps);
            return(scanData);
        }
Example #2
0
        /// <summary>
        /// Reads some analogue inputs.
        /// The basic unit of the program.
        /// </summary>
        private CavityScanData acquireAI(ScanParameters sp)
        {
            CavityScanData scanData = new CavityScanData(sp.Steps, aiChannels, config.Lasers, config.Cavity, config.MasterLaser); //How many channels we expect. one pd for each slave, the He-Ne and the cavity voltage.

            scanData.AIData = tcl.ReadAI(sp.Steps);
            return(scanData);
        }
Example #3
0
 private void plotCavity(CavityScanData data)
 {
     double[] indeces = new double[data.GetCavityData().Length];
     for (int i = 0; i < indeces.Length; i++)
     {
         indeces[i] = i;
     }
     ui.DisplayCavityData(indeces, data.GetCavityData());
 }
Example #4
0
 private void plotSlaveNoFit(string name, CavityScanData data)
 {
     double[] cavity = data.GetCavityData();
     double[] slave = data.GetSlaveData(name);
     ui.DisplaySlaveDataNoFit(name, cavity, slave);
 }
Example #5
0
 private void plotSlave(string name, CavityScanData data, double[] slaveFit)
 {
     double[] cavity = data.GetCavityData();
     double[] slave = data.GetSlaveData(name);
     ui.DisplaySlaveData(name, cavity, slave, CavityScanFitHelper.CreatePointsFromFit(cavity, slaveFit));
 }
Example #6
0
 private void plotMaster(CavityScanData data, double[] MasterFit)
 {
     double[] cavity = data.GetCavityData();
     double[] master = data.GetMasterData();
     ui.DisplayMasterData(cavity, master, CavityScanFitHelper.CreatePointsFromFit(cavity, MasterFit));
 }
Example #7
0
        /// <summary>
        /// The main loop. Reads the analog inputs, fits to the data and (when locked) adjusts the slave laser voltage.
        /// </summary>
        private void mainLoop()
        {
            fits = new Dictionary<string, double[]>(); //Somewhere to store the fits for an iteration.
            readParametersFromUI();                             //This isn't part of the loop. Do an initial setup of the parameters.
            ScanParameters sp = createInitialScanParameters();
            double masterVoltage = 0;
            setupMasterVoltageOut();
            writeMasterVoltageOut(0);
            disposeMasterVoltageOut();
            DateTime previousTime = DateTime.Now;

            initializeAIHardware(sp);

            CavityScanData scanData = new CavityScanData(sp.Steps, aiChannels, config.Lasers, config.Cavity, config.MasterLaser);
            int count = 0;

            while (TCLState != ControllerState.STOPPED)
            {
                double[] lastCav= scanData.GetCavityData();

                scanData = acquireAI(sp);
                if (ui.scanAvCheckBox.Checked == true)
                {
                    scanData.SetAverageCavityData(lastCav);
                }
                if (scanData != null)
                {
                    plotCavity(scanData);
                    updateTime(previousTime);
                    previousTime = DateTime.Now;
                    if ((scanData.GetCavityData())[sp.Steps - 1] < config.MaxInputVoltage) // if the cavity ramp voltage exceeds the input voltage - do nothing
                    {

                        if(checkRampChannel() == true)
                        {

                            //if the cavity length is locked, use the set point to determine what voltage to output
                            if (ui.masterLockEnableCheck.Checked == true)
                            {
                                fits["masterFits"] = fitMaster(scanData);
                                plotMaster(scanData, fits["masterFits"]);
                                masterVoltage = calculateNewMasterVoltage(masterVoltage);
                                setupMasterVoltageOut();
                                 //write difference to analog output
                                writeMasterVoltageOut(masterVoltage);
                                ui.SetVtoOffsetVoltage(masterVoltage);
                                ui.SetMasterFitTextBox(fits["masterFits"][1]-masterVoltage);
                                disposeMasterVoltageOut();
                            }
                            //if the cavity length is not locked, allow the voltage out to be scanned
                            else
                            {
                                plotMaster(scanData);
                                setupMasterVoltageOut();
                                masterVoltage=ui.GetVtoOffsetVoltage();
                                writeMasterVoltageOut(masterVoltage);
                                disposeMasterVoltageOut();
                            }
                        }

                        foreach (KeyValuePair<string, SlaveLaser> pair in SlaveLasers)
                        {
                            string slName = pair.Key;
                            SlaveLaser sl = pair.Value;

                            //Some rearrangements to fit only when log fit slave lasers parameters on and/or lock slave lasers on.
                            plotSlaveNoFit(slName, scanData);

                            switch (sl.lState)
                            {
                                case SlaveLaser.LaserState.FREE:

                                    break;

                                case SlaveLaser.LaserState.LOCKING:

                                    fits[slName + "Fits"] = fitSlave(slName, scanData);

                                    plotSlave(slName, scanData, fits[slName + "Fits"]);

                                    sl.CalculateLaserSetPoint(fits["masterFits"], fits[slName + "Fits"]);

                                    sl.Lock();
                                    RefreshErrorGraph(slName);
                                    count = 0;
                                    break;

                                case SlaveLaser.LaserState.LOCKED:

                                    fits[slName + "Fits"] = fitSlave(slName, scanData);
                                    plotSlave(slName, scanData, fits[slName + "Fits"]);

                                    plotError(slName, new double[] { getErrorCount(slName) }, new double[] { fits[slName + "Fits"][1] - fits["masterFits"][1] - sl.LaserSetPoint });

                                    sl.RefreshLock(fits["masterFits"], fits[slName + "Fits"]);
                                    RefreshLockParametersOnUI(sl.Name);
                                    incrementCounter(slName);
                                    count++;
                                    break;
                            }
                            if (ui.logCheckBox.Checked)
                            {
                                double[] masterFitParams;
                                double[] slaveFitParams;
                                if (!fits.TryGetValue("masterFits", out masterFitParams))
                                {
                                    masterFitParams = new double[4] { 0, 0, 0, 0 };
                                }
                                if(!fits.TryGetValue(slName + "Fits", out slaveFitParams))
                                {
                                    slaveFitParams = new double[4] { 0, 0, 0, 0 };
                                };

                                serializer.AddData(new TCLDataLog(DateTime.Now, slName, masterFitParams[1], slaveFitParams[1], sl.VoltageToLaser));
                            }
                        }

                    }
                    else
                    {
                        Console.WriteLine("Cavity ramp voltage out of range");
                        Thread.Sleep(100);
                    }

                }
            }
            endRamping();
        }
Example #8
0
 private void plotSlave(string name, CavityScanData data, double[] slaveFit)
 {
     double[] cavity = data.GetCavityData();
     double[] slave  = data.GetSlaveData(name);
     ui.DisplaySlaveData(name, cavity, slave, CavityScanFitHelper.CreatePointsFromFit(cavity, slaveFit));
 }
Example #9
0
 /// <summary>
 /// Reads some analogue inputs.
 /// The basic unit of the program.
 /// </summary>
 private CavityScanData acquireAI(ScanParameters sp)
 {
     CavityScanData scanData = new CavityScanData(sp.Steps, aiChannels, lookupAI, photodiodes[0], photodiodes[1]); //How many channels we expect. one pd for each slave, the He-Ne and the cavity voltage.
     scanData.AIData = tcl.ReadAI(sp.Steps);
     return scanData;
 }
Example #10
0
 private void plotMaster(CavityScanData data)
 {
     double[] cavity = data.GetCavityData();
     double[] master = data.GetMasterData();
     ui.DisplayMasterData(cavity, master);
 }
Example #11
0
 private double[] fastfitSlave(string name, CavityScanData data, double[] SlaveFitParams)
 {
     return(CavityScanFitHelper.FitLorenzianToData(data.GetCavityData(), data.GetSlaveData(name), SlaveFitParams, config.PointsToConsiderEitherSideOfPeakInFWHMs, config.MaximumNLMFSteps));
 }
Example #12
0
 private double[] fastfitMaster(CavityScanData data, double[] masterFitParams)
 {
     return(CavityScanFitHelper.FitLorenzianToData(data.GetCavityData(), data.GetMasterData(), masterFitParams, config.PointsToConsiderEitherSideOfPeakInFWHMs, config.MaximumNLMFSteps));
 }
Example #13
0
        /// <summary>
        /// The main loop. Reads the analog inputs, fits to the data and (when locked) adjusts the slave laser voltage.
        /// </summary>
        private void mainLoop()
        {
            fits = new Dictionary <string, double[]>(); //Somewhere to store the fits for an iteration.
            readParametersFromUI();                     //This isn't part of the loop. Do an initial setup of the parameters.
            ScanParameters sp            = createInitialScanParameters();
            double         masterVoltage = 0;

            setupMasterVoltageOut();
            writeMasterVoltageOut(0);
            disposeMasterVoltageOut();
            DateTime  previousTime = DateTime.Now;
            Stopwatch stopWatch    = new Stopwatch();

            stopWatch.Start();

            initializeAIHardware(sp);

            CavityScanData scanData = new CavityScanData(sp.Steps, aiChannels, config.Lasers, config.Cavity, config.MasterLaser);
            int            count    = 0;

            while (TCLState != ControllerState.STOPPED)
            {
                updateTime(stopWatch);
                stopWatch.Reset();
                stopWatch.Start();
                double[] lastCav = scanData.GetCavityData();

                scanData = acquireAI(sp);
                if (ui.scanAvCheckBox.Checked == true)
                {
                    scanData.SetAverageCavityData(lastCav);
                }
                if (scanData != null)
                {
                    if (!ui.dissableGUIupdateCheckBox.Checked)
                    {
                        plotCavity(scanData);
                    }
                    ;
                    if ((scanData.GetCavityData())[sp.Steps - 1] < config.MaxInputVoltage) // if the cavity ramp voltage exceeds the input voltage - do nothing
                    {
                        if (checkRampChannel() == true)
                        {
                            switch (MasterLaser.lState)
                            {
                            case MasterLaser.LaserState.FREE:

                                plotMaster(scanData);
                                masterVoltage = ui.GetVtoOffsetVoltage();
                                setupMasterVoltageOut();
                                writeMasterVoltageOut(masterVoltage);
                                disposeMasterVoltageOut();
                                break;

                            case MasterLaser.LaserState.LOCKING:

                                fits["masterFits"] = fitMaster(scanData);
                                plotMaster(scanData, fits["masterFits"]);
                                masterVoltage = calculateNewMasterVoltage(masterVoltage);
                                //write difference to analog output
                                setupMasterVoltageOut();
                                writeMasterVoltageOut(masterVoltage);
                                ui.SetVtoOffsetVoltage(masterVoltage);
                                ui.SetMasterFitTextBox(fits["masterFits"][1] - masterVoltage);
                                disposeMasterVoltageOut();
                                MasterLaser.Lock();
                                break;

                            case MasterLaser.LaserState.LOCKED:

                                if (ui.fastFitCheckBox.Checked)
                                {
                                    fits["masterFits"] = fastfitMaster(scanData, fits["masterFits"]);
                                }
                                else
                                {
                                    fits["masterFits"] = fitMaster(scanData);
                                }
                                if (!ui.dissableGUIupdateCheckBox.Checked)
                                {
                                    plotMaster(scanData, fits["masterFits"]);
                                }
                                ;
                                masterVoltage = calculateNewMasterVoltage(masterVoltage);
                                //write difference to analog output
                                setupMasterVoltageOut();
                                writeMasterVoltageOut(masterVoltage);
                                ui.SetVtoOffsetVoltage(masterVoltage);
                                ui.SetMasterFitTextBox(fits["masterFits"][1] - masterVoltage);
                                disposeMasterVoltageOut();
                                break;
                            }
                        }

                        foreach (KeyValuePair <string, SlaveLaser> pair in SlaveLasers)
                        {
                            string     slName = pair.Key;
                            SlaveLaser sl     = pair.Value;


                            //Some rearrangements to fit only when log fit slave lasers parameters on and/or lock slave lasers on.

                            switch (sl.lState)
                            {
                            case SlaveLaser.LaserState.FREE:

                                plotSlaveNoFit(slName, scanData);
                                //RefreshVoltageOnUI(slName);
                                break;

                            case SlaveLaser.LaserState.LOCKING:

                                fits[slName + "Fits"] = fitSlave(slName, scanData);
                                plotSlave(slName, scanData, fits[slName + "Fits"]);
                                sl.CalculateLaserSetPoint(fits["masterFits"], fits[slName + "Fits"]);
                                sl.Lock();
                                //RefreshVoltageOnUI(slName);
                                RefreshErrorGraph(slName);
                                count = 0;
                                break;


                            case SlaveLaser.LaserState.LOCKED:
                                if (ui.fastFitCheckBox.Checked)
                                {
                                    fits[slName + "Fits"] = fastfitSlave(slName, scanData, fits[slName + "Fits"]);
                                }
                                else
                                {
                                    fits[slName + "Fits"] = fitSlave(slName, scanData);
                                }
                                if (!ui.dissableGUIupdateCheckBox.Checked)
                                {
                                    plotSlave(slName, scanData, fits[slName + "Fits"]);
                                }
                                ;
                                if (!ui.dissableGUIupdateCheckBox.Checked)
                                {
                                    plotError(slName, new double[] { getErrorCount(slName) }, new double[] { fits[slName + "Fits"][1] - fits["masterFits"][1] - sl.LaserSetPoint });
                                }
                                ;
                                sl.RefreshLock(fits["masterFits"], fits[slName + "Fits"]);
                                RefreshLockParametersOnUI(sl.Name);
                                RefreshErrorParametersOnUI(sl.Name);
                                incrementCounter(slName);
                                count++;
                                break;
                            }
                            if (ui.logCheckBox.Checked)
                            {
                                double[] masterFitParams;
                                double[] slaveFitParams;
                                if (!fits.TryGetValue("masterFits", out masterFitParams))
                                {
                                    masterFitParams = new double[4] {
                                        0, 0, 0, 0
                                    };
                                }
                                if (!fits.TryGetValue(slName + "Fits", out slaveFitParams))
                                {
                                    slaveFitParams = new double[4] {
                                        0, 0, 0, 0
                                    };
                                }
                                ;

                                serializer.AddData(new TCLDataLog(DateTime.Now, slName, masterFitParams[1], slaveFitParams[1], sl.VoltageToLaser));
                            }
                        }
                    }
                    else
                    {
                        Console.WriteLine("Cavity ramp voltage out of range");
                        Thread.Sleep(100);
                    }
                }
            }
            endRamping();
        }
Example #14
0
 private void plotMaster(CavityScanData data)
 {
     double[] cavity = data.GetCavityData();
     double[] master = data.GetMasterData();
     ui.DisplayMasterData(cavity, master);
 }
Example #15
0
 private double[] fitMaster(CavityScanData data)
 {
     return(CavityScanFitHelper.FitLorenzianToData(data.GetCavityData(), data.GetMasterData()));
 }
Example #16
0
 private double[] fitMaster(CavityScanData data)
 {
     return CavityScanFitHelper.FitLorenzianToData(data.GetCavityData(), data.GetMasterData());
 }
Example #17
0
 private void plotMaster(CavityScanData data, double[] MasterFit)
 {
     double[] cavity = data.GetCavityData();
     double[] master = data.GetMasterData();
     ui.DisplayMasterData(cavity, master, CavityScanFitHelper.CreatePointsFromFit(cavity, MasterFit));
 }
Example #18
0
 private double[] fitSlave(string name, CavityScanData data)
 {
     return CavityScanFitHelper.FitLorenzianToData(data.GetCavityData(), data.GetSlaveData(name));
 }
Example #19
0
 private double[] fitSlave(string name, CavityScanData data)
 {
     return(CavityScanFitHelper.FitLorenzianToData(data.GetCavityData(), data.GetSlaveData(name)));
 }
Example #20
0
 private void plotCavity(CavityScanData data)
 {
     double[] indeces = new double[data.GetCavityData().Length];
     for (int i = 0; i < indeces.Length; i++)
     {
         indeces[i] = i;
     }
     ui.DisplayCavityData(indeces, data.GetCavityData());
 }
Example #21
0
 private void plotSlaveNoFit(string name, CavityScanData data)
 {
     double[] cavity = data.GetCavityData();
     double[] slave  = data.GetSlaveData(name);
     ui.DisplaySlaveDataNoFit(name, cavity, slave);
 }
Example #22
0
 /// <summary>
 /// Reads some analogue inputs.
 /// The basic unit of the program.
 /// </summary>
 private CavityScanData acquireAI(ScanParameters sp)
 {
     CavityScanData scanData = new CavityScanData(sp.Steps, aiChannels, config.Lasers, config.Cavity, config.MasterLaser); //How many channels we expect. one pd for each slave, the He-Ne and the cavity voltage.
     scanData.AIData = tcl.ReadAI(sp.Steps);
     return scanData;
 }