ROOT logo
// $Id$
// Author: Stefano Carrazza 2010, CERN, stefano.carrazza@cern.ch

/**************************************************************************
 * Copyright(c) 1998-2009, ALICE Experiment at CERN, all rights reserved. *
 * See http://aliceinfo.cern.ch/Offline/AliRoot/License.html for          *
 * full copyright notice.                                                 *
 **************************************************************************/

#include "AliEveBeamsInfo.h"
#include "AliPhysicsSelection.h"
#include "AliESDEvent.h"
#include "AliEveEventManager.h"
#include "AliEveEventSelector.h"
#include "AliEveMultiView.h"
#include "AliRawEventHeaderBase.h"

#include "TEveWindow.h"
#include "TEveManager.h"
#include "TEveBrowser.h"
#include "TEveViewer.h"
#include "TEveScene.h"
#include "TGLOverlayButton.h"
#include "TTimeStamp.h"


//______________________________________________________________________________
// This class provides:
//
// 1) Run and event information from ESD as TGLOverlayButtons.
//
// 2) Determine for real and MC data if the event is collision candidate or not.
//
// 3) Possibility to filter events per type.
//

ClassImp(AliEveBeamsInfo)

//______________________________________________________________________________
AliEveBeamsInfo::AliEveBeamsInfo(const char* name) :
  TEveElementList(name),
  fAlpha(1.5),
  fIsMC(kFALSE),
  fEsd(0),
  fShowEventsInfo(kTRUE),
  fPhysicsSelection(0),
  fEventNumber(0),
  fCollisionCandidate(0),
  fCollisionBoolean(0),
  fBeam1(0),
  fBeam1Boolean(0),
  fBeam2(0),
  fBeam2Boolean(0),
  fRunNumber(0),
  fEventType(0),
  fEventTypeLabel(0),
  fPeriod(0),
  fOrbit(0),
  fBC(0),
  fTimeStamp(0),
  fMagnetField(0),
  fTrigger(0),
  fTriggerClassesPanel(0),
  fNumberOfActiveTriggerClasses(0),
  fTriggerClasses(0),
  fAl(0),
  fHisto2dv(0),
  fEventSelector(0)
{
  // Constructor.
  gEve->AddToListTree(this,0);

  // Get current ESD event
  fEsd = AliEveEventManager::AssertESD();
  fAl = AliEveMultiView::Instance();  
  fEventSelector = AliEveEventManager::GetMaster()->GetEventSelector();

  // AliPhysicsSelection
  fPhysicsSelection = new AliPhysicsSelection();
  fPhysicsSelection->SetAnalyzeMC(kFALSE);
  fPhysicsSelection->Initialize(fEsd);

  // Loading physics selection and triggers buttons
  CreateEventPanel();
  CreateRunPanel();

  // Show beams info
  ShowBeamsInfo(fShowEventsInfo, kFALSE);

}

//______________________________________________________________________________
AliEveBeamsInfo::~AliEveBeamsInfo()
{
  // Deleting variables
  RemoveTriggerClasses();
  delete fEsd;
  delete fPhysicsSelection;
  delete fEventNumber;
  delete fCollisionCandidate;
  delete fCollisionBoolean;
  delete fBeam1;
  delete fBeam1Boolean;
  delete fBeam2;
  delete fBeam2Boolean;
  delete fRunNumber;
  delete fPeriod;
  delete fOrbit;
  delete fBC;
  delete fTimeStamp;
  delete fMagnetField;
  delete fTrigger;
  delete fTriggerClassesPanel;  
  delete fEventType;
  delete fEventTypeLabel;
  delete fAl;
  delete fHisto2dv;
}

//______________________________________________________________________________
void AliEveBeamsInfo::CreateEventPanel()
{
  // Create vertical panel
  Double_t fPosx = 10.0;
  Double_t fPosy = -10.0;
  Double_t fXlengh = 220.0;
  Double_t fStep = 20.0; 

  fEventNumber = new TGLOverlayButton(0 , "", fPosx, fPosy, fXlengh, fStep);
  fPosy-=fStep;

  fCollisionCandidate = new TGLOverlayButton(0, "Collision:", fPosx, fPosy, fXlengh-fXlengh/2.0, fStep);
  fCollisionBoolean = new TGLOverlayButton(0, "", fPosx+fXlengh/2.0, fPosy, fXlengh/2.0, fStep);
  fPosy-=fStep;

  fBeam1 = new TGLOverlayButton(0, "Beam 1:", fPosx, fPosy, fXlengh-fXlengh/2.0, fStep);
  fBeam1Boolean = new TGLOverlayButton(0, "", fPosx+fXlengh/2.0, fPosy, fXlengh/2.0, fStep);
  fPosy-=fStep;

  fBeam2 = new TGLOverlayButton(0, "Beam 2:", fPosx, fPosy, fXlengh-fXlengh/2.0, fStep);
  fBeam2Boolean = new TGLOverlayButton(0, "", fPosx+fXlengh/2.0, fPosy, fXlengh/2.0, fStep);

  fPosy-=2*fStep;
  fTriggerClassesPanel = new TGLOverlayButton(0, "Active trigger classes:", fPosx, fPosy, fXlengh, fStep);
}

