1 /* Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
2 * See cxx source for full Copyright notice */
5 // $MpId: AliMpVRowSegmentSpecial.h,v 1.10 2006/05/24 13:58:21 ivana Exp $
8 /// \class AliMpVRowSegmentSpecial
9 /// \brief Abstract base class for a special row segment composed of the
12 /// \author David Guez, Ivana Hrivnacova; IPN Orsay
14 #ifndef ALI_MP_V_ROW_SEGMENT_SPECIAL_H
15 #define ALI_MP_V_ROW_SEGMENT_SPECIAL_H
17 #include "AliMpContainers.h"
19 #include "AliMpVRowSegment.h"
20 #include "AliMpVMotif.h"
25 #include <TObjArray.h>
34 class AliMpVPadRowSegment;
37 class AliMpVRowSegmentSpecial : public AliMpVRowSegment
41 typedef std::vector<AliMpPadRow*> PadRowVector;
42 typedef std::vector<AliMpVMotif*> MotifVector;
43 typedef std::vector<Int_t> MotifPositionIdVector;
46 typedef TObjArray PadRowVector;
47 typedef TObjArray MotifVector;
48 typedef TArrayI MotifPositionIdVector;
52 AliMpVRowSegmentSpecial(AliMpRow* row, Double_t offsetX);
53 AliMpVRowSegmentSpecial();
54 virtual ~AliMpVRowSegmentSpecial();
57 void AddPadRow(AliMpPadRow* padRow);
58 void UpdateMotifVector();
59 virtual void UpdatePadsOffset() = 0;
60 virtual Double_t LeftBorderX() const = 0;
61 virtual Double_t RightBorderX() const= 0;
62 virtual Double_t HalfSizeY() const;
65 virtual AliMpVMotif* FindMotif(const TVector2& position) const;
66 virtual Int_t FindMotifPositionId(const TVector2& position) const;
67 virtual Bool_t HasMotifPosition(Int_t motifPositionId) const;
68 virtual TVector2 MotifCenter(Int_t motifPositionId) const;
71 virtual TVector2 Position() const = 0;
72 virtual TVector2 Dimensions() const;
75 virtual void SetOffset(const TVector2& /*offset*/) {}
76 virtual void SetGlobalIndices(AliMpRow* rowBefore) = 0;
77 virtual Int_t SetIndicesToMotifPosition(Int_t i,
78 const AliMpIntPair& indices) = 0;
81 virtual AliMpRow* GetRow() const;
82 virtual Int_t GetNofMotifs() const;
83 virtual AliMpVMotif* GetMotif(Int_t i) const;
84 virtual Int_t GetMotifPositionId(Int_t i) const;
88 virtual TVector2 MotifCenterSlow(Int_t motifPositionId) const = 0;
89 AliMpPadRow* FindPadRow(Double_t y) const;
90 AliMpVPadRowSegment* FindPadRowSegment(Int_t motifPositionId) const;
91 AliMpIntPair FindRelativeLowIndicesOf(Int_t motifPositionId) const;
92 Int_t MaxNofPadsInRow() const;
93 Bool_t HasMotif(const AliMpVMotif* motif) const;
96 Int_t GetNofPadRows() const;
97 AliMpPadRow* GetPadRow(Int_t i) const;
98 Double_t GetOffsetX() const;
101 AliMpVRowSegmentSpecial(const AliMpVRowSegmentSpecial& right);
102 AliMpVRowSegmentSpecial& operator = (const AliMpVRowSegmentSpecial& right);
105 // static data members
106 static const Int_t fgkMaxNofMotifPositionIds; // dimension of fMotifPositionIds
110 AliMpRow* fRow; ///< the row containing this segment
111 Double_t fOffsetX; ///< \brief the x position of the border that touches a standard
113 PadRowVector fPadRows; ///< pad rows vector
114 MotifVector fMotifs; ///< motifs vector
115 MotifPositionIdVector fMotifPositionIds; ///< motifs position Ids vector
118 Int_t fNofMotifPositionIds; ///< number of motif positions Ids
121 ClassDef(AliMpVRowSegmentSpecial,1) //Row segment
126 inline Double_t AliMpVRowSegmentSpecial::GetOffsetX() const
129 #endif //ALI_MP_V_ROW_SEGMENT_SPECIAL_H