Exemplo n.º 1
0
    def setup(self):

        #self.add_quickbar(load_qt_ui_file(sibling_path(__file__, 'trpl_quick_access.ui')))

        from ScopeFoundryHW.thorlabs_powermeter import ThorlabsPowerMeterHW, PowerMeterOptimizerMeasure
        self.add_hardware(ThorlabsPowerMeterHW(self))
        self.add_measurement(PowerMeterOptimizerMeasure(self))

        self.settings_load_ini('uv_defaults.ini')
Exemplo n.º 2
0
    def setup(self):

        print("Adding Hardware Components")

        #from ScopeFoundryHW.apd_counter import APDCounterHW
        #self.add_hardware_component(APDCounterHW(self))
        from ScopeFoundryHW.ni_daq.hw.ni_freq_counter_callback import NI_FreqCounterCallBackHW
        self.add_hardware(NI_FreqCounterCallBackHW(self, name='apd_counter'))

        from ScopeFoundryHW.mcl_stage.mcl_xyz_stage import MclXYZStageHW
        self.add_hardware_component(MclXYZStageHW(self))

        from ScopeFoundryHW.picoharp import PicoHarpHW
        self.add_hardware_component(PicoHarpHW(self))

        from ScopeFoundryHW.winspec_remote import WinSpecRemoteClientHW
        self.add_hardware_component(WinSpecRemoteClientHW(self))

        from ScopeFoundryHW.thorlabs_powermeter import ThorlabsPowerMeterHW
        self.add_hardware_component(ThorlabsPowerMeterHW(self))

        #from ScopeFoundryHW.powerwheel_arduino import PowerWheelArduinoHW
        #self.power_wheel = self.add_hardware_component(PowerWheelArduinoHW(self))

        #from ScopeFoundryHW.pololu_servo.single_servo_hw import PololuMaestroServoHW # imports the power wheel
        #self.add_hardware_component(PololuMaestroServoHW(self))# adds the power wheel

        from ScopeFoundryHW.newport_esp300 import ESP300AxisHW
        self.add_hardware(ESP300AxisHW(self))

        from ScopeFoundryHW.shutter_servo_arduino.shutter_servo_arduino_hc import ShutterServoHW
        self.add_hardware(ShutterServoHW(self))

        from ScopeFoundryHW.thorlabs_integrated_stepper.thorlabs_integrated_stepper_motor_hw import ThorlabsIntegratedStepperMottorHW
        self.add_hardware(ThorlabsIntegratedStepperMottorHW(self))

        #         from ScopeFoundryHW.pololu_servo.single_servo_hw import PololuMaestroServoHW
        #         self.add_hardware(PololuMaestroServoHW(self, name='power_wheel'))

        #from ScopeFoundryHW.pololu_servo.multi_servo_hw import PololuMaestroHW
        #self.add_hardware(PololuMaestroHW(self, servo_names=[(1, "power_wheel"),
        #                                                     (2, "polarizer")]))

        from ScopeFoundryHW.pololu_servo.multi_servo_hw import PololuMaestroHW, PololuMaestroWheelServoHW
        self.add_hardware(PololuMaestroHW(self, name='pololu_maestro'))
        self.add_hardware(
            PololuMaestroWheelServoHW(self, name='power_wheel', channel=1))
        self.add_hardware(
            PololuMaestroWheelServoHW(self,
                                      name='excitation_polarizer',
                                      channel=2))
        #self.add_hardware(PololuMaestroShutterServoHW(self, name='shutter', channel=2))

        print("Adding Measurement Components")

        # hardware specific measurements
        #from ScopeFoundryHW.apd_counter import APDOptimizerMeasure
        #self.add_measurement_component(APDOptimizerMeasure(self))
        from confocal_measure.apd_optimizer_cb import APDOptimizerCBMeasurement
        self.add_measurement_component(APDOptimizerCBMeasurement(self))

        from ScopeFoundryHW.winspec_remote import WinSpecRemoteReadoutMeasure
        self.add_measurement_component(WinSpecRemoteReadoutMeasure(self))

        from ScopeFoundryHW.thorlabs_powermeter import PowerMeterOptimizerMeasure
        self.add_measurement_component(PowerMeterOptimizerMeasure(self))

        # combined measurements
        from confocal_measure.power_scan import PowerScanMeasure
        self.add_measurement_component(
            PowerScanMeasure(self, 'hardware/shutter_servo/shutter_open'))

        # Mapping measurements
        from confocal_measure import APD_MCL_2DSlowScan
        self.add_measurement_component(APD_MCL_2DSlowScan(self))

        from confocal_measure import Picoharp_MCL_2DSlowScan
        self.add_measurement_component(Picoharp_MCL_2DSlowScan(self))

        from confocal_measure import WinSpecMCL2DSlowScan
        self.add_measurement_component(WinSpecMCL2DSlowScan(self))

        from confocal_measure.polarized_hyperspec_scan_measure import PolarizedHyperspecScanMeasure
        self.add_measurement(PolarizedHyperspecScanMeasure(self))

        self.setup_quickbar()

        # load default settings
        self.settings_load_ini('df_microscope_defaults.ini')
