找出在LCA中发出特定生物圈流的所有过程

时间:2017-01-25 09:37:26

标签: brightway

我需要找到在LCA中使用/发射某种生物圈流的过程。我看到here有些方法看起来像我需要但是它们被注释掉了。他们真的是我想找的吗?如果没有,有没有办法得到这个?

1 个答案:

答案 0 :(得分:2)

天真的方法

您可以遍历数据库中的所有生物圈交换:

db = Database("ecoinvent 3.2 cutoff")
some_flow = Database("biosphere3").random()
consumers = {
    exc.output 
    for ds in db 
    for exc in ds.biosphere() 
    if exc.input == some_flow
}

这很简单易懂,但速度很慢。

高级方法

您可以对基础数据库执行SQL查询:

from bw2data.backends.peewee import ExchangeDataset
consumers_fast = [
    get_activity((db.name, obj[0])) for obj in 
    ExchangeDataset.select(ExchangeDataset.output_code).where(
        (ExchangeDataset.input_database == some_flow['database']) &
        (ExchangeDataset.input_code == some_flow['code']) & 
        (ExchangeDataset.output_database == db.name)
    ).distinct().tuples()
]

注意:next Brightway

中的高级查询类型会更容易

检查LCA对象

中的生物圈矩阵

您还可以从构造的LCA对象中获取此信息:

lca = LCA({db.random(): 1})
lca.lci()
row = lca.biosphere_dict[some_flow]
col_indices = lca.biosphere_matrix[row, :].tocoo()
ra, _, _ = lca.reverse_dict()
consumers_lca = [get_activity(ra[index]) for index in col_indices.col]
consumers_lca

如果您还想从构建的LCA对象中获取库存量:

lca = LCA({db.random(): 1})
lca.lci()
row = lca.biosphere_dict[some_flow]
col_indices = lca.biosphere_matrix[row, :].tocoo()
ra, _, _ = lca.reverse_dict()
amount_consumers_lca = [lca.inventory[row, index] for index in col_indices.col]
amount_consumers_lca

使用此功能,您可以仅使用/发送生物圈流程(LCA)从某个进程(list_of_processes)获取构建的some_flow对象的库存量:

process_keys = [obj.key for obj in Database("lci_db") if obj["name"] in list_of_processes]
lca = LCA({db.random(): 1})
lca.lci()
row = lca.biosphere_dict[some_flow]
col_indices = lca.biosphere_matrix[row, :].tocoo()
ra, _, _ = lca.reverse_dict()
amount_process_keys_lca = [lca.inventory[row, index] for index in col_indices.col if ra[index] in process_keys]

amount_process_keys_lca