def AI_filter_delay(device_name): """Determine the filter delay for dynamic signal acquistion devices. Returns the delay in clock cycles. Absolute delay will vary with sample rate. Args: device_name (str): NI-MAX device name Returns: int: Number of analog input delays ticks between task start and acquisition start. """ if 'PFI0' not in DAQmxGetDevTerminals(device_name): return None task = Task() clock_terminal = '/' + device_name + '/PFI0' rate = DAQmxGetDevAIMaxSingleChanRate(device_name) Vmin, Vmax = DAQmxGetDevAIVoltageRngs(device_name)[0:2] num_samples = 1000 chan = device_name + '/ai0' task.CreateAIVoltageChan( chan, "", c.DAQmx_Val_PseudoDiff, Vmin, Vmax, c.DAQmx_Val_Volts, None ) task.CfgSampClkTiming( "", rate, c.DAQmx_Val_Rising, c.DAQmx_Val_ContSamps, num_samples ) task.CfgDigEdgeStartTrig(clock_terminal, c.DAQmx_Val_Rising) start_filter_delay = float64() sample_timebase_rate = float64() # get delay in number of clock samples task.SetAIFilterDelayUnits("", c.DAQmx_Val_SampleClkPeriods) task.GetAIFilterDelay("", start_filter_delay) task.GetSampClkTimebaseRate(sample_timebase_rate) task.ClearTask() return int(start_filter_delay.value)