Skip to content

SoilProfiles.jl is a Julia package for representing soil profile information with the site-layer model

License

Notifications You must be signed in to change notification settings

brownag/SoilProfiles.jl

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

35 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

SoilProfiles.jl

tests codecov

SoilProfiles.jl is a Julia package for representing soil profile information using the "site-layer" model. Soil profiles are essentially cross sections where distinct "layers" are defined by a top and bottom depth for a point, line or area on the land surface.

There is generally a many:one relationship between layers observed within a soil profile and the site-level information that identifies or summarizes that profile. The SoilProfile object allows for simultaneous indexing and operations on paired or pooled site and layer data.

The SoilProfile object in SoilProfiles.jl conceptually mirrors the SoilProfileCollection object defined by the aqp R package. In Julia, we are using the DataFrames.jl package instead of R data.frame objects.

using SoilProfiles
using DataFrames

# 6 sites with 3 profiles of layer data
s = DataFrame(pid = 1:6, elev = 100:105)
l = DataFrame(pid = [1,1,1,1,1,2,2,2,2,2,3,3,3,3,3],
              top = [0,10,20,30,40,0,5,10,15,20,0,20,40,60,80],
              bot = [10,20,30,40,50,5,10,15,20,25,20,40,60,80,100])

# Construct a SoilProfile from DataFrames
#  Must specify:
#  - unique profile ID
#  - top and bottom depth column names in layer DataFrame
#  - site DataFrame and layer DataFrame

sp1 = SoilProfile("pid", ["top", "bot"], s, l)

# equivalent syntax
# when ID specified as argument
sp2 = SoilProfile("pid", s, l)
# or when ID as first column in site data
sp3 = SoilProfile(s, l)

show(sp1)

# empty SoilProfile
show(SoilProfile())

# site and layer extraction
res = spc[2:6, 2:4]
show(res)

# view the layer depths
depths(res)

# all layers have a site
println(isValid(res))

# but not all sites have layers [4,5,6]
println(sitesWithoutLayers(res))

# check that site and layer order are in sync
checkIntegrity(res)

# check that layers in top depth order have bottom depths matching adjacent top depths
checkTopology(res)

show(spc[1,1])

# iterate using for i in SoilProfile
for i in sp1
 show(i)
end

# or use foreach(::Function, ::SoilProfile)
foreach(show, sp1)

About

SoilProfiles.jl is a Julia package for representing soil profile information with the site-layer model

Resources

License

Stars

Watchers

Forks

Packages

No packages published

Languages