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

Introduce creating antisense chains #5678

Open
ljubica-milovic opened this issue Oct 7, 2024 · 1 comment · May be fixed by #6032
Open

Introduce creating antisense chains #5678

ljubica-milovic opened this issue Oct 7, 2024 · 1 comment · May be fixed by #6032
Assignees
Labels
feature request Hydrogen bonds Bucket: Bugs related to Hydrogen bonds Requirements Done Test Cases Written Test cases has been written for that issue

Comments

@ljubica-milovic
Copy link
Collaborator

ljubica-milovic commented Oct 7, 2024

Theoretical background - What are antisense chains?

The central dogma of molecular biology states that the genetic information inside the cell flows in one direction: information stored within DNA gets transcribed to (messenger)RNA, and then the information within RNA gets translated to proteins.

DNA is technically two molecules (two chains) who wind around each other making the double helix shape DNA is known for. Every adenine on one chain will have a thymine "neighbor" on the other chain, and they will be strongly connected via hydrogen bonds. Same goes for cytosine and guanine. These two DNA chains are complementary - knowing the structure of one chain tells us the structure of the other; AND they are very tightly bond to each other.

During the process of transcription (making RNA from DNA), only one side/chain of DNA carries the information relevant for that particular gene. The information stored on it "makes sense" - the chain is sense. The other chain, the one whose information "does not make sense", is called antisense. The antisense chain is a template for creation of RNA - the created RNA will be identical to the sense DNA (with the known exceptions - deoxyribose will be replaced with ribose and thymine will be replaced with uracil). And just like the antisense chain is complementary to the sense chain, it is also complementary to the new RNA.

So, why in this ticked are our antisense chains RNA and not DNA? And what is the usefulness of RNA antisense chains?
RNA is chosen over DNA for many reasons, main ones being RNAs versatility - you can modify RNA more/more easily; and the fact that RNA/RNA is bound stronger than RNA/DNA.
As mentioned before, the information stored on the (messenger)RNA goes on to produce proteins. If those proteins are harmful to the organism (genetic mutation/hereditary disease), antisense oligonucleotides (ASOs) can be used to bind to the RNA and stop it from making the harmful proteins. Some diseases where ASOs can be used are: cystic fibrosis, Huntington's disease, sickle cell anemia, Alzheimer's disease, etc.

Complementary bases

Sense base Antisense base
Adenine, and all other bases with natural analogue A T (thymine)
Cytosine, and all other bases with natural analogue C G (guanine)
Guanine, and all other bases with natural analogue G C (cytosine)
Thymine, and all other bases with natural analogue T A (adenine)
Uracil, and all other bases with natural analogue U A (adenine)
N (ambiguous DNA base) and N (ambiguous RNA base) N (ambiguous RNA base)
B (ambiguous DNA base) and B (ambiguous RNA base) V (ambiguous base)
D (ambiguous DNA base) and D (ambiguous RNA base) H (ambiguous RNA base)
H (ambiguous DNA base) and H (ambiguous RNA base) D (ambiguous RNA base)
K (ambiguous DNA base) and K (ambiguous RNA base) M (ambiguous base)
W (ambiguous DNA base) and W (ambiguous RNA base) W (ambiguous RNA base)
Y (ambiguous DNA base) and Y (ambiguous RNA base) R (ambiguous base)
M (ambiguous base) K (ambiguous RNA base)
R (ambiguous base) Y (ambiguous RNA base)
S (ambiguous base) S (ambiguous base)
V (ambiguous base) B (ambiguous RNA base)

Requirements

  1. When the user selects (flex and snake modes) any backbone chain (only R1-R2 connections) or any part of the backbone chain, right clicking anywhere on the selected monomers should give a drop-down menu with to option to "Create Antisense Strand", as long as one of the monomers in the backbone is a sugar connected to a "sense base" (R3-R1) (see table above).

Valid selection (includes three sugars connected via a R3-R1 to a base - a nucleoside and two nucleotides):
image
Next two selections are equivalent to the first (the only important thing for the selection is the backbone):
image
image
Valid selection (contains one nucleoside):
image
Invalid selection:
image

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.

