New macro to keep track of timing performances of the segmentation methods (Laurent)
[u/mrichter/AliRoot.git] / MUON / mapping / AliMpMotifMap.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: AliMpMotifMap.h,v 1.14 2006/05/24 13:58:18 ivana Exp $
6
7 /// \ingroup motif
8 /// \class AliMpMotifMap
9 /// \brief Motif map containers
10 ///
11 /// The class defines:
12 /// - map of motif objects to their string IDs
13 /// - map of motif type objects to their string IDs
14 /// - map of motif position objects to their string IDs
15 /// - map of motif position objects to their global indices
16 ///
17 /// \author David Guez, Ivana Hrivnacova; IPN Orsay
18
19 #ifndef ALI_MP_MOTIF_MAP_H
20 #define ALI_MP_MOTIF_MAP_H
21
22 #include <TObject.h>
23
24 #include "AliMpContainers.h"
25
26 #ifdef WITH_STL
27 #include "AliMpIntPair.h"
28 #endif
29
30 #ifdef WITH_ROOT
31 #include "AliMpExMap.h"
32 #endif
33
34 #ifdef WITH_STL
35 #include <map>
36 #include <iterator>
37 #endif
38
39 class AliMpVMotif;
40 class AliMpMotifType;
41 class AliMpMotifPosition;
42 class AliMpMotifMap;
43
44 class TArrayI;
45 class TString;
46 class TVector2;
47
48 class AliMpMotifMap : public TObject
49 {
50   public:
51 #ifdef WITH_STL
52     /// Motif map type
53     typedef std::map<TString, AliMpVMotif*> MotifMap;
54     /// Motif map iterator type
55     typedef MotifMap::const_iterator        MotifMapIterator;
56     /// Motif type map type
57     typedef std::map<TString, AliMpMotifType*> MotifTypeMap;
58     /// Motif type map iterator type
59     typedef MotifTypeMap::const_iterator       MotifTypeMapIterator;
60     /// Motif position map to int type
61     typedef std::map<Int_t, AliMpMotifPosition*>  MotiPositionMap;
62     /// Motif position map to int iterator type
63     typedef MotiPositionMap::const_iterator       MotifPositionMapIterator;
64     /// Motif position map to int pair type
65     typedef std::map<AliMpIntPair, AliMpMotifPosition*> MotifPositionMap2;
66     /// Motif position map to int pair iterator type
67     typedef MotifPositionMap2::const_iterator           MotifPositionMap2Iterator;
68 #endif    
69 #ifdef WITH_ROOT
70     /// Motif map type
71     typedef AliMpExMap MotifMap;
72     /// Motif type map type
73     typedef AliMpExMap MotifTypeMap;
74     /// Motif position map to int type
75     typedef AliMpExMap MotifPositionMap;
76     /// Motif position map to int pair iterator type
77     typedef AliMpExMap MotifPositionMap2;
78 #endif    
79
80   public:
81     AliMpMotifMap();
82     AliMpMotifMap(TRootIOCtor* ioCtor);
83     virtual ~AliMpMotifMap();
84     
85     // methods
86     Bool_t  AddMotif(AliMpVMotif* motif, Bool_t warn = true);
87     Bool_t  AddMotifType(AliMpMotifType* motifType, Bool_t warn = true);
88     Bool_t  AddMotifPosition(AliMpMotifPosition* motifType, Bool_t warn = true);
89     void   FillMotifPositionMap2();
90     virtual void Print(const char* option = "ALL") const;
91     void   PrintGlobalIndices(const char* fileName) const;
92     void   UpdateGlobalIndices(const char* fileName);
93    
94     // find methods
95     AliMpVMotif*  FindMotif(const TString& motifID) const;
96     AliMpVMotif*  FindMotif(const TString& motifID, const TString& motifTypeID, 
97                             const TVector2& padDimensions) const;
98     AliMpMotifType*      FindMotifType(const TString& motifTypeID) const;
99     AliMpMotifPosition*  FindMotifPosition(Int_t motifPositionID) const;
100
101     /// Find all motifPositionsIDs (=electronicCardNumbers) handled by this map
102     void    GetAllMotifPositionsIDs(TArrayI& enc) const;
103     UInt_t  GetNofMotifPositions() const;
104     AliMpMotifPosition* GetMotifPosition(UInt_t index) const;
105
106     /// Calculate total number of pads defined in the map
107     Int_t CalculateNofPads() const;
108      
109   private:
110     /// Not implemented
111     AliMpMotifMap(const AliMpMotifMap& rhs);
112     /// Not implemented
113     AliMpMotifMap& operator=(const AliMpMotifMap& rhs);
114   
115     // methods
116     void  PrintMotif(const AliMpVMotif* motif) const;
117     void  PrintMotifType(const AliMpMotifType* motifType) const;
118     void  PrintMotifPosition(const AliMpMotifPosition* motifPosition) const;
119     void  PrintMotifPosition2(const AliMpMotifPosition* motifPosition) const;
120     void  PrintMotifs() const;
121     void  PrintMotifTypes() const;
122     void  PrintMotifPositions() const;
123     void  PrintMotifPositions2() const;
124  
125     // data members
126     MotifMap           fMotifs;         ///< motifs map
127     MotifTypeMap       fMotifTypes;     ///< motifs types map
128 #ifdef WITH_STL
129     std::map<Int_t, AliMpMotifPosition*> fMotifPositions; ///< motif positions map by Id
130 #endif
131 #ifdef WITH_ROOT
132     MotifPositionMap   fMotifPositions; ///< motifs positions map
133 #endif
134     MotifPositionMap2  fMotifPositions2;///< motifs positions map
135
136   ClassDef(AliMpMotifMap,1)  // motif map
137 };
138
139 #endif //ALI_MP_MOTIF_MAP_H