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 typedef std::map<Int_t, TVector2> PadDimensionsMap;
45 typedef PadDimensionsMap::const_iterator PadDimensionsMapCIterator;
48 typedef TExMap PadDimensionsMap;
49 typedef TExMapIter PadDimensionsMapCIterator;
53 AliMpSectorSegmentation(const AliMpSector* sector);
54 AliMpSectorSegmentation();
55 virtual ~AliMpSectorSegmentation();
58 virtual AliMpVPadIterator* CreateIterator(const AliMpArea& area) const;
59 AliMpVPadIterator* CreateIterator(const AliMpPad& centerPad,
60 Bool_t includeCenter=kFALSE) const;
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;
72 virtual Int_t MaxPadIndexX() const;
73 virtual Int_t MaxPadIndexY() const;
74 virtual Int_t NofPads() const;
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;
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;
85 const AliMpSector* GetSector() const;
87 virtual void Print(Option_t* opt="") const;
89 virtual void GetAllElectronicCardIDs(TArrayI& ecn) const;
91 AliMpPlaneType PlaneType() const;
93 TVector2 Dimensions() const;
96 AliMpSectorSegmentation(const AliMpSectorSegmentation& right);
97 AliMpSectorSegmentation& operator = (const AliMpSectorSegmentation& right);
100 static const Double_t fgkS1; // the separators used for conversion
101 static const Double_t fgkS2; // of TVector2 to Long_t
104 Long_t GetIndex(const TVector2& vector2) const;
105 TVector2 GetVector(Long_t index) const;
109 void FillPadDimensionsMap();
110 AliMpMotifPosition* FindMotifPosition(const AliMpIntPair& indices) const;
111 virtual AliMpPad PadByXDirection(const TVector2& startPosition,
112 Double_t maxX) const;
113 virtual AliMpPad PadByYDirection(const TVector2& startPosition,
114 Double_t maxY) const;
117 const AliMpSector* fkSector; ///< Sector
118 AliMpPad* fPadBuffer; ///< The pad buffer
120 PadDimensionsMap fPadDimensionsMap; ///< Map between zone IDs and pad dimensions
123 mutable PadDimensionsMap fPadDimensionsMap; ///< Map between zone IDs and pad dimensions
126 Int_t fMaxIndexInX; ///< maximum pad index in x
127 Int_t fMaxIndexInY; ///< maximum pad index in y
129 ClassDef(AliMpSectorSegmentation,1) // Segmentation
135 inline const AliMpSector* AliMpSectorSegmentation::GetSector() const
138 #endif //ALI_MP_SECTOR_SEGMENTATION_H