1.2. If any of the bases connected to the sugars via R3-R1 have more bonds (hydrogen or covalent), the "Create Antisense Strand" option should appear, but be disabled.

If a base has a bond with something in addition to the sugar, it will not be able to form hydrogen bonds with the antisense strand.
Bases with more than one AP: nC6n8A, nC6n5C, oC64m5, nC6n2G, nC65U, nC6n5U

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.

This is a selection of one chain (only one chain has R3-R1 sugar-base, the peptides from the chain above should be ignored when the antisense chain gets made):
image
This is a selection of two chains (both chains contain R3-R1 sugar-base, peptides should be copied into the first antisense chain because they are the part of the backbone of the first chain):
image

  1. When "Create Antisense Strand" is selected, an antisense strand is created following the logic:

2.1. All non R1-R2 connections of backbone monomers (except R3-R1 for sugar and base!!!) are ignored.

image
Only sugar with more than 3 APs: nC62r, and only phosphate with more than 2 APs: Test-6-Ph

2.2. Every nucleotide (sugar and phosphate are part of the backbone and connected via R2(s)-R1(p), and the sugar is connected to a "sense base" via R3(s)-R1(b)) should transform into a nucleotide on the antisense chain that contains ribose (R), phosphate (P), and the appropriate "antisense base".

2.3. Every nucleoside (not a nucleotide, sugar is connected through R2 to something that is not phosphate, or has a free R2, but is connected to a "sense base" through R3) should transform into a nucleoside on the antisense chain that contains ribose (R) and the appropriate "antisense base".

2.4. All other monomers in the backbone that are not a part of the nucleotide or a nucleoside should be directly copied to the antisense strand.

2.5. Every "sense base" that is connected to a sugar via R3-R1 from the original chain should have a hydrogen bond with the appropriate "antisense base" from the antisense chain.

2.6. Upon the creation of the antisense chain, both the sense and antisense chains get layouted.

Layouting logic described in ticket: #5712

2.7. The antisense chain should be "flipped" in relation to the sense chain (see mockups) - bases of the new chain should be oriented in the opposite way, terminal indicators of the left-most sugar (associated with the base of a highest number) should be changed from 5' to 3' (or opposite) and/or of the left most amino acid from N to C (or opposite), and the numbering should go in the opposite direction.

If the sense chain was oriented bases down, the antisense chain should be oriented bases up.
If the sense chain was oriented bases up, the antisense chain should be oriented bases down.
If the left most sugar/amino acid of the sense chain has a terminal indicator of 5'/N, then the left most sugar/amino acid of the antisense chain should have a terminal indicator of 3'/C.
If the left most sugar/amino acid of the sense chain has a terminal indicator of 3'/C, then the left most sugar/amino acid of the antisense chain should have a terminal indicator of 5'/N.
If the numbering of the sense chain increases from left to right, the numbering of the antisense chain should increase right to left.
If the numbering of the sense chain increases from right to left, the numbering of the antisense chain should increase left to right.

  1. Options "Delete" and "Copy" should also be added to the r-click menu.
    3.1. Option "Delete" deletes the selected monomers and all the bonds of those monomers.
    3.2. Option "Copy" copies the selected monomers and any bonds between them as the default format (KET files in macromolecules mode, Mol V3000 is molecules mode).

UX

image
sequence mode

More covered in the related issue: #5712

More examples

Example 1:

image

Example 2:

Original chain:
image
After selecting the whole chain and creating the antisense:
image
Note: for A in a sense chain, T should be added, not U

@Zhirnoff
Copy link
Collaborator

@rrodionov91 Please add a test-id to new right-click buttons during the development phase, if possible. This will make automation easier for us.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
feature request Hydrogen bonds Bucket: Bugs related to Hydrogen bonds Requirements Done Test Cases Written Test cases has been written for that issue
Projects
None yet
Development

Successfully merging a pull request may close this issue.

3 participants