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 "AliEveCascadeEditor.h"
#include "AliEveCascade.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 AliEveCascade.
//

ClassImp(AliEveCascadeEditor)

//______________________________________________________________________________
AliEveCascadeEditor::AliEveCascadeEditor(const TGWindow *p, Int_t width, Int_t height,
                               UInt_t options, Pixel_t back) :
  TGedFrame(p, width, height, options | kVerticalFrame, back),
  fM(0),
  fInfoLabelRadius(0),
  fInfoLabelDCA(0),
  fInfoLabelCharge(0),
  fInfoLabelPhi(0),
  fInfoLabelTheta(0),
  fInfoLabelPtot(0),
  fInfoLabelPt(0),
  fInfoLabelEta(0),
  fXButtonDetailedView(0),
  fXButtonMassHyp(0)
  // Initialize widget pointers to 0
{
  // Constructor.

  MakeTitle("AliEveCascade");

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

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

  fInfoLabelPhi = new TGLabel(this);
  fInfoLabelPhi->SetTextJustify(kTextLeft);
  AddFrame(fInfoLabelPhi,    new TGLayoutHints(kLHintsLeft|kLHintsExpandX, 8, 0, 2, 0));
  
  fInfoLabelTheta = new TGLabel(this);
  fInfoLabelTheta->SetTextJustify(kTextLeft);
  AddFrame(fInfoLabelTheta,  new TGLayoutHints(kLHintsLeft|kLHintsExpandX, 8, 0, 2, 0));
  
  fInfoLabelPtot = new TGLabel(this);
  fInfoLabelPtot->SetTextJustify(kTextLeft);
  AddFrame(fInfoLabelPtot,   new TGLayoutHints(kLHintsLeft|kLHintsExpandX, 8, 0, 2, 0));
  
  fInfoLabelPt = new TGLabel(this);
  fInfoLabelPt->SetTextJustify(kTextLeft);
  AddFrame(fInfoLabelPt,     new TGLayoutHints(kLHintsLeft|kLHintsExpandX, 8, 0, 2, 0));
  
  fInfoLabelEta = new TGLabel(this);
  fInfoLabelEta->SetTextJustify(kTextLeft);
  AddFrame( fInfoLabelEta,   new TGLayoutHints(kLHintsLeft|kLHintsExpandX, 8, 0, 2, 0));

  
  fXButtonDetailedView = new TGTextButton(this, "Detailed View");
  AddFrame(fXButtonDetailedView, new TGLayoutHints(kLHintsLeft|kLHintsExpandX, 1, 1, 0, 0));
  fXButtonDetailedView->Connect("Clicked()", "AliEveCascadeEditor", this, "DisplayDetailed()");
  
  fXButtonMassHyp = new TGTextButton(this, "Mass Hypotheses according to charge");
  AddFrame(fXButtonMassHyp, new TGLayoutHints(kLHintsLeft|kLHintsExpandX, 1, 1, 0, 0));
  fXButtonMassHyp->Connect("Clicked()", "AliEveCascadeEditor", this, "DisplayMassHyp()");
  
}

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

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

  fM = static_cast<AliEveCascade*>(obj);

  // Set values of widgets
  fInfoLabelRadius->SetText(Form("Radius = %f cm",     fM->GetRadius() ));
  fInfoLabelDCA   ->SetText(Form("DCA (Xi dghters) = %f cm", fM->GetDaughterDCA()));
  fInfoLabelCharge->SetText(Form("Charge = %d",        fM->GetCharge() ));
  fInfoLabelPhi   ->SetText(Form("Phi     = %f deg",   fM->GetPhi()   * 180.0/TMath::Pi()    ));
  fInfoLabelTheta ->SetText(Form("Theta  = %f deg",    fM->GetTheta() * 180.0/TMath::Pi()    ));
  fInfoLabelPtot  ->SetText(Form("Ptot    = %f GeV/c", fM->GetPtot()   ));
  fInfoLabelPt    ->SetText(Form("Pt      = %f GeV/c", fM->GetPt()     ));
  fInfoLabelEta   ->SetText(Form("Eta    = %f",        fM->GetEta()    ));
}

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

