// @(#)root/eve:$Id$
// Authors: Matevz Tadel & Alja Mrak-Tadel: 2006, 2007

/*************************************************************************
 * Copyright (C) 1995-2007, Rene Brun and Fons Rademakers.               *
 * All rights reserved.                                                  *
 *                                                                       *
 * For the licensing terms see $ROOTSYS/LICENSE.                         *
 * For the list of contributors see $ROOTSYS/README/CREDITS.             *
 *************************************************************************/

#include "TEveDigitSet.h"
#include "TEveManager.h"
#include "TEveTrans.h"

#include "TColor.h"
#include "TRefArray.h"


//______________________________________________________________________________
//
// Base-class for storage of digit collections; provides
// transformation matrix (TEveTrans), signal to color mapping
// (TEveRGBAPalette) and visual grouping (TEveFrameBox).
//
// Base-class for displaying a digit collection.
// Provdies common services for:
// - specifying signal / color per digit;
// - specifying object reference per digit;
// - controlling palette and thresholds (external object TEveRGBAPalette);
// - showing a frame around the digits (external object TEveFrameBox);
// - specifying transformation matrix for the whole collection;
//   by data-member of class TEveTrans.
//
// Use method DigitId(TObject* id) to assign additional identification
// to the last created digit. By calling SetOwnIds(kTRUE) tje
// digit-set becomes the owner of the assigned objects and deletes
// them on destruction.
// Note that TRef is used for referencing the objects and if you
// instantiate the objects just to pass them to digit-set you should
// also call  TProcessID::Get/SetObjectCount() at the beginning / end
// of processing of an event. See documentation for class TRef, in
// particular section 'ObjectNumber'.
//
// If you use value-is-color mode and want to use transparency, set
// the transparency to non-zero value so that GL-renderer will be
// properly informed.
//
// If you want to use single color for all elements call:
//   UseSingleColor()
// Palette controls will not work in this case.
//
// A pointer to a rectangle / box of class TEveFrameBox can be set via
//   void SetFrame(TEveFrameBox* b);
// A single TEveFrameBox can be shared among several digit-sets (it is
// reference-counted). The following flafs affect how the frame-box will drawn
// and used for selection and highlight:
//   Bool_t fSelectViaFrame;
//   Bool_t fHighlightFrame;
//
// TEveDigitSet is sub-lcassed from TEveSecondarySelectable -- this means
// individual digits can be selected. By calling:
//   TEveSecondarySelectable::SetAlwaysSecSelect(kTRUE);
// one can enforce immediate feedback (highlight, tooltip and select on normal
// left-mouse click) on given digit-set.
//
// See also:
//   TEveQuadSet: rectangle, hexagon or line per digit
//   TEveBoxSet   a 3D box per digit

ClassImp(TEveDigitSet);

//______________________________________________________________________________
TEveDigitSet::TEveDigitSet(const char* n, const char* t) :
   TEveElement     (fColor),
   TNamed          (n, t),

   fDigitIds       (0),
   fDefaultValue   (kMinInt),
   fValueIsColor   (kFALSE),
   fSingleColor    (kFALSE),
   fAntiFlick      (kTRUE),
   fOwnIds         (kFALSE),
   fPlex           (),
   fLastDigit      (0),
   fLastIdx        (-1),

   fColor          (kWhite),
   fFrame          (0),
   fPalette        (0),
   fRenderMode     (kRM_AsIs),
   fSelectViaFrame (kFALSE),
   fHighlightFrame (kFALSE),
   fDisableLighting(kTRUE),
   fHistoButtons   (kTRUE),
   fEmitSignals    (kFALSE),
   fCallbackFoo    (0),
   fTooltipCBFoo   (0)
{
   // Constructor.

   fCanEditMainColor        = kTRUE;
   fCanEditMainTransparency = kTRUE;
   InitMainTrans();
}

//______________________________________________________________________________
TEveDigitSet::~TEveDigitSet()
{
   // Destructor.
   // Unreference frame and palette. Destroy referenced objects if they
   // are owned by the TEveDigitSet.

   SetFrame(0);
   SetPalette(0);
   if (fOwnIds)
      ReleaseIds();
   delete fDigitIds;
}

