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 "AliEveKinkListEditor.h"
#include "AliEveKink.h"

#include "TEveGValuators.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 "TGComboBox.h"
#include "TGLabel.h"

//______________________________________________________________________________
// GUI editor for AliEveKinkList.
//

ClassImp(AliEveKinkListEditor)

//______________________________________________________________________________
AliEveKinkListEditor::AliEveKinkListEditor(const TGWindow *p, Int_t width, Int_t height,
             UInt_t options, Pixel_t back) :
  TGedFrame(p, width, height, options | kVerticalFrame, back),
  fM(0),
  fMinMaxRCut(0),
  fMinMaxKinkAngleCut (0),
  fMinMaxPt(0),
  fMinMaxInvariantMass(0),
  fDaughterSpecies(0),
  fDaughterCheckMaxPidProbability(0),
  fDaughterLevelPidProbability(0)
{
  // Constructor.

  MakeTitle("AliEveKinkList");

   fMinMaxRCut = new TEveGDoubleValuator(this,"Radius:", 130, 0);
   fMinMaxRCut->SetNELength(5);
   fMinMaxRCut->SetLabelWidth(74);
   fMinMaxRCut->Build();
   fMinMaxRCut->GetSlider()->SetWidth(200);
   fMinMaxRCut->SetLimits(0, 250, TGNumberFormat::kNESRealOne);
   fMinMaxRCut->Connect("ValueSet()", "AliEveKinkListEditor", this, "DoMinMaxRCut()");
   AddFrame(fMinMaxRCut, new TGLayoutHints(kLHintsTop, 1, 1, 1, 1));
   
   fMinMaxKinkAngleCut = new TEveGDoubleValuator(this,"Kink Angle:", 130, 0);
   fMinMaxKinkAngleCut->SetNELength(5);
   fMinMaxKinkAngleCut->SetLabelWidth(74);
   fMinMaxKinkAngleCut->Build();
   fMinMaxKinkAngleCut->GetSlider()->SetWidth(200);
   fMinMaxKinkAngleCut->SetLimits(0, 280, TGNumberFormat::kNESRealOne);
   fMinMaxKinkAngleCut->Connect("ValueSet()", "AliEveKinkListEditor", this, "DoMinMaxKinkAngleCut()");
   AddFrame(fMinMaxKinkAngleCut, new TGLayoutHints(kLHintsTop, 1, 1, 1, 1));  

   fMinMaxPt = new TEveGDoubleValuator(this,"pT:", 80, 0);
   fMinMaxPt->SetNELength(5);
   fMinMaxPt->SetLabelWidth(74);
   fMinMaxPt->Build();
   fMinMaxPt->GetSlider()->SetWidth(200);
   fMinMaxPt->SetLimits(0, 20, TGNumberFormat::kNESRealOne);
   fMinMaxPt->Connect("ValueSet()", "AliEveKinkListEditor", this, "DoMinMaxPt()");
   AddFrame(fMinMaxPt, new TGLayoutHints(kLHintsTop, 1, 1, 1, 1));

   fMinMaxInvariantMass = new TEveGDoubleValuator(this,"Inv. Mass:", 80, 0);
   fMinMaxInvariantMass->SetNELength(5);
   fMinMaxInvariantMass->SetLabelWidth(74);
   fMinMaxInvariantMass->Build();
   fMinMaxInvariantMass->GetSlider()->SetWidth(200);
   fMinMaxInvariantMass->SetLimits(0, 1.0, TGNumberFormat::kNESRealThree);
   fMinMaxInvariantMass->Connect("ValueSet()", "AliEveKinkListEditor", this, "DoMinMaxInvariantMass()");
   AddFrame(fMinMaxInvariantMass, new TGLayoutHints(kLHintsTop, 1, 1, 1, 1));
   
   TGHorizontalFrame* fDaugFrame = new TGHorizontalFrame(this);
   TGLabel* labDaug = new TGLabel(fDaugFrame, "Daug:");
   fDaugFrame->AddFrame(labDaug, new TGLayoutHints(kLHintsLeft|kLHintsBottom, 1, 1, 1, 1));
   fDaughterSpecies = new TGComboBox(fDaugFrame);
   fDaughterSpecies->AddEntry("e", 11);
   fDaughterSpecies->AddEntry("mu", 13);
   fDaughterSpecies->AddEntry("pi", 211);
   TGListBox* lbaug = fDaughterSpecies->GetListBox();
   lbaug->Resize(lbaug->GetWidth(), 2*18);
   fDaughterSpecies->Resize(45, 20);
   fDaughterSpecies->Connect("Selected(Int_t)", "AliEveKinkListEditor", this, "DoSelectDaugPid(Int_t)");
   fDaugFrame->AddFrame(fDaughterSpecies, new TGLayoutHints(kLHintsTop, 1, 1, 1, 1));
   AddFrame(fDaugFrame);

   fDaughterCheckMaxPidProbability = new TGCheckButton(fDaugFrame, "Check");
   fDaugFrame->AddFrame(fDaughterCheckMaxPidProbability, new TGLayoutHints(kLHintsLeft, 0, 2, 1, 1));
   fDaughterCheckMaxPidProbability->Connect("Toggled(Bool_t)", "AliEveKinkListEditor", this, "DoCheckDaugPid()");

   fDaughterLevelPidProbability = new TGNumberEntry(fDaugFrame, 0.5, 3, -1, TGNumberFormat::kNESRealTwo, TGNumberFormat::kNEANonNegative,TGNumberFormat::kNELLimitMinMax, 0, 1);
   fDaughterLevelPidProbability->Resize(50,20);
   fDaughterLevelPidProbability->Connect("ValueSet(Long_t)", "AliEveKinkListEditor", this, "DoSelectDaugProb()");
   fDaugFrame->AddFrame(fDaughterLevelPidProbability, new TGLayoutHints(kLHintsLeft|kLHintsExpandX, 1, 1, 1, 1)); 
}

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

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

  fM = static_cast<AliEveKinkList*>(obj);

  // Set values of widgets
  // fXYZZ->SetValue(fM->GetXYZZ());

  fMinMaxRCut->SetValues(fM->fMinRCut, fM->fMaxRCut);
  fMinMaxKinkAngleCut->SetValues(fM->fMinKinkAngle, fM->fMaxKinkAngle);
  fMinMaxPt->SetValues(fM->fMinPt, fM->fMaxPt);
  fMinMaxInvariantMass->SetValues(fM->fMinInvariantMass, fM->fMaxInvariantMass);
}

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

