Skip to contents

cate = c("aircraft-pfp",
         "aircraft-insitu",
         "aircraft-flask",
         "surface-insitu",
         "surface-flask", 
         "surface-pfp",   
         "tower-insitu",  
         "aircore",       
         "shipboard-insitu",
         "shipboard-flask") 

obs <- "Z:/torf/obspack_ch4_1_GLOBALVIEWplus_v5.1_2023-03-08/data/nc/"
index <- obs_summary(obs = obs, 
                     categories = cate)
#> Number of files of index: 479
#>               sector     N
#>               <char> <int>
#>  1:     aircraft-pfp    42
#>  2:  aircraft-insitu    17
#>  3:    surface-flask   106
#>  4:   surface-insitu   121
#>  5:   aircraft-flask     4
#>  6:          aircore     1
#>  7:      surface-pfp    33
#>  8:     tower-insitu   150
#>  9:  shipboard-flask     4
#> 10: shipboard-insitu     1
#> 11:    Total sectors   479
#> Detected 203 files with agl
#> Detected 276 files without agl

Now we read the aircraft-insitu using the function obs_read_nc. To this date, solar_time is not included for aircraft, so we FALSE that argument.

datasetid <- "aircraft-insitu"
df <- obs_read_nc(index = index,
                  categories = datasetid,
                  solar_time = FALSE,
                  verbose = T)
#> Searching aircraft-insitu...
#> 1: ch4_above_aircraft-insitu_1_allvalid.nc
#> 2: ch4_act_aircraft-insitu_428_allvalid-b200.nc
#> 3: ch4_act_aircraft-insitu_428_allvalid-c130.nc
#> 4: ch4_ajax_aircraft-insitu_429_allvalid.nc
#> 5: ch4_cob2003b_aircraft-insitu_59_allvalid.nc
#> 6: ch4_eco_aircraft-insitu_1_allvalid.nc
#> 7: ch4_hip_aircraft-insitu_59_allvalid.nc
#> 8: ch4_iagos-caribic_aircraft-insitu_457_allvalid.nc
#> 9: ch4_iagos-core_aircraft-insitu_45_allvalid.nc
#> 10: ch4_korus-aq_aircraft-insitu_428_allvalid-dc8.nc
#> 11: ch4_man_aircraft-insitu_1_allvalid.nc
#> 12: ch4_orc_aircraft-insitu_3_allvalid-merge10.nc
#> 13: ch4_seac4rs_aircraft-insitu_428_allvalid-ER2.nc
#> 14: ch4_seac4rs_aircraft-insitu_428_allvalid-dc8.nc
#> 15: ch4_start08_aircraft-insitu_59_allvalid.nc
#> 16: ch4_tom_aircraft-insitu_1_allvalid.nc
#> 17: ch4_ugd_aircraft-insitu_1_allvalid.nc

Now we check the data

