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.                                                 *
 **************************************************************************/

#include "AliEveITSModuleStepper.h"
#include "AliEveITSDigitsInfo.h"
#include "AliEveITSScaledModule.h"

#include <TEveManager.h>
#include <TEveGedEditor.h>
#include <TEveGridStepper.h>
#include <TEveTrans.h>

#include <TGLRnrCtx.h>
#include <TGLIncludes.h>
#include <TGLSelectRecord.h>
#include <TGLUtil.h>
#include <TGLViewer.h>
#include <TGLAxis.h>

#include <TMath.h>
#include <THLimitsFinder.h>
#include <TVirtualPad.h>

#include <RVersion.h>


//______________________________________________________________________________
//
// Display scaled ITS modules in a paged layout, also providing
// GL-overaly control GUI.


ClassImp(AliEveITSModuleStepper)

AliEveITSModuleStepper::AliEveITSModuleStepper(AliEveITSDigitsInfo* di) :
  TEveElementList("ITS 2DStore", "AliEveITSModuleStepper", kTRUE),

  fDigitsInfo(di),
  fScaleInfo(0),
  fStepper(0),

  fModuleIDs(),
  fPosition(0),
  fSubDet(-1),

  fModuleFont(), fTextFont(), fSymbolFont(),
  fAxis(0),

  fMenuHeight(0.13),
  fTextSize(64),
  fTextCol(kGray+1),
  fActiveCol(kRed-4),

  fActiveID(-1)
{
  // Constructor.

  SetMainColorPtr(&fTextCol);
  fAxis = new TGLAxis();

  // override member from base TEveElementList
  fChildClass = AliEveITSScaledModule::Class();

  fDigitsInfo->IncRefCount();

  fStepper = new TEveGridStepper();
  fStepper->SetNs(5, 4);

  fScaleInfo = new AliEveDigitScaleInfo();
  fScaleInfo->IncRefCount();

  gEve->GetDefaultGLViewer()->AddOverlayElement(this);
}

AliEveITSModuleStepper::~AliEveITSModuleStepper()
{
  // Destructor.

  gEve->GetDefaultGLViewer()->RemoveOverlayElement(this);

  fScaleInfo->DecRefCount();
  fDigitsInfo->DecRefCount();

  delete fStepper;
  delete fAxis;
}

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

void AliEveITSModuleStepper::Capacity()
{
  // Make sure we have just enough children (module representations)
  // to store as many modules as required by the grid-stepper
  // configuration.

  Int_t n = fStepper->GetNx()*fStepper->GetNy();
  if (n != NumChildren())
  {
    DestroyElements();
    for (Int_t m=0; m<n; ++m)
    {
      AddElement(new AliEveITSScaledModule(m, fDigitsInfo, fScaleInfo));
    }
  }
}

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

void AliEveITSModuleStepper::SetFirst(Int_t first)
{
  // Se module ID which apply to first item in stepper.

  Int_t lastpage = fModuleIDs.size()/Nxy();
  if (fModuleIDs.size() % Nxy() ) lastpage++;

  Int_t firstLastpage = (lastpage - 1)*Nxy();
  if (first > firstLastpage) first = firstLastpage;
  if (first < 0) first = 0;
  fPosition = first;
  Apply();
}

void AliEveITSModuleStepper::Start()
{
  // Go to first page.

  fPosition = 0;
  Apply();
}

void AliEveITSModuleStepper::Next()
{
  // Go to next page.

  SetFirst(fPosition + Nxy());
}

void AliEveITSModuleStepper::Previous()
{
  // Go to previous page.

  SetFirst(fPosition - Nxy());
}

void AliEveITSModuleStepper::End()
{
  // Go to last page.

  Int_t lastpage = fModuleIDs.size()/Nxy();
  if (fModuleIDs.size() % Nxy()) lastpage++;
  fPosition = (lastpage - 1)*Nxy();

  fStepper->Reset();
  Apply();
}

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

void AliEveITSModuleStepper::DisplayDet(Int_t det, Int_t layer)
{
  // Select modules to display by sub-det type / layer.

  fSubDet = det;
  fModuleIDs.clear();
  AliEveITSModuleSelection sel = AliEveITSModuleSelection();
  sel.SetType (det);
  sel.SetLayer(layer);
  fDigitsInfo->GetModuleIDs(&sel, fModuleIDs);
  //in reder menu define a space between left and right pager
  Start();
}

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

Int_t AliEveITSModuleStepper::GetCurrentPage() const
{
  // Get number of current page.

  Int_t idx = fPosition + 1;
  Int_t n   = idx/Nxy();
  if (idx % Nxy()) n++;
  return n;
}

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

Int_t AliEveITSModuleStepper::GetPages()
{
  // Get number of all pages.

  Int_t n = fModuleIDs.size()/Nxy();
  if (fModuleIDs.size() % Nxy()) n++;
  return n;
}

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

void  AliEveITSModuleStepper::Apply()
{
  // Apply current settings to children modules.

  gEve->DisableRedraw();
  Capacity();

  UInt_t idx = fPosition;
  for(List_i childit=fChildren.begin(); childit!=fChildren.end(); ++childit)
  {
    if (idx < fModuleIDs.size())
    {
      AliEveITSScaledModule* mod = static_cast<AliEveITSScaledModule*>(*childit);
      mod->SetID(fModuleIDs[idx], kFALSE);
      TEveTrans& tr = mod->RefMainTrans();
      tr.UnitTrans();
      tr.RotateLF(3,2,TMath::PiOver2());
      tr.RotateLF(1,3,TMath::PiOver2());

      // scaling
      Float_t mz, mx;
      Float_t* fp = mod->GetFrame()->GetFramePoints();
      // switch x,z it will be rotated afterwards
      mx = -2*fp[0];
      mz = -2*fp[2];

      // fit width first
      Double_t sx = fStepper->GetDx();
      Double_t sy = (mx*fStepper->GetDx())/mz;
      if (sy > fStepper->GetDy())
      {
	sy =  fStepper->GetDy();
	sx =  (mz*fStepper->GetDx())/mx;
      }
      Float_t scale = (0.85*sx)/mz;
      tr.Scale(scale, scale, scale);

      Float_t  p[3];
      fStepper->GetPosition(p);
      tr.SetPos(p[0]+0.5*fStepper->GetDx(), p[1]+0.5*fStepper->GetDy(), p[2]+0.5*fStepper->GetDz());

      if (mod->GetSubDetID() == 2)
	mod->SetName(Form("SSD %d", idx));
      else if (mod->GetSubDetID() == 1)
	mod->SetName(Form("SDD %d", idx));
      else
	mod->SetName(Form("SPD %d", idx));
      mod->SetRnrSelf(kTRUE);

      fStepper->Step();
      idx++;
    }
    else {
      (*childit)->SetRnrSelf(kFALSE);
    }
  }

  fStepper->Reset();
  ElementChanged();
  gEve->EnableRedraw();
}


