Пример #1
0
        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);
            }
        }
Пример #2
0
        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];
        }