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

// $Id$
// $MpId: AliMpSector.h,v 1.14 2006/05/24 13:58:21 ivana Exp $

/// \ingroup sector
/// \class AliMpSector
/// \brief A sector (quadrant) of the MUON chamber of stations 1 and 2.
///
/// \author David Guez, Ivana Hrivnacova; IPN Orsay

#ifndef ALI_MP_SECTOR_H
#define ALI_MP_SECTOR_H

#include <TNamed.h>

#include "AliMpDirection.h"
#include "AliMpPlaneType.h"
#include "AliMpEncodePair.h"

#include <TString.h>
#include <TObjArray.h>

class AliMpZone;
class AliMpRow;
class AliMpVRowSegment;
class AliMpVMotif;
class AliMpVPadIterator;
class AliMpMotifMap;

class TArrayI;

class AliMpSector : public TNamed
{
  public:
    AliMpSector(const TString& id, Int_t nofZones, Int_t nofRows,
                AliMp::Direction direction, 
                Double_t offsetx, Double_t offsety);
    AliMpSector();
    virtual ~AliMpSector();
  
    // methods  
    virtual AliMpVPadIterator* CreateIterator() const;
    
    void  SetRowSegmentOffsets();
    void  Initialize(); 
    void  PrintGeometry() const;

    // find methods   
    Int_t  FindMotifPositionId(Double_t x, Double_t y) const;

    AliMpRow*          FindRow(Int_t motifPositionId) const;
    AliMpVRowSegment*  FindRowSegment(Int_t motifPositionId) const;


    // geometry 
    Double_t  GetPositionX() const;
    Double_t  GetPositionY() const;
    Double_t  GetDimensionX() const;
    Double_t  GetDimensionY() const;
   
    //
    // get methods

    Int_t       GetNofZones() const;
    AliMpZone*  GetZone(Int_t i) const;    

    Int_t       GetNofRows() const;
    AliMpRow*   GetRow(Int_t i) const;

    AliMp::Direction  GetDirection() const;  
    AliMp::PlaneType  GetPlaneType() const;  

    Double_t    GetMinPadDimensionX() const;
    Double_t    GetMinPadDimensionY() const;
    Double_t    GetMaxPadDimensionX() const;
    Double_t    GetMaxPadDimensionY() const;
    MpPair_t    GetMaxPadIndices() const;
    Int_t       GetNofPads() const;

    AliMpMotifMap*  GetMotifMap() const;

    Int_t  GetNofMotifPositions() const;
    void   GetAllMotifPositionsIDs(TArrayI& ecn) const;
    
    virtual void Print(Option_t* opt="") const;
    
    
  private:
    /// Not implemented
    AliMpSector(const AliMpSector& right);
    /// Not implemented
    AliMpSector&  operator = (const AliMpSector& right);

    // methods
    AliMpRow*         FindRow(Double_t y) const;    
    AliMpVRowSegment* FindRowSegment(Double_t x, Double_t y) const;

    void SetRowOffsets();
    void SetMotifPositions();
    void SetGlobalIndices();
    void SetMinMaxPadDimensions();
    void SetMaxPadIndices();
    void SetNofPads();
    void SetDimensions();

    // data members        
    TString    fID;       ///< sector ID
    Double_t   fOffsetX;  ///< sector x position
    Double_t   fOffsetY;  ///< sector y position
    Double_t   fDimensionX;  ///< sector x dimension
    Double_t   fDimensionY;  ///< sector y dimension
    TObjArray  fZones;    ///< zones
    TObjArray  fRows;     ///< rows
    AliMpMotifMap*   fMotifMap;         ///< motif map
    AliMp::Direction fDirection;        ///< the direction of constant pad size
    Double_t         fMinPadDimensionX; ///< minimum pad x dimensions
    Double_t         fMinPadDimensionY; ///< minimum pad y dimensions
    Double_t         fMaxPadDimensionX; ///< miximum pad x dimensions
    Double_t         fMaxPadDimensionY; ///< miximum pad y dimensions
    MpPair_t         fLMaxPadIndices;   ///< maximum pad indices    
    Int_t            fNofPads;          ///<  total number of pads

  ClassDef(AliMpSector,3)  // Sector
};

// inline functions

/// Return the direction of constant pad size
inline AliMp::Direction AliMpSector::GetDirection() const 
{ return fDirection; }    

/// Return minimum x pad dimensions
inline Double_t  AliMpSector::GetMinPadDimensionX() const
{ return fMinPadDimensionX; }

/// Return maximum y pad dimensions
inline Double_t  AliMpSector::GetMinPadDimensionY() const
{ return fMinPadDimensionY; }

/// Return maximum x pad dimensions
inline Double_t  AliMpSector::GetMaxPadDimensionX() const
{ return fMaxPadDimensionX; }

/// Return minimum y pad dimensions
inline Double_t  AliMpSector::GetMaxPadDimensionY() const
{ return fMaxPadDimensionY; }

/// Return maximum pad indices
inline MpPair_t  AliMpSector::GetMaxPadIndices() const
{ return fLMaxPadIndices; }

/// Return total number of pads
inline Int_t  AliMpSector::GetNofPads() const
{ return fNofPads; }

