/// <summary>
        /// Initializes a new instance of the <see cref="ChemicalBasedAnalysisResult"/> class.
        /// </summary>
        /// <param name="result">
        /// The result.
        /// </param>
        /// <param name="newWorkflowResult">
        /// The new workflow result.
        /// </param>
        public ChemicalBasedAnalysisResult(ChemicalBasedAnalysisResult result, CrossSectionWorkflowResult newWorkflowResult)
        {
            // previous results inconclusive, new result conclusive
            if (!IsConclusive(result.AnalysisStatus))
            {
                this.InitiateFromWorkflowResult(newWorkflowResult);
            }

            // new result inconclusive, previous result conclusive or not conclusive
            else if (!IsConclusive(newWorkflowResult.AnalysisStatus))
            {
                this.AnalysisStatus = result.AnalysisStatus;
                this.FusionNumber = result.FusionNumber;
                this.DetectedIsomers = result.DetectedIsomers;
                this.Target = result.Target;
            }

            // both result conclusive, conflict
            if (CheckConflict(result, newWorkflowResult))
            {
                this.AnalysisStatus = AnalysisStatus.ConflictRuns;
                this.FusionNumber = result.FusionNumber;
                this.DetectedIsomers = result.DetectedIsomers;
                this.Target = result.Target;
            }

            // both result conclusive, no conflict
            IEnumerable<IdentifiedIsomerInfo> newIsomerList = result.DetectedIsomers.Zip(newWorkflowResult.IdentifiedIsomers, (A, B) => FuseIsomerResult(A, B, result.FusionNumber, 1));

            this.AnalysisStatus = result.AnalysisStatus;
            this.FusionNumber = result.FusionNumber + 1;
            this.DetectedIsomers = newIsomerList;
            this.Target = result.Target;
        }
        /// <summary>
        /// Check if there are conflicts in 
        /// </summary>
        /// <param name="result">
        /// The result.
        /// </param>
        /// <param name="newWorkflowResult">
        /// The new workflow result.
        /// </param>
        /// <returns>
        /// The <see cref="bool"/>.
        /// </returns>
        /// <exception cref="InvalidOperationException">
        /// </exception>
        private static bool CheckConflict(ChemicalBasedAnalysisResult result, CrossSectionWorkflowResult newWorkflowResult)
        {
            if (!newWorkflowResult.Target.Equals(result.Target))
            {
                throw new InvalidOperationException("Cannot check conflict for results from different chemicals or with different ionization methods");
            }

            if (result.DetectedIsomers.Count() != newWorkflowResult.IdentifiedIsomers.Count())
            {
                return true;
            }

            if (result.AnalysisStatus != newWorkflowResult.AnalysisStatus)
            {
                return true;
            }

            IEnumerable<bool> r = result.DetectedIsomers.Zip(newWorkflowResult.IdentifiedIsomers, CheckConflict);
            return !r.Select(b => b == false).Any();
        }