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

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

/// \ingroup slat
/// \class AliMpSlatSegmentation
/// \brief Implementation of AliMpVSegmentation for St345 slats.
/// 
/// Note that integer indices start at (0,0) on the bottom-left of the slat,
/// while floating point positions are relative to the center of the slat
/// (where the slat is to be understood as N PCBs of fixed size = 40cm
/// even if not all pads of a given PCBs are actually physically there).
///
/// \author Laurent Aphecetche

#ifndef ALI_MP_SLAT_SEGMENTATION_H
#define ALI_MP_SLAT_SEGMENTATION_H

#ifndef ROOT_TString
#include "TString.h"
#endif

#ifndef ALI_MP_V_SEGMENTATION_H
#include "AliMpVSegmentation.h"
#endif

#ifndef ALI_MP_PAD_H
#include "AliMpPad.h"
#endif

class AliMpMotifPosition;
class AliMpPCB;
class AliMpSlat;

class AliMpSlatSegmentation : public AliMpVSegmentation
{
 public:
  AliMpSlatSegmentation();
  AliMpSlatSegmentation(const AliMpSlat* slat, Bool_t own = false);
  virtual ~AliMpSlatSegmentation();

  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;
  
  const char* GetName() const;
  
  Int_t MaxPadIndexX() const;
  Int_t MaxPadIndexY() const;
  Int_t NofPads() const;
  
  virtual AliMpPad PadByLocation(Int_t manuId, Int_t manuChannel, 
			 Bool_t warning) const;

  virtual AliMpPad PadByIndices(Int_t ix, Int_t iy,  
			Bool_t warning) const;

  virtual AliMpPad PadByPosition(Double_t x, Double_t y,
			 Bool_t warning) const;

  virtual void Print(Option_t* opt) const;
  
  const AliMpSlat* Slat() const;
  
  void GetAllElectronicCardIDs(TArrayI& ecn) const;
  
  virtual AliMp::PlaneType PlaneType() const;
   
  virtual AliMp::StationType StationType() const;
  
  virtual Double_t  GetDimensionX() const;
  virtual Double_t  GetDimensionY() 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 GetNofElectronicCards() const;
  
  virtual Double_t  GetPositionX() const;
  virtual Double_t  GetPositionY() const;
  
  virtual Bool_t HasMotifPosition(Int_t manuId) const;
  
  virtual AliMpMotifPosition* MotifPosition(Int_t manuId) const;
  
 private:
  /// Not implemented
  AliMpSlatSegmentation(const AliMpSlatSegmentation& right);
  /// Not implemented
  AliMpSlatSegmentation&  operator = (const AliMpSlatSegmentation& right);

  const AliMpSlat* fkSlat;  ///< Slat
  Bool_t           fIsOwner;///< Slat ownership     

  ClassDef(AliMpSlatSegmentation,2) // A slat for stations 3,4,5
};

/// Return station type
inline AliMp::StationType AliMpSlatSegmentation::StationType() const
{ return AliMp::kStation345; }

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