Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Antisense creation doesn't work for the chain if not eligable base present in other chain presented in selection #6089

Open
AlexeyGirin opened this issue Dec 6, 2024 · 4 comments
Assignees
Labels
Antisense Bucket: Antisense related issues Priority: High Severity: Medium Medium level visibility to the user

Comments

@AlexeyGirin
Copy link
Collaborator

Steps to Reproduce

  1. Go to Macro - Snake mode
  2. Load from HELM using paste from clipboard: RNA1{R(A)P.[dR](A+C+G+U)P.R(A)P}|RNA2{R(A)P.[dR](A)P.R(A)P}|CHEM1{[4aPEGMal]}|CHEM2{[4aPEGMal]}|CHEM3{[4aPEGMal]}|CHEM4{[4aPEGMal]}|CHEM5{[4aPEGMal]}$CHEM4,CHEM3,1:R2-1:R1|CHEM3,CHEM5,1:R2-1:R1|CHEM1,CHEM3,1:R4-1:R3|CHEM1,RNA1,1:R1-9:R2|CHEM3,CHEM2,1:R4-1:R3|CHEM2,RNA2,1:R1-9:R2$$$V2.0
    image
  3. Select all monomers on the canvas and click Create Antisense Strand from context menu

Actual behavior
Nothing happens
Error in console:
image

Expected behavior
Antisense chain created
image

As per requirement:

1.3. If multiple chains are selected and more than one satisfies the previous requirements, the "Create Antisense Strand" option should appear, and if clicked, multiple antisense chains are created.

Versions

  • Ketcher Version 2.28.0-rc.1 Build at 2024-12-03; 17:04:52
  • Indigo Version 1.27.0-rc.1.0-g8d656a341-wasm32-wasm-clang-19.0.0
  • Chrome Version 131.0.6778.109 (Official Build) (64-bit)
  • Win10

Issue found while testing - #5678

@AlexeyGirin AlexeyGirin added this to the Ketcher 2.28.0-rc.2 milestone Dec 6, 2024
@AlexeyGirin AlexeyGirin changed the title Antisense creation doesn't work the chain if not eligable base present in other chain presented in selection Antisense creation doesn't work for the chain if not eligable base present in other chain presented in selection Dec 9, 2024
@rrodionov91 rrodionov91 self-assigned this Dec 10, 2024
@rrodionov91
Copy link
Collaborator

Fixed in #6099. Backmerged in #6111. Not linked because github does not allow to link more than 10 issues to PR

@AlexeyGirin
Copy link
Collaborator Author

Not fully fixed.
System doesn't crash but it create antisense chain for top chian but is shouldn't
Actual result:
image
Expected result:
image

As per requirement:

1.1. If there is a sugar in the backbone and it is connected to the a base via R3-R1, but the base is not a "sense base" form the table above, the "Create Antisense Strand" option should appear, but be disabled.

For example, bases with natural analogue X from the library, or ambiguous bases not in the library.

@AlexeyGirin AlexeyGirin reopened this Dec 11, 2024
@AlexeyGirin AlexeyGirin added Severity: Medium Medium level visibility to the user and removed Priority: Medium labels Dec 11, 2024
@svvald svvald modified the milestones: Ketcher 2.28.0-rc.4, Ketcher 2.28.0-rc.5 Dec 25, 2024
@AlexeyGirin AlexeyGirin modified the milestones: Ketcher 2.28.0-rc.5, Ketcher 3.0.0-rc.2 Jan 9, 2025
@AlexeyGirin AlexeyGirin removed the bug label Jan 16, 2025
@rrodionov91 rrodionov91 removed their assignment Jan 21, 2025
@Drimodaren Drimodaren self-assigned this Jan 22, 2025
@AlexeyGirin AlexeyGirin added the Antisense Bucket: Antisense related issues label Jan 24, 2025
@Drimodaren
Copy link
Collaborator

Closing Issue #6089