//______________________________________________________________________________
void AliEveBeamsInfo::CreateRunPanel()
{
  // Create horizontal panel
  Double_t fPosy = -10.0;
  Double_t fPosx = 250.0;
  Double_t fStep = 20.0;
  Double_t fXlengh = 120.0;
  TString fText;

  fText.Form("Run #: %d",fEsd->GetRunNumber());
  fRunNumber = new TGLOverlayButton(0, fText.Data(), fPosx, fPosy, fXlengh, fStep);
  fPosx+=fXlengh;

  fEventType = new TGLOverlayButton(0, "", fPosx, fPosy , fXlengh, fStep);
  fPosx+=fXlengh;

  fEventTypeLabel = new TGLOverlayButton(0, "", fPosx, fPosy, 2*fXlengh, fStep);

  // New line
  fPosx = 250.0;
  fPosy = -30.0;

  fPeriod = new TGLOverlayButton(0, "", fPosx, fPosy, fXlengh, fStep);
  fPosx+=fXlengh;

  fOrbit = new TGLOverlayButton(0, "", fPosx, fPosy, fXlengh, fStep);
  fPosx+=fXlengh;

  fBC = new TGLOverlayButton(0, "", fPosx, fPosy, fXlengh, fStep);
  fPosx+=fXlengh;

  fTrigger = new TGLOverlayButton(0, "", fPosx, fPosy, fXlengh, fStep);

  // New line
  fPosx = 250.0;
  fPosy = -50.0;

  fTimeStamp = new TGLOverlayButton(0, "", fPosx, fPosy, 2*fXlengh, fStep);
  fPosx+=2*fXlengh;

  fMagnetField = new TGLOverlayButton(0, "", fPosx, fPosy, 2*fXlengh, fStep);
  fPosx+=2*fXlengh;
}