/******************************************************************************/
// Virtual event handlers from TGLOverlayElement
/******************************************************************************/

//______________________________________________________________________________
Bool_t AliEveITSModuleStepper::Handle(TGLRnrCtx          & /*rnrCtx*/,
                                      TGLOvlSelectRecord & rec,
                                      Event_t            * event)
{
  // Handle overlay event.
  // Return TRUE if event was handled.

  switch (event->fType)
  {
    case kMotionNotify:
    {
      Int_t item = rec.GetN() < 2 ? -1 : (Int_t)rec.GetItem(1);
      if (fActiveID != item) {
        fActiveID = item;
        return kTRUE;
      } else {
        return kFALSE;
      }
      break;
    }
    case kButtonPress:
    {
      if (event->fCode != kButton1) {
        return kFALSE;
      }
      switch (rec.GetItem(1))
      {
        case 1:
          Previous();
          break;
        case 2:
          Start();
          break;
        case 3:
          Next();
          break;
        case 4:
          End();
          break;
        case 5:
        {
          AliEveDigitScaleInfo* si = fScaleInfo;
          if (si->GetScale() < 5)
          {
            si->ScaleChanged(si->GetScale() + 1);
            ElementChanged(kTRUE, kTRUE);
          }
          break;
        }
        case 6:
        {
          AliEveDigitScaleInfo* si = fScaleInfo;
          if (si->GetScale() > 1)
          {
            si->ScaleChanged(si->GetScale() - 1);
            ElementChanged(kTRUE, kTRUE);
          }
          break;
        }
        case 7:
          gEve->GetEditor()->DisplayElement(*BeginChildren());
          break;

        case 8:
	  DisplayDet(0, -1);
          break;
        case 9:
	  DisplayDet(1, -1);
          break;
        case 10:
	  DisplayDet(2, -1);
          break;
        default:
          break;
      }
      return kTRUE;
      break;
    }
    default:
      break;
  } // end switch
  return kFALSE;
}

//______________________________________________________________________________
Bool_t AliEveITSModuleStepper::MouseEnter(TGLOvlSelectRecord& /*rec*/)
{
  // Mouse has entered overlay area.

  return kTRUE;
}

//______________________________________________________________________________
void AliEveITSModuleStepper::MouseLeave()
{
  // Mouse has left overlay area.

  fActiveID = -1;
}


/******************************************************************************/
// Protected sub-renderers
/******************************************************************************/

//______________________________________________________________________________
void AliEveITSModuleStepper::RenderText(const char* txt, Int_t id, const TGLFont &font, Float_t step)
{
  // Render text for button id.

  Float_t llx, lly, llz, urx, ury, urz;
  font.BBox(txt, llx, lly, llz, urx, ury, urz);
  (fActiveID == id && id > 0) ? TGLUtil::Color(fActiveCol) :TGLUtil::Color(fTextCol);

  if (step > 0)
  {
    // center text in the step interval
    glPushMatrix();
    if (step>urx)
    glTranslatef((step-urx+llx)*0.5f-llx, 0, 0);
    glLoadName(id);
    font.Render(txt);
    glPopMatrix();
    glTranslatef(step, 0, 0);
  }
  else 
  {
    glLoadName(id);
    glPushMatrix();
    font.Render(txt);
    glPopMatrix();
    glTranslatef(urx, 0, 0);
  }
}

//______________________________________________________________________________
void AliEveITSModuleStepper::RenderPalette(TEveRGBAPalette* p)
{
  // Render color palette with number axis.

  Float_t length = 7*fTextSize;
  Float_t x = 1.5*fTextSize;
  Float_t y = 0.2*fTextSize;

  glTranslatef(x, 0.8*fTextSize, 0);

  TGLCapabilitySwitch lights_off(GL_LIGHTING, kFALSE);

  glPushAttrib(GL_ENABLE_BIT | GL_POLYGON_BIT);
  glPolygonMode(GL_FRONT_AND_BACK, GL_FILL);
  glDisable(GL_CULL_FACE);
  glEnable(GL_BLEND);
  glBlendFunc(GL_ONE, GL_ONE_MINUS_SRC_ALPHA);

  glBegin(GL_QUAD_STRIP);
  TGLUtil::Color4ubv(p->ColorFromValue(p->GetMinVal()));
  glVertex2f(0, 0);
  glVertex2f(0, y);
  if (p->GetMaxVal() > p->GetMinVal() + 1)
  {
    Float_t xs = length/(p->GetMaxVal() - p->GetMinVal());
    Float_t x0 = xs;
    for(Int_t i=p->GetMinVal() + 1; i<p->GetMaxVal(); i++)
    {
      TGLUtil::Color4ubv(p->ColorFromValue(i));
      glVertex2f(x0, 0);
      glVertex2f(x0, y);
      x0+=xs;
    }
  }
  TGLUtil::Color4ubv(p->ColorFromValue(p->GetMaxVal()));
  glVertex2f(length, 0);
  glVertex2f(length, y);
  glEnd();

  glRotatef(-90, 1, 0, 0 );
  Double_t v1[3] = {0., 0., 0.};
  Double_t v2[3] = {length, 0, 0.};
  fAxis->SetTextColor(kGray+1);
  fAxis->SetLineColor(kGray+1);
  fAxis->PaintGLAxis(v1, v2, p->GetMinVal(), p->GetMaxVal(), 5);
  glPopAttrib();
}

