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;
        }