Besides the previously mentioned non-obvious behavior for users, there are several additional arguments that make this issue redundant or conflicting with existing mechanics.

  1. Duplication of Logic from Issue Create Antisense Strand option is enabled even if antisensless base present in chain selection #6088
    • If Create Antisense Strand option is enabled even if antisensless base present in chain selection #6088 already includes a mechanism to disable antisense strand creation for non-compatible fragments, then additional filtering in Antisense creation doesn't work for the chain if not eligable base present in other chain presented in selection #6089 becomes redundant.
    • In Create Antisense Strand option is enabled even if antisensless base present in chain selection #6088, users immediately see that antisense strand creation is not possible, whereas in Antisense creation doesn't work for the chain if not eligable base present in other chain presented in selection #6089, the filtering happens automatically and might be confusing.
    • If both issues are implemented together, there could be UX conflicts because filtering would behave differently depending on the scenario.

  2. Unclear Selection Logic for Antisense Strand
    • If part of a structure allows antisense strand creation while another part does not, the user gets no explicit indication of why this is happening.
    • This may create a perceived bug, where the user selects a full sequence but only a partial antisense strand is generated.
    • Unlike disabling the button (as in Create Antisense Strand option is enabled even if antisensless base present in chain selection #6088), silent filtering does not explain the reason for rejection, leading to potential confusion.

  3. Increased Maintenance and Testing Complexity
    • Implementing dynamic filtering of antisense strands during selection will increase code complexity, requiring additional verification checks.
    • This introduces extra testing overhead, as various edge cases need to be considered where an antisense strand is only partially supported.
    • Future changes in the logic of strand construction may introduce unexpected issues, as two mechanisms (selection filtering and direct strand blocking) will need to be maintained simultaneously.

  4. Breaking Predictability in User Experience
    • Ketcher is designed to follow a predictable workflow: if an antisense strand cannot be created, the button should be disabled.
    • If the software automatically filters out incompatible segments during selection, users might not understand why certain regions were excluded.
    • This contradicts UX expectations: users should make their own selection decisions, rather than having an automated filtering mechanism with no clear explanation.

Conclusion
• Issue #6089 overlaps with #6088, but it introduces less transparency for users.
• Filtering antisense strand support during selection may cause confusion, as users will not see why certain parts of the strand are excluded.
• Implementing this logic adds complexity to maintenance and testing, potentially creating UX inconsistencies.
• Ketcher already provides a mechanism to disable antisense strand creation when it is not possible (#6088), making additional filtering unnecessary.

📌 Closing issue #6089 is justified because its implementation would introduce UX inconsistencies, redundant functionality, and reduced predictability in the software’s behavior.

@AlexeyGirin
Copy link
Collaborator Author

AlexeyGirin commented Feb 6, 2025

Not fixed in proper way.

  1. Go to Macro - Snake mode
  2. Load from HELM using paste from clipboard: RNA1{R(A)P.[dR](A+C+G+U)P.R(A)P}|RNA2{R(A)P.[dR](A)P.R(A)P}|CHEM1{[4aPEGMal]}|CHEM2{[4aPEGMal]}|CHEM3{[4aPEGMal]}|CHEM4{[4aPEGMal]}|CHEM5{[4aPEGMal]}$CHEM4,CHEM3,1:R2-1:R1|CHEM3,CHEM5,1:R2-1:R1|CHEM1,CHEM3,1:R4-1:R3|CHEM1,RNA1,1:R1-9:R2|CHEM3,CHEM2,1:R4-1:R3|CHEM2,RNA2,1:R1-9:R2$$$V2.0
    image
  3. Select all monomers on the canvas and click Create Antisense Strand from context menu

Actual behavior
System creates invalid antisense chain for top backbone and correct for bottom one
Image

Expected behavior
As per requirement 1.3: System does NOT create antisense chain for top backbone and correct for bottom one
image
BUT
If it is complicated - I would accept disabled antisense creation option if not a "sense base" present in the selection
Image

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Antisense Bucket: Antisense related issues Priority: High Severity: Medium Medium level visibility to the user
Projects
None yet
Development

No branches or pull requests

4 participants