-
Notifications
You must be signed in to change notification settings - Fork 95
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
Slow down development and revisit package structure #131
Comments
I think that a lot of the proposed changes move Some other random thoughts:
|
I'm not sure how many Ignoring that for the moment, I'm not sure I agree with separating e.g., I agree that editing workflows and parsers in the same file is convenient, so I'm alright with that. One thing I do think it might be nice to work out is how to make the workflows a bit more modular—as it stands, if I do want to substitute out a new decomposition technique there's no easy way to do that without copying the workflow code and changing that single line. It's obviously not nearly as monolithic as it used to be, but it's still quite a bit. I don't have an easy solution for this, but I think it's something to think about as we consider these changes.
|
Heya - just a little note from me to say that I think the modularity is a really key feature for If I can help with drawing out some additional documentation, some diagrams to show how someone would be able to slot various parts of tedana into their analysis pipelines I'm very happy to do what I can (I'd need a buddy but I can at least provide an outsider's view on the descriptions). I also think those diagrams could show people how they can insert additional selection methods. The core developers don't have to write all the modules - you can welcome external collaborators to extend the package once the documentation and layout is set up to be really easy to extend. In general I really like the idea of consolidating the updates to the packages and getting them super solid. I think this is one of those "feels like slowing down but is actually faster in the long run" development moments 😸 |
I definitely agree that the modularity of I absolutely think that the end goal should be to allow extension and growth, so it's important to find the right balance between building a solid, understandable core and ensuring extensibility. @KirstieJane, I think having some sort of (pictorial) documentation about how the project is laid out, rather than hoping that it speaks for itself, would be really beneficial! I'm not totally sure what it would look like but would be happy to discuss it further. @tsalo, do you have thoughts on the most recent proposal? Are you pretty set on retaining separate modules for I'm also going to explicitly ping @emdupre and @handwerkerd because I think it'd be good to have as many people chime in on this as possible! |
I think merging Maybe it would make more sense to move |
Hi everyone, Sorry for my own radio silence here ! Thanks so much for bring up this point @rmarkello and for kickstarting what is an admittedly overdue discussion. I have a few small points I'd like to quickly make, but I think the much bigger point here is that we need to re-focus our roadmap. Re @KirstieJane's suggestion of a diagram: I think this would be phenomenally useful, and something @tsalo actually started on -- you can see his draft here. I know that he was looking to add this into our RTD site in #133, but it'd be great to think about how we can distribute this in a way where it's as easy as possible to edit and extend ! Re organizing of modules: it sounds like there's at least consensus on Ok, on to the broader point. Re-focusing our roadmapIn laying out a roadmap for Project VisionME-EPI is not well integrated into major preprocessing packages, yielding duplicated and unmaintained code. Metric of SuccessWe will know that we have been successful in creating
Overall, then, I see that the majority of work on the project should go towards making it stable and well-documented, with enough modularity to integrate improvements (plus one improvement, as a proof of concept). My dream would be that we would have a fifth metric of success:
In thinking through these ideas, I've gone ahead in our 0.1 release project and re-organized the issues to roughly match the suggestions listed above, but I'm very anxious to hear what you all think. I'm also happy to schedule a call where we can discuss this, but I thought it'd be nice to start with my own thoughts, here. Thanks so much to everyone for all of your time and energy in thinking through this— I'm really excited about our next steps. |
I love this road map. It makes total sense to me. Are you planning to raise an issue specifically for it or add it to the RTD site? I think it could be helpful to have in the contributing guidelines. Regarding the Project Vision, it seems like we need to better balance the need for a validated workflow to be called within other packages and the desire for
Regarding validation of the methods in the testing ground, that is something we are/will be working on in tedana-comparison. I don't really know if it's feasible to include validation of the methods in |
Thanks so much for your feedback, @tsalo ! I think once we're ok with the Project vision and Metrics of success, I'll add them to our 0.1 release project. We'll need to think about a timeline, next ! To address each of your points in turn:
Overall, then, it seems like you're ok with the suggested Metrics of Success, but we should continue to discuss point 1 (hopefully hearing a few other perspectives !) before moving forward with the Project Vision. Does that match your understanding ? Thanks again for sharing your thoughts ✨ |
Thank you everyone for a really great call on Monday 29 Oct! @emdupre is going to summarise some of our points and add a roadmap file to the read the docs file as a release candidate for community discussion. Stay tuned, but we're very close to closing this issue and moving forwards ✨ 🙀 🙌 👾 |
Hi all! Sorry I've been a bit radio silent, but I have been watching the development of
tedana
over the past few months and it's been great! There's a whole bunch of new features and stuff that look really cool and I'm excited to try them out. I'm wondering, though, if we might slow down new development a bit and focus some on refactoring the package?That is, coming back to
tedana
after some time away, it took me a not-insignificant amount of time to remember what functions were where and how they all interconnected. It's still sprawling, and I think that, given the trajectory of the package (i.e., it's not going to be anything near the size of e.g.,nilearn
ornistats
), it might be good to consolidate things a bit.To that end, would something like the following be more parsimonious / understandable to new contributors, without sacrificing modularity?
tedana/ ├── __init__.py ├── combine.py (formerly model/combine.py) ├── decay.py (formerly model/monoexponential.py) ├── decompositions/ │ ├── __init__.py │ ├── utils.py │ └── eigendecomp.py ├── fit.py (formerly model/fit.py) ├── io.py (formerly utils/io.py) ├── selcomps.py (formerly selection/*) ├── utils.py (formerly utils/utils.py) ├── cli/ (formerly workflows/) ├── __init__.py ├── t2smap.py └── tedana.py └── tests/
In my mind, these would have the following:
combine.py
Functions for creating the optimal combination time series.
Ideally the functions here would also accept file inputs, in addition to concatenated data inputs. Pre-generation of a T2* map (via
decay.py
functionality) would be optional, so that users interested in the optimal combination could call this function providing only their echo files and echo times and get back an in-memory niimg-like object of the optimal combination time series.decay.py
Functions for modeling signal decay and generating T2* maps.
This is more-or-less a carbon copy of the existing
model/monoexponential.py
right now, but renamed. New functions for modeling signal decay (i.e., voxel-wise fits) could be added here.decompositions/
Functions for decomposing time series.
Given that this is the primary module that might be expanded to accommodate other decomposition techniques, I would be comfortable keeping this as-is.
fit.py
Functions for fitting R2* and S0 models.
Copy of
model/fit.py
, but in the general package namespace.io.py
Functions for handling reading and writing data, including consolidating components into relevant time series.
This is currently a bit of a mess right now. The I/O files for
tedana
are scattered throughout the module, so it would be good to consolidate and clean them up.selcomps.py
The almost 900-line function we all know and love (🙄), plus corresponding utilities.
I know there's a significant amount of work going in to making this more modular and broken up, so I think that will help a lot with its interpretation. I'm not sure I see the utility, though, in it being within a module (i.e.,
tedana.selection
, as it is now).utils.py
Miscellaneous utility functions supporting the general package (e.g.,
new_nii_like()
,filewrite()
,'load_data()
).cli/
Command line interfaces for
tedana
.It might be good to pare these down a bit so that they're really only handling the CLI logic (e.g., parsing, etc.), and not the entire workflow as they currently are. The workflows could potentially go in a separate file (
workflows.py
), but I think that's a point for further discussion.Sorry for the incredibly long issue, and for just jumping in with pretty major suggestions. Let me know your thoughts.
The text was updated successfully, but these errors were encountered: