def run(self):
        """Runs the acquisition"""
        self._initialize_run()

        stimuli = self.protocol_model.allTests()

        self.acq_thread = threading.Thread(target=self._worker, 
                                           args=(stimuli,), )
        # save the current calibration to data file doc        
        if self.save_data:
            info = {'calibration_used': self.calname, 'calibration_range': self.cal_frange}
            self.datafile.set_metadata(self.current_dataset_name, info)

        # save the start time and set last tick to expired, so first
        # acquisition loop iteration executes immediately
        self.start_time = time.time()
        self.last_tick = self.start_time - (self.interval/1000)

        self.acq_thread.start()
        return self.acq_thread
Runs the acquisition