Exemplo n.º 3
0
    def setup(self):

        #Add hardware components
        from ScopeFoundryHW.mcl_stage import MclXYZStageHW
        self.add_hardware_component(MclXYZStageHW(self))

        from ScopeFoundryHW.acton_spec import ActonSpectrometerHW
        self.add_hardware_component(ActonSpectrometerHW(self))

        from ScopeFoundryHW.picam import PicamHW, PicamReadoutMeasure
        self.add_hardware_component(PicamHW(self))
        self.add_measurement_component(PicamReadoutMeasure(self))

        from ScopeFoundryHW.asi_stage.asi_stage_hw import ASIStageHW
        asi_stage = self.add_hardware(ASIStageHW(self))
        from ScopeFoundryHW.asi_stage.asi_stage_control_measure import ASIStageControlMeasure
        asi_control = self.add_measurement(ASIStageControlMeasure(self))

        from ScopeFoundryHW.pololu_servo.single_servo_hw import PololuMaestroServoHW
        self.add_hardware(PololuMaestroServoHW(self, name='power_wheel'))

        #from hardware_components.omega_pt_pid_controller import OmegaPtPIDControllerHardware
        #self.add_hardware_component(OmegaPtPIDControllerHardware(self))

        #Add measurement components
        print("Create Measurement objects")
        from HiP_microscope.measure.hyperspec_picam_mcl import HyperSpecPicam2DScan, HyperSpecPicam3DStack
        self.add_measurement(HyperSpecPicam2DScan(self))
        #self.add_measurement_component(HiPMicroscopeDualTemperature(self))
        self.add_measurement(HyperSpecPicam3DStack(self))

        from HiP_microscope.measure.picam_calibration_sweep import PicamCalibrationSweep
        self.add_measurement(PicamCalibrationSweep(self))

        from ScopeFoundryHW.thorlabs_powermeter import ThorlabsPowerMeterHW, PowerMeterOptimizerMeasure
        self.add_hardware(ThorlabsPowerMeterHW(self))
        self.add_measurement(PowerMeterOptimizerMeasure(self))

        from ScopeFoundryHW.pygrabber_camera import PyGrabberCameraHW, PyGrabberCameraLiveMeasure
        self.add_hardware(PyGrabberCameraHW(self))
        self.add_measurement(PyGrabberCameraLiveMeasure(self))

        from ScopeFoundryHW.toupcam import ToupCamHW, ToupCamLiveMeasure
        self.add_hardware(ToupCamHW(self))
        self.add_measurement(ToupCamLiveMeasure(self))

        #set some default logged quantities
        #self.hardware_components['apd_counter'].debug_mode.update_value(True)
        #self.hardware_components['apd_counter'].dummy_mode.update_value(True)
        #self.hardware_components['apd_counter'].connected.update_value(True)

        ###### Quickbar connections #################################
        self.add_quickbar(
            load_qt_ui_file(sibling_path(__file__, 'hip_quick_access.ui')))
        Q = self.quickbar

        # 2D Scan Area
        #         oo_scan.settings.h0.connect_to_widget(Q.h0_doubleSpinBox)
        #         oo_scan.settings.h1.connect_to_widget(Q.h1_doubleSpinBox)
        #         oo_scan.settings.v0.connect_to_widget(Q.v0_doubleSpinBox)
        #         oo_scan.settings.v1.connect_to_widget(Q.v1_doubleSpinBox)
        #         oo_scan.settings.h_span.connect_to_widget(Q.hspan_doubleSpinBox)
        #         oo_scan.settings.v_span.connect_to_widget(Q.vspan_doubleSpinBox)
        #        Q.center_pushButton.clicked.connect(oo_scan.center_on_pos)
        #        scan_steps = [5e-3, 3e-3, 1e-3, 5e-4]
        #        scan_steps_labels = ['5.0 um','3.0 um','1.0 um','0.5 um']
        #         Q.scan_step_comboBox.addItems(scan_steps_labels)
        #         def apply_scan_step_value():
        #             oo_scan.settings.dh.update_value(scan_steps[Q.scan_step_comboBox.currentIndex()])
        #             oo_scan.settings.dv.update_value(scan_steps[Q.scan_step_comboBox.currentIndex()])
        #         Q.scan_step_comboBox.currentIndexChanged.connect(apply_scan_step_value)

        # MCL Stage
        mcl = self.hardware['mcl_xyz_stage']
        mcl.settings.x_position.connect_to_widget(Q.mcl_x_pos_doubleSpinBox)
        mcl.settings.y_position.connect_to_widget(Q.mcl_y_pos_doubleSpinBox)
        mcl.settings.z_position.connect_to_widget(Q.mcl_z_pos_doubleSpinBox)
        mcl.settings.x_target.connect_to_widget(Q.mcl_x_target_doubleSpinBox)
        mcl.settings.y_target.connect_to_widget(Q.mcl_y_target_doubleSpinBox)
        mcl.settings.z_target.connect_to_widget(Q.mcl_z_target_doubleSpinBox)
        mcl.settings.connected.connect_to_widget(Q.mcl_connect_checkBox)

        # ASI Stage
        asi_stage.settings.x_position.connect_to_widget(Q.x_pos_doubleSpinBox)
        Q.x_up_pushButton.clicked.connect(asi_control.x_up)
        Q.x_down_pushButton.clicked.connect(asi_control.x_down)

        asi_stage.settings.y_position.connect_to_widget(Q.y_pos_doubleSpinBox)
        Q.y_up_pushButton.clicked.connect(asi_control.y_up)
        Q.y_down_pushButton.clicked.connect(asi_control.y_down)

        #         asi_stage.settings.z_position.connect_to_widget(Q.z_pos_doubleSpinBox)
        #         Q.z_up_pushButton.clicked.connect(asi_control.z_up)
        #         Q.z_down_pushButton.clicked.connect(asi_control.z_down)

        asi_control.settings.jog_step_xy.connect_to_widget(
            Q.xy_step_doubleSpinBox)
        #         asi_control.settings.jog_step_z.connect_to_widget(Q.z_step_doubleSpinBox)

        stage_steps = np.array([5e-4, 1e-3, 1e-2, 1e-1, 1e0])
        stage_steps_labels = [
            '0.0005 mm', '0.001 mm', '0.010 mm', '0.100 mm', '1.000 mm'
        ]
        Q.xy_step_comboBox.addItems(stage_steps_labels)

        #         Q.z_step_comboBox.addItems(stage_steps_labels)

        def apply_xy_step_value():
            asi_control.settings.jog_step_xy.update_value(
                stage_steps[Q.xy_step_comboBox.currentIndex()])

        Q.xy_step_comboBox.currentIndexChanged.connect(apply_xy_step_value)

        def apply_z_step_value():
            asi_control.settings.jog_step_z.update_value(
                stage_steps[Q.z_step_comboBox.currentIndex()])

        #Q.z_step_comboBox.currentIndexChanged.connect(apply_z_step_value)

        def halt_stage_motion():
            asi_stage.halt_xy()
            asi_stage.halt_z()

        Q.stop_stage_pushButton.clicked.connect(halt_stage_motion)

        asi_stage.settings.x_target.connect_to_widget(
            Q.asi_x_target_doubleSpinBox)
        asi_stage.settings.y_target.connect_to_widget(
            Q.asi_y_target_doubleSpinBox)

        #Q.asi_xy_target_groupBox.toggled.connect(Q.asi_xy_target_groupBox.setEnabled)

        # Power Wheel
        #pw = self.hardware['power_wheel_arduino']
        pw = self.hardware['power_wheel']
        pw.settings.position.connect_to_widget(
            Q.power_wheel_encoder_pos_doubleSpinBox)
        pw.settings.jog_step.connect_to_widget(
            Q.powerwheel_move_steps_doubleSpinBox)
        Q.powerwheel_move_fwd_pushButton.clicked.connect(pw.jog_fwd)
        Q.powerwheel_move_bkwd_pushButton.clicked.connect(pw.jog_bkwd)

        # Picam
        picam = self.hardware['picam']
        picam.settings.ccd_status.connect_to_widget(Q.andor_ccd_status_label)
        picam.settings.SensorTemperatureReading.connect_to_widget(
            Q.andor_ccd_temp_doubleSpinBox)
        picam.settings.ExposureTime.connect_to_widget(
            Q.andor_ccd_int_time_doubleSpinBox)

        # Spectrometer
        aspec = self.hardware['acton_spectrometer']
        aspec.settings.center_wl.connect_to_widget(
            Q.acton_spec_center_wl_doubleSpinBox)
        aspec.settings.exit_mirror.connect_to_widget(
            Q.acton_spec_exitmirror_comboBox)
        aspec.settings.grating_name.connect_to_widget(
            Q.acton_spec_grating_lineEdit)

        # power meter
        pm = self.hardware['thorlabs_powermeter']
        pm.settings.wavelength.connect_to_widget(
            Q.power_meter_wl_doubleSpinBox)
        pm.settings.power.connect_to_widget(Q.power_meter_power_label)

        pm_opt = self.measurements['powermeter_optimizer']
        pm_opt.settings.activation.connect_to_widget(
            Q.power_meter_acquire_cont_checkBox)

        # load default settings from file
        self.settings_load_ini("hip_settings.ini")
