layers.gold.emissions
layers.gold.emissions
Gold Layer Emissions - Petrinex Emissions Calculations
Calculate Petrinex emissions at operator level.
Comprehensive emissions calculation from Petrinex production and activity data. Based on industry emission factors and facility-type-specific logic. All calculations are auditable and configurable.
Reference: Industry best practices, AER Directive 060, IPCC GWP values
Classes
| Name | Description |
|---|---|
| PetrinexEmissionFactors | Emission factors for Petrinex-based emissions calculation. |
| PetrinexEmissionsCalculator | Calculate emissions and intensity metrics from Petrinex production data. |
PetrinexEmissionFactors
layers.gold.emissions.PetrinexEmissionFactors(
venting_tco2e_per_m3: float = 0.019,
flaring_tco2e_per_m3: float = 0.0019,
fuel_gas_tco2e_per_m3: float = 0.00189,
gas_processing_tco2e_per_m3: float = 0.00015,
oil_lifting_light_tco2e_per_m3: float = 0.008,
oil_lifting_heavy_tco2e_per_m3: float = 0.025,
water_handling_tco2e_per_m3: float = 0.002,
sagd_steam_tco2e_per_m3: float = 0.06,
sagd_default_sor: float = 3.0,
fugitive_leakage_rate: float = 0.015,
bbl_per_m3_oil: float = 6.2898,
boe_per_m3_gas: float = 0.0058857,
boe_per_m3_ethane: float = 2.83,
boe_per_m3_propane: float = 3.96,
boe_per_m3_butanes: float = 4.72,
boe_per_m3_pentanes: float = 5.35,
sagd_water_cut_threshold: float = 0.8,
gas_plant_gas_pct_threshold: float = 0.8,
)Emission factors for Petrinex-based emissions calculation.
Units: tonnes CO2e per cubic meter unless otherwise noted.
PetrinexEmissionsCalculator
layers.gold.emissions.PetrinexEmissionsCalculator(
factors: PetrinexEmissionFactors | None = None,
)Calculate emissions and intensity metrics from Petrinex production data.
Methods
| Name | Description |
|---|---|
| calculate_all_emissions | Calculate all emission components and intensity for a facility-month. |
| calculate_flaring_emissions | Calculate flaring emissions (combustion). |
| calculate_fuel_emissions | Calculate fuel gas combustion emissions. |
| calculate_fugitive_emissions | Calculate fugitive emissions (equipment leaks, pneumatic devices). |
| calculate_oil_lifting_emissions | Calculate oil lifting emissions (pumping, compression, separation). |
| calculate_processing_emissions | Calculate gas processing emissions (amine, dehydration, compression). |
| calculate_production_boe | Calculate total production in Barrels of Oil Equivalent (BOE). |
| calculate_sagd_steam_emissions | Calculate SAGD steam generation emissions. |
| calculate_venting_emissions | Calculate venting emissions (CH4 released to atmosphere). |
| calculate_water_handling_emissions | Calculate water handling emissions (treatment, disposal, injection). |
| detect_facility_type | Detect facility characteristics from production profile. |
calculate_all_emissions
layers.gold.emissions.PetrinexEmissionsCalculator.calculate_all_emissions(
oil_m3: float = 0.0,
gas_production_m3: float = 0.0,
condensate_m3: float = 0.0,
water_m3: float = 0.0,
gas_flared_m3: float = 0.0,
gas_vented_m3: float = 0.0,
gas_fuel_m3: float = 0.0,
ethane_m3: float = 0.0,
propane_m3: float = 0.0,
butanes_m3: float = 0.0,
pentanes_m3: float = 0.0,
residue_gas_m3: float | None = None,
facility_type: str | None = None,
sor: float | None = None,
)Calculate all emission components and intensity for a facility-month.
Returns comprehensive breakdown for full auditability.
Args: oil_m3: Oil production (m3) gas_production_m3: Gas production (m3) condensate_m3: Condensate production (m3) water_m3: Water production (m3) gas_flared_m3: Gas flared (m3) gas_vented_m3: Gas vented (m3) gas_fuel_m3: Gas used as fuel (m3) ethane_m3: Ethane production (m3) propane_m3: Propane production (m3) butanes_m3: Butanes production (m3) pentanes_m3: Pentanes+ production (m3) residue_gas_m3: Residue gas after NGL extraction (optional) facility_type: Explicit facility type (optional) sor: Steam-to-oil ratio for SAGD (optional)
Returns: Dictionary with all emission components and metrics
calculate_flaring_emissions
layers.gold.emissions.PetrinexEmissionsCalculator.calculate_flaring_emissions(
gas_flared_m3: float,
)Calculate flaring emissions (combustion).
Args: gas_flared_m3: Volume of gas flared (m3)
Returns: Flaring emissions (tonnes CO2e)
calculate_fuel_emissions
layers.gold.emissions.PetrinexEmissionsCalculator.calculate_fuel_emissions(
gas_fuel_m3: float,
)Calculate fuel gas combustion emissions.
Args: gas_fuel_m3: Volume of gas used as fuel (m3)
Returns: Fuel combustion emissions (tonnes CO2e)
calculate_fugitive_emissions
layers.gold.emissions.PetrinexEmissionsCalculator.calculate_fugitive_emissions(
gas_production_m3: float,
)Calculate fugitive emissions (equipment leaks, pneumatic devices).
Uses a proxy: percentage of gas production as fugitive CH4.
Args: gas_production_m3: Total gas production (m3)
Returns: Fugitive emissions (tonnes CO2e)
calculate_oil_lifting_emissions
layers.gold.emissions.PetrinexEmissionsCalculator.calculate_oil_lifting_emissions(
oil_m3: float,
is_heavy: bool = False,
)Calculate oil lifting emissions (pumping, compression, separation).
Args: oil_m3: Oil production (m3) is_heavy: Whether oil is heavy/SAGD (higher intensity)
Returns: Oil lifting emissions (tonnes CO2e)
calculate_processing_emissions
layers.gold.emissions.PetrinexEmissionsCalculator.calculate_processing_emissions(
gas_throughput_m3: float,
residue_gas_m3: float | None = None,
)Calculate gas processing emissions (amine, dehydration, compression).
Uses residue gas if available (NGL data), otherwise raw gas production.
Args: gas_throughput_m3: Total gas processed (m3) residue_gas_m3: Residue gas after NGL extraction (if available)
Returns: Processing emissions (tonnes CO2e)
calculate_production_boe
layers.gold.emissions.PetrinexEmissionsCalculator.calculate_production_boe(
oil_m3: float = 0.0,
gas_m3: float = 0.0,
condensate_m3: float = 0.0,
ethane_m3: float = 0.0,
propane_m3: float = 0.0,
butanes_m3: float = 0.0,
pentanes_m3: float = 0.0,
)Calculate total production in Barrels of Oil Equivalent (BOE).
Args: oil_m3: Oil production (m3) gas_m3: Gas production (m3) condensate_m3: Condensate production (m3) ethane_m3: Ethane production (m3) propane_m3: Propane production (m3) butanes_m3: Butanes production (m3) pentanes_m3: Pentanes+ production (m3)
Returns: Dictionary with BOE breakdown and total
calculate_sagd_steam_emissions
layers.gold.emissions.PetrinexEmissionsCalculator.calculate_sagd_steam_emissions(
oil_m3: float,
sor: float | None = None,
)Calculate SAGD steam generation emissions.
Steam-to-oil ratio (SOR) determines steam volume needed. Typical SOR ranges: 2.5-3.5 (lower is more efficient).
Args: oil_m3: Oil production (m3) sor: Steam-to-oil ratio (uses default if None)
Returns: Steam generation emissions (tonnes CO2e)
calculate_venting_emissions
layers.gold.emissions.PetrinexEmissionsCalculator.calculate_venting_emissions(
gas_vented_m3: float,
)Calculate venting emissions (CH4 released to atmosphere).
Args: gas_vented_m3: Volume of gas vented (m3)
Returns: Venting emissions (tonnes CO2e)
calculate_water_handling_emissions
layers.gold.emissions.PetrinexEmissionsCalculator.calculate_water_handling_emissions(
water_m3: float,
)Calculate water handling emissions (treatment, disposal, injection).
Args: water_m3: Produced water volume (m3)
Returns: Water handling emissions (tonnes CO2e)
detect_facility_type
layers.gold.emissions.PetrinexEmissionsCalculator.detect_facility_type(
oil_m3: float,
gas_m3: float,
water_m3: float,
condensate_m3: float = 0.0,
facility_type: str | None = None,
)Detect facility characteristics from production profile.
Returns flags for facility type characteristics: - is_sagd: High water cut + oil production (in-situ) - is_heavy: Heavy oil operations - is_gas_plant: Primarily gas processing - is_conventional: Default conventional oil/gas
Args: oil_m3: Oil production (m3) gas_m3: Gas production (m3) water_m3: Water production (m3) condensate_m3: Condensate production (m3) facility_type: Explicit facility type string (if known)
Returns: Dictionary with facility type flags
Functions
| Name | Description |
|---|---|
| add_emissions_to_dataframe | Add comprehensive emissions calculations to production DataFrame. |
| aggregate_emissions_by_operator | Aggregate facility-level emissions to operator level. |
| aggregate_emissions_by_operator_parent | Aggregate operator-level emissions to parent level. |
| calculate_operator_facility_emissions | Allocate facility-level emissions to operators based on BOE share. |
| calculate_petrinex_emissions_operator_level | Calculate Petrinex emissions at operator-year level. |
add_emissions_to_dataframe
layers.gold.emissions.add_emissions_to_dataframe(
df: pd.DataFrame,
calculator: PetrinexEmissionsCalculator | None = None,
segment_factors: dict[str, PetrinexEmissionFactors] | None = None,
)Add comprehensive emissions calculations to production DataFrame.
Args: df: Production DataFrame with activity volumes calculator: Optional PetrinexEmissionsCalculator instance (uses default if None) segment_factors: Optional dict mapping segment name -> PetrinexEmissionFactors for segment-specific calibration. Segment keys should be: “SAGD”, “GasPlant”, “Conventional”. If provided, factors are selected based on facility type detection (is_sagd, is_gas_plant, is_conventional). If no matching segment found for a facility, falls back to default factors.
Returns: DataFrame with added emissions columns (E_vent, E_flare, E_fuel, etc.)
aggregate_emissions_by_operator
layers.gold.emissions.aggregate_emissions_by_operator(
df: pd.DataFrame,
operator_col: str = 'operator_baid',
year_col: str = 'year',
)Aggregate facility-level emissions to operator level.
Note: Sums emissions and BOE, then recalculates intensity (never averages ratios).
aggregate_emissions_by_operator_parent
layers.gold.emissions.aggregate_emissions_by_operator_parent(
df: pd.DataFrame,
operator_parent_dim: pd.DataFrame,
year_col: str = 'year',
)Aggregate operator-level emissions to parent level.
Joins operator_parent_dim on operator_baid, then aggregates by (operator_parent_id, year). Sums emissions and production, sums facility_count from children, takes first parent_name.
Args: df: Operator-level emissions DataFrame (must have operator_baid) operator_parent_dim: Parent dimension DataFrame with columns: operator_baid, operator_parent_id, operator_parent_name year_col: Year column name (default: ‘year’)
Returns: DataFrame aggregated by operator_parent_id and year
calculate_operator_facility_emissions
layers.gold.emissions.calculate_operator_facility_emissions(
facilities_with_emissions: pd.DataFrame,
operator_facility_production: pd.DataFrame,
)Allocate facility-level emissions to operators based on BOE share.
Inputs: facilities_with_emissions: - facility_id, year, month - E_* columns (tonnes CO2e) - production_boe, oil_m3, gas_production_m3, condensate_m3, water_m3, etc.
operator_facility_production:
- facility_id, year, month
- well_operator_baid, well_operator_name
- total_boe (operator's BOE at this facility-month)
- facility_total_boe
- operator_share_pct (total_boe / facility_total_boe * 100)
Output: operator_facility_emissions: - facility_id, year, month - operator_baid, operator_name - all E_* columns scaled by operator_share - production_boe and volume columns scaled by operator_share
calculate_petrinex_emissions_operator_level
layers.gold.emissions.calculate_petrinex_emissions_operator_level(
production_monthly: pd.DataFrame,
)Calculate Petrinex emissions at operator-year level.