ROOT logo
// -*- mode: C++ -*- 
//
/* Copyright(c) 2008, Christian Holm Christensen
 *
 * Latest changes by Christian Holm Christensen <cholm@nbi.dk>
 *
 * See cxx source for full Copyright notice                               
 */
/** @file    AliEveFMDLoader.h
    @author  Christian Holm Christensen <cholm@nbi.dk>
    @date    Sun Mar 26 17:59:37 2006
    @brief   Declaration of AliEveFMDLoader singleton class 
*/
//____________________________________________________________________
// 
// Forward Multiplicity Detector based on Silicon wafers. 
// . 
// This class is the loader for the event display.
// 
#ifndef ALIEVEFMDLOADER_H
#define ALIEVEFMDLOADER_H
#include <TEveElement.h>
#include <TEveRGBAPalette.h>
#include <TClonesArray.h>
// Forward declarations
class TEveDigitSet;

/** @class AliEveFMDLoader 
    @brief Loader of FMD data for the EVE event display 
    @ingroup FMD_util

    This class is a singleton, meaning that there's only one instance
    of this.  This is done to speed up the processing by putting all
    things that are needed every time into the constructor.
*/
class AliEveFMDLoader : public TEveElementList
{
public:
  /** @{ 
      @name Loading and displaying data */
  /** Load and display hits */
  virtual void LoadHits();
  /** Load and display digits */
  virtual void LoadDigits();
  /** Load and display raw data digits */
  virtual void LoadRaw();
  /** Load and display ESD */
  virtual void LoadESD();
  /** @} */

  /** @{ 
      @name Hacks to optimise performance */
  /** Called when the element should be removed from the list. We
      overload this to allow clearing of signals.
      @param el Tree to remove from.
  */
  virtual Int_t RemoveFromListTrees(TEveElement* el);
  /** Called when the element should be removed from the list. We
      overload this to allow clearing of signals.
      @param el Parent to remove from.
  */  
  virtual void RemoveParent(TEveElement* el);
  /** @} */

  /** @{ 
      @name Singleton interface */
  /** Get the singleton instance.  If the instance has not been
      instantised yet, it will be after this call. */
  static AliEveFMDLoader* Instance();
  /** Destructor */
  virtual ~AliEveFMDLoader();
  /** @} */
protected:
  struct ModuleData 
  {
    Float_t  fScaledSum;
  };
  /** Constructor 
      @param name     Name of the folder. 
      @param useBoxes Whether to use boxes or Quads for the signals 
      @param old      Whether to enable reading old RCU data format */
  AliEveFMDLoader(const char* name="FMD", Bool_t useBoxes=true, 
		  Bool_t old=kTRUE);

  /** @{ 
      @name Service functions for loading data */
  /** Do the actual display of digits 
      @param type What to show 
      @param digits The digits */
  void          DoLoadDigits(const char* type, TClonesArray* digits);
  /** @} */

  /** @{ 
      @name Digit set management */
  /** Find a digit set corresponding to the passed parameters.  If it
      is not found, one is created 
      @param type   Type of data 
      @param d      Detector 
      @param r      Ring 
      @param s      Sector 
      @return a digit set */
  TEveDigitSet* FindDigitSet(const char* type,UShort_t d, Char_t r, UShort_t s);
  /** Make a digit set.  The type of digit set depends on the setting
      of fUseBoxDigits.  If this is true, we return a TEveBoxSet,
      otherwise a TEveQuadSet 
      @param name  Name of set. 
      @param nstr  Number of strips to make room for. 
      @return newly allocated digit set */
  virtual TEveDigitSet* MakeDigitSet(const char* name, UShort_t nstr);
  /** Clear signals of some type.   
      @param type Type of signals to clear 
      Type can be one of 
      - All    All signals 
      - Hits   Hits 
      - Digits Digits 
      - Raw    Raw 
      - ESD    ESD */
  virtual void ClearDigitSets(const char* type);
  /** @} */

  /** @{ 
      @name Adding signals to digit sets */
  /** Add a signal to a digit set
      @param type   Type of data 
      @param det    Detector 
      @param rng    Ring 
      @param sec    Sector 
      @param str    Strip
      @param signal Signal value 
      @param min    Minimum of this kind of signal 
      @param max    Maximum of this kind of signal 
      @param ref    Reference object  */
  void          AddSignal(const char* type, UShort_t det, Char_t ring, 
			  UShort_t sec, UShort_t str, 
			  Float_t signal, Float_t min, Float_t  max, 
			  TObject* ref=0);
  /** Add a signal to a digit set, with known (x,y,z) coordinates
      (this is for hits)
      @param type   Type of data 
      @param det    Detector 
      @param rng    Ring 
      @param sec    Sector 
      @param str    Strip
      @param x      X coordinate  
      @param y      Y coordinate  
      @param z      Z coordinate  
      @param signal Signal value 
      @param min    Minimum of this kind of signal 
      @param max    Maximum of this kind of signal 
      @param ref    Reference object */
  void          AddSignal(const char* type, UShort_t det, Char_t ring, 
			  UShort_t sec, UShort_t str, 
			  Double_t x, Double_t y, Double_t z, 
			  Float_t signal, Float_t min, Float_t  max, 
			  TObject* ref=0);
  /** Add a digit to a digit set. 
      @param signals Digit set. 
      @param x      X coordinate  
      @param y      Y coordinate  
      @param z      Z coordinate  
      @param w      strip pitch 
      @param scaled Scaled value 
      @param value  Signal value 
      @param ref    Reference object */
  virtual void AddDigit(TEveDigitSet* signals, 
			Double_t x, Double_t y, Double_t z, 
			Double_t w, Float_t scaled, Int_t value, 
			TObject* ref);
  /** @} */

