configfile: 'config.yaml'

rule all:
    input: config['summary_dir'] + 'version-{version}/graphs/energy.pdf'.format(version=config['version'])


rule build_population:
    output:
        csv_name='data/population.csv'
    threads: 1
    resources: mem_mb=1000
    script: 'scripts/build_population.py'

rule build_population_gridcell_map:
    output:
        pop_map_name='data/population_gridcell_map.h5'
    threads: 1
    resources: mem_mb=1000
    script: 'scripts/build_population_gridcell_map.py'


rule build_solar_thermal_profiles:
    input:
        pop_map_name='data/population_gridcell_map.h5'
    output:
        h5_name='data/heating/solar_thermal-{angle}.h5'.format(angle=config['solar_thermal_angle'])
    threads: 8
    resources: mem_mb=30000
    script: 'scripts/build_solar_thermal_profiles.py'


rule build_heat_demand_profiles:
    input:
        pop_map_name='data/population_gridcell_map.h5'
    output:
        h5_name='data/heating/daily_heat_demand.h5'
    threads: 8
    resources: mem_mb=30000
    script: 'scripts/build_heat_demand_profiles.py'



rule build_cop_profiles:
    input:
        pop_map_name='data/population_gridcell_map.h5'
    output:
        h5_name='data/heating/cop.h5'
    threads: 8
    resources: mem_mb=30000
    script: 'scripts/build_cop_profiles.py'



rule build_temp_profiles:
    input:
        pop_map_name='data/population_gridcell_map.h5'
    output:
        temp='data/heating/temp.h5'
    threads: 8
    resources: mem_mb=30000
    script: 'scripts/build_temp_profiles.py'


rule build_energy_totals:
    output:
        energy_name='data/energy_totals.csv',
	co2_name='data/co2_totals.csv',
	transport_name='data/transport_data.csv'
    threads: 1
    resources: mem_mb=10000
    script: 'scripts/build_energy_totals.py'


rule make_options:
    input:
        options_name='options.yml'
    output:
        options_name=config['results_dir'] + 'version-' + str(config['version']) + '/options/options-{flexibility}_{line_limits}.yml'
    threads: 1
    resources: mem_mb=1000
    script: 'scripts/make_options.py'

rule prepare_networks:
    input:
        options_name=config['results_dir'] + 'version-' + str(config['version']) + '/options/options-{flexibility}_{line_limits}.yml',
        population_name='data/population.csv',
        solar_thermal_name='data/heating/solar_thermal-{angle}.h5'.format(angle=config['solar_thermal_angle']),
	heat_demand_name='data/heating/daily_heat_demand.h5',
	cop_name='data/heating/cop.h5',
        energy_totals_name='data/energy_totals.csv',
        co2_totals_name='data/co2_totals.csv',
        temp='data/heating/temp.h5',
	transport_name='data/transport_data.csv'
    output:
        network_name=config['results_dir'] + 'version-' + str(config['version']) + '/prenetworks/prenetwork-{flexibility}_{line_limits}.h5'
    threads: 1
    resources: mem_mb=10000
    script: 'scripts/prepare_network.py'



rule solve_networks:
    input:
        options_name=config['results_dir'] + 'version-' + str(config['version']) + '/options/options-{flexibility}_{line_limits}.yml',
        network_name=config['results_dir'] + 'version-' + str(config['version']) + '/prenetworks/prenetwork-{flexibility}_{line_limits}.h5'
    output:
        network_name=config['results_dir'] + 'version-' + str(config['version']) + '/postnetworks/postnetwork-{flexibility}_{line_limits}.h5',
	shadow_name=config['results_dir'] + 'version-' + str(config['version']) + '/postnetworks/shadow-{flexibility}_{line_limits}.csv'
    threads: 2
    resources: mem_mb=57000
    script: 'scripts/solve_network.py'


rule make_summary:
    input:
        expand(config['results_dir'] + 'version-{version}/postnetworks/postnetwork-{flexibility}_{line_limits}.h5',
               version=config['version'],
               **config['scenario']),
    	heat_demand_name='data/heating/daily_heat_demand.h5'
    output:
        costs=config['summary_dir'] + 'version-{version}/csvs/costs.csv'.format(version=config['version']),
	curtailment=config['summary_dir'] + 'version-{version}/csvs/curtailment.csv'.format(version=config['version']),
	energy=config['summary_dir'] + 'version-{version}/csvs/energy.csv'.format(version=config['version']),
	supply=config['summary_dir'] + 'version-{version}/csvs/supply.csv'.format(version=config['version']),
	supply_energy=config['summary_dir'] + 'version-{version}/csvs/supply_energy.csv'.format(version=config['version']),
	prices=config['summary_dir'] + 'version-{version}/csvs/prices.csv'.format(version=config['version']),
	weighted_prices=config['summary_dir'] + 'version-{version}/csvs/weighted_prices.csv'.format(version=config['version']),
	metrics=config['summary_dir'] + 'version-{version}/csvs/metrics.csv'.format(version=config['version'])
    threads: 2
    resources: mem_mb=10000
    script:
        'scripts/make_summary.py'

