ROOT logo
// $Id$
// Main authors: Matevz Tadel & Alja Mrak-Tadel & Bogdan Vulpescu: 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 AliEveMUONChamber_H
#define AliEveMUONChamber_H

#include <TEveElement.h>
#include <TEveQuadSet.h>
#include <TEvePointSet.h>

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


class AliEveMUONData;
class AliEveMUONChamberData;
class AliEveMUONChamberEditor;
class AliEveMUONChamberGL;

class AliEveMUONChamber : public TEveElement,
			  public TNamed,
			  public TAtt3D,
			  public TAttBBox
{
  friend class AliEveMUONChamberGL;
  friend class AliEveMUONChamberEditor;

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

  virtual void   ComputeBBox();
  virtual void   Paint(Option_t* option = "");
  virtual UInt_t IncRTS()     { return ++fRTS; };
  virtual Bool_t CanEditMainColor() const { return kTRUE; }

  void SetDataSource(AliEveMUONData *data);
  void SetChamberID(Int_t id);
  void SetFrameColor(Color_t col)     { fFrameColor = col; IncRTS(); };
  AliEveMUONData* GetData() const { return fMUONData; };
  AliEveMUONChamberData* GetChamberData() const;
  Int_t GetID() const { return fChamberID; };
  void  SetThreshold(Short_t t);
  void  SetMaxVal(Int_t mv);
  void  SetClusterSize(Int_t size);
  void  SetHitSize(Int_t size);

protected:
  void UpdateQuads();

  AliEveMUONData   *fMUONData;      // data for the current event
  Color_t           fFrameColor;    // main coloring
  UInt_t            fRTS;           //! Rendering Time Stamp
  Int_t             fChamberID;     // number of the chamber, 0 to 13
  TEveQuadSet       fQuadSet1;      // 1st cathode plane digits
  TEveQuadSet       fQuadSet2;      // 2nd cathode plane digits
  TEvePointSet      fPointSet1;     // reconstructed points (1st cathode)
  TEvePointSet      fPointSet2;     // simulation hits
  Short_t           fThreshold;     // digit amplitude threshold
  Int_t             fMaxVal;        // digit amplitude maximum value
  Int_t             fClusterSize;   // cluster point size
  Int_t             fHitSize;       // hit point size

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

  mutable UChar_t  *fColorArray;    // color-cache

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

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

  ClassDef(AliEveMUONChamber, 0);  // Visualisation of the MUON chambers
};


// --- Inlines ---

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

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