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