ca8a6926 |
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 "AliEveV0Editor.h" |
11 | #include "AliEveV0.h" |
12 | |
13 | #include "TVirtualPad.h" |
14 | #include "TColor.h" |
15 | |
16 | // Cleanup these includes: |
17 | #include "TGLabel.h" |
18 | #include "TGButton.h" |
19 | #include "TGNumberEntry.h" |
20 | #include "TGColorSelect.h" |
21 | #include "TGDoubleSlider.h" |
22 | |
23 | |
24 | //______________________________________________________________________________ |
25 | // GUI editor for AliEveV0. |
26 | // |
27 | |
28 | ClassImp(AliEveV0Editor) |
29 | |
30 | //______________________________________________________________________________ |
31 | AliEveV0Editor::AliEveV0Editor(const TGWindow *p, Int_t width, Int_t height, |
32 | UInt_t options, Pixel_t back) : |
33 | TGedFrame(p, width, height, options | kVerticalFrame, back), |
34 | fM(0), |
35 | fInfoLabel0(0), |
36 | fInfoLabel1(0), |
2c7d7ac0 |
37 | fInfoLabelNegDaughter(0), |
38 | fInfoLabelPosDaughter(0), |
ca8a6926 |
39 | fXButton(0) |
40 | // Initialize widget pointers to 0 |
41 | { |
42 | // Constructor. |
43 | |
44 | MakeTitle("AliEveV0"); |
45 | |
46 | fInfoLabel0 = new TGLabel(this); |
47 | fInfoLabel0->SetTextJustify(kTextLeft); |
48 | AddFrame(fInfoLabel0, new TGLayoutHints(kLHintsLeft|kLHintsExpandX, |
49 | 8, 0, 2, 0)); |
50 | |
51 | fInfoLabel1 = new TGLabel(this); |
52 | fInfoLabel1->SetTextJustify(kTextLeft); |
53 | AddFrame(fInfoLabel1, new TGLayoutHints(kLHintsLeft|kLHintsExpandX, |
54 | 8, 0, 2, 0)); |
55 | |
2c7d7ac0 |
56 | fInfoLabelNegDaughter = new TGLabel(this); |
57 | fInfoLabelNegDaughter->SetTextJustify(kTextLeft); |
58 | AddFrame(fInfoLabelNegDaughter, new TGLayoutHints(kLHintsLeft|kLHintsExpandX, |
59 | 8, 0, 2, 0)); |
60 | |
61 | fInfoLabelPosDaughter = new TGLabel(this); |
62 | fInfoLabelPosDaughter->SetTextJustify(kTextLeft); |
63 | AddFrame(fInfoLabelPosDaughter, new TGLayoutHints(kLHintsLeft|kLHintsExpandX, |
64 | 8, 0, 2, 0)); |
65 | |
ca8a6926 |
66 | fXButton = new TGTextButton(this, "Detailed View"); |
67 | AddFrame(fXButton, new TGLayoutHints(kLHintsLeft|kLHintsExpandX, 1, 1, 0, 0)); |
68 | fXButton->Connect("Clicked()", "AliEveV0Editor", this, "DisplayDetailed()"); |
69 | } |
70 | |
71 | /******************************************************************************/ |
72 | |
73 | //______________________________________________________________________________ |
74 | void AliEveV0Editor::SetModel(TObject* obj) |
75 | { |
76 | // Set model object. |
77 | |
78 | fM = dynamic_cast<AliEveV0*>(obj); |
79 | |
80 | // Set values of widgets |
e1bb28b4 |
81 | fInfoLabel0->SetText(Form("Radius = %f, DCA = %f", fM->GetRadius(), fM->GetDaughterDCA())); |
82 | fInfoLabel1->SetText(Form("Pt = %f", fM->GetPt())); |
2c7d7ac0 |
83 | fInfoLabelNegDaughter->SetText(Form("Neg. Daughter Prob= %.2f for Pdg= %d", fM->GetNegMaxProbPid(), fM->GetNegMaxProbPdg())); |
84 | fInfoLabelPosDaughter->SetText(Form("Pos. Daughter Prob= %.2f for Pdg= %d", fM->GetPosMaxProbPid(), fM->GetPosMaxProbPdg())); |
85 | |
ca8a6926 |
86 | } |
87 | |
88 | /******************************************************************************/ |
89 | |
90 | // Implements callback/slot methods |
91 | |
92 | //______________________________________________________________________________ |
93 | // void AliEveV0Editor::DoXYZZ() |
94 | // { |
95 | // // Slot for XYZZ. |
96 | // |
97 | // fM->SetXYZZ(fXYZZ->GetValue()); |
98 | // Update(); |
99 | // } |
100 | |
68ca2fe7 |
101 | #include <TEveManager.h> |
102 | #include <TEveWindow.h> |
103 | #include <TEveViewer.h> |
104 | #include <TEveScene.h> |
105 | |
106 | #include <TGLCamera.h> |
107 | #include <TGLViewer.h> |
108 | |
109 | #include <TLatex.h> |
110 | #include <TRootEmbeddedCanvas.h> |
111 | |
ca8a6926 |
112 | void AliEveV0Editor::DisplayDetailed() |
113 | { |
68ca2fe7 |
114 | TEveWindowSlot *slot = TEveWindow::CreateWindowMainFrame(); |
115 | TEveWindowPack *pack = slot->MakePack(); |
116 | pack->SetShowTitleBar(kFALSE); |
e7c12214 |
117 | pack->SetHorizontal(); |
68ca2fe7 |
118 | |
e7c12214 |
119 | // |
120 | // This part is for the bending plane view |
121 | // |
122 | pack->NewSlot()->MakeCurrent(); |
123 | TEveViewer *bpViewer = gEve->SpawnNewViewer("V0 bending plane View"); |
124 | TEveScene *bpScene = gEve->SpawnNewScene("V0 bending plane Scene"); |
125 | bpViewer->AddScene(bpScene); |
126 | bpScene->AddElement(fM); |
127 | // This is the to-do list for the bending plane: |
128 | // 1. fix the view to orthographic XOY (no rotation allowed but moving the center ok) --tbu |
129 | // 2. show axis and tickles along X and Y |
130 | // 3. show the center, the main vertex and the detectors for this view; |
131 | // 4. show V0 direction in the bending plane with arrow length proportional to pT; |
132 | // 5. show angles with respect to axis (phi angle). |
133 | bpViewer->GetGLViewer()->SetCurrentCamera(TGLViewer::kCameraOrthoXOY); |
134 | // bpViewer->GetGLViewer()->GetOrthoXOYCamera()->SetEnableRotate(kFALSE); |
135 | bpViewer->GetGLViewer()->ResetCamerasAfterNextUpdate(); |
136 | // bpViewer->GetGLViewer()->ResetCamerasAfterNextUpdate(); |
137 | TGLCamera& bpCam = bpViewer->GetGLViewer()->CurrentCamera(); |
138 | bpCam.SetExternalCenter(kTRUE); |
139 | // bpCam.SetEnableRotate(kFALSE); |
140 | bpCam.SetCenterVec(fM->fRecDecayV.fX, fM->fRecDecayV.fY, fM->fRecDecayV.fZ); |
141 | // end of the bending plane part |
142 | |
143 | // |
144 | // This part is for the decay plane view |
145 | // |
146 | pack->NewSlot()->MakeCurrent(); |
147 | TEveViewer *dpViewer = gEve->SpawnNewViewer("V0 decay plane View"); |
148 | TEveScene *dpScene = gEve->SpawnNewScene("V0 decay plane Scene"); |
149 | dpViewer->AddScene(dpScene); |
150 | dpScene->AddElement(fM); |
151 | // This is the to-do list for the decay plane: |
152 | // 1. fix the view to decay plane (no rotation allowed but moving the center ok) |
153 | // 2. show V0 direction with a vertical arrow length proportional to pT; |
154 | // 3. show the center, the main vertex and the detectors for this view; |
155 | // 4. show the x,y and z axis and the different angles; |
156 | // 5. draw the dca between daughters and the extrapolation to the main vertex. |
157 | dpViewer->GetGLViewer()->ResetCamerasAfterNextUpdate(); |
158 | TGLCamera& dpCam = dpViewer->GetGLViewer()->CurrentCamera(); |
159 | dpCam.SetExternalCenter(kTRUE); |
160 | dpCam.SetCenterVec(fM->fRecDecayV.fX, fM->fRecDecayV.fY, fM->fRecDecayV.fZ); |
161 | // end of the decay plane part |
162 | |
163 | |
164 | // This part is for displaying the information |
68ca2fe7 |
165 | slot = pack->NewSlot(); |
166 | |
167 | TEveWindowFrame *frame = slot->MakeFrame(new TRootEmbeddedCanvas()); |
168 | frame->SetElementName("Details"); |
169 | |
e7c12214 |
170 | // Print and show detailed information about the V0 |
171 | // Calculation of the invariant mass with the max prob PID hypothesis first |
172 | // pseudorapidity, phi angle, pt, radius, dcas |
173 | char info[100] = {0}; |
174 | sprintf(info,"#phi = %.3f",fM->GetPhi()); |
175 | TLatex* ltx = new TLatex(0.1, 0.9, info); |
d4dbbb43 |
176 | ltx->SetTextSize(0.08); |
68ca2fe7 |
177 | ltx->Draw(); |
178 | |
e7c12214 |
179 | sprintf(info,"radius = %.3f [cm]",fM->GetRadius()); |
180 | ltx->DrawLatex(0.1, 0.8, info); |
181 | |
182 | sprintf(info,"daughters dca = %.3f [cm]",fM->GetDaughterDCA()); |
183 | ltx->DrawLatex(0.1, 0.7, info); |
184 | |
185 | sprintf(info,"#eta = #frac{1}{2} #times Ln(#frac{E+p_{z}}{E-p_{z}} ) = %.3f",fM->GetEta()); |
186 | ltx->DrawLatex(0.1, 0.6, info); |
187 | |
188 | sprintf(info,"mass_{K^{0}_{s}} = %.3f [GeV/c^{2}]",fM->GetK0sInvMass()); |
189 | ltx->DrawLatex(0.1, 0.3, info); |
190 | |
191 | sprintf(info,"mass_{#Lambda} = %.3f [GeV/c^{2}]",fM->GetLambdaInvMass()); |
192 | ltx->DrawLatex(0.1, 0.2, info); |
193 | |
194 | sprintf(info,"mass_{#bar{#Lambda}} = %.3f [GeV/c^{2}]",fM->GetAntiLambdaInvMass()); |
195 | ltx->DrawLatex(0.1, 0.1, info); |
196 | |
68ca2fe7 |
197 | gEve->Redraw3D(); |
ca8a6926 |
198 | } |