For most industrial sectors, technology components are extracted from technology-level input, output, and cost nodes:
for $s in collection()/scenario[@name = "{scenario}"]
for $r in $s/world/*[@type = "region" and string(@name) = $regions]
for $sec in $r/*[@type = "sector" and string(@name) = $sectors]
for $sub in $sec/*[@type = "subsector"]
for $tech in $sub/*[@type = "technology"]
let $year := number($tech/@year)
let $secCost := string(($sec/cost[number(@year) = $year])[1])
let $techCost := string(($tech/cost[number(@year) = $year])[1])
let $techOutput := sum($tech/*[@type = "output"]/physical-output[@vintage = $year]/number(.))
where $year = $years and $techOutput > 0
return ...
Each technology row is decomposed into component types:
| component_type | meaning | source |
|---|---|---|
input |
energy or material input | technology/input |
secondary_output_credit |
secondary output value offset | technology/output-secondary |
no_component |
technology with no inputs | technology leaf |
| field | meaning |
|---|---|
io_coefficient |
input-output coefficient |
demand_physical |
physical input demand |
component_price |
input price (marketplace or sector cost lookup) |
component_price_source |
where the price was found |
carbon_content |
carbon content per unit input |
secondary_physical_output |
secondary output quantity |
Transport uses a different formula with load-factor and direct_price_paid:
TranTechnology nodes instead of generic technologyload_factor and direct_price_paid fieldscarbon_contentAfter extracting components, aggregate by scenario, region, sector, and year using output_proxy (physical output or input-derived proxy) as weights:
weighted_cost = sum(tech_cost_i * output_proxy_i) / sum(output_proxy_i)
This produces component summaries:
energy_material_costnon_energy_costcapital_om_costsecondary_creditreported_co2_costresidual_after_reported_co2