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.11 2006/03/02 16:35:06 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
21 #include "AliMpContainers.h"
33 #include "AliMpVSegmentation.h"
37 class AliMpMotifPosition;
38 class AliMpVPadIterator;
42 class AliMpSectorSegmentation : public AliMpVSegmentation
46 typedef std::map<Int_t, TVector2> PadDimensionsMap;
47 typedef PadDimensionsMap::const_iterator PadDimensionsMapCIterator;
50 typedef TExMap PadDimensionsMap;
51 typedef TExMapIter PadDimensionsMapCIterator;
55 AliMpSectorSegmentation(const AliMpSector* sector);
56 AliMpSectorSegmentation();
57 virtual ~AliMpSectorSegmentation();
60 virtual AliMpVPadIterator* CreateIterator(const AliMpArea& area) const;
61 AliMpVPadIterator* CreateIterator(const AliMpPad& centerPad,
62 Bool_t includeCenter=kFALSE) const;
65 virtual AliMpPad PadByLocation(const AliMpIntPair& location,
66 Bool_t warning = kTRUE) const;
67 virtual AliMpPad PadByIndices (const AliMpIntPair& indices,
68 Bool_t warning = kTRUE) const;
69 virtual AliMpPad PadByPosition(const TVector2& position ,
70 Bool_t warning = kTRUE) const;
71 virtual AliMpPad PadByDirection(const TVector2& startPosition,
72 Double_t distance) const;
74 virtual Int_t MaxPadIndexX();
75 virtual Int_t MaxPadIndexY();
77 virtual Int_t Zone(const AliMpPad& pad, Bool_t warning = kTRUE) const;
78 virtual TVector2 PadDimensions(Int_t zone, Bool_t warning = kTRUE) const;
80 virtual Bool_t HasPad(const AliMpIntPair& indices) const;
81 Bool_t HasMotifPosition(Int_t motifPositionID) const;
82 TVector2 GetMinPadDimensions() const;
83 Bool_t CircleTest(const AliMpIntPair& indices) const;
84 void PrintZones() const;
86 const AliMpSector* GetSector() const;
88 virtual void Print(Option_t* opt="") const;
90 virtual void GetAllElectronicCardIDs(TArrayI& ecn) const;
92 AliMpPlaneType PlaneType() const;
94 TVector2 Dimensions() const;
97 AliMpSectorSegmentation(const AliMpSectorSegmentation& right);
98 AliMpSectorSegmentation& operator = (const AliMpSectorSegmentation& right);
102 static const Double_t fgkS1; // the separators used for conversion
103 static const Double_t fgkS2; // of TVector2 to Long_t
106 Long_t GetIndex(const TVector2& vector2) const;
107 TVector2 GetVector(Long_t index) const;
111 void FillPadDimensionsMap();
112 AliMpMotifPosition* FindMotifPosition(const AliMpIntPair& indices) const;
113 virtual AliMpPad PadByXDirection(const TVector2& startPosition,
114 Double_t maxX) const;
115 virtual AliMpPad PadByYDirection(const TVector2& startPosition,
116 Double_t maxY) const;
119 const AliMpSector* fkSector; // Sector
120 AliMpPad* fPadBuffer; // The pad buffer
122 PadDimensionsMap fPadDimensionsMap; // Map between zone IDs and pad dimensions
123 // EXCLUDED FOR CINT (does not compile on HP)
126 mutable PadDimensionsMap fPadDimensionsMap; // Map between zone IDs and pad dimensions
129 Int_t fMaxIndexInX; // maximum pad index in x
130 Int_t fMaxIndexInY; // maximum pad index in y
132 ClassDef(AliMpSectorSegmentation,1) // Segmentation
138 inline const AliMpSector* AliMpSectorSegmentation::GetSector() const
141 #endif //ALI_MP_SECTOR_SEGMENTATION_H