public MeasurementGroup(Measurement measurement)
 {
     Name       = measurement.Header.Name;
     Properties = new Dictionary <string, string>(measurement.Properties);
     Measurements.Add(measurement);
     MeasurementHelpers.RemoveMean(Properties);
 }
        public static List <MeasurementGroup> GroupMeasurements(List <Measurement> measurements)
        {
            List <MeasurementGroup> groups = new List <MeasurementGroup>();
            bool assigned;

            foreach (var measurement in measurements)
            {
                assigned = false;
                foreach (var group in groups)
                {
                    if (measurement.Header.Name.Equals(group.Name) && MeasurementHelpers.CompareProperties(measurement.Properties, group))
                    {
                        group.Measurements.Add(measurement);
                        assigned = true;
                        break;
                    }
                }

                if (!assigned)
                {
                    groups.Add(new MeasurementGroup(measurement));
                }
            }
            return(groups);
        }
        public Result FindAndRemoveFromGroups(List <MeasurementGroup> groups)
        {
            if (groups.Count == 0)
            {
                return(MeasurementToResult(null));
            }
            if (IncludeImageMode)
            {
                Properties.Add("Image Mode", "M mode");
            }

            var groupIndex = groups.FindIndex(g => g.Name.Equals(RawMeasurementName) && MeasurementHelpers.CompareProperties(Properties, g));

            if (groupIndex > -1)
            {
                var group = groups[groupIndex];
                groups.RemoveAt(groupIndex);

                return(MeasurementToResult(group.SelectMean()));
                //return NonMean ? MeasurementToResult(group.SelectNonMean()) : MeasurementToResult(group.SelectMean());
            }

            else
            {
                if (IncludeImageMode)
                {
                    Properties["Image Mode"] = "2D mode";
                    IncludeImageMode         = false;
                    return(FindAndRemoveFromGroups(groups));
                }
                return(MeasurementToResult(null));
            }
        }