]> git.uio.no Git - u/mrichter/AliRoot.git/blob - EVE/EveBase/AliEveV0ListEditor.cxx
* esd_spd_tracklets
[u/mrichter/AliRoot.git] / EVE / EveBase / AliEveV0ListEditor.cxx
1 // @(#)root/eve:$Id$
2 // Author: Matevz Tadel 2007
3
4 /**************************************************************************
5  * Copyright(c) 1998-2008, ALICE Experiment at CERN, all rights reserved. *
6  * See http://aliceinfo.cern.ch/Offline/AliRoot/License.html for          *
7  * full copyright notice.                                                 *
8  **************************************************************************/
9
10 #include "AliEveV0ListEditor.h"
11 #include "AliEveV0.h"
12
13 #include "TEveGValuators.h"
14
15 #include "TVirtualPad.h"
16 #include "TColor.h"
17
18 // Cleanup these includes:
19 #include "TGLabel.h"
20 #include "TGButton.h"
21 #include "TGNumberEntry.h"
22 #include "TGColorSelect.h"
23 #include "TGDoubleSlider.h"
24 #include "TGComboBox.h"
25 #include "TGLabel.h"
26
27 //______________________________________________________________________________
28 // GUI editor for AliEveV0List.
29 //
30
31 ClassImp(AliEveV0ListEditor)
32
33 //______________________________________________________________________________
34 AliEveV0ListEditor::AliEveV0ListEditor(const TGWindow *p, Int_t width, Int_t height,
35              UInt_t options, Pixel_t back) :
36   TGedFrame(p, width, height, options | kVerticalFrame, back),
37   fM(0),
38   fMinMaxRCut(0),
39   fMinMaxDaughterDCA(0),
40   fMinMaxPt(0),
41   fNegativeSpecies(0),
42   fPositiveSpecies(0),
43   fNegativeCheckMaxPidProbability(0),
44   fPositiveCheckMaxPidProbability(0),
45   fNegativeLevelPidProbability(0),
46   fPositiveLevelPidProbability(0),
47   fMinMaxInvariantMass(0)
48 {
49   // Constructor.
50
51   MakeTitle("AliEveV0List");
52
53   // Create widgets
54   // fXYZZ = new TGSomeWidget(this, ...);
55   // AddFrame(fXYZZ, new TGLayoutHints(...));
56   // fXYZZ->Connect("SignalName()", "Reve::AliEveV0ListEditor", this, "DoXYZZ()");
57
58    fMinMaxRCut = new TEveGDoubleValuator(this,"Radius:", 130, 0);
59    fMinMaxRCut->SetNELength(5);
60    fMinMaxRCut->SetLabelWidth(74);
61    fMinMaxRCut->Build();
62    fMinMaxRCut->GetSlider()->SetWidth(200);
63    fMinMaxRCut->SetLimits(0, 100, TGNumberFormat::kNESRealOne);
64    fMinMaxRCut->Connect("ValueSet()", "AliEveV0ListEditor", this, "DoMinMaxRCut()");
65    AddFrame(fMinMaxRCut, new TGLayoutHints(kLHintsTop, 1, 1, 1, 1));
66
67    fMinMaxDaughterDCA = new TEveGDoubleValuator(this,"DCA:", 130, 0);
68    fMinMaxDaughterDCA->SetNELength(5);
69    fMinMaxDaughterDCA->SetLabelWidth(74);
70    fMinMaxDaughterDCA->Build();
71    fMinMaxDaughterDCA->GetSlider()->SetWidth(200);
72    fMinMaxDaughterDCA->SetLimits(0, 1, TGNumberFormat::kNESRealTwo);
73    fMinMaxDaughterDCA->Connect("ValueSet()", "AliEveV0ListEditor", this, "DoMinMaxDaughterDCA()");
74    AddFrame(fMinMaxDaughterDCA, new TGLayoutHints(kLHintsTop, 1, 1, 1, 1));
75
76    fMinMaxPt = new TEveGDoubleValuator(this,"pT:", 80, 0);
77    fMinMaxPt->SetNELength(5);
78    fMinMaxPt->SetLabelWidth(74);
79    fMinMaxPt->Build();
80    fMinMaxPt->GetSlider()->SetWidth(200);
81    fMinMaxPt->SetLimits(0, 20, TGNumberFormat::kNESRealOne);
82    fMinMaxPt->Connect("ValueSet()", "AliEveV0ListEditor", this, "DoMinMaxPt()");
83    AddFrame(fMinMaxPt, new TGLayoutHints(kLHintsTop, 1, 1, 1, 1));
84
85    TGHorizontalFrame* fNegFrame = new TGHorizontalFrame(this);
86    TGLabel* labNeg = new TGLabel(fNegFrame, "Neg:");
87    fNegFrame->AddFrame(labNeg, new TGLayoutHints(kLHintsLeft|kLHintsBottom, 1, 1, 1, 1));
88    fNegativeSpecies = new TGComboBox(fNegFrame);
89    fNegativeSpecies->AddEntry("e", 11);
90    fNegativeSpecies->AddEntry("mu", 13);
91    fNegativeSpecies->AddEntry("pi", 211);
92    fNegativeSpecies->AddEntry("K", 321);
93    fNegativeSpecies->AddEntry("p", 2212);
94    TGListBox* lbNeg = fNegativeSpecies->GetListBox();
95    lbNeg->Resize(lbNeg->GetWidth(), 2*18);
96    fNegativeSpecies->Resize(45, 20);
97    fNegativeSpecies->Connect("Selected(Int_t)", "AliEveV0ListEditor", this, "DoSelectNegPid(Int_t)");
98    fNegFrame->AddFrame(fNegativeSpecies, new TGLayoutHints(kLHintsTop, 1, 1, 1, 1));
99    AddFrame(fNegFrame);
100
101    fNegativeCheckMaxPidProbability = new TGCheckButton(fNegFrame, "Check");
102    fNegFrame->AddFrame(fNegativeCheckMaxPidProbability, new TGLayoutHints(kLHintsLeft, 0, 2, 1, 1));
103    fNegativeCheckMaxPidProbability->Connect("Toggled(Bool_t)", "AliEveV0ListEditor", this, "DoCheckNegPid()");
104
105    fNegativeLevelPidProbability = new TGNumberEntry(fNegFrame, 0.5, 3, -1, TGNumberFormat::kNESRealTwo, TGNumberFormat::kNEANonNegative,TGNumberFormat::kNELLimitMinMax, 0, 1);
106    fNegativeLevelPidProbability->Resize(50,20);
107    fNegativeLevelPidProbability->Connect("ValueSet(Long_t)", "AliEveV0ListEditor", this, "DoSelectNegProb()");
108    fNegFrame->AddFrame(fNegativeLevelPidProbability, new TGLayoutHints(kLHintsLeft|kLHintsExpandX, 1, 1, 1, 1));
109
110    TGHorizontalFrame* fPosFrame = new TGHorizontalFrame(this);
111    TGLabel* labPos = new TGLabel(fPosFrame, "Pos:");
112    fPosFrame->AddFrame(labPos, new TGLayoutHints(kLHintsLeft|kLHintsBottom, 1, 1, 1, 1));
113    fPositiveSpecies = new TGComboBox(fPosFrame);
114    fPositiveSpecies->AddEntry("e", 11);
115    fPositiveSpecies->AddEntry("mu", 13);
116    fPositiveSpecies->AddEntry("pi", 211);
117    fPositiveSpecies->AddEntry("K", 321);
118    fPositiveSpecies->AddEntry("p", 2212);
119    TGListBox* lbPos = fPositiveSpecies->GetListBox();
120    lbPos->Resize(lbPos->GetWidth(), 2*18);
121    fPositiveSpecies->Resize(45, 20);
122    fPositiveSpecies->Connect("Selected(Int_t)", "AliEveV0ListEditor", this, "DoSelectPosPid(Int_t)");
123    fPosFrame->AddFrame(fPositiveSpecies, new TGLayoutHints(kLHintsTop, 3, 1, 1, 1));
124    AddFrame(fPosFrame);
125
126    fPositiveCheckMaxPidProbability = new TGCheckButton(fPosFrame, "Check");
127    fPosFrame->AddFrame(fPositiveCheckMaxPidProbability, new TGLayoutHints(kLHintsLeft, 0, 2, 1, 1));
128    fPositiveCheckMaxPidProbability->Connect("Toggled(Bool_t)", "AliEveV0ListEditor", this, "DoCheckPosPid()");
129
130    fPositiveLevelPidProbability = new TGNumberEntry(fPosFrame, 0.5, 3, -1, TGNumberFormat::kNESRealTwo, TGNumberFormat::kNEANonNegative,TGNumberFormat::kNELLimitMinMax, 0, 1);
131    fPositiveLevelPidProbability->Resize(50,20);
132    fPositiveLevelPidProbability->Connect("ValueSet(Long_t)", "AliEveV0ListEditor", this, "DoSelectPosProb()");
133    fPosFrame->AddFrame(fPositiveLevelPidProbability, new TGLayoutHints(kLHintsLeft|kLHintsExpandX, 1, 1, 1, 1));
134
135    fMinMaxInvariantMass = new TEveGDoubleValuator(this,"Inv. Mass:", 80, 0);
136    fMinMaxInvariantMass->SetNELength(5);
137    fMinMaxInvariantMass->SetLabelWidth(74);
138    fMinMaxInvariantMass->Build();
139    fMinMaxInvariantMass->GetSlider()->SetWidth(200);
140    fMinMaxInvariantMass->SetLimits(0, 1.2, TGNumberFormat::kNESRealThree);
141    fMinMaxInvariantMass->Connect("ValueSet()", "AliEveV0ListEditor", this, "DoMinMaxInvariantMass()");
142    AddFrame(fMinMaxInvariantMass, new TGLayoutHints(kLHintsTop, 1, 1, 1, 1));
143 }
144
145 /******************************************************************************/
146
147 //______________________________________________________________________________
148 void AliEveV0ListEditor::SetModel(TObject* obj)
149 {
150   // Set model object.
151
152   fM = dynamic_cast<AliEveV0List*>(obj);
153
154   // Set values of widgets
155   // fXYZZ->SetValue(fM->GetXYZZ());
156
157   fMinMaxRCut->SetValues(fM->fMinRCut, fM->fMaxRCut);
158   fMinMaxDaughterDCA->SetValues(fM->fMinDaughterDCA, fM->fMaxDaughterDCA);
159   fMinMaxPt->SetValues(fM->fMinPt, fM->fMaxPt);
160   fMinMaxInvariantMass->SetValues(fM->fMinInvariantMass, fM->fMaxInvariantMass);
161 }
162
163 /******************************************************************************/
164
165 // Implements callback/slot methods
166
167 //______________________________________________________________________________
168 // void AliEveV0ListEditor::DoXYZZ()
169 // {
170 //    // Slot for XYZZ.
171 //
172 //    fM->SetXYZZ(fXYZZ->GetValue());
173 //    Update();
174 // }
175
176 void AliEveV0ListEditor::DoMinMaxRCut()
177 {
178   fM->FilterByRadius(fMinMaxRCut->GetMin(), fMinMaxRCut->GetMax());
179 }
180
181 void AliEveV0ListEditor::DoMinMaxDaughterDCA()
182 {
183   fM->FilterByDaughterDCA(fMinMaxDaughterDCA->GetMin(), fMinMaxDaughterDCA->GetMax());
184 }
185
186 void AliEveV0ListEditor::DoMinMaxPt()
187 {
188   fM->FilterByPt(fMinMaxPt->GetMin(), fMinMaxPt->GetMax());
189 }
190
191 void AliEveV0ListEditor::DoSelectNegPid(Int_t rNegPid)
192 {
193   fM->SetNegCheckedPid(rNegPid);
194   Update();
195 }
196
197 void AliEveV0ListEditor::DoCheckNegPid()
198 {
199   Int_t   lNegPid  = fM->GetNegCheckedPid();
200   Float_t lNegProb = fM->GetNegCheckedProb();
201   if (lNegPid) {
202     fM->FilterByCheckedPidMinProb(fNegativeCheckMaxPidProbability->IsOn(),0,lNegPid,lNegProb);
203     printf("Selection for negative daughter pid %d prob %.2f \n",lNegPid,lNegProb);
204     Update();
205   }
206 }
207
208 void AliEveV0ListEditor::DoSelectNegProb()
209 {
210   Float_t rMinNegProb = (Float_t)fNegativeLevelPidProbability->GetNumber();
211   fM->SetNegCheckedProb(rMinNegProb);
212   Update();
213 }
214
215 void AliEveV0ListEditor::DoSelectPosPid(Int_t rPosPid)
216 {
217   fM->SetPosCheckedPid(rPosPid);
218   Update();
219 }
220
221 void AliEveV0ListEditor::DoCheckPosPid()
222 {
223   Int_t   lPosPid  = fM->GetPosCheckedPid();
224   Float_t lPosProb = fM->GetPosCheckedProb();
225   if (lPosPid) {
226     fM->FilterByCheckedPidMinProb(fPositiveCheckMaxPidProbability->IsOn(),1,lPosPid,lPosProb);
227     printf("Selection for positive daughter pid %d prob %.2f \n",lPosPid,lPosProb);
228     Update();
229   }
230 }
231
232 void AliEveV0ListEditor::DoSelectPosProb()
233 {
234   Float_t rMinPosProb = (Float_t)fPositiveLevelPidProbability->GetNumber();
235   fM->SetPosCheckedProb(rMinPosProb);
236   Update();
237 }
238
239 void AliEveV0ListEditor::DoMinMaxInvariantMass()
240 {
241   Int_t lNegPid = fM->GetNegCheckedPid();
242   Int_t lPosPid = fM->GetPosCheckedPid();
243   if( lNegPid && lPosPid)
244     fM->FilterByInvariantMass(fMinMaxInvariantMass->GetMin(), fMinMaxInvariantMass->GetMax(),lNegPid,lPosPid);
245   else 
246     fM->FilterByInvariantMass(fMinMaxInvariantMass->GetMin(), fMinMaxInvariantMass->GetMax(),211,-211);
247 }