Dividing TGeoVolume (box) along alternating directions


I’d like to create the geometry of a tracker based on alternating scintillating fibres along orthogonal directions. It seems that the best performance is achieved by dividing an existing TGeoVolume, hence I’m trying to implement the following algorithm:

  1. create a box enclosing the whole tracker
  2. divide the box along Z into several thin slices
  3. divide even Z-slices along X and divide odd Z-slices along Y

This should give a block of square fibres running along X and Y in alternating planes, stacked along Z. This is the geometry I’d like to simulate. However, I don’t find a way of implementing point 3) above.

How can I access individual Z-slices produced after step 2)? If I can get their pointers, I can apply TGeoVolume::Divide() in the desired way.

Thanks a lot,
Diego Casadei

Hi Diego,

When you slice a volume, it gets you back a pointer to a TGeoVolumeMulti, that represents the group of the newly created volumes, which you can slice again. The problem for X/Y/Z divisions is that there is a single volume representing a “slice” (as they are all identical), so no way to slice this along both X and Y…

What you can do is the following: do the Z slicing so that each slice can accommodate both the fibres along X and those along Y. Then position inside every slice (the pointer returned by the first Z Divide) 2 equal boxes on top of each other that completely fill the slice (Xfibers and Yfibers). Then Divide the Xfibers box along X and Yfibers box along Y. You will get at the end the expected result…

Best, Andrei

1 Like

Thanks. This works.
Best regards,

This topic was automatically closed 14 days after the last reply. New replies are no longer allowed.