+ /**
+ * Translate detector coordinates (detector, ring, sector, strip)
+ * to spatial coordinates (x, y, z) in the master reference frame
+ * of ALICE. The member function uses the transformations
+ * previously obtained from the TGeoManager.
+ *
+ * @param detector Detector number
+ * @param ring Ring id
+ * @param sector Sector number
+ * @param strip Strip number
+ * @param x On return, X coordinate
+ * @param y On return, Y coordinate
+ * @param z On return, Z coordinate
+ */
+ void Detector2XYZ(UShort_t detector, Char_t ring,
+ UShort_t sector, UShort_t strip,
+ Double_t& x, Double_t& y, Double_t& z) const;
+ /**
+ * Translate spatial coordinates (x,y,z) in the master reference
+ * frame of ALICE to the detector coordinates (detector, ring,
+ * sector, strip). Note, that if this method is to be used in
+ * reconstruction or the like, then the input z-coordinate should
+ * be corrected for the events interactions points z-coordinate,
+ * like
+ * @code
+ * geom->XYZ2Detector(x,y,z-ipz,d,r,s,t);
+ * @endcode
+ *
+ * @param x X coordinate
+ * @param y Y coordinate
+ * @param z Z coordinate
+ * @param detector On return, Detector number
+ * @param ring On return, Ring id
+ * @param sector On return, Sector number
+ * @param strip On return, Strip number
+ * @return @c false of (@a x, @a y, @a z) is not within this
+ * detector.
+ */
+ Bool_t XYZ2Detector(Double_t x, Double_t y, Double_t z,
+ UShort_t& detector, Char_t& ring,
+ UShort_t& sector, UShort_t& strip) const;
+ /**
+ * Make the geometry. This delegates to AliFMDGeometryBuilder
+ */
+ void Build();
+ /**
+ * @return Get detector offset in paths
+ */
+ Int_t GetDetectorOff() const { return fDetectorOff; }
+ /**
+ * @return Get sensor offset in paths
+ */
+ Int_t GetModuleOff() const { return fModuleOff; }
+ /**
+ * @return Get ring offset in paths
+ */
+ Int_t GetRingOff() const { return fRingOff; }
+ /**
+ * @return Get ring sector in paths
+ */
+ Int_t GetSectorOff() const { return fSectorOff; }
+ /**
+ * @param off Detector off-set set in geometry path
+ */
+ void SetDetectorOff(Int_t off) { fDetectorOff = off; }
+ /**
+ * @param off Module off-set set in geometry path
+ */
+ void SetModuleOff(Int_t off) { fModuleOff = off; }
+ /**
+ * @param off Ring off-set set in geometry path
+ */
+ void SetRingOff(Int_t off) { fRingOff = off; }
+ /**
+ * @param off Sectord off-set set in geometry path
+ */
+ void SetSectorOff(Int_t off) { fSectorOff = off; }
+ /**
+ * Check if volume @a vol is marked as active
+ *
+ * @param vol Volume ID
+ * @return @c true if @a vol is declared active
+ */
+ Bool_t IsActive(Int_t vol) const;
+ /**
+ * Set active volumes
+ *
+ * @param active Active volume id array
+ * @param n elements of @a active
+ */
+ void SetActive(Int_t* active, Int_t n);
+ /**
+ * Add an active volume
+ *
+ * @param id Register volume @a id to be active
+ */
+ void AddActive(Int_t id);
+ /**
+ * Get Array of active volume numbers
+ *
+ * @return constant reference to active volume numbers
+ */
+ const TArrayI& ActiveIds() const { return fActive; }
+ /**
+ * Set an external geometry builder
+ *
+ * @param b Geometry builder
+ */
+ void SetBuilder(AliFMDGeometryBuilder* b) { fBuilder = b; }
+ /**
+ * Check the volume depth of some nodes, get the active volume
+ * numbers, and so forth.
+ *
+ * @todo Here, we should actually also get the parameters of the
+ * shapes, like the verticies of the polygon shape that makes up the
+ * silicon sensor, the strip pitch, the ring radii, the z-positions,
+ * and so on - that is, all the geometric information we need for
+ * futher processing, such as simulation, digitization,
+ * reconstruction, etc.
+ */
+ void ExtractGeomInfo();
+ /**
+ * Whether we are to use a detailed geometry or not
+ *
+ * @param det if @c true, make a detailed geometry.
+ */
+ void SetDetailed(Bool_t det) { fDetailed = det; }
+ /**
+ * @return @c true if geometry is detailed
+ */
+ Bool_t IsDetailed() const { return fDetailed; }
+ /**
+ * @param ass Whether to use assemblies or not
+ */
+ void UseAssembly(Bool_t ass) { fUseAssembly = ass; }