b65bcf90e9a9e92db4ab35c0447be3a1b6edccdf
[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.11 2006/03/14 09:05:38 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 /// Authors: David Guez, Ivana Hrivnacova; IPN Orsay
12
13 #ifndef ALI_MP_SECTOR_H
14 #define ALI_MP_SECTOR_H
15
16 #include "AliMpContainers.h"
17
18 #ifdef WITH_STL
19 #include <vector>
20 #endif
21
22 #ifdef WITH_ROOT
23 #include <TObjArray.h>
24 #endif
25
26 #include <TNamed.h>
27 #include <TString.h>
28 #include <TVector2.h>
29
30 #include "AliMpDirection.h"
31 #include "AliMpPlaneType.h"
32 #include "AliMpIntPair.h"
33
34 class TArrayI;
35 class AliMpZone;
36 class AliMpRow;
37 class AliMpVRowSegment;
38 class AliMpVMotif;
39 class AliMpVPadIterator;
40 class AliMpMotifMap;
41
42 class AliMpSector : public TNamed
43 {
44   public:
45 #ifdef WITH_STL
46     typedef std::vector<AliMpRow*> RowVector;
47     typedef std::vector<AliMpZone*> ZoneVector;
48 #endif
49 #ifdef WITH_ROOT
50     typedef TObjArray  RowVector;
51     typedef TObjArray  ZoneVector;
52 #endif
53
54   public:
55     AliMpSector(const TString& id, Int_t nofZones, Int_t nofRows,
56                 AliMpDirection direction, const TVector2& offset);
57     AliMpSector();
58     virtual ~AliMpSector();
59   
60     // methods  
61     virtual AliMpVPadIterator* CreateIterator() const;
62     void  SetRowSegmentOffsets();
63     void  Initialize(); 
64     void  PrintGeometry() const;
65
66     // find methods   
67     AliMpRow*     FindRow(const TVector2& position) const;    
68     AliMpVMotif*  FindMotif(const TVector2& position) const;
69     Int_t         FindMotifPositionId(const TVector2& position) const;
70
71     AliMpRow*          FindRow(Int_t motifPositionId) const;
72     AliMpVRowSegment*  FindRowSegment(Int_t motifPositionId) const;
73     TVector2           FindPosition(Int_t motifPositionId) const;
74
75     AliMpZone*  FindZone(const TVector2& padDimensions) const;
76
77     // geometry 
78     TVector2  Position() const;
79     TVector2  Dimensions() const;
80    
81     //
82     // get methods
83
84     Int_t       GetNofZones() const;
85     AliMpZone*  GetZone(Int_t i) const;    
86
87     Int_t       GetNofRows() const;
88     AliMpRow*   GetRow(Int_t i) const;
89
90     AliMpDirection  GetDirection() const;  
91     AliMpPlaneType  GetPlaneType() const;  
92
93     TVector2        GetMinPadDimensions() const;
94     AliMpIntPair    GetMaxPadIndices() const;
95     Int_t           GetNofPads() const;
96
97     AliMpMotifMap*  GetMotifMap() const;
98     void            GetAllMotifPositionsIDs(TArrayI& ecn) const;
99     
100     virtual void Print(Option_t* opt="") const;
101     
102     
103   protected:
104     AliMpSector(const AliMpSector& right);
105     AliMpSector&  operator = (const AliMpSector& right);
106
107   private:
108     // methods
109     AliMpVRowSegment* FindRowSegment(const TVector2& position) const;
110     void SetRowOffsets();
111     void SetMotifPositions();
112     void SetGlobalIndices();
113     void SetMinPadDimensions();
114     void SetMaxPadIndices();
115     void SetNofPads();
116
117     // data members        
118     TString    fID;       // sector ID
119     TVector2   fOffset;   // sector position
120     ZoneVector fZones;    // zones
121     RowVector  fRows;     // rows
122     AliMpMotifMap* fMotifMap; // motif map
123     AliMpDirection fDirection;// the direction of constant pad size
124     TVector2       fMinPadDimensions; // minimal pad dimensions
125     AliMpIntPair   fMaxPadIndices;    // maximum pad indices    
126     Int_t          fNofPads;     //  total number of pads
127
128
129   ClassDef(AliMpSector,1)  //Sector
130 };
131
132 // inline functions
133
134 inline AliMpDirection AliMpSector::GetDirection() const 
135 { return fDirection; }    
136
137 inline TVector2   AliMpSector::GetMinPadDimensions() const
138 { return fMinPadDimensions; }
139
140 inline AliMpIntPair  AliMpSector::GetMaxPadIndices() const
141 { return fMaxPadIndices; }
142
143 inline Int_t  AliMpSector::GetNofPads() const
144 { return fNofPads; }
145
146 inline AliMpMotifMap* AliMpSector::GetMotifMap() const 
147 { return fMotifMap; }    
148
149 #endif //ALI_MP_SECTOR_H
150