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 "AliMpVSegmentation.h"
27 class AliMpMotifPosition;
28 class AliMpVPadIterator;
32 class AliMpSectorSegmentation : public AliMpVSegmentation
35 AliMpSectorSegmentation(const AliMpSector* sector, Bool_t own = false);
36 AliMpSectorSegmentation();
37 virtual ~AliMpSectorSegmentation();
40 virtual AliMpVPadIterator* CreateIterator(const AliMpArea& area) const;
41 virtual AliMpVPadIterator* CreateIterator() const;
43 AliMpVPadIterator* CreateIterator(const AliMpPad& centerPad,
44 Bool_t includeCenter=kFALSE) const;
46 virtual Int_t GetNeighbours(const AliMpPad& pad, TObjArray& neighbours,
47 Bool_t includeSelf = kFALSE,
48 Bool_t includeVoid = kFALSE) const;
51 virtual AliMpPad PadByLocation(const AliMpIntPair& location,
52 Bool_t warning = kTRUE) const;
53 virtual AliMpPad PadByIndices (const AliMpIntPair& indices,
54 Bool_t warning = kTRUE) const;
55 virtual AliMpPad PadByPosition(const TVector2& position ,
56 Bool_t warning = kTRUE) const;
57 virtual AliMpPad PadByDirection(const TVector2& startPosition,
58 Double_t distance) const;
60 virtual Bool_t HasPadByIndices(const AliMpIntPair& indices) const;
61 virtual Bool_t HasPadByLocation(const AliMpIntPair& location) const;
62 virtual Bool_t HasPad(const AliMpIntPair& indices) const;
64 virtual Int_t MaxPadIndexX() const;
65 virtual Int_t MaxPadIndexY() const;
66 virtual Int_t NofPads() const;
68 virtual void GetAllElectronicCardIDs(TArrayI& ecn) const;
69 virtual Int_t GetNofElectronicCards() const;
70 virtual Bool_t HasMotifPosition(Int_t motifPositionID) const;
71 virtual AliMpMotifPosition* MotifPosition(Int_t manuId) const;
73 virtual AliMp::PlaneType PlaneType() const;
74 virtual AliMp::StationType StationType() const;
76 virtual TVector2 Dimensions() const;
77 virtual TVector2 Position() const;
79 virtual void Print(Option_t* opt="") const;
81 virtual Int_t Zone(const AliMpPad& pad, Bool_t warning = kTRUE) const;
82 virtual TVector2 PadDimensions(Int_t zone, Bool_t warning = kTRUE) const;
84 TVector2 GetMinPadDimensions() const;
85 Bool_t CircleTest(const AliMpIntPair& indices) const;
86 void PrintZones() const;
88 const AliMpSector* GetSector() const;
92 AliMpSectorSegmentation(const AliMpSectorSegmentation& right);
94 AliMpSectorSegmentation& operator = (const AliMpSectorSegmentation& right);
96 static const Double_t fgkS1; ///< the separators used for conversion
97 static const Double_t fgkS2; ///< of TVector2 to Long_t
100 Long_t GetIndex(const TVector2& vector2) const;
101 TVector2 GetVector(Long_t index) const;
104 void FillPadDimensionsMap();
105 AliMpMotifPosition* FindMotifPosition(const AliMpIntPair& indices) const;
106 virtual AliMpPad PadByXDirection(const TVector2& startPosition,
107 Double_t maxX) const;
108 virtual AliMpPad PadByYDirection(const TVector2& startPosition,
109 Double_t maxY) const;
112 const AliMpSector* fkSector; ///< Sector
113 Bool_t fIsOwner; ///< Sector ownership
114 AliMpPad* fPadBuffer; ///< The pad buffer
115 mutable TExMap fPadDimensionsMap; ///< Map between zone IDs and pad dimensions
116 Int_t fMaxIndexInX; ///< maximum pad index in x
117 Int_t fMaxIndexInY; ///< maximum pad index in y
119 ClassDef(AliMpSectorSegmentation,2) // Segmentation
125 /// Return the sector
126 inline const AliMpSector* AliMpSectorSegmentation::GetSector() const
129 /// Return station type
130 inline AliMp::StationType AliMpSectorSegmentation::StationType() const
131 { return AliMp::kStation12; }
134 #endif //ALI_MP_SECTOR_SEGMENTATION_H