rethinking the scaffold interface


Starting to rethink this whole slice-paired helix strategy of adding strands two at a time. It might be too limiting in terms of the types of structures one might wish to build, and also impose arbitrary constraints that make correctly routing scaffold very difficult or impossible.

The original idea was that you'd always start with a complete scaffold loop and you could quickly grow that into a correct structure. The hope was that having a loop would be instructive to the user in understanding how to construct a scaffold path. But I think that there may be many cases where there have to be intermediate "incorrect" structures in order to get specific structures. I also can't quite think of how to easily handle even simple cases where you add helices 0 and 1, and then remove 0 and 1 and then add back 0 and 3.

I think the best we can do is to have really intuitive and obvious constraints for how to "draw" a scaffold strand. Basically we're going to end up with with something that is more similar to the SVG drawing, but the constraints will make it work.

Unpaired ends of scaffold will need drag handles, and dragging them together will pair them, for example. We can add a suite of more intuitive drawing tools, like a scaffold brush to add more scaffold, and eraser to delete scaffold, etc. We can allow totally incorrect and disconnected scaffold arrangements and not worry about preventing those.

We'll have a checking routine which will verify a complete and single scaffold loop (and maybe turn it green to indicate it is legal). At that point it will be possible to generate staples with default breakpoints and crossovers, and route them similarly.

From Adam:

In contrast, I think it is hard to start by designing the path in the path panel, without already having a default scaffold path generated from the lattice. I hadn't been thinking about it in terms of the user always picturing

I guess I wasn't clear on this – we would still draw the initial structure using the slice panel. You would just do it one helix at a time, and on the path panel you would get path "stubs" - basically default horizontal scaffold path lines which are not connected via crossovers. (see attached)

If you wanted a six-helix bundle, you would draw the six helices in sequential order on the slice panel, and then do the rest of the editing on the path panel. You could drag the horizontal lines in either direction, and as they crossed segment boundaries, the slice panel would be updated accordingly (since slices are just zero-width planes which indicate where scaffold helices span).

The user could gradually stitch together the scaffold to make a complete loop.

The purpose of the slice panel would thus be to 1) create an initial bit of scaffold in the path panel to be edited further and in doing so 2) define the orientation of helices w.r.t. the hexagonal lattice.

Everything else would be handled in the path panel, and the render3d panel would of course give instant 3D visualization as you build things.