// Implements callback/slot methods

//______________________________________________________________________________

void AliEveKinkListEditor::DoMinMaxRCut()
{
  fM->FilterByRadius(fMinMaxRCut->GetMin(), fMinMaxRCut->GetMax());
}

void AliEveKinkListEditor::DoMinMaxKinkAngleCut()
{
  fM->FilterByKinkAngle(fMinMaxRCut->GetMin(), fMinMaxRCut->GetMax());
}

void AliEveKinkListEditor::DoMinMaxPt()
{
  fM->FilterByPt(fMinMaxPt->GetMin(), fMinMaxPt->GetMax());
}

void AliEveKinkListEditor::DoMinMaxInvariantMass()
{
    fM->FilterByInvariantMass(fMinMaxInvariantMass->GetMin(), fMinMaxInvariantMass->GetMax(),13);
}

void AliEveKinkListEditor::DoSelectDaugPid(Int_t rDaugPid)
{
  fM->SetDaugCheckedPid(rDaugPid);
  Update();
}

void AliEveKinkListEditor::DoCheckDaugPid()
{
  Int_t   lDaugPid  = fM->GetDaugCheckedPid();
  Float_t lDaugProb = fM->GetDaugCheckedProb();
  if (lDaugPid) {
    fM->FilterByCheckedPidMinProb(fDaughterCheckMaxPidProbability->IsOn(),lDaugPid,lDaugProb);
    printf("Selection for daughter pid %d prob %.2f \n",lDaugPid,lDaugProb);
    Update();
  }
}

