Skip to content

Commit

Permalink
Inject N2O calculator where needed
Browse files Browse the repository at this point in the history
  • Loading branch information
holos-aafc committed Sep 19, 2024
1 parent e7cda00 commit 081dff0
Show file tree
Hide file tree
Showing 11 changed files with 80 additions and 29 deletions.
2 changes: 1 addition & 1 deletion H.CLI.Test/Results/ComponentResultsProcessorTest.cs
Original file line number Diff line number Diff line change
Expand Up @@ -51,7 +51,7 @@ public static void ClassCleanUp()
public void TestInitialize()
{
storage.ApplicationData = new ApplicationData();
_componentResultsProcessor = new ComponentResultsProcessor(storage, new TimePeriodHelper(), _fieldResultsService);
_componentResultsProcessor = new ComponentResultsProcessor(storage, new TimePeriodHelper(), _fieldResultsService, _n2OEmissionFactorCalculator);


var swineStarterGroup = new AnimalGroup()
Expand Down
2 changes: 1 addition & 1 deletion H.CLI/Program.cs
Original file line number Diff line number Diff line change
Expand Up @@ -175,7 +175,7 @@ static void Main(string[] args)

var fieldResultsService = new FieldResultsService(iCBMSoilCarbonCalculator, ipcc, n2oEmissionFactorCalculator, initializationService);
// Overall Results For All the Farms
var componentResults = new ComponentResultsProcessor(storage, new TimePeriodHelper(), fieldResultsService);
var componentResults = new ComponentResultsProcessor(storage, new TimePeriodHelper(), fieldResultsService, n2oEmissionFactorCalculator);

// Get base directory of user entered path to create Total Results For All Farms folder
Directory.CreateDirectory(InfrastructureConstants.BaseOutputDirectoryPath + @"\" + Properties.Resources.Outputs + @"\" + Properties.Resources.TotalResultsForAllFarms);
Expand Down
6 changes: 4 additions & 2 deletions H.CLI/Results/ComponentResultsProcessor.cs
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,9 @@
using System.Text;
using H.Core;
using H.Core.Calculators.Infrastructure;
using H.Core.Calculators.Nitrogen;
using H.Core.Converters;
using H.Core.Providers.Climate;
using H.Core.Services.Animals;


Expand Down Expand Up @@ -55,7 +57,7 @@ public class ComponentResultsProcessor

#region Constructor

public ComponentResultsProcessor(Storage storage, ITimePeriodHelper timePeriodHelper, IFieldResultsService fieldResultsService)
public ComponentResultsProcessor(Storage storage, ITimePeriodHelper timePeriodHelper, IFieldResultsService fieldResultsService, N2OEmissionFactorCalculator n2OEmissionFactorCalculator)
{
if (fieldResultsService != null)
{
Expand All @@ -72,7 +74,7 @@ public ComponentResultsProcessor(Storage storage, ITimePeriodHelper timePeriodHe
var animalService = new AnimalResultsService();
var manureService = new ManureService();

_farmResultsService = new FarmResultsService(new EventAggregator(), _fieldResultsService, new ADCalculator(), manureService, animalService);
_farmResultsService = new FarmResultsService(new EventAggregator(), _fieldResultsService, new ADCalculator(), manureService, animalService, n2OEmissionFactorCalculator );
_farmEmissionResults = _farmResultsService.CalculateFarmEmissionResults(storage.ApplicationData.Farms);
}

Expand Down
2 changes: 1 addition & 1 deletion H.Core.Test/Services/FarmResultsServiceTest.cs
Original file line number Diff line number Diff line change
Expand Up @@ -50,7 +50,7 @@ public static void ClassCleanup()
[TestInitialize]
public void TestInitialize()
{
_farmResultsService = new FarmResultsService(new EventAggregator(), _fieldResultsService, new ADCalculator(), new Mock<IManureService>().Object, new Mock<IAnimalService>().Object);
_farmResultsService = new FarmResultsService(new EventAggregator(), _fieldResultsService, new ADCalculator(), new Mock<IManureService>().Object, new Mock<IAnimalService>().Object, _n2OEmissionFactorCalculator);
}

[TestCleanup]
Expand Down
43 changes: 43 additions & 0 deletions H.Core/Calculators/Nitrogen/N2OEmissionFactorCalculator.Exports.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,43 @@
using H.Core.Models;
using System;

namespace H.Core.Calculators.Nitrogen
{
public partial class N2OEmissionFactorCalculator
{
#region Public Methods

/// <summary>
/// Equation 2.6.5-6
/// Equation 2.7.4-6
/// </summary>
/// <returns>Returns the total direct N2O emissions from exported manure (kg N2O-N ha^-1)</returns>
/// <exception cref="NotImplementedException"></exception>
public double CalculateTotalDirectN2ONFromExportedManure(Farm farm, int year)
{
var emissionsForFarm = this.CalculateTotalDirectN2ONFromExportedManureForFarmAndYear(farm, year);
var result = emissionsForFarm / farm.GetTotalAreaOfFarm(false, year);

return result;
}

/// <summary>
/// Equation 4.6.1-9
///
/// (kg N2O-N year^-1)
/// </summary>
public double CalculateTotalDirectN2ONFromExportedManureForFarmAndYear(Farm farm, int year)
{
var viewItemsByYear = farm.GetCropDetailViewItemsByYear(year, false);

var weightedEmissionFactor = this.CalculateWeightedOrganicNitrogenEmissionFactor(viewItemsByYear, farm);
var totalExportedManureNitrogen = _manureService.GetTotalNitrogenFromExportedManure(year, farm);

var emissions = this.CalculateTotalDirectN2ONFromExportedManureForFarmAndYear(totalExportedManureNitrogen, weightedEmissionFactor);

return emissions;
}

#endregion
}
}
15 changes: 0 additions & 15 deletions H.Core/Calculators/Nitrogen/N2OEmissionFactorCalculator.Manure.cs
Original file line number Diff line number Diff line change
Expand Up @@ -237,22 +237,7 @@ public double CalculateVolumeFromLeftOverManureForField(
return result;
}

/// <summary>
/// Equation 4.6.1-9
///
/// (kg N2O-N)
/// </summary>
public double CalculateTotalDirectN2ONFromExportedManureForFarmAndYear(Farm farm, int year)
{
var viewItemsByYear = farm.GetCropDetailViewItemsByYear(year, false);

var weightedEmissionFactor = this.CalculateWeightedOrganicNitrogenEmissionFactor(viewItemsByYear, farm);
var totalExportedManureNitrogen = _manureService.GetTotalNitrogenFromExportedManure(year, farm);

var emissions = this.CalculateTotalDirectN2ONFromExportedManureForFarmAndYear(totalExportedManureNitrogen, weightedEmissionFactor);

return emissions;
}

/// <summary>
/// Equation 4.6.1-9
Expand Down
9 changes: 8 additions & 1 deletion H.Core/Emissions/Results/FarmEmissionResults.cs
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,7 @@ public class FarmEmissionResults : ResultsViewItemBase
private ObservableCollection<EconomicsResultsViewItem> _economicsResultsViewItems;
private ObservableCollection<CropViewItem> _finalFieldResultViewItems;
private ObservableCollection<DigestorDailyOutput> _anaerobicDigestorResults;
private ObservableCollection<ManureExportResultViewItem> _manureExportResultsViewItems;

private double _economicsProfit;

Expand All @@ -38,6 +39,7 @@ public FarmEmissionResults()
this.EconomicResultsViewItems = new ObservableCollection<EconomicsResultsViewItem>();
this.FinalFieldResultViewItems = new ObservableCollection<CropViewItem>();
this.AnaerobicDigestorResults = new ObservableCollection<DigestorDailyOutput>();
this.ManureExportResultsViewItems = new ObservableCollection<ManureExportResultViewItem>();
}

#endregion
Expand Down Expand Up @@ -79,7 +81,6 @@ public Farm Farm
set => SetProperty(ref _farm, value);
}

/// <summary>
/// <summary>
/// The total emissions for the entire farm !!!
///
Expand Down Expand Up @@ -373,6 +374,12 @@ public ObservableCollection<DigestorDailyOutput> AnaerobicDigestorResults
set => SetProperty(ref _anaerobicDigestorResults, value);
}

public ObservableCollection<ManureExportResultViewItem> ManureExportResultsViewItems
{
get => _manureExportResultsViewItems;
set => SetProperty(ref _manureExportResultsViewItems, value);
}

#endregion

#region Public Methods
Expand Down
2 changes: 2 additions & 0 deletions H.Core/H.Core.csproj
Original file line number Diff line number Diff line change
Expand Up @@ -105,6 +105,7 @@
<Compile Include="Calculators\Nitrogen\N2OEmissionFactorCalculator.Digestate.cs" />
<Compile Include="Calculators\Nitrogen\ICBMNitrogenInputCalculator.cs" />
<Compile Include="Calculators\Nitrogen\N2OEmissionFactorCalculator.CropResidues.cs" />
<Compile Include="Calculators\Nitrogen\N2OEmissionFactorCalculator.Exports.cs" />
<Compile Include="Calculators\Nitrogen\NitrogenCalculator.cs" />
<Compile Include="Calculators\Nitrogen\NitrogenInputCalculatorBase.cs" />
<Compile Include="Calculators\Shelterbelt\ShelterbeltCalculator.cs" />
Expand Down Expand Up @@ -316,6 +317,7 @@
<Compile Include="Models\LandManagement\Fields\IPCCTier2Results.cs" />
<Compile Include="Models\LandManagement\Fields\ManureExportViewItem.cs" />
<Compile Include="Models\LandManagement\Fields\ManureItemBase.cs" />
<Compile Include="Models\Results\ManureExportResultViewItem.cs" />
<Compile Include="Models\StorageTankBase.cs" />
<Compile Include="Providers\AnaerobicDigestion\Table_46_Biogas_Methane_Production_CropResidue_Data.cs" />
<Compile Include="Providers\Animals\IAnimalAmmoniaEmissionFactorProvider.cs" />
Expand Down
6 changes: 6 additions & 0 deletions H.Core/Models/Results/ManureExportResultViewItem.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
namespace H.Core.Models.Results
{
public class ManureExportResultViewItem : ResultsViewItemBase
{
}
}
18 changes: 12 additions & 6 deletions H.Core/Services/FarmResultsService.cs
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@
using AutoMapper.Execution;
using H.Core.Calculators.Economics;
using H.Core.Calculators.Infrastructure;
using H.Core.Calculators.Nitrogen;
using H.Core.Calculators.UnitsOfMeasurement;
using H.Core.Emissions.Results;
using H.Core.Enumerations;
Expand Down Expand Up @@ -45,10 +46,6 @@ public class FarmResultsService : IFarmResultsService
private readonly IAnimalService _animalResultsService;
private readonly IADCalculator _adCalculator;

private readonly IDietProvider _dietProvider = new DietProvider();
private readonly Table_6_Manure_Types_Default_Composition_Provider _defaultManureCompositionProvider = new Table_6_Manure_Types_Default_Composition_Provider();
private readonly Table_30_Default_Bedding_Material_Composition_Provider _defaultBeddingMaterialCompositionProvider = new Table_30_Default_Bedding_Material_Composition_Provider();

private readonly IMapper _farmMapper;
private readonly IMapper _defaultsMapper;
private readonly IMapper _detailsScreenCropViewItemMapper;
Expand All @@ -61,13 +58,22 @@ public class FarmResultsService : IFarmResultsService
private readonly IEventAggregator _eventAggregator;

private readonly EconomicsCalculator _economicsCalculator;
private readonly UnitsOfMeasurementCalculator _unitsCalculator = new UnitsOfMeasurementCalculator();
private IN2OEmissionFactorCalculator _n2OEmissionFactorCalculator;

#endregion

#region Constructors
public FarmResultsService(IEventAggregator eventAggregator, IFieldResultsService fieldResultsService, IADCalculator adCalculator, IManureService manureService, IAnimalService animalService)
public FarmResultsService(IEventAggregator eventAggregator, IFieldResultsService fieldResultsService, IADCalculator adCalculator, IManureService manureService, IAnimalService animalService, IN2OEmissionFactorCalculator n2OEmissionFactorCalculator)
{
if (n2OEmissionFactorCalculator != null)
{
_n2OEmissionFactorCalculator = n2OEmissionFactorCalculator;
}
else
{
throw new ArgumentNullException(nameof(n2OEmissionFactorCalculator));
}

if (animalService != null)
{
_animalResultsService = animalService;
Expand Down
4 changes: 2 additions & 2 deletions H.Template/Program.cs
Original file line number Diff line number Diff line change
Expand Up @@ -85,8 +85,8 @@ static Program()
_ipccTier2SoilCarbonCalculator = new IPCCTier2SoilCarbonCalculator(_climateProvider, _n2OEmissionFactorCalculator);
_fieldResultsService = new FieldResultsService(_icbmsoilCarbonCalculator, _ipccTier2SoilCarbonCalculator, _n2OEmissionFactorCalculator, _initializationService);
_animalService = new AnimalResultsService();
_componentResultsProcessor = new ComponentResultsProcessor(_storage, _timePeriodHelper, _fieldResultsService);
_farmResultsService = new FarmResultsService(_eventAggregator, _fieldResultsService, _adCalculator, _manureService, _animalService);
_componentResultsProcessor = new ComponentResultsProcessor(_storage, _timePeriodHelper, _fieldResultsService, _n2OEmissionFactorCalculator);
_farmResultsService = new FarmResultsService(_eventAggregator, _fieldResultsService, _adCalculator, _manureService, _animalService, _n2OEmissionFactorCalculator);
_animalInitializationService = new AnimalInitializationService();
}

Expand Down

0 comments on commit 081dff0

Please sign in to comment.