ROOT logo
#ifndef ALIMPFASTSEGMENTATION_H
#define ALIMPFASTSEGMENTATION_H

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

// $Id$

/// \ingroup management
/// \class AliMpFastSegmentation
/// \brief Fast version of AliMpVSegmentation
/// 
// author Laurent Aphecetche

#ifndef ROOT_TObject
#  include "TObject.h"
#endif

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

#ifndef ROOT_TObjArray
#  include "TObjArray.h"
#endif

#ifndef ROOT_TExMap
#  include "TExMap.h"
#endif

class AliMpMotifPosition;

class AliMpFastSegmentation : public AliMpVSegmentation
{
public:
  AliMpFastSegmentation(AliMpVSegmentation* seg);
  virtual ~AliMpFastSegmentation();
  
  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;
  
  virtual Bool_t HasPadByIndices(Int_t ix, Int_t iy) const;
  virtual Bool_t HasPadByLocation(Int_t manuId, Int_t manuChannel) const;
  
  virtual AliMpPad PadByLocation(Int_t manuId, Int_t manuChannel, Bool_t warning = true) const;
  virtual AliMpPad PadByIndices (Int_t ix, Int_t iy, Bool_t warning = true) const;
  virtual AliMpPad PadByPosition(Double_t x, Double_t y, Bool_t warning = true) 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 AliMp::PlaneType PlaneType() const;
  
  virtual Double_t  GetDimensionX() const;
  virtual Double_t  GetDimensionY() const;
    
  virtual Double_t  GetPositionX() const;
  virtual Double_t  GetPositionY() const;

  virtual AliMpMotifPosition* MotifPosition(Int_t manuId) const;

  virtual Bool_t HasMotifPosition(Int_t manuId) const;

  virtual void Print(Option_t* opt="") const;

  /// Return helper class 
  AliMpVSegmentation* GetHelper() const { return fHelper; }
  
  /// Return segmentation station type
  AliMp::StationType StationType() const { return fHelper->StationType(); }
  
private:
  /// Not implemented
  AliMpFastSegmentation(const AliMpFastSegmentation& rhs);
  /// Not implemented
  AliMpFastSegmentation& operator=(const AliMpFastSegmentation& rhs);

  virtual AliMpMotifPosition* InternalMotifPosition(Int_t index) const;

private:
  AliMpVSegmentation* fHelper; ///< helper class (owner)
  TObjArray fMotifPositions; ///< array of AliMpMotifPositions (not owner)
  mutable TExMap fIxIy; ///< map of (ix,iy) -> index in array above
  mutable TExMap fManuId; ///< map of (manuid) -> index in array above
  Double_t fPositionX; ///< to compute pad positions
  Double_t fPositionY; ///< to compute pad positions
 
  ClassDef(AliMpFastSegmentation,2) // Variant implementation for AliMpVSegmentation
};

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