pyABF icon indicating copy to clipboard operation
pyABF copied to clipboard

How to read the epoch that a user list is applied to?

Open cudmore opened this issue 1 year ago • 0 comments

Hi All (and Scott!)!

First off, thanks so much for developing pyabf, it is incredibly useful, well written, and well documented. It has become instrumental in the development of our SanPy software for whole-call current-clamp analysis...

Issue

I have a users abf file where they specify a userList to specify the delay to the onset of a digital pulse. I can find the pyabf userList easy enough, great!

What I can't find is the epoch to associate the user list with? Looking at screenshots of the pClamp configuration, it appears they have specified the user list as follows:

Parameter To Change: Epoch E Duration (ms) userList = [150.0, 300.0, 600.0, 1500.0, 3000.0, 6000.0, 150.0, 300.0, 600.0, 1500.0, 3000.0, 6000.0, 150.0, 300.0, 600.0, 1500.0, 3000.0, 6000.0]

Here is a print of the pyabf EpochTable from the file

                EPOCH         A         B         C         D         E         F
                 Type      Step      Step      Step      Step      Step      Step
          First Level      0.00    -10.00      0.00      0.00      0.00      0.00
          Delta Level      0.00      0.00      0.00      0.00      0.00      0.00
  First Duration (points)     10000      5000     20000         1       150        10
  Delta Duration (points)         0         0         0         0         0         0
 Digital Pattern #3-0      0000      0000      0000      0100      0000      0100
 Digital Pattern #7-4      0000      0000      0000      0000      0000      0000
Train Period (points)         0         0         0         0         0         0
 Pulse Width (points)         0         0         0         0         0         0

And here is some pyabf info I can pull out about the user list

userList: [150.0, 300.0, 600.0, 1500.0, 3000.0, 6000.0, 150.0, 300.0, 600.0, 1500.0, 3000.0, 6000.0, 150.0, 300.0, 600.0, 1500.0, 3000.0, 6000.0]
userListEnable: [1] 
userListParamToVary: [115] 
userListParamToVaryName: ['EPOCHTRAINPERIOD'] 
userListRepeat: [0]

Question 1

The abf.sweepD(digitalChannel) is not showing/reflecting the changes (from sweep to sweep) as expected. I would expect plotting sweepD(digitalChannel) would show the changes in the timing of the pulse that increases from sweep to sweep using the userList values but it does not.

Question 2

I have the userList and can hard code offsets from the time of epoch E. Is there a way I can read the epoch that is being modified by a userList?

Plots

  • Top: sweepD across all sweeps and all digital channel (0..7). This is where I expect to find the increasing delays following the userList, but do not :(

  • Middle: sweepC plot, none expected, good!

  • Bottom: Plot of recording with sweepY, you can see the extracellular stimulations that was actually delivered at different delays according to the userList. Yet, they are not reflected in sweepD (top plot).

image

System

  • macOS Ventura 13.3.1 (a)
  • Python: 3.11.5
  • pyabf: 2.3.8

Thanks again for pyAbf, I am a huge fan.

cudmore avatar Jan 23 '24 03:01 cudmore