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