Mai Tai Laser device interface

134 views
Skip to first unread message

Michael Graupner

unread,
Mar 18, 2016, 2:51:40 AM3/18/16
to ac...@googlegroups.com
Hello all,

I wrote a driver and device class for controlling the Mai Tai laser. It works and it integrates with the general Laser class. However, the Laser class and the device interface require some changes to adapt to the Mai Tai : 
- GDD does not make sense with the Mai Tai. 
- I want to add an indicators showing whether the laser is pulsing or nor and the internal humidity (a filter needs to be changed if the humidity gets too high).
- Also, as I mentioned in an earlier email, I would like to take this occasion to implement a more general calibration, based on manual measurements. 

Do you have maybe any advice on how to implement those points. 

Thanks,
Michael

Luke Campagnola

unread,
Mar 19, 2016, 8:02:01 AM3/19/16
to acq4
On Thu, Mar 17, 2016 at 11:51 PM, Michael Graupner <graupner...@gmail.com> wrote:
Hello all,

I wrote a driver and device class for controlling the Mai Tai laser. It works and it integrates with the general Laser class. However, the Laser class and the device interface require some changes to adapt to the Mai Tai : 
- GDD does not make sense with the Mai Tai. 

The base Laser class doesn't know anything about dispersion correction, so you can just remove any reference to it in the MaiTai code (I assume you are starting from the Coherent implementation?)

 
- I want to add an indicators showing whether the laser is pulsing or nor and the internal humidity (a filter needs to be changed if the humidity gets too high).

Create a subclass of LaserDevGui called MaiTaiDevGui and modify the user interface as you like. Probably you will create a few extra widgets and insert them into the top-level layout defined by devices/Laser/devTemplate.py. Then in your MaiTaiLaser class, override the deviceInterface() method to return an instance of your new MaiTaiDevGui class.
 
- Also, as I mentioned in an earlier email, I would like to take this occasion to implement a more general calibration, based on manual measurements. 

Right now, LaserDevGui has a "calibrate" button that is supposed to automatically generate a calibration table, a list of the existing calibrations, and a panel of options that determine how an automatic calibration should be executed. What if we rework the interface like this:

* "Calibrate" button goes away and is replaced with "new calibration" and "edit calibration" buttons.
* Clicking "new calibration" opens a window where the user can manually enter the wavelength and a table of (voltage, power) pairs. Edits to the table can be automatically saved or perhaps manually saved by clicking a button. This will add a new entry to the list of calibrations in the main window.
* Clicking "edit calibration" brings up the same window but saves its changes to whichever calibration was initially selected, rather than creating a new one.
* The automatic calibration control panel is moved to the bottom of the new calibration window, along with a new button that says "auto calibrate". Clicking this new button causes the old auto-calibration routine to run and populate the table with its (voltage, power) pairs.

Thoughts? The new/edit buttons have a logic issue that I haven't quite worked out: what if you create a new calibration that uses the same optics and wavelength as a previous calibration?



Also, is it really necessary for us to calibrate the laser on a per-wavelength basis? Right now the power-at-sample is calculated as

  Psample = Plaser * attenuation_factor(optics, wavelength, pcell_voltage)

..and we need a complete calibration curve for each combination of (optics, wavelength). But perhaps this can be simplified. There are two attenuation factors I am after:  1) the attenuation of the pockels cell as a function of voltage, and 2)  the attenuation of the entire optical train as a function of wavelength. I assume these two factors are independent, so we can measure them independently and just multiply the two factors together to determine the final sample power, like:

  Psample = Plaser * attenuation_factor1(optics, wavelength) * attenuation_factor2(pcell_voltage)

This way we only need two calibration curves to cover the entire two-dimensional space of possible wavelengths and pcell voltages (but if there is any interaction between these two parameters, then the calibration would be incorrect).


Luke

Michael Graupner

unread,
Mar 24, 2016, 4:36:54 AM3/24/16
to ac...@googlegroups.com
Dear Luke,

thank you for all the input.  

On Sat, Mar 19, 2016 at 1:01 PM, Luke Campagnola <luke.ca...@gmail.com> wrote:


On Thu, Mar 17, 2016 at 11:51 PM, Michael Graupner <graupner...@gmail.com> wrote:
Hello all,

I wrote a driver and device class for controlling the Mai Tai laser. It works and it integrates with the general Laser class. However, the Laser class and the device interface require some changes to adapt to the Mai Tai : 
- GDD does not make sense with the Mai Tai. 