df
#>           year month   day  hour minute second       time start_time
#>          <int> <int> <int> <int>  <int>  <int>      <int>      <int>
#>       1:  2017     4    26    15     32     10 1493220730 1493220730
#>       2:  2017     4    26    15     32     20 1493220740 1493220740
#>       3:  2017     4    26    15     32     30 1493220750 1493220750
#>       4:  2017     4    26    15     32     40 1493220760 1493220760
#>       5:  2017     4    26    15     32     50 1493220770 1493220770
#>      ---                                                            
#> 3158219:  2021    12    10    11     37     45 1639136265 1639136260
#> 3158220:  2021    12    10    11     37     55 1639136275 1639136270
#> 3158221:  2021    12    10    11     38      5 1639136285 1639136280
#> 3158222:  2021    12    10    11     38     15 1639136295 1639136290
#> 3158223:  2021    12    10    11     38     25 1639136305 1639136300
#>          midpoint_time             datetime time_decimal       value value_unc
#>                  <int>               <char>        <num>       <num>     <num>
#>       1:    1493220730 2017-04-26T15:32:10Z     2017.317 1.96430e-06     5e-10
#>       2:    1493220740 2017-04-26T15:32:20Z     2017.317 1.96176e-06     5e-10
#>       3:    1493220750 2017-04-26T15:32:30Z     2017.317 1.96173e-06     5e-10
#>       4:    1493220760 2017-04-26T15:32:40Z     2017.317 1.96131e-06     5e-10
#>       5:    1493220770 2017-04-26T15:32:50Z     2017.317 1.96199e-06     5e-10
#>      ---                                                                      
#> 3158219:    1639136265 2021-12-10T11:37:45Z     2021.941 1.97308e-06     1e-09
#> 3158220:    1639136275 2021-12-10T11:37:55Z     2021.941 1.97495e-06     1e-09
#> 3158221:    1639136285 2021-12-10T11:38:05Z     2021.941 1.97649e-06     1e-09
#> 3158222:    1639136295 2021-12-10T11:38:15Z     2021.941 1.98205e-06     1e-09
#> 3158223:    1639136305 2021-12-10T11:38:25Z     2021.941 1.97504e-06     1e-09
#>          nvalue value_std_dev latitude longitude altitude pressure     u     v
#>           <int>         <num>    <num>     <num>    <num>    <num> <num> <num>
#>       1:      4      1.23e-09  40.0391 -105.2320  1617.03   836.39 -2.39  0.16
#>       2:      5      3.10e-10  40.0391 -105.2290  1617.04   836.78 -1.45  0.33
#>       3:      5      4.30e-10  40.0391 -105.2240  1617.03   836.79 -1.40  0.94
#>       4:      4      2.40e-10  40.0391 -105.2190  1630.93   835.28 -3.37  1.82
#>       5:      5      1.16e-09  40.0389 -105.2120  1650.95   832.78 -2.25  2.68
#>      ---                                                                      
#> 3158219:      3      2.96e-09   0.2176   32.5360  1239.50   865.98    NA    NA
#> 3158220:      3      1.46e-09   0.2142   32.5387  1213.20   867.65    NA    NA
#> 3158221:      4      3.31e-09   0.2109   32.5413  1199.20   869.33    NA    NA
#> 3158222:      3      4.50e-09   0.2076   32.5440  1181.10   871.76    NA    NA
#> 3158223:      4      1.62e-09   0.2044   32.5466  1163.50   873.92    NA    NA
#>          temperature profile_id      flight_id obs_flag obspack_num
#>                <num>     <char>         <char>    <int>       <int>
#>       1:      282.02          0       20170426        1    11109646
#>       2:      281.79          0       20170426        1    11109647
#>       3:      281.34          0       20170426        1    11109648
#>       4:      280.92          1       20170426        1    11109649
#>       5:      280.43          1       20170426        1    11109650
#>      ---                                                           
#> 3158219:      296.70         12 20211210_27100        1     2042566
#> 3158220:      296.90         12 20211210_27100        1     2042567
#> 3158221:      297.00         12 20211210_27100        1     2042568
#> 3158222:      297.20         12 20211210_27100        1     2042569
#> 3158223:      297.40         12 20211210_27100        1     2042570
#>                                                                                          obspack_id
#>                                                                                              <char>
#>       1: obspack_ch4_1_GLOBALVIEWplus_v6.0_2023-12-01~ch4_above_aircraft-insitu_1_allvalid~11109646
#>       2: obspack_ch4_1_GLOBALVIEWplus_v6.0_2023-12-01~ch4_above_aircraft-insitu_1_allvalid~11109647
#>       3: obspack_ch4_1_GLOBALVIEWplus_v6.0_2023-12-01~ch4_above_aircraft-insitu_1_allvalid~11109648
#>       4: obspack_ch4_1_GLOBALVIEWplus_v6.0_2023-12-01~ch4_above_aircraft-insitu_1_allvalid~11109649
#>       5: obspack_ch4_1_GLOBALVIEWplus_v6.0_2023-12-01~ch4_above_aircraft-insitu_1_allvalid~11109650
#>      ---                                                                                           
#> 3158219:    obspack_ch4_1_GLOBALVIEWplus_v6.0_2023-12-01~ch4_ugd_aircraft-insitu_1_allvalid~2042566
#> 3158220:    obspack_ch4_1_GLOBALVIEWplus_v6.0_2023-12-01~ch4_ugd_aircraft-insitu_1_allvalid~2042567
#> 3158221:    obspack_ch4_1_GLOBALVIEWplus_v6.0_2023-12-01~ch4_ugd_aircraft-insitu_1_allvalid~2042568
#> 3158222:    obspack_ch4_1_GLOBALVIEWplus_v6.0_2023-12-01~ch4_ugd_aircraft-insitu_1_allvalid~2042569
#> 3158223:    obspack_ch4_1_GLOBALVIEWplus_v6.0_2023-12-01~ch4_ugd_aircraft-insitu_1_allvalid~2042570
#>          unique_sample_location_num          scale dataset_project
#>                               <int>         <char>          <char>
#>       1:                   33175520 WMO CH4 X2004A aircraft-insitu
#>       2:                   33175521 WMO CH4 X2004A aircraft-insitu
#>       3:                   33175522 WMO CH4 X2004A aircraft-insitu
#>       4:                   33175523 WMO CH4 X2004A aircraft-insitu
#>       5:                   33175519 WMO CH4 X2004A aircraft-insitu
#>      ---                                                          
#> 3158219:                   51772833 WMO CH4 X2004A aircraft-insitu
#> 3158220:                   51772776 WMO CH4 X2004A aircraft-insitu
#> 3158221:                   51772721 WMO CH4 X2004A aircraft-insitu
#> 3158222:                   51772671 WMO CH4 X2004A aircraft-insitu
#> 3158223:                   51772623 WMO CH4 X2004A aircraft-insitu
#>          dataset_selection_tag
#>                         <char>
#>       1:              allvalid
#>       2:              allvalid
#>       3:              allvalid
#>       4:              allvalid
#>       5:              allvalid
#>      ---                      
#> 3158219:              allvalid
#> 3158220:              allvalid
#> 3158221:              allvalid
#> 3158222:              allvalid
#> 3158223:              allvalid
#>                                                             site_name
#>                                                                <char>
#>       1: Carbon in Arctic Reservoirs Vulnerability Experiment (CARVE)
#>       2: Carbon in Arctic Reservoirs Vulnerability Experiment (CARVE)
#>       3: Carbon in Arctic Reservoirs Vulnerability Experiment (CARVE)
#>       4: Carbon in Arctic Reservoirs Vulnerability Experiment (CARVE)
#>       5: Carbon in Arctic Reservoirs Vulnerability Experiment (CARVE)
#>      ---                                                             
#> 3158219:                           Kajjansi Airfield, Kampala, Uganda
#> 3158220:                           Kajjansi Airfield, Kampala, Uganda
#> 3158221:                           Kajjansi Airfield, Kampala, Uganda
#> 3158222:                           Kajjansi Airfield, Kampala, Uganda
#> 3158223:                           Kajjansi Airfield, Kampala, Uganda
#>          site_elevation site_latitude site_longitude  site_country site_code
#>                   <num>         <num>          <num>        <char>    <char>
#>       1:     -1.000e+34        -1e+34     -1.000e+34 United States       CRV
#>       2:     -1.000e+34        -1e+34     -1.000e+34 United States       CRV
#>       3:     -1.000e+34        -1e+34     -1.000e+34 United States       CRV
#>       4:     -1.000e+34        -1e+34     -1.000e+34 United States       CRV
#>       5:     -1.000e+34        -1e+34     -1.000e+34 United States       CRV
#>      ---                                                                    
#> 3158219:      1.141e+03         2e-01      3.255e+01        Uganda       UGD
#> 3158220:      1.141e+03         2e-01      3.255e+01        Uganda       UGD
#> 3158221:      1.141e+03         2e-01      3.255e+01        Uganda       UGD
#> 3158222:      1.141e+03         2e-01      3.255e+01        Uganda       UGD
#> 3158223:      1.141e+03         2e-01      3.255e+01        Uganda       UGD
#>          site_utc2lst lab_1_abbr dataset_calibration_scale altitude_final
#>                 <num>     <char>                    <char>          <num>
#>       1:           -8       NOAA            WMO CH4 X2004A        1617.03
#>       2:           -8       NOAA            WMO CH4 X2004A        1617.04
#>       3:           -8       NOAA            WMO CH4 X2004A        1617.03
#>       4:           -8       NOAA            WMO CH4 X2004A        1630.93
#>       5:           -8       NOAA            WMO CH4 X2004A        1650.95
#>      ---                                                                 
#> 3158219:            3       NOAA            WMO CH4 X2004A        1239.50
#> 3158220:            3       NOAA            WMO CH4 X2004A        1213.20
#> 3158221:            3       NOAA            WMO CH4 X2004A        1199.20
#> 3158222:            3       NOAA            WMO CH4 X2004A        1181.10
#> 3158223:            3       NOAA            WMO CH4 X2004A        1163.50
#>          type_altitude air_flag bl_bt_flag elevation event_number flight_flag
#>                  <num>    <int>      <int>     <num>       <char>       <int>
#>       1:             1       NA         NA        NA         <NA>          NA
#>       2:             1       NA         NA        NA         <NA>          NA
#>       3:             1       NA         NA        NA         <NA>          NA
#>       4:             1       NA         NA        NA         <NA>          NA
#>       5:             1       NA         NA        NA         <NA>          NA
#>      ---                                                                     
#> 3158219:             1       NA         NA      1138       251934          NA
#> 3158220:             1       NA         NA      1141       251935          NA
#> 3158221:             1       NA         NA      1143       251936          NA
#> 3158222:             1       NA         NA      1140       251937          NA
#> 3158223:             1       NA         NA      1138       251938          NA
#>          gps_altitude   h2o         instrument intake_height maneuver_flag
#>                 <num> <num>             <char>         <num>         <int>
#>       1:           NA    NA               <NA>            NA            NA
#>       2:           NA    NA               <NA>            NA            NA
#>       3:           NA    NA               <NA>            NA            NA
#>       4:           NA    NA               <NA>            NA            NA
#>       5:           NA    NA               <NA>            NA            NA
#>      ---                                                                  
#> 3158219:           NA    NA Picarro_CFKBDS2302         101.5            NA
#> 3158220:           NA    NA Picarro_CFKBDS2302          72.2            NA
#> 3158221:           NA    NA Picarro_CFKBDS2302          56.2            NA
#> 3158222:           NA    NA Picarro_CFKBDS2302          41.1            NA
#> 3158223:           NA    NA Picarro_CFKBDS2302          25.5            NA
#>          maneuver_flagqc pressure_altitude qcflag    rh site_elevation_unit
#>                    <int>             <num> <char> <num>              <char>
#>       1:              NA                NA   <NA>    NA                <NA>
#>       2:              NA                NA   <NA>    NA                <NA>
#>       3:              NA                NA   <NA>    NA                <NA>
#>       4:              NA                NA   <NA>    NA                <NA>
#>       5:              NA                NA   <NA>    NA                <NA>
#>      ---                                                                   
#> 3158219:              NA                NA    ..P  79.9                masl
#> 3158220:              NA                NA    ..P  79.8                masl
#> 3158221:              NA                NA    ..P  78.3                masl
#> 3158222:              NA                NA    ..P  78.9                masl
#> 3158223:              NA                NA    ..P  78.6                masl
#>                                                                   source_id
#>                                                                      <char>
#>       1:                                                               <NA>
#>       2:                                                               <NA>
#>       3:                                                               <NA>
#>       4:                                                               <NA>
#>       5:                                                               <NA>
#>      ---                                                                   
#> 3158219: KampalaExecutiveAviation_CessnaCaravan208B_5XKEB~20211210_27100~12
#> 3158220: KampalaExecutiveAviation_CessnaCaravan208B_5XKEB~20211210_27100~12
#> 3158221: KampalaExecutiveAviation_CessnaCaravan208B_5XKEB~20211210_27100~12
#> 3158222: KampalaExecutiveAviation_CessnaCaravan208B_5XKEB~20211210_27100~12
#> 3158223: KampalaExecutiveAviation_CessnaCaravan208B_5XKEB~20211210_27100~12
#>          time_interval value_original_scale
#>                  <int>                <num>
#>       1:            NA                   NA
#>       2:            NA                   NA
#>       3:            NA                   NA
#>       4:            NA                   NA
#>       5:            NA                   NA
#>      ---                                   
#> 3158219:            NA                   NA
#> 3158220:            NA                   NA
#> 3158221:            NA                   NA
#> 3158222:            NA                   NA
#> 3158223:            NA                   NA

