glycoinfo / GlycanBuilder2

7 stars 5 forks source link

Problem displaying the reducing end for "Mass options of selected structures" menu #30

Closed e15d5605 closed 2 years ago

e15d5605 commented 2 years ago
  1. Select a glycan (freeEnd)

  2. Open the "Mass options of selected structures" menu

  3. Select "redEnd"

  4. Display a glycan having "redEnd"

  5. Select "freeEnd"

  6. "freeEnd" is not displayed

e15d5605 commented 2 years ago

MassOptionで選択された情報は以下の流れでGlycanへ反映される

setReducingEndTypeでreducing endに応じてルートノードの構成を変更しているが、redEnd以外の情報が選択された際にsetAlditolの条件を変更していない\ これによりreducing endのシンボルが非表示のままになっていると考えられる

e15d5605 commented 2 years ago

対応策

元々の処理を維持しつつredEndが選択された際の処理を変更する

public boolean setReducingEndType(ResidueType new_type) { 
    Residue redend = getRoot();     
    if( redend!=null && redend.isReducingEnd() && !redend.isCleavage() && !redend.getTypeName().equals(new_type.getName()) ) {
        redend.setType(new_type);

        //20211215, S.TSUCHIYA add
        if (redend.getTypeName().equals("redEnd")) {
            redend.getChildAt(0).setAlditol(true);
            redend.getChildAt(0).setAnomericState('?');
            redend.getChildAt(0).setRingSize('o');
        }
        if (redend.getTypeName().equals("d")) {
            redend.getChildAt(0).setAnomericState('?');
        }
        if (!redend.getTypeName().equals("redEnd")) {
            redend.getChildAt(0).setAlditol(false);
            if (redend.getChildAt(0).getRingSize() == 'o') {
                redend.getChildAt(0).setRingSize(redend.getChildAt(0).getType().getRingSize());
            }
        }   
        return true;
    }
    return false;
}

選択されたReducing endがredEndの場合はルートノードをアルジトールをtrue、アノマー情報を?、リングサイズをoに変更する

if (redend.getTypeName().equals("redEnd")) {
    redend.getChildAt(0).setAlditol(true);
    redend.getChildAt(0).setAnomericState('?');
    redend.getChildAt(0).setRingSize('o');
}

選択されたReducing endがdの場合はルートノードのアノマー情報を?に変更する

if (redend.getTypeName().equals("d")) {
    redend.getChildAt(0).setAnomericState('?');
}

選択されたReducing endがredEnd以外だった場合はルートノードのアルジトールをfalseに変更する\ また、ルートノードが開環の場合はその単糖のデフォルトのリングサイズを割り当てる

if (!redend.getTypeName().equals("redEnd")) {
    redend.getChildAt(0).setAlditol(false);
    if (redend.getChildAt(0).getRingSize() == 'o') {
        redend.getChildAt(0).setRingSize(redend.getChildAt(0).getType().getRingSize());
    }
}   

また、冒頭の条件式が冗長なので以下のように変更する

return false;


* 変更後

if (redend == null) return false; if (!redend.isReducingEnd()) return false; if (redend.isCleavage()) return false; if (redend.getTypeName().equals(new_type.getName())) return false;

e15d5605 commented 2 years ago

freeEndの糖鎖構造をMass OptionsでredEndに変更し、その後別のreducing endに変更してどのように表示されるのかを確認した

e15d5605 commented 2 years ago

20211216, ブランチにプッシュ済