1 /* Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
2 * See cxx source for full Copyright notice */
5 // $MpId: AliMpSectorSegmentation.h,v 1.15 2006/05/24 13:58:21 ivana Exp $
8 /// \class AliMpSectorSegmentation
9 /// \brief A segmentation of the sector.
11 /// Provides methods related to pads: \n
12 /// conversion between pad indices, pad location, pad position;
13 /// finding pad neighbour.
15 /// \author David Guez, Ivana Hrivnacova; IPN Orsay
17 #ifndef ALI_MP_SECTOR_SEGMENTATION_H
18 #define ALI_MP_SECTOR_SEGMENTATION_H
20 #include "AliMpContainers.h"
22 #include "AliMpVSegmentation.h"
35 class AliMpMotifPosition;
36 class AliMpVPadIterator;
40 class AliMpSectorSegmentation : public AliMpVSegmentation
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;
50 /// Pad dimensions map type
51 typedef TExMap PadDimensionsMap;
52 /// Pad dimensions map iterator type
53 typedef TExMapIter PadDimensionsMapCIterator;
57 AliMpSectorSegmentation(const AliMpSector* sector, Bool_t own = false);
58 AliMpSectorSegmentation();
59 virtual ~AliMpSectorSegmentation();
62 virtual AliMpVPadIterator* CreateIterator(const AliMpArea& area) const;
63 virtual AliMpVPadIterator* CreateIterator() const;
65 AliMpVPadIterator* CreateIterator(const AliMpPad& centerPad,
66 Bool_t includeCenter=kFALSE) const;
68 Int_t GetNeighbours(const AliMpPad& pad, TObjArray& neighbours,
69 Bool_t includeSelf = kFALSE,
70 Bool_t includeVoid = kFALSE) const;
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;
82 virtual Int_t MaxPadIndexX() const;
83 virtual Int_t MaxPadIndexY() const;
84 virtual Int_t NofPads() const;
86 virtual Int_t Zone(const AliMpPad& pad, Bool_t warning = kTRUE) const;
87 virtual TVector2 PadDimensions(Int_t zone, Bool_t warning = kTRUE) const;
89 virtual Bool_t HasPad(const AliMpIntPair& indices) const;
90 Bool_t HasMotifPosition(Int_t motifPositionID) const;
91 TVector2 GetMinPadDimensions() const;
92 Bool_t CircleTest(const AliMpIntPair& indices) const;
93 void PrintZones() const;
95 const AliMpSector* GetSector() const;
97 virtual void Print(Option_t* opt="") const;
99 virtual void GetAllElectronicCardIDs(TArrayI& ecn) const;
101 AliMp::PlaneType PlaneType() const;
103 TVector2 Dimensions() const;
107 AliMpSectorSegmentation(const AliMpSectorSegmentation& right);
109 AliMpSectorSegmentation& operator = (const AliMpSectorSegmentation& right);
112 static const Double_t fgkS1; ///< the separators used for conversion
113 static const Double_t fgkS2; ///< of TVector2 to Long_t
116 Long_t GetIndex(const TVector2& vector2) const;
117 TVector2 GetVector(Long_t index) const;
121 void FillPadDimensionsMap();
122 AliMpMotifPosition* FindMotifPosition(const AliMpIntPair& indices) const;
123 virtual AliMpPad PadByXDirection(const TVector2& startPosition,
124 Double_t maxX) const;
125 virtual AliMpPad PadByYDirection(const TVector2& startPosition,
126 Double_t maxY) const;
129 const AliMpSector* fkSector; ///< Sector
130 Bool_t fIsOwner; ///< Sector ownership
131 AliMpPad* fPadBuffer; ///< The pad buffer
133 PadDimensionsMap fPadDimensionsMap; ///< Map between zone IDs and pad dimensions
136 mutable PadDimensionsMap fPadDimensionsMap; ///< Map between zone IDs and pad dimensions
139 Int_t fMaxIndexInX; ///< maximum pad index in x
140 Int_t fMaxIndexInY; ///< maximum pad index in y
142 ClassDef(AliMpSectorSegmentation,2) // Segmentation
148 /// Return the sector
149 inline const AliMpSector* AliMpSectorSegmentation::GetSector() const
152 #endif //ALI_MP_SECTOR_SEGMENTATION_H