-
Notifications
You must be signed in to change notification settings - Fork 36
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
base: master
Are you sure you want to change the base?
Allow BioTek plates to be split across multiple subdirectories #223
Conversation
if (matchingROI < 0 && absolutePath.equals(matchingPath)) { | ||
matchingROI = roiIndex; | ||
LOGGER.trace("matchingROI = {}, absolutePath = {}", | ||
matchingROI, absolutePath); |
There was a problem hiding this comment.
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
if (matchingROI < 0 && absolutePath.equals(matchingPath)) { | |
matchingROI = roiIndex; | |
LOGGER.trace("matchingROI = {}, absolutePath = {}", | |
matchingROI, absolutePath); | |
fieldIndex = roiIndex; |
and removing the condition check && matchingROI == roiIndex
There was a problem hiding this comment.
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?
There was a problem hiding this comment.
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
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Multiple ROIs combined with multiple fields are supported, as indicated in the test.
Also fixes some handling of extra-sparse plates, and adds corresponding test.