Exemplo n.º 4
0
    def setup(self):
        # - renamed libiomp5md.dll to libiomp5md.dll.bak in Spinnaker

        self.add_quickbar(
            load_qt_ui_file(sibling_path(__file__, 'uv_quick_access.ui')))

        #### HARDWARE
        from ScopeFoundryHW.asi_stage import ASIStageHW
        asi_stage = self.add_hardware(
            ASIStageHW(self, swap_xy=False, invert_x=False, invert_y=True))

        from ScopeFoundryHW.oceanoptics_spec import OceanOpticsSpectrometerHW
        oo_spec = self.add_hardware(OceanOpticsSpectrometerHW(self))

        from ScopeFoundryHW.flircam import FlirCamHW
        flircamhw = self.add_hardware(FlirCamHW(self))

        from ScopeFoundryHW.thorlabs_dc4100 import ThorlabsDC4100HW
        led_ctrl = self.add_hardware(ThorlabsDC4100HW(self))

        from ScopeFoundryHW.andor_camera import AndorCCDHW
        self.add_hardware(AndorCCDHW(self))

        from ScopeFoundryHW.andor_spec.andor_spec_hw import AndorShamrockSpecHW
        self.add_hardware(AndorShamrockSpecHW(self))

        from ScopeFoundryHW.lakeshore_331 import Lakeshore331HW
        self.add_hardware(Lakeshore331HW(self))

        from ScopeFoundryHW.pygrabber_camera import PyGrabberCameraHW
        pygrabhw = self.add_hardware(PyGrabberCameraHW(self))

        from ScopeFoundryHW.thorlabs_powermeter import ThorlabsPowerMeterHW
        self.add_hardware(ThorlabsPowerMeterHW(self))

        #### MEASUREMENTS
        from ScopeFoundryHW.flircam import FlirCamLiveMeasure
        flircam = self.add_measurement(FlirCamLiveMeasure(self))

        from ScopeFoundryHW.pygrabber_camera import PyGrabberCameraLiveMeasure
        pygrab = self.add_measurement(PyGrabberCameraLiveMeasure(self))

        from ScopeFoundryHW.asi_stage import ASIStageControlMeasure, ASIStagePositionList
        asi_control = self.add_measurement(ASIStageControlMeasure(self))
        self.add_measurement(ASIStagePositionList(self))

        from ScopeFoundryHW.oceanoptics_spec import OOSpecLive, OOSpecOptimizerMeasure
        oo_spec_measure = self.add_measurement(OOSpecLive(self))
        oo_spec_opt = self.add_measurement(OOSpecOptimizerMeasure(self))

        from confocal_measure.oceanoptics_asi_hyperspec_scan import OceanOpticsAsiHyperSpec2DScan, OceanOpticsAsiHyperSpec3DScan
        oo_scan = self.add_measurement(OceanOpticsAsiHyperSpec2DScan(self))
        self.add_measurement(OceanOpticsAsiHyperSpec3DScan(self))

        from ScopeFoundryHW.andor_camera import AndorCCDReadoutMeasure, AndorSpecCalibMeasure, AndorCCDStepAndGlue
        self.add_measurement(AndorCCDReadoutMeasure)
        self.add_measurement(AndorCCDStepAndGlue)
        self.add_measurement(AndorSpecCalibMeasure)

        from confocal_measure.andor_asi_hyperspec_scan import AndorAsiHyperSpec2DScan
        andor_scan = self.add_measurement(AndorAsiHyperSpec2DScan(self))

        from ScopeFoundryHW.lakeshore_331 import LakeshoreMeasure
        self.add_measurement(LakeshoreMeasure(self))

        from ScopeFoundryHW.thorlabs_powermeter import PowerMeterOptimizerMeasure
        self.add_measurement(PowerMeterOptimizerMeasure(self))

        ###### Quickbar connections #################################
        Q = self.quickbar

        # 2D Scan Area - Ocean Optics
        oo_scan.settings.h_span.connect_to_widget(
            Q.oo_scan_hspan_doubleSpinBox)
        oo_scan.settings.v_span.connect_to_widget(
            Q.oo_scan_vspan_doubleSpinBox)
        oo_scan.settings.save_h5.connect_to_widget(Q.oo_scan_save_h5_checkBox)
        Q.oo_scan_center_pushButton.clicked.connect(oo_scan.center_scan_on_pos)
        Q.oo_scan_center_view_pushButton.clicked.connect(
            oo_scan.center_view_on_scan)
        Q.oo_scan_start_pushButton.clicked.connect(oo_scan.operations['start'])
        Q.oo_scan_interrupt_pushButton.clicked.connect(
            oo_scan.operations['interrupt'])
        Q.oo_scan_show_UI_pushButton.clicked.connect(
            oo_scan.operations['show_ui'])

        scan_steps = [5e-3, 3e-3, 1e-3, 5e-4]
        scan_steps_labels = ['5.0 um', '3.0 um', '1.0 um', '0.5 um']
        Q.oo_scan_step_comboBox.addItems(scan_steps_labels)

        def apply_oo_scan_step_value():
            oo_scan.settings.dh.update_value(
                scan_steps[Q.oo_scan_step_comboBox.currentIndex()])
            oo_scan.settings.dv.update_value(
                scan_steps[Q.oo_scan_step_comboBox.currentIndex()])

        Q.oo_scan_step_comboBox.currentIndexChanged.connect(
            apply_oo_scan_step_value)
        oo_scan.settings.dh.connect_to_widget(Q.oo_scan_step_doubleSpinBox)

        # 2D Scan Area - Andor
        andor_scan.settings.h_span.connect_to_widget(
            Q.andor_scan_hspan_doubleSpinBox)
        andor_scan.settings.v_span.connect_to_widget(
            Q.andor_scan_vspan_doubleSpinBox)
        andor_scan.settings.save_h5.connect_to_widget(
            Q.andor_scan_save_h5_checkBox)
        Q.andor_scan_center_pushButton.clicked.connect(
            andor_scan.center_scan_on_pos)
        Q.andor_scan_center_view_pushButton.clicked.connect(
            andor_scan.center_view_on_scan)
        Q.andor_scan_start_pushButton.clicked.connect(
            andor_scan.operations['start'])
        Q.andor_scan_interrupt_pushButton.clicked.connect(
            andor_scan.operations['interrupt'])
        Q.andor_scan_show_UI_pushButton.clicked.connect(
            andor_scan.operations['show_ui'])

        scan_steps = [5e-3, 3e-3, 1e-3, 5e-4]
        scan_steps_labels = ['5.0 um', '3.0 um', '1.0 um', '0.5 um']
        Q.andor_scan_step_comboBox.addItems(scan_steps_labels)

        def apply_andor_scan_step_value():
            andor_scan.settings.dh.update_value(
                scan_steps[Q.andor_scan_step_comboBox.currentIndex()])
            andor_scan.settings.dv.update_value(
                scan_steps[Q.andor_scan_step_comboBox.currentIndex()])

        Q.andor_scan_step_comboBox.currentIndexChanged.connect(
            apply_andor_scan_step_value)
        andor_scan.settings.dh.connect_to_widget(
            Q.andor_scan_step_doubleSpinBox)

        # ASI Stage
        asi_stage.settings.x_position.connect_to_widget(Q.x_pos_doubleSpinBox)
        Q.x_up_pushButton.clicked.connect(asi_control.x_up)
        Q.x_down_pushButton.clicked.connect(asi_control.x_down)

        asi_stage.settings.y_position.connect_to_widget(Q.y_pos_doubleSpinBox)
        Q.y_up_pushButton.clicked.connect(asi_control.y_up)
        Q.y_down_pushButton.clicked.connect(asi_control.y_down)

        asi_stage.settings.z_position.connect_to_widget(Q.z_pos_doubleSpinBox)
        Q.z_up_pushButton.clicked.connect(asi_control.z_up)
        Q.z_down_pushButton.clicked.connect(asi_control.z_down)

        asi_control.settings.jog_step_xy.connect_to_widget(
            Q.xy_step_doubleSpinBox)
        asi_control.settings.jog_step_z.connect_to_widget(
            Q.z_step_doubleSpinBox)

        stage_steps = np.array([5e-4, 1e-3, 1e-2, 1e-1, 1e0])
        stage_steps_labels = [
            '0.0005 mm', '0.001 mm', '0.010 mm', '0.100 mm', '1.000 mm'
        ]
        Q.xy_step_comboBox.addItems(stage_steps_labels)
        Q.z_step_comboBox.addItems(stage_steps_labels)

        def apply_xy_step_value():
            asi_control.settings.jog_step_xy.update_value(
                stage_steps[Q.xy_step_comboBox.currentIndex()])

        Q.xy_step_comboBox.currentIndexChanged.connect(apply_xy_step_value)

        def apply_z_step_value():
            asi_control.settings.jog_step_z.update_value(
                stage_steps[Q.z_step_comboBox.currentIndex()])

        Q.z_step_comboBox.currentIndexChanged.connect(apply_z_step_value)

        def halt_stage_motion():
            asi_stage.halt_xy()
            asi_stage.halt_z()

        Q.stop_stage_pushButton.clicked.connect(halt_stage_motion)

        # OO Spectrometer
        oo_spec.settings.int_time.connect_to_widget(
            Q.oo_spec_int_time_doubleSpinBox)
        oo_spec_measure.settings.continuous.connect_to_widget(
            Q.oo_spec_acquire_cont_checkBox)
        Q.oo_spec_set_bg_pushButton.clicked.connect(
            oo_spec_measure.set_current_spec_as_bg)
        Q.oo_spec_save_pushButton.clicked.connect(oo_spec_measure.save_data)
        Q.oo_spec_startstop_pushButton.clicked.connect(
            oo_spec_measure.start_stop)

        # OO Spectrometer Optimizer
        oo_spec_opt.settings.power_reading.connect_to_widget(
            Q.power_meter_power_label)
        oo_spec_opt.settings.activation.connect_to_widget(
            Q.power_meter_acquire_cont_checkBox)

        # Flircam
        flircam.settings.activation.connect_to_widget(Q.flircam_live_checkBox)
        flircam.settings.auto_level.connect_to_widget(
            Q.flircam_autolevel_checkBox)
        flircamhw.settings.exposure.connect_to_widget(
            Q.flircam_int_time_doubleSpinBox)

        Q.flircam_auto_exp_comboBox.addItems(["Off", "Once", "Continuous"])
        Q.flircam_auto_exp_comboBox.setCurrentIndex(2)

        def apply_auto_exposure_index():
            flircam.ui.auto_exposure_comboBox.setCurrentIndex(
                Q.flircam_auto_exp_comboBox.currentIndex())

        Q.flircam_auto_exp_comboBox.currentIndexChanged.connect(
            apply_auto_exposure_index)

        self.imlayout = QVBoxLayout()

        def switch_camera_view():
            self.imlayout.addWidget(flircam.imview)
            flircam.imview.show()

        Q.flircam_show_pushButton.clicked.connect(switch_camera_view)
        Q.groupBox_image.setLayout(self.imlayout)

        # Thorlabs DC4100 LED controller
        led_ctrl.settings.LED1.connect_to_widget(Q.led1_checkBox)
        led_ctrl.settings.get_lq('LED1 wavelength').connect_to_widget(
            Q.led1_lineEdit)
        led_ctrl.settings.get_lq('LED1 brightness').connect_to_widget(
            Q.led1_doubleSpinBox)
        led_ctrl.settings.get_lq('LED1 brightness').connect_to_widget(
            Q.led1_horizontalSlider)
        led_ctrl.settings.LED2.connect_to_widget(Q.led2_checkBox)
        led_ctrl.settings.get_lq('LED2 wavelength').connect_to_widget(
            Q.led2_lineEdit)
        led_ctrl.settings.get_lq('LED2 brightness').connect_to_widget(
            Q.led2_doubleSpinBox)
        led_ctrl.settings.get_lq('LED2 brightness').connect_to_widget(
            Q.led2_horizontalSlider)

        # Pygrabber
        pygrabhw.settings.connected.connect_to_widget(
            Q.pygrabber_connect_checkBox)
        pygrab.settings.activation.connect_to_widget(
            Q.pygrabber_acquire_checkBox)
        Q.pygrabber_show_ui_pushButton.clicked.connect(
            pygrab.operations['show_ui'])

        # Spectrometer
        aspec = self.hardware['andor_spec']
        aspec.settings.center_wl.connect_to_widget(
            Q.andor_spec_center_wl_doubleSpinBox)
        #aspec.settings.exit_mirror.connect_to_widget(Q.acton_spec_exitmirror_comboBox)
        aspec.settings.grating_name.connect_to_widget(
            Q.andor_spec_grating_lineEdit)

        # Andor CCD
        andor = self.hardware['andor_ccd']
        andor.settings.exposure_time.connect_to_widget(
            Q.andor_ccd_int_time_doubleSpinBox)
        andor.settings.em_gain.connect_to_widget(
            Q.andor_ccd_emgain_doubleSpinBox)
        andor.settings.temperature.connect_to_widget(
            Q.andor_ccd_temp_doubleSpinBox)
        andor.settings.ccd_status.connect_to_widget(Q.andor_ccd_status_label)
        andor.settings.shutter_open.connect_to_widget(
            Q.andor_ccd_shutter_open_checkBox)
        andor.settings.output_amp.connect_to_widget(
            Q.andor_ccd_output_amp_comboBox)

        # Andor Readout
        aro = self.measurements['andor_ccd_readout']
        aro.settings.bg_subtract.connect_to_widget(Q.andor_ccd_bgsub_checkBox)
        Q.andor_ccd_acquire_cont_checkBox.stateChanged.connect(aro.start_stop)
        Q.andor_ccd_acq_bg_pushButton.clicked.connect(aro.acquire_bg_start)
        Q.andor_ccd_read_single_pushButton.clicked.connect(
            aro.acquire_single_start)

        self.settings_load_ini('uv_defaults.ini')
