SubjectComparisonOutcome CompareSubjects(Subject s1, Subject s2) { SubjectComparisonOutcome COLComparisonOutcome = CompareSubjectDimensions(s1.CausesOfLoss, s2.CausesOfLoss); SubjectComparisonOutcome ExposureTypesComparisonOutcome = CompareSubjectDimensions(s1.ResolvedExposureTypes, s2.ResolvedExposureTypes); SubjectComparisonOutcome RITEsComparisonOutcome = CompareSubjectDimensions(s1.RITEIds, s2.RITEIds); if (COLComparisonOutcome == SubjectComparisonOutcome.Equal && ExposureTypesComparisonOutcome == SubjectComparisonOutcome.Equal && RITEsComparisonOutcome == SubjectComparisonOutcome.Equal) { if (s1.PerRisk == s2.PerRisk) { return(SubjectComparisonOutcome.Equal); } else if (s1.PerRisk && !s2.PerRisk) { return(SubjectComparisonOutcome.Parent); } else { return(SubjectComparisonOutcome.Child); } } else if ((COLComparisonOutcome == SubjectComparisonOutcome.Parent || COLComparisonOutcome == SubjectComparisonOutcome.Equal) && (ExposureTypesComparisonOutcome == SubjectComparisonOutcome.Parent || ExposureTypesComparisonOutcome == SubjectComparisonOutcome.Equal) && (RITEsComparisonOutcome == SubjectComparisonOutcome.Parent || RITEsComparisonOutcome == SubjectComparisonOutcome.Equal)) { return(SubjectComparisonOutcome.Parent); } else if ((COLComparisonOutcome == SubjectComparisonOutcome.Child || COLComparisonOutcome == SubjectComparisonOutcome.Equal) && (ExposureTypesComparisonOutcome == SubjectComparisonOutcome.Child || ExposureTypesComparisonOutcome == SubjectComparisonOutcome.Equal) && (RITEsComparisonOutcome == SubjectComparisonOutcome.Child || RITEsComparisonOutcome == SubjectComparisonOutcome.Equal)) { return(SubjectComparisonOutcome.Child); } else if ((COLComparisonOutcome == SubjectComparisonOutcome.Parent || COLComparisonOutcome == SubjectComparisonOutcome.Equal) && (ExposureTypesComparisonOutcome == SubjectComparisonOutcome.Parent || ExposureTypesComparisonOutcome == SubjectComparisonOutcome.Equal) && (RITEsComparisonOutcome == SubjectComparisonOutcome.Overlap)) { return(SubjectComparisonOutcome.Overlap_Parent); } else if ((COLComparisonOutcome == SubjectComparisonOutcome.Child || COLComparisonOutcome == SubjectComparisonOutcome.Equal) && (ExposureTypesComparisonOutcome == SubjectComparisonOutcome.Child || ExposureTypesComparisonOutcome == SubjectComparisonOutcome.Equal) && (RITEsComparisonOutcome == SubjectComparisonOutcome.Overlap)) { return(SubjectComparisonOutcome.Overlap_Child); } else { return(SubjectComparisonOutcome.Disjoint); } }
private void Initialize() { long MaxSubjectIDBeforePerRiskExplosion = 0; foreach (TermNode ATermNode in this) { Subject ATermNodeSubject = ATermNode.GetContent().GetSubject(); MaxSubjectIDBeforePerRiskExplosion = Math.Max(MaxSubjectIDBeforePerRiskExplosion, ATermNodeSubject.ID); } OriginalSubjectRelationshipMatrix = new SubjectComparisonOutcome[MaxSubjectIDBeforePerRiskExplosion + 1, MaxSubjectIDBeforePerRiskExplosion + 1]; OriginalPerRiskNodes = new List <TermNode>(); foreach (TermNode ATermNode in this) { Subject ATermNodeSubject = ATermNode.GetContent().GetSubject(); if (ATermNodeSubject.PerRisk) { OriginalPerRiskNodes.Add(ATermNode); } foreach (TermNode AnotherTermNode in this.Where(tn => tn.GetContent().GetSubject().ID != ATermNodeSubject.ID)) { Subject AnotherTermNodeSubject = AnotherTermNode.GetContent().GetSubject(); SubjectComparisonOutcome _SubjectComparisonOutcome = CompareSubjects(AnotherTermNodeSubject, ATermNodeSubject); OriginalSubjectRelationshipMatrix[AnotherTermNodeSubject.ID, ATermNodeSubject.ID] = _SubjectComparisonOutcome; } } DistinctPerRiskNodes = new HashSet <TermNode>(OriginalPerRiskNodes); OriginalNonPerRiskNodes = new HashSet <TermNode>(this as IEnumerable <TermNode>); OriginalNonPerRiskNodes.ExceptWith(OriginalPerRiskNodes); FinalNodes = new HashSet <TermNode>(); foreach (TermNode OriginalNonPerRiskNode in OriginalNonPerRiskNodes) { //NodeTuple nodeTuple = new NodeTuple(false, node.Subject.ID, null); //FinalNodeTupleArray[node.Subject.ID] = nodeTuple; FinalNodes.Add(OriginalNonPerRiskNode); } RiskItemToTermCollectionAdditions = new Dictionary <long, TermCollection> [MaxSubjectIDBeforePerRiskExplosion + 1]; }