0

我已经加载了 DNA SNP 的分层树 (DAG)。我想确定最低的共同祖先。

此查询有效,产生单个正确节点:

Match (n:SNPNode{SNP:'R-Z11'}), (m:SNPNode{SNP:'R-BY13828'})
match path=(n)-[:SNPParent*..99]->(MRCA)<-[:SNPParent*..99]-(m) 
return MRCA.SNP

但是,这没有产生任何结果:

Match (n:SNPNode{SNP:'R-Z11'}), (m:SNPNode{SNP:'R-S25289'})
match path=(n)-[:SNPParent*..99]->(MRCA)<-[:SNPParent*..99]-(m) 
return MRCA.SNP

即使寻找两个收益节点的祖先的两个查询,其中一些是共享的:

MATCH p=(n:SNPNode{SNP:'R-Z11'})-[r:SNPParent*..66]->(m) RETURN m.SNP

m.SNP
R-Z338
R-Z8
R-Z7
R-Z2
R-Z345
R-Z27
R-Z30
R-Z9
R-L48
R-Z301
R-Z381
R-U106
R-L151
R-L51
R-L23
R-M269
R-P297
R-L389
R-L754
R-M343

MATCH p=(n:SNPNode{SNP:'R-Z25289'})-[r:SNPParent*..66]->(m) RETURN m.SNP

m.SNP
R-S16701
R-S1774
R-Z341
**R-Z11**
R-Z338
R-Z8
R-Z7
R-Z2
R-Z345
R-Z27
R-Z30
R-Z9
R-L48
R-Z301
R-Z381
R-U106
R-L151
R-L51
R-L23
R-M269
R-P297
R-L389
R-L754
R-M343

似乎问题在于 R-Z11 在第二个查询的路径中,并且它本身就是祖先。换句话说,有时 LCA 处于最短路径的末端。有没有办法解决这个问题,以便 R-Z11 作为结果返回它是否在最短路径中?

4

2 回答 2

0

我认为您需要确保您的可变长度路径的下限为 0(当您省略下限时,如在当前查询中,它默认为 1)。这将使开始和结束节点被视为可能匹配到MRCA.

Match (n:SNPNode{SNP:'R-Z11'}), (m:SNPNode{SNP:'R-S25289'})
match path=(n)-[:SNPParent*0..99]->(MRCA)<-[:SNPParent*0..99]-(m) 
return MRCA.SNP
于 2017-09-28T19:41:47.697 回答
0

这是有效的查询:

match p=(n:SNPNode{SNP:'R-Z11'})<-[:SNPChild*0..99]-(MRCA:SNPNode)-[:SNPChild*0..99]->(m:SNPNode{SNP:'R-BY13828'}) 
return MRCA.SNP

或者,要使用布尔标志获取最低共同祖先 (MRCA):

match p=(n:SNPNode{SNP:'R-Z11'})<-[:SNPChild*0..99]-(MRCA:SNPNode)-[:SNPChild*0..99]->(m:SNPNode{SNP:'R-BY13828'}) unwind(nodes(p)) as pn
return case when pn.SNP=MRCA.SNP then True else False end as MRCA,pn.SNP

有了这个输出

MRCA单核苷酸多态性

假 R-Z11

假 R-Z338

真正的 R-Z8

错误的 R-BY13828

于 2017-12-05T16:53:20.873 回答