//______________________________________________________________________________
void AliEveBeamsInfo::ShowBeamsInfo(Bool_t show, Bool_t updateonly)
{
  // Update & setup TGLOverlayButtons
  fHisto2dv = (TEveViewer*) gEve->GetViewers()->FindChild("2D Lego Viewer");

  if (!show)
  {
    RemoveOverlayButton(fEventNumber);
    RemoveOverlayButton(fCollisionCandidate);
    RemoveOverlayButton(fCollisionBoolean);
    RemoveOverlayButton(fBeam1);
    RemoveOverlayButton(fBeam1Boolean);
    RemoveOverlayButton(fBeam2);
    RemoveOverlayButton(fBeam2Boolean);

    RemoveOverlayButton(fRunNumber);
    RemoveOverlayButton(fEventType);
    RemoveOverlayButton(fEventTypeLabel);
    RemoveOverlayButton(fPeriod);
    RemoveOverlayButton(fOrbit);
    RemoveOverlayButton(fBC);
    RemoveOverlayButton(fTimeStamp);
    RemoveOverlayButton(fMagnetField);
    RemoveOverlayButton(fTrigger);

    RemoveOverlayButton(fTriggerClassesPanel);
    RemoveTriggerClasses();
  } else {

  if (!updateonly)
  {
    AddOverlayButton(fEventNumber);
    AddOverlayButton(fCollisionCandidate);
    AddOverlayButton(fCollisionBoolean);
    AddOverlayButton(fBeam1);
    AddOverlayButton(fBeam1Boolean);
    AddOverlayButton(fBeam2);
    AddOverlayButton(fBeam2Boolean);

    AddOverlayButton(fRunNumber);
    AddOverlayButton(fEventType);
    AddOverlayButton(fEventTypeLabel);
    AddOverlayButton(fPeriod);
    AddOverlayButton(fOrbit);
    AddOverlayButton(fBC);
    AddOverlayButton(fTimeStamp);
    AddOverlayButton(fMagnetField);
    AddOverlayButton(fTrigger);

    AddOverlayButton(fTriggerClassesPanel);
    AddTriggerClasses();
  }

  TString fText;
  fText.Form("Event #: %d", fEsd->GetEventNumberInFile());
  fEventNumber->SetText(fText.Data());

  fText.Form("Event type: %d",fEsd->GetEventType());
  fEventType->SetText(fText.Data());

  if(fEsd->GetEventType() == 0)
  {
    fText.Form("UNKNOW EVENT TYPE");
  } else {
    fText.Form("%s", AliRawEventHeaderBase::GetTypeName(fEsd->GetEventType()));
  }
  fEventTypeLabel->SetText(fText.Data());

  fText.Form("Period: %x", fEsd->GetPeriodNumber());
  fPeriod->SetText(fText.Data());

  fText.Form("Orbit: %x", fEsd->GetOrbitNumber());
  fOrbit->SetText(fText.Data());

  fText.Form("BC: %x", fEsd->GetBunchCrossNumber());
  fBC->SetText(fText.Data());

  TTimeStamp ts(fEsd->GetTimeStamp());
  fText.Form("Timestamp: %s",ts.AsString("s"));
  fTimeStamp->SetText(fText.Data());

  fText.Form("Magnetic field: %.2e kG", fEsd->GetMagneticField());
  fMagnetField->SetText(fText.Data());

  if (fEsd->GetTriggerMask() > (ULong64_t) 100 && fIsMC == kFALSE)
  {
    fText.Form("Trigger: #");
  } else {    
    fText.Form("Trigger: %llx", fEsd->GetTriggerMask());
  }
  fTrigger->SetText(fText.Data());

  UpdateTriggerClasses();

  Bool_t ev = fPhysicsSelection->IsCollisionCandidate(fEsd);

  if (ev == 1)
  {
     fCollisionBoolean->SetText("YES");
     fCollisionBoolean->SetBackColor(0x00ff00);
  } else {
     fCollisionBoolean->SetText("NO");
     fCollisionBoolean->SetBackColor(0xff0000);
  }

  Bool_t b1  = fEsd->IsTriggerClassFired("CINT1A-ABCE-NOPF-ALL");
  Bool_t b2  = fEsd->IsTriggerClassFired("CINT1C-ABCE-NOPF-ALL");
  Bool_t b12 = fEsd->IsTriggerClassFired("CINT1B-ABCE-NOPF-ALL");

  if (b1 == 1 || b12 == 1)
  {
     fBeam1Boolean->SetText("YES");
     fBeam1Boolean->SetBackColor(0x00ff00);
  } else {
     fBeam1Boolean->SetText("NO");
     fBeam1Boolean->SetBackColor(0xff0000);
  }

  if (b2 == 1 || b12 == 1)
  {
     fBeam2Boolean->SetText("YES");
     fBeam2Boolean->SetBackColor(0x00ff00);
  } else {
     fBeam2Boolean->SetText("NO");
     fBeam2Boolean->SetBackColor(0xff0000);
  }
}

gEve->Redraw3D(kTRUE);

}

//______________________________________________________________________________
void AliEveBeamsInfo::Update()
{
  // Update beams information for current event
  ShowBeamsInfo(fShowEventsInfo, kTRUE);
}

//______________________________________________________________________________
void AliEveBeamsInfo::AddOverlayButton(TGLOverlayButton *button)
{
  // Add buttons to viewers
  button->SetAlphaValues(fAlpha, fAlpha);

  gEve->GetDefaultGLViewer()->AddOverlayElement(button);
  fAl->Get3DView()->GetGLViewer()->AddOverlayElement(button);
  if(fHisto2dv)
    fHisto2dv->GetGLViewer()->AddOverlayElement(button);
}

//______________________________________________________________________________
void AliEveBeamsInfo::RemoveOverlayButton(TGLOverlayButton *button)
{
  // Remove buttons to viewers
  gEve->GetDefaultGLViewer()->RemoveOverlayElement(button);
  fAl->Get3DView()->GetGLViewer()->RemoveOverlayElement(button);
  if(fHisto2dv)
    fHisto2dv->GetGLViewer()->RemoveOverlayElement(button);
}

//______________________________________________________________________________
void AliEveBeamsInfo::ShowEventSelection(Bool_t status)
{
  // Activate/deactivate info box
  fShowEventsInfo = status;
  ShowBeamsInfo(fShowEventsInfo);
}

