Message: Another4JohnAllison: bounding boxes and solid angles | Not Logged In (login) |
John, I mentioned I had another question for you. The general problem is this: Can I use Geant methods to efficiently (a) find the intersection of a number of solids and then (b) obtain the coordinates of a bounding box or sphere that covers the solid angle subtended by the resulting 3D (possibly disconnected) volume region? For (b) it is the coordinates that I need, not just the width or diameter of the bounding box. Alternatively if I can write a method that returns the theta and phi angles defining the solid angle to the overlap of the solid volumes then that'd suffice. My specific application is this: Find out where an unknown gamma ray source is located given only the back projected cones defined by the Compton scattering of a source photon at a detector. My detector can find the cone that the source must lie on, but only with some non-zero resolution, so the cone is not a precise surface, but is rather a solid cone annulus. Further, the source might not be a point source, so the backward cones will not intersect at a unique point anyway, so I have to consider volumes, not conic surfaces. This is where Geant could help me (save me writing my own solid geometry clases from scratch!). The geometrical problem to solve is this: So I need to find the intersection of 2 or more cone annuli ("thick cones", like solid pointed witch hats, i.e., solid regions bounded by two conics). I only need an algorithm for single-sided cones (not full double cones). I've breifly looked for analytic algorithms but this cone intersection problem using surface intersections is apparently quite hard except for special cases (such as cones with the same apex). But if the GetExtent() or CalculateExtent() methods in Geant work for solids defined by boolean intersection then I think my job would be accomplished. I'd only need to arrange my code to perform the steps to get all the solid cones defining the intersection and then get the solid angle in space that covers their intersection. In practise the algorithm would have to be sequential, finding first the interseciton of two cone annuli, then finding the intersection of that intersection with a thrid cone annulus, then a fourth, a fifth and so on, halting whenever the solid angle of the resulting overall intersection goes below some tolerance or when no intersection is found. A few things may thwart me: One is that the procedure I'm thinking of requires taking intersections of intersections, so towards the end of the algorithm I'd be dealing with finding the intersections of a solid cone with a probably disconnected region. Another problem may be that computationally this is just too slow to perform with Geant and some other special purpose algorithm could do a better job, but currently that is not my chief concern, I just want to see if Geant can solve the problem, then I can test it against other algorithms for the same problem. I'm also hoping that when I use G4VSolids to perform these calculations I can get a solid angle to the 3D intersection region directly without having to make physical placments, but is that possible? From the way Geant's boolena solid operators seem to be defined I would expect that I can do all that I require without making an actual physical volume placement at least for two cones, but if I make repeated intersections will the coordinate system be remembered? (I don't think I've explained that last bit very well, do you nevertheless see what I'm concerned about? ---It's that my task is really to find the direction in space to the location of the meeting of a number of cone annuli physical volumes, but I'd like to do the entire calculation with G4VSolid volumes keeping the origin as the apex of the very first cone created to form the first annulus.) What do you think? Can Geant do the job? If you need more clarification of the problem definition in order to give me a definite answer then email me directly and I'll give you the details. Apologies for the verbosity, Blair. |
Inline Depth: | Outline Depth: | Add message: |
to: |