Exemplo n.º 5
0
    def setup(self):
        
        self.add_quickbar(load_qt_ui_file(sibling_path(__file__, 'trpl_quick_access.ui')))
        
        print("Adding Hardware Components")
        from ScopeFoundryHW.picoharp import PicoHarpHW
        self.add_hardware(PicoHarpHW(self))
        
        #from ScopeFoundryHW.apd_counter import APDCounterHW, APDOptimizerMeasure
        #self.add_hardware(APDCounterHW(self))
        #self.add_measurement(APDOptimizerMeasure(self))
        from ScopeFoundryHW.ni_daq.hw.ni_freq_counter_callback import NI_FreqCounterCallBackHW
        self.add_hardware(NI_FreqCounterCallBackHW(self, name='apd_counter'))
        from confocal_measure.apd_optimizer_cb import APDOptimizerCBMeasurement
        self.add_measurement_component(APDOptimizerCBMeasurement(self))

        from ScopeFoundryHW.andor_camera import AndorCCDHW, AndorCCDReadoutMeasure
        self.add_hardware(AndorCCDHW(self))
        self.add_measurement(AndorCCDReadoutMeasure)
        
        #from ScopeFoundryHW.acton_spec import ActonSpectrometerHW
        #self.add_hardware(ActonSpectrometerHW(self))

        from ScopeFoundryHW.andor_spec.andor_spec_hw import AndorShamrockSpecHW
        self.add_hardware(AndorShamrockSpecHW(self))
        
        from ScopeFoundryHW.flip_mirror_arduino import FlipMirrorHW
        self.add_hardware(FlipMirrorHW(self))
        
        from ScopeFoundryHW.thorlabs_powermeter import ThorlabsPowerMeterHW, PowerMeterOptimizerMeasure
        self.add_hardware(ThorlabsPowerMeterHW(self))
        self.add_measurement(PowerMeterOptimizerMeasure(self))
                
        #self.thorlabs_powermeter_analog_readout_hc = self.add_hardware_component(ThorlabsPowerMeterAnalogReadOut(self))

        from ScopeFoundryHW.mcl_stage.mcl_xyz_stage import MclXYZStageHW
        self.add_hardware(MclXYZStageHW(self))
        
        from ScopeFoundryHW.keithley_sourcemeter.keithley_sourcemeter_hc import KeithleySourceMeterComponent
        self.add_hardware(KeithleySourceMeterComponent(self))

        
        #self.srs_lockin_hc = self.add_hardware_component(SRSLockinComponent(self))
        
        #self.thorlabs_optical_chopper_hc = self.add_hardware_component(ThorlabsOpticalChopperComponent(self))        
        
        #from ScopeFoundryHW.powerwheel_arduino import PowerWheelArduinoHW
        #self.power_wheel = self.add_hardware_component(PowerWheelArduinoHW(self))
        from ScopeFoundryHW.pololu_servo.single_servo_hw import PololuMaestroServoHW
        self.add_hardware(PololuMaestroServoHW(self, name='power_wheel'))
        
        from ScopeFoundryHW.oceanoptics_spec.oceanoptics_spec import OceanOpticsSpectrometerHW
        self.add_hardware_component(OceanOpticsSpectrometerHW(self))
        
        #self.crystaltech_aotf_hc = self.add_hardware_component(CrystalTechAOTF(self))
        
        from ScopeFoundryHW.shutter_servo_arduino.shutter_servo_arduino_hc import ShutterServoHW
        self.add_hardware(ShutterServoHW(self))
        
        from ScopeFoundryHW.dli_powerswitch import DLIPowerSwitchHW
        self.add_hardware(DLIPowerSwitchHW(self))

        from ScopeFoundryHW.quantum_composer import QuantumComposerHW
        self.add_hardware(QuantumComposerHW(self))

        from ScopeFoundryHW.toupcam import ToupCamHW, ToupCamLiveMeasure
        self.add_hardware_component(ToupCamHW(self))
        self.add_measurement(ToupCamLiveMeasure(self))
        
        from ScopeFoundryHW.powermate.powermate_hw import PowermateHW
        self.add_hardware(PowermateHW(self))
        
        from ScopeFoundryHW.asi_stage import ASIStageHW, ASIStageControlMeasure
        self.add_hardware(ASIStageHW(self)) # sample stage
        self.add_hardware(ASIStageHW(self, name='fiber_stage'))
        self.add_measurement(ASIStageControlMeasure(self))
        self.add_measurement(ASIStageControlMeasure(self,name='Fiber_Stage_Control', hw_name='fiber_stage'))
        
        from xbox_trpl_measure import XboxControllerTRPLMeasure
        from ScopeFoundryHW.xbox_controller.xbox_controller_hw import XboxControllerHW
        self.add_hardware(XboxControllerHW(self))
        self.add_measurement(XboxControllerTRPLMeasure(self))

        from ScopeFoundryHW.crystaltech_aotf.crystaltech_aotf_hc import CrystalTechAOTF 
        self.add_hardware(CrystalTechAOTF(self))
        
        from ScopeFoundryHW.linkam_thermal_stage.linkam_temperature_controller import LinkamControllerHC
        self.add_hardware(LinkamControllerHC(self))   
    
        ########################## MEASUREMENTS
        print("Adding Measurement Components")
        
        
        # hardware specific measurements
        
        from ScopeFoundryHW.picoharp.picoharp_hist_measure import PicoHarpHistogramMeasure
        self.add_measurement(PicoHarpHistogramMeasure(self))

        from ScopeFoundryHW.oceanoptics_spec.oo_spec_measure import  OOSpecLive
        self.add_measurement(OOSpecLive(self))
        

        powermate_lq_choices = [
                    'hardware/asi_stage/x_target',
                    'hardware/asi_stage/y_target',
                   '',
                   ]
        from ScopeFoundryHW.powermate.powermate_measure import PowermateMeasure
        self.add_measurement(PowermateMeasure(self, n_devs=2, dev_lq_choices=powermate_lq_choices))


        # Combined Measurements
        from confocal_measure.power_scan import PowerScanMeasure
        self.add_measurement_component(PowerScanMeasure(self))        

        # Current Measurements
        from ScopeFoundryHW.keithley_sourcemeter.photocurrent_iv import PhotocurrentIVMeasurement
        self.add_measurement(PhotocurrentIVMeasurement(self))

        # Mapping Measurements        
        from confocal_measure.apd_mcl_2dslowscan import APD_MCL_2DSlowScan, APD_MCL_3DSlowScan
        apd_scan = self.add_measurement(APD_MCL_2DSlowScan(self))
        self.add_measurement(APD_MCL_3DSlowScan(self))
        
        from confocal_measure import Picoharp_MCL_2DSlowScan
        picoharp_scan = self.add_measurement(Picoharp_MCL_2DSlowScan(self))
        
        from confocal_measure.andor_hyperspec_scan import AndorHyperSpec2DScan
        andor_scan = self.add_measurement(AndorHyperSpec2DScan(self))

        # connect mapping measurement settings        
        lq_names =  ['h0', 'h1', 'v0', 'v1',  'Nh', 'Nv', 'h_axis', 'v_axis']
        
        for scan in [picoharp_scan, andor_scan]:
            for lq_name in lq_names:
                master_scan_lq =  apd_scan.settings.get_lq(lq_name)
                scan.settings.get_lq(lq_name).connect_to_lq(master_scan_lq)     
                
        
        from trpl_microscope.step_and_glue_spec_measure import SpecStepAndGlue
        self.add_measurement(SpecStepAndGlue(self))
        
        from confocal_measure.apd_asi_2dslowscan import APD_ASI_2DSlowScan
        apd_asi = self.add_measurement(APD_ASI_2DSlowScan(self))
        
        from confocal_measure.asi_hyperspec_scan import AndorHyperSpecASIScan
        hyperspec_asi = self.add_measurement(AndorHyperSpecASIScan(self))
        
        from confocal_measure.tiled_large_area_map import TiledLargeAreaMapMeasure
        self.add_measurement(TiledLargeAreaMapMeasure(self))
        
        # connect mapping measurement settings        
        lq_names =  ['h0', 'h1', 'v0', 'v1',  'Nh', 'Nv']
        
        for scan in [apd_asi, hyperspec_asi]:
            for lq_name in lq_names:
                master_scan_lq =  apd_asi.settings.get_lq(lq_name)
                scan.settings.get_lq(lq_name).connect_to_lq(master_scan_lq)         
                    

        
        ####### Quickbar connections #################################
        
        Q = self.quickbar
        
        # 2D Scan Area
        apd_scan.settings.h0.connect_to_widget(Q.h0_doubleSpinBox)
        apd_scan.settings.h1.connect_to_widget(Q.h1_doubleSpinBox)
        apd_scan.settings.v0.connect_to_widget(Q.v0_doubleSpinBox)
        apd_scan.settings.v1.connect_to_widget(Q.v1_doubleSpinBox)
        apd_scan.settings.dh.connect_to_widget(Q.dh_doubleSpinBox)
        apd_scan.settings.dv.connect_to_widget(Q.dv_doubleSpinBox)
        apd_scan.settings.h_axis.connect_to_widget(Q.h_axis_comboBox)
        apd_scan.settings.v_axis.connect_to_widget(Q.v_axis_comboBox)
                
        
        # MadCity Labs
        mcl = self.hardware['mcl_xyz_stage']

        mcl.settings.x_position.connect_to_widget(Q.cx_doubleSpinBox)
        Q.x_set_lineEdit.returnPressed.connect(mcl.settings.x_target.update_value)
        Q.x_set_lineEdit.returnPressed.connect(lambda: Q.x_set_lineEdit.setText(""))

        mcl.settings.y_position.connect_to_widget(Q.cy_doubleSpinBox)
        Q.y_set_lineEdit.returnPressed.connect(mcl.settings.y_target.update_value)
        Q.y_set_lineEdit.returnPressed.connect(lambda: Q.y_set_lineEdit.setText(""))

        mcl.settings.z_position.connect_to_widget(Q.cz_doubleSpinBox)
        Q.z_set_lineEdit.returnPressed.connect(mcl.settings.z_target.update_value)
        Q.z_set_lineEdit.returnPressed.connect(lambda: Q.z_set_lineEdit.setText(""))

        mcl.settings.move_speed.connect_to_widget(Q.nanodrive_move_slow_doubleSpinBox)        
        
        # Power Wheel
        #pw = self.hardware['power_wheel_arduino']
        pw = self.hardware['power_wheel']
        pw.settings.position.connect_to_widget(Q.power_wheel_encoder_pos_doubleSpinBox)
        pw.settings.jog_step.connect_to_widget(Q.powerwheel_move_steps_doubleSpinBox)
        Q.powerwheel_move_fwd_pushButton.clicked.connect(pw.jog_fwd)
        Q.powerwheel_move_bkwd_pushButton.clicked.connect(pw.jog_bkwd)

        #connect events
        apd = self.hardware['apd_counter']
        apd.settings.int_time.connect_to_widget(Q.apd_counter_int_doubleSpinBox)
        #apd.settings.count_rate.updated_text_value.connect(
        #                                   Q.apd_counter_output_lineEdit.setText)
        apd.settings.count_rate.connect_to_widget(Q.apd_counter_output_lineEdit)

        apd_opt = self.measurements['apd_optimizer']
        #apd.settings
        apd_opt.settings.activation.connect_to_widget(Q.apd_optimize_startstop_checkBox)
        #self.measurement_state_changed[bool].connect(self.gui.ui.apd_optimize_startstop_checkBox.setChecked)
        
        # Spectrometer
        aspec = self.hardware['andor_spec']
        aspec.settings.center_wl.connect_to_widget(Q.acton_spec_center_wl_doubleSpinBox)
        #aspec.settings.exit_mirror.connect_to_widget(Q.acton_spec_exitmirror_comboBox)
        aspec.settings.grating_name.connect_to_widget(Q.acton_spec_grating_lineEdit)        
        
        # Andor CCD
        andor = self.hardware['andor_ccd']
        andor.settings.exposure_time.connect_to_widget(Q.andor_ccd_int_time_doubleSpinBox)
        andor.settings.em_gain.connect_to_widget(Q.andor_ccd_emgain_doubleSpinBox)
        andor.settings.temperature.connect_to_widget(Q.andor_ccd_temp_doubleSpinBox)
        andor.settings.ccd_status.connect_to_widget(Q.andor_ccd_status_label)
        andor.settings.shutter_open.connect_to_widget(Q.andor_ccd_shutter_open_checkBox)
        andor.settings.output_amp.connect_to_widget(Q.andor_ccd_output_amp_comboBox)
        
        # Andor Readout
        aro = self.measurements['andor_ccd_readout']
        aro.settings.bg_subtract.connect_to_widget(Q.andor_ccd_bgsub_checkBox)
        Q.andor_ccd_acquire_cont_checkBox.stateChanged.connect(aro.start_stop)
        Q.andor_ccd_acq_bg_pushButton.clicked.connect(aro.acquire_bg_start)
        Q.andor_ccd_read_single_pushButton.clicked.connect(aro.acquire_single_start)
        
        
        
        # power meter
        pm = self.hardware['thorlabs_powermeter']
        pm.settings.wavelength.connect_to_widget(Q.power_meter_wl_doubleSpinBox)
        pm.settings.power.connect_to_widget(Q.power_meter_power_label)
        
        pm_opt = self.measurements['powermeter_optimizer']
        pm_opt.settings.activation.connect_to_widget(Q.power_meter_acquire_cont_checkBox)
        
        
        
        shutter = self.hardware['shutter_servo']
        shutter.settings.shutter_open.connect_to_widget(Q.shutter_open_checkBox)
        
        self.hardware['flip_mirror'].settings.mirror_position.connect_to_widget(Q.flip_mirror_checkBox)
        
        
        # AOTF
        aotf_hw = self.hardware['CrystalTechAOTF_DDS']
        aotf_hw.settings.freq0.connect_to_widget(Q.atof_freq_doubleSpinBox)
        aotf_hw.settings.pwr0.connect_to_widget(Q.aotf_power_doubleSpinBox)
        aotf_hw.settings.modulation_enable.connect_to_widget(Q.aotf_mod_enable_checkBox)        
        
        ################# Shared Settings for Map Measurements ########################
        
        
        ############
        #Color scheme
