So I am making some changes to NeuralynxRawIO to handle older and different style ncs files. (Despite having the same block structure, the headers and timing conventions can be different for different versions of the software creating these .ncs files.)
Some of the older systems had multiple ADCs cards which could be started and stopped at different times during one experiment. Sometimes this would simply be due to the time it takes to execute the startup code and quite a small difference. Other times it might be due to a particular card's driver failing and create a larger difference. Myriad reasons can cause the set of .ncs files for a single experiment to start and stop at slightly different times.
The question is how best to map this onto the Neo core object model?
Alternative 1. Since it is a single experiment, this should be one block. One could define separate segments for each set of slightly different timebases arising for different groups of channels. This seems a little odd as segments normally refer to discontiguous periods of time, not overlapping periods.
Alternative 2. Again a single experiment in a single block. One could define a single timebase for all the channels which is the minimal common set of time periods. This would then exclude some samples from cards which started earlier and those which started later, but provides a single fairly intuitive view of the experiment. The cost is losing some of the samples at the start and end for some channels. It also creates the question of how much data loss to tolerate to construct this type of model. Sometimes 3 of 4 cards might continue running after one fails. It seems a pity to lose a large time segment of samples for 3/4 of the data in such a case.
Alternative 3. Map each group of channels with a common timebase to a separate block.
How has this been dealt with generally within Neo, perhaps for other IO types?
I suppose one could provide an option when constructing the IO, or alternately just be sure to provide directory version with alternative 2 and also a single file construction of the IO for users that care about the missing data.