/******************************************************************************/

//______________________________________________________________________________
TEveDigitSet::DigitBase_t* TEveDigitSet::NewDigit()
{
   // Protected method called whenever a new digit is added.

   fLastIdx   = fPlex.Size();
   fLastDigit = new (fPlex.NewAtom()) DigitBase_t(fDefaultValue);
   return fLastDigit;
}

//______________________________________________________________________________
void TEveDigitSet::ReleaseIds()
{
   // Protected method. Release and delete the referenced objects, the
   // ownership is *NOT* checked.

   if (fDigitIds)
   {
      const Int_t N = fDigitIds->GetSize();

      for (Int_t i = 0; i < N; ++i)
         delete fDigitIds->At(i);

      fDigitIds->Expand(0);
   }
}

//------------------------------------------------------------------------------

//______________________________________________________________________________
void TEveDigitSet::UseSingleColor()
{
   // Instruct digit-set to use single color for its digits.
   // Call SetMainColor/Transparency to initialize it.

   fSingleColor = kTRUE;
}

//______________________________________________________________________________
void TEveDigitSet::SetMainColor(Color_t color)
{
   // Override from TEveElement, forward to Frame.

   if (fSingleColor)
   {
      TEveElement::SetMainColor(color);
   }
   else if (fFrame)
   {
      fFrame->SetFrameColor(color);
      fFrame->StampBackPtrElements(kCBColorSelection);
   }
}

//______________________________________________________________________________
void TEveDigitSet::UnSelected()
{
   // Virtual function called when both fSelected is false and
   // fImpliedSelected is 0.

   fSelectedSet.clear();
   TEveElement::UnSelected();
}

//______________________________________________________________________________
void TEveDigitSet::UnHighlighted()
{
   // Virtual function called when both fHighlighted is false and
   // fImpliedHighlighted is 0.

   fHighlightedSet.clear();
   TEveElement::UnHighlighted();
}

//______________________________________________________________________________
TString TEveDigitSet::GetHighlightTooltip()
{
   // Return tooltip for highlighted element if always-sec-select is set.
   // Otherwise return the tooltip for this element.

   if (fHighlightedSet.empty()) return "";

   if (GetAlwaysSecSelect())
   {
      if (fTooltipCBFoo)
      {
         return (fTooltipCBFoo)(this, *fHighlightedSet.begin());
      }
      else if (fDigitIds)
      {
         TObject *o = GetId(*fHighlightedSet.begin());
         if (o)
            return TString(o->GetName());
      }
      return TString::Format("%s; idx=%d", GetElementName(), *fHighlightedSet.begin());
   }
   else
   {
      return TEveElement::GetHighlightTooltip();
   }
}


/******************************************************************************/
/******************************************************************************/

//______________________________________________________________________________
void TEveDigitSet::RefitPlex()
{
   // Instruct underlying memory allocator to regroup itself into a
   // contiguous memory chunk.

   fPlex.Refit();
}

/******************************************************************************/

//______________________________________________________________________________
void TEveDigitSet::ScanMinMaxValues(Int_t& min, Int_t& max)
{
   // Iterate over the digits and detmine min and max signal values.

   if (fValueIsColor || fPlex.Size() == 0)
   {
      min = max = 0;
      return;
   }

   min = kMaxInt;
   max = kMinInt;
   for (Int_t c=0; c<fPlex.VecSize(); ++c)
   {
      Char_t* a = fPlex.Chunk(c);
      Int_t   n = fPlex.NAtoms(c);
      while (n--)
      {
         Int_t v = ((DigitBase_t*)a)->fValue;
         if (v < min) min = v;
         if (v > max) max = v;
         a += fPlex.S();
      }
   }
   if (min == max)
      --min;
}

/******************************************************************************/

//______________________________________________________________________________
void TEveDigitSet::SetCurrentDigit(Int_t idx)
{
   // Set current digit -- the one that will receive calls to
   // DigitValue/Color/Id/UserData() functions.
   // Note that various AddXyzz() functions set the current digit to the newly
   // added one.

   fLastIdx   = idx;
   fLastDigit = GetDigit(idx);
}

