ROOT logo
// $Id$
// Main authors: Matevz Tadel & Alja Mrak-Tadel: 2006, 2007

/**************************************************************************
 * Copyright(c) 1998-2008, ALICE Experiment at CERN, all rights reserved. *
 * See http://aliceinfo.cern.ch/Offline/AliRoot/License.html for          *
 * full copyright notice.                                                 *
 **************************************************************************/

#ifndef AliEveTPCSectorViz_H
#define AliEveTPCSectorViz_H

#include <TEveElement.h>

#include <TNamed.h>
#include <TAtt3D.h>
#include <TAttBBox.h>

class AliEveTPCData; class AliEveTPCSectorData;

class AliEveTPCSectorVizEditor;
class AliEveTPCSector2D;  class AliEveTPCSector2DEditor;  class AliEveTPCSector2DGL;
class AliEveTPCSector3D;  class AliEveTPCSector3DEditor;  class AliEveTPCSector3DGL;

//------------------------------------------------------------------------------
// AliEveTPCSectorViz
//
// Base-class for visualization of data for one TPC sector.
//

class AliEveTPCSectorViz : public TEveElement,
			   public TNamed,
			   public TAtt3D,
			   public TAttBBox
{
  friend class AliEveTPCSectorVizEditor;
  friend class AliEveTPCSector2D;
  friend class AliEveTPCSector2DEditor;
  friend class AliEveTPCSector2DGL;
  friend class AliEveTPCSector3D;
  friend class AliEveTPCSector3DEditor;
  friend class AliEveTPCSector3DGL;

public:
  AliEveTPCSectorViz(const Text_t* n="AliEveTPCSectorViz", const Text_t* t=0);
  virtual ~AliEveTPCSectorViz();

  virtual void CopyVizParams(const TEveElement* el);

  virtual UInt_t IncRTS() { return ++fRTS; }
  virtual Bool_t CanEditMainColor() const { return kTRUE; }

  void SetDataSource(AliEveTPCData* data);
  void SetSectorID(Int_t id);

  AliEveTPCData* GetData()     const { return fTPCData; }
  Int_t          GetSectorID() const { return fSectorID; }
  AliEveTPCSectorData* GetSectorData() const;

  Int_t GetMinTime() const { return fMinTime; }
  Int_t GetMaxTime() const { return fMaxTime; }
  void SetMinTime(Int_t mt)    { fMinTime   = mt; IncRTS(); }
  void SetMaxTime(Int_t mt)    { fMaxTime   = mt; IncRTS(); }
  void SetThreshold(Short_t t);
  void SetMaxVal(Int_t mv);

  void SetRnrInn(Bool_t r)     { fRnrInn  = r; IncRTS(); }
  void SetRnrOut1(Bool_t r)    { fRnrOut1 = r; IncRTS(); }
  void SetRnrOut2(Bool_t r)    { fRnrOut2 = r; IncRTS(); }

  void SetFrameColor(Color_t col)     { fFrameColor = col; IncRTS(); }
  virtual void SetRnrFrame(Bool_t rf) { fRnrFrame = rf;  IncRTS(); }
  void SetAutoTrans(Bool_t t);

  void SetUseTrans(Bool_t t);

protected:
  AliEveTPCData    *fTPCData;    //  Source of data.
  Int_t             fSectorID;   //  Id of the displayed sector.

  Int_t             fMinTime;    //  Min time-bin to display.
  Int_t             fMaxTime;    //  Max time-bin to display.
  Short_t           fThreshold;  //  Threshold for display/
  Int_t             fMaxVal;     //  Maximum signal-value, all above is of the same color.

  Bool_t            fRnrInn;     //  Render inner segment.
  Bool_t            fRnrOut1;    //  Render middle segment.
  Bool_t            fRnrOut2;    //  Render outer segment.

  Color_t           fFrameColor; //  Color of the frame, the main color.
  Bool_t            fRnrFrame;   //  Render frame.
  Bool_t            fAutoTrans;  //  Automatically calculate transformation based on sector id.
  UInt_t            fRTS;        //! Rendering TimeStamp

  mutable UChar_t  *fColorArray; //  Color array caching signal to color mapping.

  void SetupColor(Int_t val, UChar_t* pix) const;
  void ClearColorArray();
  void SetupColorArray() const;
  UChar_t* ColorFromArray(Int_t val) const;
  void     ColorFromArray(Int_t val, UChar_t* pix) const;

private:
  AliEveTPCSectorViz(const AliEveTPCSectorViz&);            // Not implemented
  AliEveTPCSectorViz& operator=(const AliEveTPCSectorViz&); // Not implemented

  ClassDef(AliEveTPCSectorViz, 0); // Base-class for visualization of data for one TPC sector.
};


// --- Inlines ---

inline UChar_t* AliEveTPCSectorViz::ColorFromArray(Int_t val) const
{
  if(val < fThreshold) val = fThreshold;
  if(val > fMaxVal)    val = fMaxVal;
  return fColorArray + 4 * (val - fThreshold);
}

inline void AliEveTPCSectorViz::ColorFromArray(Int_t val, UChar_t* pix) const
{
  UChar_t* c = ColorFromArray(val);
  pix[0] = c[0]; pix[1] = c[1]; pix[2] = c[2]; pix[3] = c[3];
}

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