]> git.uio.no Git - u/mrichter/AliRoot.git/blob - MUON/mapping/AliMpSectorSegmentation.h
In mapping:
[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 AliMpIntPair;
30 class AliMpArea;
31
32 class AliMpSectorSegmentation : public AliMpVSegmentation
33 {
34   public:
35     AliMpSectorSegmentation(const AliMpSector* sector, Bool_t own = false);
36     AliMpSectorSegmentation();
37     virtual ~AliMpSectorSegmentation();
38     
39     // factory methods  
40     virtual AliMpVPadIterator* CreateIterator(const AliMpArea& area) const;
41     virtual AliMpVPadIterator* CreateIterator() const;
42     
43     AliMpVPadIterator* CreateIterator(const AliMpPad& centerPad,
44                                       Bool_t includeCenter=kFALSE) const;
45
46     virtual Int_t GetNeighbours(const AliMpPad& pad, TObjArray& neighbours,
47                                Bool_t includeSelf = kFALSE,
48                                Bool_t includeVoid = kFALSE) const;
49     
50     // methods  
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;
59  
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;
63   
64     virtual Int_t  MaxPadIndexX() const;
65     virtual Int_t  MaxPadIndexY() const;
66     virtual Int_t  NofPads() const;
67
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;
72
73     virtual AliMp::PlaneType   PlaneType() const;
74     virtual AliMp::StationType StationType() const;
75
76     virtual TVector2 Dimensions() const;
77     virtual TVector2 Position() const;
78   
79     virtual void Print(Option_t* opt="") const;
80     
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;
83
84     TVector2 GetMinPadDimensions() const;
85     Bool_t CircleTest(const AliMpIntPair& indices) const;
86     void   PrintZones() const;
87    
88     const AliMpSector* GetSector() const;
89   
90   private:
91     /// Not implemented
92     AliMpSectorSegmentation(const AliMpSectorSegmentation& right);
93     /// Not implemented
94     AliMpSectorSegmentation&  operator = (const AliMpSectorSegmentation& right);
95
96     static const Double_t   fgkS1;  ///< the separators used for conversion
97     static const Double_t   fgkS2;  ///< of TVector2 to Long_t
98     
99     // methods
100     Long_t    GetIndex(const TVector2& vector2) const;
101     TVector2  GetVector(Long_t index) const;
102
103     // methods
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;
110  
111     // data members   
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    
118
119   ClassDef(AliMpSectorSegmentation,2)  // Segmentation
120 };
121
122
123 // inline functions
124
125 /// Return the sector
126 inline const AliMpSector* AliMpSectorSegmentation::GetSector() const
127 { return fkSector; }
128
129 /// Return station type
130 inline AliMp::StationType AliMpSectorSegmentation::StationType() const
131 { return AliMp::kStation12; }
132
133
134 #endif //ALI_MP_SECTOR_SEGMENTATION_H
135