Description Usage Author(s) Examples
Dummy function to show code example for sEddyProc provided below
1 |
AMM (Department for Biogeochemical Integration at MPI-BGC, Jena, Germany)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 | #+++ Simple example code for using the sEddyProc reference class +++
if( FALSE ) { #Do not always execute example code (e.g. on package installation)
#library(REddyProc)
#+++ Load data with one header and one unit row from (tab-delimited) text file
Dir.s <- paste(system.file(package='REddyProc'), 'examples', sep='/')
EddyData.F <- fLoadTXTIntoDataframe('Example_DETha98.txt', Dir.s)
# note: use \code{fFilterAttr} to subset rows while keeping the units attributes
#+++ If not provided, calculate VPD from Tair and rH
EddyData.F <- cbind(EddyData.F,VPD=fCalcVPDfromRHandTair(EddyData.F$rH, EddyData.F$Tair))
#+++ Add time stamp in POSIX time format
EddyDataWithPosix.F <- fConvertTimeToPosix(EddyData.F, 'YDH', Year.s='Year', Day.s='DoY', Hour.s='Hour')
#+++ Initalize R5 reference class sEddyProc for processing of eddy data
#+++ with all variables needed for processing later
EddyProc.C <- sEddyProc$new('DE-Tha', EddyDataWithPosix.F, c('NEE','Rg','Tair','VPD', 'Ustar'))
EddyProc.C$sSetLocationInfo(Lat_deg.n=51.0, Long_deg.n=13.6, TimeZone_h.n=1) #Location of DE-Tharandt
#+++ Generate plots of all data in directory \plots (of current R working dir)
EddyProc.C$sPlotHHFluxes('NEE')
EddyProc.C$sPlotFingerprint('Rg')
EddyProc.C$sPlotDiurnalCycle('Tair')
#+++ Plot individual months/years to screen (of current R graphics device)
EddyProc.C$sPlotHHFluxesY('NEE', Year.i=1998)
EddyProc.C$sPlotFingerprintY('NEE', Year.i=1998)
#+++ Fill gaps in variables with MDS gap filling algorithm (without prior ustar filtering)
EddyProc.C$sMDSGapFill('NEE', FillAll.b=TRUE) #Fill all values to estimate flux uncertainties
EddyProc.C$sMDSGapFill('Rg', FillAll.b=FALSE) #Fill only the gaps for the meteo condition, e.g. 'Rg'
#+++ Example plots of filled data to screen or to directory \plots
EddyProc.C$sPlotFingerprintY('NEE_f', Year.i=1998)
EddyProc.C$sPlotDailySumsY('NEE_f','NEE_fsd', Year.i=1998) #Plot of sums with uncertainties
EddyProc.C$sPlotDailySums('NEE_f','NEE_fsd')
#+++ Partition NEE into GPP and respiration
EddyProc.C$sMDSGapFill('Tair', FillAll.b=FALSE) # Gap-filled Tair (and NEE) needed for partitioning
EddyProc.C$sMDSGapFill('VPD', FillAll.b=FALSE) # Gap-filled Tair (and NEE) needed for partitioning
EddyProc.C$sMRFluxPartition() # night time partitioning -> Reco, GPP
EddyProc.C$sGLFluxPartition() # day time partitioning -> Reco_DT, GPP_DT
#EddyProc.C$sGLFluxPartition(controlGLPart.l=partGLControl(isBoundLowerNEEUncertainty=FALSE)) # day time partitioning -> Reco_DT, GPP_DT
#plot( EddyProc.C$sTEMP$GPP_DT ~ EddyProc.C$sTEMP$GPP_f); abline(0,1)
#plot( -EddyProc.C$sTEMP$GPP_DT + EddyProc.C$sTEMP$Reco_DT ~ EddyProc.C$sTEMP$NEE_f ); abline(0,1)
#names(EddyProc.C$sTEMP)
# there are some constraints, that might be too strict for some datasets
# e.g. in the tropics the required temperature range might be too large.
# Its possible to change these constraints
#EddyProc.C$sMRFluxPartition(parsE0Regression=list(TempRange.n=2.0, optimAlgorithm="LM") )
#+++ Example plots of calculated GPP and respiration
EddyProc.C$sPlotFingerprintY('GPP_f', Year.i=1998)
EddyProc.C$sPlotFingerprint('GPP_f')
EddyProc.C$sPlotHHFluxesY('Reco', Year.i=1998)
EddyProc.C$sPlotHHFluxes('Reco')
#+++ Processing with ustar filtering before
EddyProc.C <- sEddyProc$new('DE-Tha', EddyDataWithPosix.F, c('NEE','Rg','Tair','VPD', 'Ustar'))
EddyProc.C$sSetLocationInfo(Lat_deg.n=51.0, Long_deg.n=13.6, TimeZone_h.n=1) #Location of DE-Tharandt
# estimating the thresholds based on the data
(uStarTh <- EddyProc.C$sEstUstarThreshold()$uStarTh)
# plot saturation of NEE with UStar for one season
EddyProc.C$sPlotNEEVersusUStarForSeason( levels(uStarTh$season)[3] )
# Gapfilling by default it takes the annually aggregated estimate is used to mark periods with low uStar
# for other options see Example 4
EddyProc.C$sMDSGapFillAfterUstar('NEE')
colnames(EddyProc.C$sExportResults()) # Note the collumns with suffix _WithUstar
EddyProc.C$sMDSGapFill('Tair', FillAll.b=FALSE)
EddyProc.C$sMRFluxPartition(Lat_deg.n=51.0, Long_deg.n=13.6, TimeZone_h.n=1, Suffix.s='WithUstar') # Note suffix
EddyProc.C$sMRFluxPartition(Lat_deg.n=51.0, Long_deg.n=13.6, TimeZone_h.n=1, Suffix.s='WithUstar') # Note suffix
#+++ Export gap filled and partitioned data to standard data frame
FilledEddyData.F <- EddyProc.C$sExportResults()
#+++ Save results into (tab-delimited) text file in directory \out
CombinedData.F <- cbind(EddyData.F, FilledEddyData.F)
#+++ May rename variables to correspond to Ameriflux
colnames(CombinedDataAmeriflux.F <- renameVariablesInDataframe(CombinedData.F, getBGC05ToAmerifluxVariableNameMapping() ))
CombinedDataAmeriflux.F$TIMESTAMP_END <- POSIXctToBerkeleyJulianDate( EddyProc.C$sExportData()[[1]] )
head(tmp <- BerkeleyJulianDateToPOSIXct( CombinedDataAmeriflux.F$TIMESTAMP_END ))
#colnames(tmp <- renameVariablesInDataframe(CombinedData.F, getAmerifluxToBGC05VariableNameMapping() ))
fWriteDataframeToFile(CombinedData.F, 'DE-Tha-Results.txt', 'out')
#++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
#+++ Example 1 for advanced users: Processing different setups on the same site data
#++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
#+++ Initialize new sEddyProc processing class
EddySetups.C <- sEddyProc$new('DE-Tha', EddyDataWithPosix.F, c('NEE','Rg','Tair','VPD','Ustar'))
EddySetups.C$sSetLocationInfo(Lat_deg.n=51.0, Long_deg.n=13.6, TimeZone_h.n=1) #Location of DE-Tharandt
#+++ When running several processing setup, a string suffix declaration is needed
#+++ Here: Gap filling with and without ustar threshold
EddySetups.C$sMDSGapFill('NEE', FillAll.b=FALSE, Suffix.s='NoUstar')
EddySetups.C$sMDSGapFillAfterUstar('NEE', FillAll.b=FALSE, UstarThres.df=0.3, UstarSuffix.s='Thres1')
EddySetups.C$sMDSGapFillAfterUstar('NEE', FillAll.b=FALSE, UstarThres.df=0.4, UstarSuffix.s='Thres2')
EddySetups.C$sMDSGapFill('Tair', FillAll.b=FALSE) # Gap-filled Tair needed for partitioning
EddySetups.C$sMDSGapFill('VPD', FillAll.b=FALSE) # Gap-filled VPD needed for daytime partitioning
colnames(EddySetups.C$sExportResults()) # Note the suffix in output columns
#+++ Flux partitioning of the different gap filling setups
EddySetups.C$sMRFluxPartition(Suffix.s='NoUstar')
EddySetups.C$sMRFluxPartition(Suffix.s='Thres1')
EddySetups.C$sMRFluxPartition(Suffix.s='Thres2')
EddySetups.C$sGLFluxPartition(Suffix.s='NoUstar')
colnames(EddySetups.C$sExportResults()) # Note the suffix in output columns also of GPP, Reco, GPP_DT, and Reco_DT
#++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
# Example 2 for advanced users: Extended usage of the gap filling algorithm
#++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
#+++ Add some (non-sense) example vectors:
#+++ Quality flag vector (e.g. from applying ustar filter)
QF.V.n <- rep(c(1,0,1,0,1,0,0,0,0,0), nrow(EddyData.F)/10)
#+++ Dummy step function vector to simulate e.g. high/low water table
Step.V.n <- ifelse(EddyData.F$DoY < 200 | EddyData.F$DoY > 250, 0, 1)
#+++ Initialize new sEddyProc processing class with more columns
EddyTest.C <- sEddyProc$new('DE-Tha', cbind(EddyDataWithPosix.F, Step=Step.V.n, QF=QF.V.n),
c('NEE', 'LE', 'H', 'Rg', 'Tair', 'Tsoil', 'rH', 'VPD', 'QF', 'Step'))
EddyTest.C$sSetLocationInfo(Lat_deg.n=51.0, Long_deg.n=13.6, TimeZone_h.n=1) #Location of DE-Tharandt
#+++ Gap fill variable with (non-default) variables and limits including preselection of data with quality flag QF==0
EddyTest.C$sMDSGapFill('LE', QFVar.s='QF', QFValue.n=0, V1.s='Rg', T1.n=30, V2.s='Tsoil', T2.n=2, 'Step', 0.1)
#+++ Use individual gap filling subroutines with different window sizes and up to five variables and limits
EddyTest.C$sFillInit('NEE') #Initialize 'NEE' as variable to fill
Result_Step1.F <- EddyTest.C$sFillLUT(3, 'Rg',50, 'rH',30, 'Tair',2.5, 'Tsoil',2, 'Step',0.5)
Result_Step2.F <- EddyTest.C$sFillLUT(6, 'Tair',2.5, 'VPD',3, 'Step',0.5)
Result_Step3.F <- EddyTest.C$sFillMDC(3)
EddyTest.C$sPlotHHFluxesY('VAR_fall', Year.i=1998) #Individual fill result columns are called 'VAR_...'
#++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
# Example 3 for advanced users: Explicit demonstration of MDS gap filling algorithm for filling NEE
#++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
#+++ Initialize new sEddyProc processing class
EddyTestMDS.C <- sEddyProc$new('DE-Tha', EddyDataWithPosix.F, c('NEE', 'Rg', 'Tair', 'VPD'))
EddyTestMDS.C$sSetLocationInfo(Lat_deg.n=51.0, Long_deg.n=13.6, TimeZone_h.n=1) #Location of DE-Tharandt
#Initialize 'NEE' as variable to fill
EddyTestMDS.C$sFillInit('NEE')
# Set variables and tolerance intervals
# twutz: \u00B1 is the unicode for '+over-'
V1.s='Rg'; T1.n=50 # Global radiation 'Rg' within \u00B150 W m-2
V2.s='VPD'; T2.n=5 # Vapour pressure deficit 'VPD' within 5 hPa
V3.s='Tair'; T3.n=2.5 # Air temperature 'Tair' within \u00B12.5 degC
# Step 1: Look-up table with window size \u00B17 days
Result_Step1.F <- EddyTestMDS.C$sFillLUT(7, V1.s, T1.n, V2.s, T2.n, V3.s, T3.n)
# Step 2: Look-up table with window size \u00B114 days
Result_Step2.F <- EddyTestMDS.C$sFillLUT(14, V1.s, T1.n, V2.s, T2.n, V3.s, T3.n)
# Step 3: Look-up table with window size \u00B17 days, Rg only
Result_Step3.F <- EddyTestMDS.C$sFillLUT(7, V1.s, T1.n)
# Step 4: Mean diurnal course with window size 0 (same day)
Result_Step4.F <- EddyTestMDS.C$sFillMDC(0)
# Step 5: Mean diurnal course with window size \u00B11, \u00B12 days
Result_Step5a.F <- EddyTestMDS.C$sFillMDC(1)
Result_Step5b.F <- EddyTestMDS.C$sFillMDC(2)
# Step 6: Look-up table with window size \u00B121, \u00B128, ..., \u00B170
for( WinDays.i in seq(21,70,7) ) Result_Step6.F <- EddyTestMDS.C$sFillLUT(WinDays.i, V1.s, T1.n, V2.s, T2.n, V3.s, T3.n)
# Step 7: Look-up table with window size \u00B114, \u00B121, ..., \u00B170, Rg only
for( WinDays.i in seq(14,70,7) ) Result_Step7.F <- EddyTestMDS.C$sFillLUT(WinDays.i, V1.s, T1.n)
# Step 8: Mean diurnal course with window size \u00B17, \u00B114, ..., \u00B1210 days
for( WinDays.i in seq(7,210,7) ) Result_Step8.F <- EddyTestMDS.C$sFillMDC(WinDays.i)
# Export results, columns are named 'VAR_'
FilledEddyData.F <- EddyTestMDS.C$sExportResults()
#++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
# Example 4 for advanced users: Processing of different UStar-Threshold setups
#++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
#+++ Provide a single user-defined uStarThreshold
EddySetups.C <- sEddyProc$new('DE-Tha', EddyDataWithPosix.F, c('NEE','Rg','Tair','VPD','Ustar'))
EddySetups.C$sSetLocationInfo(Lat_deg.n=51.0, Long_deg.n=13.6, TimeZone_h.n=1) #Location of DE-Tharandt
Ustar.V.n <- 0.46
EddySetups.C$sMDSGapFillAfterUstar('NEE', UstarThres.df=Ustar.V.n)
# Type 'vignette(DEGebExample)' to view an example
# - using tailored seasons of differing uStar dynamics with vegetation changes (crop)
# - using seasonal instead of annual uStar threshold estimates in gapfilling
# - Bootstrapping uncertainty associated with uStar Threshold estimation
# - Using change point detection instead of moving point method
# The vignette is only available if REddyProc was installed from binary package.
# A version can be seen at https://github.com/bgctw/REddyProc/blob/master/vignettes/DEGebExample.md
}
|
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.