#         
#         from qtpy.QtGui import QPalette, QColor
#         from qtpy.QtCore import Qt
# 
#         # Now use a palette to switch to dark colors:
#         palette = QPalette()
#         palette.setColor(QPalette.Window, QColor(53, 53, 53))
#         palette.setColor(QPalette.WindowText, Qt.white)
#         palette.setColor(QPalette.Base, QColor(25, 25, 25))
#         palette.setColor(QPalette.AlternateBase, QColor(53, 53, 53))
#         palette.setColor(QPalette.ToolTipBase, Qt.white)
#         palette.setColor(QPalette.ToolTipText, Qt.white)
#         palette.setColor(QPalette.Text, Qt.white)
#         palette.setColor(QPalette.Button, QColor(53, 53, 53))
#         palette.setColor(QPalette.ButtonText, Qt.white)
#         palette.setColor(QPalette.BrightText, Qt.red)
#         palette.setColor(QPalette.Link, QColor(42, 130, 218))
#         palette.setColor(QPalette.Highlight, QColor(42, 130, 218))
#         palette.setColor(QPalette.HighlightedText, Qt.black)
#         self.qtapp.setPalette(palette)
        
        
        ##########
        self.settings_load_ini('trpl_defaults.ini')
Exemplo n.º 6
0
    def setup(self):

        #Add hardware components
        print("Adding Hardware Components")

        #from ScopeFoundryHW.apd_counter.apd_counter import APDCounterHW
        #self.add_hardware_component(APDCounterHW(self))
        from ScopeFoundryHW.ni_daq.hw.ni_freq_counter_callback import NI_FreqCounterCallBackHW
        self.add_hardware(NI_FreqCounterCallBackHW(self, name='apd_counter'))

        from ScopeFoundryHW.mcl_stage.mcl_xyz_stage import MclXYZStageHW
        self.add_hardware_component(MclXYZStageHW(self))

        #self.add_hardware_component(SEMSlowscanVoutStage(self))

        from ScopeFoundryHW.picoharp import PicoHarpHW
        self.add_hardware_component(PicoHarpHW(self))

        from ScopeFoundryHW.winspec_remote import WinSpecRemoteClientHW
        self.add_hardware_component(WinSpecRemoteClientHW(self))

        from ScopeFoundryHW.ascom_camera import ASCOMCameraHW
        self.add_hardware_component(ASCOMCameraHW(self))

        from ScopeFoundryHW.powerwheel_arduino import PowerWheelArduinoHW
        self.add_hardware_component(PowerWheelArduinoHW(self))

        from ScopeFoundryHW.pololu_servo.single_servo_hw import PololuMaestroServoHW
        self.add_hardware(PololuMaestroServoHW(self, name='power_wheel'))

        from ScopeFoundryHW.thorlabs_powermeter import ThorlabsPowerMeterHW
        self.add_hardware_component(ThorlabsPowerMeterHW(self))

        #         from ScopeFoundryHW.attocube_ecc100 import AttoCubeXYZStageHW
        #         self.add_hardware_component(AttoCubeXYZStageHW(self))

        #         from ScopeFoundryHW.newport_esp300 import ESP300AxisHW
        #         self.add_hardware_component(ESP300AxisHW(self))

        from ScopeFoundryHW.thorlabs_stepper_motors import ThorlabsStepperControllerHW
        self.add_hardware_component(ThorlabsStepperControllerHW)

        from ScopeFoundryHW.ni_daq.hw.ni_digital_out import NIDigitalOutHW
        self.add_hardware(
            NIDigitalOutHW(
                self,
                name='flip_mirrors',
                line_names=['apd_flip', '_', '_', '_', '_', '_', '_', '_']))

        #from ScopeFoundryHW.shutter_servo_arduino.shutter_servo_arduino_hc import ShutterServoHW
        #self.add_hardware(ShutterServoHW(self))

        from ScopeFoundryHW.thorlabs_elliptec.elliptec_hw import ThorlabsElliptecSingleHW
        self.add_hardware(
            ThorlabsElliptecSingleHW(self,
                                     name='collection_filter',
                                     named_positions=OrderedDict(
                                         (('PL', 0.0), ('Laser', 31.0),
                                          ('C_open', 62.), ('D_open', 93.)))))
        self.add_hardware(
            ThorlabsElliptecSingleHW(self,
                                     name='laser_in_shutter',
                                     named_positions=OrderedDict(
                                         (('closed', 1.0), ('open', 24.0)))))

        #Add measurement components
        print("Create Measurement objects")

        # hardware specific measurements
        #from ScopeFoundryHW.apd_counter import APDOptimizerMeasure
        #self.add_measurement_component(APDOptimizerMeasure(self))
        from confocal_measure.apd_optimizer_cb import APDOptimizerCBMeasurement
        self.add_measurement_component(APDOptimizerCBMeasurement(self))

        from ScopeFoundryHW.ascom_camera import ASCOMCameraCaptureMeasure
        self.add_measurement_component(ASCOMCameraCaptureMeasure(self))

        from ScopeFoundryHW.winspec_remote import WinSpecRemoteReadoutMeasure
        self.add_measurement_component(WinSpecRemoteReadoutMeasure(self))

        from ScopeFoundryHW.thorlabs_powermeter import PowerMeterOptimizerMeasure
        self.add_measurement_component(PowerMeterOptimizerMeasure(self))

        from ScopeFoundryHW.picoharp.picoharp_hist_measure import PicoHarpHistogramMeasure
        self.add_measurement(PicoHarpHistogramMeasure(self))

        # combined measurements
        from confocal_measure.power_scan import PowerScanMeasure
        self.add_measurement_component(PowerScanMeasure(self))

        # Mapping measurements
        from ScopeFoundryHW.mcl_stage.mcl_stage_slowscan import Delay_MCL_2DSlowScan
        self.add_measurement(Delay_MCL_2DSlowScan(self))

        from confocal_measure import APD_MCL_2DSlowScan
        self.add_measurement_component(APD_MCL_2DSlowScan(self))

        from confocal_measure import Picoharp_MCL_2DSlowScan
        self.add_measurement_component(Picoharp_MCL_2DSlowScan(self))

        from confocal_measure import WinSpecMCL2DSlowScan
        self.add_measurement_component(WinSpecMCL2DSlowScan(self))

        #         from ScopeFoundryHW.attocube_ecc100.attocube_stage_control import AttoCubeStageControlMeasure
        #         self.add_measurement(AttoCubeStageControlMeasure(self))
        #
        #         from ScopeFoundryHW.attocube_ecc100.attocube_slowscan import AttoCube2DSlowScan
        #         self.add_measurement(AttoCube2DSlowScan(self))

        from plimg_microscope import fiber_scan
        self.add_measurement(fiber_scan.FiberPowerMeterScan(self))
        self.add_measurement(fiber_scan.FiberAPDScan(self))
        self.add_measurement(fiber_scan.FiberPicoharpScan(self))
        self.add_measurement(fiber_scan.FiberWinSpecScan(self))

        from ScopeFoundryHW.dli_powerswitch import DLIPowerSwitchHW
        self.add_hardware(DLIPowerSwitchHW(self))

        from plimg_microscope.auto_focus_measure import AutoFocusMeasure
        self.add_measurement(AutoFocusMeasure(self))

        from plimg_microscope.power_scan_maps import PowerScanMapMeasurement
        self.add_measurement(PowerScanMapMeasurement(self))

        from plimg_microscope.laser_line_writer import LaserLineWriter
        self.add_measurement(LaserLineWriter(self))

        #set some default logged quantities
        #

        #Add additional app-wide logged quantities
        #

        ####### Quickbar connections #################################

        self.add_quickbar(
            load_qt_ui_file(sibling_path(__file__, 'm3_quick_access.ui')))
        Q = self.quickbar

        # 2D Scan Area
        Q.groupBox_scanarea.hide()  # temporarily hide
        #         apd_scan.settings.h0.connect_to_widget(Q.h0_doubleSpinBox)
        #         apd_scan.settings.h1.connect_to_widget(Q.h1_doubleSpinBox)
        #         apd_scan.settings.v0.connect_to_widget(Q.v0_doubleSpinBox)
        #         apd_scan.settings.v1.connect_to_widget(Q.v1_doubleSpinBox)
        #         apd_scan.settings.dh.connect_to_widget(Q.dh_doubleSpinBox)
        #         apd_scan.settings.dv.connect_to_widget(Q.dv_doubleSpinBox)
        #         apd_scan.settings.h_axis.connect_to_widget(Q.h_axis_comboBox)
        #         apd_scan.settings.v_axis.connect_to_widget(Q.v_axis_comboBox)

        # MadCity Labs
        mcl = self.hardware['mcl_xyz_stage']

        mcl.settings.x_position.connect_to_widget(Q.cx_doubleSpinBox)
        Q.x_set_lineEdit.returnPressed.connect(
            mcl.settings.x_target.update_value)
        Q.x_set_lineEdit.returnPressed.connect(
            lambda: Q.x_set_lineEdit.setText(""))

        mcl.settings.y_position.connect_to_widget(Q.cy_doubleSpinBox)
        Q.y_set_lineEdit.returnPressed.connect(
            mcl.settings.y_target.update_value)
        Q.y_set_lineEdit.returnPressed.connect(
            lambda: Q.y_set_lineEdit.setText(""))

        mcl.settings.z_position.connect_to_widget(Q.cz_doubleSpinBox)
        Q.z_set_lineEdit.returnPressed.connect(
            mcl.settings.z_target.update_value)
        Q.z_set_lineEdit.returnPressed.connect(
            lambda: Q.z_set_lineEdit.setText(""))

        mcl.settings.move_speed.connect_to_widget(
            Q.nanodrive_move_slow_doubleSpinBox)

        # Power Wheel
        pw = self.hardware['power_wheel_arduino']
        pw.settings.encoder_pos.connect_to_widget(
            Q.power_wheel_encoder_pos_doubleSpinBox)
        pw.settings.move_steps.connect_to_widget(
            Q.powerwheel_move_steps_doubleSpinBox)
        Q.powerwheel_move_fwd_pushButton.clicked.connect(pw.move_fwd)
        Q.powerwheel_move_bkwd_pushButton.clicked.connect(pw.move_bkwd)

        #connect events
        apd = self.hardware['apd_counter']
        apd.settings.int_time.connect_to_widget(
            Q.apd_counter_int_doubleSpinBox)
        #apd.settings.count_rate.updated_text_value.connect(
        #                                   Q.apd_counter_output_lineEdit.setText)
        apd.settings.count_rate.connect_to_widget(
            Q.apd_counter_output_lineEdit)

        apd_opt = self.measurements['apd_optimizer']
        #apd.settings
        apd_opt.settings.activation.connect_to_widget(
            Q.apd_optimize_startstop_checkBox)
        #self.measurement_state_changed[bool].connect(self.gui.ui.apd_optimize_startstop_checkBox.setChecked)

        # Spectrometer
        #         aspec = self.hardware['acton_spectrometer']
        #         aspec.settings.center_wl.connect_to_widget(Q.acton_spec_center_wl_doubleSpinBox)
        #         aspec.settings.exit_mirror.connect_to_widget(Q.acton_spec_exitmirror_comboBox)
        #         aspec.settings.grating_name.connect_to_widget(Q.acton_spec_grating_lineEdit)
        #

        # power meter
        pm = self.hardware['thorlabs_powermeter']
        pm.settings.wavelength.connect_to_widget(
            Q.power_meter_wl_doubleSpinBox)
        pm.settings.power.connect_to_widget(Q.power_meter_power_label)

        pm_opt = self.measurements['powermeter_optimizer']
        pm_opt.settings.activation.connect_to_widget(
            Q.power_meter_acquire_cont_checkBox)

        #         shutter = self.hardware['shutter_servo']
        #         shutter.settings.shutter_open.connect_to_widget(Q.shutter_open_checkBox)
        #
        #         self.hardware['flip_mirror'].settings.mirror_position.connect_to_widget(Q.flip_mirror_checkBox)

        # load default settings from file
        self.settings_load_ini("m3_settings.ini")
