Line data Source code
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
24 : class AliFMDRing;
25 : class 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 : */
35 : class AliFMDDetector : public TNamed
36 : {
37 : public:
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 0 : 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 0 : void SetId(Int_t x) { fId = x; }
60 : /** @param x Position of outer ring along z */
61 36 : void SetInnerZ(Double_t x) { fInnerZ = x; }
62 : /** @param x Position of outer ring along z */
63 30 : void SetOuterZ(Double_t x) { fOuterZ = x; }
64 : /** @param x Inner radius of inner honeycomb */
65 90 : void SetInnerHoneyLowR(Double_t x) { fInnerHoneyLowR = x; }
66 : /** @param x Outer radius of inner honeycomb */
67 134 : void SetInnerHoneyHighR(Double_t x) { fInnerHoneyHighR = x; }
68 : /** @param x Inner radius of outer honeycomb */
69 68 : void SetOuterHoneyLowR(Double_t x) { fOuterHoneyLowR = x; }
70 : /** @param x Outer radius of outer honeycomb */
71 68 : void SetOuterHoneyHighR(Double_t x) { fOuterHoneyHighR = x; }
72 :
73 : /** @return Detector number */
74 44 : Int_t GetId() const { return fId; }
75 : /** @return Position of outer ring along z */
76 22 : Double_t GetInnerZ() const { return fInnerZ; }
77 : /** @return Position of outer ring along z */
78 8 : Double_t GetOuterZ() const { return fOuterZ; }
79 : /** @return Inner radius of inner honeycomb */
80 6 : Double_t GetInnerHoneyLowR() const { return fInnerHoneyLowR; }
81 : /** @return Outer radius of inner honeycomb */
82 6 : Double_t GetInnerHoneyHighR() const { return fInnerHoneyHighR; }
83 : /** @return Inner radius of outer honeycomb */
84 6 : Double_t GetOuterHoneyLowR() const { return fOuterHoneyLowR; }
85 : /** @return Outer radius of outer honeycomb */
86 28 : Double_t GetOuterHoneyHighR() const { return fOuterHoneyHighR; }
87 :
88 : /** @return Inner ring information */
89 541350 : AliFMDRing* GetInner() const { return fInner; }
90 : /** @return Outer ring information */
91 344338 : 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;
138 : protected:
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 12 : ClassDef(AliFMDDetector, 2); //
157 : };
158 :
159 : #endif
160 : //____________________________________________________________________
161 : //
162 : // Local Variables:
163 : // mode: C++
164 : // End:
165 : //
166 : // EOF
167 : //
|