rule plot_summary:
    input:
        costs=config['summary_dir'] + 'version-{version}/csvs/costs.csv'.format(version=config['version']),
	curtailment=config['summary_dir'] + 'version-{version}/csvs/curtailment.csv'.format(version=config['version']),
	energy=config['summary_dir'] + 'version-{version}/csvs/energy.csv'.format(version=config['version']),
	supply=config['summary_dir'] + 'version-{version}/csvs/supply.csv'.format(version=config['version']),
	supply_energy=config['summary_dir'] + 'version-{version}/csvs/supply_energy.csv'.format(version=config['version']),
	prices=config['summary_dir'] + 'version-{version}/csvs/prices.csv'.format(version=config['version']),
	metrics=config['summary_dir'] + 'version-{version}/csvs/metrics.csv'.format(version=config['version'])
    output:
        costs=config['summary_dir'] + 'version-{version}/graphs/costs.pdf'.format(version=config['version']),
	energy=config['summary_dir'] + 'version-{version}/graphs/energy.pdf'.format(version=config['version'])
    threads: 2
    resources: mem_mb=10000
    script:
        'scripts/plot_summary.py'

rule paper_graphics:
    input:
        costs=config['summary_dir'] + 'version-{version}/csvs/costs.csv'.format(version=config['version']),
	supply=config['summary_dir'] + 'version-{version}/csvs/supply.csv'.format(version=config['version']),
	supply_energy=config['summary_dir'] + 'version-{version}/csvs/supply_energy.csv'.format(version=config['version']),
	metrics=config['summary_dir'] + 'version-{version}/csvs/metrics.csv'.format(version=config['version']),
	weighted_prices=config['summary_dir'] + 'version-{version}/csvs/weighted_prices.csv'.format(version=config['version'])
    output:
        chp=config['summary_dir'] +  'version-{version}/paper_graphics/chp_feasible.pdf'.format(version=config['version']),
        retrofitting=config['summary_dir'] +  'version-{version}/paper_graphics/retrofitting.pdf'.format(version=config['version']),
        retrofitting_comparison=config['summary_dir'] +  'version-{version}/paper_graphics/retrofitting-comparison.pdf'.format(version=config['version']),
	transport_profiles=config['summary_dir'] +  'version-{version}/paper_graphics/transport_profiles.pdf'.format(version=config['version']),
        transport=config['summary_dir'] +  'version-{version}/paper_graphics/transport_scenarios.pdf'.format(version=config['version']),
	heating=config['summary_dir'] +  'version-{version}/paper_graphics/heating_scenarios.pdf'.format(version=config['version']),
	supply=config['summary_dir'] + 'version-{version}/paper_graphics/supply.pdf'.format(version=config['version']),
	supply_energy=config['summary_dir'] + 'version-{version}/paper_graphics/supply_energy.pdf'.format(version=config['version'])
    threads: 2
    resources: mem_mb=10000
    script:
        'scripts/paper_graphics.py'

rule paper_graphics_transmission:
    input:
        costs=config['summary_dir'] + 'version-{version}/csvs/costs.csv'.format(version=config['version']),
	metrics=config['summary_dir'] + 'version-{version}/csvs/metrics.csv'.format(version=config['version'])
    output:
        transmission=config['summary_dir'] + 'version-{version}/paper_graphics/transmission.pdf'.format(version=config['version'])
    threads: 2
    resources: mem_mb=10000
    script:
        'scripts/paper_graphics_transmission.py'

rule paper_graphics_need_networks:
    output:
        heat_demand=config['summary_dir'] +  'version-{version}/paper_graphics/heat_demand.pdf'.format(version=config['version']),
        v2g_soc_DE=config['summary_dir'] +  'version-{version}/paper_graphics/v2g-DE-profile.pdf'.format(version=config['version']),
	v2g_soc_IT=config['summary_dir'] +  'version-{version}/paper_graphics/v2g-IT-profile.pdf'.format(version=config['version']),
        scales=config['summary_dir'] + 'version-{version}/paper_graphics/scales.pdf'.format(version=config['version'])
    threads: 2
    resources: mem_mb=10000
    script:
        'scripts/paper_graphics_need_networks.py'

rule spatial_plots:
    output:
        config['summary_dir'] +  'version-{version}/paper_graphics/spatial-all_flex-central-0.pdf'.format(version=config['version']),
        config['summary_dir'] +  'version-{version}/paper_graphics/spatial-all_flex-central-opt.pdf'.format(version=config['version'])
    threads: 2
    resources: mem_mb=10000
    script:
        'scripts/spatial_plots.py'