The base Laser class doesn't know anything about dispersion correction, so you can just remove any reference to it in the MaiTai code (I assume you are starting from the Coherent implementation?)

 
- I want to add an indicators showing whether the laser is pulsing or nor and the internal humidity (a filter needs to be changed if the humidity gets too high).

Create a subclass of LaserDevGui called MaiTaiDevGui and modify the user interface as you like. Probably you will create a few extra widgets and insert them into the top-level layout defined by devices/Laser/devTemplate.py. Then in your MaiTaiLaser class, override the deviceInterface() method to return an instance of your new MaiTaiDevGui class.
 


I implemented the MaiTai device and the graphical elements as you suggested. It works great on my computer. I can control the Mai Tai and furthermore implemented an alignment mode which gets the laser to stop pulsing and reduce output power. 

One small thing, I have added an "externalSwitch" digital output to the laser device which can be linked to the laser shutter. This switch is coupled in my setup with an illumination of the sample, which switches off and on whenever the laser shutter is opened and closed, respectively. 

It remains to be tested whether the coherent laser implementation remained untouched by my changes.

I have created an PR.

 
- Also, as I mentioned in an earlier email, I would like to take this occasion to implement a more general calibration, based on manual measurements. 

Right now, LaserDevGui has a "calibrate" button that is supposed to automatically generate a calibration table, a list of the existing calibrations, and a panel of options that determine how an automatic calibration should be executed. What if we rework the interface like this:

* "Calibrate" button goes away and is replaced with "new calibration" and "edit calibration" buttons.
* Clicking "new calibration" opens a window where the user can manually enter the wavelength and a table of (voltage, power) pairs. Edits to the table can be automatically saved or perhaps manually saved by clicking a button. This will add a new entry to the list of calibrations in the main window.
* Clicking "edit calibration" brings up the same window but saves its changes to whichever calibration was initially selected, rather than creating a new one.
* The automatic calibration control panel is moved to the bottom of the new calibration window, along with a new button that says "auto calibrate". Clicking this new button causes the old auto-calibration routine to run and populate the table with its (voltage, power) pairs.

Thoughts? The new/edit buttons have a logic issue that I haven't quite worked out: what if you create a new calibration that uses the same optics and wavelength as a previous calibration?



Also, is it really necessary for us to calibrate the laser on a per-wavelength basis? Right now the power-at-sample is calculated as

  Psample = Plaser * attenuation_factor(optics, wavelength, pcell_voltage)

..and we need a complete calibration curve for each combination of (optics, wavelength). But perhaps this can be simplified. There are two attenuation factors I am after:  1) the attenuation of the pockels cell as a function of voltage, and 2)  the attenuation of the entire optical train as a function of wavelength. I assume these two factors are independent, so we can measure them independently and just multiply the two factors together to determine the final sample power, like:

  Psample = Plaser * attenuation_factor1(optics, wavelength) * attenuation_factor2(pcell_voltage)

This way we only need two calibration curves to cover the entire two-dimensional space of possible wavelengths and pcell voltages (but if there is any interaction between these two parameters, then the calibration would be incorrect).


The calibration implementation is the next project. 

Cheers,
Michael
 

Luke

--
You received this message because you are subscribed to the Google Groups "ACQ4" group.
To unsubscribe from this group and stop receiving emails from it, send an email to acq4+uns...@googlegroups.com.
To view this discussion on the web visit https://groups.google.com/d/msgid/acq4/CACZXET8raJqHO6FXdgFnwSfaArRYruSYAqNmh1Yz1ZPxvYESQQ%40mail.gmail.com.
For more options, visit https://groups.google.com/d/optout.

Huy Nguyen

unread,
Oct 26, 2016, 8:57:34 PM10/26/16
to ACQ4
Hello Michael,

I'm new to this forum, and I'm looking to do the same thing for my setup. I'm not sure where to start yet. Could you help me with some suggestions on the directions?

Thanks,

Huy

Michael Graupner

unread,
Oct 27, 2016, 4:14:40 AM10/27/16
to ac...@googlegroups.com
Dear Huy, 

can you be a bit more specific of what you mean by "do the same thing for my setup"? Do you want to control the Mai Tai with ACQ4? Please share of what you have in mind which will allow to give some directions. 

Cheers,
Michael

--
You received this message because you are subscribed to the Google Groups "ACQ4" group.
To unsubscribe from this group and stop receiving emails from it, send an email to acq4+unsubscribe@googlegroups.com.
To view this discussion on the web visit https://groups.google.com/d/msgid/acq4/8177fcf8-49e9-473d-b506-368ef033fef5%40googlegroups.com.
Reply all
Reply to author
Forward
0 new messages