Message: Getting local coordinates Not Logged In (login)
 Next-in-Thread Next-in-Thread
 Next-in-Forum Next-in-Forum

Question Getting local coordinates 

Forum: Geometry
Date: 21 Apr, 2016
From: Florian Dachs <Florian Dachs>

Hello!

I have a problem with reading out the coordinates of a hit within my sensitive detector and I cannot figure out how to solve it.

My Geometry consists of a central scintillation cube made fo LYSO:Ce and on every side of this cube, I have placed a DPC tile with the following substructure:

1 detector tile contains 4x4 dies

1 die contains 2x2 pixels

1 pixel contains 2x2 subpixels

1 subpixel contains 32x25 SPADs (Single Photon Avalanche Diodes)

If I made my SPADs sensitive, that would be 204k volumes as sensitive detectors per tile, and I have 6 tiles. I also need to define optical surfaces for all of them because the are silicon detectors and I need to take reflection into account.

That's why I chose a different way: I place all detector elements explicitly into my geometry except the SPADs. I make the subpixels sensitive detectors, which brings the number of sensitive volumes down to at least ~1.5k. Since the SubPixel, just like the SPADs, is completely filled with silicon, all the hits must be registered on the surface, the local x-y-coordinates of a subpixel should let me determine which SPAD would have been hit.

Then I get the replica number from the subpixel, pixel, die and tile and I have all the data I need.

What I tried within my SubPixelHit class:

G4ThreeVector hitpos = step -> GetPostStepPoint() -> GetPosition();

...gives me the global position of the hit and

G4ThreeVector rel_pos[n] = step -> GetPostStepPoint() -> GetTouchableHandle()
                      -> GetVolume(n) -> GetObjectTranslation();

...gives me the the translation of any of the mother volumes of my subpixel with reference to the world.

I tried adding up all the translations of my mothervolumes and substracting the total vector from the global hit position which would give a vector within my Subpixel volume, but I get wrong results (the coordinates of these results leave the geometry, probably because the tiles are rotated to fit to the scintillation cube).

I played around with trying to rotate the frames of the tiles back to match the global frame and add the vectors then, but the problem is, that GetObjectRotation from G4VPhysicalVolume returns a G4RotationMatrix and rotate() from G4ThreeVector takes only HepRotation types. Funny enough, they seem to be the same in the documentation, but geant4 throws an error if I try to use it...

Is there a way to get these local coordinates or maybe a different solution all together?

Here's a link to a few pictures of my geometry:

https://www.dropbox.com/sh/0thfdqx8b5m99ga/AADMAsdG2D21QxcEmTmzrNLHa?dl=0

best regards,

Badger

PS: I found a few entries in the forum with similar questions about local coordinates, but they all were about getting them after a run, I try to get them during a hit, so I thought there might be a simpler solution.

 Add Message Add Message
to: "Getting local coordinates"

 Subscribe Subscribe

This site runs SLAC HyperNews version 1.11-slac-98, derived from the original HyperNews


[ Geant 4 Home | Geant 4 HyperNews | Search | Request New Forum | Feedback ]