ROOT logo
// @(#)root/eve:$Id$
// Author: Matevz Tadel 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 "AliEveV0Editor.h"
#include "AliEveV0.h"

#include "TVirtualPad.h"
#include "TColor.h"

// Cleanup these includes:
#include "TGLabel.h"
#include "TGButton.h"
#include "TGNumberEntry.h"
#include "TGColorSelect.h"
#include "TGDoubleSlider.h"


//______________________________________________________________________________
// GUI editor for AliEveV0.
//

ClassImp(AliEveV0Editor)

//______________________________________________________________________________
AliEveV0Editor::AliEveV0Editor(const TGWindow *p, Int_t width, Int_t height,
                               UInt_t options, Pixel_t back) :
  TGedFrame(p, width, height, options | kVerticalFrame, back),
  fM(0),
  fInfoLabel0(0),
  fInfoLabel1(0),
  fInfoLabelNegDaughter(0),
  fInfoLabelPosDaughter(0),
  fXButton(0)
  // Initialize widget pointers to 0
{
  // Constructor.

  MakeTitle("AliEveV0");

  fInfoLabel0 = new TGLabel(this);
  fInfoLabel0->SetTextJustify(kTextLeft);
  AddFrame(fInfoLabel0, new TGLayoutHints(kLHintsLeft|kLHintsExpandX,
                                          8, 0, 2, 0));

  fInfoLabel1 = new TGLabel(this);
  fInfoLabel1->SetTextJustify(kTextLeft);
  AddFrame(fInfoLabel1, new TGLayoutHints(kLHintsLeft|kLHintsExpandX,
                                          8, 0, 2, 0));

  fInfoLabelNegDaughter = new TGLabel(this);
  fInfoLabelNegDaughter->SetTextJustify(kTextLeft);
  AddFrame(fInfoLabelNegDaughter, new TGLayoutHints(kLHintsLeft|kLHintsExpandX,
						    8, 0, 2, 0));

  fInfoLabelPosDaughter = new TGLabel(this);
  fInfoLabelPosDaughter->SetTextJustify(kTextLeft);
  AddFrame(fInfoLabelPosDaughter, new TGLayoutHints(kLHintsLeft|kLHintsExpandX,
						    8, 0, 2, 0));

  fXButton = new TGTextButton(this, "Detailed View");
  AddFrame(fXButton, new TGLayoutHints(kLHintsLeft|kLHintsExpandX, 1, 1, 0, 0));
  fXButton->Connect("Clicked()", "AliEveV0Editor", this, "DisplayDetailed()");
}

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

//______________________________________________________________________________
void AliEveV0Editor::SetModel(TObject* obj)
{
  // Set model object.

  fM = static_cast<AliEveV0*>(obj);

  // Set values of widgets
  fInfoLabel0->SetText(Form("Radius = %f, DCA = %f", fM->GetRadius(), fM->GetDaughterDCA()));
  fInfoLabel1->SetText(Form("Pt = %f", fM->GetPt()));
  fInfoLabelNegDaughter->SetText(Form("Neg. Daughter Prob= %.2f for Pdg= %d", fM->GetNegMaxProbPid(), fM->GetNegMaxProbPdg()));
  fInfoLabelPosDaughter->SetText(Form("Pos. Daughter Prob= %.2f for Pdg= %d", fM->GetPosMaxProbPid(), fM->GetPosMaxProbPdg()));

}

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

// Implements callback/slot methods

//______________________________________________________________________________
// void AliEveV0Editor::DoXYZZ()
// {
//    // Slot for XYZZ.
//
//    fM->SetXYZZ(fXYZZ->GetValue());
//    Update();
// }

#include <TEveManager.h>
#include <TEveWindow.h>
#include <TEveViewer.h>
#include <TEveScene.h>
#include <TEveGeoNode.h>
#include <TEveProjectionManager.h>

#include <TGLCamera.h>
#include <TGLViewer.h>
#include "TGLCameraOverlay.h"

#include <TLatex.h>
#include <TRootEmbeddedCanvas.h>
#include <TInterpreter.h>

