Macro AcquireEpisode() Test() End Function Test() // Specify the number of images to acquire and maximum duration of the acquisition. // The script will stop the acquisition when either of the two conditions is met, whichever // come first. Variable sidx_limit_images = 256 Variable sidx_limit_duration_s = 100 // Specify the path of the TIFF file to write. // Please update this text string to be the full path you want to use. // The current implementation of SIDXAcquireArchiveOpenNew // writes to the current folder of the running IGOR Pro application, // which may not be the same as the folder of the current IGOR Pro // experiment. A future update to SIDXAcquireArchiveOpenNew // will eliminate this problem. String archive_file = "AcquireEpisode.tiff" String image_stack_name = "sidx_wave_stack" Variable sidx_status sidx_status = CameraOpen() if (sidx_status != 0) return 0 endif sidx_status = CameraSetUp(image_stack_name, archive_file, sidx_limit_images) if (sidx_status != 0) CameraClose() return 0 endif printf "Starting acquisition. Press the Esc key to terminate the acquisition\r" sidx_status = CameraAcquire($image_stack_name, sidx_limit_images, sidx_limit_duration_s) if (sidx_status != 0) CameraClose() return 0 endif CheckDisplayed/A $image_stack_name if (V_flag != 0) DoUpdate else Display; AppendImage $image_stack_name endif CameraClose() End Static Function CameraClose() Variable sidx_status NVAR /Z sidx_acquire_local = root:sidx_acquire if (NVAR_Exists(sidx_acquire_local)) if (sidx_acquire_local != 0) SIDXAcquireClose sidx_acquire_local, sidx_status sidx_acquire_local = 0 endif endif NVAR /Z sidx_camera_local = root:sidx_camera if (NVAR_Exists(sidx_camera_local)) if (sidx_camera_local != 0) SIDXCameraClose sidx_camera_local, sidx_status sidx_camera_local = 0 endif endif NVAR /Z sidx_root_local = root:sidx_root if (NVAR_Exists(sidx_root_local)) if (sidx_root_local != 0) SIDXRootClose sidx_root_local, sidx_status sidx_root_local = 0 endif endif End Static Function CameraOpen() Variable sidx_camera_index = 0 Variable sidx_status Variable sidx_root_local String sidx_license = "" SIDXRootOpen sidx_root_local, sidx_license, sidx_status if (sidx_status != 0) printf "SIDXRootOpen failed\r" return sidx_status endif SIDXRootCameraScan sidx_root_local, sidx_status if (sidx_status != 0) ErrorSIDXRoot(sidx_root_local, "SIDXRootCameraScan") SIDXRootClose sidx_root_local, sidx_status return sidx_status endif String sidx_camera_name = "" SIDXRootCameraScanGetName sidx_root_local, sidx_camera_index, sidx_camera_name, sidx_status if (sidx_status != 0) ErrorSIDXRoot(sidx_root_local, "SIDXRootCameraScanGetName") SIDXRootClose sidx_root_local, sidx_status return sidx_status endif Variable sidx_camera_local SIDXRootCameraOpenName sidx_root_local, sidx_camera_name, sidx_camera_local, sidx_status if (sidx_status != 0) ErrorSIDXRoot(sidx_root_local, "SIDXRootCameraOpenName") SIDXRootClose sidx_root_local, sidx_status return sidx_status endif Variable/G sidx_root = sidx_root_local Variable/G sidx_camera = sidx_camera_local return sidx_status End Static Function CameraSetUp(image_stack_name, archive_file, sidx_limit_images) String image_stack_name String archive_file Variable sidx_limit_images Variable exposure_duration_s = 0.001 Variable sidx_status NVAR sidx_camera_local = root:sidx_camera // Set exposure duration here SIDXCameraExposeSet sidx_camera_local, exposure_duration_s, sidx_status if (sidx_status != 0) ErrorSIDXCamera(sidx_camera_local, "SIDXCameraExposeSet") return sidx_status endif SIDXCameraAcquireImageSetLimit sidx_camera_local, 0, sidx_status if (sidx_status != 0) ErrorSIDXCamera(sidx_camera_local, "SIDXCameraAcquireImageSetLimit") return sidx_status endif Variable sidx_acquire_local SIDXCameraAcquireOpen sidx_camera_local, sidx_acquire_local, sidx_status if (sidx_status != 0) ErrorSIDXCamera(sidx_camera_local, "SIDXCameraAcquireOpen") return sidx_status endif Variable image_width_pixel Variable image_height_pixel SIDXGeometryPixelGetCount sidx_acquire_local, image_width_pixel, image_height_pixel, sidx_status if (sidx_status != 0) ErrorSIDXAcquire(sidx_acquire_local, "SIDXGeometryPixelGetCount") return sidx_status endif // This is the 3D wave to store all acquired images Make/O/W/U/N=(image_width_pixel, image_height_pixel, sidx_limit_images) $image_stack_name Variable sidx_archive_local SIDXAcquireArchiveOpenNew sidx_acquire_local, archive_file, "TIFF", 1, sidx_archive_local, sidx_status if (sidx_status != 0) ErrorSIDXAcquire(sidx_acquire_local, "SIDXAcquireArchiveOpenNew") return sidx_status endif Variable/G sidx_acquire = sidx_acquire_local Variable/G sidx_archive = sidx_archive_local return sidx_status End Static Function CameraAcquire(image_stack_wave, sidx_limit_images, sidx_limit_duration_s) Wave image_stack_wave Variable sidx_limit_images Variable sidx_limit_duration_s Variable sidx_status NVAR sidx_acquire_local = root:sidx_acquire NVAR sidx_archive_local = root:sidx_archive Variable start_time_ticks = ticks Variable end_time_ticks Variable acquire_duration_s SIDXAcquireStart sidx_acquire_local, sidx_status if (sidx_status != 0) ErrorSIDXAcquire(sidx_acquire_local, "SIDXAcquireStart") return sidx_status endif Variable sidx_image_count = 0 Variable sidx_acquiring = 1 Variable sidx_acquire_index = sidx_image_count do Sleep /T 1 Variable keys = GetKeyState(0) if ((keys & 32) != 0) // The escape key is pressed. Terminate the acquisition break; endif SIDXAcquireGetStatus sidx_acquire_local, sidx_acquiring, sidx_status if (sidx_status != 0) ErrorSIDXAcquire(sidx_acquire_local, "SIDXAcquireGetStatus") break endif SIDXAcquireImageGetCount sidx_acquire_local, sidx_image_count, sidx_status if (sidx_status != 0) ErrorSIDXAcquire(sidx_acquire_local, "SIDXAcquireImageGetCount") break endif Variable sidx_new_image_count if (sidx_image_count <= sidx_limit_images) sidx_new_image_count = sidx_image_count - sidx_acquire_index else sidx_new_image_count = sidx_limit_images - sidx_acquire_index endif if (sidx_new_image_count > 0) // Archive all available images to disk SIDXAcquireArchiveWrite sidx_acquire_local, sidx_acquire_index, sidx_new_image_count, sidx_status if (sidx_status != 0) ErrorSIDXAcquire(sidx_acquire_local, "SIDXAcquireArchiveWrite") break endif // Read available images into an existing IGOR 3D wave SIDXAcquireReadReplace sidx_acquire_local, sidx_new_image_count, image_stack_wave, sidx_acquire_index, sidx_status if (sidx_status != 0) ErrorSIDXAcquire(sidx_acquire_local, "SIDXAcquireReadReplace") break endif sidx_acquire_index += sidx_new_image_count endif end_time_ticks = ticks acquire_duration_s = (end_time_ticks - start_time_ticks) / 60 while (sidx_acquiring && (sidx_acquire_index < sidx_limit_images) && (acquire_duration_s < sidx_limit_duration_s)) SIDXAcquireAbort sidx_acquire_local, sidx_status if (sidx_status != 0) ErrorSIDXAcquire(sidx_acquire_local, "SIDXAcquireAbort") return sidx_status endif return sidx_status End Static Function ErrorSIDXRoot(sidx_root_local, function_name) Variable sidx_root_local String function_name String message_root = "" Variable status SIDXRootGetLastError sidx_root_local, message_root printf "%s: %s\r", function_name, message_root SIDXRootClose sidx_root_local, status End Static Function ErrorSIDXCamera(sidx_camera_local, function_name) Variable sidx_camera_local String function_name String message_camera = "" Variable status SIDXCameraGetLastError sidx_camera_local, message_camera printf "%s: %s\r", function_name, message_camera End Static Function ErrorSIDXAcquire(sidx_acquire_local, function_name) Variable sidx_acquire_local String function_name String message_acquire = "" Variable status SIDXAcquireGetLastError sidx_acquire_local, message_acquire printf "%s: %s\r", function_name, message_acquire End