Open e15d5605 opened 4 years ago
概要でも触れられているように、糖鎖構造の結合における分子の状態は確定している。\ 複数のLinkageTypeが割り当てられる構造はメチル基などのように限定されているため、ユーザーがLinkageTypeを編集できる状態を限定する必要があると考えられる。
以下の画像は硫酸基を選択した状態でResidue properties
を開いている。\
Linkage type(Parent)
が選択可能な状態になっているが、硫酸基はH_AT_OH
以外のLinkageTypeになることはないため不活化する。
ResiduePropertiesDialogの以下の処理で選択しているResidueを参照して、LinkageTypeの項目の有効・無効を切り替える。
public RepetitionPropertiesDialog(java.awt.Frame parent, Residue _current, GlycanDocument _theDoc) {
super(parent, true);
// set data
current = _current;
theDoc = _theDoc;
// init values
initComponents();
fillComponents();
setTraversal();
setActions();
setSelections();
enableItems();
// set location
setLocationRelativeTo(parent);
}
private void enableItems() {
field_LinkageType_head.setEnabled(true);
}
enableItems
でLinkageTypeの選択項目をデフォルトで有効化しているため、引数(_current)を追加して確認する処理を追加する。
単糖の追加をする関数(GlycanDocument::addResidue)を例として示す。
public Residue addResidue(Residue current, ArrayList<Residue> linked, Residue toadd) {
if (toadd == null || isInComposition(current))
return null;
// add a structure
if (isEmpty() || current == null || current.isReducingEnd()) {
return addStructure(toadd);
}
// append node to current selection
if (!current.addChild(toadd))
return null;
// do the same with linked residues
if (linked != null) {
for (Residue r : linked)
r.addChild(toadd.cloneSubtree());
}
if (current.isSaccharide() || current.isBracket()) {
if (toadd.isSaccharide()) {
toadd = modifyLinkageType(toadd, LinkageType.DEOXY, LinkageType.H_AT_OH);
}
if (toadd.isSubstituent()) {
toadd = modifyLinkageType(toadd, LinkageType.NONMONOSACCHARID, LinkageType.DEOXY);
}
}
// update views
fireDocumentChanged();
return toadd;
}
選択したResidue(current)が単糖か糖鎖フラグメントのブラケットだった場合に以下の処理を行う。\
toaddは新しく追加されるResidueであり、単糖か置換基の場合はLinkageTypeを固定している。\
toadd.isSubstituent()
の条件を細分化することでメチル基などの置換基のLinkageTypeの最適化を避ける?
if (current.isSaccharide() || current.isBracket()) {
if (toadd.isSaccharide()) {
toadd = modifyLinkageType(toadd, LinkageType.DEOXY, LinkageType.H_AT_OH);
}
if (toadd.isSubstituent()) {
toadd = modifyLinkageType(toadd, LinkageType.NONMONOSACCHARID, LinkageType.DEOXY);
}
}
概要
Glycanオブジェクトが生成された段階でLinkageTypeが全てUNVALIDATEDになっており適切な状態になっていない.
のように最適な状態で定義される必要がある.