ROOT logo
// $Id$
// Author: Paraskevi Ganoti: 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 "AliEveKinkEditor.h"
#include "AliEveKink.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"
#include "TMath.h"

//______________________________________________________________________________
// GUI editor for AliEveKink.
//

ClassImp(AliEveKinkEditor)

//______________________________________________________________________________
AliEveKinkEditor::AliEveKinkEditor(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),
  fInfoLabelDaughter(0),
  fXButton(0)
  // Initialize widget pointers to 0
{
  // Constructor.

  MakeTitle("AliEveKink");

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

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

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

  fM = static_cast<AliEveKink*>(obj);

  // Set values of widgets
  fInfoLabel0->SetText(Form("Radius = %f, Kink Angle = %f", fM->GetKinkRadius(), (fM->GetKinkAngle(2))*TMath::RadToDeg() ));
  fInfoLabel1->SetText(Form("Mother Pt = %f", fM->GetKinkPMotherPerp()));
  fInfoLabelDaughter->SetText(Form("Daughter Prob= %f for Pdg= %d", fM->GetDaugMaxProbPid(), fM->GetDaugMaxProbPdg()));
 
}

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

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

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

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

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

  //
  // This part is for the bending plane view
  //
  pack->NewSlot()->MakeCurrent();
  TEveViewer *bpViewer = gEve->SpawnNewViewer("Kink bending plane View");
  TEveScene  *bpScene  = gEve->SpawnNewScene("Kink bending plane Scene");
  bpViewer->AddScene(bpScene);
  bpScene->AddElement(fM);
  bpViewer->GetGLViewer()->SetCurrentCamera(TGLViewer::kCameraOrthoXOY);
  bpViewer->GetGLViewer()->ResetCamerasAfterNextUpdate();
  TGLCamera& bpCam = bpViewer->GetGLViewer()->CurrentCamera();
  bpCam.SetExternalCenter(kTRUE);
  bpCam.SetCenterVec(fM->fRecKinkPosition.fX, fM->fRecKinkPosition.fY, fM->fRecKinkPosition.fZ);

  //
  // This part is for the decay plane view
  //
  pack->NewSlot()->MakeCurrent();
  TEveViewer *dpViewer = gEve->SpawnNewViewer("Kink decay plane View");
  TEveScene  *dpScene  = gEve->SpawnNewScene("Kink decay plane Scene");
  dpViewer->AddScene(dpScene);
  dpScene->AddElement(fM);
  dpViewer->GetGLViewer()->ResetCamerasAfterNextUpdate();
  TGLCamera& dpCam = dpViewer->GetGLViewer()->CurrentCamera();
  dpCam.SetExternalCenter(kTRUE);
  dpCam.SetCenterVec(fM->fRecKinkPosition.fX, fM->fRecKinkPosition.fY, fM->fRecKinkPosition.fZ);

  // This part is for displaying the information
  slot = pack->NewSlot();
  
  TEveWindowFrame *frame = slot->MakeFrame(new TRootEmbeddedCanvas());
  frame->SetElementName("Details");
  
  char info[100] = {0};
  TLatex* ltx = new TLatex(0.1, 0.9, info);
  ltx->SetTextSize(0.08);

  snprintf(info,100,"radius = %.3f [cm]",fM->GetKinkRadius());
  ltx->DrawLatex(0.1, 0.8, info);
  snprintf(info,100,"mass_{K^{+, -}} = %.3f [GeV/c^{2}]",fM->GetInvMass(13));
  ltx->DrawLatex(0.1, 0.3, info);

  gEve->Redraw3D();
}
 AliEveKinkEditor.cxx:1
 AliEveKinkEditor.cxx:2
 AliEveKinkEditor.cxx:3
 AliEveKinkEditor.cxx:4
 AliEveKinkEditor.cxx:5
 AliEveKinkEditor.cxx:6
 AliEveKinkEditor.cxx:7
 AliEveKinkEditor.cxx:8
 AliEveKinkEditor.cxx:9
 AliEveKinkEditor.cxx:10
 AliEveKinkEditor.cxx:11
 AliEveKinkEditor.cxx:12
 AliEveKinkEditor.cxx:13
 AliEveKinkEditor.cxx:14
 AliEveKinkEditor.cxx:15
 AliEveKinkEditor.cxx:16
 AliEveKinkEditor.cxx:17
 AliEveKinkEditor.cxx:18
 AliEveKinkEditor.cxx:19
 AliEveKinkEditor.cxx:20
 AliEveKinkEditor.cxx:21
 AliEveKinkEditor.cxx:22
 AliEveKinkEditor.cxx:23
 AliEveKinkEditor.cxx:24
 AliEveKinkEditor.cxx:25
 AliEveKinkEditor.cxx:26
 AliEveKinkEditor.cxx:27
 AliEveKinkEditor.cxx:28
 AliEveKinkEditor.cxx:29
 AliEveKinkEditor.cxx:30
 AliEveKinkEditor.cxx:31
 AliEveKinkEditor.cxx:32
 AliEveKinkEditor.cxx:33
 AliEveKinkEditor.cxx:34
 AliEveKinkEditor.cxx:35
 AliEveKinkEditor.cxx:36
 AliEveKinkEditor.cxx:37
 AliEveKinkEditor.cxx:38
 AliEveKinkEditor.cxx:39
 AliEveKinkEditor.cxx:40
 AliEveKinkEditor.cxx:41
 AliEveKinkEditor.cxx:42
 AliEveKinkEditor.cxx:43
 AliEveKinkEditor.cxx:44
 AliEveKinkEditor.cxx:45
 AliEveKinkEditor.cxx:46
 AliEveKinkEditor.cxx:47
 AliEveKinkEditor.cxx:48
 AliEveKinkEditor.cxx:49
 AliEveKinkEditor.cxx:50
 AliEveKinkEditor.cxx:51
 AliEveKinkEditor.cxx:52
 AliEveKinkEditor.cxx:53
 AliEveKinkEditor.cxx:54
 AliEveKinkEditor.cxx:55
 AliEveKinkEditor.cxx:56
 AliEveKinkEditor.cxx:57
 AliEveKinkEditor.cxx:58
 AliEveKinkEditor.cxx:59
 AliEveKinkEditor.cxx:60
 AliEveKinkEditor.cxx:61
 AliEveKinkEditor.cxx:62
 AliEveKinkEditor.cxx:63
 AliEveKinkEditor.cxx:64
 AliEveKinkEditor.cxx:65
 AliEveKinkEditor.cxx:66
 AliEveKinkEditor.cxx:67
 AliEveKinkEditor.cxx:68
 AliEveKinkEditor.cxx:69
 AliEveKinkEditor.cxx:70
 AliEveKinkEditor.cxx:71
 AliEveKinkEditor.cxx:72
 AliEveKinkEditor.cxx:73
 AliEveKinkEditor.cxx:74
 AliEveKinkEditor.cxx:75
 AliEveKinkEditor.cxx:76
 AliEveKinkEditor.cxx:77
 AliEveKinkEditor.cxx:78
 AliEveKinkEditor.cxx:79
 AliEveKinkEditor.cxx:80
 AliEveKinkEditor.cxx:81
 AliEveKinkEditor.cxx:82
 AliEveKinkEditor.cxx:83
 AliEveKinkEditor.cxx:84
 AliEveKinkEditor.cxx:85
 AliEveKinkEditor.cxx:86
 AliEveKinkEditor.cxx:87
 AliEveKinkEditor.cxx:88
 AliEveKinkEditor.cxx:89
 AliEveKinkEditor.cxx:90
 AliEveKinkEditor.cxx:91
 AliEveKinkEditor.cxx:92
 AliEveKinkEditor.cxx:93
 AliEveKinkEditor.cxx:94
 AliEveKinkEditor.cxx:95
 AliEveKinkEditor.cxx:96
 AliEveKinkEditor.cxx:97
 AliEveKinkEditor.cxx:98
 AliEveKinkEditor.cxx:99
 AliEveKinkEditor.cxx:100
 AliEveKinkEditor.cxx:101
 AliEveKinkEditor.cxx:102
 AliEveKinkEditor.cxx:103
 AliEveKinkEditor.cxx:104
 AliEveKinkEditor.cxx:105
 AliEveKinkEditor.cxx:106
 AliEveKinkEditor.cxx:107
 AliEveKinkEditor.cxx:108
 AliEveKinkEditor.cxx:109
 AliEveKinkEditor.cxx:110
 AliEveKinkEditor.cxx:111
 AliEveKinkEditor.cxx:112
 AliEveKinkEditor.cxx:113
 AliEveKinkEditor.cxx:114
 AliEveKinkEditor.cxx:115
 AliEveKinkEditor.cxx:116
 AliEveKinkEditor.cxx:117
 AliEveKinkEditor.cxx:118
 AliEveKinkEditor.cxx:119
 AliEveKinkEditor.cxx:120
 AliEveKinkEditor.cxx:121
 AliEveKinkEditor.cxx:122
 AliEveKinkEditor.cxx:123
 AliEveKinkEditor.cxx:124
 AliEveKinkEditor.cxx:125
 AliEveKinkEditor.cxx:126
 AliEveKinkEditor.cxx:127
 AliEveKinkEditor.cxx:128
 AliEveKinkEditor.cxx:129
 AliEveKinkEditor.cxx:130
 AliEveKinkEditor.cxx:131
 AliEveKinkEditor.cxx:132
 AliEveKinkEditor.cxx:133
 AliEveKinkEditor.cxx:134
 AliEveKinkEditor.cxx:135
 AliEveKinkEditor.cxx:136
 AliEveKinkEditor.cxx:137
 AliEveKinkEditor.cxx:138
 AliEveKinkEditor.cxx:139
 AliEveKinkEditor.cxx:140
 AliEveKinkEditor.cxx:141
 AliEveKinkEditor.cxx:142
 AliEveKinkEditor.cxx:143
 AliEveKinkEditor.cxx:144