libera/#clasp - IRC Chatlog
Search
13:03:04
drmeister
yitzi: If I wanted to throw some graphic objects into that rendering - how would I do it?
13:03:39
drmeister
I have the centroid and normal for a plane that minimizes the distance between the atoms of a ring to the plane.
13:03:55
drmeister
How can I throw up a ball to represent the centroid and a small square to represent the plane?
13:05:11
yitzi
drmeister: You would add shapes. There are some examples here https://github.com/yitzchak/ngl-clj/blob/main/examples/shape.ipynb
13:06:07
Bike
another thing on my todo list is to add a verbose mode so the compiler will tell you when it uses unboxed arithmetic and doesn't
13:06:18
Bike
as hopefully sort of a prelude to the sort of messages sbcl gives you on high optimization settings
13:06:23
drmeister
If I already have a view like this... Can I add them to the view after I generate it?
13:07:53
drmeister
(class-of view) -> #<The JUPYTER/WIDGETS:TRAIT-METACLASS RESIZABLE-BOX:RESIZABLE-GRID-BOX>
13:18:51
drmeister
In the last year we developed the capability to synthesize billions of different molecules that look like this.
13:19:47
drmeister
They are like little peg boards that you can attach bits of drugs that bind proteins.
13:20:31
drmeister
I'm going to make a structural database of all of them and put it online for people to dock to protein surfaces from structures that are in the Brookhaven Protein Databank and protein structures that are coming out of AlphaFold.
13:20:36
yitzi
drmeister: Apparently I added a keyword `:shapes` to do this https://github.com/cando-developers/cando/blob/5f4950d97c3d3dd8d043737fbf63389b07f125bd/src/lisp/cando-widgets/show.lisp#L209
13:22:12
drmeister
When I'm using jupyterlab sometimes I select a cell and hit 'x' or 'c' and nothing happens.
13:22:44
drmeister
I have to select inside the input box and then select the cell and then these single key commands work.
13:37:50
drmeister
Occasionally I get monsters from the model building. Monsters have bonds sticking through rings. I need to detect these and restart the model building.
13:39:14
drmeister
So here I'm starting by building a plane for each ring and then looking for bonds that have atoms on opposite sides of the plane and then run a test if the bond is going through the inside of the ring using cross products or something.
13:39:57
drmeister
I don't want to write all this stuff in C++ because it's brittle and time consuming to debug and change.
13:47:58
Bike
got cl:float inlined. main thing left for floating point arithmetic is the truncate family, but i think i'll try fixnum conversions first
13:49:35
drmeister
Unknown CHANGE-CLASS initialization arguments for #<The STANDARD-CLASS CLEAVIR-BIR:VARIABLE> to #<The STANDARD-CLASS VARIABLE>: (:RTYPE)
13:57:24
drmeister
./cleavir/bir-to-bmir.lisp343: (change-class datum 'cc-bmir:phi :rtype (phi-rtype datum)))
13:59:08
Bike
the rtype slot is its representation, like whether it's tagged or an unboxed float or what
14:00:36
Bike
i guess it could be a class named variable in some other package, but i don't know what that would be
14:00:49
Bike
if you could compile that file directly (like with compile-file) so a useful backtrace comes up that could help
14:27:57
drmeister
That's not the best way to express myself. I'm asking a question that probably has the answer "no" because you didn't predict my whims when you were implementing this.
14:28:35
drmeister
Your code is awesome - I don't want to make it look like it's coming up short in any way. It's freaking awesome.
14:29:49
yitzi
No worries. It doesn't look like the color includes opacity. Maybe it is set somewhere else. Looking...
14:34:28
yitzi
For a shape the default representation is a buffer-representation. The default constructor create one for you.
14:34:40
yitzi
Here https://github.com/yitzchak/ngl-clj/blob/33ce353a3b937629cbbbaff7c805443272ee0d91/lisp/component.lisp#L143
14:35:58
yitzi
We could add a `:shape-opacity` key to show and then send it the constructor. Or `:shape-rep-initargs`
14:55:22
drmeister
::notify Bike Check the log - here is a backtrace. I use udb on linux and I can see Common Lisp frames.
14:58:26
drmeister
yitzi: Thank you very much for your help. I'll be back later and turn this into a structure cleanup tool. Being able to visualize things will make it a lot easier to debug.
15:42:29
drmeister
I calculate the plane for which the deviation of each atom in the ring to the plane is lowest.
16:35:39
drmeister
It's tricky to get the atom that corresponds to a ball picked in the nglview widget.
16:36:24
drmeister
So I've been extracting the x,y,z coordinate of the picked object and I compare that to the x,y,z positions of every atom and the atom that matches the x,y,z position is the one that I'm picking.
16:36:47
drmeister
That isn't working now. The atoms all have x,y,z coordinates - but none of them match the x,y,z coordinate of the picked object.
16:37:48
drmeister
I can't pass atoms to the nglview widget - it's Javascript and atoms live in Common Lisp land.
16:38:24
drmeister
So I'd have to use this trick or code the identity of each atom uniquely in the name of the atom in the nglview widget (that's very tricky).
16:52:13
yitzi
drmeister: The position isn't a vector. Its a hash-table. If you want to make a vector from it you'd have to do (gethash "x" pos) to get each component.
16:52:50
yitzi
Also to determine atom identity you probably want the atom index or name from inside the "atom" hash-table.
17:29:31
drmeister
That makes me think I'm doing something wrong because I generate shapes using the atom coordinates and they are being rendered right where I expect them to be.
17:33:13
yitzi
When I have loaded molecules from files I have noticed that the names on the Javascript side and the CL side are the same.
17:35:02
drmeister
Selecting atoms based on their x,y,z coordinates worked fine until now. It should be robust. I'm wondering if there is an overall transform applied to the positions that wasn't before.
17:35:43
drmeister
I've spent hours on this problem in the past. Trying to figure out how to map picks to atoms. I settled on the x,y,z coordinate thing and now that doesn't work.
17:36:22
drmeister
So now we are having the same conversation that I had with myself long ago when I was trying to solve this problem.
17:36:23
drmeister
Do you know if there is any transform being applied to the positions of the atoms?
17:36:55
drmeister
Look - I'm getting the x,y,z coordinate of the picked object and then calculating the distance to each atom and then sorting the atoms by distance.
17:37:43
yitzi
There maybe a transform due to rotation. If they don't apply the rotation to the camera.
17:39:08
drmeister
They are inside of residue objects and they are inside of molecule objects and they are in aggregate objects.
17:41:16
drmeister
It depends on me not changing the object between the time I render it and I pick an atom.
17:42:10
drmeister
The coordinates of the atoms that I picked matched the coordinates of the atom that I gave it.
17:47:47
Colleen
Bike: drmeister said 2 hours, 52 minutes ago: Check the log - here is a backtrace. I use udb on linux and I can see Common Lisp frames.
18:03:48
Bike
can't imagine why. some stale fasl weirdness? if not, i guess i'd throw a (declare (notinline change-class)) in to that method to see if it persists
19:42:05
drmeister
https://github.com/clasp-developers/clasp/blob/main/src/lisp/kernel/cleavir/bir-to-bmir.lisp#L257
19:45:00
Bike
got ftruncate inlined. i think that's all enough to do floating point arithmetic efficiently, with some other operations defined in terms of what's there. i could maybe do scale-float but i don't think anyone particularly uses scale-float
19:46:51
Bike
i realized fixnum and vector stuff will also be tricky if it is to be done safely. for a prototype i might just define intrinsic functions to check types and see how that goes. don't think it should be any worse than what we do now
19:52:35
Bike
https://github.com/clasp-developers/clasp/blob/unboxed-floats/src/lisp/kernel/cleavir/bmir.lisp#L48-L53 cc-bmir:variable is defined here and it clearly has an :rtype initarg
19:53:29
Bike
so something's screwy there. i thought maybe some leftover fasl but that's not true if you switched machines
19:56:34
yitzi
drmeister: I don't think that you need to find the plane that goes through the ring in order to determine if the bond goes through the middle of the ring. I think you can find the point that on the bond that minimizes the distance between all the atoms in the ring and the bond. If that point is not between the atoms of the bond in question then it can't go through the ring. Then you basically calculate the winding number of that point to see if it is
19:59:32
yitzi
It's the number of times that the polygon loops around the point. https://en.wikipedia.org/wiki/File:Winding_number_algorithm_example.svg
20:00:47
yitzi
Since you are dealing with simple polygons the test ray will go through 0, 1, or 2 times. Only zero is inside.
20:04:39
Bike
i'm really not sure how this could happen. i guess... you could throw a (describe (find-class 'cc-bmir:variable)) or something in there? because the class definition is apparently wrong somehow?