aeacbb01890697a67f230ae2b885bd25e8cbb883
[u/mrichter/AliRoot.git] / MUON / mapping / AliMpMotifType.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: AliMpMotifType.h,v 1.8 2005/09/26 16:10:46 ivana Exp $
6
7 /// \ingroup motif
8 /// \class AliMpMotifType
9 /// \brief Class that defines the motif properties.
10 ///
11 /// Authors: David Guez, Ivana Hrivnacova; IPN Orsay
12
13 #ifndef ALI_MP_MOTIF_TYPE_H
14 #define ALI_MP_MOTIF_TYPE_H
15
16 #include "AliMpContainers.h"
17
18 #ifdef WITH_STL
19 #include <map>
20 #endif
21
22 #ifdef WITH_ROOT
23 #include "AliMpExMap.h"
24 #endif
25
26 #include <TObject.h>
27 #include <TString.h>
28
29 #include "AliMpIntPair.h"
30
31 class AliMpConnection;
32 class AliMpVPadIterator;
33
34 class AliMpMotifType : public TObject
35 {
36   public:
37 #ifdef WITH_STL
38     typedef std::map< AliMpIntPair, AliMpConnection* > ConnectionMap;
39     typedef ConnectionMap::const_iterator     ConnectionMapCIterator;
40 #endif    
41 #ifdef WITH_ROOT
42     typedef AliMpExMap ConnectionMap;
43 #endif    
44
45   public:
46     AliMpMotifType(const TString &id);
47     AliMpMotifType();
48     virtual ~AliMpMotifType();
49
50     virtual AliMpVPadIterator* CreateIterator() const;
51
52     // find methods
53     AliMpConnection *FindConnectionByPadNum(Int_t padNum) const;
54     AliMpConnection *FindConnectionByLocalIndices(
55                                const AliMpIntPair& localIndices) const;
56     AliMpConnection *FindConnectionByGassiNum(Int_t gassiNum) const;
57     AliMpConnection *FindConnectionByKaptonNum(Int_t kaptonNum) const;
58     AliMpConnection *FindConnectionByBergNum(Int_t bergNum) const;
59
60     AliMpIntPair FindLocalIndicesByPadNum(Int_t padNum) const;
61     AliMpIntPair FindLocalIndicesByGassiNum(Int_t gassiNum) const;
62     AliMpIntPair FindLocalIndicesByKaptonNum(Int_t kaptonNum) const;
63     AliMpIntPair FindLocalIndicesByBergNum(Int_t bergNum) const;
64     AliMpIntPair FindLocalIndicesByConnection(
65                                const AliMpConnection* connection) const;
66
67     // set methods
68     void SetNofPads(Int_t nofPadsX, Int_t nofPadY);
69     void SetVerboseLevel(Int_t level){fVerboseLevel=level;}
70     
71     // get methods
72     TString  GetID() const        {return fID;}
73     Int_t    GetNofPadsX() const  {return fNofPadsX;}
74     Int_t    GetNofPadsY() const  {return fNofPadsY;}
75     Int_t    GetNofPads() const;
76     
77     // Other methods
78     void AddConnection(const AliMpIntPair &localIndices, 
79                        AliMpConnection* connection);
80     virtual void Print(Option_t *option) const;
81     Int_t   PadNum(const TString &padName) const;
82     TString PadName(Int_t padNum) const;
83     Bool_t  HasPad(const AliMpIntPair& localIndices) const;
84     Bool_t  IsFull() const;
85
86   private:
87     // static data members
88     static const Int_t   fgkPadNumForA; // the pad number for the pad "A"
89   
90     // data members
91     TString   fID;              // unique motif ID
92     Int_t     fNofPadsX;        // number of pads in x direction
93     Int_t     fNofPadsY;        // number of pads in y direction
94     Int_t     fVerboseLevel;    // verbose level
95     ConnectionMap fConnections; // Map (ix,iy) of connections
96     
97   ClassDef(AliMpMotifType,1)  //Motif type
98 };
99
100 // inline functions
101
102 inline Bool_t AliMpMotifType::IsFull() const 
103 { return GetNofPads() == fNofPadsX*fNofPadsY; }
104
105 #endif //ALI_MP_MOTIF_TYPE_H
106