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;
31 class AliMpSectorSegmentation : public AliMpVSegmentation
34 AliMpSectorSegmentation(const AliMpSector* sector, Bool_t own = false);
35 AliMpSectorSegmentation();
36 virtual ~AliMpSectorSegmentation();
39 virtual AliMpVPadIterator* CreateIterator(const AliMpArea& area) const;
40 virtual AliMpVPadIterator* CreateIterator() const;
42 virtual Int_t GetNeighbours(const AliMpPad& pad, TObjArray& neighbours,
43 Bool_t includeSelf = kFALSE,
44 Bool_t includeVoid = kFALSE) const;
47 virtual AliMpPad PadByLocation(Int_t manuId, Int_t manuChannel,
48 Bool_t warning = kTRUE) const;
49 virtual AliMpPad PadByIndices (Int_t ix, Int_t iy,
50 Bool_t warning = kTRUE) const;
51 virtual AliMpPad PadByPosition(const TVector2& position ,
52 Bool_t warning = kTRUE) const;
53 virtual AliMpPad PadByDirection(const TVector2& startPosition,
54 Double_t distance) const;
56 virtual Bool_t HasPadByIndices(Int_t ix, Int_t iy) const;
57 virtual Bool_t HasPadByLocation(Int_t manuId, Int_t manuChannel) const;
59 virtual Int_t MaxPadIndexX() const;
60 virtual Int_t MaxPadIndexY() const;
61 virtual Int_t NofPads() const;
63 virtual void GetAllElectronicCardIDs(TArrayI& ecn) const;
64 virtual Int_t GetNofElectronicCards() const;
65 virtual Bool_t HasMotifPosition(Int_t motifPositionID) const;
66 virtual AliMpMotifPosition* MotifPosition(Int_t manuId) const;
68 virtual AliMp::PlaneType PlaneType() const;
69 virtual AliMp::StationType StationType() const;
71 virtual TVector2 Dimensions() const;
72 virtual TVector2 Position() const;
74 virtual void Print(Option_t* opt="") 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 TVector2 GetMinPadDimensions() const;
80 Bool_t CircleTest(Int_t ix, Int_t iy) const;
81 void PrintZones() const;
83 const AliMpSector* GetSector() const;
87 AliMpSectorSegmentation(const AliMpSectorSegmentation& right);
89 AliMpSectorSegmentation& operator = (const AliMpSectorSegmentation& right);
91 static const Double_t fgkS1; ///< the separators used for conversion
92 static const Double_t fgkS2; ///< of TVector2 to MpPair_t
95 Long_t GetIndex(const TVector2& vector2) const;
96 TVector2 GetVector(Long_t index) const;
99 void FillPadDimensionsMap();
100 AliMpMotifPosition* FindMotifPosition(Int_t ix, Int_t iy) const;
101 virtual AliMpPad PadByXDirection(const TVector2& startPosition,
102 Double_t maxX) const;
103 virtual AliMpPad PadByYDirection(const TVector2& startPosition,
104 Double_t maxY) const;
107 const AliMpSector* fkSector; ///< Sector
108 Bool_t fIsOwner; ///< Sector ownership
109 AliMpPad* fPadBuffer; ///< The pad buffer
110 mutable TExMap fPadDimensionsMap; ///< Map between zone IDs and pad dimensions
111 Int_t fMaxIndexInX; ///< maximum pad index in x
112 Int_t fMaxIndexInY; ///< maximum pad index in y
114 ClassDef(AliMpSectorSegmentation,2) // Segmentation
120 /// Return the sector
121 inline const AliMpSector* AliMpSectorSegmentation::GetSector() const
124 /// Return station type
125 inline AliMp::StationType AliMpSectorSegmentation::StationType() const
126 { return AliMp::kStation12; }
129 #endif //ALI_MP_SECTOR_SEGMENTATION_H