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

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

/// \ingroup sector
/// \class AliMpSectorSegmentation
/// \brief A segmentation of the sector.        
///
/// Provides methods related to pads:                                     \n
/// conversion between pad indices, pad location, pad position;
/// finding pad neighbour.
///
/// \author David Guez, Ivana Hrivnacova; IPN Orsay

#ifndef ALI_MP_SECTOR_SEGMENTATION_H
#define ALI_MP_SECTOR_SEGMENTATION_H

#include "AliMpVSegmentation.h"
#include "AliMpPad.h"

#include <TExMap.h>

class AliMpSector;
class AliMpMotifPosition;
class AliMpVPadIterator;
class AliMpArea;

class AliMpSectorSegmentation : public AliMpVSegmentation
{
  public:
    AliMpSectorSegmentation(const AliMpSector* sector, Bool_t own = false);
    AliMpSectorSegmentation();
    virtual ~AliMpSectorSegmentation();
    
    // factory methods  
    virtual AliMpVPadIterator* CreateIterator(const AliMpArea& area) const;
    virtual AliMpVPadIterator* CreateIterator() const;

    virtual Int_t GetNeighbours(const AliMpPad& pad, TObjArray& neighbours,
                               Bool_t includeSelf = kFALSE,
                               Bool_t includeVoid = kFALSE) const;
    
    // methods  
    virtual AliMpPad PadByLocation(Int_t manuId, Int_t manuChannel,
                               Bool_t warning = kTRUE) const;
    virtual AliMpPad PadByIndices (Int_t ix, Int_t iy, 
                               Bool_t warning = kTRUE) const;
    virtual AliMpPad PadByPosition(Double_t x, Double_t y,
                               Bool_t warning = kTRUE) const;
    virtual AliMpPad PadByDirection(Double_t startx, Double_t starty, 
                               Double_t distance) const;
 
    virtual Bool_t HasPadByIndices(Int_t ix, Int_t iy) const;
    virtual Bool_t HasPadByLocation(Int_t manuId, Int_t manuChannel) const;
  
    virtual Int_t  MaxPadIndexX() const;
    virtual Int_t  MaxPadIndexY() const;
    virtual Int_t  NofPads() const;

    virtual void   GetAllElectronicCardIDs(TArrayI& ecn) const;
    virtual Int_t  GetNofElectronicCards() const;
    virtual Bool_t HasMotifPosition(Int_t motifPositionID) const;
    virtual AliMpMotifPosition* MotifPosition(Int_t manuId) const;

    virtual AliMp::PlaneType   PlaneType() const;
    virtual AliMp::StationType StationType() const;

    virtual Double_t  GetDimensionX() const;
    virtual Double_t  GetDimensionY() const;
 
    virtual Double_t  GetPositionX() const;
    virtual Double_t  GetPositionY() const;
  
    virtual void Print(Option_t* opt="") const;
    
    Double_t GetMinPadDimensionX() const;
    Double_t GetMinPadDimensionY() const;

    Bool_t CircleTest(Int_t ix, Int_t iy) const;
   
    const AliMpSector* GetSector() const;
  
  private:
    /// Not implemented
    AliMpSectorSegmentation(const AliMpSectorSegmentation& right);
    /// Not implemented
    AliMpSectorSegmentation&  operator = (const AliMpSectorSegmentation& right);

    // methods
    AliMpMotifPosition*  FindMotifPosition(Int_t ix, Int_t iy) const;
    virtual AliMpPad PadByXDirection(Double_t startx, Double_t starty, 
                                     Double_t maxX) const;
    virtual AliMpPad PadByYDirection(Double_t startx, Double_t starty, 
                                     Double_t maxY) const;
 
    // data members   
    const AliMpSector*  fkSector;     ///< Sector
    Bool_t              fIsOwner;     ///< Sector ownership     
    AliMpPad*           fPadBuffer;   ///< The pad buffer
    Int_t               fMaxIndexInX; ///< maximum pad index in x    
    Int_t               fMaxIndexInY; ///< maximum pad index in y  

  ClassDef(AliMpSectorSegmentation,3)  // Segmentation
};


// inline functions

/// Return the sector
inline const AliMpSector* AliMpSectorSegmentation::GetSector() const
{ return fkSector; }

/// Return station type
inline AliMp::StationType AliMpSectorSegmentation::StationType() const
{ return AliMp::kStation12; }


#endif //ALI_MP_SECTOR_SEGMENTATION_H

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