Skip to content

Commit 9fc5fc1

Browse files
Merge pull request #84 from ayushpatnaikgit/fixes
Fixes based on breaking changes in Rasters.jl
2 parents 059896b + ffa97a2 commit 9fc5fc1

25 files changed

+64
-1809
lines changed

Manifest.toml

Lines changed: 0 additions & 1714 deletions
This file was deleted.

Project.toml

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ authors = ["Ayush Patnaik", "Ajay Shah", "Anshul Tayal", "Susan Thomas"]
44
version = "0.6.0"
55

66
[deps]
7+
ArchGDAL = "c9ce4bd3-c3d5-55b8-8973-c0e20141b8c3"
78
CSV = "336ed68f-0bac-5ca0-87d4-7b16caf5d00b"
89
CubicSplines = "9c784101-8907-5a6d-9be6-98f00873c89b"
910
DataFrames = "a93c6f00-e57d-5684-b7b6-d8193f3e46c0"
@@ -13,6 +14,7 @@ Distributions = "31c24e10-a181-5473-b8eb-7969acd0382f"
1314
GLM = "38e38edf-8417-5370-95a0-9cbb8c7f171a"
1415
HypothesisTests = "09f84164-cd44-5f33-b23f-e6b0d136a0d5"
1516
Images = "916415d5-f1e6-5110-898d-aaa5f9f070e0"
17+
NCDatasets = "85f8d34a-cbdd-5861-8df4-14fed0d494ab"
1618
Plots = "91a5bcdd-55d7-5caf-9e0b-520d859cae80"
1719
Rasters = "a3a2b9e3-a471-40c9-b274-f788e487c689"
1820
Shapefile = "8e980c4a-a4fe-5da2-b3a7-4b4b0353a2f4"
@@ -32,8 +34,8 @@ GLM = "1.7.0"
3234
HypothesisTests = "0.10.9"
3335
Images = "0.25.2"
3436
Plots = "1"
35-
Shapefile = "0.7.4, 0.8, 0.10"
3637
Rasters = "0.4, 0.8"
38+
Shapefile = "0.7.4, 0.8, 0.10"
3739
SmoothingSplines = "0.3.1"
3840
Statistics = "1.7.0"
3941
StatsBase = "0.33.16, 0.34"
-1.21 MB
Binary file not shown.
-1.85 MB
Binary file not shown.
-4.81 MB
Binary file not shown.
-3.69 MB
Binary file not shown.

src/NighttimeLights.jl

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
module NighttimeLights
22

3-
using Rasters, DataFrames, Shapefile, StatsBase, SmoothingSplines, GLM, Distributions, HypothesisTests, Plots, Dates, DimensionalData, CubicSplines, SparseArrays
3+
using Rasters, DataFrames, Shapefile, StatsBase, SmoothingSplines, GLM, Distributions, HypothesisTests, Plots, Dates, DimensionalData, CubicSplines, SparseArrays, NCDatasets, ArchGDAL
44

55
## Utilities
66
export Raster, load_example, radiance_datacube, clouds_datacube, long_apply, apply_mask, mumbai_map, add_dim, annular_ring, centre_of_mass
@@ -20,7 +20,6 @@ include("data_cleaning/na_recode.jl")
2020
include("data_cleaning/full_procedures.jl")
2121
include("data_cleaning/replace_negative.jl")
2222
include("example.jl")
23-
include("other/date_to_int.jl")
2423
include("other/add_dim.jl")
2524
include("other/rings.jl")
2625
include("other/com.jl")

src/data_cleaning/bgnoise.jl

