]> git.uio.no Git - u/mrichter/AliRoot.git/blame_incremental - FMD/AliFMDDetector.h
Fix to allow new initialization of AliReconstruction (C.H.Christinsen)
[u/mrichter/AliRoot.git] / FMD / AliFMDDetector.h
... / ...
CommitLineData
1#ifndef ALIFMDDETECTOR_H
2#define ALIFMDDETECTOR_H
3/* Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights
4 * reserved.
5 *
6 * Latest changes by Christian Holm Christensen <cholm@nbi.dk>
7 *
8 * See cxx source for full Copyright notice
9 */
10//__________________________________________________________________
11//
12// Utility class to help implement the FMD geometry. This provides
13// the interface for the concrete geometry implementations of the FMD
14// sub-detectors.
15/** @file AliFMDDetector.h
16 @author Christian Holm Christensen <cholm@nbi.dk>
17 @date Mon Mar 27 12:36:27 2006
18 @brief Sub-detector base class declaration
19 @ingroup FMD_base
20*/
21#ifndef ROOT_TNamed
22# include <TNamed.h>
23#endif
24class AliFMDRing;
25class TGeoMatrix;
26
27/** @defgroup FMD_base Basic classes */
28//__________________________________________________________________
29/** @brief Base class for the geometry description and parameters of
30 the FMD sub detectors FMD1, FMD2, and FMD3.
31
32 This class hold common parameters of the specific FMD detectors.
33 @ingroup FMD_base
34*/
35class AliFMDDetector : public TNamed
36{
37public:
38 /** Constructor
39 @param id Detector number
40 @param inner Pointer to inner ring geometry
41 @param outer Pointer to inner outer geometry
42 @return */
43 AliFMDDetector(Int_t id, AliFMDRing* inner, AliFMDRing* outer);
44 /** Copy CTOR
45 @param other Object to copy from. */
46 AliFMDDetector(const AliFMDDetector& other);
47 /** Assignment operator
48 @param other Object to assign from
49 @return reference to this object */
50 AliFMDDetector& operator=(const AliFMDDetector& other);
51 virtual ~AliFMDDetector() {}
52 /** Initialize the geometry */
53 virtual void Init();
54 /** Find the transformations that correspond to modules of this
55 detector, and store them in the arrays. */
56 virtual void InitTransformations();
57
58 /** @param x Detector number */
59 void SetId(Int_t x) { fId = x; }
60 /** @param x Position of outer ring along z */
61 void SetInnerZ(Double_t x) { fInnerZ = x; }
62 /** @param x Position of outer ring along z */
63 void SetOuterZ(Double_t x) { fOuterZ = x; }
64 /** @param x Inner radius of inner honeycomb */
65 void SetInnerHoneyLowR(Double_t x) { fInnerHoneyLowR = x; }
66 /** @param x Outer radius of inner honeycomb */
67 void SetInnerHoneyHighR(Double_t x) { fInnerHoneyHighR = x; }
68 /** @param x Inner radius of outer honeycomb */
69 void SetOuterHoneyLowR(Double_t x) { fOuterHoneyLowR = x; }
70 /** @param x Outer radius of outer honeycomb */
71 void SetOuterHoneyHighR(Double_t x) { fOuterHoneyHighR = x; }
72
73 /** @return Detector number */
74 Int_t GetId() const { return fId; }
75 /** @return Position of outer ring along z */
76 Double_t GetInnerZ() const { return fInnerZ; }
77 /** @return Position of outer ring along z */
78 Double_t GetOuterZ() const { return fOuterZ; }
79 /** @return Inner radius of inner honeycomb */
80 Double_t GetInnerHoneyLowR() const { return fInnerHoneyLowR; }
81 /** @return Outer radius of inner honeycomb */
82 Double_t GetInnerHoneyHighR() const { return fInnerHoneyHighR; }
83 /** @return Inner radius of outer honeycomb */
84 Double_t GetOuterHoneyLowR() const { return fOuterHoneyLowR; }
85 /** @return Outer radius of outer honeycomb */
86 Double_t GetOuterHoneyHighR() const { return fOuterHoneyHighR; }
87
88 /** @return Inner ring information */
89 AliFMDRing* GetInner() const { return fInner; }
90 /** @return Outer ring information */
91 AliFMDRing* GetOuter() const { return fOuter; }
92 /** @param id Id of ring to get
93 @return Pointer to ring, 0 on failure */
94 AliFMDRing* GetRing(Char_t id) const;
95 /** @param id Id of ring to get
96 @return Z position of ring or 0 on failure */
97 Double_t GetRingZ(Char_t id) const;
98
99 /** Translate detector coordinates (detector, ring, sector, strip)
100 to spatial coordinates (x, y, z) in the master reference frame
101 of ALICE. The member function uses the transformations
102 previously obtained from the TGeoManager.
103 @param ring Ring id
104 @param sector Sector number
105 @param strip Strip number
106 @param x On return, X coordinate
107 @param y On return, Y coordinate
108 @param z On return, Z coordinate */
109 void Detector2XYZ(Char_t ring, UShort_t sector, UShort_t strip,
110 Double_t& x, Double_t& y, Double_t& z) const;
111 /** Translate spatial coordinates (x,y,z) in the master reference
112 frame of ALICE to the detector coordinates (detector, ring,
113 sector, strip). Note, that if this method is to be used in
114 reconstruction or the like, then the input z-coordinate should
115 be corrected for the events interactions points z-coordinate,
116 like
117 @code
118 geom->XYZ2Detector(x,y,z-ipz,d,r,s,t);
119 @endcode
120 @param x X coordinate
121 @param y Y coordinate
122 @param z Z coordinate
123 @param ring On return, Ring id
124 @param sector On return, Sector number
125 @param strip On return, Strip number
126 @return @c false of (@a x, @a y, @a z) is not within this
127 detector. */
128 Bool_t XYZ2Detector(Double_t x, Double_t y, Double_t z,
129 Char_t& ring, UShort_t& sector, UShort_t& strip) const;
130
131 /** Declare alignable volumes */
132 virtual void SetAlignableVolumes() const;
133 /** Get transformation matrix for a sector in a ring
134 @param ring Ring id
135 @param sector Sector numberr
136 @return Matrix on success, 0 otherwise */
137 TGeoMatrix* FindTransform(Char_t ring, UShort_t sector) const;
138protected:
139 /** Check if we have all transformations for a ring
140 @param ring Ring to check for
141 @return @c true if we got all transforms */
142 Bool_t HasAllTransforms(Char_t ring) const;
143
144 Int_t fId; // Detector number
145 Double_t fInnerZ; // Position of outer ring along z
146 Double_t fOuterZ; // Position of outer ring along z
147 Double_t fInnerHoneyLowR; // Inner radius of inner honeycomb
148 Double_t fInnerHoneyHighR; // Outer radius of inner honeycomb
149 Double_t fOuterHoneyLowR; // Inner radius of outer honeycomb
150 Double_t fOuterHoneyHighR; // Outer radius of outer honeycomb
151 AliFMDRing* fInner; // Pointer to inner ring information
152 AliFMDRing* fOuter; // Pointer to outer ring information
153 TObjArray* fInnerTransforms; // List of inner module global
154 TObjArray* fOuterTransforms; // List of outer module global
155
156 ClassDef(AliFMDDetector, 2); //
157};
158
159#endif
160//____________________________________________________________________
161//
162// Local Variables:
163// mode: C++
164// End:
165//
166// EOF
167//