void AliEveKinkListEditor::DoSelectDaugProb()
{
  Float_t rMinDaugProb = (Float_t)fDaughterLevelPidProbability->GetNumber();
  fM->SetDaugCheckedProb(rMinDaugProb);
  Update();
}
 AliEveKinkListEditor.cxx:1
 AliEveKinkListEditor.cxx:2
 AliEveKinkListEditor.cxx:3
 AliEveKinkListEditor.cxx:4
 AliEveKinkListEditor.cxx:5
 AliEveKinkListEditor.cxx:6
 AliEveKinkListEditor.cxx:7
 AliEveKinkListEditor.cxx:8
 AliEveKinkListEditor.cxx:9
 AliEveKinkListEditor.cxx:10
 AliEveKinkListEditor.cxx:11
 AliEveKinkListEditor.cxx:12
 AliEveKinkListEditor.cxx:13
 AliEveKinkListEditor.cxx:14
 AliEveKinkListEditor.cxx:15
 AliEveKinkListEditor.cxx:16
 AliEveKinkListEditor.cxx:17
 AliEveKinkListEditor.cxx:18
 AliEveKinkListEditor.cxx:19
 AliEveKinkListEditor.cxx:20
 AliEveKinkListEditor.cxx:21
 AliEveKinkListEditor.cxx:22
 AliEveKinkListEditor.cxx:23
 AliEveKinkListEditor.cxx:24
 AliEveKinkListEditor.cxx:25
 AliEveKinkListEditor.cxx:26
 AliEveKinkListEditor.cxx:27
 AliEveKinkListEditor.cxx:28
 AliEveKinkListEditor.cxx:29
 AliEveKinkListEditor.cxx:30
 AliEveKinkListEditor.cxx:31
 AliEveKinkListEditor.cxx:32
 AliEveKinkListEditor.cxx:33
 AliEveKinkListEditor.cxx:34
 AliEveKinkListEditor.cxx:35
 AliEveKinkListEditor.cxx:36
 AliEveKinkListEditor.cxx:37
 AliEveKinkListEditor.cxx:38
 AliEveKinkListEditor.cxx:39
 AliEveKinkListEditor.cxx:40
 AliEveKinkListEditor.cxx:41
 AliEveKinkListEditor.cxx:42
 AliEveKinkListEditor.cxx:43
 AliEveKinkListEditor.cxx:44
 AliEveKinkListEditor.cxx:45
 AliEveKinkListEditor.cxx:46
 AliEveKinkListEditor.cxx:47
 AliEveKinkListEditor.cxx:48
 AliEveKinkListEditor.cxx:49
 AliEveKinkListEditor.cxx:50
 AliEveKinkListEditor.cxx:51
 AliEveKinkListEditor.cxx:52
 AliEveKinkListEditor.cxx:53
 AliEveKinkListEditor.cxx:54
 AliEveKinkListEditor.cxx:55
 AliEveKinkListEditor.cxx:56
 AliEveKinkListEditor.cxx:57
 AliEveKinkListEditor.cxx:58
 AliEveKinkListEditor.cxx:59
 AliEveKinkListEditor.cxx:60
 AliEveKinkListEditor.cxx:61
 AliEveKinkListEditor.cxx:62
 AliEveKinkListEditor.cxx:63
 AliEveKinkListEditor.cxx:64
 AliEveKinkListEditor.cxx:65
 AliEveKinkListEditor.cxx:66
 AliEveKinkListEditor.cxx:67
 AliEveKinkListEditor.cxx:68
 AliEveKinkListEditor.cxx:69
 AliEveKinkListEditor.cxx:70
 AliEveKinkListEditor.cxx:71
 AliEveKinkListEditor.cxx:72
 AliEveKinkListEditor.cxx:73
 AliEveKinkListEditor.cxx:74
 AliEveKinkListEditor.cxx:75
 AliEveKinkListEditor.cxx:76
 AliEveKinkListEditor.cxx:77
 AliEveKinkListEditor.cxx:78
 AliEveKinkListEditor.cxx:79
 AliEveKinkListEditor.cxx:80
 AliEveKinkListEditor.cxx:81
 AliEveKinkListEditor.cxx:82
 AliEveKinkListEditor.cxx:83
 AliEveKinkListEditor.cxx:84
 AliEveKinkListEditor.cxx:85
 AliEveKinkListEditor.cxx:86
 AliEveKinkListEditor.cxx:87
 AliEveKinkListEditor.cxx:88
 AliEveKinkListEditor.cxx:89
 AliEveKinkListEditor.cxx:90
 AliEveKinkListEditor.cxx:91
 AliEveKinkListEditor.cxx:92
 AliEveKinkListEditor.cxx:93
 AliEveKinkListEditor.cxx:94
 AliEveKinkListEditor.cxx:95
 AliEveKinkListEditor.cxx:96
 AliEveKinkListEditor.cxx:97
 AliEveKinkListEditor.cxx:98
 AliEveKinkListEditor.cxx:99
 AliEveKinkListEditor.cxx:100
 AliEveKinkListEditor.cxx:101
 AliEveKinkListEditor.cxx:102
 AliEveKinkListEditor.cxx:103
 AliEveKinkListEditor.cxx:104
 AliEveKinkListEditor.cxx:105
 AliEveKinkListEditor.cxx:106
 AliEveKinkListEditor.cxx:107
 AliEveKinkListEditor.cxx:108
 AliEveKinkListEditor.cxx:109
 AliEveKinkListEditor.cxx:110
 AliEveKinkListEditor.cxx:111
 AliEveKinkListEditor.cxx:112
 AliEveKinkListEditor.cxx:113
 AliEveKinkListEditor.cxx:114
 AliEveKinkListEditor.cxx:115
 AliEveKinkListEditor.cxx:116
 AliEveKinkListEditor.cxx:117
 AliEveKinkListEditor.cxx:118
 AliEveKinkListEditor.cxx:119
 AliEveKinkListEditor.cxx:120
 AliEveKinkListEditor.cxx:121
 AliEveKinkListEditor.cxx:122
 AliEveKinkListEditor.cxx:123
 AliEveKinkListEditor.cxx:124
 AliEveKinkListEditor.cxx:125
 AliEveKinkListEditor.cxx:126
 AliEveKinkListEditor.cxx:127
 AliEveKinkListEditor.cxx:128
 AliEveKinkListEditor.cxx:129
 AliEveKinkListEditor.cxx:130
 AliEveKinkListEditor.cxx:131
 AliEveKinkListEditor.cxx:132
 AliEveKinkListEditor.cxx:133
 AliEveKinkListEditor.cxx:134
 AliEveKinkListEditor.cxx:135
 AliEveKinkListEditor.cxx:136
 AliEveKinkListEditor.cxx:137
 AliEveKinkListEditor.cxx:138
 AliEveKinkListEditor.cxx:139
 AliEveKinkListEditor.cxx:140
 AliEveKinkListEditor.cxx:141
 AliEveKinkListEditor.cxx:142
 AliEveKinkListEditor.cxx:143
 AliEveKinkListEditor.cxx:144
 AliEveKinkListEditor.cxx:145
 AliEveKinkListEditor.cxx:146
 AliEveKinkListEditor.cxx:147
 AliEveKinkListEditor.cxx:148
 AliEveKinkListEditor.cxx:149
 AliEveKinkListEditor.cxx:150
 AliEveKinkListEditor.cxx:151
 AliEveKinkListEditor.cxx:152
 AliEveKinkListEditor.cxx:153
 AliEveKinkListEditor.cxx:154
 AliEveKinkListEditor.cxx:155
 AliEveKinkListEditor.cxx:156
 AliEveKinkListEditor.cxx:157
 AliEveKinkListEditor.cxx:158
 AliEveKinkListEditor.cxx:159
 AliEveKinkListEditor.cxx:160
 AliEveKinkListEditor.cxx:161
 AliEveKinkListEditor.cxx:162
 AliEveKinkListEditor.cxx:163
 AliEveKinkListEditor.cxx:164
 AliEveKinkListEditor.cxx:165
 AliEveKinkListEditor.cxx:166
 AliEveKinkListEditor.cxx:167
 AliEveKinkListEditor.cxx:168
 AliEveKinkListEditor.cxx:169
 AliEveKinkListEditor.cxx:170
 AliEveKinkListEditor.cxx:171
 AliEveKinkListEditor.cxx:172
 AliEveKinkListEditor.cxx:173
 AliEveKinkListEditor.cxx:174
 AliEveKinkListEditor.cxx:175
 AliEveKinkListEditor.cxx:176