  /** @{
      @name Various service functions */
  /** check if we shoul re-add ourselves to the current event node */
  virtual void CheckAdd();
  void SummarizeModule(TEveElement* module);
  void SummarizeModules();
  /** @} */


  /** @{ 
      @name Palettes */
  TEveRGBAPalette  fHitPalette;    // Palette for hits
  TEveRGBAPalette  fDigitPalette;  // Palette for ADC values
  TEveRGBAPalette  fMultPalette;   // Palette for multiplicity values
  /** @} */
  
  /** @{ 
      @name Settings */
  Bool_t           fUseBoxDigits;  // Whether to show as boxes or quads
  /** @} */

  /** @{ 
      @name Caches */
  TClonesArray     fHitCache;      // Cache of digits
  TClonesArray     fDigitCache;    // Cache of digits
  TClonesArray     fRawCache;      // Cache of raw
  /** @} */

  /** @{ 
      @name Singleton interface */
  static AliEveFMDLoader* fgInstance; // Singleton
  /** @} */

  ClassDef(AliEveFMDLoader,0)
};

  
  
#endif
//
// EOF
//
 AliEveFMDLoader.h:1
 AliEveFMDLoader.h:2
 AliEveFMDLoader.h:3
 AliEveFMDLoader.h:4
 AliEveFMDLoader.h:5
 AliEveFMDLoader.h:6
 AliEveFMDLoader.h:7
 AliEveFMDLoader.h:8
 AliEveFMDLoader.h:9
 AliEveFMDLoader.h:10
 AliEveFMDLoader.h:11
 AliEveFMDLoader.h:12
 AliEveFMDLoader.h:13
 AliEveFMDLoader.h:14
 AliEveFMDLoader.h:15
 AliEveFMDLoader.h:16
 AliEveFMDLoader.h:17
 AliEveFMDLoader.h:18
 AliEveFMDLoader.h:19
 AliEveFMDLoader.h:20
 AliEveFMDLoader.h:21
 AliEveFMDLoader.h:22
 AliEveFMDLoader.h:23
 AliEveFMDLoader.h:24
 AliEveFMDLoader.h:25
 AliEveFMDLoader.h:26
 AliEveFMDLoader.h:27
 AliEveFMDLoader.h:28
 AliEveFMDLoader.h:29
 AliEveFMDLoader.h:30
 AliEveFMDLoader.h:31
 AliEveFMDLoader.h:32
 AliEveFMDLoader.h:33
 AliEveFMDLoader.h:34
 AliEveFMDLoader.h:35
 AliEveFMDLoader.h:36
 AliEveFMDLoader.h:37
 AliEveFMDLoader.h:38
 AliEveFMDLoader.h:39
 AliEveFMDLoader.h:40
 AliEveFMDLoader.h:41
 AliEveFMDLoader.h:42
 AliEveFMDLoader.h:43
 AliEveFMDLoader.h:44
 AliEveFMDLoader.h:45
 AliEveFMDLoader.h:46
 AliEveFMDLoader.h:47
 AliEveFMDLoader.h:48
 AliEveFMDLoader.h:49
 AliEveFMDLoader.h:50
 AliEveFMDLoader.h:51
 AliEveFMDLoader.h:52
 AliEveFMDLoader.h:53
 AliEveFMDLoader.h:54
 AliEveFMDLoader.h:55
 AliEveFMDLoader.h:56
 AliEveFMDLoader.h:57
 AliEveFMDLoader.h:58
 AliEveFMDLoader.h:59
 AliEveFMDLoader.h:60
 AliEveFMDLoader.h:61
 AliEveFMDLoader.h:62
 AliEveFMDLoader.h:63
 AliEveFMDLoader.h:64
 AliEveFMDLoader.h:65
 AliEveFMDLoader.h:66
 AliEveFMDLoader.h:67
 AliEveFMDLoader.h:68
 AliEveFMDLoader.h:69
 AliEveFMDLoader.h:70
 AliEveFMDLoader.h:71
 AliEveFMDLoader.h:72
 AliEveFMDLoader.h:73
 AliEveFMDLoader.h:74
 AliEveFMDLoader.h:75
 AliEveFMDLoader.h:76
 AliEveFMDLoader.h:77
 AliEveFMDLoader.h:78
 AliEveFMDLoader.h:79
 AliEveFMDLoader.h:80
 AliEveFMDLoader.h:81
 AliEveFMDLoader.h:82
 AliEveFMDLoader.h:83
 AliEveFMDLoader.h:84
 AliEveFMDLoader.h:85
 AliEveFMDLoader.h:86
 AliEveFMDLoader.h:87
 AliEveFMDLoader.h:88
 AliEveFMDLoader.h:89
 AliEveFMDLoader.h:90
 AliEveFMDLoader.h:91
 AliEveFMDLoader.h:92
 AliEveFMDLoader.h:93
 AliEveFMDLoader.h:94
 AliEveFMDLoader.h:95
 AliEveFMDLoader.h:96
 AliEveFMDLoader.h:97
 AliEveFMDLoader.h:98
 AliEveFMDLoader.h:99
 AliEveFMDLoader.h:100
 AliEveFMDLoader.h:101
 AliEveFMDLoader.h:102
 AliEveFMDLoader.h:103
 AliEveFMDLoader.h:104
 AliEveFMDLoader.h:105
 AliEveFMDLoader.h:106
 AliEveFMDLoader.h:107
 AliEveFMDLoader.h:108
 AliEveFMDLoader.h:109
 AliEveFMDLoader.h:110
 AliEveFMDLoader.h:111
 AliEveFMDLoader.h:112
 AliEveFMDLoader.h:113
 AliEveFMDLoader.h:114
 AliEveFMDLoader.h:115
 AliEveFMDLoader.h:116
 AliEveFMDLoader.h:117
 AliEveFMDLoader.h:118
 AliEveFMDLoader.h:119
 AliEveFMDLoader.h:120
 AliEveFMDLoader.h:121
 AliEveFMDLoader.h:122
 AliEveFMDLoader.h:123
 AliEveFMDLoader.h:124
 AliEveFMDLoader.h:125
 AliEveFMDLoader.h:126
 AliEveFMDLoader.h:127
 AliEveFMDLoader.h:128
 AliEveFMDLoader.h:129
 AliEveFMDLoader.h:130
 AliEveFMDLoader.h:131
 AliEveFMDLoader.h:132
 AliEveFMDLoader.h:133
 AliEveFMDLoader.h:134
 AliEveFMDLoader.h:135
 AliEveFMDLoader.h:136
 AliEveFMDLoader.h:137
 AliEveFMDLoader.h:138
 AliEveFMDLoader.h:139
 AliEveFMDLoader.h:140
 AliEveFMDLoader.h:141
 AliEveFMDLoader.h:142
 AliEveFMDLoader.h:143
 AliEveFMDLoader.h:144
 AliEveFMDLoader.h:145
 AliEveFMDLoader.h:146
 AliEveFMDLoader.h:147
 AliEveFMDLoader.h:148
 AliEveFMDLoader.h:149
 AliEveFMDLoader.h:150
 AliEveFMDLoader.h:151
 AliEveFMDLoader.h:152
 AliEveFMDLoader.h:153
 AliEveFMDLoader.h:154
 AliEveFMDLoader.h:155
 AliEveFMDLoader.h:156
 AliEveFMDLoader.h:157
 AliEveFMDLoader.h:158
 AliEveFMDLoader.h:159
 AliEveFMDLoader.h:160
 AliEveFMDLoader.h:161
 AliEveFMDLoader.h:162
 AliEveFMDLoader.h:163
 AliEveFMDLoader.h:164
 AliEveFMDLoader.h:165
 AliEveFMDLoader.h:166
 AliEveFMDLoader.h:167
 AliEveFMDLoader.h:168
 AliEveFMDLoader.h:169
 AliEveFMDLoader.h:170
 AliEveFMDLoader.h:171
 AliEveFMDLoader.h:172
 AliEveFMDLoader.h:173
 AliEveFMDLoader.h:174
 AliEveFMDLoader.h:175
 AliEveFMDLoader.h:176
 AliEveFMDLoader.h:177
 AliEveFMDLoader.h:178
 AliEveFMDLoader.h:179
 AliEveFMDLoader.h:180
 AliEveFMDLoader.h:181
 AliEveFMDLoader.h:182
 AliEveFMDLoader.h:183
 AliEveFMDLoader.h:184
 AliEveFMDLoader.h:185
 AliEveFMDLoader.h:186
 AliEveFMDLoader.h:187
 AliEveFMDLoader.h:188
 AliEveFMDLoader.h:189
 AliEveFMDLoader.h:190
 AliEveFMDLoader.h:191
 AliEveFMDLoader.h:192
 AliEveFMDLoader.h:193
 AliEveFMDLoader.h:194
 AliEveFMDLoader.h:195
 AliEveFMDLoader.h:196
 AliEveFMDLoader.h:197
 AliEveFMDLoader.h:198
 AliEveFMDLoader.h:199
 AliEveFMDLoader.h:200
 AliEveFMDLoader.h:201
 AliEveFMDLoader.h:202
 AliEveFMDLoader.h:203
 AliEveFMDLoader.h:204
 AliEveFMDLoader.h:205
 AliEveFMDLoader.h:206
 AliEveFMDLoader.h:207
 AliEveFMDLoader.h:208
 AliEveFMDLoader.h:209
 AliEveFMDLoader.h:210
 AliEveFMDLoader.h:211
 AliEveFMDLoader.h:212