glycoinfo / GlycanBuilder2

7 stars 5 forks source link

Linkage line is not depicted of the root of fragments #46

Open e15d5605 opened 2 years ago

e15d5605 commented 2 years ago

以下のGWSを入力

freeEnd--??1D-GlcNAc,p--??1D-GlcNAc,p--??1D-Man,p(--3a1D-Man,p(--2a1D-Man,p--2a1D-Man,p)--6a1D-Man,p--6a1D-Man,p--6a1D-Man,p--6a1D-Man,p--6a1D-Man,p--6a1D-Man,p--6a1D-Man,p--6a1D-Man,p(--2a1D-Man,p--2a1D-Man,p--2a1D-Man,p--3a1D-Man,p--2a1D-Man,p)--6a1D-Man,p(--2a1D-Man,p--2a1D-Man,p--2a1D-Man,p--2a1D-Man,p--3a1D-Man,p)--6a1D-Man,p(--2a1D-Man,p--2a1D-Man,p--2a1D-Man,p--3a1D-Man,p)--6a1D-Man,p(--2a1D-Man,p--2a1D-Man,p--2a1D-Man,p)--6a1D-Man,p(--2a1D-Man,p--2a1D-Man,p--2a1D-Man,p)--6a1D-Man,p(--2a1D-Man,p--2a1D-Man,p--2a1D-Man,p)--6a1D-Man,p(--2a1D-Man,p--2a1D-Man,p--2a1D-Man,p)--6a1D-Man,p(--2a1D-Man,p--2a1D-Man,p)--6a1D-Man,p)--6a1D-Man,p(--3a1D-Man,p)--6a1D-Man,p--6a1D-Man,p}--??1D-Man,p--2a1D-Man,p--2a1D-Man,p$MONO,perMe,Na,0,freeEnd
image

LinkageのラインはLinkageRenderで描画しているため、そこでルートノードを確認する際の処理に問題があると考えられる。\ TODO: LinkageRenderの調査を行い、問題点を追記する

e15d5605 commented 2 years ago

AbstractGlycanRendererに繰り返し構造のサブグラフを描画するpaintBracketという関数が実装されている。その中で結合情報のラインを描画するために以下の処理を行なっているが、Compositionやコア側の結合情報を持たないルートノードの結合を描画しないという条件に該当している。

if (!_glycan.isComposition() && !link.getChildResidue().getParentsOfFragment().isEmpty()) {
    theLinkageRenderer.paintEdge(paintable, link, selected, node_bbox, node_bbox, child_bbox, child_border_bbox);
}

WURCSから糖鎖フラグメントを読み込む処理では、コア側の結合が見られない場合に全てのコアの単糖と結合するよう補正を行なっていたが、それ以外の形式では補正が行われないため後者の条件に当てはまってしまったと考えられる。また、後者の処理はisCompositionを実装していなかった頃の名残だったと記憶しているため、糖鎖フラグメントを扱う上では必要な判定ではないように感じられる。Compositon_with/without_linkageの描画なども合わせて、継ぎ足しで開発を行なっていたため整理が必要である。

また、試しに後者の!link.getChildResidue().getParentsOfFragment().isEmpty()をコメントアウトした状態で以下のGWSを入力すると結合ラインが描画されていることを確認した。

freeEnd--?a1D-Glc,p--4a1D-Glc,p}--4a1D-Gal,p$MONO,perMe,Na,0,freeEnd
image
e15d5605 commented 2 years ago

糖鎖フラグメントとCompositionの結合情報を描画する際に、条件を明確に分けることが適切と考えられる。

Glycan fragments

Compositionでない場合は結合情報のラインを描画する。

if (!_glycan.isComposition()) {
    theLinkageRenderer.paintEdge(paintable, link, selected, node_bbox, node_bbox, child_bbox, child_border_bbox);
}

Composition (with/without linkage)

Compositionで結合情報を持つ(with_linkage)の構造の結合ラインを描画する。

if (_glycan.isComposition() && !link.getChildResidue().getParentsOfFragment().isEmpty()) {
    theLinkageRenderer.paintEdge(paintable, link, selected, node_bbox, node_bbox, child_bbox, child_border_bbox);
}