/// Return the motif map
inline AliMpMotifMap* AliMpSector::GetMotifMap() const 
{ return fMotifMap; }    

#endif //ALI_MP_SECTOR_H

 AliMpSector.h:1
 AliMpSector.h:2
 AliMpSector.h:3
 AliMpSector.h:4
 AliMpSector.h:5
 AliMpSector.h:6
 AliMpSector.h:7
 AliMpSector.h:8
 AliMpSector.h:9
 AliMpSector.h:10
 AliMpSector.h:11
 AliMpSector.h:12
 AliMpSector.h:13
 AliMpSector.h:14
 AliMpSector.h:15
 AliMpSector.h:16
 AliMpSector.h:17
 AliMpSector.h:18
 AliMpSector.h:19
 AliMpSector.h:20
 AliMpSector.h:21
 AliMpSector.h:22
 AliMpSector.h:23
 AliMpSector.h:24
 AliMpSector.h:25
 AliMpSector.h:26
 AliMpSector.h:27
 AliMpSector.h:28
 AliMpSector.h:29
 AliMpSector.h:30
 AliMpSector.h:31
 AliMpSector.h:32
 AliMpSector.h:33
 AliMpSector.h:34
 AliMpSector.h:35
 AliMpSector.h:36
 AliMpSector.h:37
 AliMpSector.h:38
 AliMpSector.h:39
 AliMpSector.h:40
 AliMpSector.h:41
 AliMpSector.h:42
 AliMpSector.h:43
 AliMpSector.h:44
 AliMpSector.h:45
 AliMpSector.h:46
 AliMpSector.h:47
 AliMpSector.h:48
 AliMpSector.h:49
 AliMpSector.h:50
 AliMpSector.h:51
 AliMpSector.h:52
 AliMpSector.h:53
 AliMpSector.h:54
 AliMpSector.h:55
 AliMpSector.h:56
 AliMpSector.h:57
 AliMpSector.h:58
 AliMpSector.h:59
 AliMpSector.h:60
 AliMpSector.h:61
 AliMpSector.h:62
 AliMpSector.h:63
 AliMpSector.h:64
 AliMpSector.h:65
 AliMpSector.h:66
 AliMpSector.h:67
 AliMpSector.h:68
 AliMpSector.h:69
 AliMpSector.h:70
 AliMpSector.h:71
 AliMpSector.h:72
 AliMpSector.h:73
 AliMpSector.h:74
 AliMpSector.h:75
 AliMpSector.h:76
 AliMpSector.h:77
 AliMpSector.h:78
 AliMpSector.h:79
 AliMpSector.h:80
 AliMpSector.h:81
 AliMpSector.h:82
 AliMpSector.h:83
 AliMpSector.h:84
 AliMpSector.h:85
 AliMpSector.h:86
 AliMpSector.h:87
 AliMpSector.h:88
 AliMpSector.h:89
 AliMpSector.h:90
 AliMpSector.h:91
 AliMpSector.h:92
 AliMpSector.h:93
 AliMpSector.h:94
 AliMpSector.h:95
 AliMpSector.h:96
 AliMpSector.h:97
 AliMpSector.h:98
 AliMpSector.h:99
 AliMpSector.h:100
 AliMpSector.h:101
 AliMpSector.h:102
 AliMpSector.h:103
 AliMpSector.h:104
 AliMpSector.h:105
 AliMpSector.h:106
 AliMpSector.h:107
 AliMpSector.h:108
 AliMpSector.h:109
 AliMpSector.h:110
 AliMpSector.h:111
 AliMpSector.h:112
 AliMpSector.h:113
 AliMpSector.h:114
 AliMpSector.h:115
 AliMpSector.h:116
 AliMpSector.h:117
 AliMpSector.h:118
 AliMpSector.h:119
 AliMpSector.h:120
 AliMpSector.h:121
 AliMpSector.h:122
 AliMpSector.h:123
 AliMpSector.h:124
 AliMpSector.h:125
 AliMpSector.h:126
 AliMpSector.h:127
 AliMpSector.h:128
 AliMpSector.h:129
 AliMpSector.h:130
 AliMpSector.h:131
 AliMpSector.h:132
 AliMpSector.h:133
 AliMpSector.h:134
 AliMpSector.h:135
 AliMpSector.h:136
 AliMpSector.h:137
 AliMpSector.h:138
 AliMpSector.h:139
 AliMpSector.h:140
 AliMpSector.h:141
 AliMpSector.h:142
 AliMpSector.h:143
 AliMpSector.h:144
 AliMpSector.h:145
 AliMpSector.h:146
 AliMpSector.h:147
 AliMpSector.h:148
 AliMpSector.h:149
 AliMpSector.h:150
 AliMpSector.h:151
 AliMpSector.h:152
 AliMpSector.h:153
 AliMpSector.h:154
 AliMpSector.h:155
 AliMpSector.h:156
 AliMpSector.h:157
 AliMpSector.h:158
 AliMpSector.h:159
 AliMpSector.h:160
 AliMpSector.h:161
 AliMpSector.h:162
 AliMpSector.h:163