//______________________________________________________________________________
void AliEveBeamsInfo::SelectEventSelection(Int_t id)
{
  // Show trigger information
  if (id == 0)
  {
     fEventSelector->SetSelectOnTriggerType(kFALSE);
  } else {
     if (id == 1) fEventSelector->SetTriggerType("CINT1A-ABCE-NOPF-ALL");
     if (id == 2) fEventSelector->SetTriggerType("CINT1C-ABCE-NOPF-ALL");
     if (id == 3) fEventSelector->SetTriggerType("CINT1B-ABCE-NOPF-ALL");
     fEventSelector->SetSelectOnTriggerType(kTRUE);
  }
}

//______________________________________________________________________________
void AliEveBeamsInfo::ShowPrevEvent()
{
  // Go to the previous event
  AliEveEventManager::GetMaster()->PrevEvent();
}

//______________________________________________________________________________
void AliEveBeamsInfo::ShowNextEvent()
{
  // Go to the next event
  AliEveEventManager::GetMaster()->NextEvent();
}

//______________________________________________________________________________
void AliEveBeamsInfo::SwitchDataType(Bool_t status)
{
  // Activate/deactivate MC / real data type
  fIsMC = status;

  // Removing defaul physics selection
  delete fPhysicsSelection;
  fPhysicsSelection = NULL;

  fPhysicsSelection = new AliPhysicsSelection();
  fPhysicsSelection->SetAnalyzeMC(fIsMC);
  fPhysicsSelection->Initialize(fEsd);
  Update();
}

//______________________________________________________________________________
void AliEveBeamsInfo::AddTriggerClasses()
{
  // Add trigger classes
  if (!fTriggerClasses){

    TString fTriggerNameString = fEsd->GetESDRun()->GetActiveTriggerClasses();
    TString *fTriggerName = SepareTriggerClasses(fNumberOfActiveTriggerClasses, fTriggerNameString);

    fTriggerClasses = new TGLOverlayButton*[fNumberOfActiveTriggerClasses];

    Double_t fPosy = -130.0;
    Double_t fStep = 20.0;
    for (Int_t i = 0; i < fNumberOfActiveTriggerClasses; i++)
    {
      fTriggerClasses[i] = new TGLOverlayButton(0, fTriggerName[i].Data(), 10, fPosy, 220.0, 20);
      fTriggerClasses[i]->SetBackColor(0xce970a);
      fTriggerClasses[i]->SetAlphaValues(fAlpha, fAlpha);
      fPosy-=fStep;

      AddOverlayButton(fTriggerClasses[i]);
    }
  }
}

//______________________________________________________________________________
void AliEveBeamsInfo::RemoveTriggerClasses()
{
  // Remove overlay buttons
  for(Int_t i = 0; i < fNumberOfActiveTriggerClasses; i++)
  {
    RemoveOverlayButton(fTriggerClasses[i]);
  }

  delete[] fTriggerClasses;
  fTriggerClasses = 0;
}

//______________________________________________________________________________
void AliEveBeamsInfo::UpdateTriggerClasses()
{
  // Remove trigger information and update it
  RemoveTriggerClasses();
  AddTriggerClasses();
}

//______________________________________________________________________________
TString *AliEveBeamsInfo::SepareTriggerClasses(Int_t &fNumberOfClasses, TString fTriggerSource)
{
  // Get trigger string and separe triggers into TString's
  Int_t fStringLength = fTriggerSource.Length();
  fNumberOfClasses = 0;

  for (Int_t i = 1; i < fStringLength; i++)
  {
    TString fString = fTriggerSource(i,2);
    if (fString == "  "){
      fNumberOfClasses++;
    }
  }
  fNumberOfClasses++;

  TString *fTriggerResult = new TString[fNumberOfClasses];

  Int_t fIndex = 1;
  Int_t fLastIndex = 0;
  Int_t fFirstIndex = 1;
  Int_t fClassNumber = 0;
  for(;;)
  {
    if(fIndex >= fStringLength) break;
    TString fString = fTriggerSource(fIndex,1);
    fIndex++;
    fLastIndex++;
    if (fString == " "){
      fTriggerResult[fClassNumber] = fTriggerSource(fFirstIndex, fLastIndex-1);
      fFirstIndex = fIndex+1;
      fLastIndex = 0;
      fIndex++;
      fClassNumber++;
    }
  }
  return fTriggerResult;
}

//______________________________________________________________________________
void AliEveBeamsInfo::SetAlpha(Double_t val)
{
  // Set the new alpha value for TGLOverlayButton
  fAlpha = val;

  // First remove all buttons from viewers
  ShowBeamsInfo(kFALSE);

  // Then replot everything with the next alpha value
  ShowBeamsInfo(kTRUE);
}

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