ROOT logo
/* Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
 * See cxx source for full Copyright notice                               */

// $Id$
// $MpId: AliMpMotifType.h,v 1.11 2006/05/24 13:58:18 ivana Exp $

/// \ingroup motif
/// \class AliMpMotifType
/// \brief Class that defines the motif properties.
///
/// \author David Guez, Ivana Hrivnacova; IPN Orsay

#ifndef ALI_MP_MOTIF_TYPE_H
#define ALI_MP_MOTIF_TYPE_H

#include <TObject.h>

#include "AliMpEncodePair.h"

#ifndef ROOT_TObjArray
#  include <TObjArray.h>
#endif

#include <TString.h>

class AliMpVPadIterator;
class AliMpConnection;

class AliMpMotifType : public TObject
  {
  public:
    AliMpMotifType(const TString &id);
    AliMpMotifType(const AliMpMotifType& rhs);
    AliMpMotifType& operator=(const AliMpMotifType& rhs);
    AliMpMotifType(TRootIOCtor* ioCtor);
    virtual ~AliMpMotifType();
    
    TObject* Clone(const char* newname="") const;
    
    virtual AliMpVPadIterator* CreateIterator() const;
    
    // find methods
    AliMpConnection *FindConnectionByPadNum(Int_t padNum) const;
    AliMpConnection *FindConnectionByLocalIndices(
                         MpPair_t localIndices) const;
    AliMpConnection *FindConnectionByLocalIndices(
                         Int_t localIx, Int_t localIy) const;
    AliMpConnection *FindConnectionByGassiNum(Int_t gassiNum) const;
    AliMpConnection *FindConnectionByKaptonNum(Int_t kaptonNum) const;
    AliMpConnection *FindConnectionByBergNum(Int_t bergNum) const;
    
    MpPair_t FindLocalIndicesByPadNum(Int_t padNum) const;
    MpPair_t FindLocalIndicesByGassiNum(Int_t gassiNum) const;
    MpPair_t FindLocalIndicesByKaptonNum(Int_t kaptonNum) const;
    MpPair_t FindLocalIndicesByBergNum(Int_t bergNum) const;
    MpPair_t FindLocalIndicesByConnection(
                         const AliMpConnection* connection) const;
    
    // set methods
    void SetNofPads(Int_t nofPadsX, Int_t nofPadY);
    
    // get methods
    /// Return unique motif ID
    TString  GetID() const        {return fID;}
    /// Return number of pads in x direction
    Int_t    GetNofPadsX() const  {return fNofPadsX;}
    /// Return number of pads in y direction
    Int_t    GetNofPadsY() const  {return fNofPadsY;}
    /// Return the total number of pads
    Int_t    GetNofPads() const   {return fNofPads;}
    
    // Other methods
    Bool_t AddConnection(AliMpConnection* connection);

    virtual void Print(Option_t *option="") const;
    
    Int_t   PadNum(const TString &padName) const;
    
    TString PadName(Int_t padNum) const;

    Bool_t HasPadByLocalIndices(MpPair_t localIndices) const;
    Bool_t HasPadByLocalIndices(Int_t localIx, Int_t localIy) const;

    Bool_t HasPadByManuChannel(Int_t manuChannel) const;

    /// Return whether the pad with given manu channel exists
    Bool_t HasPadByGassiNum(Int_t gassiNum) const { return HasPadByManuChannel(gassiNum); }
    
    Bool_t IsFull() const;
    
    Bool_t Save(const char* motifName) const;
    Bool_t Save() const;
    
  private:
    /// Not implemented
    AliMpMotifType();

    // methods
    void Copy(TObject& o) const;

    // static data members
    static const Int_t  fgkPadNumForA; ///< the pad number for the pad "A"
    
    // data members
    TString   fID;              ///< unique motif ID
    Int_t     fNofPadsX;        ///< number of pads in x direction
    Int_t     fNofPadsY;        ///< number of pads in y direction
    Int_t     fNofPads;    ///< total number of pads (= the number of non-void entries in the arrays below)
    Int_t     fMaxNofPads; ///< max number of pads we can hold
    TObjArray fConnectionsByLocalIndices; ///< array [ix + 64*iy ] -> AliMpConnection*
    TObjArray fConnectionsByManuChannel;  ///< array [manuChannel] -> AliMpConnection*
    
    ClassDef(AliMpMotifType,2)  // Motif type
  };

// inline functions

/// Return true if the motif conatins all pads
inline Bool_t AliMpMotifType::IsFull() const 
{ return GetNofPads() == fNofPadsX*fNofPadsY; }

