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.13 2006/03/17 11:38:28 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 /// Authors: 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);
101 static const Double_t fgkS1; // the separators used for conversion
102 static const Double_t fgkS2; // of TVector2 to Long_t
105 Long_t GetIndex(const TVector2& vector2) const;
106 TVector2 GetVector(Long_t index) const;
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;
118 const AliMpSector* fkSector; // Sector
119 AliMpPad* fPadBuffer; // The pad buffer
121 PadDimensionsMap fPadDimensionsMap; // Map between zone IDs and pad dimensions
122 // EXCLUDED FOR CINT (does not compile on HP)
125 mutable PadDimensionsMap fPadDimensionsMap; // Map between zone IDs and pad dimensions
128 Int_t fMaxIndexInX; // maximum pad index in x
129 Int_t fMaxIndexInY; // maximum pad index in y
131 ClassDef(AliMpSectorSegmentation,1) // Segmentation
137 inline const AliMpSector* AliMpSectorSegmentation::GetSector() const
140 #endif //ALI_MP_SECTOR_SEGMENTATION_H