/// <summary>
        /// Clears all data dependent, either directly or indirectly, on the parent reference line.
        /// </summary>
        /// <param name="failureMechanism">The failure mechanism to be cleared.</param>
        /// <returns>The results of the clear action.</returns>
        /// <exception cref="ArgumentNullException">Thrown when <paramref name="failureMechanism"/>
        /// is <c>null</c>.</exception>
        public static ClearResults ClearReferenceLineDependentData(HeightStructuresFailureMechanism failureMechanism)
        {
            if (failureMechanism == null)
            {
                throw new ArgumentNullException(nameof(failureMechanism));
            }

            var changedObjects = new List <IObservable>();

            object[] removedObjects = failureMechanism.Sections.OfType <object>()
                                      .Concat(failureMechanism.SectionResults)
                                      .Concat(failureMechanism.CalculationsGroup.GetAllChildrenRecursive())
                                      .Concat(failureMechanism.ForeshoreProfiles)
                                      .Concat(failureMechanism.HeightStructures)
                                      .ToArray();

            failureMechanism.ClearAllSections();
            changedObjects.Add(failureMechanism);
            changedObjects.Add(failureMechanism.SectionResults);

            failureMechanism.CalculationsGroup.Children.Clear();
            changedObjects.Add(failureMechanism.CalculationsGroup);

            failureMechanism.ForeshoreProfiles.Clear();
            changedObjects.Add(failureMechanism.ForeshoreProfiles);

            failureMechanism.HeightStructures.Clear();
            changedObjects.Add(failureMechanism.HeightStructures);

            return(new ClearResults(changedObjects, removedObjects));
        }