]> git.uio.no Git - u/mrichter/AliRoot.git/blob - MUON/mapping/AliMpSectorSegmentation.h
1fc19d4a0b3fe5c150161111960b22bdcc14d1bb
[u/mrichter/AliRoot.git] / MUON / mapping / AliMpSectorSegmentation.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: AliMpSectorSegmentation.h,v 1.15 2006/05/24 13:58:21 ivana Exp $
6
7 /// \ingroup sector
8 /// \class AliMpSectorSegmentation
9 /// \brief A segmentation of the sector.        
10 ///
11 /// Provides methods related to pads:                                     \n
12 /// conversion between pad indices, pad location, pad position;
13 /// finding pad neighbour.
14 ///
15 /// \author David Guez, Ivana Hrivnacova; IPN Orsay
16
17 #ifndef ALI_MP_SECTOR_SEGMENTATION_H
18 #define ALI_MP_SECTOR_SEGMENTATION_H
19
20 #include "AliMpContainers.h"
21
22 #include "AliMpVSegmentation.h"
23 #include "AliMpPad.h"
24
25 #include <TVector2.h>
26 #ifdef WITH_ROOT
27 #include <TExMap.h>
28 #endif
29
30 #ifdef WITH_STL
31 #include <map>
32 #endif
33
34 class AliMpSector;
35 class AliMpMotifPosition;
36 class AliMpVPadIterator;
37 class AliMpIntPair;
38 class AliMpArea;
39
40 class AliMpSectorSegmentation : public AliMpVSegmentation
41 {
42   public:
43 #ifdef WITH_STL
44     /// Pad dimensions map type
45     typedef std::map<Int_t, TVector2>         PadDimensionsMap;
46     /// Pad dimensions map iterator type
47     typedef PadDimensionsMap::const_iterator  PadDimensionsMapCIterator;
48 #endif
49 #ifdef WITH_ROOT
50     /// Pad dimensions map type
51     typedef  TExMap      PadDimensionsMap;
52     /// Pad dimensions map iterator type
53     typedef  TExMapIter  PadDimensionsMapCIterator;
54 #endif
55
56   public:
57     AliMpSectorSegmentation(const AliMpSector* sector, Bool_t own = false);
58     AliMpSectorSegmentation();
59     virtual ~AliMpSectorSegmentation();
60     
61     // factory methods  
62     virtual AliMpVPadIterator* CreateIterator(const AliMpArea& area) const;
63     virtual AliMpVPadIterator* CreateIterator() const;
64     
65     AliMpVPadIterator* CreateIterator(const AliMpPad& centerPad,
66                                       Bool_t includeCenter=kFALSE) const;
67
68     virtual Int_t GetNeighbours(const AliMpPad& pad, TObjArray& neighbours,
69                                Bool_t includeSelf = kFALSE,
70                                Bool_t includeVoid = kFALSE) const;
71     
72     // methods  
73     virtual AliMpPad PadByLocation(const AliMpIntPair& location,
74                                Bool_t warning = kTRUE) const;
75     virtual AliMpPad PadByIndices (const AliMpIntPair& indices, 
76                                Bool_t warning = kTRUE) const;
77     virtual AliMpPad PadByPosition(const TVector2& position ,
78                                Bool_t warning = kTRUE) const;
79     virtual AliMpPad PadByDirection(const TVector2& startPosition, 
80                                Double_t distance) const;
81  
82     virtual Bool_t HasPadByIndices(const AliMpIntPair& indices) const;
83     virtual Bool_t HasPadByLocation(const AliMpIntPair& location) const;
84     virtual Bool_t HasPad(const AliMpIntPair& indices) const;
85   
86     virtual Int_t  MaxPadIndexX() const;
87     virtual Int_t  MaxPadIndexY() const;
88     virtual Int_t  NofPads() const;
89
90     virtual void   GetAllElectronicCardIDs(TArrayI& ecn) const;
91     virtual Int_t  GetNofElectronicCards() const;
92     virtual Bool_t HasMotifPosition(Int_t motifPositionID) const;
93     virtual AliMpMotifPosition* MotifPosition(Int_t manuId) const;
94
95     virtual AliMp::PlaneType   PlaneType() const;
96     virtual AliMp::StationType StationType() const;
97
98     virtual TVector2 Dimensions() const;
99     virtual TVector2 Position() const;
100   
101     virtual void Print(Option_t* opt="") const;
102     
103     virtual Int_t    Zone(const AliMpPad& pad, Bool_t warning = kTRUE) const;
104     virtual TVector2 PadDimensions(Int_t zone, Bool_t warning = kTRUE) const;
105
106     TVector2 GetMinPadDimensions() const;
107     Bool_t CircleTest(const AliMpIntPair& indices) const;
108     void   PrintZones() const;
109    
110     const AliMpSector* GetSector() const;
111   
112   private:
113     /// Not implemented
114     AliMpSectorSegmentation(const AliMpSectorSegmentation& right);
115     /// Not implemented
116     AliMpSectorSegmentation&  operator = (const AliMpSectorSegmentation& right);
117
118 #ifdef WITH_ROOT
119     static const Double_t   fgkS1;  ///< the separators used for conversion
120     static const Double_t   fgkS2;  ///< of TVector2 to Long_t
121     
122     // methods
123     Long_t    GetIndex(const TVector2& vector2) const;
124     TVector2  GetVector(Long_t index) const;
125 #endif
126
127     // methods
128     void  FillPadDimensionsMap();
129     AliMpMotifPosition*  FindMotifPosition(const AliMpIntPair& indices) const;
130     virtual AliMpPad PadByXDirection(const TVector2& startPosition, 
131                                      Double_t maxX) const;
132     virtual AliMpPad PadByYDirection(const TVector2& startPosition, 
133                                      Double_t maxY) const;
134  
135     // data members   
136     const AliMpSector*  fkSector;   ///< Sector
137     Bool_t              fIsOwner;   ///< Sector ownership     
138     AliMpPad*           fPadBuffer; ///< The pad buffer
139 #ifdef WITH_STL
140     PadDimensionsMap    fPadDimensionsMap; ///< Map between zone IDs and pad dimensions
141 #endif    
142 #ifdef WITH_ROOT
143     mutable PadDimensionsMap  fPadDimensionsMap; ///< Map between zone IDs and pad dimensions
144 #endif 
145
146     Int_t  fMaxIndexInX;  ///< maximum pad index in x    
147     Int_t  fMaxIndexInY;  ///< maximum pad index in y    
148
149   ClassDef(AliMpSectorSegmentation,2)  // Segmentation
150 };
151
152
153 // inline functions
154
155 /// Return the sector
156 inline const AliMpSector* AliMpSectorSegmentation::GetSector() const
157 { return fkSector; }
158
159 /// Return station type
160 inline AliMp::StationType AliMpSectorSegmentation::StationType() const
161 { return AliMp::kStation12; }
162
163
164 #endif //ALI_MP_SECTOR_SEGMENTATION_H
165