Lines changed: 4 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -12,18 +12,14 @@ bgnoise_PSTT2021(radiance_datacube, clouds_datacube)
1212
```
1313
"""
1414
function bgnoise_PSTT2021(radiance_datacube, clouds_datacube, th = 0.4)
15-
# This function may be obsolete because Payne Institute is providing annual images for each year.
16-
r_dc = convert(Array{Union{Missing, Float16}}, view(radiance_datacube, Band(1)))
17-
cf_dc = convert(Array{UInt8, 3}, view(clouds_datacube, Band(1)))
18-
last_year_rad = r_dc[:, :, (size(r_dc)[3]-11):size(r_dc)[3]]
19-
20-
last_year_cloud = cf_dc[:, :, (size(r_dc)[3]-11):size(r_dc)[3]]
21-
average_lastyear = copy(r_dc[:, :, 1])
15+
last_year_rad = radiance_datacube[:, :, (size(radiance_datacube)[3]-11):size(radiance_datacube)[3]]
16+
last_year_cloud = clouds_datacube[:, :, (size(clouds_datacube)[3]-11):size(clouds_datacube)[3]]
17+
average_lastyear = copy(radiance_datacube[:, :, 1])
2218
for i in 1:size(last_year_rad)[1]
2319
for j in 1:size(last_year_rad)[2]
2420
average_lastyear[i,j] = weighted_mean(last_year_rad[i, j, :], last_year_cloud[i, j, :])
2521
end
2622
end
2723
mask = noise_threshold.(average_lastyear, th)
28-
return Raster(mask, dims(radiance_datacube)[1:2])
24+
return Raster(Array(mask), dims(radiance_datacube)[1:2])
2925
end

src/data_cleaning/bias_correction.jl

Lines changed: 9 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -34,30 +34,26 @@ bias_PSTT2021(radiance, clouds)
3434
```
3535
"""
3636
function bias_PSTT2021(radiance_datacube, clouds_datacube, mask=ones(Int8, (size(radiance_datacube)[1],size(radiance_datacube)[2])))
37-
rad_corrected_datacube = convert(Array{Union{Missing, Float16}}, view(radiance_datacube, Band(1)))
38-
cf_dc = convert(Array{UInt8, 3}, view(clouds_datacube, Band(1)))
39-
for i in 1:size(rad_corrected_datacube)[1]
40-
for j in 1:size(rad_corrected_datacube)[2]
41-
if count(i->(ismissing(i)),rad_corrected_datacube[i, j, :])/length(rad_corrected_datacube[i, j, :]) > 0.50
37+
for i in 1:size(radiance_datacube)[1]
38+
for j in 1:size(radiance_datacube)[2]
39+
if count(i->(ismissing(i)),radiance_datacube[i, j, :])/length(radiance_datacube[i, j, :]) > 0.50
4240
continue
4341
end
4442
if ismissing(mask[i, j])
4543
continue
4644
end
47-
missings = findall(ismissing, rad_corrected_datacube[i, j, :])
48-
radiance_arr = filter!(!ismissing, copy(Array(rad_corrected_datacube[i, j, :])) )
49-
clouds_arr = copy(Array(cf_dc[i , j, :]))
45+
missings = findall(ismissing, radiance_datacube[i, j, :])
46+
radiance_arr = filter!(!ismissing, copy(Array(radiance_datacube[i, j, :])) )
47+
clouds_arr = copy(Array(clouds_datacube[i , j, :]))
5048
clouds_arr = Array{Union{Missing, Int}}(clouds_arr)
5149
clouds_arr[missings] .= missing
5250
clouds_arr = filter!(!ismissing, clouds_arr)
5351
if rank_correlation_test(radiance_arr, clouds_arr) <0.05
54-
rad_corrected_datacube[i, j, :]= bias_PSTT2021_pixel(copy(rad_corrected_datacube[i, j, :]), copy(cf_dc[i , j, :]))
52+
radiance_datacube[i, j, :]= bias_PSTT2021_pixel(copy(radiance_datacube[i, j, :]), copy(clouds_datacube[i , j, :]))
5553
else
56-
rad_corrected_datacube[i, j, :]= rad_corrected_datacube[i, j, :]
54+
radiance_datacube[i, j, :]= radiance_datacube[i, j, :]
5755
end
5856
end
5957
end
60-
cf_dc = 0
61-
GC.gc()
62-
return Raster(add_dim(rad_corrected_datacube), dims(radiance_datacube))
58+
return radiance_datacube
6359
end

src/data_cleaning/na_recode.jl

Lines changed: 10 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ function na_recode_img(radiance, clouds; replacement = missing)
1010
for i in 1:size(clouds)[1]
1111
for j in 1:size(clouds)[2]
1212
if clouds[i,j] == 0
13-
radiance[i,j]= replacement
13+
radiance[i,j] = replacement
1414
end
1515
end
1616
end
@@ -29,13 +29,15 @@ Wherever the number of cloud-free observations is 0, radiance will be marked as
2929
function na_recode(radiance_datacube, clouds_datacube; replacement = missing)
3030
radiance_datacube = rebuild(radiance_datacube; missingval = nothing)
3131
radiance_datacube = replace_missing(radiance_datacube, missing)
32-
r_dc = convert(Array{Union{Missing, Float16}}, view(radiance_datacube, Band(1)))
33-
cf_dc = convert(Array{UInt8, 3}, view(clouds_datacube, Band(1)))
34-
for i in 1:size(cf_dc)[3]
35-
r_dc[:, :, i] = na_recode_img(r_dc[:, :, i], cf_dc[:, :, i]; replacement = replacement)
32+
for i in 1:size(radiance_datacube, 1)
33+
for j in 1:size(radiance_datacube, 2)
34+
for k in 1:size(radiance_datacube, 3)
35+
if clouds_datacube[i,j, k] == 0
36+
radiance_datacube[i,j, k] = replacement
37+
end
38+
end
39+
end
3640
end
37-
cf_dc = 0
38-
GC.gc()
39-
return Raster(add_dim(r_dc), dims(radiance_datacube))
41+
return radiance_datacube
4042
end
4143

src/data_cleaning/outlier_removal.jl

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,15 +5,14 @@ There are extremely high values in the data due to fires, gas flare etc. You may
55
outlier_variance(datacube, mask)
66
```
77
"""
8-
function outlier_variance(dc, mask=ones(Int8, (size(dc)[1],size(dc)[2])))
8+
function outlier_variance(datacube, mask=ones(Int8, (size(datacube)[1],size(datacube)[2])))
99
function std_mask(std, threshold)
1010
if std < threshold
1111
return 1
1212
else
1313
return missing
1414
end
1515
end
16-
datacube = convert(Array{Union{Missing, Float16}}, view(dc, Band(1)))
1716
stds = zeros(size(datacube)[1], size(datacube)[2])
1817
for i in 1:size(datacube)[1]
1918
for j in 1:size(datacube)[2]