//______________________________________________________________________________
void TEveDigitSet::DigitValue(Int_t value)
{
   // Set signal value for the last digit added.

   fLastDigit->fValue = value;
}

//______________________________________________________________________________
void TEveDigitSet::DigitColor(Color_t ci)
{
   // Set color for the last digit added.

   TEveUtil::ColorFromIdx(ci, (UChar_t*) & fLastDigit->fValue, kTRUE);
}

//______________________________________________________________________________
void TEveDigitSet::DigitColor(Color_t ci, Char_t transparency)
{
   // Set color for the last digit added.

   TEveUtil::ColorFromIdx(ci, (UChar_t*) & fLastDigit->fValue, transparency);
}

//______________________________________________________________________________
void TEveDigitSet::DigitColor(UChar_t r, UChar_t g, UChar_t b, UChar_t a)
{
   // Set color for the last digit added.

   UChar_t* x = (UChar_t*) & fLastDigit->fValue;
   x[0] = r; x[1] = g; x[2] = b; x[3] = a;
}

//______________________________________________________________________________
void TEveDigitSet::DigitColor(UChar_t* rgba)
{
   // Set color for the last digit added.

   UChar_t* x = (UChar_t*) & fLastDigit->fValue;
   x[0] = rgba[0]; x[1] = rgba[1]; x[2] = rgba[2]; x[3] = rgba[3];
}

//______________________________________________________________________________
void TEveDigitSet::DigitId(TObject* id)
{
   // Set external object reference for the last digit added.

   DigitId(fLastIdx, id);
}

//______________________________________________________________________________
void TEveDigitSet::DigitUserData(void* ud)
{
   // Set user-data for the last digit added.

   fLastDigit->fUserData = ud;
}

//______________________________________________________________________________
void TEveDigitSet::DigitId(Int_t n, TObject* id)
{
   // Set external object reference for digit n.

   if (!fDigitIds)
      fDigitIds = new TRefArray;

   if (fOwnIds && n < fDigitIds->GetSize() && fDigitIds->At(n))
      delete fDigitIds->At(n);

   fDigitIds->AddAtAndExpand(id, n);
}

//______________________________________________________________________________
void TEveDigitSet::DigitUserData(Int_t n, void* ud)
{
   // Set user-data for digit n.

   GetDigit(n)->fUserData = ud;
}

//______________________________________________________________________________
TObject* TEveDigitSet::GetId(Int_t n) const
{
   // Return external TObject associated with digit n.

   return fDigitIds ? fDigitIds->At(n) : 0;
}

//______________________________________________________________________________
void* TEveDigitSet::GetUserData(Int_t n) const
{
   // Get user-data associated with digit n.

   return GetDigit(n)->fUserData;
}

/******************************************************************************/
/******************************************************************************/

//______________________________________________________________________________
void TEveDigitSet::Paint(Option_t*)
{
   // Paint this object. Only direct rendering is supported.

   PaintStandard(this);
}

//______________________________________________________________________________
void TEveDigitSet::DigitSelected(Int_t idx)
{
   // Called from renderer when a digit with index idx is selected.
   // This is by-passed when always-secondary-select is active.

   DigitBase_t *qb  = GetDigit(idx);
   TObject     *obj = GetId(idx);

   if (fCallbackFoo) {
      (fCallbackFoo)(this, idx, obj);
   }
   if (fEmitSignals) {
      SecSelected(this, idx);
   } else {
      printf("TEveDigitSet::DigitSelected idx=%d, value=%d, obj=0x%lx\n",
             idx, qb->fValue, (ULong_t)obj);
      if (obj)
         obj->Print();
   }
}

//______________________________________________________________________________
void TEveDigitSet::SecSelected(TEveDigitSet* qs, Int_t idx)
{
   // Emit a SecSelected signal.
   // This is by-passed when always-secondary-select is active.

   Long_t args[2];
   args[0] = (Long_t) qs;
   args[1] = (Long_t) idx;

   Emit("SecSelected(TEveDigitSet*, Int_t)", args);
}

