public LinearFunctionParametersDto Convert(LineParametersDto lineSegment) { ExceptionHelper.CheckArgumentNull(lineSegment, "lineSegment"); SampleDto sample1 = lineSegment.FirstSample; SampleDto sample2 = lineSegment.SecondSample; double slope = (sample2.Value - sample1.Value) / (sample2.Concentration - sample1.Concentration); double verticalIntercept = sample1.Value - (slope * sample1.Concentration); double minValue; if (lineSegment.LeftBounded) { minValue = this.GetMinOf(sample1.Concentration, sample2.Concentration); } else { minValue = double.MinValue; } double maxValue; if (lineSegment.RightBounded) { maxValue = this.GetMaxOf(sample1.Concentration, sample2.Concentration); } else { maxValue = double.MaxValue; } DomainDto domain = new DomainDto(minValue, maxValue); return(new LinearFunctionParametersDto(slope, verticalIntercept, domain)); }
private void InitializeCalibrationCurvePieces(IEnumerable <SampleDto> calibrationSamples) { IList <LinearFunctionParametersDto> calibrationCurvePieces = new List <LinearFunctionParametersDto>(); LinearFunctionParametersDtoConverter linearFunctionConverter = new LinearFunctionParametersDtoConverter(); calibrationSamples = calibrationSamples.OrderBy(x => x.Concentration); int samplesCount = calibrationSamples.Count(); for (int i = 0; i < samplesCount - 1; i++) { SampleDto sample1 = calibrationSamples.ElementAt(i); SampleDto sample2 = calibrationSamples.ElementAt(i + 1); bool leftBounded = i == 0 ? false : true; bool rightBounded = i == samplesCount - 2 ? false : true; LineParametersDto lineParameters = new LineParametersDto(sample1, sample2, leftBounded, rightBounded); calibrationCurvePieces.Add(linearFunctionConverter.Convert(lineParameters)); } this.calibrationCurvePieces = calibrationCurvePieces; }