Exemplo n.º 7
0
    def setup(self):
        
        
        print("Adding Hardware Components")
        
        import ScopeFoundryHW.picoharp as ph
        self.add_hardware(ph.PicoHarpHW(self))

        from ScopeFoundryHW.picoquant.hydraharp_hw import HydraHarpHW
        self.add_hardware(HydraHarpHW(self))

        #from ScopeFoundryHW.winspec_remote import WinSpecRemoteClientHW
        #self.add_hardware_component(WinSpecRemoteClientHW(self))
        
        from ScopeFoundryHW.acton_spec import ActonSpectrometerHW
        self.add_hardware(ActonSpectrometerHW(self))

        #from ScopeFoundryHW.tenma_power.tenma_hw import TenmaHW
        #self.add_hardware(TenmaHW(self))
        
        from ScopeFoundryHW.pololu_servo.multi_servo_hw import PololuMaestroHW, PololuMaestroWheelServoHW, PololuMaestroShutterServoHW
        self.add_hardware(PololuMaestroHW(self, name='pololu_maestro'))
        self.add_hardware(PololuMaestroWheelServoHW(self, name='power_wheel', channel=0))
        self.add_hardware(PololuMaestroShutterServoHW(self, name='shutter', channel=2))
        
        from ScopeFoundryHW.thorlabs_powermeter import ThorlabsPowerMeterHW
        self.add_hardware_component(ThorlabsPowerMeterHW(self))
        
        #from ScopeFoundryHW.thorlabs_powermeter.thorlabs_powermeter_analog_readout import ThorlabsPowerMeterAnalogReadOut
        #self.add_hardware(ThorlabsPowerMeterAnalogReadOut(self))

        #from ScopeFoundryHW.dli_powerswitch import DLIPowerSwitchHW
        #self.add_hardware(DLIPowerSwitchHW(self))
        
        from ScopeFoundryHW.attocube_ecc100.attocube_xyz_hw import AttoCubeXYZStageHW
        self.add_hardware(AttoCubeXYZStageHW(self))                        
              
        from ScopeFoundryHW.powermate.powermate_hw import PowermateHW
        self.add_hardware(PowermateHW(self))
        
        #from ScopeFoundryHW.thorlabs_motorized_filter_flipper.thorlabsMFF_hardware import ThorlabsMFFHW
        #self.add_hardware_component(ThorlabsMFFHW(self))        
        
        #from ScopeFoundryHW.xbox_controller.xbox_controller_hw import XboxControllerHW
        #self.add_hardware(XboxControllerHW(self))
        
        from ScopeFoundryHW.filter_wheel_arduino.filter_wheel_arduino_hw import FilterWheelArduinoHW
        self.add_hardware(FilterWheelArduinoHW(self))
        
        #from ScopeFoundryHW.arduino_tc4.arduino_tc4_hw import ArduinoTc4HW
        #self.add_hardware(ArduinoTc4HW(self))
        
        from ScopeFoundryHW.chameleon_compact_opo.chameleon_compact_opo_hw import ChameleonCompactOPOHW
        self.add_hardware(ChameleonCompactOPOHW(self))
        
        #from ScopeFoundryHW.keithley_sourcemeter.keithley_sourcemeter_hc import KeithleySourceMeterComponent
        #self.add_hardware(KeithleySourceMeterComponent(self))
        
        from ScopeFoundryHW.andor_camera import AndorCCDHW, AndorCCDReadoutMeasure
        self.add_hardware(AndorCCDHW(self))        
        self.add_measurement(AndorCCDReadoutMeasure)
        
        
        from ScopeFoundryHW.toupcam.toupcam_hw import ToupCamHW
        self.add_hardware(ToupCamHW(self))
        
        print("Adding Measurement Components")

        from ir_microscope.measurements.hyperspectral_scan import AndorHyperSpec2DScan
        self.add_measurement(AndorHyperSpec2DScan(self))

        #self.add_measurement(ph.PicoHarpChannelOptimizer(self))
        #self.add_measurement(ph.PicoHarpHistogramMeasure(self))
        #self.add_measurement(trpl_scan.TRPL2DScan(self, shutter_open_lq_path='hardware/shutter/open'))

        from ScopeFoundryHW.picoquant.hydraharp_optimizer import HydraHarpOptimizerMeasure
        self.add_measurement(HydraHarpOptimizerMeasure(self))
        from ir_microscope.measurements.trpl_scan import TRPL2DScan
        self.add_measurement(TRPL2DScan(self))
        from ScopeFoundryHW.picoquant.hydraharp_hist_measure import HydraHarpHistogramMeasure
        self.add_measurement(HydraHarpHistogramMeasure(self))

        #from ScopeFoundryHW.winspec_remote import WinSpecRemoteReadoutMeasure
        #self.add_measurement(WinSpecRemoteReadoutMeasure(self))
        
        from confocal_measure.power_scan import PowerScanMeasure
        self.add_measurement(PowerScanMeasure(self, shutter_open_lq_path='hardware/shutter/open'))       
        
        from ScopeFoundryHW.thorlabs_powermeter import PowerMeterOptimizerMeasure
        self.add_measurement(PowerMeterOptimizerMeasure(self))    
        

 
        from ScopeFoundryHW.attocube_ecc100.attocube_stage_control import AttoCubeStageControlMeasure
        self.add_measurement(AttoCubeStageControlMeasure(self))

        from ScopeFoundryHW.powermate.powermate_measure import PowermateMeasure
        choices = ['hardware/attocube_xyz_stage/z_target_position',
                   'hardware/attocube_xyz_stage/x_target_position',
                   'hardware/attocube_xyz_stage/y_target_position',
                   '',
                   ]
        self.add_measurement(PowermateMeasure(self, n_devs=3, dev_lq_choices=choices))
        
        
        #from ScopeFoundryHW.attocube_ecc100.attocube_home_axis_measurement import AttoCubeHomeAxisMeasurement
        #self.add_measurement(AttoCubeHomeAxisMeasurement(self))
        
        #from measurements.stage_motion_measure import StageHomeAxesMeasure
        #self.add_measurement(StageHomeAxesMeasure(self))
        
        #from measurements.xbox_controller_measure import XboxControllerMeasure
        #self.add_measurement(XboxControllerMeasure(self))
        
        #from measurements.laser_line_writer import LaserLineWriter
        #self.add_measurement(LaserLineWriter(self))
        
        from ir_microscope.measurements.laser_power_feedback_control import LaserPowerFeedbackControl
        self.add_measurement(LaserPowerFeedbackControl(self))
        
        #from ir_microscope.measurements.position_recipe_control import PositionRecipeControl
        #self.add_measurement(PositionRecipeControl(self))
        #from ir_microscope.measurements.focus_recipe_control import FocusRecipeControl
        #self.add_measurement(FocusRecipeControl(self))
        
        from ir_microscope.measurements.nested_measurements import NestedMeasurements
        self.add_measurement(NestedMeasurements(self))
        
        #from ir_microscope.measurements.apd_scan import PicoharpApdScan
        #self.add_measurement(PicoharpApdScan(self, use_external_range_sync=True))
        
        from confocal_measure.calibration_sweep import CalibrationSweep
        self.add_measurement(CalibrationSweep(self, spectrometer_hw_name='acton_spectrometer', 
                                                    camera_readout_measure_name='andor_ccd_readout') )
        
        #from ir_microscope.measurements.trpl_parallelogram_scan import TRPLParallelogramScan
        #self.add_measurement(TRPLParallelogramScan(self, use_external_range_sync=False))
        
        #from ScopeFoundryHW.keithley_sourcemeter.iv_base_measurement import IVBaseMeasurement,IVTRPL
        #self.add_measurement(IVBaseMeasurement(self))        
        #self.add_measurement(IVTRPL(self))        
        
        #from ScopeFoundryHW.crystaltech_aotf.crystaltech_aotf_hc import CrystalTechAOTF
        #self.add_hardware(CrystalTechAOTF(self))
        
        #from ScopeFoundryHW.xbox_controller.xbox_controller_test_measure import 
        
        from confocal_measure.toupcam_spot_optimizer import ToupCamSpotOptimizer
        self.add_measurement(ToupCamSpotOptimizer(self))        
        
        
        from ir_microscope.measurements.auto_focus_measure import AutoFocusMeasure
        self.add_measurement(AutoFocusMeasure(self))
        
        ####### Quickbar connections #################################
        self.add_quickbar(load_qt_ui_file(sibling_path(__file__, 'ir_quick_access.ui')))
        Q = self.quickbar
        
        
        #power mate
        self.measurements['powermate_measure'].settings.fine.connect_to_widget(Q.fine_checkBox)

        # LED
        '''
        tenmaHW = self.hardware['tenma_powersupply']
        Q.tenma_power_on_pushButton.clicked.connect(lambda: tenmaHW.write_both(V=3.0,I=0.1,impose_connection=True))
        Q.tenma_power_off_pushButton.clicked.connect(tenmaHW.zero_both)
        
        tenmaHW.settings.actual_current.connect_to_widget(Q.tenma_power_current_doubleSpinBox)
        Q.tenma_power_current_plus_pushButton.clicked.connect(lambda: tenmaHW.write_delta_current(delta = 0.05))
        Q.tenma_power_current_minus_pushButton.clicked.connect(lambda: tenmaHW.write_delta_current(delta = -0.05))
        Q.tenma_power_current_lineEdit.returnPressed.connect(tenmaHW.settings.set_current.update_value)
        Q.tenma_power_current_lineEdit.returnPressed.connect(lambda: Q.tenma_power_current_lineEdit.setText(""))

        tenmaHW.settings.actual_voltage.connect_to_widget(Q.tenma_power_voltage_doubleSpinBox)
        Q.tenma_power_voltage_plus_pushButton.clicked.connect(lambda: tenmaHW.write_delta_voltage(delta = 0.2))
        Q.tenma_power_voltage_minus_pushButton.clicked.connect(lambda: tenmaHW.write_delta_voltage(delta = -0.2))
        Q.tenma_power_voltage_lineEdit.returnPressed.connect(tenmaHW.settings.set_voltage.update_value)
        Q.tenma_power_voltage_lineEdit.returnPressed.connect(lambda: Q.tenma_power_voltage_lineEdit.setText(""))
        '''
        # Atto Cube
        stage = self.hardware['attocube_xyz_stage']

        stage.settings.connected.connect_to_widget(Q.stage_connected_checkBox)
        self.measurements['attocube_stage_control_measure'].settings.activation.connect_to_widget(Q.stage_live_update_checkBox)
        self.measurements['attocube_stage_control_measure'].settings.wobble.connect_to_widget(Q.stage_wobble_checkBox)

        stage.settings.x_position.connect_to_widget(Q.cx_doubleSpinBox)
        Q.x_set_lineEdit.returnPressed.connect(stage.settings.x_target_position.update_value)
        Q.x_set_lineEdit.returnPressed.connect(lambda: Q.x_set_lineEdit.setText(""))

        stage.settings.y_position.connect_to_widget(Q.cy_doubleSpinBox)
        Q.y_set_lineEdit.returnPressed.connect(stage.settings.y_target_position.update_value)
        Q.y_set_lineEdit.returnPressed.connect(lambda: Q.y_set_lineEdit.setText(""))

        stage.settings.z_position.connect_to_widget(Q.cz_doubleSpinBox)
        Q.z_set_lineEdit.returnPressed.connect(stage.settings.z_target_position.update_value)
        Q.z_set_lineEdit.returnPressed.connect(lambda: Q.z_set_lineEdit.setText(""))

        #stage.settings.move_speed.connect_to_widget(Q.nanodrive_move_slow_doubleSpinBox)   
        
        #acton spectrometer
        acton_spec = self.hardware['acton_spectrometer']
        acton_spec.settings.connected.connect_to_widget(Q.spectrometer_connected_checkBox)
        acton_spec.settings.center_wl.connect_to_widget(Q.center_wl_doubleSpinBox)
        acton_spec.settings.grating_id.connect_to_widget(Q.grating_id_comboBox)
        
        #connect events
        #apd = self.hardware['apd_counter']
        #apd.settings.int_time.connect_to_widget(Q.apd_counter_int_doubleSpinBox)
        #apd.settings.apd_count_rate.updated_text_value.connect(
                                           #Q.apd_counter_output_lineEdit.setText)
        

        #apd_opt = self.measurements['apd_optimizer']
        #apd.settings
        #apd_opt.settings.activation.connect_to_widget(Q.apd_optimize_startstop_checkBox)
        #self.measurement_state_changed[bool].connect(self.gui.ui.apd_optimize_startstop_checkBox.setChecked)         
        
        # power meter
        pm = self.hardware['thorlabs_powermeter']
        pm.settings.connected.connect_to_widget(Q.power_meter_connected_checkBox)
        pm.settings.wavelength.connect_to_widget(Q.power_meter_wl_doubleSpinBox)
        pm.settings.power.connect_to_widget(Q.power_meter_power_label)
        
        pm_opt = self.measurements['powermeter_optimizer']
        pm_opt.settings.activation.connect_to_widget(Q.power_meter_acquire_cont_checkBox)
        
        # laser power feedback
        lpfc = self.measurements['laser_power_feedback_control']
        lpfc.settings.setpoint_power.connect_to_widget(Q.laser_power_feedback_control_setpoint_doubleSpinBox)
        lpfc.settings.p_gain.connect_to_widget(Q.laser_power_feedback_control_p_gain_doubleSpinBox)
        lpfc.settings.activation.connect_to_widget(Q.laser_power_feedback_control_activation_checkBox)
        
        # Power Wheel
        #pw = self.hardware['power_wheel_arduino']
        pw = self.hardware['power_wheel']
        pw.settings.connected.connect_to_widget(Q.power_wheel_connected_checkBox)
        pw.settings.position.connect_to_widget(Q.power_wheel_encoder_pos_doubleSpinBox)
        pw.settings.jog_step.connect_to_widget(Q.powerwheel_move_steps_doubleSpinBox)
        Q.powerwheel_move_fwd_pushButton.clicked.connect(pw.jog_fwd)
        Q.powerwheel_move_bkwd_pushButton.clicked.connect(pw.jog_bkwd)

        # Filter Wheel
        fw = self.hardware['filter_wheel']
        fw.settings.connected.connect_to_widget(Q.filter_wheel_connected_checkBox)
        Q.zero_filter_pushButton.clicked.connect(fw.zero_filter)
        fw.settings.current_filter.connect_to_widget(Q.current_filter_doubleSpinBox)
        Q.target_filter_lineEdit.returnPressed.connect(fw.settings.target_filter.update_value)
        Q.target_filter_lineEdit.returnPressed.connect(lambda: Q.target_filter_lineEdit.setText(""))
        Q.move_filter_bkwd_pushButton.clicked.connect(fw.decrease_target_filter)
        Q.move_filter_fwd_pushButton.clicked.connect(fw.increase_target_filter)
        
        # Thorlabs Flip Mirror
        #MFF = self.hardware['thorlabs_MFF']
        #MFF.settings.pos.connect_to_widget(Q.thorlabs_MFF_comboBox)
        
        # shutter
        shutter = self.hardware['shutter']
        shutter.settings.open.connect_to_widget(Q.shutter_open_checkBox)
               
        #AOTF
        #aotf = self.hardware['CrystalTechAOTF_DDS']
        #aotf.settings.connected.connect_to_widget(Q.aotf_connected_checkBox)
        #aotf.settings.freq0.connect_to_widget(Q.aotf_freq0_doubleSpinBox)
        #aotf.settings.deflected_wl.connect_to_widget(Q.aotf_deflected_wl_doubleSpinBox)
        
               
        # picoharp
        #ph = self.hardware['picoharp']
        #ph.settings.connected.connect_to_widget(Q.picoharp_connected_checkBox)
        #ph.settings.count_rate0.connect_to_widget(Q.picoharp_count_rate0_lcdNumber)
        #ph.settings.count_rate1.connect_to_widget(Q.picoharp_count_rate1_lcdNumber)
        #ph.settings.Tacq.connect_to_widget(Q.picoharp_Tacq_doubleSpinBox)

        """
        # Andor CCD
        andor = self.hardware['andor_ccd']
        andor.settings.exposure_time.connect_to_widget(Q.andor_ccd_int_time_doubleSpinBox)
        andor.settings.em_gain.connect_to_widget(Q.andor_ccd_emgain_doubleSpinBox)
        andor.settings.temperature.connect_to_widget(Q.andor_ccd_temp_doubleSpinBox)
        andor.settings.ccd_status.connect_to_widget(Q.andor_ccd_status_label)
        andor.settings.shutter_open.connect_to_widget(Q.andor_ccd_shutter_open_checkBox)  
        
        # Spectrometer
        aspec = self.hardware['acton_spectrometer']
        aspec.settings.center_wl.connect_to_widget(Q.acton_spec_center_wl_doubleSpinBox)
        aspec.settings.exit_mirror.connect_to_widget(Q.acton_spec_exitmirror_comboBox)
        aspec.settings.grating_name.connect_to_widget(Q.acton_spec_grating_lineEdit)                
        
        
        #connect events
        apd = self.hardware['apd_counter']
        apd.settings.int_time.connect_to_widget(Q.apd_counter_int_doubleSpinBox)
        apd.settings.apd_count_rate.updated_text_value.connect(
                                           Q.apd_counter_output_lineEdit.setText)
        

        #apd_opt = self.measurements['apd_optimizer']
        #apd.settings
        #apd_opt.settings.activation.connect_to_widget(Q.apd_optimize_startstop_checkBox)
        #self.measurement_state_changed[bool].connect(self.gui.ui.apd_optimize_startstop_checkBox.setChecked)      
        """
        

        ##########
        # app level settings
        S = self.settings
        
        
        # 2d scan
        _2D_scans = ['trpl_2d_scan', 
                     'andor_hyperspec_scan',
                      ]
        
        #Create and connect logged quantities to widget and equivalent lqs measurements
        for ii,lq_name in enumerate(["h_axis","v_axis"]):
            S.New(lq_name, dtype=str, initial='xy'[ii], choices=("x", "y", "z"), ro=False)
            getattr(S, lq_name).connect_to_widget(\
                                    getattr(Q, lq_name+'_comboBox'))
            for m in _2D_scans:
                getattr(S, lq_name).connect_to_lq( \
                                    getattr(self.measurements[m].settings,lq_name) )

        for lq_name in ['h0','h1','v0','v1','dh','dv']:
            S.New(lq_name, dtype=float, unit='mm', ro=False, spinbox_decimals=6, spinbox_step=0.001,)
            getattr(S, lq_name).connect_to_widget(\
                                    getattr(Q, lq_name+'_doubleSpinBox'))
            for m in _2D_scans:
                getattr(S, lq_name).connect_to_lq( \
                                        getattr(self.measurements[m].settings,lq_name))
                    
        
        for lq_name in ['Nh', 'Nv']:
            S.New(lq_name, dtype=int, ro=False, vmin=2, initial=11)
            getattr(S, lq_name).connect_to_widget(\
                                    getattr(Q, lq_name+'_doubleSpinBox'))
            for m in _2D_scans:
                getattr(S, lq_name).connect_to_lq( \
                                        getattr(self.measurements[m].settings,lq_name))

        for lq_name in ['h_center', 'v_center', 'h_span', 'v_span']:
            S.New(lq_name, dtype=float, unit='mm', initial=0.005, ro=False, spinbox_decimals=6, spinbox_step=0.001,)
            getattr(S, lq_name).connect_to_widget(\
                                                    getattr(Q, lq_name+'_doubleSpinBox'))
            for m in _2D_scans:
                getattr(S, lq_name).connect_to_lq( \
                                        getattr(self.measurements[m].settings,lq_name))

        
                
        #make connected ranges
        self.h_range=LQRange(S.get_lq('h0'),S.get_lq('h1'),S.get_lq('dh'),S.get_lq('Nh'),
                             S.get_lq('h_center'), S.get_lq('h_span'))
        self.v_range=LQRange(S.get_lq('v0'),S.get_lq('v1'),S.get_lq('dv'),S.get_lq('Nv'),
                             S.get_lq('v_center'), S.get_lq('v_span'))

        self.coppy_current_position_to_2d_scan_center()
                
        Q.copy_current_position_to_2d_scan_center_pushButton.clicked.connect(
            lambda:self.coppy_current_position_to_2d_scan_center(decimal_places=-1))