//______________________________________________________________________________
void AliEveITSModuleStepper::RenderMenu(Int_t curP, Int_t maxP, Int_t scaleX, Int_t scaleZ)
{
  // Make UI to set page in stepper and UI to scale in the AliEveITSScaledModule.

  TGLUtil::Color(fTextCol);
  fTextFont.PreRender();
  glTranslatef(0, fTextSize*0.3, 0);
  {
    // pager
    glTranslatef(fTextSize*0.2, 0 , 0);
    RenderText("9", 2, fSymbolFont); // last page
    RenderText("3", 1, fSymbolFont);//last page
    RenderText(Form("%d/%d", curP, maxP),-1, fTextFont, 2.7*fTextSize); //status
    {
      // bugg in webdings font , bbox does not give realistic value
      Float_t llx, lly, llz, urx, ury, urz;
      fSymbolFont.BBox("4", llx, lly, llz, urx, ury, urz);
      glTranslatef(-llx, 0, 0);
    }
    RenderText("4", 3, fSymbolFont); // next page
    RenderText(":",4, fSymbolFont); // last page
  }
  {
    // scale
    glTranslatef(fTextSize,0, 0);
    RenderText(Form("Zoom:"), -1, fTextFont);
    RenderText("6", 6, fSymbolFont);
    RenderText("5", 5, fSymbolFont);
    RenderText(Form("%dx%d", scaleX, scaleZ), -1, fTextFont, 2*fTextSize);
  }
  {
    // detectors
    glTranslatef(fTextSize, 0, 0);
    RenderText("SPD ", 8, fTextFont);
    RenderText("SDD ", 9, fTextFont);
    RenderText("SSD ", 10, fTextFont);
    fTextFont.PostRender();
  }
}

//______________________________________________________________________________
void AliEveITSModuleStepper::RenderModuleIDs()
{
  // Render module-ids.

  Double_t x, y, z;
  UInt_t idx = fPosition;
  Float_t llx, lly, llz, urx, ury, urz;
  fModuleFont.PreRender();
  TGLUtil::Color(kWhite);
  for (List_i childit=fChildren.begin(); childit!=fChildren.end(); ++childit)
  {
    if (idx < fModuleIDs.size())
    {
      AliEveITSScaledModule* mod = static_cast<AliEveITSScaledModule*>(*childit);
      TEveTrans& tr = mod->RefMainTrans();
      tr.GetPos(x,y,z);
      x += fStepper->GetDx()*0.5;
      y -= fStepper->GetDy()*0.5;
      z += 0.4; // !!! MT hack - cross check with overlay rendering.
      const char* txt = Form("%d",mod->GetID());
      fModuleFont.BBox(txt, llx, lly, llz, urx, ury, urz);
      glRasterPos3f(x, y, z);
      glBitmap(0, 0, 0, 0,-urx, 0, 0);
      fModuleFont.Render(txt);
      idx++;
    }
  }
  fModuleFont.PostRender();
}

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

