### Path Validation Configuration Examples Source: https://github.com/areadetector/adtimepix3/blob/master/documentation/OPTIMIZATION_SUMMARY.md Examples of valid and invalid path configurations for the TPX3_RAW_BASE parameter. ```bash # ✅ Valid formats (format validation + directory existence check) TPX3_RAW_BASE = "file:/path/to/folder" # RawFilePathExists_RBV = 'Yes' (if directory exists) TPX3_RAW_BASE = "file:/media/nvme/raw" # RawFilePathExists_RBV = 'Yes' (if directory exists) TPX3_RAW_BASE = "file:/home/user/data" # RawFilePathExists_RBV = 'Yes' (if directory exists) TPX3_RAW_BASE = "http://localhost:8081" # RawFilePathExists_RBV = 'Yes' (streaming) TPX3_RAW_BASE = "tcp://localhost:8085" # RawFilePathExists_RBV = 'Yes' (streaming) # ❌ Invalid formats (now caught and reported) TPX3_RAW_BASE = "file:///path/to/folder" # Multiple slashes after file: TPX3_RAW_BASE = "file://path/to/folder" # Double slash after file: TPX3_RAW_BASE = "file:" # No slash after file: TPX3_RAW_BASE = "file:/" # No path after file:/ ``` -------------------------------- ### Check System Compiler and CMake Versions Source: https://github.com/areadetector/adtimepix3/blob/master/documentation/README_cpr.md Verify the installed versions of cmake and gcc on the system. ```bash [kg1@bl100-dasopi1 tpx3Support]$ cmake --version cmake version 3.0.2 [kg1@bl100-dasopi1 base]$ gcc --version gcc (GCC) 4.8.5 20150623 (Red Hat 4.8.5-44) ``` -------------------------------- ### Configure Preview Histogram Streaming Paths Source: https://github.com/areadetector/adtimepix3/blob/master/documentation/OPTIMIZATION_SUMMARY.md Examples of setting the base path for preview histogram channels to support file writing, HTTP streaming, or TCP streaming. ```bash # File writing (existing functionality) TPX3_PRV_HSTBASE = "file:/path/to/histogram/folder" # HTTP streaming (new functionality) TPX3_PRV_HSTBASE = "http://localhost:8081" # TCP streaming (new functionality) TPX3_PRV_HSTBASE = "tcp://localhost:8085" ``` -------------------------------- ### CPR Installation Script Source: https://github.com/areadetector/adtimepix3/blob/master/documentation/README_cpr.md A shell script to clone, build, and configure the CPR library. ```bash #!/bin/bash git clone https://github.com/libcpr/cpr cd cpr git checkout tags/1.12.1 -b v1.12.1-branch mkdir build cd build cmake .. cmake --build . cp cpr_generated_includes/cpr/cprver.h ../include/cpr/. ``` -------------------------------- ### Perform REST API Call Source: https://github.com/areadetector/adtimepix3/blob/master/README.md Example of using the CPR library to perform a GET request with basic authentication. ```cpp cpr::Response r = cpr::Get(cpr::Url{serverURL + "/dashboard"}, cpr::Authentication{"user", "pass", cpr::AuthMode::BASIC}); ``` -------------------------------- ### Operator Log Warning Example Source: https://github.com/areadetector/adtimepix3/blob/master/documentation/TCP_PERFORMANCE_LIMITS.md Example logs indicating frame buffer exhaustion and pool depletion at high frame rates. ```text Trigger FPS: 1000.0, Exposure (ms): 1.0 WARN: Attempted to overwrite frame that was not fully read out due to limited buffers WARN: Image Pool is empty... Awaiting free images. ``` -------------------------------- ### Calculate Bin Width in TDC Ticks Source: https://github.com/areadetector/adtimepix3/blob/master/documentation/HISTOGRAM_PERFORMANCE_ANALYSIS.md Examples for calculating the required binWidth integer parameter for common time intervals. ```text - 1 ns bin: binWidth = ceil(1e-9 / 2.6041666666666667e-10) = 4 TDC ticks - 10 ns bin: binWidth = ceil(10e-9 / 2.6041666666666667e-10) = 39 TDC ticks - 100 ns bin: binWidth = ceil(100e-9 / 2.6041666666666667e-10) = 384 TDC ticks - 1 us bin: binWidth = ceil(1e-6 / 2.6041666666666667e-10) = 3,840 TDC ticks ``` -------------------------------- ### Path Checking Wrapper Functions Source: https://github.com/areadetector/adtimepix3/blob/master/documentation/OPTIMIZATION_SUMMARY.md Examples of wrapper functions that utilize the unified checkChannelPath method for specific channel types. ```cpp // Raw channels (with stream parameters) asynStatus ADTimePix::checkRawPath() { return checkChannelPath(ADTimePixRawBase, ADTimePixRawStream, ADTimePixRawFilePathExists, "Raw", "Raw file path must be file:/path_to_raw_folder, http://localhost:8081, or tcp://localhost:8085"); } // Image channels (without stream parameters) asynStatus ADTimePix::checkImgPath() { return checkChannelPath(ADTimePixImgBase, -1, ADTimePixImgFilePathExists, "Img", "Img file path must be file:/path_to_img_folder, http://localhost:8081, or tcp://localhost:8085"); } ``` -------------------------------- ### Configure TDC for TimePix3 emulator Source: https://github.com/areadetector/adtimepix3/blob/master/README.md Start the Java emulator with the specified TDC selection to ensure histogram accumulation. ```bash -Dtdc=0 ``` -------------------------------- ### Example Compilation Error Source: https://github.com/areadetector/adtimepix3/blob/master/documentation/README_cpr.md An example of a make error encountered during the compilation of CPR 1.12.1. ```bash make[2]: *** No rule to make target '../cprSrc/cpr/build/lib/libcurl-d.so', needed by '../../lib/linux-x86_64/libcurl-d.so'. Stop. make[2]: *** Waiting for unfinished jobs.... ``` -------------------------------- ### JSON Image Header Structure Source: https://github.com/areadetector/adtimepix3/blob/master/documentation/PRVIMG_METADATA_RECOMMENDATIONS.md Example of the JSON header format sent by the Serval server containing frame metadata. ```json { "width": 256, "height": 256, "pixelFormat": "uint16", "frameNumber": 12345, "timeAtFrame": 1234567890.123456 } ``` -------------------------------- ### Configure Pump-Probe Histogram Settings Source: https://github.com/areadetector/adtimepix3/blob/master/documentation/HISTOGRAM_PERFORMANCE_ANALYSIS.md Sets up a 1 microsecond time window with native 260 ps resolution using EPICS process variables. ```bash # 1 us time window with 260 ps bins (native resolution) caput TPX3-TEST:cam1:PrvHstNumBins 3840 caput TPX3-TEST:cam1:PrvHstBinWidth 1 # 1 TDC tick = 260 ps caput TPX3-TEST:cam1:PrvHstOffset 0 ``` -------------------------------- ### Verify REUSE compliance Source: https://github.com/areadetector/adtimepix3/blob/master/documentation/CONTRIBUTING.md Run this command from the repository root to ensure license metadata meets REUSE Specification 3.0. ```bash reuse lint ``` -------------------------------- ### Configuration Helper Functions Source: https://github.com/areadetector/adtimepix3/blob/master/documentation/OPTIMIZATION_SUMMARY.md Functions for configuring channels and sending JSON-based configurations. ```cpp asynStatus configureRawChannel(int channelIndex, json& server_j); asynStatus configureImageChannel(const std::string& jsonPath, json& server_j); asynStatus configurePreviewSettings(json& server_j); asynStatus configureHistogramChannel(json& server_j); asynStatus sendConfiguration(const json& config); ``` -------------------------------- ### Configure NDPluginPva Plugin Source: https://github.com/areadetector/adtimepix3/blob/master/README.md Registers and loads records for the NDPluginPva plugin to support PVAccess. ```bash NDPvaConfigure("PVA1", $(QSIZE), 0, "$(PORT)", 0, $(PREFIX)Pva1:Image, 0, 0, 0) dbLoadRecords("NDPva.template", "P=$(PREFIX),R=Pva1:, PORT=PVA1,ADDR=0,TIMEOUT=1,NDARRAY_PORT=$(PORT)") startPVAServer ``` -------------------------------- ### Configure Standard Phase Transition Detection Source: https://github.com/areadetector/adtimepix3/blob/master/documentation/HISTOGRAM_PERFORMANCE_ANALYSIS.md EPICS caput commands for 10 Hz operation with 1 us binning to balance signal-to-noise and temporal resolution. ```bash # 100 ms time window (10 Hz) with 1 us bins for good signal-to-noise caput TPX3-TEST:cam1:PrvHstNumBins 100000 caput TPX3-TEST:cam1:PrvHstBinWidth 3840 # 1 us caput TPX3-TEST:cam1:PrvHstOffset 0 caput TPX3-TEST:cam1:PrvHstFramesToSum 20 # Sum of last 20 frames caput TPX3-TEST:cam1:PrvHstSumUpdateInterval 2 # Update every 2 frames ``` -------------------------------- ### Implement Channel Configuration Tracking and Validation Source: https://github.com/areadetector/adtimepix3/blob/master/documentation/OPTIMIZATION_SUMMARY.md Tracks enabled channels and validates configuration status to prevent errors during startup when no channels are active. ```cpp // Added channel tracking bool anyChannelConfigured = false; // Enhanced status checking asynStatus status = configureRawChannel(0, server_j); if (status == asynError) { ERR("Failed to configure raw channel 0"); return asynError; } if (status == asynSuccess && server_j.contains("Raw")) { anyChannelConfigured = true; } // Added validation if (!anyChannelConfigured) { // During startup, it's normal for no channels to be configured yet // Just log an info message and return success LOG("No channels are enabled. Skipping file writer configuration."); return asynSuccess; } ``` -------------------------------- ### Configure Slow Phase Transition Monitoring Source: https://github.com/areadetector/adtimepix3/blob/master/documentation/HISTOGRAM_PERFORMANCE_ANALYSIS.md EPICS caput commands for 1 Hz long-term monitoring using 1 us binning. ```bash # 1 s time window (1 Hz) with 1 us bins for long-term monitoring caput TPX3-TEST:cam1:PrvHstNumBins 1000000 caput TPX3-TEST:cam1:PrvHstBinWidth 3840 # 1 us caput TPX3-TEST:cam1:PrvHstOffset 0 caput TPX3-TEST:cam1:PrvHstFramesToSum 10 # Sum of last 10 frames caput TPX3-TEST:cam1:PrvHstSumUpdateInterval 1 # Update every frame ``` -------------------------------- ### Perform HTTP Requests with Embedded CPR Source: https://github.com/areadetector/adtimepix3/blob/master/documentation/PR3_SUMMARY.md Uses the embedded cpr library to perform authenticated HTTP GET requests. ```cpp using json = nlohmann::json; // HTTP requests using embedded cpr cpr::Response r = cpr::Get(cpr::Url{this->serverURL}, cpr::Authentication{"user", "pass", cpr::AuthMode::BASIC}, cpr::Parameters{{"anon", "true"}, {"key", "value"}}); ``` -------------------------------- ### Project Directory Structure Source: https://github.com/areadetector/adtimepix3/blob/master/documentation/PR3_SUMMARY.md Displays the organization of embedded libraries and build configuration files within the tpx3Support directory. ```text tpx3Support/ ├── cpr/ # Embedded cpr library │ ├── cpr/ # Header files (45 files) │ │ ├── cpr.h │ │ ├── response.h │ │ └── ... (43 more) │ ├── accept_encoding.cpp # Source files (22 files) │ ├── async.cpp │ └── ... (20 more) ├── json/ # Embedded nlohmann/json │ ├── json.hpp │ └── json_fwd.hpp └── Makefile # Updated build configuration ``` -------------------------------- ### Configure High-Resolution Phase Transition Detection Source: https://github.com/areadetector/adtimepix3/blob/master/documentation/HISTOGRAM_PERFORMANCE_ANALYSIS.md EPICS caput commands for 60 Hz operation with 100 ns binning to achieve precise Bragg edge measurements. ```bash # 16.67 ms time window (60 Hz) with 100 ns bins for precise Bragg edge measurement caput TPX3-TEST:cam1:PrvHstNumBins 166700 caput TPX3-TEST:cam1:PrvHstBinWidth 384 # 100 ns caput TPX3-TEST:cam1:PrvHstOffset 0 caput TPX3-TEST:cam1:PrvHstFramesToSum 50 # Sum of last 50 frames caput TPX3-TEST:cam1:PrvHstSumUpdateInterval 5 # Update every 5 frames ``` -------------------------------- ### Build and verify coordinate mapping Source: https://github.com/areadetector/adtimepix3/blob/master/documentation/CONTRIBUTING.md Execute these commands to compile the project and validate coordinate mapping logic after making changes. ```bash make -j python3 test/verify_coordinate_map.py ``` -------------------------------- ### Configure High Hit Rate Histogram Settings Source: https://github.com/areadetector/adtimepix3/blob/master/documentation/HISTOGRAM_PERFORMANCE_ANALYSIS.md Sets up a 16.67 millisecond time window with 100 ns bin resolution for high-throughput applications. ```bash # 16.67 ms time window (60 Hz) with 100 ns bins caput TPX3-TEST:cam1:PrvHstNumBins 166700 caput TPX3-TEST:cam1:PrvHstBinWidth 384 # 100 ns caput TPX3-TEST:cam1:PrvHstOffset 0 ``` -------------------------------- ### List Library Files for CPR Versions Source: https://github.com/areadetector/adtimepix3/blob/master/documentation/README_cpr.md Display the contents of the build library directory for different versions of the CPR library. ```bash kg1@lap133454:/epics/support/areaDetector/ADTimePix3$ ls tpx3Support/cprSrc/cpr/build/lib/ -l lrwxrwxrwx 1 kg1 users 11 Aug 15 12:57 libcpr.so -> libcpr.so.1 lrwxrwxrwx 1 kg1 users 15 Aug 15 12:57 libcpr.so.1 -> libcpr.so.1.9.1 -rwxr-xr-x 1 kg1 users 4386640 Aug 15 12:57 libcpr.so.1.9.1 -rwxr-xr-x 1 kg1 users 2700712 Aug 15 12:57 libcurl-d.so lrwxrwxrwx 1 kg1 users 9 Aug 15 12:57 libz.so -> libz.so.1 lrwxrwxrwx 1 kg1 users 22 Aug 15 12:57 libz.so.1 -> libz.so.1.2.11.zlib-ng -rwxr-xr-x 1 kg1 users 395736 Aug 15 12:57 libz.so.1.2.11.zlib-ng ``` ```bash kg1@lap133454:~/Documents/SNS/BL10/cpr$ ls cpr/build/lib/ -l lrwxrwxrwx 1 kg1 users 11 Aug 15 12:19 libcpr.so -> libcpr.so.1 lrwxrwxrwx 1 kg1 users 16 Aug 15 12:19 libcpr.so.1 -> libcpr.so.1.12.1 -rwxr-xr-x 1 kg1 users 578672 Aug 15 12:19 libcpr.so.1.12.1 lrwxrwxrwx 1 kg1 users 12 Aug 15 12:18 libcurl.so -> libcurl.so.4 lrwxrwxrwx 1 kg1 users 16 Aug 15 12:18 libcurl.so.4 -> libcurl.so.4.8.0 -rwxr-xr-x 1 kg1 users 871304 Aug 15 12:18 libcurl.so.4.8.0 -rw-r--r-- 1 kg1 users 245094 Aug 15 12:18 libz.a lrwxrwxrwx 1 kg1 users 9 Aug 15 12:18 libz.so -> libz.so.1 lrwxrwxrwx 1 kg1 users 22 Aug 15 12:18 libz.so.1 -> libz.so.1.2.13.zlib-ng -rwxr-xr-x 1 kg1 users 169616 Aug 15 12:18 libz.so.1.2.13.zlib-ng ``` -------------------------------- ### Load Acquisition Sequence and IOC Stats Source: https://github.com/areadetector/adtimepix3/blob/master/README.md Loads the sseq record for acquisition sequencing and devIocStats for IOC monitoring. ```bash dbLoadRecords("$(CALC)/calcApp/Db/sseqRecord.db", "P=$(PREFIX), S=AcquireSequence") set_requestfile_path("$(CALC)/calcApp/Db") dbLoadRecords("$(DEVIOCSTATS)/db/iocAdminSoft.db", "IOC=$(PREFIX)") ``` -------------------------------- ### Implement Stream Detection and Conditional Configuration Source: https://github.com/areadetector/adtimepix3/blob/master/documentation/OPTIMIZATION_SUMMARY.md Logic for auto-detecting stream types based on URL prefixes and conditionally applying parameters based on the connection type. ```cpp // Stream parameter auto-detection in checkPrvHstPath() if (filePath.compare(0,6,"file:/") == 0) { setIntegerParam(ADTimePixPrvHstStream, 0); // File writing } else if (filePath.substr(0,7) == "http://") { setIntegerParam(ADTimePixPrvHstStream, 1); // HTTP streaming } else if (filePath.substr(0,6) == "tcp://") { setIntegerParam(ADTimePixPrvHstStream, 2); // TCP streaming } // Conditional parameter configuration in configureHistogramChannel() bool isStreamingConnection = (fileStr.find("http://") == 0) || (fileStr.find("tcp://") == 0); if (!isStreamingConnection) { // Include file-specific parameters for file connections server_j["Preview"]["HistogramChannels"][0]["FilePattern"] = fileStr; server_j["Preview"]["HistogramChannels"][0]["StopMeasurementOnDiskLimit"] = STOP_ON_DISK_LIMIT[intNum]; } ``` -------------------------------- ### File Writer Structure Comparison Source: https://github.com/areadetector/adtimepix3/blob/master/documentation/OPTIMIZATION_SUMMARY.md Comparison of the fileWriter method before and after optimization. ```cpp asynStatus ADTimePix::fileWriter(){ // 200+ lines of repetitive code // Multiple similar blocks for different channels // Repeated JSON array definitions // Minimal error handling // No parameter validation } ``` ```cpp asynStatus ADTimePix::fileWriter(){ // 30 lines of clean, modular code // Reusable helper functions // Static JSON arrays // Comprehensive error handling // Parameter validation } ``` -------------------------------- ### Configure PVA Plugin Source: https://github.com/areadetector/adtimepix3/blob/master/documentation/PVA_FLICKERING_DIAGNOSIS.md Initializes the PVA plugin to listen to a specific NDArray address. ```text NDPvaConfigure("PVA1", $(QSIZE), 0, "$(PORT)", 0, $(PREFIX)Pva1:Image, 0, 0, 0) ``` -------------------------------- ### Initialize ADDriver Source: https://github.com/areadetector/adtimepix3/blob/master/README.md Initialization of the ADDriver base class using the asyn multi-device mechanism. ```cpp ADDriver(portName, 4, NUM_TIMEPIX_PARAMS, maxBuffers, maxMemory, asynInt64Mask | asynEnumMask, asynInt64Mask | asynEnumMask, ASYN_MULTIDEVICE | ASYN_CANBLOCK, 1, priority, stackSize) ``` -------------------------------- ### Configure logrotate for log filtering Source: https://github.com/areadetector/adtimepix3/blob/master/README.md Automate log filtering during rotation by adding a postrotate script to logrotate configuration. ```bash /path/to/ioc.log { daily rotate 7 compress delaycompress missingok notifempty postrotate # Filter warnings after rotation (if log file exists) if [ -f /path/to/ioc.log.1 ]; then grep -vE "(parameter [0-9]+ in list 5|getParamStatus.*list 5|getParamAlarmStatus.*list 5|getParamAlarmSeverity.*list 5)" /path/to/ioc.log.1 > /path/to/ioc.log.1.filtered mv /path/to/ioc.log.1.filtered /path/to/ioc.log.1 fi endscript } ``` -------------------------------- ### Verify Coordinate Map with Python Source: https://github.com/areadetector/adtimepix3/blob/master/documentation/COORDINATE_MAP.md Execute the verification script to validate mapping rules against the reference JSON vectors. ```bash python3 test/verify_coordinate_map.py ``` -------------------------------- ### Define Plugin Settings Requirements Source: https://github.com/areadetector/adtimepix3/blob/master/README.md Specifies the autosave request files for the Magick and Pva plugins. ```text file "NDFileMagick_settings.req", P=$(P), R=Magick1: file "NDPva_settings.req", P=$(P), R=Pva1: ``` -------------------------------- ### Rebuild ADCore after applying patches Source: https://github.com/areadetector/adtimepix3/blob/master/documentation/SIGSEGV_ON_EXIT.md Commands to clean and rebuild the ADCore library after applying the necessary destructor fixes. ```bash cd /path/to/areaDetector/ADCore make clean make ``` -------------------------------- ### Rebuild ADTimePix3 application Source: https://github.com/areadetector/adtimepix3/blob/master/documentation/SIGSEGV_ON_EXIT.md Commands to clean and rebuild the ADTimePix3 application to ensure it links against the patched ADCore. ```bash cd /path/to/ADTimePix3 make clean make ``` -------------------------------- ### Parameter Handling Helper Functions Source: https://github.com/areadetector/adtimepix3/blob/master/documentation/OPTIMIZATION_SUMMARY.md Provides overloaded methods for safely retrieving parameters of different types. ```cpp asynStatus getParameterSafely(int param, int& value); asynStatus getParameterSafely(int param, std::string& value); asynStatus getParameterSafely(int param, double& value); ``` -------------------------------- ### bpc2ImgIndex Source: https://github.com/areadetector/adtimepix3/blob/master/documentation/COORDINATE_MAP.md Maps a BPC byte index to a linear image index. ```APIDOC ## bpc2ImgIndex ### Description Converts a BPC byte index to a linear image index. Returns -1 on error. ### Signature int bpc2ImgIndex(int bpcIndexIn, int chipPelWidthIn); ``` -------------------------------- ### Configure Magick File Saving Plugin Source: https://github.com/areadetector/adtimepix3/blob/master/README.md Registers the NDFileMagick plugin for file saving operations. ```bash NDFileMagickConfigure("FileMagick1", $(QSIZE), 0, "$(PORT)", 0) dbLoadRecords("NDFileMagick.template","P=$(PREFIX),R=Magick1:,PORT=FileMagick1,ADDR=0,TIMEOUT=1,NDARRAY_PORT=$(PORT)") ``` -------------------------------- ### Configure Histogram Channel for ToF Source: https://github.com/areadetector/adtimepix3/blob/master/documentation/TCP_PERFORMANCE_LIMITS.md Sets the histogram channel parameters to enable efficient binary data transfer for Time-of-Flight applications. ```bash # Set histogram channel for ToF caput TPX3-TEST:cam1:PrvHstFilePath "tcp://listen@localhost:8451" caput TPX3-TEST:cam1:PrvHstFileFmt 4 # jsonhisto format caput TPX3-TEST:cam1:PrvHstNumBins 16000 caput TPX3-TEST:cam1:PrvHstBinWidth 0.000001 # 1 us bins caput TPX3-TEST:cam1:WritePrvHst 1 ``` -------------------------------- ### Configure Makefile for Embedded Libraries Source: https://github.com/areadetector/adtimepix3/blob/master/documentation/PR3_SUMMARY.md Updates the Makefile to include source directories, headers, and system dependencies for the embedded libraries. ```makefile # JSON library integration SRC_DIRS += ../json INC += json.hpp INC += json_fwd.hpp # CPR library integration SRC_DIRS += ../cpr LIBRARY_IOC = cpr # Header includes (45 cpr headers) INC += cpr/accept_encoding.h INC += cpr/api.h # ... (43 more headers) # Source compilation (22 cpr sources) LIB_SRCS += accept_encoding.cpp LIB_SRCS += async.cpp # ... (20 more sources) # External system dependencies LIB_SYS_LIBS += curl z ``` -------------------------------- ### Monitor Histogram Accumulation Status Source: https://github.com/areadetector/adtimepix3/blob/master/documentation/PVA_FLICKERING_DIAGNOSIS.md Use camonitor to track the state of the histogram accumulation enable PV. ```bash camonitor TPX3-TEST:cam1:PrvHstAccumulationEnable ``` -------------------------------- ### Calculate Time Width from TDC Ticks Source: https://github.com/areadetector/adtimepix3/blob/master/documentation/HISTOGRAM_PERFORMANCE_ANALYSIS.md Formulas to convert bin width parameters into actual time units. ```text Time Width (seconds) = binWidth * TPX3_TDC_CLOCK_PERIOD_SEC Time Width (nanoseconds) = binWidth * 0.26041666666666667 ``` -------------------------------- ### Filter logs with journalctl Source: https://github.com/areadetector/adtimepix3/blob/master/README.md Filter systemd journal logs in real-time. ```bash # View logs without these warnings journalctl -u ioc-service | grep -vE "(parameter [0-9]+ in list 5|getParamStatus.*list 5|getParamAlarmStatus.*list 5|getParamAlarmSeverity.*list 5)" ``` -------------------------------- ### Validation Helper Functions Source: https://github.com/areadetector/adtimepix3/blob/master/documentation/OPTIMIZATION_SUMMARY.md Utility functions for verifying integration sizes and array indices. ```cpp bool validateIntegrationSize(int size); bool validateArrayIndex(int index, int maxSize); ``` -------------------------------- ### Set NumImages to zero Source: https://github.com/areadetector/adtimepix3/blob/master/README.md Manually set the NumImages PV to 0 to resolve INVALID status issues. ```bash caput TPX3-TEST:cam1:NumImages 0 ```