Now we can process the data. We first filter for observations within our spatial domain:

Checks and definitions

north <- 80
south <- 10
west <- -170
east <- -50
max_altitude <- 8000
yy <- 2020

We check altitude, intake_height, altitude_final and elevation. altitude_final is a column from intake_height, added to match column from obs_read text files.

df[, c("altitude", "altitude_final", "intake_height", "elevation")]
#>          altitude altitude_final intake_height elevation
#>             <num>          <num>         <num>     <num>
#>       1:  1617.03        1617.03            NA        NA
#>       2:  1617.04        1617.04            NA        NA
#>       3:  1617.03        1617.03            NA        NA
#>       4:  1630.93        1630.93            NA        NA
#>       5:  1650.95        1650.95            NA        NA
#>      ---                                                
#> 3158219:  1239.50        1239.50         101.5      1138
#> 3158220:  1213.20        1213.20          72.2      1141
#> 3158221:  1199.20        1199.20          56.2      1143
#> 3158222:  1181.10        1181.10          41.1      1140
#> 3158223:  1163.50        1163.50          25.5      1138

The temporal range of data is

range(df$year)
#> [1] 2003 2021

We also check for dimensions of data

dim(df)
#> [1] 2041758      59

Filters

df <- df[year == yy]

df <- df[altitude_final < max_altitude &
           latitude < north &
           latitude > south &
           longitude < east &
           longitude > west]