#endif //ALI_MP_MOTIF_TYPE_H


 AliMpMotifType.h:1
 AliMpMotifType.h:2
 AliMpMotifType.h:3
 AliMpMotifType.h:4
 AliMpMotifType.h:5
 AliMpMotifType.h:6
 AliMpMotifType.h:7
 AliMpMotifType.h:8
 AliMpMotifType.h:9
 AliMpMotifType.h:10
 AliMpMotifType.h:11
 AliMpMotifType.h:12
 AliMpMotifType.h:13
 AliMpMotifType.h:14
 AliMpMotifType.h:15
 AliMpMotifType.h:16
 AliMpMotifType.h:17
 AliMpMotifType.h:18
 AliMpMotifType.h:19
 AliMpMotifType.h:20
 AliMpMotifType.h:21
 AliMpMotifType.h:22
 AliMpMotifType.h:23
 AliMpMotifType.h:24
 AliMpMotifType.h:25
 AliMpMotifType.h:26
 AliMpMotifType.h:27
 AliMpMotifType.h:28
 AliMpMotifType.h:29
 AliMpMotifType.h:30
 AliMpMotifType.h:31
 AliMpMotifType.h:32
 AliMpMotifType.h:33
 AliMpMotifType.h:34
 AliMpMotifType.h:35
 AliMpMotifType.h:36
 AliMpMotifType.h:37
 AliMpMotifType.h:38
 AliMpMotifType.h:39
 AliMpMotifType.h:40
 AliMpMotifType.h:41
 AliMpMotifType.h:42
 AliMpMotifType.h:43
 AliMpMotifType.h:44
 AliMpMotifType.h:45
 AliMpMotifType.h:46
 AliMpMotifType.h:47
 AliMpMotifType.h:48
 AliMpMotifType.h:49
 AliMpMotifType.h:50
 AliMpMotifType.h:51
 AliMpMotifType.h:52
 AliMpMotifType.h:53
 AliMpMotifType.h:54
 AliMpMotifType.h:55
 AliMpMotifType.h:56
 AliMpMotifType.h:57
 AliMpMotifType.h:58
 AliMpMotifType.h:59
 AliMpMotifType.h:60
 AliMpMotifType.h:61
 AliMpMotifType.h:62
 AliMpMotifType.h:63
 AliMpMotifType.h:64
 AliMpMotifType.h:65
 AliMpMotifType.h:66
 AliMpMotifType.h:67
 AliMpMotifType.h:68
 AliMpMotifType.h:69
 AliMpMotifType.h:70
 AliMpMotifType.h:71
 AliMpMotifType.h:72
 AliMpMotifType.h:73
 AliMpMotifType.h:74
 AliMpMotifType.h:75
 AliMpMotifType.h:76
 AliMpMotifType.h:77
 AliMpMotifType.h:78
 AliMpMotifType.h:79
 AliMpMotifType.h:80
 AliMpMotifType.h:81
 AliMpMotifType.h:82
 AliMpMotifType.h:83
 AliMpMotifType.h:84
 AliMpMotifType.h:85
 AliMpMotifType.h:86
 AliMpMotifType.h:87
 AliMpMotifType.h:88
 AliMpMotifType.h:89
 AliMpMotifType.h:90
 AliMpMotifType.h:91
 AliMpMotifType.h:92
 AliMpMotifType.h:93
 AliMpMotifType.h:94
 AliMpMotifType.h:95
 AliMpMotifType.h:96
 AliMpMotifType.h:97
 AliMpMotifType.h:98
 AliMpMotifType.h:99
 AliMpMotifType.h:100
 AliMpMotifType.h:101
 AliMpMotifType.h:102
 AliMpMotifType.h:103
 AliMpMotifType.h:104
 AliMpMotifType.h:105
 AliMpMotifType.h:106
 AliMpMotifType.h:107
 AliMpMotifType.h:108
 AliMpMotifType.h:109
 AliMpMotifType.h:110
 AliMpMotifType.h:111
 AliMpMotifType.h:112
 AliMpMotifType.h:113
 AliMpMotifType.h:114
 AliMpMotifType.h:115
 AliMpMotifType.h:116
 AliMpMotifType.h:117
 AliMpMotifType.h:118
 AliMpMotifType.h:119
 AliMpMotifType.h:120
 AliMpMotifType.h:121
 AliMpMotifType.h:122
 AliMpMotifType.h:123
 AliMpMotifType.h:124