Source code for LU1000

# -*- coding: utf-8 -*-
"""
Created on Tue Dec 14 11:04:21 2021

@author: Martin.Mihaylov
"""
from __future__ import print_function
import os       
import numpy as np                          
os.environ["KMP_DUPLICATE_LIB_OK"]="TRUE" 
import oct2py
from oct2py import Oct2Py
oc = Oct2Py()
import os 






[docs] def Paths(): import tkinter as tk from tkinter import filedialog # ============================================================================= # Select the Paths to COM and OCT6 # ============================================================================= print(''' Paths of the COM Folder and OCT6 Folder cant be found in the directory where LU1000.py is saved. Please select the right directory. 1) - Select COM directory 2) - Select OCT6 directory ''') #Path COM root = tk.Tk() COM = filedialog.askdirectory(parent = root,title = 'Select COM Diretory: ') root.destroy() #COM = 'C:/Users/marti/OneDrive/Desktop/WHK Martin/Auto_Measurement/InstrumentControl/COM' #Path OCT6 root = tk.Tk() OCT6 = filedialog.askdirectory(parent = root,title = 'Select COM Diretory: ') root.destroy() #OCT6 = 'C:/Users/marti/OneDrive/Desktop/WHK Martin/Auto_Measurement/InstrumentControl/OCT6' return COM, OCT6
path = os.getcwd() nameCOM = '\COM' nameOCT6 = '\OCT6' if os.path.exists(path+nameCOM) == True: PathCOM = path+nameCOM PathOCT6 = path+nameOCT6 else: PathCOM , PathOCT6 = Paths() ''' Initialize Connection to the Instrument whit the Octave engine. Selected COM and OCT6 Paths are needed!!! ''' oc.addpath(PathCOM); oc.addpath(PathOCT6);
[docs] class LU1000: print( ''' ################ ATTENTION ################ Befor using the Librarys you need to: 1 - Octave 6.1.0 needed!!! 2 - PATH env to 'C:\Program Files\GNU Octave\Octave-6.1.0\mingw64\bin' 3 - pip install ftd2xx , pip install pypiwin32 For more information see: Python script by https://www.novoptel.de/Home/Downloads_en.php ################ ATTENTION ################ ''' ) print( ''' In the Class Lib ypu need to give the Paths to COM and OCT6 folders. The folders are comming together whit the lib. If not download them from: https://www.novoptel.de/Home/Downloads_en.php ''' ) def __init__(self): # ============================================================================= # stri = input('Select LU1000 device (0) or look it up in LastDevLU.mat (1 or "enter"):') # if stri=='0': # oc.initlu(0) # else: # ============================================================================= oc.initlu() DevDescrLU = oc.load('LastDevLU.mat', 'LastDevDescr')['LastDevDescr'] print(DevDescrLU)
[docs] def Close(self): ''' Returns ------- str Close connection ''' ok = oc.closelu() print(ok, sep='\n')
# ============================================================================= # ASK # =============================================================================
[docs] def ask_Power(self,laser): ''' Parameters ---------- laser : int Laser seleected. 1 or 2 Raises ------ ValueError Error message Returns ------- float Ask Sets or returns the laser module’s current optical power in dBm*100 ''' if laser == 1: res, ok = oc.readlu(128+49, nout=2) return float(res/100) elif laser == 2: res, ok = oc.readlu(256+49, nout=2) return float(res/100) else: raise ValueError('Unknown input! See function description for more info.')
[docs] def ask_LaserOutput(self,laser): ''' Parameters ---------- laser : int Laser seleected. 1 or 2 Raises ------ ValueError Error message Returns ------- str Laser emable('ON') or laser diseble('OFF') ''' if laser == 1: res, ok = oc.readlu(128+50, nout=2) if res == 0.0: print('OFF') else: print('ON') elif laser == 2: res, ok = oc.readlu(256+50, nout=2) if res == 0.0: print('OFF') else: print('ON') else: raise ValueError('Unknown input! See function description for more info.')
[docs] def ask_ControllerTemp(self,laser): ''' Parameters ---------- laser : int Laser seleected. 1 or 2 Raises ------ ValueError Error message Returns ------- res : float Controller module temperature in Celsiusx16 ''' if laser == 1: res, ok = oc.readlu(128+51, nout=2) return float(res) elif laser == 2: res, ok = oc.readlu(256+51, nout=2) return float(res) else: raise ValueError('Unknown input! See function description for more info.')
[docs] def ask_Gridspacing(self,laser): ''' Parameters ---------- laser : int Laser seleected. 1 or 2 Raises ------ ValueError Error message Returns ------- float Grid spacing in GHz*10 ''' if laser == 1: res, ok = oc.readlu(128+52, nout=2) return float(res) elif laser == 2: res, ok = oc.readlu(256+52, nout=2) return float(res) else: raise ValueError('Unknown input! See function description for more info.')
[docs] def ask_FirstChannFreqTHz(self,laser): ''' Parameters ---------- laser : int Laser seleected. 1 or 2 Raises ------ ValueError Error message Returns ------- res : float First channel’s frequency, THz ''' if laser == 1: res, ok = oc.readlu(128+53, nout=2) return float(res) elif laser == 2: res, ok = oc.readlu(256+53, nout=2) return float(res) else: raise ValueError('Unknown input! See function description for more info.')
[docs] def ask_FirstChannFreqGHz(self,laser): ''' Parameters ---------- laser : int Laser seleected. 1 or 2 Raises ------ ValueError Error message Returns ------- res : float First channel’s frequency, GHz*10 ''' if laser == 1: res, ok = oc.readlu(128+54, nout=2) return float(res) elif laser == 2: res, ok = oc.readlu(256+54, nout=2) return float(res) else: raise ValueError('Unknown input! See function description for more info.')
[docs] def ask_ChannelFreqTHz(self,laser): ''' Parameters ---------- laser : int Laser seleected. 1 or 2 Raises ------ ValueError Error message Returns ------- float Ask channel Frequency in THz ''' if laser == 1: res, ok = oc.readlu(128+64, nout=2) return float(res) elif laser == 2: res, ok = oc.readlu(256+64, nout=2) return float(res) else: raise ValueError('Unknown input! See function description for more info.')
[docs] def ask_ChannelFreqGHz(self,laser): ''' Parameters ---------- laser : int Laser seleected. 1 or 2 Raises ------ ValueError Error message Returns ------- float Returns channel’s frequency as GHZ*10 ''' if laser == 1: res, ok = oc.readlu(128+65, nout=2) return float(res) elif laser == 2: res, ok = oc.readlu(256+65, nout=2) return float(res) else: raise ValueError('Unknown input! See function description for more info.')
[docs] def ask_OpticalPower(self,laser): ''' Parameters ---------- laser : int Laser seleected. 1 or 2 Raises ------ ValueError Error message Returns ------- res : float Returns the optical power encoded as dBm*100 ''' if laser == 1: res, ok = oc.readlu(128+66, nout=2) return float(res/100) elif laser == 2: res, ok = oc.readlu(256+66, nout=2) return float(res/100) else: raise ValueError('Unknown input! See function description for more info.')
[docs] def ask_Temperature(self,laser): ''' Parameters ---------- laser : int Laser seleected. 1 or 2 Raises ------ ValueError Error message Returns ------- res : float Returns the current temperature encoded as °C*100. ''' if laser == 1: res, ok = oc.readlu(128+67, nout=2) return float(res) elif laser == 2: res, ok = oc.readlu(256+67, nout=2) return float(res) else: raise ValueError('Unknown input! See function description for more info.')
[docs] def ask_MinOpticalOutputPower(self): ''' Returns ------- res : float Ask minimum possible optical power setting ''' res, ok = oc.readlu(128+80, nout=2) return res
[docs] def ask_MaxOpticalOutputPower(self): ''' Returns ------- res : float Maximum possible optical power setting ''' res, ok = oc.readlu(128+81, nout=2) return res
[docs] def ask_LaserFirstFreqTHz(self,laser): ''' Parameters ---------- laser : int Laser seleected. 1 or 2 Raises ------ ValueError Error message Returns ------- res : float Laser’s first frequency, THz ''' if laser == 1: res, ok = oc.readlu(128+82, nout=2) return float(res) elif laser == 2: res, ok = oc.readlu(256+82, nout=2) return float(res) else: raise ValueError('Unknown input! See function description for more info.')
[docs] def ask_LaserFirstFreqGHz(self,laser): ''' Parameters ---------- laser : int Laser seleected. 1 or 2 Raises ------ ValueError Error message Returns ------- res : float Laser’s first frequency, GHz*10 ''' if laser == 1: res, ok = oc.readlu(128+83, nout=2) return float(res) elif laser == 2: res, ok = oc.readlu(256+83, nout=2) return float(res) else: raise ValueError('Unknown input! See function description for more info.')
[docs] def ask_minFreqLaser(self,laser): ''' Parameters ---------- laser : int Laser seleected. 1 or 2 Raises ------ ValueError Error message Returns ------- float min possible frequency. ''' if laser in [1,2]: THz = self.ask_LaserFirstFreqTHz(laser) GHz = self.ask_LaserFirstFreqGHz(laser) Freq = THz + GHz*1e-4 return Freq else: raise ValueError('Unknown input! See function description for more info.')
[docs] def ask_LaserLastFreqTHz(self,laser): ''' Parameters ---------- laser : int Laser seleected. 1 or 2 Raises ------ ValueError Error message Returns ------- res : float Laser’s last frequency, THz ''' if laser == 1: res, ok = oc.readlu(128+84, nout=2) return float(res) elif laser == 2: res, ok = oc.readlu(256+84, nout=2) return float(res) else: raise ValueError('Unknown input! See function description for more info.')
[docs] def ask_LaserLastFreqGHz(self,laser): ''' Parameters ---------- laser : int Laser seleected. 1 or 2 Raises ------ ValueError Error message Returns ------- res : float Laser’s last frequency, GHz*10 ''' if laser == 1: res, ok = oc.readlu(128+85, nout=2) return float(res) elif laser == 2: res, ok = oc.readlu(256+85, nout=2) return float(res) else: raise ValueError('Unknown input! See function description for more info.')
[docs] def ask_maxFreqLaser(self,laser): ''' Parameters ---------- laser : int Laser seleected. 1 or 2 Raises ------ ValueError Error message Returns ------- float max possible frequency ''' if laser in [1,2]: THz = self.ask_LaserLastFreqTHz(laser) GHz = self.ask_LaserLastFreqTHz(laser) Freq = THz + GHz*1e-4 return float(Freq) else: raise ValueError('Unknown input! See function description for more info.')
[docs] def ask_LaserMinGridFreq(self,laser): ''' Parameters ---------- laser : int Laser seleected. 1 or 2 Raises ------ ValueError Error message Returns ------- float Laser’s minimum supported grid spacing, GHz*10 ''' if laser == 1: res, ok = oc.readlu(128+86, nout=2) return float(res) elif laser == 2: res, ok = oc.readlu(256+86, nout=2) return float(res) else: raise ValueError('Unknown input! See function description for more info.')
[docs] def ask_Frequency(self,laser): ''' Parameters ---------- laser : int Laser seleected. 1 or 2 Raises ------ ValueError Error message Returns ------- Freq : float Calculate and return Frequency on the selected channel ''' sLaser = [1,2] if laser in sLaser: THz = float(self.ask_ChannelFreqTHz(laser)) GHz = float(self.ask_ChannelFreqGHz(laser)) Freq = THz + GHz*1e-4 return Freq else: raise ValueError('Unknown input! See function description for more info.')
[docs] def ask_LaserChannel(self,laser): ''' Parameters ---------- laser : int Laser seleected. 1 or 2 Raises ------ ValueError Error message Returns ------- res : foat Selected Channel Number ''' if laser == 1: res, ok = oc.readlu(128+48, nout=2) return float(res) elif laser == 2: res, ok = oc.readlu(256+48, nout=2) return float(res) else: raise ValueError('Unknown input! See function description for more info.')
[docs] def ask_Whispermode(self,laser): ''' Parameters ---------- laser : int Laser seleected. 1 or 2 Raises ------ ValueError Error message Returns ------- res : foat Whispermode Status ''' if laser == 1: res, ok = oc.readlu(128+108, nout=2) data = float(res) if data == 0: return 'OFF' else: return 'ON' elif laser == 2: res, ok = oc.readlu(256+108, nout=2) return float(res) else: raise ValueError('Unknown input! See function description for more info.')
# ============================================================================= # SET # =============================================================================
[docs] def set_Power(self,laser,value): ''' Parameters ---------- laser : int Laser seleected. 1 or 2 value : float Sets the laser module’s current optical power in dBm Raises ------ ValueError Error message Returns ------- None. ''' value = float(value) if laser == 1: if value>10: print(''' ################# Worning ################# More then 10dBm is critical for some devices! ''') comf = input('Are you sure you wanna continue (yes/no)? ') comf = comf.lower() if comf == 'yes': value = value*100 ok = oc.writelu(128+49, int(value)) print('Power = '+str(float(value/100))+'dBm') else: pass elif value <= 10 and value >= 6: value = value*100 ok = oc.writelu(128+49, int(value)) print('Power = '+str(float(value/100))+'dBm') else: raise ValueError('Unknown input! See function description for more info.') elif laser == 2: if value>10: print(''' ################# Worning ################# More then 10dBm is critical for some devices! ''') comf = input('Are you sure you wanna continue (yes/no)? ') comf = comf.lower() if comf == 'yes': value = value*100 ok = oc.writelu(256+49, int(value)) print('Power = '+str(float(value/100))+'dBm') else: pass elif value <= 10 and value >= 6: value = value*100 ok = oc.writelu(256+49, int(value)) print('Power = '+str(float(value/100))+'dBm') else: raise ValueError('Unknown input! See function description for more info.') else: raise ValueError('Unknown input! See function description for more info.')
[docs] def set_LaserChannel(self,laser,value): ''' Parameters ---------- laser : int Laser seleected. 1 or 2 value : int Sets or returns the laser module’s current channel value = select channel value Raises ------ ValueError Error message Returns ------- None. ''' if laser == 1: oc.writelu(128+48, value) elif laser == 2: oc.writelu(256+48, value) else: raise ValueError('Unknown input! See function description for more info.')
[docs] def set_LaserOutput(self,laser,value): ''' Parameters ---------- laser : int Laser seleected. 1 or 2 value : int/str Turn Laser N output ON/OFF value = 'ON'|'OFF'|1|0 Raises ------ ValueError Error message Returns ------- None. ''' sValue = ['ON','OFF',1,0] if value in sValue: if laser == 1: if value == 1 or value == 'ON': oc.writelu(128+50, 8) print('### Laser 1 is ON ###') else: oc.writelu(128+50, 0) print('### Laser 1 is OFF') elif laser == 2: if value == 1 or value == 'ON': oc.writelu(256+50, 8) print('### Laser 2 is ON ###') else: oc.writelu(256+50, 0) print('### Laser 2 is OFF ###') else: raise ValueError('Unknown input! See function description for more info.')
# ============================================================================= # Test Write Grid # =============================================================================
[docs] def set_Gridspacing(self,laser,value): ''' Parameters ---------- laser : int Laser seleected. 1 or 2 value : int Set Grid spacing. Smalles possible value = 1 Raises ------ ValueError Error message Returns ------- None. ''' if value >= 1: if laser == 1: oc.writelu(128+52, value ) elif laser == 2: oc.writelu(256+52, value ) else: raise ValueError('Unknown input! See function description for more info.') else: raise ValueError('Unknown input! See function description for more info.')
[docs] def set_FirstChannFreqTHz(self,laser,value): ''' Parameters ---------- laser : int Laser seleected. 1 or 2 Raises ------ ValueError Error message Returns ------- res : float First channel’s frequency, THz ''' if laser == 1: oc.writelu(128+53, int(value) ) elif laser == 2: oc.writelu(256+53, value ) else: raise ValueError('Unknown input! See function description for more info.')
[docs] def set_FirstChannFreqGHz(self,laser,value): ''' Parameters ---------- laser : int Laser seleected. 1 or 2 Raises ------ ValueError Error message Returns ------- res : float First channel’s frequency, GHz*10 ''' if laser == 1: oc.writelu(128+54, value ) elif laser == 2: oc.writelu(256+54, value ) else: raise ValueError('Unknown input! See function description for more info.')
[docs] def set_Frequency(self,laser,value): ''' Parameters ---------- laser : int Laser seleected. 1 or 2 value : float Set Laser Frequency. value in form value = 192.876 Returns ------- None. ''' if laser == 1: GHz = int((value%1)*1e4) THz = int(value // 1) self.set_FirstChannFreqTHz(1,THz) self.set_FirstChannFreqGHz(1,GHz) elif laser == 2: GHz = int((value%1)*1e4) THz = int(value // 1) self.set_FirstChannFreqTHz(2,THz) self.set_FirstChannFreqGHz(2,GHz) else: raise ValueError('Unknown input! See function description for more info.')
[docs] def set_Whispermode(self,laser,state): ''' Parameters ---------- laser : int Laser seleected. 1 or 2 state : str ['ON','OFF'] Returns ------- None. ''' stState = ['ON','OFF'] if state in stState: if state == 'ON': if laser == 1: oc.writelu(128+108, 2 ) data = self.ask_Whispermode(1) while data != 'ON': oc.writelu(128+108, 2 ) data = self.ask_Whispermode(1) elif laser == 2: oc.writelu(256+108, 2 ) data = self.ask_Whispermode(2) while data != 'ON': oc.writelu(128+108, 2 ) data = self.ask_Whispermode(2) else: raise ValueError('Unknown input! See function description for more info.') elif state == 'OFF': if laser == 1: oc.writelu(128+108, 0 ) data = self.ask_Whispermode(1) while data != 'OFF': oc.writelu(128+108, 0 ) data = self.ask_Whispermode(1) elif laser == 2: oc.writelu(256+108, 0 ) data = self.ask_Whispermode(2) while data != 'OFF': oc.writelu(128+108, 0 ) data = self.ask_Whispermode(2) else: raise ValueError('Unknown input! See function description for more info.') else: raise ValueError('Unknown input! See function description for more info.')
[docs] def set_FineTune(self,laser,value): ''' Parameters ---------- laser : int Laser seleected. 1 or 2 value : int Fine tunning set the frequency in MHz steps Returns ------- None. ''' if laser == 1: oc.writelu(128+98, int(value)) elif laser == 2: oc.writelu(256+98, int(value)) else: raise ValueError('Unknown input! See function description for more info.')
# ============================================================================= # Get/Save Data # =============================================================================
[docs] def get_Data(self,laser): ''' Parameters ---------- laser : int Laser seleected. 1 or 2 Raises ------ ValueError DESCRIPTION. Returns ------- OutPut : dict Return a dictionary whit the measured power and set frequency. ''' OutPut = {} if laser == 1: Power = self.ask_Power(laser) Freq = self.ask_Frequency(laser) OutPut['Power/dBm'] = Power OutPut['Set Frequency/THz'] = Freq elif laser == 2: Power = self.ask_Power(laser) Freq = self.ask_Frequency(laser) OutPut['Power/dBm'] = Power OutPut['Set Frequency/THz'] = Freq else: raise ValueError('Unknown input! See function description for more info.') return OutPut