dim(df)
#> [1] 236  59

Adding time as POSIXct class

df <- obs_addtime(df)
df[, "timeUTC"]
#>                  timeUTC
#>                   <POSc>
#>   1: 2020-01-08 22:59:55
#>   2: 2020-01-08 23:00:05
#>   3: 2020-01-08 23:00:15
#>   4: 2020-01-08 23:00:25
#>   5: 2020-01-08 23:00:35
#>  ---                    
#> 232: 2020-03-02 22:56:15
#> 233: 2020-03-02 22:56:25
#> 234: 2020-03-02 22:56:35
#> 235: 2020-03-02 22:56:45
#> 236: 2020-03-02 22:56:55

Cut time

now we can cut time every 20 seconds. We can chosse other frequency as well.

df$sec2 <- obs_freq(x = df$second,
                     freq = seq(0, 59, 20))
df[, c("second", "sec2")]
#>      second  sec2
#>       <int> <num>
#>   1:     55    40
#>   2:      5     0
#>   3:     15     0
#>   4:     25    20
#>   5:     35    20
#>  ---             
#> 232:     15     0
#> 233:     25    20
#> 234:     35    20
#> 235:     45    40
#> 236:     55    40

Aggregate data

now we need to add the column key_time, that it will be used to aggregate other variables