// Implements callback/slot methods

//______________________________________________________________________________
// void AliEveCascadeEditor::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 AliEveCascadeEditor::DisplayDetailed()
{
  // Display a detailed view (bending plane + transverse plane)
	
  printf("\n--> Detailed View :\n");
  TEveWindowSlot *slot = TEveWindow::CreateWindowMainFrame();
  TEveWindowPack *pack = slot->MakePack();
  pack->SetShowTitleBar(kFALSE);
  pack->SetHorizontal();

  //----------
  // Part 0 : get the different objects to display
  //
  
  TEvePointSet *lPrimVtxLocation = new TEvePointSet("Prim Vtx location");
   lPrimVtxLocation->SetNextPoint(fM->fRecBirthV.fX, fM->fRecBirthV.fY, fM->fRecBirthV.fZ);
   lPrimVtxLocation->SetTitle("prim vtx location");
   lPrimVtxLocation->SetMarkerStyle(4);
   lPrimVtxLocation->SetMarkerSize(2.5);
   lPrimVtxLocation->SetMarkerColor(kCyan);

  TEvePointSet *lCascadeLocation = new TEvePointSet("Cascade decay location");
   lCascadeLocation->SetNextPoint(fM->fRecDecayV.fX, fM->fRecDecayV.fY, fM->fRecDecayV.fZ);
   lCascadeLocation->SetTitle("Cascade decay location");
   lCascadeLocation->SetMarkerStyle(4);
   lCascadeLocation->SetMarkerSize(2.5);
   lCascadeLocation->SetMarkerColor(kMagenta-9);

  TEveUtil::LoadMacro("clusters_from_index.C");
  
  AliEveTrack *bacTrack = fM->GetBacTrack();
  AliEveTrack *negTrack = fM->GetNegTrack();
  AliEveTrack *posTrack = fM->GetPosTrack();
  
  char macroWithIndex[100] = {0};
  Int_t daughterIndex = 0;
  
  TEvePointSet *bacDaughterCluster = 0;
  TEvePointSet *negDaughterCluster = 0;
  TEvePointSet *posDaughterCluster = 0;
  
  // Clusters linked with the bachelor track
  daughterIndex = bacTrack->GetIndex();
  snprintf(macroWithIndex,100,"clusters_from_index(%d)",daughterIndex);
  Long_t bacResult = gInterpreter->ProcessLine(macroWithIndex);
  if (bacResult) {
	  bacDaughterCluster = reinterpret_cast<TEvePointSet*>(bacResult);
	  if (bacDaughterCluster){
		  bacDaughterCluster->SetMarkerStyle(4);	
		  bacDaughterCluster->SetMarkerSize(1.5);	
		  bacDaughterCluster->SetMarkerColor(kMagenta);
	  }
  }
  else
  {
	  Warning("DisplayDetailed", "Cascade : Import of bachelor clusters failed.");
  }
  
  // Clusters linked with the negative daughter track (V0)
  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", "Cascade : Import of negative daughter's clusters failed.");
  }

  // Clusters linked with the positive daughter track (V0)
  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", "Cascade : Import of positive daughter's clusters failed.");
  }

  
  
  
  //----------
  // Part 1 : bending plane view
  //
  pack->NewSlot()->MakeCurrent();
  TEveViewer *bpViewer = gEve->SpawnNewViewer("Cascade bending plane");
  TEveScene  *bpScene  = gEve->SpawnNewScene("Cascade bending plane Scene");

  TEveProjectionManager *projMgr = new TEveProjectionManager(TEveProjection::kPT_RPhi);
  bpScene->AddElement(projMgr);

  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);
	  projMgr->ImportElements(geomRPhi);
	  projMgr->SetCurrentDepth(0);
  }
  else
  {
	  Warning("DisplayDetailed", "Cascade (bending plane view) : Import of R-Phi geometry failed.");
  }

  projMgr->ImportElements(fM);
  projMgr->ImportElements(lPrimVtxLocation);
  projMgr->ImportElements(lCascadeLocation);
  bpViewer->AddScene(bpScene);

  if (bacDaughterCluster) projMgr->ImportElements(bacDaughterCluster);
  if (negDaughterCluster) projMgr->ImportElements(negDaughterCluster);
  if (posDaughterCluster) projMgr->ImportElements(posDaughterCluster);
  
  // This is the to-do list for the bending plane:
  // 1. show the V0 daughters track + corresponding clusters                        -> to do ...
  // 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
  // lbpGLViewer->RequestDraw();
  // end of the bending plane part

  
  
  
  //----------
  // Part 2 : decay plane view
  //
  pack->NewSlot()->MakeCurrent();
  TEveViewer *dpViewer = gEve->SpawnNewViewer("Cascade decay plane");
  TEveScene  *dpScene  = gEve->SpawnNewScene("Cascade decay plane Scene");

  

  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", "Cascade (decay plane view) : Import of 3D geometry  failed.");
  }

  dpViewer->AddScene(dpScene);
  dpScene->AddElement(fM);
  dpScene->AddElement(lPrimVtxLocation);
  dpScene->AddElement(lCascadeLocation);
  if (bacDaughterCluster) dpScene->AddElement(bacDaughterCluster);
  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)
  // 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 Xi daughters and the extrapolation to the main vertex.
  //       -> this is an issue since we only store the distance: check with J.Belikov
  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

  
  
  
  //----------
  // Part 3 : displaying extra 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,"Xi dghtrs dca = %.4f [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);

  
  if(fM->GetCharge() < 0){
	  snprintf(info,100,"mass_{#Xi^{-}} : %.3f [GeV/c^{2}]", fM->GetXiMinusInvMass()    );
	  ltx->DrawLatex(0.05, 0.3, info);
	  snprintf(info,100,"mass_{#Omega^{-}} : %.3f [GeV/c^{2}]", fM->GetOmegaMinusInvMass() );
	  ltx->DrawLatex(0.05, 0.2, info);
  }
  else {
	  snprintf(info,100,"mass_{#Xi^{+}} : %.3f [GeV/c^{2}]", fM->GetXiPlusInvMass()     );
	  ltx->DrawLatex(0.05, 0.3, info);
	  snprintf(info,100,"mass_{#Omega^{+}} : %.3f [GeV/c^{2}]", fM->GetOmegaPlusInvMass()  );
	  ltx->DrawLatex(0.05, 0.2, info);
  }
  
  gEve->Redraw3D();
}

