System

The System is the main container of components and the time series data references. PowerSystems.jl uses a hybrid approach to data storage, where the component data and time series references are stored in volatile memory while the actual time series data is stored in an HDF5 file. This design loads into memory the portions of the data that are relevant at time of the query, and so avoids overwhelming the memory resources.

Accessing components stored in the system

PowerSystems.jl implements a wide variety of methods to search for components to aid in the development of models. The code block shows an example of retrieving components through the type hierarchy with the get_components function and exploiting the type hierarchy for modeling purposes.

The default implementation of the function get_components takes the desired device type (concrete or abstract) and the system and it also accepts filter functions for a more refined search. The container is optimized for iteration over abstract or concrete component types as described by the Type Structure. Given the potential size of the return, PowerSystems.jl returns Julia iterators in order to avoid unnecessary memory allocations.

julia> using PowerSystems
julia> file_dir = joinpath(pkgdir(PowerSystems), "docs", "src", "tutorials", "tutorials_data")"/home/runner/work/PowerSystems.jl/PowerSystems.jl/docs/src/tutorials/tutorials_data"
julia> system = System(joinpath(file_dir, "RTS_GMLC.m"));┌ Error: Matlab parser skipping line number 802 consisting of: │ ]; └ @ PowerSystems ~/work/PowerSystems.jl/PowerSystems.jl/src/parsers/im_io/matlab.jl:64 [ Info: Correcting vm in bus 101 to 1.0468 to match generator set-point [ Info: Correcting vm in bus 102 to 1.0467 to match generator set-point [ Info: Correcting vm in bus 107 to 1.05 to match generator set-point [ Info: Correcting vm in bus 113 to 1.0347 to match generator set-point [ Info: Correcting vm in bus 115 to 1.0428 to match generator set-point [ Info: Correcting vm in bus 116 to 1.0461 to match generator set-point [ Info: Correcting vm in bus 201 to 1.05 to match generator set-point [ Info: Correcting vm in bus 202 to 1.05 to match generator set-point [ Info: Correcting vm in bus 207 to 0.9699 to match generator set-point [ Info: Correcting vm in bus 213 to 1.05 to match generator set-point [ Info: Correcting vm in bus 215 to 1.0437 to match generator set-point [ Info: Correcting vm in bus 216 to 1.0473 to match generator set-point [ Info: Correcting vm in bus 301 to 1.05 to match generator set-point [ Info: Correcting vm in bus 302 to 1.05 to match generator set-point [ Info: Correcting vm in bus 307 to 0.9568 to match generator set-point [ Info: Correcting vm in bus 313 to 1.0 to match generator set-point [ Info: Correcting vm in bus 315 to 1.0422 to match generator set-point [ Info: Correcting vm in bus 316 to 1.0449 to match generator set-point [ Info: Correcting vm in bus 114 to 1.0441 to match generator set-point [ Info: Correcting vm in bus 214 to 1.05 to match generator set-point [ Info: Correcting vm in bus 314 to 1.0 to match generator set-point [ Info: Correcting vm in bus 118 to 1.0 to match generator set-point [ Info: Correcting vm in bus 122 to 1.0 to match generator set-point [ Info: extending matpower format with data: areas 3x3 [ Info: extending matpower format with data: gen_name 158x4 [ Info: added zero cost function data for dclines [ Info: extending matpower format by appending matrix "gen_name" in to "gen" [ Info: this code only supports angmin values in -90 deg. to 90 deg., tightening the value on branch 32 from -90.0 to -60.0 deg. [ Info: this code only supports angmax values in -90 deg. to 90 deg., tightening the value on branch 32 from 90.0 to 60.0 deg. [ Info: this code only supports angmin values in -90 deg. to 90 deg., tightening the value on branch 29 from -90.0 to -60.0 deg. [ Info: this code only supports angmax values in -90 deg. to 90 deg., tightening the value on branch 29 from 90.0 to 60.0 deg. [ Info: this code only supports angmin values in -90 deg. to 90 deg., tightening the value on branch 1 from -90.0 to -60.0 deg. [ Info: this code only supports angmax values in -90 deg. to 90 deg., tightening the value on branch 1 from 90.0 to 60.0 deg. [ Info: this code only supports angmin values in -90 deg. to 90 deg., tightening the value on branch 54 from -90.0 to -60.0 deg. [ Info: this code only supports angmax values in -90 deg. to 90 deg., tightening the value on branch 54 from 90.0 to 60.0 deg. [ Info: this code only supports angmin values in -90 deg. to 90 deg., tightening the value on branch 78 from -90.0 to -60.0 deg. [ Info: this code only supports angmax values in -90 deg. to 90 deg., tightening the value on branch 78 from 90.0 to 60.0 deg. [ Info: this code only supports angmin values in -90 deg. to 90 deg., tightening the value on branch 81 from -90.0 to -60.0 deg. [ Info: this code only supports angmax values in -90 deg. to 90 deg., tightening the value on branch 81 from 90.0 to 60.0 deg. [ Info: this code only supports angmin values in -90 deg. to 90 deg., tightening the value on branch 101 from -90.0 to -60.0 deg. [ Info: this code only supports angmax values in -90 deg. to 90 deg., tightening the value on branch 101 from 90.0 to 60.0 deg. [ Info: this code only supports angmin values in -90 deg. to 90 deg., tightening the value on branch 2 from -90.0 to -60.0 deg. [ Info: this code only supports angmax values in -90 deg. to 90 deg., tightening the value on branch 2 from 90.0 to 60.0 deg. [ Info: this code only supports angmin values in -90 deg. to 90 deg., tightening the value on branch 105 from -90.0 to -60.0 deg. [ Info: this code only supports angmax values in -90 deg. to 90 deg., tightening the value on branch 105 from 90.0 to 60.0 deg. [ Info: this code only supports angmin values in -90 deg. to 90 deg., tightening the value on branch 109 from -90.0 to -60.0 deg. [ Info: this code only supports angmax values in -90 deg. to 90 deg., tightening the value on branch 109 from 90.0 to 60.0 deg. [ Info: this code only supports angmin values in -90 deg. to 90 deg., tightening the value on branch 74 from -90.0 to -60.0 deg. [ Info: this code only supports angmax values in -90 deg. to 90 deg., tightening the value on branch 74 from 90.0 to 60.0 deg. [ Info: this code only supports angmin values in -90 deg. to 90 deg., tightening the value on branch 41 from -90.0 to -60.0 deg. [ Info: this code only supports angmax values in -90 deg. to 90 deg., tightening the value on branch 41 from 90.0 to 60.0 deg. [ Info: this code only supports angmin values in -90 deg. to 90 deg., tightening the value on branch 65 from -90.0 to -60.0 deg. [ Info: this code only supports angmax values in -90 deg. to 90 deg., tightening the value on branch 65 from 90.0 to 60.0 deg. [ Info: this code only supports angmin values in -90 deg. to 90 deg., tightening the value on branch 51 from -90.0 to -60.0 deg. [ Info: this code only supports angmax values in -90 deg. to 90 deg., tightening the value on branch 51 from 90.0 to 60.0 deg. [ Info: this code only supports angmin values in -90 deg. to 90 deg., tightening the value on branch 53 from -90.0 to -60.0 deg. [ Info: this code only supports angmax values in -90 deg. to 90 deg., tightening the value on branch 53 from 90.0 to 60.0 deg. [ Info: this code only supports angmin values in -90 deg. to 90 deg., tightening the value on branch 106 from -90.0 to -60.0 deg. [ Info: this code only supports angmax values in -90 deg. to 90 deg., tightening the value on branch 106 from 90.0 to 60.0 deg. [ Info: this code only supports angmin values in -90 deg. to 90 deg., tightening the value on branch 119 from -90.0 to -60.0 deg. [ Info: this code only supports angmax values in -90 deg. to 90 deg., tightening the value on branch 119 from 90.0 to 60.0 deg. [ Info: this code only supports angmin values in -90 deg. to 90 deg., tightening the value on branch 27 from -90.0 to -60.0 deg. [ Info: this code only supports angmax values in -90 deg. to 90 deg., tightening the value on branch 27 from 90.0 to 60.0 deg. [ Info: this code only supports angmin values in -90 deg. to 90 deg., tightening the value on branch 75 from -90.0 to -60.0 deg. [ Info: this code only supports angmax values in -90 deg. to 90 deg., tightening the value on branch 75 from 90.0 to 60.0 deg. [ Info: this code only supports angmin values in -90 deg. to 90 deg., tightening the value on branch 42 from -90.0 to -60.0 deg. [ Info: this code only supports angmax values in -90 deg. to 90 deg., tightening the value on branch 42 from 90.0 to 60.0 deg. [ Info: this code only supports angmin values in -90 deg. to 90 deg., tightening the value on branch 33 from -90.0 to -60.0 deg. [ Info: this code only supports angmax values in -90 deg. to 90 deg., tightening the value on branch 33 from 90.0 to 60.0 deg. [ Info: this code only supports angmin values in -90 deg. to 90 deg., tightening the value on branch 28 from -90.0 to -60.0 deg. [ Info: this code only supports angmax values in -90 deg. to 90 deg., tightening the value on branch 28 from 90.0 to 60.0 deg. [ Info: this code only supports angmin values in -90 deg. to 90 deg., tightening the value on branch 50 from -90.0 to -60.0 deg. [ Info: this code only supports angmax values in -90 deg. to 90 deg., tightening the value on branch 50 from 90.0 to 60.0 deg. [ Info: this code only supports angmin values in -90 deg. to 90 deg., tightening the value on branch 52 from -90.0 to -60.0 deg. [ Info: this code only supports angmax values in -90 deg. to 90 deg., tightening the value on branch 52 from 90.0 to 60.0 deg. [ Info: this code only supports angmin values in -90 deg. to 90 deg., tightening the value on branch 111 from -90.0 to -60.0 deg. [ Info: this code only supports angmax values in -90 deg. to 90 deg., tightening the value on branch 111 from 90.0 to 60.0 deg. [ Info: this code only supports angmin values in -90 deg. to 90 deg., tightening the value on branch 63 from -90.0 to -60.0 deg. [ Info: this code only supports angmax values in -90 deg. to 90 deg., tightening the value on branch 63 from 90.0 to 60.0 deg. [ Info: this code only supports angmin values in -90 deg. to 90 deg., tightening the value on branch 115 from -90.0 to -60.0 deg. [ Info: this code only supports angmax values in -90 deg. to 90 deg., tightening the value on branch 115 from 90.0 to 60.0 deg. [ Info: this code only supports angmin values in -90 deg. to 90 deg., tightening the value on branch 92 from -90.0 to -60.0 deg. [ Info: this code only supports angmax values in -90 deg. to 90 deg., tightening the value on branch 92 from 90.0 to 60.0 deg. [ Info: this code only supports angmin values in -90 deg. to 90 deg., tightening the value on branch 88 from -90.0 to -60.0 deg. [ Info: this code only supports angmax values in -90 deg. to 90 deg., tightening the value on branch 88 from 90.0 to 60.0 deg. [ Info: this code only supports angmin values in -90 deg. to 90 deg., tightening the value on branch 93 from -90.0 to -60.0 deg. [ Info: this code only supports angmax values in -90 deg. to 90 deg., tightening the value on branch 93 from 90.0 to 60.0 deg. [ Info: this code only supports angmin values in -90 deg. to 90 deg., tightening the value on branch 26 from -90.0 to -60.0 deg. [ Info: this code only supports angmax values in -90 deg. to 90 deg., tightening the value on branch 26 from 90.0 to 60.0 deg. [ Info: this code only supports angmin values in -90 deg. to 90 deg., tightening the value on branch 10 from -90.0 to -60.0 deg. [ Info: this code only supports angmax values in -90 deg. to 90 deg., tightening the value on branch 10 from 90.0 to 60.0 deg. [ Info: this code only supports angmin values in -90 deg. to 90 deg., tightening the value on branch 120 from -90.0 to -60.0 deg. [ Info: this code only supports angmax values in -90 deg. to 90 deg., tightening the value on branch 120 from 90.0 to 60.0 deg. [ Info: this code only supports angmin values in -90 deg. to 90 deg., tightening the value on branch 77 from -90.0 to -60.0 deg. [ Info: this code only supports angmax values in -90 deg. to 90 deg., tightening the value on branch 77 from 90.0 to 60.0 deg. [ Info: this code only supports angmin values in -90 deg. to 90 deg., tightening the value on branch 24 from -90.0 to -60.0 deg. [ Info: this code only supports angmax values in -90 deg. to 90 deg., tightening the value on branch 24 from 90.0 to 60.0 deg. [ Info: this code only supports angmin values in -90 deg. to 90 deg., tightening the value on branch 87 from -90.0 to -60.0 deg. [ Info: this code only supports angmax values in -90 deg. to 90 deg., tightening the value on branch 87 from 90.0 to 60.0 deg. [ Info: this code only supports angmin values in -90 deg. to 90 deg., tightening the value on branch 117 from -90.0 to -60.0 deg. [ Info: this code only supports angmax values in -90 deg. to 90 deg., tightening the value on branch 117 from 90.0 to 60.0 deg. [ Info: this code only supports angmin values in -90 deg. to 90 deg., tightening the value on branch 58 from -90.0 to -60.0 deg. [ Info: this code only supports angmax values in -90 deg. to 90 deg., tightening the value on branch 58 from 90.0 to 60.0 deg. [ Info: this code only supports angmin values in -90 deg. to 90 deg., tightening the value on branch 25 from -90.0 to -60.0 deg. [ Info: this code only supports angmax values in -90 deg. to 90 deg., tightening the value on branch 25 from 90.0 to 60.0 deg. [ Info: this code only supports angmin values in -90 deg. to 90 deg., tightening the value on branch 114 from -90.0 to -60.0 deg. [ Info: this code only supports angmax values in -90 deg. to 90 deg., tightening the value on branch 114 from 90.0 to 60.0 deg. [ Info: this code only supports angmin values in -90 deg. to 90 deg., tightening the value on branch 23 from -90.0 to -60.0 deg. [ Info: this code only supports angmax values in -90 deg. to 90 deg., tightening the value on branch 23 from 90.0 to 60.0 deg. [ Info: this code only supports angmin values in -90 deg. to 90 deg., tightening the value on branch 49 from -90.0 to -60.0 deg. [ Info: this code only supports angmax values in -90 deg. to 90 deg., tightening the value on branch 49 from 90.0 to 60.0 deg. [ Info: this code only supports angmin values in -90 deg. to 90 deg., tightening the value on branch 59 from -90.0 to -60.0 deg. [ Info: this code only supports angmax values in -90 deg. to 90 deg., tightening the value on branch 59 from 90.0 to 60.0 deg. [ Info: this code only supports angmin values in -90 deg. to 90 deg., tightening the value on branch 5 from -90.0 to -60.0 deg. [ Info: this code only supports angmax values in -90 deg. to 90 deg., tightening the value on branch 5 from 90.0 to 60.0 deg. [ Info: this code only supports angmin values in -90 deg. to 90 deg., tightening the value on branch 31 from -90.0 to -60.0 deg. [ Info: this code only supports angmax values in -90 deg. to 90 deg., tightening the value on branch 31 from 90.0 to 60.0 deg. [ Info: this code only supports angmin values in -90 deg. to 90 deg., tightening the value on branch 89 from -90.0 to -60.0 deg. [ Info: this code only supports angmax values in -90 deg. to 90 deg., tightening the value on branch 89 from 90.0 to 60.0 deg. [ Info: this code only supports angmin values in -90 deg. to 90 deg., tightening the value on branch 62 from -90.0 to -60.0 deg. [ Info: this code only supports angmax values in -90 deg. to 90 deg., tightening the value on branch 62 from 90.0 to 60.0 deg. [ Info: this code only supports angmin values in -90 deg. to 90 deg., tightening the value on branch 43 from -90.0 to -60.0 deg. [ Info: this code only supports angmax values in -90 deg. to 90 deg., tightening the value on branch 43 from 90.0 to 60.0 deg. [ Info: this code only supports angmin values in -90 deg. to 90 deg., tightening the value on branch 90 from -90.0 to -60.0 deg. [ Info: this code only supports angmax values in -90 deg. to 90 deg., tightening the value on branch 90 from 90.0 to 60.0 deg. [ Info: this code only supports angmin values in -90 deg. to 90 deg., tightening the value on branch 39 from -90.0 to -60.0 deg. [ Info: this code only supports angmax values in -90 deg. to 90 deg., tightening the value on branch 39 from 90.0 to 60.0 deg. [ Info: the voltage setpoint on generator 78 does not match the value at bus 122 [ Info: the voltage setpoint on generator 105 does not match the value at bus 324 [ Info: the voltage setpoint on generator 109 does not match the value at bus 324 [ Info: the voltage setpoint on generator 155 does not match the value at bus 317 [ Info: the voltage setpoint on generator 106 does not match the value at bus 312 [ Info: the voltage setpoint on generator 75 does not match the value at bus 122 [ Info: the voltage setpoint on generator 111 does not match the value at bus 319 [ Info: the voltage setpoint on generator 121 does not match the value at bus 103 [ Info: the voltage setpoint on generator 141 does not match the value at bus 320 [ Info: the voltage setpoint on generator 77 does not match the value at bus 122 [ Info: the voltage setpoint on generator 117 does not match the value at bus 212 [ Info: the voltage setpoint on generator 154 does not match the value at bus 309 [ Info: the voltage setpoint on generator 122 does not match the value at bus 119 [ Info: the voltage setpoint on generator 137 does not match the value at bus 320 [ Info: the voltage setpoint on generator 79 does not match the value at bus 122 [ Info: the voltage setpoint on generator 80 does not match the value at bus 122 [ Info: the voltage setpoint on generator 104 does not match the value at bus 310 [ Info: the voltage setpoint on generator 123 does not match the value at bus 308 [ Info: the voltage setpoint on generator 140 does not match the value at bus 320 [ Info: the voltage setpoint on generator 107 does not match the value at bus 310 [ Info: the voltage setpoint on generator 97 does not match the value at bus 320 [ Info: the voltage setpoint on generator 156 does not match the value at bus 303 [ Info: the voltage setpoint on generator 136 does not match the value at bus 320 [ Info: the voltage setpoint on generator 148 does not match the value at bus 320 [ Info: the voltage setpoint on generator 108 does not match the value at bus 324 [ Info: the voltage setpoint on generator 116 does not match the value at bus 104 [ Info: the voltage setpoint on generator 76 does not match the value at bus 122 [ Info: the voltage setpoint on generator 138 does not match the value at bus 320 [ Info: the voltage setpoint on generator 18 does not match the value at bus 118 [ Info: the from bus voltage setpoint on dc line 1 does not match the value at bus 113 [ Info: the to bus voltage setpoint on dc line 1 does not match the value at bus 316 [ Info: simplifying pwl cost on generator 78, [0.0, 0.0, 0.1666667, 0.0, 0.33333329999999994, 0.0, 0.5, 0.0] -> [0.0, 0.0, 0.5, 0.0] [ Info: simplifying pwl cost on generator 81, [0.0, 0.0, 0.1666667, 0.0, 0.33333329999999994, 0.0, 0.5, 0.0] -> [0.0, 0.0, 0.5, 0.0] [ Info: simplifying pwl cost on generator 101, [0.0, 0.0, 0.309, 0.0, 0.618, 0.0, 0.927, 0.0] -> [0.0, 0.0, 0.927, 0.0] [ Info: simplifying pwl cost on generator 105, [0.0, 0.0, 0.16566669999999997, 0.0, 0.3313333, 0.0, 0.49700000000000005, 0.0] -> [0.0, 0.0, 0.49700000000000005, 0.0] [ Info: simplifying pwl cost on generator 109, [0.0, 0.0, 0.17, 0.0, 0.34, 0.0, 0.51, 0.0] -> [0.0, 0.0, 0.51, 0.0] [ Info: simplifying pwl cost on generator 74, [3.96, 3208.986, 3.9733332999999997, 3219.79067, 3.9866667000000002, 3230.59533, 4.0, 3241.4] -> [3.96, 3208.986, 4.0, 3241.4] [ Info: simplifying pwl cost on generator 132, [0.0, 0.0, 0.20800000000000002, 0.0, 0.41600000000000004, 0.0, 0.624, 0.0] -> [0.0, 0.0, 0.624, 0.0] [ Info: simplifying pwl cost on generator 153, [0.0, 0.0, 0.044000000000000004, 0.0, 0.08800000000000001, 0.0, 0.132, 0.0] -> [0.0, 0.0, 0.132, 0.0] [ Info: simplifying pwl cost on generator 155, [0.0, 0.0, 2.6636667, 0.0, 5.3273333, 0.0, 7.9910000000000005, 0.0] -> [0.0, 0.0, 7.9910000000000005, 0.0] [ Info: simplifying pwl cost on generator 106, [0.0, 0.0, 0.31366669999999996, 0.0, 0.6273333, 0.0, 0.941, 0.0] -> [0.0, 0.0, 0.941, 0.0] [ Info: simplifying pwl cost on generator 119, [0.0, 0.0, 0.0873333, 0.0, 0.1746667, 0.0, 0.262, 0.0] -> [0.0, 0.0, 0.262, 0.0] [ Info: simplifying pwl cost on generator 75, [0.0, 0.0, 0.1666667, 0.0, 0.33333329999999994, 0.0, 0.5, 0.0] -> [0.0, 0.0, 0.5, 0.0] [ Info: simplifying pwl cost on generator 111, [0.0, 0.0, 0.6273333, 0.0, 1.2546667, 0.0, 1.882, 0.0] -> [0.0, 0.0, 1.882, 0.0] [ Info: simplifying pwl cost on generator 121, [0.0, 0.0, 0.205, 0.0, 0.41, 0.0, 0.615, 0.0] -> [0.0, 0.0, 0.615, 0.0] [ Info: simplifying pwl cost on generator 115, [0.0, 0.0, 0.0843333, 0.0, 0.1686667, 0.0, 0.253, 0.0] -> [0.0, 0.0, 0.253, 0.0] [ Info: simplifying pwl cost on generator 141, [0.0, 0.0, 0.094, 0.0, 0.188, 0.0, 0.282, 0.0] -> [0.0, 0.0, 0.282, 0.0] [ Info: pwl x value 0.0033333 is outside the bounds 0.0-0.0 on generator 92 [ Info: pwl x value 0.0066667 is outside the bounds 0.0-0.0 on generator 92 [ Info: pwl x value 0.01 is outside the bounds 0.0-0.0 on generator 92 [ Info: simplifying pwl cost on generator 92, [0.0, 0.0, 0.0033333, 0.0, 0.0066667, 0.0, 0.01, 0.0] -> [0.0, 0.0, 0.01, 0.0] [ Info: simplifying pwl cost on generator 88, [0.0, 0.0, 0.1666667, 0.0, 0.33333329999999994, 0.0, 0.5, 0.0] -> [0.0, 0.0, 0.5, 0.0] [ Info: simplifying pwl cost on generator 93, [0.0, 0.0, 0.1666667, 0.0, 0.33333329999999994, 0.0, 0.5, 0.0] -> [0.0, 0.0, 0.5, 0.0] [ Info: simplifying pwl cost on generator 120, [0.0, 0.0, 0.086, 0.0, 0.172, 0.0, 0.258, 0.0] -> [0.0, 0.0, 0.258, 0.0] [ Info: simplifying pwl cost on generator 77, [0.0, 0.0, 0.1666667, 0.0, 0.33333329999999994, 0.0, 0.5, 0.0] -> [0.0, 0.0, 0.5, 0.0] [ Info: simplifying pwl cost on generator 87, [0.0, 0.0, 0.1666667, 0.0, 0.33333329999999994, 0.0, 0.5, 0.0] -> [0.0, 0.0, 0.5, 0.0] [ Info: simplifying pwl cost on generator 117, [0.3, 0.0, 0.66, 0.0, 1.2, 0.0, 1.6, 0.0] -> [0.3, 0.0, 1.6, 0.0] [ Info: simplifying pwl cost on generator 114, [0.0, 0.0, 0.0863333, 0.0, 0.1726667, 0.0, 0.259, 0.0] -> [0.0, 0.0, 0.259, 0.0] [ Info: simplifying pwl cost on generator 154, [0.0, 0.0, 0.4943333, 0.0, 0.9886667, 0.0, 1.483, 0.0] -> [0.0, 0.0, 1.483, 0.0] [ Info: simplifying pwl cost on generator 149, [0.0, 0.0, 0.0393333, 0.0, 0.0786667, 0.0, 0.11800000000000001, 0.0] -> [0.0, 0.0, 0.11800000000000001, 0.0] [ Info: simplifying pwl cost on generator 89, [0.0, 0.0, 0.1666667, 0.0, 0.33333329999999994, 0.0, 0.5, 0.0] -> [0.0, 0.0, 0.5, 0.0] [ Info: simplifying pwl cost on generator 122, [0.0, 0.0, 0.222, 0.0, 0.444, 0.0, 0.6659999999999999, 0.0] -> [0.0, 0.0, 0.6659999999999999, 0.0] [ Info: simplifying pwl cost on generator 90, [0.0, 0.0, 0.1666667, 0.0, 0.33333329999999994, 0.0, 0.5, 0.0] -> [0.0, 0.0, 0.5, 0.0] [ Info: simplifying pwl cost on generator 143, [0.0, 0.0, 0.0323333, 0.0, 0.0646667, 0.0, 0.09699999999999999, 0.0] -> [0.0, 0.0, 0.09699999999999999, 0.0] [ Info: simplifying pwl cost on generator 112, [0.0, 0.0, 0.41700000000000004, 0.0, 0.8340000000000001, 0.0, 1.251, 0.0] -> [0.0, 0.0, 1.251, 0.0] [ Info: simplifying pwl cost on generator 129, [0.0, 0.0, 0.21266670000000001, 0.0, 0.42533329999999997, 0.0, 0.638, 0.0] -> [0.0, 0.0, 0.638, 0.0] [ Info: simplifying pwl cost on generator 150, [0.0, 0.0, 0.0373333, 0.0, 0.0746667, 0.0, 0.11199999999999999, 0.0] -> [0.0, 0.0, 0.11199999999999999, 0.0] [ Info: simplifying pwl cost on generator 137, [0.0, 0.0, 0.09, 0.0, 0.18, 0.0, 0.27, 0.0] -> [0.0, 0.0, 0.27, 0.0] [ Info: simplifying pwl cost on generator 94, [0.0, 0.0, 0.1666667, 0.0, 0.33333329999999994, 0.0, 0.5, 0.0] -> [0.0, 0.0, 0.5, 0.0] [ Info: simplifying pwl cost on generator 86, [0.0, 0.0, 0.1666667, 0.0, 0.33333329999999994, 0.0, 0.5, 0.0] -> [0.0, 0.0, 0.5, 0.0] [ Info: simplifying pwl cost on generator 126, [0.0, 0.0, 0.218, 0.0, 0.436, 0.0, 0.654, 0.0] -> [0.0, 0.0, 0.654, 0.0] [ Info: simplifying pwl cost on generator 99, [0.0, 0.0, 0.172, 0.0, 0.344, 0.0, 0.516, 0.0] -> [0.0, 0.0, 0.516, 0.0] [ Info: simplifying pwl cost on generator 152, [0.0, 0.0, 0.015, 0.0, 0.03, 0.0, 0.045, 0.0] -> [0.0, 0.0, 0.045, 0.0] [ Info: pwl x value 0.0033333 is outside the bounds 0.0-0.0 on generator 73 [ Info: pwl x value 0.0066667 is outside the bounds 0.0-0.0 on generator 73 [ Info: pwl x value 0.01 is outside the bounds 0.0-0.0 on generator 73 [ Info: simplifying pwl cost on generator 73, [0.0, 0.0, 0.0033333, 0.0, 0.0066667, 0.0, 0.01, 0.0] -> [0.0, 0.0, 0.01, 0.0] [ Info: pwl x value 0.0033333 is outside the bounds 0.0-0.0 on generator 82 [ Info: pwl x value 0.0066667 is outside the bounds 0.0-0.0 on generator 82 [ Info: pwl x value 0.01 is outside the bounds 0.0-0.0 on generator 82 [ Info: simplifying pwl cost on generator 82, [0.0, 0.0, 0.0033333, 0.0, 0.0066667, 0.0, 0.01, 0.0] -> [0.0, 0.0, 0.01, 0.0] [ Info: simplifying pwl cost on generator 79, [0.0, 0.0, 0.1666667, 0.0, 0.33333329999999994, 0.0, 0.5, 0.0] -> [0.0, 0.0, 0.5, 0.0] [ Info: simplifying pwl cost on generator 146, [0.0, 0.0, 0.030333299999999997, 0.0, 0.060666700000000004, 0.0, 0.091, 0.0] -> [0.0, 0.0, 0.091, 0.0] [ Info: simplifying pwl cost on generator 142, [0.0, 0.0, 0.031, 0.0, 0.062, 0.0, 0.09300000000000001, 0.0] -> [0.0, 0.0, 0.09300000000000001, 0.0] [ Info: simplifying pwl cost on generator 84, [0.0, 0.0, 0.1666667, 0.0, 0.33333329999999994, 0.0, 0.5, 0.0] -> [0.0, 0.0, 0.5, 0.0] [ Info: simplifying pwl cost on generator 80, [0.0, 0.0, 0.1666667, 0.0, 0.33333329999999994, 0.0, 0.5, 0.0] -> [0.0, 0.0, 0.5, 0.0] [ Info: simplifying pwl cost on generator 104, [0.0, 0.0, 0.1723333, 0.0, 0.3446667, 0.0, 0.517, 0.0] -> [0.0, 0.0, 0.517, 0.0] [ Info: simplifying pwl cost on generator 124, [0.0, 0.0, 0.33899999999999997, 0.0, 0.6779999999999999, 0.0, 1.0170000000000001, 0.0] -> [0.0, 0.0, 1.0170000000000001, 0.0] [ Info: simplifying pwl cost on generator 125, [0.0, 0.0, 0.2103333, 0.0, 0.4206667, 0.0, 0.631, 0.0] -> [0.0, 0.0, 0.631, 0.0] [ Info: simplifying pwl cost on generator 98, [0.0, 0.0, 0.172, 0.0, 0.344, 0.0, 0.516, 0.0] -> [0.0, 0.0, 0.516, 0.0] ┌ Info: Constructing System from Power Models │ data["name"] = "RTS_GMLC" └ data["source_type"] = "matpower" [ Info: Reading bus data [ Info: Reading Load data in PowerModels dict to populate System ... [ Info: Reading LoadZones data in PowerModels dict to populate System ... [ Info: Reading generator data ┌ Warning: GenericBattery should be defined as a PowerModels storage... Skipping └ @ PowerSystems ~/work/PowerSystems.jl/PowerSystems.jl/src/parsers/power_models_data.jl:551 [ Info: Reading branch data [ Info: Reading branch data [ Info: Reading DC Line data [ Info: Reading storage data
julia> thermal_gens = get_components(ThermalStandard, system)ThermalStandard Counts: ThermalStandard: 76

It is also possible to execute get_components with abstract types from the abstract tree. For instance, it is possible to retrieve all renewable generators

julia> thermal_gens = get_components(RenewableGen, system)RenewableGen Counts:
RenewableDispatch: 30
RenewableFix: 31

The most common filtering requirement is by component name and for this case the method get_component returns a single component taking the device type, system and name as arguments.

julia> my_thermal_gen = get_component(ThermalStandard, system, "323_CC_1")323_CC_1 (ThermalStandard):
   name: 323_CC_1
   available: true
   status: true
   bus: COMTE (ACBus)
   active_power: 3.55
   reactive_power: 0.3741
   rating: 3.853894134508627
   active_power_limits: (min = 1.7, max = 3.55)
   reactive_power_limits: (min = -0.25, max = 1.5)
   ramp_limits: (up = 0.0414, down = 0.0414)
   operation_cost: ThreePartCost
   base_power: 100.0
   time_limits: nothing
   must_run: false
   prime_mover_type: PrimeMovers.CC = 4
   fuel: ThermalFuels.NATURAL_GAS = 7
   services: 0-element Vector{Service}
   time_at_status: 10000.0
   dynamic_injector: nothing
   ext: Dict{String, Any}()
   time_series_container:
   InfrastructureSystems.SystemUnitsSettings:
      base_value: 100.0
      unit_system: UnitSystem.SYSTEM_BASE = 0

Accessing data stored in a component

Using the "dot" access to get a parameter value from a component is actively discouraged, use "getter" functions instead

Using code autogeneration, PowerSystems.jl implements accessor (or "getter") functions to enable the retrieval of parameters defined in the component struct fields. Julia syntax enables access to this data using the "dot" access (e.g. component.field), however this is actively discouraged for two reasons:

  1. We make no guarantees on the stability of component structure definitions. We will maintain version stability on the accessor methods.
  2. Per-unit conversions are made in the return of data from the accessor functions. (see the per-unit section for more details)

For example, the my_thermal_gen.active_power_limits parameter of a thermal generator should be accessed as follows:

julia> get_active_power_limits(my_thermal_gen)(min = 1.7, max = 3.55)

You can also view data from all instances of a concrete type in one table with the function show_components. It provides a few options:

  1. View the standard fields by accepting the defaults.
  2. Pass a dictionary where the keys are column names and the values are functions that accept a component as a single argument.
  3. Pass a vector of symbols that are field names of the type.
julia> show_components(system, ThermalStandard)ThermalStandard
┌─────────────────┬───────────┐
│ name            │ available │
├─────────────────┼───────────┤
│ 322_CT_6        │ true      │
│ 321_CC_1        │ true      │
│ 202_STEAM_3     │ true      │
│ 315_STEAM_1     │ true      │
│ 223_CT_4        │ true      │
│ 213_CT_1        │ true      │
│ 313_CC_1        │ true      │
│ 123_STEAM_2     │ true      │
│ 223_CT_6        │ true      │
│ 202_CT_2        │ true      │
│ 101_STEAM_3     │ true      │
│ 302_CT_1        │ true      │
│ 123_CT_1        │ true      │
│ 113_CT_3        │ true      │
│ 302_CT_3        │ true      │
│ 215_CT_4        │ true      │
│ 102_STEAM_3     │ true      │
│ 301_CT_4        │ true      │
│ 202_CT_1        │ true      │
│ 113_CT_2        │ true      │
│ 221_CC_1        │ true      │
│ 315_CT_7        │ true      │
│ 223_CT_5        │ true      │
│ 215_CT_5        │ true      │
│ 114_SYNC_COND_1 │ true      │
│ 323_CC_1        │ true      │
│ 101_STEAM_4     │ true      │
│ 113_CT_1        │ true      │
│ 223_STEAM_3     │ true      │
│ 318_CC_1        │ true      │
│ 307_CT_2        │ true      │
│ 213_CT_2        │ true      │
│ 113_CT_4        │ true      │
│ 315_STEAM_3     │ true      │
│ 118_CC_1        │ true      │
│ 315_CT_8        │ true      │
│ 302_CT_2        │ true      │
│ 218_CC_1        │ true      │
│ 213_CC_3        │ true      │
│ 115_STEAM_3     │ true      │
│ 323_CC_2        │ true      │
│ 101_CT_1        │ true      │
│ 314_SYNC_COND_1 │ true      │
│ 115_STEAM_2     │ true      │
│ 101_CT_2        │ true      │
│ 322_CT_5        │ true      │
│ 214_SYNC_COND_1 │ true      │
│ 315_STEAM_5     │ true      │
│ 207_CT_2        │ true      │
│ 123_STEAM_3     │ true      │
│ 223_STEAM_1     │ true      │
│ 123_CT_5        │ true      │
│ 301_CT_1        │ true      │
│ 223_STEAM_2     │ true      │
│ 202_STEAM_4     │ true      │
│ 116_STEAM_1     │ true      │
│ 315_STEAM_4     │ true      │
│ 315_STEAM_2     │ true      │
│ 115_STEAM_1     │ true      │
│ 121_NUCLEAR_1   │ true      │
│ 102_CT_2        │ true      │
│ 123_CT_4        │ true      │
│ 207_CT_1        │ true      │
│ 301_CT_3        │ true      │
│ 316_STEAM_1     │ true      │
│ 102_CT_1        │ true      │
│ 216_STEAM_1     │ true      │
│ 315_CT_6        │ true      │
│ 201_STEAM_3     │ true      │
│ 201_CT_2        │ true      │
│ 201_CT_1        │ true      │
│ 301_CT_2        │ true      │
│ 302_CT_4        │ true      │
│ 307_CT_1        │ true      │
│ 102_STEAM_4     │ true      │
│ 107_CC_1        │ true      │
└─────────────────┴───────────┘
julia> show_components(system, ThermalStandard, Dict("has_time_series" => x -> has_time_series(x)))ThermalStandard ┌─────────────────┬───────────┬─────────────────┐ │ name │ available │ has_time_series │ ├─────────────────┼───────────┼─────────────────┤ │ 322_CT_6 │ true │ false │ │ 321_CC_1 │ true │ false │ │ 202_STEAM_3 │ true │ false │ │ 315_STEAM_1 │ true │ false │ │ 223_CT_4 │ true │ false │ │ 213_CT_1 │ true │ false │ │ 313_CC_1 │ true │ false │ │ 123_STEAM_2 │ true │ false │ │ 223_CT_6 │ true │ false │ │ 202_CT_2 │ true │ false │ │ 101_STEAM_3 │ true │ false │ │ 302_CT_1 │ true │ false │ │ 123_CT_1 │ true │ false │ │ 113_CT_3 │ true │ false │ │ 302_CT_3 │ true │ false │ │ 215_CT_4 │ true │ false │ │ 102_STEAM_3 │ true │ false │ │ 301_CT_4 │ true │ false │ │ 202_CT_1 │ true │ false │ │ 113_CT_2 │ true │ false │ │ 221_CC_1 │ true │ false │ │ 315_CT_7 │ true │ false │ │ 223_CT_5 │ true │ false │ │ 215_CT_5 │ true │ false │ │ 114_SYNC_COND_1 │ true │ false │ │ 323_CC_1 │ true │ false │ │ 101_STEAM_4 │ true │ false │ │ 113_CT_1 │ true │ false │ │ 223_STEAM_3 │ true │ false │ │ 318_CC_1 │ true │ false │ │ 307_CT_2 │ true │ false │ │ 213_CT_2 │ true │ false │ │ 113_CT_4 │ true │ false │ │ 315_STEAM_3 │ true │ false │ │ 118_CC_1 │ true │ false │ │ 315_CT_8 │ true │ false │ │ 302_CT_2 │ true │ false │ │ 218_CC_1 │ true │ false │ │ 213_CC_3 │ true │ false │ │ 115_STEAM_3 │ true │ false │ │ 323_CC_2 │ true │ false │ │ 101_CT_1 │ true │ false │ │ 314_SYNC_COND_1 │ true │ false │ │ 115_STEAM_2 │ true │ false │ │ 101_CT_2 │ true │ false │ │ 322_CT_5 │ true │ false │ │ 214_SYNC_COND_1 │ true │ false │ │ 315_STEAM_5 │ true │ false │ │ 207_CT_2 │ true │ false │ │ 123_STEAM_3 │ true │ false │ │ 223_STEAM_1 │ true │ false │ │ 123_CT_5 │ true │ false │ │ 301_CT_1 │ true │ false │ │ 223_STEAM_2 │ true │ false │ │ 202_STEAM_4 │ true │ false │ │ 116_STEAM_1 │ true │ false │ │ 315_STEAM_4 │ true │ false │ │ 315_STEAM_2 │ true │ false │ │ 115_STEAM_1 │ true │ false │ │ 121_NUCLEAR_1 │ true │ false │ │ 102_CT_2 │ true │ false │ │ 123_CT_4 │ true │ false │ │ 207_CT_1 │ true │ false │ │ 301_CT_3 │ true │ false │ │ 316_STEAM_1 │ true │ false │ │ 102_CT_1 │ true │ false │ │ 216_STEAM_1 │ true │ false │ │ 315_CT_6 │ true │ false │ │ 201_STEAM_3 │ true │ false │ │ 201_CT_2 │ true │ false │ │ 201_CT_1 │ true │ false │ │ 301_CT_2 │ true │ false │ │ 302_CT_4 │ true │ false │ │ 307_CT_1 │ true │ false │ │ 102_STEAM_4 │ true │ false │ │ 107_CC_1 │ true │ false │ └─────────────────┴───────────┴─────────────────┘
julia> show_components(system, ThermalStandard, [:active_power, :reactive_power])ThermalStandard ┌─────────────────┬───────────┬──────────────┬────────────────┐ │ name │ available │ active_power │ reactive_power │ ├─────────────────┼───────────┼──────────────┼────────────────┤ │ 322_CT_6 │ true │ 0.55 │ -0.0973 │ │ 321_CC_1 │ true │ 3.55 │ -0.0334 │ │ 202_STEAM_3 │ true │ 0.76 │ 0.0201 │ │ 315_STEAM_1 │ true │ 0.05 │ 0.06 │ │ 223_CT_4 │ true │ 0.22 │ 0.0024 │ │ 213_CT_1 │ true │ 0.55 │ 0.0923 │ │ 313_CC_1 │ true │ 3.55 │ 1.5 │ │ 123_STEAM_2 │ true │ 1.55 │ -0.0519 │ │ 223_CT_6 │ true │ 0.22 │ 0.0024 │ │ 202_CT_2 │ true │ 0.08 │ 0.0513 │ │ 101_STEAM_3 │ true │ 0.76 │ 0.0014 │ │ 302_CT_1 │ true │ 0.08 │ 0.0616 │ │ 123_CT_1 │ true │ 0.55 │ 0.0062 │ │ 113_CT_3 │ true │ 0.55 │ 0.19 │ │ 302_CT_3 │ true │ 0.55 │ 0.1099 │ │ 215_CT_4 │ true │ 0.55 │ 0.19 │ │ 102_STEAM_3 │ true │ 0.76 │ -0.0231 │ │ 301_CT_4 │ true │ 0.44 │ 0.1653 │ │ 202_CT_1 │ true │ 0.08 │ 0.0513 │ │ 113_CT_2 │ true │ 0.55 │ 0.19 │ │ 221_CC_1 │ true │ 2.9697 │ -0.0752 │ │ 315_CT_7 │ true │ 0.55 │ 0.19 │ │ 223_CT_5 │ true │ 0.22 │ 0.0024 │ │ 215_CT_5 │ true │ 0.55 │ 0.19 │ │ 114_SYNC_COND_1 │ true │ 0.0 │ 1.0332 │ │ 323_CC_1 │ true │ 3.55 │ 0.3741 │ │ 101_STEAM_4 │ true │ 0.76 │ 0.0014 │ │ 113_CT_1 │ true │ 0.55 │ 0.19 │ │ 223_STEAM_3 │ true │ 3.5 │ 0.2059 │ │ 318_CC_1 │ true │ 3.55 │ 0.6312 │ │ 307_CT_2 │ true │ 0.55 │ 0.19 │ │ 213_CT_2 │ true │ 0.55 │ 0.0923 │ │ 113_CT_4 │ true │ 0.55 │ 0.19 │ │ 315_STEAM_3 │ true │ 0.05 │ 0.06 │ │ 118_CC_1 │ true │ 3.55 │ 0.6843 │ │ 315_CT_8 │ true │ 0.55 │ 0.6 │ │ 302_CT_2 │ true │ 0.08 │ 0.0616 │ │ 218_CC_1 │ true │ 3.55 │ 0.603 │ │ 213_CC_3 │ true │ 3.55 │ 1.358 │ │ 115_STEAM_3 │ true │ 1.55 │ 0.8 │ │ 323_CC_2 │ true │ 3.55 │ 0.3741 │ │ 101_CT_1 │ true │ 0.08 │ 0.0496 │ │ 314_SYNC_COND_1 │ true │ 0.0 │ 1.6663 │ │ 115_STEAM_2 │ true │ 0.05 │ 0.06 │ │ 101_CT_2 │ true │ 0.08 │ 0.0496 │ │ 322_CT_5 │ true │ 0.55 │ -0.0973 │ │ 214_SYNC_COND_1 │ true │ 0.0 │ 1.2528 │ │ 315_STEAM_5 │ true │ 0.05 │ 0.06 │ │ 207_CT_2 │ true │ 0.55 │ 0.19 │ │ 123_STEAM_3 │ true │ 3.5 │ 0.2841 │ │ 223_STEAM_1 │ true │ 1.55 │ -0.1031 │ │ 123_CT_5 │ true │ 0.55 │ 0.0062 │ │ 301_CT_1 │ true │ 0.08 │ 0.0795 │ │ 223_STEAM_2 │ true │ 1.55 │ -0.1031 │ │ 202_STEAM_4 │ true │ 0.76 │ 0.0201 │ │ 116_STEAM_1 │ true │ 1.55 │ 0.8 │ │ 315_STEAM_4 │ true │ 0.05 │ 0.06 │ │ 315_STEAM_2 │ true │ 0.05 │ 0.06 │ │ 115_STEAM_1 │ true │ 0.05 │ 0.06 │ │ 121_NUCLEAR_1 │ true │ 4.0 │ -0.2187 │ │ 102_CT_2 │ true │ 0.08 │ 0.0488 │ │ 123_CT_4 │ true │ 0.55 │ 0.0062 │ │ 207_CT_1 │ true │ 0.55 │ 0.19 │ │ 301_CT_3 │ true │ 0.44 │ 0.1653 │ │ 316_STEAM_1 │ true │ 1.55 │ 0.8 │ │ 102_CT_1 │ true │ 0.08 │ 0.0488 │ │ 216_STEAM_1 │ true │ 1.55 │ 0.8 │ │ 315_CT_6 │ true │ 0.55 │ 0.19 │ │ 201_STEAM_3 │ true │ 0.76 │ 0.0699 │ │ 201_CT_2 │ true │ 0.08 │ 0.0529 │ │ 201_CT_1 │ true │ 0.08 │ 0.0529 │ │ 301_CT_2 │ true │ 0.08 │ 0.0795 │ │ 302_CT_4 │ true │ 0.55 │ 0.1099 │ │ 307_CT_1 │ true │ 0.55 │ 0.19 │ │ 102_STEAM_4 │ true │ 0.76 │ -0.0231 │ │ 107_CC_1 │ true │ 3.55 │ 0.4951 │ └─────────────────┴───────────┴──────────────┴────────────────┘

Per-unit conventions and data conversions

It is often useful to express power systems data in relative terms using per-unit conventions. PowerSystems.jl supports the automatic conversion of data between three different unit systems:

  1. Natural Units: The naturally defined units of each parameter (typically MW).
  2. System Base: Parameter values are divided by the system base_power.
  3. Device Base: Parameter values are divided by the device base_mva.

To see the unit system setting of a System:

julia> get_units_base(system)"SYSTEM_BASE"

To change the unit system setting of a System:

julia> set_units_base_system!(system, "DEVICE_BASE")[ Info: Unit System changed to UnitSystem.DEVICE_BASE = 1

The units of the parameter values stored in each struct are defined in src/descriptors/power_system_structs.json. Conversion between unit systems does not change the stored parameter values. Instead, unit system conversions are made when accessing parameters using the accessor functions (see above), thus making it imperative to utilize the accessor functions instead of the "dot" accessor methods to ensure the return of the correct values.

JSON Serialization

PowerSystems.jl provides functionality to serialize an entire system to a JSON file and then deserialize it back to a system. The main benefit is that deserializing is significantly faster than reconstructing the system from raw data files.

The function that serializes the system to_json requires the system and a file name

to_json(system, "system.json")

The serialization process stores 3 files

  1. System data file (*.json file)
  2. Validation data file (*.json file)
  3. Time Series data file (*.h5 file)

To deserialize:

system2 = System("system.json")

PowerSystems generates UUIDs for the System and all components in order to have a way to uniquely identify objects. During deserialization it restores the same UUIDs. If you will modify the System or components after deserialization then it is recommended that you set this flag to generate new UUIDs.

system2 = System("system.json", assign_new_uuids = true)

Reducing REPL printing

By default PowerSystems.jl outputs to the REPL all Logging values, this can be overwhelming in some cases. Use configure_logging to create a logger with your preferences (console and/or file, levels, etc.). For more detail refer to Logging.

Example: Set log output to only error messages

using PowerSystems
using Logging
configure_logging(console_level = Logging.Error)

Note: log messages are not automatically flushed to files. Call flush(logger) to make this happen.

Refer to this page for more logging configuration options. Note that it describes how to enable debug logging for some log messages but not others.

Viewing PowerSystems Data in JSON Format

PowerSystems data can be serialized and deserialized in JSON. This section shows how to explore the data outside of Julia using.

system = System("system.json")

It can be useful to view and filter the PowerSystems data in this format. There are many tools available to browse JSON data.

Here is an example GUI tool that is available online in a browser.

The command line utility jq offers even more features. The rest of this document provides example commands.

  • View the entire file pretty-printed
jq . system.json
  • View the PowerSystems component types
jq '.data.components | .[] | .__metadata__ | .type' system.json | sort | uniq
  • View specific components
jq '.data.components | .[] | select(.__metadata__.type == "ThermalStandard")' system.json
  • Get the count of a component type
# There is almost certainly a better way.
jq '.data.components | .[] | select(.__metadata__.type == "ThermalStandard")' system.json | grep -c ThermalStandard
  • View specific component by name
jq '.data.components | .[] | select(.__metadata__.type == "ThermalStandard" and .name == "107_CC_1")' system.json
  • Filter on a field value
jq '.data.components | .[] | select(.__metadata__.type == "ThermalStandard" and .active_power > 2.3)' system.json
  • View the time series metadata for a component.
jq '.data.components | .[] | select(.__metadata__.type == "RenewableDispatch") | .time_series_container' system.json