df$key_time <- ISOdatetime(year = df$year,
                           month = df$month,
                           day = df$day,
                           hour = df$hour,
                           min = df$minute,
                           sec = df$sec2,
                           tz = "UTC")
df[, c("timeUTC", "key_time")]
#>                  timeUTC            key_time
#>                   <POSc>              <POSc>
#>   1: 2020-01-08 22:59:55 2020-01-08 22:59:40
#>   2: 2020-01-08 23:00:05 2020-01-08 23:00:00
#>   3: 2020-01-08 23:00:15 2020-01-08 23:00:00
#>   4: 2020-01-08 23:00:25 2020-01-08 23:00:20
#>   5: 2020-01-08 23:00:35 2020-01-08 23:00:20
#>  ---                                        
#> 232: 2020-03-02 22:56:15 2020-03-02 22:56:00
#> 233: 2020-03-02 22:56:25 2020-03-02 22:56:20
#> 234: 2020-03-02 22:56:35 2020-03-02 22:56:20
#> 235: 2020-03-02 22:56:45 2020-03-02 22:56:40
#> 236: 2020-03-02 22:56:55 2020-03-02 22:56:40
df2 <- obs_agg(df, cols =  c("year",
                             "month",
                             "day",
                             "hour",
                             "minute",
                             "second",
                             "time",
                             "time_decimal",
                             "value",
                             "latitude",
                             "longitude",
                             "altitude_final",
                             "elevation",
                             "intake_height",
                             "gps_altitude",
                             "pressure",
                             "pressure_altitude",
                             "u", "v", "temperature",
                             "type_altitude"))
#> Adding time

Add local time

Now we add local time

df3 <- obs_addltime(df2)
setorderv(df3, cols = c("site_code", "timeUTC"),
          order = c(-1, 1))
df3
#>                  timeUTC site_code  lab_1_abbr dataset_calibration_scale  year
#>                   <POSc>    <char>      <char>                    <char> <int>
#>   1: 2020-01-08 22:59:40     IAGOS KIT/IMK-ASF            WMO CH4 X2004A  2020
#>   2: 2020-01-08 23:00:00     IAGOS KIT/IMK-ASF            WMO CH4 X2004A  2020
#>   3: 2020-01-08 23:00:20     IAGOS KIT/IMK-ASF            WMO CH4 X2004A  2020
#>   4: 2020-01-08 23:00:40     IAGOS KIT/IMK-ASF            WMO CH4 X2004A  2020
#>   5: 2020-01-08 23:01:00     IAGOS KIT/IMK-ASF            WMO CH4 X2004A  2020
#>  ---                                                                          
#> 115: 2020-03-02 22:55:20     IAGOS KIT/IMK-ASF            WMO CH4 X2004A  2020
#> 116: 2020-03-02 22:55:40     IAGOS KIT/IMK-ASF            WMO CH4 X2004A  2020
#> 117: 2020-03-02 22:56:00     IAGOS KIT/IMK-ASF            WMO CH4 X2004A  2020
#> 118: 2020-03-02 22:56:20     IAGOS KIT/IMK-ASF            WMO CH4 X2004A  2020
#> 119: 2020-03-02 22:56:40     IAGOS KIT/IMK-ASF            WMO CH4 X2004A  2020
#>      month    day  hour minute second       time time_decimal       value
#>      <int> <char> <int>  <int>  <int>      <num>        <num>       <num>
#>   1:     1     08    22     59     40 1578524380     2020.022 1.90980e-06
#>   2:     1     08    23      0      0 1578524400     2020.022 1.90885e-06
#>   3:     1     08    23      0     20 1578524420     2020.022 1.90775e-06
#>   4:     1     08    23      0     40 1578524440     2020.022 1.90815e-06
#>   5:     1     08    23      1      0 1578524460     2020.022 1.90780e-06
#>  ---                                                                     
#> 115:     3     02    22     55     20 1583189720     2020.169 1.94435e-06
#> 116:     3     02    22     55     40 1583189740     2020.169 1.94785e-06
#> 117:     3     02    22     56      0 1583189760     2020.169 1.95025e-06
#> 118:     3     02    22     56     20 1583189780     2020.169 1.95040e-06
#> 119:     3     02    22     56     40 1583189800     2020.169 1.94940e-06
#>      latitude longitude altitude_final elevation intake_height gps_altitude
#>         <num>     <num>          <num>     <num>         <num>        <num>
#>   1:  34.4790 -116.4090        7983.10       NaN           NaN          NaN
#>   2:  34.4675 -116.4360        7907.00       NaN           NaN          NaN
#>   3:  34.4525 -116.4720        7796.40       NaN           NaN          NaN
#>   4:  34.4375 -116.5075        7615.25       NaN           NaN          NaN
#>   5:  34.4225 -116.5430        7413.90       NaN           NaN          NaN
#>  ---                                                                       
#> 115:  33.9955 -118.2480        1113.10       NaN           NaN          NaN
#> 116:  33.9935 -118.2705         983.70       NaN           NaN          NaN
#> 117:  33.9915 -118.2925         855.05       NaN           NaN          NaN
#> 118:  33.9895 -118.3145         753.00       NaN           NaN          NaN
#> 119:  33.9875 -118.3340         648.10       NaN           NaN          NaN
#>      pressure pressure_altitude           u         v temperature type_altitude
#>         <num>             <num>       <num>     <num>       <num>         <num>
#>   1:   481.30               NaN 20.82002449 -4.235882      257.65             1
#>   2:   485.65               NaN 21.46781063 -3.550151      258.30             1
#>   3:   491.60               NaN 22.83116627 -2.518281      259.05             1
#>   4:   505.15               NaN 25.19994354 -1.720480      260.95             1
#>   5:   517.75               NaN 26.27869606 -3.928331      262.50             1
#>  ---                                                                           
#> 115:   947.15               NaN  0.40699802 -4.795110      288.90             1
#> 116:   961.05               NaN  0.16893618 -4.854677      290.10             1
#> 117:   976.05               NaN  0.05610672 -6.043770      291.35             1
#> 118:   978.35               NaN -0.99867356 -5.014345      291.60             1
#> 119:   981.70               NaN -1.99368972 -5.770015      291.90             1
#>               local_time    lh
#>                   <POSc> <int>
#>   1: 2020-01-08 15:14:01    15
#>   2: 2020-01-08 15:14:15    15
#>   3: 2020-01-08 15:14:26    15
#>   4: 2020-01-08 15:14:38    15
#>   5: 2020-01-08 15:14:49    15
#>  ---                          
#> 115: 2020-03-02 15:02:20    15
#> 116: 2020-03-02 15:02:35    15
#> 117: 2020-03-02 15:02:49    15
#> 118: 2020-03-02 15:03:04    15
#> 119: 2020-03-02 15:03:19    15

