} //end of Initialize public override LossTimeSeries GetNodeSubjectLoss(GraphNode node) { if (node.SubjectLoss != null) { return(node.SubjectLoss); } LossTimeSeries subjectLoss = new LossTimeSeries(1); //Recursively gets subject loss for a Node foreach (GraphNode childnode in GetChildrenForNode(node)) { subjectLoss.MergeTimeSeries(GetNodeSubjectLoss(childnode), Aggregation.Summed); } foreach (AtomicRITE rite in node.ResidualAtomicRITEs) { subjectLoss.MergeTimeSeries(rite.OriginalSubjectLoss, Aggregation.Summed); } return(subjectLoss); }
//public override void BuildAtomicRITEs() //{ // _atomicCoverageRITEs = RecursiveGetAtomicRITEs(TopNode); //} //private HashSet<CoverageAtomicRITE> RecursiveGetAtomicRITEs(GraphNode node) //{ // if (node.AtomicRITEsAdded == true) // return new HashSet<CoverageAtomicRITE>(node.AllAtomicRITEs.Cast<CoverageAtomicRITE>()); // //Get AtomicRites from Children // HashSet<CoverageAtomicRITE> ARITEsFromChildren = new HashSet<CoverageAtomicRITE>(); // if (node.Subject.IsDerived) // { // foreach (GraphNode childNode in GetChildrenForNode(node)) // { // ARITEsFromChildren.UnionWith(RecursiveGetAtomicRITEs(childNode)); // } // node.ResidualAtomicRITEs = new HashSet<AtomicRITE>(); // node.AllAtomicRITEs = new HashSet<AtomicRITE>(ARITEsFromChildren.Cast<AtomicRITE>().ToList()); // node.AtomicRITEsAdded = true; // return ARITEsFromChildren; // } // else // { // foreach (GraphNode childNode in GetChildrenForNode(node)) // { // ARITEsFromChildren.UnionWith(RecursiveGetAtomicRITEs(childNode)); // } // //Get Atomic Rites for subject of Node // HashSet<CoverageAtomicRITE> SubjectARITEs = node.Subject.GetAtomicRites(); // //var ResidualARITEs = SubjectARITEs.Except(ARITEsFromChildren); // HashSet<CoverageAtomicRITE> ResidualARITEs = new HashSet<CoverageAtomicRITE>(SubjectARITEs.Except(ARITEsFromChildren)); // HashSet<CoverageAtomicRITE> AllARITEs = new HashSet<CoverageAtomicRITE>(ResidualARITEs.Union(ARITEsFromChildren)); // node.ResidualAtomicRITEs = new HashSet<AtomicRITE>(ResidualARITEs.Cast<AtomicRITE>()); // node.AllAtomicRITEs = new HashSet<AtomicRITE>(AllARITEs.Cast<AtomicRITE>()); // node.AtomicRITEsAdded = true; // return AllARITEs; // } //} public override LossTimeSeries GetNodeSubjectLoss(GraphNode node) { if (node.SubjectLoss != null) { return(node.SubjectLoss); } PrimarySubject priSub = (PrimarySubject)node.Subject; Aggregation aggType = priSub.Schedule.IsLocation ? Aggregation.PerBuilding : Aggregation.Summed; LossTimeSeries subjectLoss = new LossTimeSeries(priSub.Schedule.ActNumOfBldgs); //Recursively gets subject loss for a Node foreach (AtomicRITE rite in node.AllAtomicRITEs) { subjectLoss.MergeTimeSeries(rite.SubjectLoss, aggType); } return(subjectLoss); }