private void setSecondaryColumnUnit(ColumnInfoCache columnInfos)
        {
            var mappings = Parameters.OfType <MappingDataFormatParameter>();

            foreach (var column in columnInfos.Where(c => !c.IsAuxiliary))
            {
                foreach (var relatedColumn in columnInfos.RelatedColumnsFrom(column.Name))
                {
                    var relatedParameter = mappings.FirstOrDefault(p => p.ColumnName == relatedColumn.Name);
                    if (relatedParameter != null && (relatedParameter.MappedColumn.Unit == null || relatedParameter.MappedColumn.Unit.SelectedUnit == UnitDescription.InvalidUnit))
                    {
                        var mainParameter = mappings.FirstOrDefault(p => p.MappedColumn.Name == column.Name);
                        if (mainParameter != null)
                        {
                            relatedParameter.MappedColumn.Unit = mainParameter.MappedColumn.Unit;
                        }
                    }
                }
            }
        }
Beispiel #2
0
        //checks that the dimension of all the units coming from columns for error have the same dimension to the corresponding measurement
        private ParseErrors validateErrorAgainstMeasurement(ColumnInfoCache columnInfos)
        {
            var errors = new ParseErrors();

            foreach (var column in columnInfos.Where(c => !c.IsAuxiliary))
            {
                foreach (var relatedColumn in columnInfos.RelatedColumnsFrom(column.Name))
                {
                    foreach (var dataSet in DataSets)
                    {
                        foreach (var set in dataSet.Data)
                        {
                            var measurementColumn = set.Data.FirstOrDefault(x => x.Key.ColumnInfo.Name == column.Name);
                            var errorColumn       = set.Data.FirstOrDefault(x => x.Key.ColumnInfo.Name == relatedColumn.Name);
                            if (errorColumn.Key == null || errorColumn.Key.ErrorDeviation == Constants.STD_DEV_GEOMETRIC)
                            {
                                continue;
                            }

                            if (errorColumn.Value != null && measurementColumn.Value.Count != errorColumn.Value.Count)
                            {
                                errors.Add(dataSet, new MismatchingArrayLengthsParseErrorDescription());
                                continue;
                            }

                            var errorDimension       = errorColumn.Key.Column.Dimension;
                            var measurementDimension = measurementColumn.Key.Column.Dimension;

                            if (errorDimension == null)
                            {
                                for (var i = 0; i < measurementColumn.Value.Count(); i++)
                                {
                                    if (double.IsNaN(errorColumn.Value.ElementAt(i).Measurement))
                                    {
                                        continue;
                                    }

                                    var measurementSupportedDimension = column.SupportedDimensions.FirstOrDefault(x => x.HasUnit(measurementColumn.Value.ElementAt(i).Unit));
                                    var errorSupportedDimension       = column.SupportedDimensions.FirstOrDefault(x => x.HasUnit(errorColumn.Value.ElementAt(i).Unit));
                                    if (measurementSupportedDimension != errorSupportedDimension)
                                    {
                                        errors.Add(dataSet, new ErrorUnitParseErrorDescription());
                                        continue;
                                    }
                                }
                            }
                            else
                            {
                                //if the dimension of the error is dimensionless (fe for geometric standard deviation)
                                //it is OK for it not to be of the smae dimension as the dimension of the measurement
                                if (errorDimension == Constants.Dimension.NO_DIMENSION ||
                                    errorDimension.Name == Constants.Dimension.FRACTION)
                                {
                                    continue;
                                }

                                if (measurementDimension != errorDimension)
                                {
                                    errors.Add(dataSet, new ErrorUnitParseErrorDescription());
                                    continue;
                                }
                            }
                        }
                    }
                }
            }
            return(errors);
        }