]> git.uio.no Git - u/mrichter/AliRoot.git/blob - MUON/mapping/AliMpSectorSegmentation.h
Log for previous commit:
[u/mrichter/AliRoot.git] / MUON / mapping / AliMpSectorSegmentation.h
1 // $Id$
2 // Category: sector
3 //
4 // Class AliMpSectorSegmentation
5 // -----------------------------
6 // Class describing the segmentation of the sector.        
7 // Provides methods related to pads:
8 // conversion between pad indices, pad location, pad position;
9 // finding pad neighbour.
10 //
11 // Authors: David Guez, Ivana Hrivnacova; IPN Orsay
12
13 #ifndef ALI_MP_SECTOR_SEGMENTATION_H
14 #define ALI_MP_SECTOR_SEGMENTATION_H
15
16 #include <TVector2.h>
17
18 #include "AliMpSectorTypes.h"
19 #include "AliMpVSegmentation.h"
20 #include "AliMpPad.h"
21
22 class AliMpSector;
23 class AliMpMotifPosition;
24 class AliMpVPadIterator;
25 class AliMpIntPair;
26 class AliMpArea;
27
28 class AliMpSectorSegmentation : public AliMpVSegmentation
29 {
30   public:
31     AliMpSectorSegmentation(const AliMpSector* sector);
32     AliMpSectorSegmentation();
33     virtual ~AliMpSectorSegmentation();
34     
35     // factory methods  
36     virtual AliMpVPadIterator* CreateIterator(const AliMpArea& area) const;
37     AliMpVPadIterator* CreateIterator(const AliMpPad& centerPad,
38                                   Bool_t includeCenter=kFALSE) const;
39
40     // methods  
41     virtual AliMpPad PadByLocation(const AliMpIntPair& location,
42                                Bool_t warning = kTRUE) const;
43     virtual AliMpPad PadByIndices (const AliMpIntPair& indices, 
44                                Bool_t warning = kTRUE) const;
45     virtual AliMpPad PadByPosition(const TVector2& position ,
46                                Bool_t warning = kTRUE) const;
47     virtual AliMpPad PadByDirection(const TVector2& startPosition, 
48                                Double_t distance) const;
49  
50     virtual Int_t  MaxPadIndexX();
51     virtual Int_t  MaxPadIndexY();
52
53     virtual Int_t    Zone(const AliMpPad& pad, Bool_t warning = kTRUE) const;
54     virtual TVector2 PadDimensions(Int_t zone, Bool_t warning = kTRUE) const;
55
56     virtual Bool_t HasPad(const AliMpIntPair& indices) const;
57     Bool_t HasMotifPosition(Int_t motifPositionID) const;
58     TVector2 GetMinPadDimensions() const;
59     Bool_t CircleTest(const AliMpIntPair& indices) const;
60     void   PrintZones() const;
61    
62     const AliMpSector* GetSector() const;
63
64   protected:
65     AliMpSectorSegmentation(const AliMpSectorSegmentation& right);
66     AliMpSectorSegmentation&  operator = (const AliMpSectorSegmentation& right);
67
68   private:
69 #ifdef WITH_ROOT
70     static const Double_t   fgkS1;  // the separators used for conversion
71     static const Double_t   fgkS2;  // of TVector2 to Long_t
72     
73     // methods
74     Long_t    GetIndex(const TVector2& vector2) const;
75     TVector2  GetVector(Long_t index) const;
76 #endif
77
78     // methods
79     void  FillPadDimensionsMap();
80     AliMpMotifPosition*  FindMotifPosition(const AliMpIntPair& indices) const;
81     virtual AliMpPad PadByXDirection(const TVector2& startPosition, 
82                                      Double_t maxX) const;
83     virtual AliMpPad PadByYDirection(const TVector2& startPosition, 
84                                      Double_t maxY) const;
85     virtual AliMpVPadIterator* CreateIterator() const;
86  
87     // data members        
88     const AliMpSector*  fkSector;   // Sector
89     AliMpPad*           fPadBuffer; // The pad buffer
90 #ifdef WITH_STL
91     PadDimensionsMap    fPadDimensionsMap; //! Map between zone IDs and pad dimensions
92                               // EXCLUDED FOR CINT (does not compile on HP)    
93 #endif    
94 #ifdef WITH_ROOT
95     mutable PadDimensionsMap  fPadDimensionsMap; //  Map between zone IDs and pad dimensions
96 #endif 
97
98     Int_t  fMaxIndexInX;  // maximum pad index in x    
99     Int_t  fMaxIndexInY;  // maximum pad index in y    
100
101   ClassDef(AliMpSectorSegmentation,1)  // Segmentation
102 };
103
104
105 // inline functions
106
107 inline const AliMpSector* AliMpSectorSegmentation::GetSector() const
108 { return fkSector; }
109
110 #endif //ALI_MP_SECTOR_SEGMENTATION_H
111