Master

Before generating the receptors list, we have the databe with all the required information

master <- df3

We may replace missing values with a nine nines. Here is commented

#master[is.na(master)] <- 999999999

We transform the time variables to character and round coordinates with 4 digits

master$timeUTC <- as.character(master$timeUTC)
master$local_time <- as.character(master$local_time)
master$latitude <- round(master$latitude, 4)
master$longitude <- round(master$longitude, 4)

Save master

Finally we save the master file

out <- tempfile()

txt

message(paste0(out,"_", datasetid, ".txt\n"))
fwrite(master,
       paste0(out,"_", datasetid, ".txt"),
       sep = " ")
#> C:\Users\sibarrae\AppData\Local\Temp\RtmpCmgiyH\file7abc7b936bd2_aircraft-insitu.txt

csv

message(paste0(out,"_", datasetid, ".csv\n"))
fwrite(master,
       paste0(out,"_", datasetid, ".csv"),
       sep = ",")
#> C:\Users\sibarrae\AppData\Local\Temp\RtmpCmgiyH\file7abc7b936bd2_aircraft-insitu.csv

csvy

CSVY are csv files with a YAML header to include metadata in tabulated text files

cat("\nAdding notes in csvy:\n")
notes <- c(paste0("sector: ", datasetid),
           paste0("timespan: ", yy),
           paste0("spatial_limits: north = ", north, ", south = ", south, ", east = ", east, ", west = ", west),
           "data: Data averaged every 20 seconds",
           paste0("altitude: < ", max_altitude),
           "hours: All",
           "local_time: if var `site_utc2lst` is not available, calculated as",
           "longitude/15*60*60 (John Miller)")

cat(notes, sep = "\n")

message(paste0(out,"_", datasetid, ".csvy\n"))
obs_write_csvy(dt = master,
               notes = notes,
               out = paste0(out,"_", datasetid, ".csvy"))
