44
55
66"""
7- struct MaskedGrid{G,M,I,T } <: SubGrid{T,1}
7+ struct MaskedGrid{T,GRID,MASK,I,D } <: SubGrid{T,1}
88
99A MaskedGrid is a subgrid of another grid that is defined by a mask.
1010The mask is true or false for each point in the supergrid. The set of points
1111for which it is true make up the MaskedGrid.
1212"""
13- struct MaskedGrid{G,M, I,D<: Domain ,T } <: SubGrid{T,1}
14- supergrid :: G
15- mask :: M
13+ struct MaskedGrid{T,GRID,MASK, I,D} <: SubGrid{T,1}
14+ supergrid :: GRID
15+ mask :: MASK
1616 indices :: Vector{I}
1717 M :: Int # Total number of points in the mask
1818 domain :: D
1919
20- MaskedGrid {G,M, I,D,T } (supergrid:: AbstractGrid {T} , mask, indices, domain) where {G,M, I,D,T } =
20+ MaskedGrid {T,GRID,MASK, I,D} (supergrid:: AbstractArray {T} , mask, indices, domain) where {T,GRID,MASK, I,D} =
2121 new (supergrid, mask, indices, sum (mask), domain)
2222end
2323# TODO : In MaskedGrid, perhaps we should not be storing pointers to the points of the underlying grid, but
2424# rather the points themselves. In that case we wouldn't need to specialize on the type of grid (parameter G can go).
2525
2626
27+ MaskedGrid (supergrid:: AbstractArray{T} , mask, indices, domain) where T =
28+ MaskedGrid {T} (supergrid, mask, indices, domain)
2729
28- function MaskedGrid (supergrid :: AbstractGrid {T} , mask, indices, domain) where {T}
30+ function MaskedGrid {T} (supergrid , mask, indices, domain) where T
2931 @assert size (supergrid) == size (mask)
30-
31- MaskedGrid {typeof(supergrid),typeof(mask),eltype(indices),typeof(domain),T} (supergrid, mask, indices, domain)
32+ MaskedGrid {T,typeof(supergrid),typeof(mask),eltype(indices),typeof(domain)} (supergrid, mask, indices, domain)
3233end
3334
3435# These are for the assignment to indices in the function below.
3536convert (:: Type{NTuple{N,Int}} ,i:: CartesianIndex{N} ) where {N} = ntuple (k-> i[k],N)
3637
37- MaskedGrid (supergrid:: AbstractGrid , domain:: Domain ) =
38+ MaskedGrid (supergrid:: AbstractArray , domain:: Domain ) =
3839 MaskedGrid (supergrid, in .(supergrid, Ref (domain)), domain)
3940
4041# MaskedGrid(maskedgrid::MaskedGrid, domain::Domain) =
4142# MaskedGrid(supergrid(maskedgrid), mask(maskedgrid) .& in.(supergrid(maskedgrid), domain))
4243
43- MaskedGrid (supergrid:: AbstractGrid , mask, domain) =
44+ MaskedGrid (supergrid:: AbstractArray , mask, domain) =
4445 MaskedGrid (supergrid, mask, subindices (supergrid, mask), domain)
4546
4647function subindices (supergrid, mask:: BitArray )
@@ -64,7 +65,7 @@ covering(g::MaskedGrid) = g.domain
6465
6566subindices (g:: MaskedGrid ) = g. indices
6667
67- similar_subgrid (g:: MaskedGrid , g2:: AbstractGrid ) = MaskedGrid (g2, g. mask, g. indices)
68+ similar_subgrid (g:: MaskedGrid , g2:: AbstractArray ) = MaskedGrid (g2, g. mask, g. indices)
6869
6970
7071# Check whether element grid[i] (of the underlying grid) is in the masked grid.
@@ -77,6 +78,4 @@ getindex(g::AbstractGrid, idx::BitArray) = MaskedGrid(g, idx, covering(g))
7778function subgrid (grid:: MaskedGrid , domain:: Domain )
7879 submask = in .(supergrid (grid), Ref (domain))
7980 MaskedGrid (supergrid (grid), submask .& mask (grid), domain)
80- # points = grid.points[mask]
81- # ScatteredGrid(points)
8281end
0 commit comments