public Iδ4ParameterElement Calculate( Iδ4ParameterElementFactory δ4ParameterElementFactory, IdIndexElement dIndexElement, IrIndexElement rIndexElement, IsIndexElement sIndexElement, ItIndexElement tIndexElement, It t, IW W, Iγ γ, Iδ3 δ3) { Iδ4ParameterElement δ4ParameterElement = null; int γSum = 0; int δ3Asint = δ3.GetElementAtAsint( sIndexElement, rIndexElement, dIndexElement); if (δ3Asint == 0) { δ4ParameterElement = δ4ParameterElementFactory.Create( sIndexElement, rIndexElement, dIndexElement, tIndexElement, 1); } else { int δ4 = 1; do { γSum = t.GetNthElementsAt( dIndexElement.Value.Value.Value, dIndexElement.Value.Value.Value + (δ4 - 1) * W.Value.Value.Value, W.Value.Value.Value) .Select(x => γ.GetElementAtAsint( rIndexElement, t.GetElementAt(x.Key))) .Sum(); δ4 = δ4 + 1; } while (γSum < δ3Asint); if (γSum == δ3Asint) { δ4ParameterElement = δ4ParameterElementFactory.Create( sIndexElement, rIndexElement, dIndexElement, tIndexElement, δ4 - 1); // Subtract 1 to account for last iteration of the do-while loop } } return(δ4ParameterElement); }
public Iδ4 Calculate( Iδ4ParameterElementFactory δ4ParameterElementFactory, Iδ4Factory δ4Factory, Iδ4ParameterElementCalculation δ4ParameterElementCalculation, Isrd srd, It t, IW W, Iδ3 δ3, Iγ γ) { return(δ4Factory.Create( srd.Value .SelectMany(b => t.GetNthElementsAt( b.dIndexElement.Value.Value.Value, t.GetT() - W.Value.Value.Value + b.dIndexElement.Value.Value.Value, W.Value.Value.Value), (a, b) => Tuple.Create(a.sIndexElement, a.rIndexElement, a.dIndexElement, b)) .Select(x => δ4ParameterElementCalculation.Calculate( δ4ParameterElementFactory, x.Item3, x.Item2, x.Item1, x.Item4, t, W, γ, δ3)) .ToImmutableList())); }
public Iδ3 Create( ImmutableList <Iδ3ParameterElement> value) { Iδ3 parameter = null; try { parameter = new δ3( value); } catch (Exception exception) { this.Log.Error( exception.Message, exception); } return(parameter); }