def handle_new_data(self):
        """ Called during measurement thread wait loop"""
        SyncRasterScan.handle_new_data(self)

        ccd_dev = self.andor_ccd.ccd_dev
        #print("get_number_new_images", ccd_dev.get_number_new_images()
        #print("get_total_number_images_acquired", ccd_dev.get_total_number_images_acquired())
        if ccd_dev.get_total_number_images_acquired() > 0:
            #print("get_number_available_images", ccd_dev.get_number_available_images())
            #print("get_number_new_images", ccd_dev.get_number_new_images())

            #first, last = ccd_dev.get_number_new_images()

            #validfirst, validlast, buf = ccd_dev.get_images(first, last, self.buffer[first-1:last-1,:])
            #print("get_images", validfirst, validlast)

            # Loop through available images in Andor buffer
            while 1:
                self.andor_ccd.settings.ccd_status.read_from_hardware()

                if self.interrupt_measurement_called:
                    break

                # new frame
                frame_num = (self.andor_ccd_total_i // self.Npixels)
                if self.andor_ccd_pixel_i == 0:
                    # stop if new frame is past requested frames
                    if (not self.settings['continuous_scan']
                        ) and frame_num >= self.settings['n_frames']:
                        break
                    # extend H5 array to fit new frame
                    if self.settings['save_h5']:
                        self.extend_h5_framed_dataset(self.spec_map_h5,
                                                      frame_num)

                # grab the next ccd image, place it into buffer
                t0 = time.time()
                arr = ccd_dev.get_oldest_image(
                    self.spec_buffer[self.andor_ccd_pixel_i, :])
                if arr is None:
                    break

                # copy data to image shaped map
                i = self.andor_ccd_pixel_i
                #x = self.scan_index_array[i,:]
                #self.spec_map[x[0], x[1], x[2],:] = arr
                kk, jj, ii = self.scan_index_array[i, :]
                self.spec_map[kk, jj, ii, :] = arr
                if self.settings['save_h5']:
                    #print('save h5', frame_num, kk,jj,ii, i)
                    self.spec_map_h5[frame_num, kk, jj, ii, :] = arr

                self.andor_ccd_pixel_i += 1
                self.andor_ccd_total_i += 1
                self.andor_ccd_pixel_i %= self.Npixels
Example #2
0
    def setup(self):
        SyncRasterScan.setup(self)
        self.display_update_period = 0.1

        self.disp_chan_choices += ['auger{}'.format(i)
                                   for i in range(10)] + ['sum_auger']
        self.settings.display_chan.change_choice_list(
            tuple(self.disp_chan_choices))

        self.settings.New('ke_start',
                          dtype=float,
                          initial=30,
                          unit='V',
                          vmin=5,
                          vmax=2200)
        self.settings.New('ke_end',
                          dtype=float,
                          initial=600,
                          unit='V',
                          vmin=1,
                          vmax=2200)
        self.settings.New('ke_delta',
                          dtype=float,
                          initial=0.5,
                          unit='V',
                          vmin=0.02979,
                          vmax=2200,
                          si=True)
        self.settings.New('pass_energy',
                          dtype=float,
                          initial=50,
                          unit='V',
                          vmin=5,
                          vmax=500)
        self.settings.New('crr_ratio',
                          dtype=float,
                          initial=5,
                          vmin=1.5,
                          vmax=20)
        self.settings.New('CAE_mode', dtype=bool, initial=False)

        for lq_name in ['ke_start', 'ke_end', 'ke_delta', 'CAE_mode']:
            self.settings.get_lq(lq_name).add_listener(self.compute_ke)

        self.settings.New('eht_off_at_end', dtype=bool, initial=False)

        self.ui.details_groupBox.layout().addWidget(
            self.settings.New_UI())  # comment out?

        self.settings.New('No_dispersion', dtype=bool, initial=False)
        self.settings.New('Chan_sum', dtype=bool, initial=True)

        self.settings.New('auto_focus', dtype=bool, initial=False)
        self.settings.New('frames_before_focus', dtype=int, initial=5, vmin=1)
Example #3
0
    def handle_new_data(self):
        """ Called during measurement thread wait loop"""
        SyncRasterScan.handle_new_data(self)

        new_auger_data = self.auger_fpga_hw.read_fifo()
        self.auger_queue.append(new_auger_data)

        #ring_buf_index_array = (i + np.arange(n, dtype=int)) % self.Npixels
        #self.auger_chan_pixels[ring_buf_index_array] = new_auger_data

        while len(self.auger_queue) > 0:
            # grab the next available data chunk
            #print('new_adc_data_queue' + "[===] "*len(self.new_adc_data_queue))
            new_data = self.auger_queue.pop(0)
            i = self.auger_i
            n = new_data.shape[0]

            # grab only up to end of frame, put the rest back in the queue
            if i + n > self.Npixels:
                split_index = (self.Npixels - i)
                print("split", i, n, split_index, self.Npixels)
                self.auger_queue.append(new_data[split_index:])
                new_data = new_data[0:split_index]
                n = new_data.shape[0]

            # copy data to image shaped map
            self.auger_chan_pixels[i:i + n, :] = new_data
            x = self.scan_index_array[i:i + n, :].T
            self.auger_chan_map[x[0], x[1], x[2], :] = new_data

            # new frame
            if self.auger_i == 0:
                frame_num = (self.auger_total_i // self.Npixels) - 1
                if self.settings['save_h5']:
                    self.extend_h5_framed_dataset(self.auger_chan_map_h5,
                                                  frame_num)
                    self.auger_chan_map_h5[
                        frame_num, :, :, :, :] = self.auger_chan_map

            if self.interrupt_measurement_called:
                break

            self.auger_i += n
            self.auger_total_i += n
            self.auger_i %= self.Npixels

        print(new_auger_data.shape)
Example #4
0
    def get_display_pixels(self):
        #SyncRasterScan.get_display_pixels(self)
        #self.display_pixels = self.auger_chan_pixels[:,0:8].sum(axis=1)
        #self.display_pixels[0] = 0
        #self.display_pixels = self._pixels[:,0]

        #DISPLAY_CHAN = 0
        #self.display_pixels = self.adc_pixels[:,DISPLAY_CHAN]
        #self.display_pixels[0] = 0

        chan = self.settings['display_chan']
        if 'auger' in chan:
            if chan == 'sum_auger':
                self.display_pixels = self.auger_chan_pixels[:,
                                                             0:8].sum(axis=1)
            else:
                self.display_pixels = self.auger_chan_pixels[:, int(chan[-1])]
        else:
            return SyncRasterScan.get_display_pixels(self)
Example #5
0
    def setup(self):

        # SEM Hardware Components

        from ScopeFoundryHW.xbox_controller.xbcontrol_hc import XboxControlHW
        self.add_hardware(XboxControlHW(self))

        from ScopeFoundryHW.xbox_controller.xbcontrol_mc import XboxControlMeasure
        self.add_measurement(XboxControlMeasure(self))

        #from ScopeFoundryHW.sem_analog.sem_singlechan_signal import SEMSingleChanSignal
        #self.add_hardware_component(SEMSingleChanSignal(self))
        #from ScopeFoundryHW.sem_analog.sem_dualchan_signal import SEMDualChanSignal
        #self.add_hardware_component(SEMDualChanSignal(self))
        #from ScopeFoundryHW.sem_analog.sem_slowscan_vout import SEMSlowscanVoutStage
        #self.add_hardware_component(SEMSlowscanVoutStage(self))

        from ScopeFoundryHW.sync_raster_daq import SyncRasterDAQ
        self.add_hardware_component(SyncRasterDAQ(self))

        from Auger.NIFPGA.auger_fpga_hw import AugerFPGA_HW
        self.add_hardware(AugerFPGA_HW(self))

        from Auger.hardware.auger_electron_analyzer_hw import AugerElectronAnalyzerHW
        self.add_hardware(AugerElectronAnalyzerHW(self))

        from ScopeFoundryHW.zeiss_sem.remcon32_hw import Auger_Remcon_HW
        self.add_hardware(Auger_Remcon_HW(self))

        ########## Measurements

        #        self.add_measurement_component(AugerPointSpectrum(self))
        #        self.add_measurement_component(AugerQuadOptimizer(self))

        #self.add_measurement_component(SEMSlowscanSingleChan(self))
        #        from Auger.sem_slowscan2d import SEMSlowScan
        #        self.add_measurement_component(SEMSlowScan(self))
        #        self.add_measurement_component(AugerSlowMap(self))

        from Auger.auger_chan_history import AugerChanHistory
        self.add_measurement_component(AugerChanHistory(self))

        from Auger.auger_spectrum import AugerSpectrum
        self.add_measurement_component(AugerSpectrum(self))

        from ScopeFoundryHW.sync_raster_daq import SyncRasterScan
        self.add_measurement_component(SyncRasterScan(self))

        from Auger.auger_sync_scan import AugerSyncRasterScan, MultiSpecAugerScan
        self.add_measurement(AugerSyncRasterScan(self))
        self.add_measurement(MultiSpecAugerScan(self))

        #         from Auger.measurement.auger_pressure_history import AugerPressureHistory
        #         self.add_measurement_component(AugerPressureHistory(self))

        from Auger.analyzer_quad_optimizer import AugerQuadOptimizer
        self.add_measurement(AugerQuadOptimizer(self))

        from Auger.analyzer_simplex_optimizer import AugerSimplexOptimizer
        self.add_measurement(AugerSimplexOptimizer(self))

        from Auger.hardware.sem_align import SEMAlignMeasure
        self.add_measurement(SEMAlignMeasure)

        from Auger.auger_quad_scan import AugerQuadSlowScan
        self.add_measurement(AugerQuadSlowScan(self))

        from Auger.sem_auto_focus import SEMAutoFocus
        self.add_measurement(SEMAutoFocus(self))

        from Auger.sem_auto_stig_measure import SEMAutoStigMeasure
        self.add_measurement(SEMAutoStigMeasure(self))

        #        self.phi_ion_gun = self.add_hardware_component(PhiIonGunHardwareComponent(self))
        #        self.ion_gun_status = self.add_measurement_component(IonGunStatus(self))

        self.hardware['xbox_controller'].settings.get_lq(
            'connected').update_value(True)

        self.settings_load_ini('auger_app_settings.ini')

        self.ui.show()
 def setup(self):
     SyncRasterScan.setup(self)
     self.settings['adc_oversample'] = 2500
     self.settings.adc_oversample.change_min_max(100, 25e6)
     self.settings['adc_rate'] = 200e3
 def get_display_pixels(self):
     #self.display_pixels = self.spec_buffer.mean(axis=1)
     return SyncRasterScan.get_display_pixels(self)
Example #8
0
 def on_end_frame(self, frame_i):
     SyncRasterScan.on_end_frame(self, frame_i)
Example #9
0
    def on_new_frame(self, frame_i):
        SyncRasterScan.on_new_frame(self, frame_i)

        self.analyzer_hw.settings['KE'] = self.ke[0, frame_i]