/******************************************************************************/
// Getters / Setters for Frame, TEveRGBAPalette, TEveTrans
/******************************************************************************/

//______________________________________________________________________________
void TEveDigitSet::SetFrame(TEveFrameBox* b)
{
   // Set TEveFrameBox pointer.

   if (fFrame == b) return;
   if (fFrame) fFrame->DecRefCount(this);
   fFrame = b;
   if (fFrame) {
      fFrame->IncRefCount(this);
      if (!fSingleColor) {
         SetMainColorPtr(fFrame->PtrFrameColor());
      }
   } else {
      SetMainColorPtr(&fColor);
   }
}

//______________________________________________________________________________
void TEveDigitSet::SetPalette(TEveRGBAPalette* p)
{
   // Set TEveRGBAPalette pointer.

   if (fPalette == p) return;
   if (fPalette) fPalette->DecRefCount();
   fPalette = p;
   if (fPalette) fPalette->IncRefCount();
}

//______________________________________________________________________________
TEveRGBAPalette* TEveDigitSet::AssertPalette()
{
   // Make sure the TEveRGBAPalette pointer is not null.
   // If it is not set, a new one is instantiated and the range is set
   // to current min/max signal values.

   if (fPalette == 0) {
      fPalette = new TEveRGBAPalette;
      if (!fValueIsColor) {
         Int_t min, max;
         ScanMinMaxValues(min, max);
         fPalette->SetLimits(min, max);
         fPalette->SetMinMax(min, max);
      }
   }
   return fPalette;
}
 TEveDigitSet.cxx:1
 TEveDigitSet.cxx:2
 TEveDigitSet.cxx:3
 TEveDigitSet.cxx:4
 TEveDigitSet.cxx:5
 TEveDigitSet.cxx:6
 TEveDigitSet.cxx:7
 TEveDigitSet.cxx:8
 TEveDigitSet.cxx:9
 TEveDigitSet.cxx:10
 TEveDigitSet.cxx:11
 TEveDigitSet.cxx:12
 TEveDigitSet.cxx:13
 TEveDigitSet.cxx:14
 TEveDigitSet.cxx:15
 TEveDigitSet.cxx:16
 TEveDigitSet.cxx:17
 TEveDigitSet.cxx:18
 TEveDigitSet.cxx:19
 TEveDigitSet.cxx:20
 TEveDigitSet.cxx:21
 TEveDigitSet.cxx:22
 TEveDigitSet.cxx:23
 TEveDigitSet.cxx:24
 TEveDigitSet.cxx:25
 TEveDigitSet.cxx:26
 TEveDigitSet.cxx:27
 TEveDigitSet.cxx:28
 TEveDigitSet.cxx:29
 TEveDigitSet.cxx:30
 TEveDigitSet.cxx:31
 TEveDigitSet.cxx:32
 TEveDigitSet.cxx:33
 TEveDigitSet.cxx:34
 TEveDigitSet.cxx:35
 TEveDigitSet.cxx:36
 TEveDigitSet.cxx:37
 TEveDigitSet.cxx:38
 TEveDigitSet.cxx:39
 TEveDigitSet.cxx:40
 TEveDigitSet.cxx:41
 TEveDigitSet.cxx:42
 TEveDigitSet.cxx:43
 TEveDigitSet.cxx:44
 TEveDigitSet.cxx:45
 TEveDigitSet.cxx:46
 TEveDigitSet.cxx:47
 TEveDigitSet.cxx:48
 TEveDigitSet.cxx:49
 TEveDigitSet.cxx:50
 TEveDigitSet.cxx:51
 TEveDigitSet.cxx:52
 TEveDigitSet.cxx:53
 TEveDigitSet.cxx:54
 TEveDigitSet.cxx:55
 TEveDigitSet.cxx:56
 TEveDigitSet.cxx:57
 TEveDigitSet.cxx:58
 TEveDigitSet.cxx:59
 TEveDigitSet.cxx:60
 TEveDigitSet.cxx:61
 TEveDigitSet.cxx:62
 TEveDigitSet.cxx:63
 TEveDigitSet.cxx:64
 TEveDigitSet.cxx:65
 TEveDigitSet.cxx:66
 TEveDigitSet.cxx:67
 TEveDigitSet.cxx:68
 TEveDigitSet.cxx:69
 TEveDigitSet.cxx:70
 TEveDigitSet.cxx:71
 TEveDigitSet.cxx:72
 TEveDigitSet.cxx:73
 TEveDigitSet.cxx:74
 TEveDigitSet.cxx:75
 TEveDigitSet.cxx:76
 TEveDigitSet.cxx:77
 TEveDigitSet.cxx:78
 TEveDigitSet.cxx:79
 TEveDigitSet.cxx:80
 TEveDigitSet.cxx:81
 TEveDigitSet.cxx:82
 TEveDigitSet.cxx:83
 TEveDigitSet.cxx:84
 TEveDigitSet.cxx:85
 TEveDigitSet.cxx:86
 TEveDigitSet.cxx:87
 TEveDigitSet.cxx:88
 TEveDigitSet.cxx:89
 TEveDigitSet.cxx:90
 TEveDigitSet.cxx:91
 TEveDigitSet.cxx:92
 TEveDigitSet.cxx:93
 TEveDigitSet.cxx:94
 TEveDigitSet.cxx:95
 TEveDigitSet.cxx:96
 TEveDigitSet.cxx:97
 TEveDigitSet.cxx:98
 TEveDigitSet.cxx:99
 TEveDigitSet.cxx:100
 TEveDigitSet.cxx:101
 TEveDigitSet.cxx:102
 TEveDigitSet.cxx:103
 TEveDigitSet.cxx:104
 TEveDigitSet.cxx:105
 TEveDigitSet.cxx:106
 TEveDigitSet.cxx:107
 TEveDigitSet.cxx:108
 TEveDigitSet.cxx:109
 TEveDigitSet.cxx:110
 TEveDigitSet.cxx:111
 TEveDigitSet.cxx:112
 TEveDigitSet.cxx:113
 TEveDigitSet.cxx:114
 TEveDigitSet.cxx:115
 TEveDigitSet.cxx:116
 TEveDigitSet.cxx:117
 TEveDigitSet.cxx:118
 TEveDigitSet.cxx:119
 TEveDigitSet.cxx:120
 TEveDigitSet.cxx:121
 TEveDigitSet.cxx:122
 TEveDigitSet.cxx:123
 TEveDigitSet.cxx:124
 TEveDigitSet.cxx:125
 TEveDigitSet.cxx:126
 TEveDigitSet.cxx:127
 TEveDigitSet.cxx:128
 TEveDigitSet.cxx:129
 TEveDigitSet.cxx:130
 TEveDigitSet.cxx:131
 TEveDigitSet.cxx:132
 TEveDigitSet.cxx:133
 TEveDigitSet.cxx:134
 TEveDigitSet.cxx:135
 TEveDigitSet.cxx:136
 TEveDigitSet.cxx:137
 TEveDigitSet.cxx:138
 TEveDigitSet.cxx:139
 TEveDigitSet.cxx:140
 TEveDigitSet.cxx:141
 TEveDigitSet.cxx:142
 TEveDigitSet.cxx:143
 TEveDigitSet.cxx:144
 TEveDigitSet.cxx:145
 TEveDigitSet.cxx:146
 TEveDigitSet.cxx:147
 TEveDigitSet.cxx:148
 TEveDigitSet.cxx:149
 TEveDigitSet.cxx:150
 TEveDigitSet.cxx:151
 TEveDigitSet.cxx:152
 TEveDigitSet.cxx:153
 TEveDigitSet.cxx:154
 TEveDigitSet.cxx:155
 TEveDigitSet.cxx:156
 TEveDigitSet.cxx:157
 TEveDigitSet.cxx:158
 TEveDigitSet.cxx:159
 TEveDigitSet.cxx:160
 TEveDigitSet.cxx:161
 TEveDigitSet.cxx:162
 TEveDigitSet.cxx:163
 TEveDigitSet.cxx:164
 TEveDigitSet.cxx:165
 TEveDigitSet.cxx:166
 TEveDigitSet.cxx:167
 TEveDigitSet.cxx:168
 TEveDigitSet.cxx:169
 TEveDigitSet.cxx:170
 TEveDigitSet.cxx:171
 TEveDigitSet.cxx:172
 TEveDigitSet.cxx:173
 TEveDigitSet.cxx:174
 TEveDigitSet.cxx:175
 TEveDigitSet.cxx:176
 TEveDigitSet.cxx:177
 TEveDigitSet.cxx:178
 TEveDigitSet.cxx:179
 TEveDigitSet.cxx:180
 TEveDigitSet.cxx:181
 TEveDigitSet.cxx:182
 TEveDigitSet.cxx:183
 TEveDigitSet.cxx:184
 TEveDigitSet.cxx:185
 TEveDigitSet.cxx:186
 TEveDigitSet.cxx:187
 TEveDigitSet.cxx:188
 TEveDigitSet.cxx:189
 TEveDigitSet.cxx:190
 TEveDigitSet.cxx:191
 TEveDigitSet.cxx:192
 TEveDigitSet.cxx:193
 TEveDigitSet.cxx:194
 TEveDigitSet.cxx:195
 TEveDigitSet.cxx:196
 TEveDigitSet.cxx:197
 TEveDigitSet.cxx:198
 TEveDigitSet.cxx:199
 TEveDigitSet.cxx:200
 TEveDigitSet.cxx:201
 TEveDigitSet.cxx:202
 TEveDigitSet.cxx:203
 TEveDigitSet.cxx:204
 TEveDigitSet.cxx:205
 TEveDigitSet.cxx:206
 TEveDigitSet.cxx:207
 TEveDigitSet.cxx:208
 TEveDigitSet.cxx:209
 TEveDigitSet.cxx:210
 TEveDigitSet.cxx:211
 TEveDigitSet.cxx:212
 TEveDigitSet.cxx:213
 TEveDigitSet.cxx:214
 TEveDigitSet.cxx:215
 TEveDigitSet.cxx:216
 TEveDigitSet.cxx:217
 TEveDigitSet.cxx:218
 TEveDigitSet.cxx:219
 TEveDigitSet.cxx:220
 TEveDigitSet.cxx:221
 TEveDigitSet.cxx:222
 TEveDigitSet.cxx:223
 TEveDigitSet.cxx:224
 TEveDigitSet.cxx:225
 TEveDigitSet.cxx:226
 TEveDigitSet.cxx:227
 TEveDigitSet.cxx:228
 TEveDigitSet.cxx:229
 TEveDigitSet.cxx:230
 TEveDigitSet.cxx:231
 TEveDigitSet.cxx:232
 TEveDigitSet.cxx:233
 TEveDigitSet.cxx:234
 TEveDigitSet.cxx:235
 TEveDigitSet.cxx:236
 TEveDigitSet.cxx:237
 TEveDigitSet.cxx:238
 TEveDigitSet.cxx:239
 TEveDigitSet.cxx:240
 TEveDigitSet.cxx:241
 TEveDigitSet.cxx:242
 TEveDigitSet.cxx:243
 TEveDigitSet.cxx:244
 TEveDigitSet.cxx:245
 TEveDigitSet.cxx:246
 TEveDigitSet.cxx:247
 TEveDigitSet.cxx:248
 TEveDigitSet.cxx:249
 TEveDigitSet.cxx:250
 TEveDigitSet.cxx:251
 TEveDigitSet.cxx:252
 TEveDigitSet.cxx:253
 TEveDigitSet.cxx:254
 TEveDigitSet.cxx:255
 TEveDigitSet.cxx:256
 TEveDigitSet.cxx:257
 TEveDigitSet.cxx:258
 TEveDigitSet.cxx:259
 TEveDigitSet.cxx:260
 TEveDigitSet.cxx:261
 TEveDigitSet.cxx:262
 TEveDigitSet.cxx:263
 TEveDigitSet.cxx:264
 TEveDigitSet.cxx:265
 TEveDigitSet.cxx:266
 TEveDigitSet.cxx:267
 TEveDigitSet.cxx:268
 TEveDigitSet.cxx:269
 TEveDigitSet.cxx:270
 TEveDigitSet.cxx:271
 TEveDigitSet.cxx:272
 TEveDigitSet.cxx:273
 TEveDigitSet.cxx:274
 TEveDigitSet.cxx:275
 TEveDigitSet.cxx:276
 TEveDigitSet.cxx:277
 TEveDigitSet.cxx:278
 TEveDigitSet.cxx:279
 TEveDigitSet.cxx:280
 TEveDigitSet.cxx:281
 TEveDigitSet.cxx:282
 TEveDigitSet.cxx:283
 TEveDigitSet.cxx:284
 TEveDigitSet.cxx:285
 TEveDigitSet.cxx:286
 TEveDigitSet.cxx:287
 TEveDigitSet.cxx:288
 TEveDigitSet.cxx:289
 TEveDigitSet.cxx:290
 TEveDigitSet.cxx:291
 TEveDigitSet.cxx:292
 TEveDigitSet.cxx:293
 TEveDigitSet.cxx:294
 TEveDigitSet.cxx:295
 TEveDigitSet.cxx:296
 TEveDigitSet.cxx:297
 TEveDigitSet.cxx:298
 TEveDigitSet.cxx:299
 TEveDigitSet.cxx:300
 TEveDigitSet.cxx:301
 TEveDigitSet.cxx:302
 TEveDigitSet.cxx:303
 TEveDigitSet.cxx:304
 TEveDigitSet.cxx:305
 TEveDigitSet.cxx:306
 TEveDigitSet.cxx:307
 TEveDigitSet.cxx:308
 TEveDigitSet.cxx:309
 TEveDigitSet.cxx:310
 TEveDigitSet.cxx:311
 TEveDigitSet.cxx:312
 TEveDigitSet.cxx:313
 TEveDigitSet.cxx:314
 TEveDigitSet.cxx:315
 TEveDigitSet.cxx:316
 TEveDigitSet.cxx:317
 TEveDigitSet.cxx:318
 TEveDigitSet.cxx:319
 TEveDigitSet.cxx:320
 TEveDigitSet.cxx:321
 TEveDigitSet.cxx:322
 TEveDigitSet.cxx:323
 TEveDigitSet.cxx:324
 TEveDigitSet.cxx:325
 TEveDigitSet.cxx:326
 TEveDigitSet.cxx:327
 TEveDigitSet.cxx:328
 TEveDigitSet.cxx:329
 TEveDigitSet.cxx:330
 TEveDigitSet.cxx:331
 TEveDigitSet.cxx:332
 TEveDigitSet.cxx:333
 TEveDigitSet.cxx:334
 TEveDigitSet.cxx:335
 TEveDigitSet.cxx:336
 TEveDigitSet.cxx:337
 TEveDigitSet.cxx:338
 TEveDigitSet.cxx:339
 TEveDigitSet.cxx:340
 TEveDigitSet.cxx:341
 TEveDigitSet.cxx:342
 TEveDigitSet.cxx:343
 TEveDigitSet.cxx:344
 TEveDigitSet.cxx:345
 TEveDigitSet.cxx:346
 TEveDigitSet.cxx:347
 TEveDigitSet.cxx:348
 TEveDigitSet.cxx:349
 TEveDigitSet.cxx:350
 TEveDigitSet.cxx:351
 TEveDigitSet.cxx:352
 TEveDigitSet.cxx:353
 TEveDigitSet.cxx:354
 TEveDigitSet.cxx:355
 TEveDigitSet.cxx:356
 TEveDigitSet.cxx:357
 TEveDigitSet.cxx:358
 TEveDigitSet.cxx:359
 TEveDigitSet.cxx:360
 TEveDigitSet.cxx:361
 TEveDigitSet.cxx:362
 TEveDigitSet.cxx:363
 TEveDigitSet.cxx:364
 TEveDigitSet.cxx:365
 TEveDigitSet.cxx:366
 TEveDigitSet.cxx:367
 TEveDigitSet.cxx:368
 TEveDigitSet.cxx:369
 TEveDigitSet.cxx:370
 TEveDigitSet.cxx:371
 TEveDigitSet.cxx:372
 TEveDigitSet.cxx:373
 TEveDigitSet.cxx:374
 TEveDigitSet.cxx:375
 TEveDigitSet.cxx:376
 TEveDigitSet.cxx:377
 TEveDigitSet.cxx:378
 TEveDigitSet.cxx:379
 TEveDigitSet.cxx:380
 TEveDigitSet.cxx:381
 TEveDigitSet.cxx:382
 TEveDigitSet.cxx:383
 TEveDigitSet.cxx:384
 TEveDigitSet.cxx:385
 TEveDigitSet.cxx:386
 TEveDigitSet.cxx:387
 TEveDigitSet.cxx:388
 TEveDigitSet.cxx:389
 TEveDigitSet.cxx:390
 TEveDigitSet.cxx:391
 TEveDigitSet.cxx:392
 TEveDigitSet.cxx:393
 TEveDigitSet.cxx:394
 TEveDigitSet.cxx:395
 TEveDigitSet.cxx:396
 TEveDigitSet.cxx:397
 TEveDigitSet.cxx:398
 TEveDigitSet.cxx:399
 TEveDigitSet.cxx:400
 TEveDigitSet.cxx:401
 TEveDigitSet.cxx:402
 TEveDigitSet.cxx:403
 TEveDigitSet.cxx:404
 TEveDigitSet.cxx:405
 TEveDigitSet.cxx:406
 TEveDigitSet.cxx:407
 TEveDigitSet.cxx:408
 TEveDigitSet.cxx:409
 TEveDigitSet.cxx:410
 TEveDigitSet.cxx:411
 TEveDigitSet.cxx:412
 TEveDigitSet.cxx:413
 TEveDigitSet.cxx:414
 TEveDigitSet.cxx:415
 TEveDigitSet.cxx:416
 TEveDigitSet.cxx:417
 TEveDigitSet.cxx:418
 TEveDigitSet.cxx:419
 TEveDigitSet.cxx:420
 TEveDigitSet.cxx:421
 TEveDigitSet.cxx:422
 TEveDigitSet.cxx:423
 TEveDigitSet.cxx:424
 TEveDigitSet.cxx:425
 TEveDigitSet.cxx:426
 TEveDigitSet.cxx:427
 TEveDigitSet.cxx:428
 TEveDigitSet.cxx:429
 TEveDigitSet.cxx:430
 TEveDigitSet.cxx:431
 TEveDigitSet.cxx:432
 TEveDigitSet.cxx:433
 TEveDigitSet.cxx:434
 TEveDigitSet.cxx:435
 TEveDigitSet.cxx:436
 TEveDigitSet.cxx:437
 TEveDigitSet.cxx:438
 TEveDigitSet.cxx:439
 TEveDigitSet.cxx:440
 TEveDigitSet.cxx:441
 TEveDigitSet.cxx:442
 TEveDigitSet.cxx:443
 TEveDigitSet.cxx:444
 TEveDigitSet.cxx:445
 TEveDigitSet.cxx:446
 TEveDigitSet.cxx:447
 TEveDigitSet.cxx:448
 TEveDigitSet.cxx:449
 TEveDigitSet.cxx:450
 TEveDigitSet.cxx:451
 TEveDigitSet.cxx:452
 TEveDigitSet.cxx:453
 TEveDigitSet.cxx:454
 TEveDigitSet.cxx:455
 TEveDigitSet.cxx:456
 TEveDigitSet.cxx:457
 TEveDigitSet.cxx:458
 TEveDigitSet.cxx:459
 TEveDigitSet.cxx:460
 TEveDigitSet.cxx:461
 TEveDigitSet.cxx:462
 TEveDigitSet.cxx:463
 TEveDigitSet.cxx:464
 TEveDigitSet.cxx:465
 TEveDigitSet.cxx:466
 TEveDigitSet.cxx:467
 TEveDigitSet.cxx:468
 TEveDigitSet.cxx:469
 TEveDigitSet.cxx:470
 TEveDigitSet.cxx:471
 TEveDigitSet.cxx:472
 TEveDigitSet.cxx:473
 TEveDigitSet.cxx:474
 TEveDigitSet.cxx:475