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 AliEveITSScaledModule_H
#define AliEveITSScaledModule_H

#include <TEveUtil.h>
#include <AliEveITSModule.h>

#include <TQObject.h>


/******************************************************************************/
// AliEveDigitScaleInfo
/******************************************************************************/

class AliEveDigitScaleInfo : public TQObject, public TEveRefBackPtr
{
public:
  enum StatType_e { kSTOccup, kSTAverage, kSTRms };

  AliEveDigitScaleInfo();
  virtual ~AliEveDigitScaleInfo() {}

  Int_t  GetScale() const { return fScale; }
  void   ScaleChanged(Int_t s);

  Int_t  GetStatType() const { return fStatType; }
  void   StatTypeChanged(Int_t t);

  Bool_t GetSyncPalette() const   { return fSyncPalette; }
  void   SetSyncPalette(Bool_t x) { fSyncPalette = x; }

protected:
  Int_t            fScale;        // Current scale.
  Int_t            fStatType;     // Digit scaling algorithm, see StatType_e.

  Bool_t           fSyncPalette;  // Synchronize palette on next usage.

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

  ClassDef(AliEveDigitScaleInfo, 0);
};

/******************************************************************************/
// ScaledDigit
/******************************************************************************/

/******************************************************************************/
// AliEveITSScaledModule
/******************************************************************************/

class AliEveITSScaledModule : public AliEveITSModule
{
  friend class ITSSDSubEditor;

public:
  AliEveITSScaledModule(Int_t gid, AliEveITSDigitsInfo* info, AliEveDigitScaleInfo* si );
  virtual ~AliEveITSScaledModule();

  virtual void DigitSelected(Int_t idx);

  virtual void LoadQuads();
  void         SetQuadValues();

  void         SyncPalette();

  void         GetScaleData(Int_t& cnx, Int_t& cnz, Int_t& total) const;
  AliEveDigitScaleInfo*  GetScaleInfo() { return fScaleInfo; }


  // --- Inner structs

  struct ScaledDigit_t : public TObject
  {
  public:
    Int_t   fN;
    Float_t fSum;
    Float_t fSqrSum;
    Int_t   fMinI, fMinJ;
    Int_t   fMaxI, fMaxJ;

    ScaledDigit_t();
    ScaledDigit_t(Int_t di, Int_t dj);

    void Dump() const;
  };

protected:
  Int_t       fNx;   // per module
  Int_t       fNz;

  Int_t       fNCx;  // per cell
  Int_t       fNCz;

  AliEveDigitScaleInfo* fScaleInfo;

private:
  std::map<Int_t, ScaledDigit_t> fDigitsMap;

  AliEveITSScaledModule(const AliEveITSScaledModule&);            // Not implemented
  AliEveITSScaledModule& operator=(const AliEveITSScaledModule&); // Not implemented

  ClassDef(AliEveITSScaledModule, 0); // Visualization of an ITS module with digits aggregated on a grid of pre-defined size.
};

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