Skip to content

FEA: support for explicit tail length in seamless design #32

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

Open
daz10000 opened this issue Jul 25, 2019 · 0 comments
Open

FEA: support for explicit tail length in seamless design #32

daz10000 opened this issue Jul 25, 2019 · 0 comments

Comments

@daz10000
Copy link
Contributor

Currently seamless designs have somewhat adhoc methods for controlling primer design. The amplification tm is controlled by the core targettm pragma but the tail length is a side effect of the seamlessoverlaptm optimization and constrained to be shorter than the sum of the length of the fwd and rev primers for amplification. This code is controlled in PrimerDesign.fs in the seamless function.

current logic

Is approximately

Allocate half of the primer to forward and reverse

let maxFwd = dp.pp.maxLength / 2
let maxRev = dp.pp.maxLength - maxFwd

Design fwd and rev amp regions. There are small optimizations in case primer design fails on one side and not the other, reallocating capacity to one side or the other.

 //                       -------> (fwd)
 //   ===================|====================
 //          <----------- (rev)
 //

Now design tails in the success function with f and r oligos as material. This plays with the tails of the primers to get the overlap Tm correct. This is where the possibly suboptimal planning occurs. Note the tail length can never exceed the length of the original fwd and rev primers that were designed. It makes it impossible for example to have a normal amplification tm e.g. 60 and long (60bp) tails.

 // Get optimal tail lengths ( ~~~s below) to get the right internal seamlessoverlaptm
        let bestF,bestR =
            optOverlapTm
                (min (dp.overlapMinLen/2) f.oligo.Length)
                (min (dp.overlapMinLen/2) r.oligo.Length)
                f.oligo.Length
                r.oligo.Length
                9999.0<C>

Proposal

Add an extra #seamlesstaillen pragma to allow control of the tail length. If that pragma is available, the tails are simply set to explicitly requested length with caveat that it can not exceed the primermaxlen constraint. It would override the seamlessoverlaptm constraint if present. The main complication implementing this is that currently the fwd and rev primers are the only passed in material that the success function can use. To exceed the original primer body length, we would need to pass in a longer runway to the success function in addition to the primers. The template / substrate is available at time of primer design in the designSingle function. One final complication to be aware of is that the design with variable ends (approxEnds) can result in a primer which isn't a simple prefix of the template.

Example code

#warnoff zeronine
#platform stitch
#linkers MT,MT|

#primermax 120
#overlapminlen 80
uHO {#fuse} ; dHO

Fwdbody is 39 bp, Fwdtail is 34bp, overlap is 73bp

image

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

1 participant