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 "TVirtualPad.h"
#include "TColor.h"

#include "TGLabel.h"
#include "TEveGValuators.h"

// Cleanup these includes:

//#include "TGButton.h"
//#include "TGNumberEntry.h"
//#include "TGColorSelect.h"
#include "TGDoubleSlider.h"
#include <TGComboBox.h>

#include "AliEveCascadeListEditor.h"
#include "AliEveCascade.h"



//______________________________________________________________________________
// GUI editor for AliEveCascadeList.
//

ClassImp(AliEveCascadeListEditor)

//______________________________________________________________________________
AliEveCascadeListEditor::AliEveCascadeListEditor(const TGWindow *p, Int_t width, Int_t height,
             UInt_t options, Pixel_t back) :
  TGedFrame(p, width, height, options | kVerticalFrame, back),
  fM(0),
  fCascadeSpecies(0),
  fMinMaxRCut(0),
  fMinMaxDaughterDCA(0),
  fMinMaxPt(0),
  fMinMaxInvariantMass(0)
{
  // Constructor.

  MakeTitle("AliEveCascadeList");

  // Create widgets
  // fXYZZ = new TGSomeWidget(this, ...);
  // AddFrame(fXYZZ, new TGLayoutHints(...));
  // fXYZZ->Connect("SignalName()", "Reve::AliEveCascadeListEditor", this, "DoXYZZ()");

   fMinMaxRCut = new TEveGDoubleValuator(this,"Radius:", 130, 0);
   fMinMaxRCut->SetNELength(5);
   fMinMaxRCut->SetLabelWidth(74);
   fMinMaxRCut->Build();
   fMinMaxRCut->GetSlider()->SetWidth(200);
   fMinMaxRCut->SetLimits(0, 100, TGNumberFormat::kNESRealOne);
   fMinMaxRCut->Connect("ValueSet()", "AliEveCascadeListEditor", this, "DoMinMaxRCut()");
   AddFrame(fMinMaxRCut, new TGLayoutHints(kLHintsTop, 1, 1, 1, 1));

   fMinMaxDaughterDCA = new TEveGDoubleValuator(this,"DCA:", 130, 0);
   fMinMaxDaughterDCA->SetNELength(5);
   fMinMaxDaughterDCA->SetLabelWidth(74);
   fMinMaxDaughterDCA->Build();
   fMinMaxDaughterDCA->GetSlider()->SetWidth(200);
   fMinMaxDaughterDCA->SetLimits(0, 1, TGNumberFormat::kNESRealTwo);
   fMinMaxDaughterDCA->Connect("ValueSet()", "AliEveCascadeListEditor", this, "DoMinMaxDaughterDCA()");
   AddFrame(fMinMaxDaughterDCA, new TGLayoutHints(kLHintsTop, 1, 1, 1, 1));

   fMinMaxPt = new TEveGDoubleValuator(this,"pT:", 130, 0);
   fMinMaxPt->SetNELength(5);
   fMinMaxPt->SetLabelWidth(74);
   fMinMaxPt->Build();
   fMinMaxPt->GetSlider()->SetWidth(200);
   fMinMaxPt->SetLimits(0, 20, TGNumberFormat::kNESRealOne);
   fMinMaxPt->Connect("ValueSet()", "AliEveCascadeListEditor", this, "DoMinMaxPt()");
   AddFrame(fMinMaxPt, new TGLayoutHints(kLHintsTop, 1, 1, 1, 1));
   
   
   TGHorizontalFrame* fCascadeFrame = new TGHorizontalFrame(this);
   TGLabel* labPos = new TGLabel(fCascadeFrame, "Cascade:");
   fCascadeFrame->AddFrame(labPos, new TGLayoutHints(kLHintsLeft|kLHintsBottom, 1, 1, 1, 1));
   fCascadeSpecies = new TGComboBox(fCascadeFrame);
   fCascadeSpecies->AddEntry("Xi",     kXiMinus);
   fCascadeSpecies->AddEntry("Omega",  kOmegaMinus);
   TGListBox* lbPos = fCascadeSpecies->GetListBox();
   lbPos->Resize(lbPos->GetWidth(), 2*18);
   fCascadeSpecies->Resize(45, 20);
   fCascadeSpecies->Connect("Selected(Int_t)", "AliEveCascadeListEditor", this, "DoSelectInvMassHyp(Int_t)");
   fCascadeFrame->AddFrame(fCascadeSpecies, new TGLayoutHints(kLHintsTop, 3, 1, 1, 1));
   AddFrame(fCascadeFrame);
   
   
   fMinMaxInvariantMass = new TEveGDoubleValuator(this,"Inv. Mass:", 130, 0);
   fMinMaxInvariantMass->SetNELength(5);
   fMinMaxInvariantMass->SetLabelWidth(74);
   fMinMaxInvariantMass->Build();
   fMinMaxInvariantMass->GetSlider()->SetWidth(200);
   fMinMaxInvariantMass->SetLimits(1, 6, TGNumberFormat::kNESRealThree);
   fMinMaxInvariantMass->Connect("ValueSet()", "AliEveCascadeListEditor", this, "DoMinMaxInvariantMass()");
   AddFrame(fMinMaxInvariantMass, new TGLayoutHints(kLHintsBottom, 1, 1, 1, 1));
   
}

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

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

  fM = static_cast<AliEveCascadeList*>(obj);

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

  fMinMaxRCut->SetValues(fM->fMinRCut, fM->fMaxRCut);
  fMinMaxDaughterDCA->SetValues(fM->fMinDaughterDCA, fM->fMaxDaughterDCA);
  fMinMaxPt->SetValues(fM->fMinPt, fM->fMaxPt);
  fMinMaxInvariantMass->SetValues(fM->fMinInvariantMass,fM->fMaxInvariantMass);
}

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

// Implements callback/slot methods

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

void AliEveCascadeListEditor::DoMinMaxRCut()
{
  // Filter cascade candidates by transverse radius	
	
  fM->FilterByRadius(fMinMaxRCut->GetMin(), fMinMaxRCut->GetMax());
}

void AliEveCascadeListEditor::DoMinMaxDaughterDCA()
{
  // Filter cascade candidates by DCA to primary vertex	
	
  fM->FilterByDaughterDCA(fMinMaxDaughterDCA->GetMin(), fMinMaxDaughterDCA->GetMax());
}

void AliEveCascadeListEditor::DoMinMaxPt()
{
   // Filter cascade candidates by transverse momentum
	
  fM->FilterByPt(fMinMaxPt->GetMin(), fMinMaxPt->GetMax());
}



void AliEveCascadeListEditor::DoSelectInvMassHyp(Int_t rInvMassHyp)
{
   // Apply the invariant mass hypothesis according the choice made by user
	
	fM->SetInvMassHyp(rInvMassHyp);
	Update();
}

void AliEveCascadeListEditor::DoMinMaxInvariantMass()
{
    // Filter cascade candidates by invariant mass (under mass hypothesis made by user)
	
	Int_t rInvMassHyp = fM->GetInvMassHyp();
	if(rInvMassHyp)
	fM->FilterByInvariantMass(fMinMaxInvariantMass->GetMin(), fMinMaxInvariantMass->GetMax(), rInvMassHyp);
	else 
	fM->FilterByInvariantMass(fMinMaxInvariantMass->GetMin(), fMinMaxInvariantMass->GetMax(), kXiMinus);
	
}

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