1 /* Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
2 * See cxx source for full Copyright notice */
5 // $MpId: AliMpMotifType.h,v 1.11 2006/05/24 13:58:18 ivana Exp $
8 /// \class AliMpMotifType
9 /// \brief Class that defines the motif properties.
11 /// \author David Guez, Ivana Hrivnacova; IPN Orsay
13 #ifndef ALI_MP_MOTIF_TYPE_H
14 #define ALI_MP_MOTIF_TYPE_H
18 #include "AliMpEncodePair.h"
20 #ifndef ROOT_TObjArray
21 # include <TObjArray.h>
26 class AliMpVPadIterator;
27 class AliMpConnection;
29 class AliMpMotifType : public TObject
32 AliMpMotifType(const TString &id);
33 AliMpMotifType(const AliMpMotifType& rhs);
34 AliMpMotifType& operator=(const AliMpMotifType& rhs);
35 AliMpMotifType(TRootIOCtor* ioCtor);
36 virtual ~AliMpMotifType();
38 TObject* Clone(const char* newname="") const;
40 virtual AliMpVPadIterator* CreateIterator() const;
43 AliMpConnection *FindConnectionByPadNum(Int_t padNum) const;
44 AliMpConnection *FindConnectionByLocalIndices(
45 MpPair_t localIndices) const;
46 AliMpConnection *FindConnectionByLocalIndices(
47 Int_t localIx, Int_t localIy) const;
48 AliMpConnection *FindConnectionByGassiNum(Int_t gassiNum) const;
49 AliMpConnection *FindConnectionByKaptonNum(Int_t kaptonNum) const;
50 AliMpConnection *FindConnectionByBergNum(Int_t bergNum) const;
52 MpPair_t FindLocalIndicesByPadNum(Int_t padNum) const;
53 MpPair_t FindLocalIndicesByGassiNum(Int_t gassiNum) const;
54 MpPair_t FindLocalIndicesByKaptonNum(Int_t kaptonNum) const;
55 MpPair_t FindLocalIndicesByBergNum(Int_t bergNum) const;
56 MpPair_t FindLocalIndicesByConnection(
57 const AliMpConnection* connection) const;
60 void SetNofPads(Int_t nofPadsX, Int_t nofPadY);
63 /// Return unique motif ID
64 TString GetID() const {return fID;}
65 /// Return number of pads in x direction
66 Int_t GetNofPadsX() const {return fNofPadsX;}
67 /// Return number of pads in y direction
68 Int_t GetNofPadsY() const {return fNofPadsY;}
69 /// Return the total number of pads
70 Int_t GetNofPads() const {return fNofPads;}
73 Bool_t AddConnection(AliMpConnection* connection);
75 virtual void Print(Option_t *option="") const;
77 Int_t PadNum(const TString &padName) const;
79 TString PadName(Int_t padNum) const;
81 Bool_t HasPadByLocalIndices(MpPair_t localIndices) const;
82 Bool_t HasPadByLocalIndices(Int_t localIx, Int_t localIy) const;
84 Bool_t HasPadByManuChannel(Int_t manuChannel) const;
86 /// Return whether the pad with given manu channel exists
87 Bool_t HasPadByGassiNum(Int_t gassiNum) const { return HasPadByManuChannel(gassiNum); }
89 Bool_t IsFull() const;
91 Bool_t Save(const char* motifName) const;
99 void Copy(TObject& o) const;
101 // static data members
102 static const Int_t fgkPadNumForA; ///< the pad number for the pad "A"
105 TString fID; ///< unique motif ID
106 Int_t fNofPadsX; ///< number of pads in x direction
107 Int_t fNofPadsY; ///< number of pads in y direction
108 Int_t fNofPads; ///< total number of pads (= the number of non-void entries in the arrays below)
109 Int_t fMaxNofPads; ///< max number of pads we can hold
110 TObjArray fConnectionsByLocalIndices; ///< array [ix + 64*iy ] -> AliMpConnection*
111 TObjArray fConnectionsByManuChannel; ///< array [manuChannel] -> AliMpConnection*
113 ClassDef(AliMpMotifType,2) // Motif type
118 /// Return true if the motif conatins all pads
119 inline Bool_t AliMpMotifType::IsFull() const
120 { return GetNofPads() == fNofPadsX*fNofPadsY; }
122 #endif //ALI_MP_MOTIF_TYPE_H