libera/#clasp - IRC Chatlog
Search
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?
20:21:21
Bike
is something in cando USEing cc-bmir and then defining its own variable class? doesn't seem likely...
20:29:38
Bike
just cuz like, something is definitely screwy there. something in cando is def- wait. wait a second
20:30:44
Bike
the symbol VARIABLE is exported by the CL package. cc-bmir and whatever cando thing USE the CL package, but don't shadow VARIABLE. So when you write cc-bmir:variable you get cl:variable. So both cc-bmir and the cando thing try to define a class by that name.
20:31:00
Bike
Easy fix on the clasp end. We should also figure out what cando package is doing that and fix it too.
20:34:41
Bike
also we should have package locks to prevent this, but that's going to be involved to implement
20:36:03
Bike
https://github.com/clasp-developers/cl-netcdf/blob/master/src/clos.lisp#L12 yeah there we go.
20:39:42
drmeister
Ok, that's great. I was just going to give the "you made changes to the compiler so it's not surprising that we have a compiler bug. If we pull together - we can fix this together. I'll bring udb and the Python extensions and you bring that big brain of yours..."
20:41:06
Bike
i think my basic debugging strategy is that i'm really motivated to avoid looking at disassemblies in lldb for as long as possible
20:43:32
drmeister
I gotta run an errand. I pulled your changes and I'm building from distclean - I'll report when I get back on how far it went.
20:45:37
Bike
it shouldn't need to be fixed to prevent this particular problem, but it should be fixed to head off this kind of thing happening again
20:49:27
drmeister
Add (:shadow #:variable) here: https://github.com/clasp-developers/cl-netcdf/blob/master/src/packages.lisp#L7
20:50:13
drmeister
This lets us create a symbol in the netcdf package with the same name as a common lisp symbol.