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 "AliEveV0ListEditor.h"
#include "AliEveV0.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 AliEveV0List.
//

ClassImp(AliEveV0ListEditor)

//______________________________________________________________________________
AliEveV0ListEditor::AliEveV0ListEditor(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),
  fMinMaxDaughterDCA(0),
  fMinMaxPt(0),
  fNegativeSpecies(0),
  fPositiveSpecies(0),
  fNegativeCheckMaxPidProbability(0),
  fPositiveCheckMaxPidProbability(0),
  fNegativeLevelPidProbability(0),
  fPositiveLevelPidProbability(0),
  fMinMaxInvariantMass(0)
{
  // Constructor.

  MakeTitle("AliEveV0List");

  // Create widgets
  // fXYZZ = new TGSomeWidget(this, ...);
  // AddFrame(fXYZZ, new TGLayoutHints(...));
  // fXYZZ->Connect("SignalName()", "Reve::AliEveV0ListEditor", 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()", "AliEveV0ListEditor", 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()", "AliEveV0ListEditor", this, "DoMinMaxDaughterDCA()");
   AddFrame(fMinMaxDaughterDCA, 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()", "AliEveV0ListEditor", this, "DoMinMaxPt()");
   AddFrame(fMinMaxPt, new TGLayoutHints(kLHintsTop, 1, 1, 1, 1));

   TGHorizontalFrame* fNegFrame = new TGHorizontalFrame(this);
   TGLabel* labNeg = new TGLabel(fNegFrame, "Neg:");
   fNegFrame->AddFrame(labNeg, new TGLayoutHints(kLHintsLeft|kLHintsBottom, 1, 1, 1, 1));
   fNegativeSpecies = new TGComboBox(fNegFrame);
   fNegativeSpecies->AddEntry("e", 11);
   fNegativeSpecies->AddEntry("mu", 13);
   fNegativeSpecies->AddEntry("pi", 211);
   fNegativeSpecies->AddEntry("K", 321);
   fNegativeSpecies->AddEntry("p", 2212);
   TGListBox* lbNeg = fNegativeSpecies->GetListBox();
   lbNeg->Resize(lbNeg->GetWidth(), 2*18);
   fNegativeSpecies->Resize(45, 20);
   fNegativeSpecies->Connect("Selected(Int_t)", "AliEveV0ListEditor", this, "DoSelectNegPid(Int_t)");
   fNegFrame->AddFrame(fNegativeSpecies, new TGLayoutHints(kLHintsTop, 1, 1, 1, 1));
   AddFrame(fNegFrame);

   fNegativeCheckMaxPidProbability = new TGCheckButton(fNegFrame, "Check");
   fNegFrame->AddFrame(fNegativeCheckMaxPidProbability, new TGLayoutHints(kLHintsLeft, 0, 2, 1, 1));
   fNegativeCheckMaxPidProbability->Connect("Toggled(Bool_t)", "AliEveV0ListEditor", this, "DoCheckNegPid()");

   fNegativeLevelPidProbability = new TGNumberEntry(fNegFrame, 0.5, 3, -1, TGNumberFormat::kNESRealTwo, TGNumberFormat::kNEANonNegative,TGNumberFormat::kNELLimitMinMax, 0, 1);
   fNegativeLevelPidProbability->Resize(50,20);
   fNegativeLevelPidProbability->Connect("ValueSet(Long_t)", "AliEveV0ListEditor", this, "DoSelectNegProb()");
   fNegFrame->AddFrame(fNegativeLevelPidProbability, new TGLayoutHints(kLHintsLeft|kLHintsExpandX, 1, 1, 1, 1));

   TGHorizontalFrame* fPosFrame = new TGHorizontalFrame(this);
   TGLabel* labPos = new TGLabel(fPosFrame, "Pos:");
   fPosFrame->AddFrame(labPos, new TGLayoutHints(kLHintsLeft|kLHintsBottom, 1, 1, 1, 1));
   fPositiveSpecies = new TGComboBox(fPosFrame);
   fPositiveSpecies->AddEntry("e", 11);
   fPositiveSpecies->AddEntry("mu", 13);
   fPositiveSpecies->AddEntry("pi", 211);
   fPositiveSpecies->AddEntry("K", 321);
   fPositiveSpecies->AddEntry("p", 2212);
   TGListBox* lbPos = fPositiveSpecies->GetListBox();
   lbPos->Resize(lbPos->GetWidth(), 2*18);
   fPositiveSpecies->Resize(45, 20);
   fPositiveSpecies->Connect("Selected(Int_t)", "AliEveV0ListEditor", this, "DoSelectPosPid(Int_t)");
   fPosFrame->AddFrame(fPositiveSpecies, new TGLayoutHints(kLHintsTop, 3, 1, 1, 1));
   AddFrame(fPosFrame);

   fPositiveCheckMaxPidProbability = new TGCheckButton(fPosFrame, "Check");
   fPosFrame->AddFrame(fPositiveCheckMaxPidProbability, new TGLayoutHints(kLHintsLeft, 0, 2, 1, 1));
   fPositiveCheckMaxPidProbability->Connect("Toggled(Bool_t)", "AliEveV0ListEditor", this, "DoCheckPosPid()");

   fPositiveLevelPidProbability = new TGNumberEntry(fPosFrame, 0.5, 3, -1, TGNumberFormat::kNESRealTwo, TGNumberFormat::kNEANonNegative,TGNumberFormat::kNELLimitMinMax, 0, 1);
   fPositiveLevelPidProbability->Resize(50,20);
   fPositiveLevelPidProbability->Connect("ValueSet(Long_t)", "AliEveV0ListEditor", this, "DoSelectPosProb()");
   fPosFrame->AddFrame(fPositiveLevelPidProbability, new TGLayoutHints(kLHintsLeft|kLHintsExpandX, 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.2, TGNumberFormat::kNESRealThree);
   fMinMaxInvariantMass->Connect("ValueSet()", "AliEveV0ListEditor", this, "DoMinMaxInvariantMass()");
   AddFrame(fMinMaxInvariantMass, new TGLayoutHints(kLHintsTop, 1, 1, 1, 1));
}

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

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

  fM = static_cast<AliEveV0List*>(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 AliEveV0ListEditor::DoXYZZ()
// {
//    // Slot for XYZZ.
//
//    fM->SetXYZZ(fXYZZ->GetValue());
//    Update();
// }

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

void AliEveV0ListEditor::DoMinMaxDaughterDCA()
{
  fM->FilterByDaughterDCA(fMinMaxDaughterDCA->GetMin(), fMinMaxDaughterDCA->GetMax());
}

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

void AliEveV0ListEditor::DoSelectNegPid(Int_t rNegPid)
{
  fM->SetNegCheckedPid(rNegPid);
  Update();
}

void AliEveV0ListEditor::DoCheckNegPid()
{
  Int_t   lNegPid  = fM->GetNegCheckedPid();
  Float_t lNegProb = fM->GetNegCheckedProb();
  if (lNegPid) {
    fM->FilterByCheckedPidMinProb(fNegativeCheckMaxPidProbability->IsOn(),0,lNegPid,lNegProb);
    printf("Selection for negative daughter pid %d prob %.2f \n",lNegPid,lNegProb);
    Update();
  }
}

void AliEveV0ListEditor::DoSelectNegProb()
{
  Float_t rMinNegProb = (Float_t)fNegativeLevelPidProbability->GetNumber();
  fM->SetNegCheckedProb(rMinNegProb);
  Update();
}

void AliEveV0ListEditor::DoSelectPosPid(Int_t rPosPid)
{
  fM->SetPosCheckedPid(rPosPid);
  Update();
}

void AliEveV0ListEditor::DoCheckPosPid()
{
  Int_t   lPosPid  = fM->GetPosCheckedPid();
  Float_t lPosProb = fM->GetPosCheckedProb();
  if (lPosPid) {
    fM->FilterByCheckedPidMinProb(fPositiveCheckMaxPidProbability->IsOn(),1,lPosPid,lPosProb);
    printf("Selection for positive daughter pid %d prob %.2f \n",lPosPid,lPosProb);
    Update();
  }
}

void AliEveV0ListEditor::DoSelectPosProb()
{
  Float_t rMinPosProb = (Float_t)fPositiveLevelPidProbability->GetNumber();
  fM->SetPosCheckedProb(rMinPosProb);
  Update();
}

void AliEveV0ListEditor::DoMinMaxInvariantMass()
{
  Int_t lNegPid = fM->GetNegCheckedPid();
  Int_t lPosPid = fM->GetPosCheckedPid();
  if( lNegPid && lPosPid)
    fM->FilterByInvariantMass(fMinMaxInvariantMass->GetMin(), fMinMaxInvariantMass->GetMax(),lNegPid,lPosPid);
  else 
    fM->FilterByInvariantMass(fMinMaxInvariantMass->GetMin(), fMinMaxInvariantMass->GetMax(),211,-211);
}
 AliEveV0ListEditor.cxx:1
 AliEveV0ListEditor.cxx:2
 AliEveV0ListEditor.cxx:3
 AliEveV0ListEditor.cxx:4
 AliEveV0ListEditor.cxx:5
 AliEveV0ListEditor.cxx:6
 AliEveV0ListEditor.cxx:7
 AliEveV0ListEditor.cxx:8
 AliEveV0ListEditor.cxx:9
 AliEveV0ListEditor.cxx:10
 AliEveV0ListEditor.cxx:11
 AliEveV0ListEditor.cxx:12
 AliEveV0ListEditor.cxx:13
 AliEveV0ListEditor.cxx:14
 AliEveV0ListEditor.cxx:15
 AliEveV0ListEditor.cxx:16
 AliEveV0ListEditor.cxx:17
 AliEveV0ListEditor.cxx:18
 AliEveV0ListEditor.cxx:19
 AliEveV0ListEditor.cxx:20
 AliEveV0ListEditor.cxx:21
 AliEveV0ListEditor.cxx:22
 AliEveV0ListEditor.cxx:23
 AliEveV0ListEditor.cxx:24
 AliEveV0ListEditor.cxx:25
 AliEveV0ListEditor.cxx:26
 AliEveV0ListEditor.cxx:27
 AliEveV0ListEditor.cxx:28
 AliEveV0ListEditor.cxx:29
 AliEveV0ListEditor.cxx:30
 AliEveV0ListEditor.cxx:31
 AliEveV0ListEditor.cxx:32
 AliEveV0ListEditor.cxx:33
 AliEveV0ListEditor.cxx:34
 AliEveV0ListEditor.cxx:35
 AliEveV0ListEditor.cxx:36
 AliEveV0ListEditor.cxx:37
 AliEveV0ListEditor.cxx:38
 AliEveV0ListEditor.cxx:39
 AliEveV0ListEditor.cxx:40
 AliEveV0ListEditor.cxx:41
 AliEveV0ListEditor.cxx:42
 AliEveV0ListEditor.cxx:43
 AliEveV0ListEditor.cxx:44
 AliEveV0ListEditor.cxx:45
 AliEveV0ListEditor.cxx:46
 AliEveV0ListEditor.cxx:47
 AliEveV0ListEditor.cxx:48
 AliEveV0ListEditor.cxx:49
 AliEveV0ListEditor.cxx:50
 AliEveV0ListEditor.cxx:51
 AliEveV0ListEditor.cxx:52
 AliEveV0ListEditor.cxx:53
 AliEveV0ListEditor.cxx:54
 AliEveV0ListEditor.cxx:55
 AliEveV0ListEditor.cxx:56
 AliEveV0ListEditor.cxx:57
 AliEveV0ListEditor.cxx:58
 AliEveV0ListEditor.cxx:59
 AliEveV0ListEditor.cxx:60
 AliEveV0ListEditor.cxx:61
 AliEveV0ListEditor.cxx:62
 AliEveV0ListEditor.cxx:63
 AliEveV0ListEditor.cxx:64
 AliEveV0ListEditor.cxx:65
 AliEveV0ListEditor.cxx:66
 AliEveV0ListEditor.cxx:67
 AliEveV0ListEditor.cxx:68
 AliEveV0ListEditor.cxx:69
 AliEveV0ListEditor.cxx:70
 AliEveV0ListEditor.cxx:71
 AliEveV0ListEditor.cxx:72
 AliEveV0ListEditor.cxx:73
 AliEveV0ListEditor.cxx:74
 AliEveV0ListEditor.cxx:75
 AliEveV0ListEditor.cxx:76
 AliEveV0ListEditor.cxx:77
 AliEveV0ListEditor.cxx:78
 AliEveV0ListEditor.cxx:79
 AliEveV0ListEditor.cxx:80
 AliEveV0ListEditor.cxx:81
 AliEveV0ListEditor.cxx:82
 AliEveV0ListEditor.cxx:83
 AliEveV0ListEditor.cxx:84
 AliEveV0ListEditor.cxx:85
 AliEveV0ListEditor.cxx:86
 AliEveV0ListEditor.cxx:87
 AliEveV0ListEditor.cxx:88
 AliEveV0ListEditor.cxx:89
 AliEveV0ListEditor.cxx:90
 AliEveV0ListEditor.cxx:91
 AliEveV0ListEditor.cxx:92
 AliEveV0ListEditor.cxx:93
 AliEveV0ListEditor.cxx:94
 AliEveV0ListEditor.cxx:95
 AliEveV0ListEditor.cxx:96
 AliEveV0ListEditor.cxx:97
 AliEveV0ListEditor.cxx:98
 AliEveV0ListEditor.cxx:99
 AliEveV0ListEditor.cxx:100
 AliEveV0ListEditor.cxx:101
 AliEveV0ListEditor.cxx:102
 AliEveV0ListEditor.cxx:103
 AliEveV0ListEditor.cxx:104
 AliEveV0ListEditor.cxx:105
 AliEveV0ListEditor.cxx:106
 AliEveV0ListEditor.cxx:107
 AliEveV0ListEditor.cxx:108
 AliEveV0ListEditor.cxx:109
 AliEveV0ListEditor.cxx:110
 AliEveV0ListEditor.cxx:111
 AliEveV0ListEditor.cxx:112
 AliEveV0ListEditor.cxx:113
 AliEveV0ListEditor.cxx:114
 AliEveV0ListEditor.cxx:115
 AliEveV0ListEditor.cxx:116
 AliEveV0ListEditor.cxx:117
 AliEveV0ListEditor.cxx:118
 AliEveV0ListEditor.cxx:119
 AliEveV0ListEditor.cxx:120
 AliEveV0ListEditor.cxx:121
 AliEveV0ListEditor.cxx:122
 AliEveV0ListEditor.cxx:123
 AliEveV0ListEditor.cxx:124
 AliEveV0ListEditor.cxx:125
 AliEveV0ListEditor.cxx:126
 AliEveV0ListEditor.cxx:127
 AliEveV0ListEditor.cxx:128
 AliEveV0ListEditor.cxx:129
 AliEveV0ListEditor.cxx:130
 AliEveV0ListEditor.cxx:131
 AliEveV0ListEditor.cxx:132
 AliEveV0ListEditor.cxx:133
 AliEveV0ListEditor.cxx:134
 AliEveV0ListEditor.cxx:135
 AliEveV0ListEditor.cxx:136
 AliEveV0ListEditor.cxx:137
 AliEveV0ListEditor.cxx:138
 AliEveV0ListEditor.cxx:139
 AliEveV0ListEditor.cxx:140
 AliEveV0ListEditor.cxx:141
 AliEveV0ListEditor.cxx:142
 AliEveV0ListEditor.cxx:143
 AliEveV0ListEditor.cxx:144
 AliEveV0ListEditor.cxx:145
 AliEveV0ListEditor.cxx:146
 AliEveV0ListEditor.cxx:147
 AliEveV0ListEditor.cxx:148
 AliEveV0ListEditor.cxx:149
 AliEveV0ListEditor.cxx:150
 AliEveV0ListEditor.cxx:151
 AliEveV0ListEditor.cxx:152
 AliEveV0ListEditor.cxx:153
 AliEveV0ListEditor.cxx:154
 AliEveV0ListEditor.cxx:155
 AliEveV0ListEditor.cxx:156
 AliEveV0ListEditor.cxx:157
 AliEveV0ListEditor.cxx:158
 AliEveV0ListEditor.cxx:159
 AliEveV0ListEditor.cxx:160
 AliEveV0ListEditor.cxx:161
 AliEveV0ListEditor.cxx:162
 AliEveV0ListEditor.cxx:163
 AliEveV0ListEditor.cxx:164
 AliEveV0ListEditor.cxx:165
 AliEveV0ListEditor.cxx:166
 AliEveV0ListEditor.cxx:167
 AliEveV0ListEditor.cxx:168
 AliEveV0ListEditor.cxx:169
 AliEveV0ListEditor.cxx:170
 AliEveV0ListEditor.cxx:171
 AliEveV0ListEditor.cxx:172
 AliEveV0ListEditor.cxx:173
 AliEveV0ListEditor.cxx:174
 AliEveV0ListEditor.cxx:175
 AliEveV0ListEditor.cxx:176
 AliEveV0ListEditor.cxx:177
 AliEveV0ListEditor.cxx:178
 AliEveV0ListEditor.cxx:179
 AliEveV0ListEditor.cxx:180
 AliEveV0ListEditor.cxx:181
 AliEveV0ListEditor.cxx:182
 AliEveV0ListEditor.cxx:183
 AliEveV0ListEditor.cxx:184
 AliEveV0ListEditor.cxx:185
 AliEveV0ListEditor.cxx:186
 AliEveV0ListEditor.cxx:187
 AliEveV0ListEditor.cxx:188
 AliEveV0ListEditor.cxx:189
 AliEveV0ListEditor.cxx:190
 AliEveV0ListEditor.cxx:191
 AliEveV0ListEditor.cxx:192
 AliEveV0ListEditor.cxx:193
 AliEveV0ListEditor.cxx:194
 AliEveV0ListEditor.cxx:195
 AliEveV0ListEditor.cxx:196
 AliEveV0ListEditor.cxx:197
 AliEveV0ListEditor.cxx:198
 AliEveV0ListEditor.cxx:199
 AliEveV0ListEditor.cxx:200
 AliEveV0ListEditor.cxx:201
 AliEveV0ListEditor.cxx:202
 AliEveV0ListEditor.cxx:203
 AliEveV0ListEditor.cxx:204
 AliEveV0ListEditor.cxx:205
 AliEveV0ListEditor.cxx:206
 AliEveV0ListEditor.cxx:207
 AliEveV0ListEditor.cxx:208
 AliEveV0ListEditor.cxx:209
 AliEveV0ListEditor.cxx:210
 AliEveV0ListEditor.cxx:211
 AliEveV0ListEditor.cxx:212
 AliEveV0ListEditor.cxx:213
 AliEveV0ListEditor.cxx:214
 AliEveV0ListEditor.cxx:215
 AliEveV0ListEditor.cxx:216
 AliEveV0ListEditor.cxx:217
 AliEveV0ListEditor.cxx:218
 AliEveV0ListEditor.cxx:219
 AliEveV0ListEditor.cxx:220
 AliEveV0ListEditor.cxx:221
 AliEveV0ListEditor.cxx:222
 AliEveV0ListEditor.cxx:223
 AliEveV0ListEditor.cxx:224
 AliEveV0ListEditor.cxx:225
 AliEveV0ListEditor.cxx:226
 AliEveV0ListEditor.cxx:227
 AliEveV0ListEditor.cxx:228
 AliEveV0ListEditor.cxx:229
 AliEveV0ListEditor.cxx:230
 AliEveV0ListEditor.cxx:231
 AliEveV0ListEditor.cxx:232
 AliEveV0ListEditor.cxx:233
 AliEveV0ListEditor.cxx:234
 AliEveV0ListEditor.cxx:235
 AliEveV0ListEditor.cxx:236
 AliEveV0ListEditor.cxx:237
 AliEveV0ListEditor.cxx:238
 AliEveV0ListEditor.cxx:239
 AliEveV0ListEditor.cxx:240
 AliEveV0ListEditor.cxx:241
 AliEveV0ListEditor.cxx:242
 AliEveV0ListEditor.cxx:243
 AliEveV0ListEditor.cxx:244
 AliEveV0ListEditor.cxx:245
 AliEveV0ListEditor.cxx:246
 AliEveV0ListEditor.cxx:247