]> git.uio.no Git - u/mrichter/AliRoot.git/blob - MUON/mapping/AliMpSectorSegmentation.h
Replacement of AliMpIntPair object with algoritmic
[u/mrichter/AliRoot.git] / MUON / mapping / AliMpSectorSegmentation.h
1 /* Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
2  * See cxx source for full Copyright notice                               */
3
4 // $Id$
5 // $MpId: AliMpSectorSegmentation.h,v 1.15 2006/05/24 13:58:21 ivana Exp $
6
7 /// \ingroup sector
8 /// \class AliMpSectorSegmentation
9 /// \brief A segmentation of the sector.        
10 ///
11 /// Provides methods related to pads:                                     \n
12 /// conversion between pad indices, pad location, pad position;
13 /// finding pad neighbour.
14 ///
15 /// \author David Guez, Ivana Hrivnacova; IPN Orsay
16
17 #ifndef ALI_MP_SECTOR_SEGMENTATION_H
18 #define ALI_MP_SECTOR_SEGMENTATION_H
19
20 #include "AliMpVSegmentation.h"
21 #include "AliMpPad.h"
22
23 #include <TVector2.h>
24 #include <TExMap.h>
25
26 class AliMpSector;
27 class AliMpMotifPosition;
28 class AliMpVPadIterator;
29 class AliMpArea;
30
31 class AliMpSectorSegmentation : public AliMpVSegmentation
32 {
33   public:
34     AliMpSectorSegmentation(const AliMpSector* sector, Bool_t own = false);
35     AliMpSectorSegmentation();
36     virtual ~AliMpSectorSegmentation();
37     
38     // factory methods  
39     virtual AliMpVPadIterator* CreateIterator(const AliMpArea& area) const;
40     virtual AliMpVPadIterator* CreateIterator() const;
41
42     virtual Int_t GetNeighbours(const AliMpPad& pad, TObjArray& neighbours,
43                                Bool_t includeSelf = kFALSE,
44                                Bool_t includeVoid = kFALSE) const;
45     
46     // methods  
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;
55  
56     virtual Bool_t HasPadByIndices(Int_t ix, Int_t iy) const;
57     virtual Bool_t HasPadByLocation(Int_t manuId, Int_t manuChannel) const;
58   
59     virtual Int_t  MaxPadIndexX() const;
60     virtual Int_t  MaxPadIndexY() const;
61     virtual Int_t  NofPads() const;
62
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;
67
68     virtual AliMp::PlaneType   PlaneType() const;
69     virtual AliMp::StationType StationType() const;
70
71     virtual TVector2 Dimensions() const;
72     virtual TVector2 Position() const;
73   
74     virtual void Print(Option_t* opt="") const;
75     
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;
78
79     TVector2 GetMinPadDimensions() const;
80     Bool_t CircleTest(Int_t ix, Int_t iy) const;
81     void   PrintZones() const;
82    
83     const AliMpSector* GetSector() const;
84   
85   private:
86     /// Not implemented
87     AliMpSectorSegmentation(const AliMpSectorSegmentation& right);
88     /// Not implemented
89     AliMpSectorSegmentation&  operator = (const AliMpSectorSegmentation& right);
90
91     static const Double_t   fgkS1;  ///< the separators used for conversion
92     static const Double_t   fgkS2;  ///< of TVector2 to MpPair_t
93     
94     // methods
95     Long_t    GetIndex(const TVector2& vector2) const;
96     TVector2  GetVector(Long_t index) const;
97
98     // methods
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;
105  
106     // data members   
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    
113
114   ClassDef(AliMpSectorSegmentation,2)  // Segmentation
115 };
116
117
118 // inline functions
119
120 /// Return the sector
121 inline const AliMpSector* AliMpSectorSegmentation::GetSector() const
122 { return fkSector; }
123
124 /// Return station type
125 inline AliMp::StationType AliMpSectorSegmentation::StationType() const
126 { return AliMp::kStation12; }
127
128
129 #endif //ALI_MP_SECTOR_SEGMENTATION_H
130