ROOT logo
// @(#)root/eve:$Id$
// Main author: Davide Caffarri 2009

/**************************************************************************
 * 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 "AliEveHFEditor.h"
#include "AliEveHF.h"

#include "TVirtualPad.h"
#include "TColor.h"
#include <TDatabasePDG.h>

#include <TEveTrack.h>

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


//______________________________________________________________________________
// GUI editor for AliEveHF.
//

ClassImp(AliEveHFEditor)

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

  MakeTitle("AliEveHF");

  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));

  fInfoLabel2 = new TGLabel(this);
  fInfoLabel2->SetTextJustify(kTextLeft);
  AddFrame(fInfoLabel2, 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()", "AliEveHFEditor", this, "DisplayDetailed()");
}

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

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

  fM = static_cast<AliEveHF*>(obj);

  // Set values of widgets
  fInfoLabel0->SetText(Form("CosPointingAngle = %f",  fM->GetCosPointingAngle()));
  fInfoLabel1->SetText(Form("Pt = %f", fM->GetPt()));

  fInfoLabel2->SetText(Form("PDG Invariant Mass = %f", TDatabasePDG::Instance()->GetParticle(421)->Mass()));

}

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

// Implements callback/slot methods

//______________________________________________________________________________
// void AliEveHFEditor::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 AliEveHFEditor::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 *lhfTransverseMomentumDirection = new TEveLine(displayInfo);
  lhfTransverseMomentumDirection->SetLineColor(kOrange+8);
  lhfTransverseMomentumDirection->SetLineWidth(2);
  lhfTransverseMomentumDirection->SetLineStyle(2);
  lhfTransverseMomentumDirection->SetLineWidth(2);
  Float_t scalePt = 100.; // this needs to be available as a ruler
  lhfTransverseMomentumDirection->SetPoint(0,fM->fRecDecayHF.fX, fM->fRecDecayHF.fY, fM->fRecDecayHF.fZ);
  lhfTransverseMomentumDirection->SetPoint(1,scalePt*fM->fRecDecayMomHF.fX, scalePt*fM->fRecDecayMomHF.fY,0);

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

  TEvePointSet *hflocation = new TEvePointSet("HF location");
  hflocation->SetNextPoint(fM->fRecDecayHF.fX, fM->fRecDecayHF.fY, fM->fRecDecayHF.fZ);
  hflocation->SetTitle("HF location");
  hflocation->SetMarkerStyle(4);
  hflocation->SetMarkerSize(2.5);
  hflocation->SetMarkerColor(kOrange+8);

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

  TEveTrack *negTrack =  fM->GetNegTrack();
  TEveTrack *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("HF bending plane View");
  TEveScene  *bpScene  = gEve->SpawnNewScene("HF bending plane Scene");

  TEveUtil::LoadMacro("geom_gentle.C");
  Long_t result = gInterpreter->ProcessLine("geom_gentle_rphi()");
  if (result)
  {
    TEveGeoShape *geomRPhi = reinterpret_cast<TEveGeoShape*>(result);
    geomRPhi->IncDenyDestroy();
    TEveProjectionManager *projMgr = new TEveProjectionManager(TEveProjection::kPT_RPhi);
    projMgr->ImportElements(geomRPhi, bpScene);
  }
  else
  {
    Warning("DisplayDetailed", "Import of R-Phi geometry failed.");
  }

  bpViewer->AddScene(bpScene);
  bpScene->AddElement(fM);
  bpScene->AddElement(lhfTransverseMomentumDirection);
  bpScene->AddElement(pvlocation);
  bpScene->AddElement(hflocation);

  if (negDaughterCluster) bpScene->AddElement(negDaughterCluster);
  if (posDaughterCluster) bpScene->AddElement(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("HF decay plane View");
  TEveScene  *dpScene  = gEve->SpawnNewScene("HF 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(lhfTransverseMomentumDirection);
  dpScene->AddElement(pvlocation);
  dpScene->AddElement(hflocation);
  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->fRecDecayHF.fX, fM->fRecDecayHF.fY, fM->fRecDecayHF.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 HF
  // 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,"Cos Pointing angle = %.3f ",fM->GetCosPointingAngle());
  TLatex* ltx = new TLatex(0.05, 0.9, info);
  ltx->SetTextSize(0.08);
  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,"#eta = - ln( tan(#theta/2) ) = %.3f",fM->GetEta());
  ltx->DrawLatex(0.05, 0.6, info);

  snprintf(info,100,"D^{0} inv. mass = %.3f", fM->GetInvariantMassPart());
  ltx->DrawLatex(0.05, 0.5, info);

  snprintf(info,100,"D^{0}bar inv. mass = %.3f", fM->GetInvariantMassAntiPart());
  ltx->DrawLatex(0.05, 0.4, info);

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