#> sector: aircraft-insitu
#> timespan: 2020
#> spatial_limits: north = 80, south = 10, east = -50, west = -170
#> data: Data averaged every 20 seconds
#> altitude: < 8000
#> hours: All
#> local_time: if var `site_utc2lst` is not available, calculated as
#> longitude/15*60*60 (John Miller)
#> C:\Users\sibarrae\AppData\Local\Temp\RtmpCmgiyH\file7abc7b936bd2_aircraft-insitu.csvy
obs_read_csvy(paste0(out,"_", datasetid, ".csvy"))
#>  [1] "---"                                                               
#>  [2] "name: Metadata "                                                   
#>  [3] "sector: aircraft-insitu"                                           
#>  [4] "timespan: 2020"                                                    
#>  [5] "spatial_limits: north = 80, south = 10, east = -50, west = -170"   
#>  [6] "data: Data averaged every 20 seconds"                              
#>  [7] "altitude: < 8000"                                                  
#>  [8] "hours: All"                                                        
#>  [9] "local_time: if var `site_utc2lst` is not available, calculated as" 
#> [10] "longitude/15*60*60 (John Miller)"                                  
#> [11] "structure: "                                                       
#> [12] "Classes 'data.table' and 'data.frame':\t119 obs. of  27 variables:"
#> [13] " $ timeUTC                  : chr  \"2020-01-08 22:59:40\" \".."   
#> [14] " $ site_code                : chr  \"IAGOS\" \"IAGOS\" ..."        
#> [15] " $ lab_1_abbr               : chr  \"KIT/IMK-ASF\" \"KIT/IMK\".."  
#> [16] " $ dataset_calibration_scale: chr  \"WMO CH4 X2004A\" \"WMO \".."  
#> [17] " $ year                     : int  2020 2020 2020 2020 202.."      
#> [18] " $ month                    : int  1 1 1 1 1 ..."                  
#> [19] " $ day                      : chr  \"08\" \"08\" ..."              
#> [20] " $ hour                     : int  22 23 23 23 23 ..."             
#> [21] " $ minute                   : int  59 0 0 0 1 ..."                 
#> [22] " $ second                   : int  40 0 20 40 0 ..."               
#> [23] " $ time                     : num  1.58e+09 1.58e+09 ..."          
#> [24] " $ time_decimal             : num  2020 2020 ..."                  
#> [25] " $ value                    : num  1.91e-06 1.91e-06 ..."          
#> [26] " $ latitude                 : num  34.5 34.5 ..."                  
#> [27] " $ longitude                : num  -116 -116 ..."                  
#> [28] " $ altitude_final           : num  7983 7907 ..."                  
#> [29] " $ elevation                : num  NaN NaN NaN NaN NaN ..."        
#> [30] " $ intake_height            : num  NaN NaN NaN NaN NaN ..."        
#> [31] " $ gps_altitude             : num  NaN NaN NaN NaN NaN ..."        
#> [32] " $ pressure                 : num  481 486 ..."                    
#> [33] " $ pressure_altitude        : num  NaN NaN NaN NaN NaN ..."        
#> [34] " $ u                        : num  20.8 21.5 ..."                  
#> [35] " $ v                        : num  -4.24 -3.55 ..."                
#> [36] " $ temperature              : num  258 258 ..."                    
#> [37] " $ type_altitude            : num  1 1 1 1 1 ..."                  
#> [38] " $ local_time               : chr  \"2020-01-08 15:14:01.8\".."    
#> [39] " $ lh                       : int  15 15 15 15 15 ..."             
#> [40] " - attr(*, \".internal.selfref\")=<externalptr> "                  
#> [41] "NULL"                                                              
#> [42] "---"
#>                  timeUTC site_code  lab_1_abbr dataset_calibration_scale  year
#>                   <POSc>    <char>      <char>                    <char> <int>
#>   1: 2020-01-08 22:59:40     IAGOS KIT/IMK-ASF            WMO CH4 X2004A  2020
#>   2: 2020-01-08 23:00:00     IAGOS KIT/IMK-ASF            WMO CH4 X2004A  2020
#>   3: 2020-01-08 23:00:20     IAGOS KIT/IMK-ASF            WMO CH4 X2004A  2020
#>   4: 2020-01-08 23:00:40     IAGOS KIT/IMK-ASF            WMO CH4 X2004A  2020
#>   5: 2020-01-08 23:01:00     IAGOS KIT/IMK-ASF            WMO CH4 X2004A  2020
#>  ---                                                                          
#> 115: 2020-03-02 22:55:20     IAGOS KIT/IMK-ASF            WMO CH4 X2004A  2020
#> 116: 2020-03-02 22:55:40     IAGOS KIT/IMK-ASF            WMO CH4 X2004A  2020
#> 117: 2020-03-02 22:56:00     IAGOS KIT/IMK-ASF            WMO CH4 X2004A  2020
#> 118: 2020-03-02 22:56:20     IAGOS KIT/IMK-ASF            WMO CH4 X2004A  2020
#> 119: 2020-03-02 22:56:40     IAGOS KIT/IMK-ASF            WMO CH4 X2004A  2020
#>      month   day  hour minute second       time time_decimal       value
#>      <int> <int> <int>  <int>  <int>      <int>        <num>       <num>
#>   1:     1     8    22     59     40 1578524380     2020.022 1.90980e-06
#>   2:     1     8    23      0      0 1578524400     2020.022 1.90885e-06
#>   3:     1     8    23      0     20 1578524420     2020.022 1.90775e-06
#>   4:     1     8    23      0     40 1578524440     2020.022 1.90815e-06
#>   5:     1     8    23      1      0 1578524460     2020.022 1.90780e-06
#>  ---                                                                    
#> 115:     3     2    22     55     20 1583189720     2020.169 1.94435e-06
#> 116:     3     2    22     55     40 1583189740     2020.169 1.94785e-06
#> 117:     3     2    22     56      0 1583189760     2020.169 1.95025e-06
#> 118:     3     2    22     56     20 1583189780     2020.169 1.95040e-06
#> 119:     3     2    22     56     40 1583189800     2020.169 1.94940e-06
#>      latitude longitude altitude_final elevation intake_height gps_altitude
#>         <num>     <num>          <num>    <lgcl>        <lgcl>       <lgcl>
#>   1:  34.4790 -116.4090        7983.10        NA            NA           NA
#>   2:  34.4675 -116.4360        7907.00        NA            NA           NA
#>   3:  34.4525 -116.4720        7796.40        NA            NA           NA
#>   4:  34.4375 -116.5075        7615.25        NA            NA           NA
#>   5:  34.4225 -116.5430        7413.90        NA            NA           NA
#>  ---                                                                       
#> 115:  33.9955 -118.2480        1113.10        NA            NA           NA
#> 116:  33.9935 -118.2705         983.70        NA            NA           NA
#> 117:  33.9915 -118.2925         855.05        NA            NA           NA
#> 118:  33.9895 -118.3145         753.00        NA            NA           NA
#> 119:  33.9875 -118.3340         648.10        NA            NA           NA
#>      pressure pressure_altitude           u         v temperature type_altitude
#>         <num>            <lgcl>       <num>     <num>       <num>         <int>
#>   1:   481.30                NA 20.82002449 -4.235882      257.65             1
#>   2:   485.65                NA 21.46781063 -3.550151      258.30             1
#>   3:   491.60                NA 22.83116627 -2.518281      259.05             1
#>   4:   505.15                NA 25.19994354 -1.720480      260.95             1
#>   5:   517.75                NA 26.27869606 -3.928331      262.50             1
#>  ---                                                                           
#> 115:   947.15                NA  0.40699802 -4.795110      288.90             1
#> 116:   961.05                NA  0.16893618 -4.854677      290.10             1
#> 117:   976.05                NA  0.05610672 -6.043770      291.35             1
#> 118:   978.35                NA -0.99867356 -5.014345      291.60             1
#> 119:   981.70                NA -1.99368972 -5.770015      291.90             1
#>               local_time    lh
#>                   <POSc> <int>
#>   1: 2020-01-08 15:14:01    15
#>   2: 2020-01-08 15:14:15    15
#>   3: 2020-01-08 15:14:26    15
#>   4: 2020-01-08 15:14:38    15
#>   5: 2020-01-08 15:14:49    15
#>  ---                          
#> 115: 2020-03-02 15:02:20    15
#> 116: 2020-03-02 15:02:35    15
#> 117: 2020-03-02 15:02:49    15
#> 118: 2020-03-02 15:03:04    15
#> 119: 2020-03-02 15:03:19    15

