ROOT logo


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

// $Id$
// $MpId: AliMpVSegmentation.h,v 1.12 2006/05/24 13:58:07 ivana Exp $

/// \ingroup basic
/// \class AliMpVSegmentation
/// \brief The abstract base class for the segmentation.
///
/// Provides methods related to pads:
/// conversion between pad indices, pad location, pad position;
/// finding pad neighbour.
///
/// \author David Guez, Ivana Hrivnacova, IPN Orsay;
///         Laurent Aphecetche, SUBATECH

#ifndef ALI_MP_V_SEGMENTATION_H
#define ALI_MP_V_SEGMENTATION_H

#include <TObject.h>

#include "AliMpPad.h"
#include "AliMpPlaneType.h"
#include "AliMpStationType.h"

class AliMpVPadIterator;
class AliMpArea;
class AliMpMotifPosition;

class TArrayI;
class TObjArray;

class AliMpVSegmentation : public TObject
{
  public:
    AliMpVSegmentation();
    virtual ~AliMpVSegmentation();
  
    //
    // methods 
    //

    // factory methods
    /// Create iterator over pads in the given area 
    virtual AliMpVPadIterator* CreateIterator(const AliMpArea& area) const = 0;

    /// Create a pad iterator over the whole area
    virtual AliMpVPadIterator* CreateIterator() const = 0;
    
    /// Fill the array with the pads that are neighbours of pad. Returns
    /// the number of neighbours.
    virtual Int_t GetNeighbours(const AliMpPad& pad, TObjArray& neighbours,
                                Bool_t includeSelf=kFALSE,
                                Bool_t includeVoid=kFALSE) const = 0;

            /// Find pad by location
    virtual AliMpPad PadByLocation(Int_t manuId, Int_t manuChannel, 
                                Bool_t warning = true) const = 0;
            /// Find pad by indices
    virtual AliMpPad PadByIndices (Int_t ix, Int_t iy,  
                               Bool_t warning = true) const = 0;
            /// Find pad by position
    virtual AliMpPad PadByPosition(Double_t x, Double_t y,
                               Bool_t warning = true) const = 0;
            /// Return true if the pad with given indices exists.
            /// Compared with the PadByIndices method, this one can generally be implemented
            /// faster, as one does not have to create an AliMpPad object... 
    virtual Bool_t HasPadByIndices(Int_t ix, Int_t iy) const;
  
            /// Return true if the pad with given location exists
    virtual Bool_t HasPadByLocation(Int_t manuId, Int_t manuChannel) const;
  
            /// Return maximum pad index in X direction
    virtual Int_t  MaxPadIndexX() const = 0;
            /// Return maximum pad index in Y direction
    virtual Int_t  MaxPadIndexY() const = 0;
            /// Return the number of pads in the detection element
    virtual Int_t  NofPads() const = 0;

            /// Fill the given array with the electronic card IDs
    virtual void GetAllElectronicCardIDs(TArrayI& ecn) const = 0;

            /// Get the number of electronic card IDs 
    virtual Int_t GetNofElectronicCards() const = 0;
    
            /// Whether or not we have a given manu
    virtual Bool_t HasMotifPosition(Int_t manuId) const = 0;
  
            /// Return the position of a given manu (aka motifPosition)
    virtual AliMpMotifPosition* MotifPosition(Int_t manuId) const = 0;

            /// Return the plane type
    virtual AliMp::PlaneType PlaneType() const = 0;
    
            /// Return the station type
    virtual AliMp::StationType StationType() const = 0;

            /// Return the x half-sizes of the detection element
    virtual Double_t  GetDimensionX() const = 0;
            /// Return the y half-sizes of the detection element
    virtual Double_t  GetDimensionY() const = 0;
    
            /// Return the x position of the origin of the detection element
    virtual Double_t  GetPositionX() const = 0;
            /// Return the y position of the origin of the detection element
    virtual Double_t  GetPositionY() const = 0;

  
  ClassDef(AliMpVSegmentation,1)  // Segmentation
};

#endif //ALI_MP_V_SEGMENTATION_H

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