void AliEveV0Editor::DisplayDetailed()
{
  TEveWindowSlot *slot = TEveWindow::CreateWindowMainFrame();
  TEveWindowPack *pack = slot->MakePack();
  pack->SetShowTitleBar(kFALSE);
  pack->SetHorizontal();

  //
  // This part is for getting the different objects to display
  //
  char displayInfo[100] = {0};
  snprintf(displayInfo,100,"pt = %.3f",fM->GetPt());
  TEveLine *lv0TransverseMomentumDirection = new TEveLine(displayInfo);
  lv0TransverseMomentumDirection->SetLineColor(kOrange+8);
  lv0TransverseMomentumDirection->SetLineWidth(2);
  lv0TransverseMomentumDirection->SetLineStyle(2);
  lv0TransverseMomentumDirection->SetLineWidth(2);
  Float_t scalePt = 100.; // this needs to be available as a ruler
  lv0TransverseMomentumDirection->SetPoint(0,fM->fRecDecayV.fX, fM->fRecDecayV.fY, fM->fRecDecayV.fZ);
  lv0TransverseMomentumDirection->SetPoint(1,scalePt*fM->fRecDecayP.fX, scalePt*fM->fRecDecayP.fY,0);

  TEvePointSet *pvlocation = new TEvePointSet("PV location");
  pvlocation->SetNextPoint(fM->fRecBirthV.fX, fM->fRecBirthV.fY, fM->fRecBirthV.fZ);
  pvlocation->SetTitle("pv location");
  pvlocation->SetMarkerStyle(4);
  pvlocation->SetMarkerSize(2.5);
  pvlocation->SetMarkerColor(7);

  TEvePointSet *v0location = new TEvePointSet("V0 location");
  v0location->SetNextPoint(fM->fRecDecayV.fX, fM->fRecDecayV.fY, fM->fRecDecayV.fZ);
  v0location->SetTitle("v0 location");
  v0location->SetMarkerStyle(4);
  v0location->SetMarkerSize(2.5);
  v0location->SetMarkerColor(kOrange+8);

  TEveUtil::LoadMacro("clusters_from_index.C");

  AliEveTrack *negTrack = fM->GetNegTrack();
  AliEveTrack *posTrack = fM->GetPosTrack();


  char macroWithIndex[100] = {0};
  Int_t daughterIndex = 0;
  TEvePointSet *negDaughterCluster = 0;
  TEvePointSet *posDaughterCluster = 0;
  
  daughterIndex = negTrack->GetIndex();
  snprintf(macroWithIndex,100,"clusters_from_index(%d)",daughterIndex);
  Long_t negResult = gInterpreter->ProcessLine(macroWithIndex);
  if (negResult) {
    negDaughterCluster = reinterpret_cast<TEvePointSet*>(negResult);
    if (negDaughterCluster){
      negDaughterCluster->SetMarkerStyle(4);	
      negDaughterCluster->SetMarkerSize(1.5);	
      negDaughterCluster->SetMarkerColor(kBlue+3);
    }
  }
  else
  {
    Warning("DisplayDetailed", "Import of negative daughter's clusters failed.");
  }

  daughterIndex = posTrack->GetIndex();
  snprintf(macroWithIndex,100,"clusters_from_index(%d)",daughterIndex);
  Long_t posResult = gInterpreter->ProcessLine(macroWithIndex);
  if (posResult) {
    posDaughterCluster = reinterpret_cast<TEvePointSet*>(posResult);
    if (posDaughterCluster){
      posDaughterCluster->SetMarkerStyle(4);	
      posDaughterCluster->SetMarkerSize(1.5);	
      posDaughterCluster->SetMarkerColor(kRed+3);
    }
  }
  else
  {
    Warning("DisplayDetailed", "Import of positive daughter's clusters failed.");
  }

  //
  // This part is for the bending plane view
  //
  pack->NewSlot()->MakeCurrent();
  TEveViewer *bpViewer = gEve->SpawnNewViewer("V0 bending plane View");
  TEveScene  *bpScene  = gEve->SpawnNewScene("V0 bending plane Scene");
  
  TEveProjectionManager *projMgr = new TEveProjectionManager(TEveProjection::kPT_RPhi);
  bpScene->AddElement(projMgr);
  bpViewer->AddScene(bpScene);

  TEveUtil::LoadMacro("geom_gentle.C");
  Long_t result = gInterpreter->ProcessLine("geom_gentle_rphi()");
  if (result)
  {
    TEveGeoShape *geomRPhi = reinterpret_cast<TEveGeoShape*>(result);
    geomRPhi->IncDenyDestroy();
    projMgr->SetCurrentDepth(-10); // to put the geometry behind the projection of the V0 -> clearer
    projMgr->ImportElements(geomRPhi);
    projMgr->SetCurrentDepth(0);
  }
  else
  {
    Warning("DisplayDetailed", "Import of R-Phi geometry failed.");
  }
  
  // Projection of the different elements onto the 2D view
  projMgr->ImportElements(fM);
  projMgr->ImportElements(lv0TransverseMomentumDirection);
  projMgr->ImportElements(pvlocation);
  projMgr->ImportElements(v0location);

  if (negDaughterCluster) projMgr->ImportElements(negDaughterCluster);
  if (posDaughterCluster) projMgr->ImportElements(posDaughterCluster);

  // This is the to-do list for the bending plane:
  // 1. fix the view to orthographic XOY (no rotation allowed but moving the center ok) ->done! 
  // 2. show axis and tickles along X and Y ->done!
  //       -> note for the projection the cartesian scales are not very useful
  //       -> propose a phi and R scale which rotates with a reset at 0;
  //       -> propose a transformation for an eta scale (keep the z one);
  // 3. show the center, the main vertex and the detectors for this view ->done!
  // 4. show V0 direction in the bending plane with arrow length proportional to pT ->done!
  // 5. show angles with respect to axis (phi angle) ->almost.
  // 6. show clusters in the ITS and in the TPC associated with the daughter tracks
  //       -> include a radius cut for plotting only ITS and TPC ->done!
  bpViewer->GetGLViewer()->SetCurrentCamera(TGLViewer::kCameraOrthoXOY);
  bpViewer->GetGLViewer()->ResetCamerasAfterNextUpdate();
  TGLViewer *lbpGLViewer = bpViewer->GetGLViewer();
  TGLCameraOverlay* co = lbpGLViewer->GetCameraOverlay();
  co->SetShowOrthographic(true); //(false);
  co->SetOrthographicMode(TGLCameraOverlay::kAxis); // ::kPlaneIntersect or ::kBar
  // end of the bending plane part

  //
  // This part is for the decay plane view
  //
  pack->NewSlot()->MakeCurrent();
  TEveViewer *dpViewer = gEve->SpawnNewViewer("V0 decay plane View");
  TEveScene  *dpScene  = gEve->SpawnNewScene("V0 decay plane Scene");

  dpViewer->AddScene(dpScene);

  result = gInterpreter->ProcessLine("geom_gentle(kFALSE)");
  if (result)
  {
    TEveGeoShape *geom = reinterpret_cast<TEveGeoShape*>(result);
    geom->IncDenyDestroy();
    geom->FindChild("TRD+TOF")->SetRnrState(kFALSE);
    geom->FindChild("PHOS")   ->SetRnrState(kFALSE);
    geom->FindChild("HMPID")  ->SetRnrState(kFALSE);
    dpScene->AddElement(geom);
  }
  else
  {
    Warning("DisplayDetailed", "Import of 3D geometry failed.");
  }

  dpScene->AddElement(fM);
  dpScene->AddElement(lv0TransverseMomentumDirection);
  dpScene->AddElement(pvlocation);
  dpScene->AddElement(v0location);
  if (negDaughterCluster) dpScene->AddElement(negDaughterCluster);
  if (posDaughterCluster) dpScene->AddElement(posDaughterCluster);

  // This is the to-do list for the decay plane:
  // 1. fix the view to decay plane (no rotation allowed but moving the center ok)
  // 2. show V0 direction with a vertical arrow length proportional to pT -> done!
  // 3. show the center, the main vertex and the detectors for this view -> done!
  // 4. show the x,y and z axis and the different angles
  //       -> this needs a referential object that we can move around
  //          or fix to a selected point (origin being the default)
  // 5. draw the dca between daughters and the extrapolation to the main vertex.
  //       -> this is an issue since we only store the distance: check with J.Belikov
  // 6. show clusters in the ITS and in the TPC associated with the daughter tracks
  //       -> include a radius cut for plotting only ITS and TPC ->done!
  dpViewer->GetGLViewer()->ResetCamerasAfterNextUpdate();
  TGLCamera& dpCam = dpViewer->GetGLViewer()->CurrentCamera();
  dpCam.SetExternalCenter(kTRUE);
  dpCam.SetCenterVec(fM->fRecDecayV.fX, fM->fRecDecayV.fY, fM->fRecDecayV.fZ);
  dpCam.RotateRad(0,-TMath::Pi()/2.); // RotateRad rotates in radians (hRotate,vRotate)
  //  Here rotate the _view_ (not the camera) by (fM->GetPhi() - TMath::Pi()/2.)

  // In the end maybe truck and rotate properly...
  //  dpCam.Truck(0,200);// Truck center wrt the view panel: (x=0 pixels, y pixels)
  //  dpCam.Rotate(0,50,0,0); // Rotate in pixels (xDelta,yDelta)

  // end of the decay plane part

  //
  // This part is for displaying the information
  //
  slot = pack->NewSlot();
  
  TEveWindowFrame *frame = slot->MakeFrame(new TRootEmbeddedCanvas());
  frame->SetElementName("Details");

  // Print and show detailed information about the V0
  // Calculation of the invariant mass with the max prob PID hypothesis first
  // pseudorapidity, phi angle, pt, radius, dcas
  char info[100] = {0};
  snprintf(info,100,"#phi = %.3f rad = %.1f deg",fM->GetPhi(),(180./TMath::Pi())*fM->GetPhi());
  TLatex* ltx = new TLatex(0.05, 0.9, info);
  ltx->SetTextSize(0.08);
  ltx->Draw();

  snprintf(info,100,"radius = %.3f [cm]",fM->GetRadius());
  ltx->DrawLatex(0.05, 0.8, info);

  snprintf(info,100,"p_{T} = %.3f [GeV/c]",fM->GetPt());
  ltx->DrawLatex(0.05, 0.7, info);

  snprintf(info,100,"daughters dca = %.3f [cm]",fM->GetDaughterDCA());
  ltx->DrawLatex(0.05, 0.6, info);

  snprintf(info,100,"#eta = - ln( tan(#theta/2) ) = %.3f",fM->GetEta());
  ltx->DrawLatex(0.05, 0.5, info);

  snprintf(info,100,"mass_{K^{0}_{s}} = %.3f [GeV/c^{2}]",fM->GetK0sInvMass());
  ltx->DrawLatex(0.05, 0.3, info);

  snprintf(info,100,"mass_{#Lambda} = %.3f [GeV/c^{2}]",fM->GetLambdaInvMass());
  ltx->DrawLatex(0.05, 0.2, info);

  snprintf(info,100,"mass_{#bar{#Lambda}} = %.3f [GeV/c^{2}]",fM->GetAntiLambdaInvMass());
  ltx->DrawLatex(0.05, 0.1, info);

  gEve->Redraw3D();
}
 AliEveV0Editor.cxx:1
 AliEveV0Editor.cxx:2
 AliEveV0Editor.cxx:3
 AliEveV0Editor.cxx:4
 AliEveV0Editor.cxx:5
 AliEveV0Editor.cxx:6
 AliEveV0Editor.cxx:7
 AliEveV0Editor.cxx:8
 AliEveV0Editor.cxx:9
 AliEveV0Editor.cxx:10
 AliEveV0Editor.cxx:11
 AliEveV0Editor.cxx:12
 AliEveV0Editor.cxx:13
 AliEveV0Editor.cxx:14
 AliEveV0Editor.cxx:15
 AliEveV0Editor.cxx:16
 AliEveV0Editor.cxx:17
 AliEveV0Editor.cxx:18
 AliEveV0Editor.cxx:19
 AliEveV0Editor.cxx:20
 AliEveV0Editor.cxx:21
 AliEveV0Editor.cxx:22
 AliEveV0Editor.cxx:23
 AliEveV0Editor.cxx:24
 AliEveV0Editor.cxx:25
 AliEveV0Editor.cxx:26
 AliEveV0Editor.cxx:27
 AliEveV0Editor.cxx:28
 AliEveV0Editor.cxx:29
 AliEveV0Editor.cxx:30
 AliEveV0Editor.cxx:31
 AliEveV0Editor.cxx:32
 AliEveV0Editor.cxx:33
 AliEveV0Editor.cxx:34
 AliEveV0Editor.cxx:35
 AliEveV0Editor.cxx:36
 AliEveV0Editor.cxx:37
 AliEveV0Editor.cxx:38
 AliEveV0Editor.cxx:39
 AliEveV0Editor.cxx:40
 AliEveV0Editor.cxx:41
 AliEveV0Editor.cxx:42
 AliEveV0Editor.cxx:43
 AliEveV0Editor.cxx:44
 AliEveV0Editor.cxx:45
 AliEveV0Editor.cxx:46
 AliEveV0Editor.cxx:47
 AliEveV0Editor.cxx:48
 AliEveV0Editor.cxx:49
 AliEveV0Editor.cxx:50
 AliEveV0Editor.cxx:51
 AliEveV0Editor.cxx:52
 AliEveV0Editor.cxx:53
 AliEveV0Editor.cxx:54
 AliEveV0Editor.cxx:55
 AliEveV0Editor.cxx:56
 AliEveV0Editor.cxx:57
 AliEveV0Editor.cxx:58
 AliEveV0Editor.cxx:59
 AliEveV0Editor.cxx:60
 AliEveV0Editor.cxx:61
 AliEveV0Editor.cxx:62
 AliEveV0Editor.cxx:63
 AliEveV0Editor.cxx:64
 AliEveV0Editor.cxx:65
 AliEveV0Editor.cxx:66
 AliEveV0Editor.cxx:67
 AliEveV0Editor.cxx:68
 AliEveV0Editor.cxx:69
 AliEveV0Editor.cxx:70
 AliEveV0Editor.cxx:71
 AliEveV0Editor.cxx:72
 AliEveV0Editor.cxx:73
 AliEveV0Editor.cxx:74
 AliEveV0Editor.cxx:75
 AliEveV0Editor.cxx:76
 AliEveV0Editor.cxx:77
 AliEveV0Editor.cxx:78
 AliEveV0Editor.cxx:79
 AliEveV0Editor.cxx:80
 AliEveV0Editor.cxx:81
 AliEveV0Editor.cxx:82
 AliEveV0Editor.cxx:83
 AliEveV0Editor.cxx:84
 AliEveV0Editor.cxx:85
 AliEveV0Editor.cxx:86
 AliEveV0Editor.cxx:87
 AliEveV0Editor.cxx:88
 AliEveV0Editor.cxx:89
 AliEveV0Editor.cxx:90
 AliEveV0Editor.cxx:91
 AliEveV0Editor.cxx:92
 AliEveV0Editor.cxx:93
 AliEveV0Editor.cxx:94
 AliEveV0Editor.cxx:95
 AliEveV0Editor.cxx:96
 AliEveV0Editor.cxx:97
 AliEveV0Editor.cxx:98
 AliEveV0Editor.cxx:99
 AliEveV0Editor.cxx:100
 AliEveV0Editor.cxx:101
 AliEveV0Editor.cxx:102
 AliEveV0Editor.cxx:103
 AliEveV0Editor.cxx:104
 AliEveV0Editor.cxx:105
 AliEveV0Editor.cxx:106
 AliEveV0Editor.cxx:107
 AliEveV0Editor.cxx:108
 AliEveV0Editor.cxx:109
 AliEveV0Editor.cxx:110
 AliEveV0Editor.cxx:111
 AliEveV0Editor.cxx:112
 AliEveV0Editor.cxx:113
 AliEveV0Editor.cxx:114
 AliEveV0Editor.cxx:115
 AliEveV0Editor.cxx:116
 AliEveV0Editor.cxx:117
 AliEveV0Editor.cxx:118
 AliEveV0Editor.cxx:119
 AliEveV0Editor.cxx:120
 AliEveV0Editor.cxx:121
 AliEveV0Editor.cxx:122
 AliEveV0Editor.cxx:123
 AliEveV0Editor.cxx:124
 AliEveV0Editor.cxx:125
 AliEveV0Editor.cxx:126
 AliEveV0Editor.cxx:127
 AliEveV0Editor.cxx:128
 AliEveV0Editor.cxx:129
 AliEveV0Editor.cxx:130
 AliEveV0Editor.cxx:131
 AliEveV0Editor.cxx:132
 AliEveV0Editor.cxx:133
 AliEveV0Editor.cxx:134
 AliEveV0Editor.cxx:135
 AliEveV0Editor.cxx:136
 AliEveV0Editor.cxx:137
 AliEveV0Editor.cxx:138
 AliEveV0Editor.cxx:139
 AliEveV0Editor.cxx:140
 AliEveV0Editor.cxx:141
 AliEveV0Editor.cxx:142
 AliEveV0Editor.cxx:143
 AliEveV0Editor.cxx:144
 AliEveV0Editor.cxx:145
 AliEveV0Editor.cxx:146
 AliEveV0Editor.cxx:147
 AliEveV0Editor.cxx:148
 AliEveV0Editor.cxx:149
 AliEveV0Editor.cxx:150
 AliEveV0Editor.cxx:151
 AliEveV0Editor.cxx:152
 AliEveV0Editor.cxx:153
 AliEveV0Editor.cxx:154
 AliEveV0Editor.cxx:155
 AliEveV0Editor.cxx:156
 AliEveV0Editor.cxx:157
 AliEveV0Editor.cxx:158
 AliEveV0Editor.cxx:159
 AliEveV0Editor.cxx:160
 AliEveV0Editor.cxx:161
 AliEveV0Editor.cxx:162
 AliEveV0Editor.cxx:163
 AliEveV0Editor.cxx:164
 AliEveV0Editor.cxx:165
 AliEveV0Editor.cxx:166
 AliEveV0Editor.cxx:167
 AliEveV0Editor.cxx:168
 AliEveV0Editor.cxx:169
 AliEveV0Editor.cxx:170
 AliEveV0Editor.cxx:171
 AliEveV0Editor.cxx:172
 AliEveV0Editor.cxx:173
 AliEveV0Editor.cxx:174
 AliEveV0Editor.cxx:175
 AliEveV0Editor.cxx:176
 AliEveV0Editor.cxx:177
 AliEveV0Editor.cxx:178
 AliEveV0Editor.cxx:179
 AliEveV0Editor.cxx:180
 AliEveV0Editor.cxx:181
 AliEveV0Editor.cxx:182
 AliEveV0Editor.cxx:183
 AliEveV0Editor.cxx:184
 AliEveV0Editor.cxx:185
 AliEveV0Editor.cxx:186
 AliEveV0Editor.cxx:187
 AliEveV0Editor.cxx:188
 AliEveV0Editor.cxx:189
 AliEveV0Editor.cxx:190
 AliEveV0Editor.cxx:191
 AliEveV0Editor.cxx:192
 AliEveV0Editor.cxx:193
 AliEveV0Editor.cxx:194
 AliEveV0Editor.cxx:195
 AliEveV0Editor.cxx:196
 AliEveV0Editor.cxx:197
 AliEveV0Editor.cxx:198
 AliEveV0Editor.cxx:199
 AliEveV0Editor.cxx:200
 AliEveV0Editor.cxx:201
 AliEveV0Editor.cxx:202
 AliEveV0Editor.cxx:203
 AliEveV0Editor.cxx:204
 AliEveV0Editor.cxx:205
 AliEveV0Editor.cxx:206
 AliEveV0Editor.cxx:207
 AliEveV0Editor.cxx:208
 AliEveV0Editor.cxx:209
 AliEveV0Editor.cxx:210
 AliEveV0Editor.cxx:211
 AliEveV0Editor.cxx:212
 AliEveV0Editor.cxx:213
 AliEveV0Editor.cxx:214
 AliEveV0Editor.cxx:215
 AliEveV0Editor.cxx:216
 AliEveV0Editor.cxx:217
 AliEveV0Editor.cxx:218
 AliEveV0Editor.cxx:219
 AliEveV0Editor.cxx:220
 AliEveV0Editor.cxx:221
 AliEveV0Editor.cxx:222
 AliEveV0Editor.cxx:223
 AliEveV0Editor.cxx:224
 AliEveV0Editor.cxx:225
 AliEveV0Editor.cxx:226
 AliEveV0Editor.cxx:227
 AliEveV0Editor.cxx:228
 AliEveV0Editor.cxx:229
 AliEveV0Editor.cxx:230
 AliEveV0Editor.cxx:231
 AliEveV0Editor.cxx:232
 AliEveV0Editor.cxx:233
 AliEveV0Editor.cxx:234
 AliEveV0Editor.cxx:235
 AliEveV0Editor.cxx:236
 AliEveV0Editor.cxx:237
 AliEveV0Editor.cxx:238
 AliEveV0Editor.cxx:239
 AliEveV0Editor.cxx:240
 AliEveV0Editor.cxx:241
 AliEveV0Editor.cxx:242
 AliEveV0Editor.cxx:243
 AliEveV0Editor.cxx:244
 AliEveV0Editor.cxx:245
 AliEveV0Editor.cxx:246
 AliEveV0Editor.cxx:247
 AliEveV0Editor.cxx:248
 AliEveV0Editor.cxx:249
 AliEveV0Editor.cxx:250
 AliEveV0Editor.cxx:251
 AliEveV0Editor.cxx:252
 AliEveV0Editor.cxx:253
 AliEveV0Editor.cxx:254
 AliEveV0Editor.cxx:255
 AliEveV0Editor.cxx:256
 AliEveV0Editor.cxx:257
 AliEveV0Editor.cxx:258
 AliEveV0Editor.cxx:259
 AliEveV0Editor.cxx:260
 AliEveV0Editor.cxx:261
 AliEveV0Editor.cxx:262
 AliEveV0Editor.cxx:263
 AliEveV0Editor.cxx:264
 AliEveV0Editor.cxx:265
 AliEveV0Editor.cxx:266
 AliEveV0Editor.cxx:267
 AliEveV0Editor.cxx:268
 AliEveV0Editor.cxx:269
 AliEveV0Editor.cxx:270
 AliEveV0Editor.cxx:271
 AliEveV0Editor.cxx:272
 AliEveV0Editor.cxx:273
 AliEveV0Editor.cxx:274
 AliEveV0Editor.cxx:275
 AliEveV0Editor.cxx:276
 AliEveV0Editor.cxx:277
 AliEveV0Editor.cxx:278
 AliEveV0Editor.cxx:279
 AliEveV0Editor.cxx:280
 AliEveV0Editor.cxx:281
 AliEveV0Editor.cxx:282
 AliEveV0Editor.cxx:283
 AliEveV0Editor.cxx:284
 AliEveV0Editor.cxx:285
 AliEveV0Editor.cxx:286
 AliEveV0Editor.cxx:287
 AliEveV0Editor.cxx:288
 AliEveV0Editor.cxx:289
 AliEveV0Editor.cxx:290
 AliEveV0Editor.cxx:291
 AliEveV0Editor.cxx:292
 AliEveV0Editor.cxx:293
 AliEveV0Editor.cxx:294
 AliEveV0Editor.cxx:295
 AliEveV0Editor.cxx:296
 AliEveV0Editor.cxx:297
 AliEveV0Editor.cxx:298
 AliEveV0Editor.cxx:299
 AliEveV0Editor.cxx:300
 AliEveV0Editor.cxx:301
 AliEveV0Editor.cxx:302
 AliEveV0Editor.cxx:303
 AliEveV0Editor.cxx:304
 AliEveV0Editor.cxx:305
 AliEveV0Editor.cxx:306
 AliEveV0Editor.cxx:307
 AliEveV0Editor.cxx:308
 AliEveV0Editor.cxx:309
 AliEveV0Editor.cxx:310
 AliEveV0Editor.cxx:311
 AliEveV0Editor.cxx:312
 AliEveV0Editor.cxx:313
 AliEveV0Editor.cxx:314
 AliEveV0Editor.cxx:315
 AliEveV0Editor.cxx:316
 AliEveV0Editor.cxx:317
 AliEveV0Editor.cxx:318
 AliEveV0Editor.cxx:319
 AliEveV0Editor.cxx:320
 AliEveV0Editor.cxx:321
 AliEveV0Editor.cxx:322
 AliEveV0Editor.cxx:323
 AliEveV0Editor.cxx:324
 AliEveV0Editor.cxx:325
 AliEveV0Editor.cxx:326
 AliEveV0Editor.cxx:327
 AliEveV0Editor.cxx:328
 AliEveV0Editor.cxx:329
 AliEveV0Editor.cxx:330
 AliEveV0Editor.cxx:331
 AliEveV0Editor.cxx:332
 AliEveV0Editor.cxx:333
 AliEveV0Editor.cxx:334
 AliEveV0Editor.cxx:335
 AliEveV0Editor.cxx:336
 AliEveV0Editor.cxx:337
 AliEveV0Editor.cxx:338
 AliEveV0Editor.cxx:339
 AliEveV0Editor.cxx:340
 AliEveV0Editor.cxx:341
 AliEveV0Editor.cxx:342