Replacement of AliMpIntPair object with algoritmic
[u/mrichter/AliRoot.git] / MUON / mapping / AliMpSector.h
1 /* Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
2  * See cxx source for full Copyright notice                               */
3
4 // $Id$
5 // $MpId: AliMpSector.h,v 1.14 2006/05/24 13:58:21 ivana Exp $
6
7 /// \ingroup sector
8 /// \class AliMpSector
9 /// \brief A sector (quadrant) of the MUON chamber of stations 1 and 2.
10 ///
11 /// \author David Guez, Ivana Hrivnacova; IPN Orsay
12
13 #ifndef ALI_MP_SECTOR_H
14 #define ALI_MP_SECTOR_H
15
16 #include <TNamed.h>
17
18 #include "AliMpDirection.h"
19 #include "AliMpPlaneType.h"
20 #include "AliMpEncodePair.h"
21
22 #include <TString.h>
23 #include <TVector2.h>
24 #include <TObjArray.h>
25
26 class AliMpZone;
27 class AliMpRow;
28 class AliMpVRowSegment;
29 class AliMpVMotif;
30 class AliMpVPadIterator;
31 class AliMpMotifMap;
32
33 class TArrayI;
34
35 class AliMpSector : public TNamed
36 {
37   public:
38     AliMpSector(const TString& id, Int_t nofZones, Int_t nofRows,
39                 AliMp::Direction direction, const TVector2& offset);
40     AliMpSector();
41     virtual ~AliMpSector();
42   
43     // methods  
44     virtual AliMpVPadIterator* CreateIterator() const;
45     void  SetRowSegmentOffsets();
46     void  Initialize(); 
47     void  PrintGeometry() const;
48
49     // find methods   
50     AliMpRow*     FindRow(const TVector2& position) const;    
51     AliMpVMotif*  FindMotif(const TVector2& position) const;
52     Int_t         FindMotifPositionId(const TVector2& position) const;
53
54     AliMpRow*          FindRow(Int_t motifPositionId) const;
55     AliMpVRowSegment*  FindRowSegment(Int_t motifPositionId) const;
56     TVector2           FindPosition(Int_t motifPositionId) const;
57
58     AliMpZone*  FindZone(const TVector2& padDimensions) const;
59
60     // geometry 
61     TVector2  Position() const;
62     TVector2  Dimensions() const;
63    
64     //
65     // get methods
66
67     Int_t       GetNofZones() const;
68     AliMpZone*  GetZone(Int_t i) const;    
69
70     Int_t       GetNofRows() const;
71     AliMpRow*   GetRow(Int_t i) const;
72
73     AliMp::Direction  GetDirection() const;  
74     AliMp::PlaneType  GetPlaneType() const;  
75
76     TVector2        GetMinPadDimensions() const;
77     TVector2        GetMaxPadDimensions() const;
78     MpPair_t        GetMaxPadIndices() const;
79     Int_t           GetNofPads() const;
80
81     AliMpMotifMap*  GetMotifMap() const;
82     void            GetAllMotifPositionsIDs(TArrayI& ecn) const;
83     
84     virtual void Print(Option_t* opt="") const;
85     
86   Int_t GetNofMotifPositions() const;
87     
88   private:
89     /// Not implemented
90     AliMpSector(const AliMpSector& right);
91     /// Not implemented
92     AliMpSector&  operator = (const AliMpSector& right);
93
94     // methods
95     AliMpVRowSegment* FindRowSegment(const TVector2& position) const;
96     void SetRowOffsets();
97     void SetMotifPositions();
98     void SetGlobalIndices();
99     void SetMinMaxPadDimensions();
100     void SetMaxPadIndices();
101     void SetNofPads();
102
103     // data members        
104     TString    fID;       ///< sector ID
105     TVector2   fOffset;   ///< sector position
106     TObjArray  fZones;    ///< zones
107     TObjArray  fRows;     ///< rows
108     AliMpMotifMap*   fMotifMap;         ///< motif map
109     AliMp::Direction fDirection;        ///< the direction of constant pad size
110     TVector2         fMinPadDimensions; ///< minimum pad dimensions
111     TVector2         fMaxPadDimensions; ///< miximum pad dimensions
112     MpPair_t         fLMaxPadIndices;   ///< maximum pad indices    
113     Int_t            fNofPads;          ///<  total number of pads
114
115   ClassDef(AliMpSector,2)  // Sector
116 };
117
118 // inline functions
119
120 /// Return the direction of constant pad size
121 inline AliMp::Direction AliMpSector::GetDirection() const 
122 { return fDirection; }    
123
124 /// Return minimum pad dimensions
125 inline TVector2   AliMpSector::GetMinPadDimensions() const
126 { return fMinPadDimensions; }
127
128 /// Return maxmum pad dimensions
129 inline TVector2   AliMpSector::GetMaxPadDimensions() const
130 { return fMaxPadDimensions; }
131
132 /// Return maximum pad indices
133 inline MpPair_t  AliMpSector::GetMaxPadIndices() const
134 { return fLMaxPadIndices; }
135
136 /// Return total number of pads
137 inline Int_t  AliMpSector::GetNofPads() const
138 { return fNofPads; }
139
140 /// Return the motif map
141 inline AliMpMotifMap* AliMpSector::GetMotifMap() const 
142 { return fMotifMap; }    
143
144 #endif //ALI_MP_SECTOR_H
145