void AliEveITSModuleStepper::Render(TGLRnrCtx& rnrCtx)
{
  // Render the overlay elements.

  AliEveITSScaledModule* sm = static_cast<AliEveITSScaledModule*>(*BeginChildren());
  Int_t scaleIdx = fScaleInfo->GetScale() - 1;
  Int_t cnx = 0, cnz = 0;
  switch(sm->GetSubDetID())
  {
    case 0:
      cnx = fDigitsInfo->fSPDScaleX[scaleIdx];
      cnz = fDigitsInfo->fSPDScaleZ[scaleIdx];
      break;
    case 1:
      cnx = fDigitsInfo->fSDDScaleX[scaleIdx];
      cnz = fDigitsInfo->fSDDScaleZ[scaleIdx];
      break;
    case 2:
      cnx = fDigitsInfo->fSSDScale[scaleIdx];
      cnz = 1;
      break;
  }

  // init fonts
  if (fTextFont.GetMode() == TGLFont::kUndef)
  {
#if ROOT_VERSION_CODE >= 332547
    rnrCtx.RegisterFont(fTextSize, 4, TGLFont::kTexture, fTextFont);
    rnrCtx.RegisterFont(72,       31, TGLFont::kTexture, fSymbolFont);
    rnrCtx.RegisterFont(14,        4, TGLFont::kPixmap,  fModuleFont);
#else
    fTextFont = rnrCtx.GetFont(fTextSize, 4, TGLFont::kTexture);
    fSymbolFont =  rnrCtx.GetFont(72, 31, TGLFont::kTexture);
    fModuleFont =  rnrCtx.GetFont(14, 4, TGLFont::kPixmap);
#endif
  }

  {
    // toolbar
    glMatrixMode(GL_PROJECTION);
    glPushMatrix();
    glLoadIdentity();
    if (rnrCtx.Selection())
    {
      TGLRect rect(*rnrCtx.GetPickRectangle());
      rnrCtx.GetCamera()->WindowToViewport(rect);
      gluPickMatrix(rect.X(), rect.Y(), rect.Width(), rect.Height(),
		    (Int_t*) rnrCtx.GetCamera()->RefViewport().CArr());
    }
    glMatrixMode(GL_MODELVIEW);
    glPushMatrix();
    glLoadIdentity();
    glTranslatef(-1, -1, 0); // translate to lower left corner
    Float_t txtScale = fMenuHeight/fTextSize*0.5; // scale text
    glScalef(txtScale, txtScale, 1.);

    //menu
    glPushName(0);
    RenderMenu(GetCurrentPage(), GetPages(), cnx, cnz);
    glPopName();
    //palette
    Double_t labelSize = 1.6*txtScale*fTextSize;
    fAxis->SetLabelsSize(labelSize);
    fAxis->SetLabelsOffset(1.2*labelSize);
    RenderPalette(sm->GetPalette());

    glPopMatrix();
    glMatrixMode(GL_PROJECTION);
    glPopMatrix();
    glMatrixMode(GL_MODELVIEW);
  }
  RenderModuleIDs();
}
 AliEveITSModuleStepper.cxx:1
 AliEveITSModuleStepper.cxx:2
 AliEveITSModuleStepper.cxx:3
 AliEveITSModuleStepper.cxx:4
 AliEveITSModuleStepper.cxx:5
 AliEveITSModuleStepper.cxx:6
 AliEveITSModuleStepper.cxx:7
 AliEveITSModuleStepper.cxx:8
 AliEveITSModuleStepper.cxx:9
 AliEveITSModuleStepper.cxx:10
 AliEveITSModuleStepper.cxx:11
 AliEveITSModuleStepper.cxx:12
 AliEveITSModuleStepper.cxx:13
 AliEveITSModuleStepper.cxx:14
 AliEveITSModuleStepper.cxx:15
 AliEveITSModuleStepper.cxx:16
 AliEveITSModuleStepper.cxx:17
 AliEveITSModuleStepper.cxx:18
 AliEveITSModuleStepper.cxx:19
 AliEveITSModuleStepper.cxx:20
 AliEveITSModuleStepper.cxx:21
 AliEveITSModuleStepper.cxx:22
 AliEveITSModuleStepper.cxx:23
 AliEveITSModuleStepper.cxx:24
 AliEveITSModuleStepper.cxx:25
 AliEveITSModuleStepper.cxx:26
 AliEveITSModuleStepper.cxx:27
 AliEveITSModuleStepper.cxx:28
 AliEveITSModuleStepper.cxx:29
 AliEveITSModuleStepper.cxx:30
 AliEveITSModuleStepper.cxx:31
 AliEveITSModuleStepper.cxx:32
 AliEveITSModuleStepper.cxx:33
 AliEveITSModuleStepper.cxx:34
 AliEveITSModuleStepper.cxx:35
 AliEveITSModuleStepper.cxx:36
 AliEveITSModuleStepper.cxx:37
 AliEveITSModuleStepper.cxx:38
 AliEveITSModuleStepper.cxx:39
 AliEveITSModuleStepper.cxx:40
 AliEveITSModuleStepper.cxx:41
 AliEveITSModuleStepper.cxx:42
 AliEveITSModuleStepper.cxx:43
 AliEveITSModuleStepper.cxx:44
 AliEveITSModuleStepper.cxx:45
 AliEveITSModuleStepper.cxx:46
 AliEveITSModuleStepper.cxx:47
 AliEveITSModuleStepper.cxx:48
 AliEveITSModuleStepper.cxx:49
 AliEveITSModuleStepper.cxx:50
 AliEveITSModuleStepper.cxx:51
 AliEveITSModuleStepper.cxx:52
 AliEveITSModuleStepper.cxx:53
 AliEveITSModuleStepper.cxx:54
 AliEveITSModuleStepper.cxx:55
 AliEveITSModuleStepper.cxx:56
 AliEveITSModuleStepper.cxx:57
 AliEveITSModuleStepper.cxx:58
 AliEveITSModuleStepper.cxx:59
 AliEveITSModuleStepper.cxx:60
 AliEveITSModuleStepper.cxx:61
 AliEveITSModuleStepper.cxx:62
 AliEveITSModuleStepper.cxx:63
 AliEveITSModuleStepper.cxx:64
 AliEveITSModuleStepper.cxx:65
 AliEveITSModuleStepper.cxx:66
 AliEveITSModuleStepper.cxx:67
 AliEveITSModuleStepper.cxx:68
 AliEveITSModuleStepper.cxx:69
 AliEveITSModuleStepper.cxx:70
 AliEveITSModuleStepper.cxx:71
 AliEveITSModuleStepper.cxx:72
 AliEveITSModuleStepper.cxx:73
 AliEveITSModuleStepper.cxx:74
 AliEveITSModuleStepper.cxx:75
 AliEveITSModuleStepper.cxx:76
 AliEveITSModuleStepper.cxx:77
 AliEveITSModuleStepper.cxx:78
 AliEveITSModuleStepper.cxx:79
 AliEveITSModuleStepper.cxx:80
 AliEveITSModuleStepper.cxx:81
 AliEveITSModuleStepper.cxx:82
 AliEveITSModuleStepper.cxx:83
 AliEveITSModuleStepper.cxx:84
 AliEveITSModuleStepper.cxx:85
 AliEveITSModuleStepper.cxx:86
 AliEveITSModuleStepper.cxx:87
 AliEveITSModuleStepper.cxx:88
 AliEveITSModuleStepper.cxx:89
 AliEveITSModuleStepper.cxx:90
 AliEveITSModuleStepper.cxx:91
 AliEveITSModuleStepper.cxx:92
 AliEveITSModuleStepper.cxx:93
 AliEveITSModuleStepper.cxx:94
 AliEveITSModuleStepper.cxx:95
 AliEveITSModuleStepper.cxx:96
 AliEveITSModuleStepper.cxx:97
 AliEveITSModuleStepper.cxx:98
 AliEveITSModuleStepper.cxx:99
 AliEveITSModuleStepper.cxx:100
 AliEveITSModuleStepper.cxx:101
 AliEveITSModuleStepper.cxx:102
 AliEveITSModuleStepper.cxx:103
 AliEveITSModuleStepper.cxx:104
 AliEveITSModuleStepper.cxx:105
 AliEveITSModuleStepper.cxx:106
 AliEveITSModuleStepper.cxx:107
 AliEveITSModuleStepper.cxx:108
 AliEveITSModuleStepper.cxx:109
 AliEveITSModuleStepper.cxx:110
 AliEveITSModuleStepper.cxx:111
 AliEveITSModuleStepper.cxx:112
 AliEveITSModuleStepper.cxx:113
 AliEveITSModuleStepper.cxx:114
 AliEveITSModuleStepper.cxx:115
 AliEveITSModuleStepper.cxx:116
 AliEveITSModuleStepper.cxx:117
 AliEveITSModuleStepper.cxx:118
 AliEveITSModuleStepper.cxx:119
 AliEveITSModuleStepper.cxx:120
 AliEveITSModuleStepper.cxx:121
 AliEveITSModuleStepper.cxx:122
 AliEveITSModuleStepper.cxx:123
 AliEveITSModuleStepper.cxx:124
 AliEveITSModuleStepper.cxx:125
 AliEveITSModuleStepper.cxx:126
 AliEveITSModuleStepper.cxx:127
 AliEveITSModuleStepper.cxx:128
 AliEveITSModuleStepper.cxx:129
 AliEveITSModuleStepper.cxx:130
 AliEveITSModuleStepper.cxx:131
 AliEveITSModuleStepper.cxx:132
 AliEveITSModuleStepper.cxx:133
 AliEveITSModuleStepper.cxx:134
 AliEveITSModuleStepper.cxx:135
 AliEveITSModuleStepper.cxx:136
 AliEveITSModuleStepper.cxx:137
 AliEveITSModuleStepper.cxx:138
 AliEveITSModuleStepper.cxx:139
 AliEveITSModuleStepper.cxx:140
 AliEveITSModuleStepper.cxx:141
 AliEveITSModuleStepper.cxx:142
 AliEveITSModuleStepper.cxx:143
 AliEveITSModuleStepper.cxx:144
 AliEveITSModuleStepper.cxx:145
 AliEveITSModuleStepper.cxx:146
 AliEveITSModuleStepper.cxx:147
 AliEveITSModuleStepper.cxx:148
 AliEveITSModuleStepper.cxx:149
 AliEveITSModuleStepper.cxx:150
 AliEveITSModuleStepper.cxx:151
 AliEveITSModuleStepper.cxx:152
 AliEveITSModuleStepper.cxx:153
 AliEveITSModuleStepper.cxx:154
 AliEveITSModuleStepper.cxx:155
 AliEveITSModuleStepper.cxx:156
 AliEveITSModuleStepper.cxx:157
 AliEveITSModuleStepper.cxx:158
 AliEveITSModuleStepper.cxx:159
 AliEveITSModuleStepper.cxx:160
 AliEveITSModuleStepper.cxx:161
 AliEveITSModuleStepper.cxx:162
 AliEveITSModuleStepper.cxx:163
 AliEveITSModuleStepper.cxx:164
 AliEveITSModuleStepper.cxx:165
 AliEveITSModuleStepper.cxx:166
 AliEveITSModuleStepper.cxx:167
 AliEveITSModuleStepper.cxx:168
 AliEveITSModuleStepper.cxx:169
 AliEveITSModuleStepper.cxx:170
 AliEveITSModuleStepper.cxx:171
 AliEveITSModuleStepper.cxx:172
 AliEveITSModuleStepper.cxx:173
 AliEveITSModuleStepper.cxx:174
 AliEveITSModuleStepper.cxx:175
 AliEveITSModuleStepper.cxx:176
 AliEveITSModuleStepper.cxx:177
 AliEveITSModuleStepper.cxx:178
 AliEveITSModuleStepper.cxx:179
 AliEveITSModuleStepper.cxx:180
 AliEveITSModuleStepper.cxx:181
 AliEveITSModuleStepper.cxx:182
 AliEveITSModuleStepper.cxx:183
 AliEveITSModuleStepper.cxx:184
 AliEveITSModuleStepper.cxx:185
 AliEveITSModuleStepper.cxx:186
 AliEveITSModuleStepper.cxx:187
 AliEveITSModuleStepper.cxx:188
 AliEveITSModuleStepper.cxx:189
 AliEveITSModuleStepper.cxx:190
 AliEveITSModuleStepper.cxx:191
 AliEveITSModuleStepper.cxx:192
 AliEveITSModuleStepper.cxx:193
 AliEveITSModuleStepper.cxx:194
 AliEveITSModuleStepper.cxx:195
 AliEveITSModuleStepper.cxx:196
 AliEveITSModuleStepper.cxx:197
 AliEveITSModuleStepper.cxx:198
 AliEveITSModuleStepper.cxx:199
 AliEveITSModuleStepper.cxx:200
 AliEveITSModuleStepper.cxx:201
 AliEveITSModuleStepper.cxx:202
 AliEveITSModuleStepper.cxx:203
 AliEveITSModuleStepper.cxx:204
 AliEveITSModuleStepper.cxx:205
 AliEveITSModuleStepper.cxx:206
 AliEveITSModuleStepper.cxx:207
 AliEveITSModuleStepper.cxx:208
 AliEveITSModuleStepper.cxx:209
 AliEveITSModuleStepper.cxx:210
 AliEveITSModuleStepper.cxx:211
 AliEveITSModuleStepper.cxx:212
 AliEveITSModuleStepper.cxx:213
 AliEveITSModuleStepper.cxx:214
 AliEveITSModuleStepper.cxx:215
 AliEveITSModuleStepper.cxx:216
 AliEveITSModuleStepper.cxx:217
 AliEveITSModuleStepper.cxx:218
 AliEveITSModuleStepper.cxx:219
 AliEveITSModuleStepper.cxx:220
 AliEveITSModuleStepper.cxx:221
 AliEveITSModuleStepper.cxx:222
 AliEveITSModuleStepper.cxx:223
 AliEveITSModuleStepper.cxx:224
 AliEveITSModuleStepper.cxx:225
 AliEveITSModuleStepper.cxx:226
 AliEveITSModuleStepper.cxx:227
 AliEveITSModuleStepper.cxx:228
 AliEveITSModuleStepper.cxx:229
 AliEveITSModuleStepper.cxx:230
 AliEveITSModuleStepper.cxx:231
 AliEveITSModuleStepper.cxx:232
 AliEveITSModuleStepper.cxx:233
 AliEveITSModuleStepper.cxx:234
 AliEveITSModuleStepper.cxx:235
 AliEveITSModuleStepper.cxx:236
 AliEveITSModuleStepper.cxx:237
 AliEveITSModuleStepper.cxx:238
 AliEveITSModuleStepper.cxx:239
 AliEveITSModuleStepper.cxx:240
 AliEveITSModuleStepper.cxx:241
 AliEveITSModuleStepper.cxx:242
 AliEveITSModuleStepper.cxx:243
 AliEveITSModuleStepper.cxx:244
 AliEveITSModuleStepper.cxx:245
 AliEveITSModuleStepper.cxx:246
 AliEveITSModuleStepper.cxx:247
 AliEveITSModuleStepper.cxx:248
 AliEveITSModuleStepper.cxx:249
 AliEveITSModuleStepper.cxx:250
 AliEveITSModuleStepper.cxx:251
 AliEveITSModuleStepper.cxx:252
 AliEveITSModuleStepper.cxx:253
 AliEveITSModuleStepper.cxx:254
 AliEveITSModuleStepper.cxx:255
 AliEveITSModuleStepper.cxx:256
 AliEveITSModuleStepper.cxx:257
 AliEveITSModuleStepper.cxx:258
 AliEveITSModuleStepper.cxx:259
 AliEveITSModuleStepper.cxx:260
 AliEveITSModuleStepper.cxx:261
 AliEveITSModuleStepper.cxx:262
 AliEveITSModuleStepper.cxx:263
 AliEveITSModuleStepper.cxx:264
 AliEveITSModuleStepper.cxx:265
 AliEveITSModuleStepper.cxx:266
 AliEveITSModuleStepper.cxx:267
 AliEveITSModuleStepper.cxx:268
 AliEveITSModuleStepper.cxx:269
 AliEveITSModuleStepper.cxx:270
 AliEveITSModuleStepper.cxx:271
 AliEveITSModuleStepper.cxx:272
 AliEveITSModuleStepper.cxx:273
 AliEveITSModuleStepper.cxx:274
 AliEveITSModuleStepper.cxx:275
 AliEveITSModuleStepper.cxx:276
 AliEveITSModuleStepper.cxx:277
 AliEveITSModuleStepper.cxx:278
 AliEveITSModuleStepper.cxx:279
 AliEveITSModuleStepper.cxx:280
 AliEveITSModuleStepper.cxx:281
 AliEveITSModuleStepper.cxx:282
 AliEveITSModuleStepper.cxx:283
 AliEveITSModuleStepper.cxx:284
 AliEveITSModuleStepper.cxx:285
 AliEveITSModuleStepper.cxx:286
 AliEveITSModuleStepper.cxx:287
 AliEveITSModuleStepper.cxx:288
 AliEveITSModuleStepper.cxx:289
 AliEveITSModuleStepper.cxx:290
 AliEveITSModuleStepper.cxx:291
 AliEveITSModuleStepper.cxx:292
 AliEveITSModuleStepper.cxx:293
 AliEveITSModuleStepper.cxx:294
 AliEveITSModuleStepper.cxx:295
 AliEveITSModuleStepper.cxx:296
 AliEveITSModuleStepper.cxx:297
 AliEveITSModuleStepper.cxx:298
 AliEveITSModuleStepper.cxx:299
 AliEveITSModuleStepper.cxx:300
 AliEveITSModuleStepper.cxx:301
 AliEveITSModuleStepper.cxx:302
 AliEveITSModuleStepper.cxx:303
 AliEveITSModuleStepper.cxx:304
 AliEveITSModuleStepper.cxx:305
 AliEveITSModuleStepper.cxx:306
 AliEveITSModuleStepper.cxx:307
 AliEveITSModuleStepper.cxx:308
 AliEveITSModuleStepper.cxx:309
 AliEveITSModuleStepper.cxx:310
 AliEveITSModuleStepper.cxx:311
 AliEveITSModuleStepper.cxx:312
 AliEveITSModuleStepper.cxx:313
 AliEveITSModuleStepper.cxx:314
 AliEveITSModuleStepper.cxx:315
 AliEveITSModuleStepper.cxx:316
 AliEveITSModuleStepper.cxx:317
 AliEveITSModuleStepper.cxx:318
 AliEveITSModuleStepper.cxx:319
 AliEveITSModuleStepper.cxx:320
 AliEveITSModuleStepper.cxx:321
 AliEveITSModuleStepper.cxx:322
 AliEveITSModuleStepper.cxx:323
 AliEveITSModuleStepper.cxx:324
 AliEveITSModuleStepper.cxx:325
 AliEveITSModuleStepper.cxx:326
 AliEveITSModuleStepper.cxx:327
 AliEveITSModuleStepper.cxx:328
 AliEveITSModuleStepper.cxx:329
 AliEveITSModuleStepper.cxx:330
 AliEveITSModuleStepper.cxx:331
 AliEveITSModuleStepper.cxx:332
 AliEveITSModuleStepper.cxx:333
 AliEveITSModuleStepper.cxx:334
 AliEveITSModuleStepper.cxx:335
 AliEveITSModuleStepper.cxx:336
 AliEveITSModuleStepper.cxx:337
 AliEveITSModuleStepper.cxx:338
 AliEveITSModuleStepper.cxx:339
 AliEveITSModuleStepper.cxx:340
 AliEveITSModuleStepper.cxx:341
 AliEveITSModuleStepper.cxx:342
 AliEveITSModuleStepper.cxx:343
 AliEveITSModuleStepper.cxx:344
 AliEveITSModuleStepper.cxx:345
 AliEveITSModuleStepper.cxx:346
 AliEveITSModuleStepper.cxx:347
 AliEveITSModuleStepper.cxx:348
 AliEveITSModuleStepper.cxx:349
 AliEveITSModuleStepper.cxx:350
 AliEveITSModuleStepper.cxx:351
 AliEveITSModuleStepper.cxx:352
 AliEveITSModuleStepper.cxx:353
 AliEveITSModuleStepper.cxx:354
 AliEveITSModuleStepper.cxx:355
 AliEveITSModuleStepper.cxx:356
 AliEveITSModuleStepper.cxx:357
 AliEveITSModuleStepper.cxx:358
 AliEveITSModuleStepper.cxx:359
 AliEveITSModuleStepper.cxx:360
 AliEveITSModuleStepper.cxx:361
 AliEveITSModuleStepper.cxx:362
 AliEveITSModuleStepper.cxx:363
 AliEveITSModuleStepper.cxx:364
 AliEveITSModuleStepper.cxx:365
 AliEveITSModuleStepper.cxx:366
 AliEveITSModuleStepper.cxx:367
 AliEveITSModuleStepper.cxx:368
 AliEveITSModuleStepper.cxx:369
 AliEveITSModuleStepper.cxx:370
 AliEveITSModuleStepper.cxx:371
 AliEveITSModuleStepper.cxx:372
 AliEveITSModuleStepper.cxx:373
 AliEveITSModuleStepper.cxx:374
 AliEveITSModuleStepper.cxx:375
 AliEveITSModuleStepper.cxx:376
 AliEveITSModuleStepper.cxx:377
 AliEveITSModuleStepper.cxx:378
 AliEveITSModuleStepper.cxx:379
 AliEveITSModuleStepper.cxx:380
 AliEveITSModuleStepper.cxx:381
 AliEveITSModuleStepper.cxx:382
 AliEveITSModuleStepper.cxx:383
 AliEveITSModuleStepper.cxx:384
 AliEveITSModuleStepper.cxx:385
 AliEveITSModuleStepper.cxx:386
 AliEveITSModuleStepper.cxx:387
 AliEveITSModuleStepper.cxx:388
 AliEveITSModuleStepper.cxx:389
 AliEveITSModuleStepper.cxx:390
 AliEveITSModuleStepper.cxx:391
 AliEveITSModuleStepper.cxx:392
 AliEveITSModuleStepper.cxx:393
 AliEveITSModuleStepper.cxx:394
 AliEveITSModuleStepper.cxx:395
 AliEveITSModuleStepper.cxx:396
 AliEveITSModuleStepper.cxx:397
 AliEveITSModuleStepper.cxx:398
 AliEveITSModuleStepper.cxx:399
 AliEveITSModuleStepper.cxx:400
 AliEveITSModuleStepper.cxx:401
 AliEveITSModuleStepper.cxx:402
 AliEveITSModuleStepper.cxx:403
 AliEveITSModuleStepper.cxx:404
 AliEveITSModuleStepper.cxx:405
 AliEveITSModuleStepper.cxx:406
 AliEveITSModuleStepper.cxx:407
 AliEveITSModuleStepper.cxx:408
 AliEveITSModuleStepper.cxx:409
 AliEveITSModuleStepper.cxx:410
 AliEveITSModuleStepper.cxx:411
 AliEveITSModuleStepper.cxx:412
 AliEveITSModuleStepper.cxx:413
 AliEveITSModuleStepper.cxx:414
 AliEveITSModuleStepper.cxx:415
 AliEveITSModuleStepper.cxx:416
 AliEveITSModuleStepper.cxx:417
 AliEveITSModuleStepper.cxx:418
 AliEveITSModuleStepper.cxx:419
 AliEveITSModuleStepper.cxx:420
 AliEveITSModuleStepper.cxx:421
 AliEveITSModuleStepper.cxx:422
 AliEveITSModuleStepper.cxx:423
 AliEveITSModuleStepper.cxx:424
 AliEveITSModuleStepper.cxx:425
 AliEveITSModuleStepper.cxx:426
 AliEveITSModuleStepper.cxx:427
 AliEveITSModuleStepper.cxx:428
 AliEveITSModuleStepper.cxx:429
 AliEveITSModuleStepper.cxx:430
 AliEveITSModuleStepper.cxx:431
 AliEveITSModuleStepper.cxx:432
 AliEveITSModuleStepper.cxx:433
 AliEveITSModuleStepper.cxx:434
 AliEveITSModuleStepper.cxx:435
 AliEveITSModuleStepper.cxx:436
 AliEveITSModuleStepper.cxx:437
 AliEveITSModuleStepper.cxx:438
 AliEveITSModuleStepper.cxx:439
 AliEveITSModuleStepper.cxx:440
 AliEveITSModuleStepper.cxx:441
 AliEveITSModuleStepper.cxx:442
 AliEveITSModuleStepper.cxx:443
 AliEveITSModuleStepper.cxx:444
 AliEveITSModuleStepper.cxx:445
 AliEveITSModuleStepper.cxx:446
 AliEveITSModuleStepper.cxx:447
 AliEveITSModuleStepper.cxx:448
 AliEveITSModuleStepper.cxx:449
 AliEveITSModuleStepper.cxx:450
 AliEveITSModuleStepper.cxx:451
 AliEveITSModuleStepper.cxx:452
 AliEveITSModuleStepper.cxx:453
 AliEveITSModuleStepper.cxx:454
 AliEveITSModuleStepper.cxx:455
 AliEveITSModuleStepper.cxx:456
 AliEveITSModuleStepper.cxx:457
 AliEveITSModuleStepper.cxx:458
 AliEveITSModuleStepper.cxx:459
 AliEveITSModuleStepper.cxx:460
 AliEveITSModuleStepper.cxx:461
 AliEveITSModuleStepper.cxx:462
 AliEveITSModuleStepper.cxx:463
 AliEveITSModuleStepper.cxx:464
 AliEveITSModuleStepper.cxx:465
 AliEveITSModuleStepper.cxx:466
 AliEveITSModuleStepper.cxx:467
 AliEveITSModuleStepper.cxx:468
 AliEveITSModuleStepper.cxx:469
 AliEveITSModuleStepper.cxx:470
 AliEveITSModuleStepper.cxx:471
 AliEveITSModuleStepper.cxx:472
 AliEveITSModuleStepper.cxx:473
 AliEveITSModuleStepper.cxx:474
 AliEveITSModuleStepper.cxx:475
 AliEveITSModuleStepper.cxx:476
 AliEveITSModuleStepper.cxx:477
 AliEveITSModuleStepper.cxx:478
 AliEveITSModuleStepper.cxx:479
 AliEveITSModuleStepper.cxx:480
 AliEveITSModuleStepper.cxx:481
 AliEveITSModuleStepper.cxx:482
 AliEveITSModuleStepper.cxx:483
 AliEveITSModuleStepper.cxx:484
 AliEveITSModuleStepper.cxx:485
 AliEveITSModuleStepper.cxx:486
 AliEveITSModuleStepper.cxx:487
 AliEveITSModuleStepper.cxx:488
 AliEveITSModuleStepper.cxx:489
 AliEveITSModuleStepper.cxx:490
 AliEveITSModuleStepper.cxx:491
 AliEveITSModuleStepper.cxx:492
 AliEveITSModuleStepper.cxx:493
 AliEveITSModuleStepper.cxx:494
 AliEveITSModuleStepper.cxx:495
 AliEveITSModuleStepper.cxx:496
 AliEveITSModuleStepper.cxx:497
 AliEveITSModuleStepper.cxx:498
 AliEveITSModuleStepper.cxx:499
 AliEveITSModuleStepper.cxx:500
 AliEveITSModuleStepper.cxx:501
 AliEveITSModuleStepper.cxx:502
 AliEveITSModuleStepper.cxx:503
 AliEveITSModuleStepper.cxx:504
 AliEveITSModuleStepper.cxx:505
 AliEveITSModuleStepper.cxx:506
 AliEveITSModuleStepper.cxx:507
 AliEveITSModuleStepper.cxx:508
 AliEveITSModuleStepper.cxx:509
 AliEveITSModuleStepper.cxx:510
 AliEveITSModuleStepper.cxx:511
 AliEveITSModuleStepper.cxx:512
 AliEveITSModuleStepper.cxx:513
 AliEveITSModuleStepper.cxx:514
 AliEveITSModuleStepper.cxx:515
 AliEveITSModuleStepper.cxx:516
 AliEveITSModuleStepper.cxx:517
 AliEveITSModuleStepper.cxx:518
 AliEveITSModuleStepper.cxx:519
 AliEveITSModuleStepper.cxx:520
 AliEveITSModuleStepper.cxx:521
 AliEveITSModuleStepper.cxx:522
 AliEveITSModuleStepper.cxx:523
 AliEveITSModuleStepper.cxx:524
 AliEveITSModuleStepper.cxx:525
 AliEveITSModuleStepper.cxx:526
 AliEveITSModuleStepper.cxx:527
 AliEveITSModuleStepper.cxx:528
 AliEveITSModuleStepper.cxx:529
 AliEveITSModuleStepper.cxx:530
 AliEveITSModuleStepper.cxx:531
 AliEveITSModuleStepper.cxx:532
 AliEveITSModuleStepper.cxx:533
 AliEveITSModuleStepper.cxx:534
 AliEveITSModuleStepper.cxx:535
 AliEveITSModuleStepper.cxx:536
 AliEveITSModuleStepper.cxx:537
 AliEveITSModuleStepper.cxx:538
 AliEveITSModuleStepper.cxx:539
 AliEveITSModuleStepper.cxx:540
 AliEveITSModuleStepper.cxx:541
 AliEveITSModuleStepper.cxx:542
 AliEveITSModuleStepper.cxx:543
 AliEveITSModuleStepper.cxx:544
 AliEveITSModuleStepper.cxx:545
 AliEveITSModuleStepper.cxx:546
 AliEveITSModuleStepper.cxx:547
 AliEveITSModuleStepper.cxx:548
 AliEveITSModuleStepper.cxx:549
 AliEveITSModuleStepper.cxx:550
 AliEveITSModuleStepper.cxx:551
 AliEveITSModuleStepper.cxx:552
 AliEveITSModuleStepper.cxx:553
 AliEveITSModuleStepper.cxx:554
 AliEveITSModuleStepper.cxx:555
 AliEveITSModuleStepper.cxx:556
 AliEveITSModuleStepper.cxx:557
 AliEveITSModuleStepper.cxx:558
 AliEveITSModuleStepper.cxx:559
 AliEveITSModuleStepper.cxx:560
 AliEveITSModuleStepper.cxx:561
 AliEveITSModuleStepper.cxx:562
 AliEveITSModuleStepper.cxx:563
 AliEveITSModuleStepper.cxx:564
 AliEveITSModuleStepper.cxx:565
 AliEveITSModuleStepper.cxx:566
 AliEveITSModuleStepper.cxx:567
 AliEveITSModuleStepper.cxx:568
 AliEveITSModuleStepper.cxx:569
 AliEveITSModuleStepper.cxx:570
 AliEveITSModuleStepper.cxx:571
 AliEveITSModuleStepper.cxx:572
 AliEveITSModuleStepper.cxx:573
 AliEveITSModuleStepper.cxx:574
 AliEveITSModuleStepper.cxx:575
 AliEveITSModuleStepper.cxx:576
 AliEveITSModuleStepper.cxx:577
 AliEveITSModuleStepper.cxx:578
 AliEveITSModuleStepper.cxx:579
 AliEveITSModuleStepper.cxx:580
 AliEveITSModuleStepper.cxx:581
 AliEveITSModuleStepper.cxx:582
 AliEveITSModuleStepper.cxx:583
 AliEveITSModuleStepper.cxx:584
 AliEveITSModuleStepper.cxx:585
 AliEveITSModuleStepper.cxx:586
 AliEveITSModuleStepper.cxx:587
 AliEveITSModuleStepper.cxx:588
 AliEveITSModuleStepper.cxx:589
 AliEveITSModuleStepper.cxx:590
 AliEveITSModuleStepper.cxx:591
 AliEveITSModuleStepper.cxx:592
 AliEveITSModuleStepper.cxx:593
 AliEveITSModuleStepper.cxx:594
 AliEveITSModuleStepper.cxx:595
 AliEveITSModuleStepper.cxx:596
 AliEveITSModuleStepper.cxx:597
 AliEveITSModuleStepper.cxx:598
 AliEveITSModuleStepper.cxx:599
 AliEveITSModuleStepper.cxx:600
 AliEveITSModuleStepper.cxx:601
 AliEveITSModuleStepper.cxx:602