src/data_cleaning/replace_negative.jl

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,7 @@
11
"""
22
Function replaces the negative values in a datacube with missing.
33
"""
4-
function replace_negative(dc)
5-
datacube = convert(Array{Union{Missing, Float16}}, view(dc, Band(1)))
4+
function replace_negative(datacube)
65
for i in 1:prod(size(datacube))
76
if ismissing(datacube[i])
87
continue
@@ -12,5 +11,5 @@ function replace_negative(dc)
1211
continue
1312
end
1413
end
15-
return Raster(add_dim(datacube), dims(dc))
14+
return datacube
1615
end

src/example.jl

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -12,15 +12,13 @@ The datacubes and the district level shapefile for Mumbai city are provided with
1212
map_path = assets_path * "/mumbai_map/mumbai_districts.shp"
1313
radiance_path = assets_path * "/mumbai_ntl/datacube/mumbai_radiance.nc"
1414
clouds_path = assets_path * "/mumbai_ntl/datacube/mumbai_clouds.nc"
15-
16-
global radiance_datacube = read(Raster(radiance_path))
17-
global clouds_datacube = read(Raster(clouds_path))
15+
global radiance_datacube = Raster(radiance_path)
16+
global clouds_datacube = Raster(clouds_path)
1817
global mumbai_map = Shapefile.Table(map_path)
1918
"""
2019
i) Distict level shapefile of Mumbai is loaded as mumbai_map.
2120
ii) Radiance datacube of Mumbai is loaded as radiance_datacube.
2221
iii) Cloud-free observations data is loaded as clouds_datacube.
23-
iv) MUMBAI_COORDINATE_SYSTEM should be used as the coordinate system.
2422
"""
2523
println("
2624
Follow the tutorial on:

src/f_apply.jl

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -9,17 +9,16 @@ julia> long_apply(x, datacube)
99
```
1010
"""
1111
function long_apply(f, datacube, mask = ones(size(datacube)[1], size(datacube)[2]))
12-
dc = Array(view(datacube, Band(1)))
13-
for i in 1:size(dc)[1]
14-
for j in 1:size(dc)[2]
12+
for i in 1:size(datacube)[1]
13+
for j in 1:size(datacube)[2]
1514
if ismissing(mask[i, j])
1615
continue
1716
else
18-
dc[i, j, :] = f(dc[i, j, :])
17+
datacube[i, j, :] = f(datacube[i, j, :])
1918
end
2019
end
2120
end
22-
return Raster(add_dim(dc), dims(datacube))
21+
return datacube
2322
end
2423

2524
"""

src/other/date_to_int.jl

Lines changed: 0 additions & 16 deletions
This file was deleted.

src/other/rings.jl

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -4,8 +4,8 @@ using Plots
44
load_example()
55
img = view(radiance_datacube, Ti(At(201204)))
66
res = 15
7-
R1 = 5
8-
R2 = 13
7+
R1 = 2
8+
R2 = 5
99
lat = 19.07
1010
long = 72.87
1111
bounds, mask = annular_ring(img, R1, R2, lat, long, res)
@@ -82,9 +82,9 @@ end
8282
```julia
8383
using Plots
8484
load_example()
85-
img = view(radiance_datacube, Ti(At(201204)))
85+
img = view(radiance_datacube, Ti(At(Date("2012-06"))))
8686
res = 15
87-
R = 10
87+
R = 2
8888
lat = 19.07
8989
long = 72.87
9090
bounds, mask = annular_ring(img, R, lat, long, res)

test/data_cleaning/bgnoise.jl

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2,9 +2,9 @@
22
for i in 1:10
33
x = size(radiance_datacube)[1]
44
y = size(radiance_datacube)[2]
5-
z = size(radiance_datacube)[4]
6-
rad = rand(20:100.0, x,y,1,z)
7-
clouds = rand(1:30, x,y,1,z)
5+
z = size(radiance_datacube)[3]
6+
rad = rand(20:100.0, x,y,z)
7+
clouds = rand(1:30, x,y,z)
88
rad = Raster(rad, dims(radiance_datacube))
99
clouds = Raster(clouds, dims(radiance_datacube))
1010
@test size(bgnoise_PSTT2021(rad,clouds,rand(0:0.9))) == (x,y)

test/data_cleaning/bias_correction.jl

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -13,17 +13,17 @@ end
1313
for i in 1:10
1414
x = size(radiance_datacube)[1]
1515
y = size(radiance_datacube)[2]
16-
z = size(radiance_datacube)[4]
16+
z = size(radiance_datacube)[3]
1717

18-
rad = Array{Union{Float64, Missing}}(rand(20:100.0, x, y, 1, z))
18+
rad = Array{Union{Float64, Missing}}(rand(20:100.0, x, y, z))
1919
for j in 1:rand(1:20)
20-
rad[rand(1:x), rand(1:y),1, rand(1:z)] = missing
20+
rad[rand(1:x), rand(1:y), rand(1:z)] = missing
2121
end
2222
rad = Raster(rad, dims(radiance_datacube))
23-
clouds = rand(1:30, x,y,1,z)
23+
clouds = rand(1:30, x,y,z)
2424
clouds = Raster(clouds, dims(radiance_datacube))
2525
mask = rand(0:1, x, y)
26-
@test size(bias_PSTT2021(rad, clouds, mask)) == (x, y, 1, z)
26+
@test size(bias_PSTT2021(rad, clouds, mask)) == (x, y, z)
2727
end
2828
end
2929

test/data_cleaning/na_recode.jl

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -13,9 +13,9 @@ end
1313
for i in 1:10
1414
x = size(radiance_datacube)[1]
1515
y = size(radiance_datacube)[2]
16-
z = size(radiance_datacube)[4]
17-
rad = rand(20:100.0, x,y,1,z)
18-
clouds = rand(0:3, x,y,1,z)
16+
z = size(radiance_datacube)[3]
17+
rad = rand(20:100.0, x,y,z)
18+
clouds = rand(0:3, x,y,z)
1919
rad = Raster(rad, dims(radiance_datacube))
2020
clouds = Raster(clouds, dims(radiance_datacube))
2121
@test size(na_recode(rad, clouds)) == size(rad)

test/data_cleaning/outlier_removal.jl

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -11,11 +11,11 @@ end
1111
for i in 1:10
1212
x = size(radiance_datacube)[1]
1313
y = size(radiance_datacube)[2]
14-
z = size(radiance_datacube)[4]
14+
z = size(radiance_datacube)[3]
1515

16-
rad = Array{Union{Float64, Missing}}(rand(20:100.0, x, y, 1, z))
16+
rad = Array{Union{Float64, Missing}}(rand(20:100.0, x, y, z))
1717
for j in 1:rand(1:20)
18-
rad[rand(1:x), rand(1:y),1, rand(1:z)] = missing
18+
rad[rand(1:x), rand(1:y), rand(1:z)] = missing
1919
end
2020
rad = Raster(rad, dims(radiance_datacube))
2121
mask = rand(0:1, x, y)

test/f_apply.jl

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,8 +7,8 @@ end
77
for i in 1:10
88
x = size(radiance_datacube)[1]
99
y = size(radiance_datacube)[2]
10-
z = size(radiance_datacube)[4]
11-
rad = rand(20:100.0, x,y,1,z)
10+
z = size(radiance_datacube)[3]
11+
rad = rand(20:100.0, x,y,z)
1212
rad = Raster(rad, dims(radiance_datacube))
1313
mask = rand(0:1, x, y)
1414
@test size(long_apply(test_func, rad, mask)) == size(rad)

test/other/com.jl

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,8 @@
1-
using SparseArrays
2-
img = view(radiance_datacube, Ti(1))
1+
img = view(radiance_datacube, Ti(At(Date("2012-04"))))
32
cog = centre_of_mass(img)
43

5-
@test cog [72.9125001033, 19.120832886299997]
4+
@test cog [72.88333535640002, 19.070832885899996]
65

76
img = view(radiance_datacube, Ti(1))
87
spaster = sparse(Array(img)[:,:,1])
9-
centre_of_mass(spaster, dims(img)) [72.9125001033, 19.120832886299997]
8+
centre_of_mass(spaster, dims(img)) [72.88333535640002, 19.070832885899996]

test/other/date_to_int.jl

Lines changed: 0 additions & 4 deletions
This file was deleted.

test/other/rings.jl

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,12 @@
1-
img = view(radiance_datacube, Ti(At(201204)))
1+
img = view(radiance_datacube, Ti(At(Date("2012-06"))))
22
res = 15
3-
R1 = 5
4-
R2 = 13
3+
R1 = 2
4+
R2 = 5
55
lat = 19.07
66
long = 72.87
77
bounds1, mask1 = annular_ring(img, R1, R2, lat, long, res)
88

9-
R = 13
9+
R = 5
1010
bounds2, mask2 = annular_ring(img, R, lat, long, res)
1111

1212
@test bounds1 == bounds2

test/runtests.jl

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ using Test
44
using Dates
55
using DataFrames
66
using Rasters
7+
using SparseArrays
78

89
fatalerrors = length(ARGS) > 0 && ARGS[1] == "-f"
910
quiet = length(ARGS) > 0 && ARGS[1] == "-q"
@@ -21,7 +22,6 @@ my_tests = ["f_apply.jl",
2122
"other/detrend.jl",
2223
"other/rank_correlation.jl",
2324
"other/weighted_mean.jl",
24-
"other/date_to_int.jl",
2525
"other/rings.jl",
2626
"other/com.jl"
2727
]

0 commit comments

Comments
 (0)