void AliEveCascadeEditor::DisplayMassHyp()
{	
   // Printf the proper mass hypotheses, according to the charge of the Bachelor
	printf("\n--> Mass Hyp:");
	
	if(fM->GetCharge() < 0){
		printf("Xi-    mass hyp : %f GeV/c^2}\n", fM->GetXiMinusInvMass()    );
		printf("Omega- mass hyp : %f GeV/c^2\n\n", fM->GetOmegaMinusInvMass() );
	}
	else{
		printf("Xi+    mass hyp : %f GeV/c^2\n", fM->GetXiPlusInvMass()     );
		printf("Omega+ mass hyp : %f GeV/c^2\n\n", fM->GetOmegaPlusInvMass()  );
	}
}
 AliEveCascadeEditor.cxx:1
 AliEveCascadeEditor.cxx:2
 AliEveCascadeEditor.cxx:3
 AliEveCascadeEditor.cxx:4
 AliEveCascadeEditor.cxx:5
 AliEveCascadeEditor.cxx:6
 AliEveCascadeEditor.cxx:7
 AliEveCascadeEditor.cxx:8
 AliEveCascadeEditor.cxx:9
 AliEveCascadeEditor.cxx:10
 AliEveCascadeEditor.cxx:11
 AliEveCascadeEditor.cxx:12
 AliEveCascadeEditor.cxx:13
 AliEveCascadeEditor.cxx:14
 AliEveCascadeEditor.cxx:15
 AliEveCascadeEditor.cxx:16
 AliEveCascadeEditor.cxx:17
 AliEveCascadeEditor.cxx:18
 AliEveCascadeEditor.cxx:19
 AliEveCascadeEditor.cxx:20
 AliEveCascadeEditor.cxx:21
 AliEveCascadeEditor.cxx:22
 AliEveCascadeEditor.cxx:23
 AliEveCascadeEditor.cxx:24
 AliEveCascadeEditor.cxx:25
 AliEveCascadeEditor.cxx:26
 AliEveCascadeEditor.cxx:27
 AliEveCascadeEditor.cxx:28
 AliEveCascadeEditor.cxx:29
 AliEveCascadeEditor.cxx:30
 AliEveCascadeEditor.cxx:31
 AliEveCascadeEditor.cxx:32
 AliEveCascadeEditor.cxx:33
 AliEveCascadeEditor.cxx:34
 AliEveCascadeEditor.cxx:35
 AliEveCascadeEditor.cxx:36
 AliEveCascadeEditor.cxx:37
 AliEveCascadeEditor.cxx:38
 AliEveCascadeEditor.cxx:39
 AliEveCascadeEditor.cxx:40
 AliEveCascadeEditor.cxx:41
 AliEveCascadeEditor.cxx:42
 AliEveCascadeEditor.cxx:43
 AliEveCascadeEditor.cxx:44
 AliEveCascadeEditor.cxx:45
 AliEveCascadeEditor.cxx:46
 AliEveCascadeEditor.cxx:47
 AliEveCascadeEditor.cxx:48
 AliEveCascadeEditor.cxx:49
 AliEveCascadeEditor.cxx:50
 AliEveCascadeEditor.cxx:51
 AliEveCascadeEditor.cxx:52
 AliEveCascadeEditor.cxx:53
 AliEveCascadeEditor.cxx:54
 AliEveCascadeEditor.cxx:55
 AliEveCascadeEditor.cxx:56
 AliEveCascadeEditor.cxx:57
 AliEveCascadeEditor.cxx:58
 AliEveCascadeEditor.cxx:59
 AliEveCascadeEditor.cxx:60
 AliEveCascadeEditor.cxx:61
 AliEveCascadeEditor.cxx:62
 AliEveCascadeEditor.cxx:63
 AliEveCascadeEditor.cxx:64
 AliEveCascadeEditor.cxx:65
 AliEveCascadeEditor.cxx:66
 AliEveCascadeEditor.cxx:67
 AliEveCascadeEditor.cxx:68
 AliEveCascadeEditor.cxx:69
 AliEveCascadeEditor.cxx:70
 AliEveCascadeEditor.cxx:71
 AliEveCascadeEditor.cxx:72
 AliEveCascadeEditor.cxx:73
 AliEveCascadeEditor.cxx:74
 AliEveCascadeEditor.cxx:75
 AliEveCascadeEditor.cxx:76
 AliEveCascadeEditor.cxx:77
 AliEveCascadeEditor.cxx:78
 AliEveCascadeEditor.cxx:79
 AliEveCascadeEditor.cxx:80
 AliEveCascadeEditor.cxx:81
 AliEveCascadeEditor.cxx:82
 AliEveCascadeEditor.cxx:83
 AliEveCascadeEditor.cxx:84
 AliEveCascadeEditor.cxx:85
 AliEveCascadeEditor.cxx:86
 AliEveCascadeEditor.cxx:87
 AliEveCascadeEditor.cxx:88
 AliEveCascadeEditor.cxx:89
 AliEveCascadeEditor.cxx:90
 AliEveCascadeEditor.cxx:91
 AliEveCascadeEditor.cxx:92
 AliEveCascadeEditor.cxx:93
 AliEveCascadeEditor.cxx:94
 AliEveCascadeEditor.cxx:95
 AliEveCascadeEditor.cxx:96
 AliEveCascadeEditor.cxx:97
 AliEveCascadeEditor.cxx:98
 AliEveCascadeEditor.cxx:99
 AliEveCascadeEditor.cxx:100
 AliEveCascadeEditor.cxx:101
 AliEveCascadeEditor.cxx:102
 AliEveCascadeEditor.cxx:103
 AliEveCascadeEditor.cxx:104
 AliEveCascadeEditor.cxx:105
 AliEveCascadeEditor.cxx:106
 AliEveCascadeEditor.cxx:107
 AliEveCascadeEditor.cxx:108
 AliEveCascadeEditor.cxx:109
 AliEveCascadeEditor.cxx:110
 AliEveCascadeEditor.cxx:111
 AliEveCascadeEditor.cxx:112
 AliEveCascadeEditor.cxx:113
 AliEveCascadeEditor.cxx:114
 AliEveCascadeEditor.cxx:115
 AliEveCascadeEditor.cxx:116
 AliEveCascadeEditor.cxx:117
 AliEveCascadeEditor.cxx:118
 AliEveCascadeEditor.cxx:119
 AliEveCascadeEditor.cxx:120
 AliEveCascadeEditor.cxx:121
 AliEveCascadeEditor.cxx:122
 AliEveCascadeEditor.cxx:123
 AliEveCascadeEditor.cxx:124
 AliEveCascadeEditor.cxx:125
 AliEveCascadeEditor.cxx:126
 AliEveCascadeEditor.cxx:127
 AliEveCascadeEditor.cxx:128
 AliEveCascadeEditor.cxx:129
 AliEveCascadeEditor.cxx:130
 AliEveCascadeEditor.cxx:131
 AliEveCascadeEditor.cxx:132
 AliEveCascadeEditor.cxx:133
 AliEveCascadeEditor.cxx:134
 AliEveCascadeEditor.cxx:135
 AliEveCascadeEditor.cxx:136
 AliEveCascadeEditor.cxx:137
 AliEveCascadeEditor.cxx:138
 AliEveCascadeEditor.cxx:139
 AliEveCascadeEditor.cxx:140
 AliEveCascadeEditor.cxx:141
 AliEveCascadeEditor.cxx:142
 AliEveCascadeEditor.cxx:143
 AliEveCascadeEditor.cxx:144
 AliEveCascadeEditor.cxx:145
 AliEveCascadeEditor.cxx:146
 AliEveCascadeEditor.cxx:147
 AliEveCascadeEditor.cxx:148
 AliEveCascadeEditor.cxx:149
 AliEveCascadeEditor.cxx:150
 AliEveCascadeEditor.cxx:151
 AliEveCascadeEditor.cxx:152
 AliEveCascadeEditor.cxx:153
 AliEveCascadeEditor.cxx:154
 AliEveCascadeEditor.cxx:155
 AliEveCascadeEditor.cxx:156
 AliEveCascadeEditor.cxx:157
 AliEveCascadeEditor.cxx:158
 AliEveCascadeEditor.cxx:159
 AliEveCascadeEditor.cxx:160
 AliEveCascadeEditor.cxx:161
 AliEveCascadeEditor.cxx:162
 AliEveCascadeEditor.cxx:163
 AliEveCascadeEditor.cxx:164
 AliEveCascadeEditor.cxx:165
 AliEveCascadeEditor.cxx:166
 AliEveCascadeEditor.cxx:167
 AliEveCascadeEditor.cxx:168
 AliEveCascadeEditor.cxx:169
 AliEveCascadeEditor.cxx:170
 AliEveCascadeEditor.cxx:171
 AliEveCascadeEditor.cxx:172
 AliEveCascadeEditor.cxx:173
 AliEveCascadeEditor.cxx:174
 AliEveCascadeEditor.cxx:175
 AliEveCascadeEditor.cxx:176
 AliEveCascadeEditor.cxx:177
 AliEveCascadeEditor.cxx:178
 AliEveCascadeEditor.cxx:179
 AliEveCascadeEditor.cxx:180
 AliEveCascadeEditor.cxx:181
 AliEveCascadeEditor.cxx:182
 AliEveCascadeEditor.cxx:183
 AliEveCascadeEditor.cxx:184
 AliEveCascadeEditor.cxx:185
 AliEveCascadeEditor.cxx:186
 AliEveCascadeEditor.cxx:187
 AliEveCascadeEditor.cxx:188
 AliEveCascadeEditor.cxx:189
 AliEveCascadeEditor.cxx:190
 AliEveCascadeEditor.cxx:191
 AliEveCascadeEditor.cxx:192
 AliEveCascadeEditor.cxx:193
 AliEveCascadeEditor.cxx:194
 AliEveCascadeEditor.cxx:195
 AliEveCascadeEditor.cxx:196
 AliEveCascadeEditor.cxx:197
 AliEveCascadeEditor.cxx:198
 AliEveCascadeEditor.cxx:199
 AliEveCascadeEditor.cxx:200
 AliEveCascadeEditor.cxx:201
 AliEveCascadeEditor.cxx:202
 AliEveCascadeEditor.cxx:203
 AliEveCascadeEditor.cxx:204
 AliEveCascadeEditor.cxx:205
 AliEveCascadeEditor.cxx:206
 AliEveCascadeEditor.cxx:207
 AliEveCascadeEditor.cxx:208
 AliEveCascadeEditor.cxx:209
 AliEveCascadeEditor.cxx:210
 AliEveCascadeEditor.cxx:211
 AliEveCascadeEditor.cxx:212
 AliEveCascadeEditor.cxx:213
 AliEveCascadeEditor.cxx:214
 AliEveCascadeEditor.cxx:215
 AliEveCascadeEditor.cxx:216
 AliEveCascadeEditor.cxx:217
 AliEveCascadeEditor.cxx:218
 AliEveCascadeEditor.cxx:219
 AliEveCascadeEditor.cxx:220
 AliEveCascadeEditor.cxx:221
 AliEveCascadeEditor.cxx:222
 AliEveCascadeEditor.cxx:223
 AliEveCascadeEditor.cxx:224
 AliEveCascadeEditor.cxx:225
 AliEveCascadeEditor.cxx:226
 AliEveCascadeEditor.cxx:227
 AliEveCascadeEditor.cxx:228
 AliEveCascadeEditor.cxx:229
 AliEveCascadeEditor.cxx:230
 AliEveCascadeEditor.cxx:231
 AliEveCascadeEditor.cxx:232
 AliEveCascadeEditor.cxx:233
 AliEveCascadeEditor.cxx:234
 AliEveCascadeEditor.cxx:235
 AliEveCascadeEditor.cxx:236
 AliEveCascadeEditor.cxx:237
 AliEveCascadeEditor.cxx:238
 AliEveCascadeEditor.cxx:239
 AliEveCascadeEditor.cxx:240
 AliEveCascadeEditor.cxx:241
 AliEveCascadeEditor.cxx:242
 AliEveCascadeEditor.cxx:243
 AliEveCascadeEditor.cxx:244
 AliEveCascadeEditor.cxx:245
 AliEveCascadeEditor.cxx:246
 AliEveCascadeEditor.cxx:247
 AliEveCascadeEditor.cxx:248
 AliEveCascadeEditor.cxx:249
 AliEveCascadeEditor.cxx:250
 AliEveCascadeEditor.cxx:251
 AliEveCascadeEditor.cxx:252
 AliEveCascadeEditor.cxx:253
 AliEveCascadeEditor.cxx:254
 AliEveCascadeEditor.cxx:255
 AliEveCascadeEditor.cxx:256
 AliEveCascadeEditor.cxx:257
 AliEveCascadeEditor.cxx:258
 AliEveCascadeEditor.cxx:259
 AliEveCascadeEditor.cxx:260
 AliEveCascadeEditor.cxx:261
 AliEveCascadeEditor.cxx:262
 AliEveCascadeEditor.cxx:263
 AliEveCascadeEditor.cxx:264
 AliEveCascadeEditor.cxx:265
 AliEveCascadeEditor.cxx:266
 AliEveCascadeEditor.cxx:267
 AliEveCascadeEditor.cxx:268
 AliEveCascadeEditor.cxx:269
 AliEveCascadeEditor.cxx:270
 AliEveCascadeEditor.cxx:271
 AliEveCascadeEditor.cxx:272
 AliEveCascadeEditor.cxx:273
 AliEveCascadeEditor.cxx:274
 AliEveCascadeEditor.cxx:275
 AliEveCascadeEditor.cxx:276
 AliEveCascadeEditor.cxx:277
 AliEveCascadeEditor.cxx:278
 AliEveCascadeEditor.cxx:279
 AliEveCascadeEditor.cxx:280
 AliEveCascadeEditor.cxx:281
 AliEveCascadeEditor.cxx:282
 AliEveCascadeEditor.cxx:283
 AliEveCascadeEditor.cxx:284
 AliEveCascadeEditor.cxx:285
 AliEveCascadeEditor.cxx:286
 AliEveCascadeEditor.cxx:287
 AliEveCascadeEditor.cxx:288
 AliEveCascadeEditor.cxx:289
 AliEveCascadeEditor.cxx:290
 AliEveCascadeEditor.cxx:291
 AliEveCascadeEditor.cxx:292
 AliEveCascadeEditor.cxx:293
 AliEveCascadeEditor.cxx:294
 AliEveCascadeEditor.cxx:295
 AliEveCascadeEditor.cxx:296
 AliEveCascadeEditor.cxx:297
 AliEveCascadeEditor.cxx:298
 AliEveCascadeEditor.cxx:299
 AliEveCascadeEditor.cxx:300
 AliEveCascadeEditor.cxx:301
 AliEveCascadeEditor.cxx:302
 AliEveCascadeEditor.cxx:303
 AliEveCascadeEditor.cxx:304
 AliEveCascadeEditor.cxx:305
 AliEveCascadeEditor.cxx:306
 AliEveCascadeEditor.cxx:307
 AliEveCascadeEditor.cxx:308
 AliEveCascadeEditor.cxx:309
 AliEveCascadeEditor.cxx:310
 AliEveCascadeEditor.cxx:311
 AliEveCascadeEditor.cxx:312
 AliEveCascadeEditor.cxx:313
 AliEveCascadeEditor.cxx:314
 AliEveCascadeEditor.cxx:315
 AliEveCascadeEditor.cxx:316
 AliEveCascadeEditor.cxx:317
 AliEveCascadeEditor.cxx:318
 AliEveCascadeEditor.cxx:319
 AliEveCascadeEditor.cxx:320
 AliEveCascadeEditor.cxx:321
 AliEveCascadeEditor.cxx:322
 AliEveCascadeEditor.cxx:323
 AliEveCascadeEditor.cxx:324
 AliEveCascadeEditor.cxx:325
 AliEveCascadeEditor.cxx:326
 AliEveCascadeEditor.cxx:327
 AliEveCascadeEditor.cxx:328
 AliEveCascadeEditor.cxx:329
 AliEveCascadeEditor.cxx:330
 AliEveCascadeEditor.cxx:331
 AliEveCascadeEditor.cxx:332
 AliEveCascadeEditor.cxx:333
 AliEveCascadeEditor.cxx:334
 AliEveCascadeEditor.cxx:335
 AliEveCascadeEditor.cxx:336
 AliEveCascadeEditor.cxx:337
 AliEveCascadeEditor.cxx:338
 AliEveCascadeEditor.cxx:339
 AliEveCascadeEditor.cxx:340
 AliEveCascadeEditor.cxx:341
 AliEveCascadeEditor.cxx:342
 AliEveCascadeEditor.cxx:343
 AliEveCascadeEditor.cxx:344
 AliEveCascadeEditor.cxx:345
 AliEveCascadeEditor.cxx:346
 AliEveCascadeEditor.cxx:347
 AliEveCascadeEditor.cxx:348
 AliEveCascadeEditor.cxx:349
 AliEveCascadeEditor.cxx:350
 AliEveCascadeEditor.cxx:351
 AliEveCascadeEditor.cxx:352
 AliEveCascadeEditor.cxx:353
 AliEveCascadeEditor.cxx:354
 AliEveCascadeEditor.cxx:355
 AliEveCascadeEditor.cxx:356
 AliEveCascadeEditor.cxx:357
 AliEveCascadeEditor.cxx:358
 AliEveCascadeEditor.cxx:359
 AliEveCascadeEditor.cxx:360
 AliEveCascadeEditor.cxx:361
 AliEveCascadeEditor.cxx:362
 AliEveCascadeEditor.cxx:363
 AliEveCascadeEditor.cxx:364
 AliEveCascadeEditor.cxx:365
 AliEveCascadeEditor.cxx:366
 AliEveCascadeEditor.cxx:367
 AliEveCascadeEditor.cxx:368
 AliEveCascadeEditor.cxx:369
 AliEveCascadeEditor.cxx:370
 AliEveCascadeEditor.cxx:371
 AliEveCascadeEditor.cxx:372
 AliEveCascadeEditor.cxx:373
 AliEveCascadeEditor.cxx:374
 AliEveCascadeEditor.cxx:375
 AliEveCascadeEditor.cxx:376
 AliEveCascadeEditor.cxx:377
 AliEveCascadeEditor.cxx:378
 AliEveCascadeEditor.cxx:379
 AliEveCascadeEditor.cxx:380
 AliEveCascadeEditor.cxx:381
 AliEveCascadeEditor.cxx:382
 AliEveCascadeEditor.cxx:383
 AliEveCascadeEditor.cxx:384
 AliEveCascadeEditor.cxx:385
 AliEveCascadeEditor.cxx:386
 AliEveCascadeEditor.cxx:387
 AliEveCascadeEditor.cxx:388
 AliEveCascadeEditor.cxx:389
 AliEveCascadeEditor.cxx:390
 AliEveCascadeEditor.cxx:391
 AliEveCascadeEditor.cxx:392
 AliEveCascadeEditor.cxx:393
 AliEveCascadeEditor.cxx:394
 AliEveCascadeEditor.cxx:395
 AliEveCascadeEditor.cxx:396
 AliEveCascadeEditor.cxx:397
 AliEveCascadeEditor.cxx:398
 AliEveCascadeEditor.cxx:399
 AliEveCascadeEditor.cxx:400
 AliEveCascadeEditor.cxx:401
 AliEveCascadeEditor.cxx:402
 AliEveCascadeEditor.cxx:403
 AliEveCascadeEditor.cxx:404
 AliEveCascadeEditor.cxx:405
 AliEveCascadeEditor.cxx:406
 AliEveCascadeEditor.cxx:407
 AliEveCascadeEditor.cxx:408
 AliEveCascadeEditor.cxx:409
 AliEveCascadeEditor.cxx:410
 AliEveCascadeEditor.cxx:411
 AliEveCascadeEditor.cxx:412
 AliEveCascadeEditor.cxx:413