-
Notifications
You must be signed in to change notification settings - Fork 7
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Unify Volumetric/MultiPlane Imaging API #245
Comments
@CodyCBakerPhD @h-mayorquin @weiglszonja @alessandratrapani Please let me know what you all think! |
@pauladkisson Thanks for writing this all up, I'll look deeper and leave more comments over next couple days
Strongly against having it in the So totally on board with that solution
Yes and no - their code will have to be changed, but it was also code that was never tested or used perhaps outside of the
👍
Yeah, been talking with @h-mayorquin about this lately. It's purposely ambiguous to also allow any other type of future formatting distinction we might need to add while remainig universal across the API It's also flatter and simpler, though what it really does is shift the complexity of structure to the string itself, but as long as we have a convenient fetcher Multiple optic channels found? It shows up as a series of structured strings. Multiple planes found? They show up as another part of the string structure. Want to initialize an extractor? Just specify a single string that matches one of the selections.
Strongly against the ID/index route. Neo supports both at the same time and the ID is the annoying one, the bane of many a stream index issue. Strongly recommend using a human-readable identifier. Less strongly against splitting |
I agree with @pauladkisson that we should break streams. As a note, Streams are not about different types of preprocessing. It is basically stuff that can be processed together in the context of spikeitnerface and raw.io in neo (same sampling_rate, start and duration). The concept is not documented but you can find some details here. How to break depth, channel and whatever else might come?
As for this:
This is not the original intention: I agree that we are conflating a tool to concatenate data extractors in time with some internal machinery to assemble extractors from channels, planes or sub-extractors in time. We came to need the latter because some formats provide multiple files and we judged (corrrectly?) that composing in this way is easier than ad-hoc parsing. I think it makes sense separting assembling in time, channels and depth. The analgous in spikeinterface are concatenation and channel agregation.
Can you point out to where does this show up and also add other wonky stuff / difficulties? I feel this point should be more descriptive of the existing problems. I will add something about the third point later. |
This is from the roiextractors/src/roiextractors/extractors/tiffimagingextractors/brukertiffimagingextractor.py Lines 218 to 219 in 31bb80a
|
Thanks for the pointer @weiglszonja. I still would like to see more confusions that arise from this use. This is the only case that we have for Paul's second point. |
Notes from Barcelona 2023:
|
Current Behavior
Right now, the only imaging extractor that supports 3D imaging is BrukerTiff. It does so by taking a list of
SinglePlaneImagingExtractors
and combines them a laMultiImagingExtractor
. Note that eachSinglePlaneImagingExtractor
is itself aMultiImagingExtractor
that combines multiple 'chunked' files corresponding to a single depth plane. EachSinglePlaneImagingExtractor
instance only supports 1 channel and 1 plane, which are passed viastream_name
during the__init__
. EachMultiPlaneImagingExtractor
instance supports 1 channel (but all planes) which is passed viastream_name
during the__init__
.Issues
MultiPlaneImagingExtractor
(which only needs to specify the channel) and theSinglePlaneImagingExtractor
(which needs to specify some formatted combination of channel and plane).SinglePlaneImagingExtractors
withMultiImagingExtractor
is a bit hacky and confusing.MultiImagingExtractor
was designed to concatenateImagingExtractors
along theframes
axis, but here we want to combine multipleIEs
along a separate depth axis.MultiImagingExtractor
for this purpose leads to wonky stuff likestart_frames = [0, 0, ..., 0]
.__init__
but all other IE's specify channel during the call toget_video
.Proposed Solutions
MultiPlaneImagingExtractor
base class to handle the combination of IE's along the depth axis. Could come with extra metadata properties likeget_plane_depth
.__init__
time so that SinglePlaneImagingExtractors can be appropriately combined into MultiPlaneImagingExtractors. So, to keep it consistent we should specify channel also at__init__
time. This will require refactoring of all the existing IE's but I think it is the most convenient implementation agnostic to file structure. It also simplifiesget_video
to only takestart_frame
andend_frame
, which I think is a good thing.Do you have any interest in helping implement the feature?
Yes.
Code of Conduct
The text was updated successfully, but these errors were encountered: