@@ -46,6 +46,7 @@ const AnalysisDialog = ({
46
46
genes : "Choose feature/gene file" ,
47
47
annotations : "Choose barcode/annotation file" ,
48
48
file : "Choose file..." ,
49
+ rds : "Choose file..."
49
50
} ) ;
50
51
51
52
let [ stmpInputFiles , ssetTmpInputFiles ] = useState ( {
@@ -218,9 +219,19 @@ const AnalysisDialog = ({
218
219
) {
219
220
all_valid = false ;
220
221
}
222
+
223
+ if (
224
+ x ?. rds && ! (
225
+ inputText [ ix ] ?. rds . toLowerCase ( ) . endsWith ( "rds" )
226
+ )
227
+ ) {
228
+ all_valid = false ;
229
+ }
221
230
222
231
if ( x . format === "MatrixMarket" ) {
223
232
if ( ! x . mtx ) all_valid = false ;
233
+ } else if ( x . format === "SummarizedExperiment" ) {
234
+ if ( ! x . rds ) all_valid = false ;
224
235
} else {
225
236
if ( ! x . h5 ) all_valid = false ;
226
237
}
@@ -323,11 +334,20 @@ const AnalysisDialog = ({
323
334
}
324
335
325
336
if ( ! x . h5 && ( sinputText ?. file !== "Choose file..." ) ) all_valid = false ;
337
+ } else if (
338
+ x . format === "SummarizedExperiment" ) {
339
+ if ( x ?. rds && ! (
340
+ sinputText ?. rds . toLowerCase ( ) . endsWith ( "rds" )
341
+ )
342
+ ) {
343
+ all_valid = false ;
344
+ }
345
+
346
+ if ( ! x . rds && ( sinputText ?. file !== "Choose file..." ) ) all_valid = false ;
326
347
}
327
348
328
349
// setTmpInputValid(all_valid);
329
350
ssetTmpInputValid ( all_valid ) ;
330
-
331
351
}
332
352
}
333
353
} , [ stmpInputFiles ] ) ;
@@ -1103,7 +1123,7 @@ const AnalysisDialog = ({
1103
1123
} }
1104
1124
defaultSelectedTabId = { newImportFormat }
1105
1125
>
1106
- < Tab id = "MatrixMarket" title = "Matrix Market file " panel = {
1126
+ < Tab id = "MatrixMarket" title = "Matrix Market" panel = {
1107
1127
< div className = "row"
1108
1128
>
1109
1129
< Label className = "row-input" >
@@ -1132,7 +1152,7 @@ const AnalysisDialog = ({
1132
1152
</ Label >
1133
1153
</ div >
1134
1154
} />
1135
- < Tab id = "10X" title = "10x HDF5 matrix " panel = {
1155
+ < Tab id = "10X" title = "10X HDF5 Matrix " panel = {
1136
1156
< div className = "row"
1137
1157
>
1138
1158
< Label className = "row-input" >
@@ -1166,6 +1186,23 @@ const AnalysisDialog = ({
1166
1186
</ Label >
1167
1187
</ div >
1168
1188
} />
1189
+ < Tab id = "SummarizedExperiment" title = "SummarizedExperiment (RDS)" panel = {
1190
+ < div className = "row"
1191
+ >
1192
+ < Label className = "row-input" >
1193
+ < FileInput style = { {
1194
+ marginTop : '5px'
1195
+ } }
1196
+ text = { sinputText . rds }
1197
+ onInputChange = { ( msg ) => {
1198
+ if ( msg . target . files ) {
1199
+ ssetInputText ( { ...sinputText , "rds" : msg . target . files [ 0 ] . name } ) ;
1200
+ ssetTmpInputFiles ( { ...stmpInputFiles , "rds" : msg . target . files [ 0 ] } )
1201
+ }
1202
+ } } />
1203
+ </ Label >
1204
+ </ div >
1205
+ } />
1169
1206
</ Tabs >
1170
1207
</ div >
1171
1208
</ div >
@@ -1490,6 +1527,8 @@ const AnalysisDialog = ({
1490
1527
if ( row . annotations ) {
1491
1528
tname += ` annotations: ${ row . annotations . name } ` ;
1492
1529
}
1530
+ } else if ( row [ "format" ] === "SummarizedExperiment" ) {
1531
+ tname += ` file: ${ row . rds . name } ` ;
1493
1532
} else {
1494
1533
tname += ` file: ${ row . h5 . name } ` ;
1495
1534
}
@@ -1948,7 +1987,8 @@ const AnalysisDialog = ({
1948
1987
< ul >
1949
1988
< li > Matrix Market - < code > *.mtx</ code > or < code > *.mtx.gz</ code > </ li >
1950
1989
< li > features or genes, < code > *.tsv</ code > or < code > *.tsv.gz</ code > </ li >
1951
- < li > HDF5 (10x or h5ad) - < code > *.h5</ code > or < code > *.hdf5</ code > or < code > *.h5ad</ code > </ li >
1990
+ < li > HDF5 (10X or H5AD) - < code > *.h5</ code > or < code > *.hdf5</ code > or < code > *.h5ad</ code > </ li >
1991
+ < li > RDS - < code > *.rds</ code > </ li >
1952
1992
</ ul >
1953
1993
1954
1994
Note: Names of dataset must be unique!
@@ -1977,6 +2017,13 @@ const AnalysisDialog = ({
1977
2017
We will also try to guess which field in the < code > obs</ code > annotation contains gene symbols.
1978
2018
</ p >
1979
2019
2020
+ < p >
2021
+ < strong > A SummarizedExperiment object saved in the RDS (< code > *.rds</ code > ) format. </ strong >
2022
+ We support any SummarizedExperiment subclass containing a dense or sparse count matrix
2023
+ (identified as any assay with name starting with "counts", or if none exist, just the first assay).
2024
+ For a SingleCellExperiment, any alternative experiment with name starting with "hto", "adt" or "antibody" is assumed to represent CITE-seq data.
2025
+ </ p >
2026
+
1980
2027
< p > < strong > Batch correction:</ strong > you can now import more than one file to integrate and analyze datasets.
1981
2028
If you only import a single dataset, specify the annotation column that contains the batch information.</ p >
1982
2029
</ Callout >
0 commit comments