Skip to content

Commit 4bc33e5

Browse files
authored
Merge pull request #5 from Ferlab-Ste-Justine/fix/CQDG-498
fix: CQDG-498 remove unwanted parents form term ancerstors
2 parents 5efcf77 + dfd961e commit 4bc33e5

File tree

3 files changed

+21
-11
lines changed

3 files changed

+21
-11
lines changed

src/main/scala/bio/ferlab/HPOMain.scala

Lines changed: 8 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -55,17 +55,19 @@ def generateTermsWithAncestors(fileBuffer: BufferedSource, topNode: Option[Strin
5555

5656
val ontologyWithParents = DownloadTransformer.transformOntologyData(dTwAncestorsParents)
5757

58-
val ontologyWithParentsFiltered = topNode match {
59-
case Some(topNode) => filterOntologiesForTopNode(ontologyWithParents, topNode)
60-
case None => ontologyWithParents
58+
val excludedParentsIds = topNode.flatMap(node => ontologyWithParents
59+
.find{ case(term, _) => term.id == node }
60+
.map{ case(_, parents) => parents.map(_.id) })
61+
62+
val ontologyWithParentsFiltered = (excludedParentsIds, topNode) match {
63+
case (Some(parentsIds), Some(node)) => filterOntologiesForTopNode(ontologyWithParents, node, parentsIds)
64+
65+
case _ => ontologyWithParents
6166
}
6267

6368
ontologyWithParentsFiltered.map {
6469
case (k, v) if allParents.contains(k.id) => k -> (v, false)
6570
case (k, v) => k -> (v, true)
6671
}
6772
}
68-
69-
70-
7173
}

src/main/scala/bio/ferlab/transform/DownloadTransformer.scala

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -69,8 +69,11 @@ object DownloadTransformer {
6969
})
7070
}
7171

72-
def filterOntologiesForTopNode(ontologyWithParents: Map[OntologyTerm, Set[OntologyTerm]], desiredTopNode: String): Map[OntologyTerm, Set[OntologyTerm]] = {
73-
ontologyWithParents.filter(t => t._2.map(_.id).contains(desiredTopNode) || t._1.id == desiredTopNode)
72+
def filterOntologiesForTopNode(ontologyWithParents: Map[OntologyTerm, Set[OntologyTerm]], desiredTopNode: String, unwantedParentsIds: Set[String]):
73+
Map[OntologyTerm, Set[OntologyTerm]] = {
74+
ontologyWithParents
75+
.filter { case(term, parents) => parents.map(_.id).contains(desiredTopNode) || term.id == desiredTopNode }
76+
.map{ case(term, parents) => (term, parents.filter( r => !unwantedParentsIds.contains(r.id))) }
7477
}
7578

7679
def getAllParentPath(term: OntologyTerm, originalTerm: OntologyTerm, data: Map[String, OntologyTerm], list: Set[OntologyTerm], cumulativeList: mutable.Map[OntologyTerm, Set[OntologyTerm]], allParents: Set[String]): mutable.Map[OntologyTerm, Set[OntologyTerm]] = {

src/test/scala/HPOMainSpec.scala

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -34,8 +34,13 @@ class HPOMainSpec extends AnyFlatSpec with Matchers {
3434
val file = Source.fromFile("src/test/scala/resources/hp.obo")
3535
val result = HPOMain.generateTermsWithAncestors(file, Some("HP:22"))
3636

37-
result.filter(t => t._1.id.startsWith("HP:2")).keySet.map(_.id) shouldEqual Set("HP:22")
38-
result.filter(t => t._1.id.startsWith("HP:3")).keySet.map(_.id) shouldEqual Set("HP:33","HP:34")
39-
result.filter(t => t._1.id.startsWith("HP:4")).keySet.map(_.id) shouldEqual Set("HP:43","HP:44")
37+
result.filter(t => t._1.id.startsWith("HP:2")).keySet.map(_.id) should contain theSameElementsAs Set("HP:22")
38+
result.filter(t => t._1.id.startsWith("HP:3")).keySet.map(_.id) should contain theSameElementsAs Set("HP:33","HP:34")
39+
result.filter(t => t._1.id.startsWith("HP:4")).keySet.map(_.id) should contain theSameElementsAs Set("HP:43","HP:44")
40+
41+
val testLeaf = result.find(t => t._1.id.equals("HP:44")).get._2._1
42+
val testLeafParentsIds = testLeaf.map(_.id)
43+
// Should not have HP:1 as one of its parents
44+
testLeafParentsIds.toList should contain theSameElementsAs Seq("HP:22", "HP:34")
4045
}
4146
}

0 commit comments

Comments
 (0)