|
52 | 52 |
|
53 | 53 | unlimited(ds::MFDataset) = unique(reduce(vcat,unlimited.(ds.ds)))
|
54 | 54 |
|
55 |
| -groupnames(ds::MFDataset) = groupnames(ds.ds[1]) |
| 55 | +groupnames(ds::MFDataset) = unique(reduce(vcat,groupnames.(ds.ds))) |
56 | 56 |
|
57 | 57 | function group(mfds::MFDataset,name::SymbolOrString)
|
58 |
| - ds = group.(mfds.ds,name) |
| 58 | + ds_sel = filter(ds -> name in groupnames(ds),mfds.ds) |
| 59 | + |
| 60 | + ds = group.(ds_sel,name) |
59 | 61 | constvars = Symbol[]
|
60 | 62 | return MFDataset(ds,mfds.aggdim,mfds.isnewdim,constvars)
|
61 | 63 | end
|
@@ -84,7 +86,10 @@ function MFDataset(ds,aggdim,isnewdim,constvars)
|
84 | 86 | end
|
85 | 87 |
|
86 | 88 |
|
87 |
| -function MFDataset(TDS,fnames::AbstractArray{<:AbstractString,N},mode = "r"; aggdim = nothing, |
| 89 | +# when aggdim is "", the variables list of each file is |
| 90 | +# merged and no variable is concatanted |
| 91 | +function MFDataset(TDS,fnames::AbstractArray{<:AbstractString,N},mode = "r"; |
| 92 | + aggdim = nothing, |
88 | 93 | deferopen = true,
|
89 | 94 | _aggdimconstant = false,
|
90 | 95 | isnewdim = false,
|
@@ -125,6 +130,25 @@ function MFDataset(TDS,fnames::AbstractArray{<:AbstractString,N},mode = "r"; agg
|
125 | 130 | return mfds
|
126 | 131 | end
|
127 | 132 |
|
| 133 | +""" |
| 134 | + mfds = MFDataset(ds) |
| 135 | +
|
| 136 | +Virtually concatente a vector of AbstractDataset (`ds`) by merging the list |
| 137 | +of variables. Every variable which happend to be repeated in several datasets |
| 138 | +is assumed to be constant accorss all datasets. |
| 139 | +""" |
| 140 | +function MFDataset(ds::AbstractVector{<:AbstractDataset}; |
| 141 | + aggdim = nothing, |
| 142 | + deferopen = true, |
| 143 | + _aggdimconstant = false, |
| 144 | + isnewdim = false, |
| 145 | + constvars = Union{Symbol,String}[], |
| 146 | + ) |
| 147 | + |
| 148 | + MFDataset(ds,aggdim,isnewdim,Symbol.(constvars)) |
| 149 | +end |
| 150 | + |
| 151 | + |
128 | 152 |
|
129 | 153 | function close(mfds::MFDataset)
|
130 | 154 | close.(mfds.ds)
|
@@ -192,8 +216,9 @@ function variable(mfds::MFDataset,varname::SymbolOrString)
|
192 | 216 |
|
193 | 217 | if (dim != nothing)
|
194 | 218 | v = CatArrays.CatArray(dim,vars...)
|
| 219 | + # GRIBdatasets.dimnames can be a vector of String |
195 | 220 | return MFVariable(mfds,v,
|
196 |
| - dimnames(vars[1]),String(varname)) |
| 221 | + Tuple(dimnames(vars[1])),String(varname)) |
197 | 222 | else
|
198 | 223 | return vars[1]
|
199 | 224 | end
|
|
0 commit comments