]> git.uio.no Git - u/mrichter/AliRoot.git/blob - MUON/mapping/AliMpSectorSegmentation.h
Implementing the new methods of the interface class
[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.11 2006/03/02 16:35:06 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 /// Authors: David Guez, Ivana Hrivnacova; IPN Orsay
16
17 #ifndef ALI_MP_SECTOR_SEGMENTATION_H
18 #define ALI_MP_SECTOR_SEGMENTATION_H
19
20
21 #include "AliMpContainers.h"
22
23 #ifdef WITH_STL
24 #include <map>
25 #endif
26
27 #ifdef WITH_ROOT
28 #include <TExMap.h>
29 #endif
30
31 #include <TVector2.h>
32
33 #include "AliMpVSegmentation.h"
34 #include "AliMpPad.h"
35
36 class AliMpSector;
37 class AliMpMotifPosition;
38 class AliMpVPadIterator;
39 class AliMpIntPair;
40 class AliMpArea;
41
42 class AliMpSectorSegmentation : public AliMpVSegmentation
43 {
44   public:
45 #ifdef WITH_STL
46     typedef std::map<Int_t, TVector2>         PadDimensionsMap;
47     typedef PadDimensionsMap::const_iterator  PadDimensionsMapCIterator;
48 #endif
49 #ifdef WITH_ROOT
50     typedef  TExMap      PadDimensionsMap;
51     typedef  TExMapIter  PadDimensionsMapCIterator;
52 #endif
53
54   public:
55     AliMpSectorSegmentation(const AliMpSector* sector);
56     AliMpSectorSegmentation();
57     virtual ~AliMpSectorSegmentation();
58     
59     // factory methods  
60     virtual AliMpVPadIterator* CreateIterator(const AliMpArea& area) const;
61     AliMpVPadIterator* CreateIterator(const AliMpPad& centerPad,
62                                   Bool_t includeCenter=kFALSE) const;
63
64     // methods  
65     virtual AliMpPad PadByLocation(const AliMpIntPair& location,
66                                Bool_t warning = kTRUE) const;
67     virtual AliMpPad PadByIndices (const AliMpIntPair& indices, 
68                                Bool_t warning = kTRUE) const;
69     virtual AliMpPad PadByPosition(const TVector2& position ,
70                                Bool_t warning = kTRUE) const;
71     virtual AliMpPad PadByDirection(const TVector2& startPosition, 
72                                Double_t distance) const;
73  
74     virtual Int_t  MaxPadIndexX();
75     virtual Int_t  MaxPadIndexY();
76
77     virtual Int_t    Zone(const AliMpPad& pad, Bool_t warning = kTRUE) const;
78     virtual TVector2 PadDimensions(Int_t zone, Bool_t warning = kTRUE) const;
79
80     virtual Bool_t HasPad(const AliMpIntPair& indices) const;
81     Bool_t HasMotifPosition(Int_t motifPositionID) const;
82     TVector2 GetMinPadDimensions() const;
83     Bool_t CircleTest(const AliMpIntPair& indices) const;
84     void   PrintZones() const;
85    
86     const AliMpSector* GetSector() const;
87
88     virtual void Print(Option_t* opt="") const;
89     
90     virtual void GetAllElectronicCardIDs(TArrayI& ecn) const;
91
92     AliMpPlaneType PlaneType() const;
93     
94     TVector2 Dimensions() const;
95     
96 protected:
97     AliMpSectorSegmentation(const AliMpSectorSegmentation& right);
98     AliMpSectorSegmentation&  operator = (const AliMpSectorSegmentation& right);
99
100   private:
101 #ifdef WITH_ROOT
102     static const Double_t   fgkS1;  // the separators used for conversion
103     static const Double_t   fgkS2;  // of TVector2 to Long_t
104     
105     // methods
106     Long_t    GetIndex(const TVector2& vector2) const;
107     TVector2  GetVector(Long_t index) const;
108 #endif
109
110     // methods
111     void  FillPadDimensionsMap();
112     AliMpMotifPosition*  FindMotifPosition(const AliMpIntPair& indices) const;
113     virtual AliMpPad PadByXDirection(const TVector2& startPosition, 
114                                      Double_t maxX) const;
115     virtual AliMpPad PadByYDirection(const TVector2& startPosition, 
116                                      Double_t maxY) const;
117  
118     // data members        
119     const AliMpSector*  fkSector;   // Sector
120     AliMpPad*           fPadBuffer; // The pad buffer
121 #ifdef WITH_STL
122     PadDimensionsMap    fPadDimensionsMap; // Map between zone IDs and pad dimensions
123                               // EXCLUDED FOR CINT (does not compile on HP)    
124 #endif    
125 #ifdef WITH_ROOT
126     mutable PadDimensionsMap  fPadDimensionsMap; //  Map between zone IDs and pad dimensions
127 #endif 
128
129     Int_t  fMaxIndexInX;  // maximum pad index in x    
130     Int_t  fMaxIndexInY;  // maximum pad index in y    
131
132   ClassDef(AliMpSectorSegmentation,1)  // Segmentation
133 };
134
135
136 // inline functions
137
138 inline const AliMpSector* AliMpSectorSegmentation::GetSector() const
139 { return fkSector; }
140
141 #endif //ALI_MP_SECTOR_SEGMENTATION_H
142