Skip to content
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

Allow BioTek plates to be split across multiple subdirectories #223

Open
wants to merge 7 commits into
base: master
Choose a base branch
from

Conversation

melissalinkert
Copy link
Member

Also fixes some handling of extra-sparse plates, and adds corresponding test.

Comment on lines 321 to 324
if (matchingROI < 0 && absolutePath.equals(matchingPath)) {
matchingROI = roiIndex;
LOGGER.trace("matchingROI = {}, absolutePath = {}",
matchingROI, absolutePath);
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This part will just be true and match with the first ROI file, and the other ROI fields (Cytation beacons) won't match, even there are many ROIs field just the first one will appears on final file.
I could workaround this commenting this lines and assign fieldIndex as roiIndex

Suggested change
if (matchingROI < 0 && absolutePath.equals(matchingPath)) {
matchingROI = roiIndex;
LOGGER.trace("matchingROI = {}, absolutePath = {}",
matchingROI, absolutePath);
fieldIndex = roiIndex;

and removing the condition check && matchingROI == roiIndex

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Thanks for the comments, @wapablos. If you're testing with a particular BioTek dataset, would you be able to share just the file names so we can compare against our existing data?

Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I've test some file sets based on default Cytation output before the code change

(Good) Set 1 (Default filename - cytation montage export) - Detect all wells, channels and fields
A3_01_1_1_DAPI_001.tif
A3_01_1_2_DAPI_001.tif
A3_01_1_3_DAPI_001.tif
A3_01_1_4_DAPI_001.tif
A3_01_2_1_GFP_001.tif
A3_01_2_2_GFP_001.tif
A3_01_2_3_GFP_001.tif
A3_01_2_4_GFP_001.tif
A3_01_3_1_CY5_001.tif
A3_01_3_2_CY5_001.tif
A3_01_3_3_CY5_001.tif
A3_01_3_4_CY5_001.tif
A11_01_1_1_DAPI_001.tif
A11_01_1_2_DAPI_001.tif
A11_01_1_3_DAPI_001.tif
A11_01_1_4_DAPI_001.tif
A11_01_2_1_GFP_001.tif
A11_01_2_2_GFP_001.tif
A11_01_2_3_GFP_001.tif
A11_01_2_4_GFP_001.tif
A11_01_3_1_CY5_001.tif
A11_01_3_2_CY5_001.tif
A11_01_3_3_CY5_001.tif
A11_01_3_4_CY5_001.tif

(Good) Set 2 (Splitted folder Image Multimode (IMM)) - Detect all folders, wells, channels and fields
230920_155559_B1 10X PL FL/B1_-1_1_1_DAPI_001.tif
230920_155559_B2 10X PL FL/B2_-1_1_1_DAPI_001.tif
230920_155559_B2 10X PL FL/B2_-1_2_1_CY5_001.tif
230920_155559_D3 10X PL FL/D3_-1_1_1_DAPI_001.tif
230920_155559_D3 10X PL FL/D3_-1_1_2_DAPI_001.tif
230920_155559_D3 10X PL FL/D3_-1_1_3_DAPI_001.tif
230920_155559_D3 10X PL FL/D3_-1_2_1_GFP_001.tif
230920_155559_D3 10X PL FL/D3_-1_2_2_GFP_001.tif
230920_155559_D3 10X PL FL/D3_-1_2_3_GFP_001.tif
230920_155559_D3 10X PL FL/D3_-1_3_1_CY5_001.tif
230920_155559_D3 10X PL FL/D3_-1_3_2_CY5_001.tif
230920_155559_D3 10X PL FL/D3_-1_3_3_CY5_001.tif
230920_161057_I3 40X PL FL/I3_-1_1_1_DAPI_001.tif
230920_161057_I3 40X PL FL/I3_-1_2_1_GFP_001.tif
230920_161057_I3 40X PL FL/I3_-1_3_1_CY5_001.tif
230920_161057_J3 60X PL FL/J3_-1_1_1_DAPI_001.tif
230920_161057_J3 60X PL FL/J3_-1_2_1_GFP_001.tif
230920_161057_J3 60X PL FL/J3_-1_3_1_CY5_001.tif
230920_161628_F3 20X PL FL/F3_-1_1_1_DAPI_001.tif
230920_161628_F3 20X PL FL/F3_-1_2_1_GFP_001.tif
230920_161628_F3 20X PL FL/F3_-1_3_1_CY5_001.tif

(Not all good) Set 3 (Default filename - cytation ROI export) - Detect all wells, channels but not fields only ROI1
B23ROI5_01_2_1_Bright Field_001.tif
B23ROI5_01_1_1_DAPI_001.tif
B23ROI4_01_2_1_Bright Field_001.tif
B23ROI4_01_1_1_DAPI_001.tif
B23ROI3_01_2_1_Bright Field_001.tif
B23ROI3_01_1_1_DAPI_001.tif
B23ROI2_01_2_1_Bright Field_001.tif
B23ROI2_01_1_1_DAPI_001.tif
B23ROI1_01_2_1_Bright Field_001.tif
B23ROI1_01_1_1_DAPI_001.tif
B22ROI5_01_2_1_Bright Field_001.tif
B22ROI5_01_1_1_DAPI_001.tif
B22ROI4_01_2_1_Bright Field_001.tif
B22ROI4_01_1_1_DAPI_001.tif
B22ROI3_01_2_1_Bright Field_001.tif
B22ROI3_01_1_1_DAPI_001.tif
B22ROI2_01_2_1_Bright Field_001.tif
B22ROI2_01_1_1_DAPI_001.tif
B22ROI1_01_2_1_Bright Field_001.tif
B22ROI1_01_1_1_DAPI_001.tif

(Bad) Set 4 (Default filename for slides) - Cannot read image files
Exception in thread "main" picocli.CommandLine$ExecutionException: Error while calling command (com.glencoesoftware bioformats2raw.Converter@2d2ffcb7): java.lang.NullPointerException
Caused by: java.lang.NullPointerException
at com.glencoesoftware.bioformats2raw.BioTekReader$BioTekWell.getFile(BioTekReader.java:902)
at com.glencoesoftware.bioformats2raw.BioTekReader.initFile(BioTekReader.java:371)
A1_01_3_6_Blue_001.tif
A1_01_3_5_Blue_001.tif
A1_01_3_4_Blue_001.tif
A1_01_3_3_Blue_001.tif
A1_01_3_2_Blue_001.tif
A1_01_3_1_Blue_001.tif
A1_01_2_6_Green_001.tif
A1_01_2_5_Green_001.tif
A1_01_2_4_Green_001.tif
A1_01_2_3_Green_001.tif
A1_01_2_2_Green_001.tif
A1_01_2_1_Green_001.tif
A1_01_1_6_Red_001.tif
A1_01_1_5_Red_001.tif
A1_01_1_4_Red_001.tif
A1_01_1_3_Red_001.tif
A1_01_1_2_Red_001.tif
A1_01_1_1_Red_001.tif

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I believe the last 4 commits (b7d3286 through 7650721) now address all of these cases.

@melissalinkert melissalinkert added this to the 0.10.0 milestone Jul 15, 2024
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
Status: Inbox
Development

Successfully merging this pull request may close these issues.

2 participants