Receptors

Now we can do the last step which is generating the receptor list files. Now we filter selected columns

receptor <- master[, c("site_code",
                       "year",
                       "month",
                       "day",
                       "hour",
                       "minute",
                       "second",
                       "latitude",
                       "longitude",
                       "altitude_final",
                       "type_altitude")]

We can round altitude also

receptor$altitude_final <- round(receptor$altitude_final)

Now we can format time variables with two digits

receptor <- obs_format(receptor,
                        spf =  c("month", "day",
                                 "hour", "minute", "second"))

We have a column that indicate AGL or ASL

receptor_agl <- receptor[type_altitude == 0]
receptor_asl <- receptor[type_altitude == 1]

Finally, we save the receptors

if(nrow(receptor_agl) > 0) {
  message(paste0(out, "_", datasetid, "_receptor_AGL.txt"), "\n")

  fwrite(x = receptor_agl,
         file = paste0(out, "_", datasetid, "_receptor_AGL.txt"),
         sep = " ")
}

if(nrow(receptor_asl) > 0) {
  message(paste0(out, "_", datasetid, "_receptor_ASL.txt"), "\n")

  fwrite(x = receptor_asl,
         file = paste0(out, "_", datasetid, "receptor_ASL.txt"),
         sep = " ")

}
#> C:\Users\sibarrae\AppData\Local\Temp\RtmpCmgiyH\file7abc7b936bd2_aircraft-insitu_receptor_ASL.txt

Plot

Finally, we just plot some data, run it locally

obs_plot(df3, time = "timeUTC", yfactor = 1e9)
Time Series
Time Series
library(sf)
x <- st_as_sf(df3, coords = c("longitude", "latitude"), crs = 4326)
plot(x["value"], axes = T, reset = F)
maps::map(add = T)
Map
Map
x <- df3
x$ch4 <- x$value*1e+9
obs_plot(x, 
         time = "ch4", 
         y = "altitude_final", 
         colu = "month", #n = c(1L, 3L, 6L, 8L, 9L, 11L, 12L), 
         type = "b", 
         xlab = expression(CH[4]~ppb), 
         ylab = "altitude (m)")
Vertical profiles
Vertical profiles