3 #include <FairRootManager.h>
4 #include <FairRunAna.h>
9 #include <TEveBrowser.h>
10 #include <TEveEventManager.h>
11 #include <TEveGeoNode.h>
12 #include <TEveManager.h>
13 #include <TEveViewer.h>
14 #include <TEveWindow.h>
19 #include <TGLCamera.h>
20 #include <TGLViewer.h>
23 #include <TGNumberEntry.h>
26 #include <TGeoManager.h>
27 #include <TGeoVolume.h>
31 #include <TRootBrowser.h>
32 #include <TRootEmbeddedCanvas.h>
36 #include <TVirtualPad.h>
37 #include <TVirtualX.h>
55 : TEveEventManager(
"AtEventManagerProto",
""), fRootManager(FairRootManager::Instance()),
56 fRunAna(FairRunAna::Instance()), fEntry(0), fEvent(nullptr), kDrawPROn(false), drawPatternRecognition(nullptr),
57 saveASCIIevent(nullptr), fCurrentEvent(nullptr)
68 gStyle->SetOptTitle(0);
69 gStyle->SetPalette(55);
70 TEveManager::Create();
74 UInt_t widthMax = 1400, heightMax = 650;
76 gVirtualX->GetWindowSize(gClient->GetRoot()->GetId(), dummy, dummy, width, height);
87 TEveWindowSlot *slot =
nullptr;
88 TEveWindowPack *pack =
nullptr;
91 slot = TEveWindow::CreateWindowInTab(gEve->GetBrowser()->GetTabRight());
92 pack = slot->MakePack();
93 pack->SetElementName(
"AtTPC 3D/Pad plane views");
94 pack->SetHorizontal();
96 pack->SetShowTitleBar(kFALSE);
98 pack->NewSlot()->MakeCurrent();
100 TEveViewer *view3D = gEve->SpawnNewViewer(
"3D View",
"");
101 view3D->AddScene(gEve->GetGlobalScene());
102 view3D->AddScene(gEve->GetEventScene());
105 slot = pack->NewSlot();
106 TEveWindowPack *pack2 = slot->MakePack();
107 pack2->SetShowTitleBar(kFALSE);
108 pack2->SetVertical();
109 slot = pack2->NewSlot();
110 slot->StartEmbedding();
111 fPadWave =
new TCanvas(
"AtPad Canvas");
112 fPadWave->ToggleEditor();
113 slot->StopEmbedding();
116 slot = pack2->NewSlotWithWeight(1.5);
117 auto *ecvs =
new TRootEmbeddedCanvas();
118 TEveWindowFrame *frame = slot->MakeFrame(ecvs);
119 frame->SetElementName(
"AtTPC Pad Plane");
120 pack->GetEveFrame()->SetShowTitleBar(kFALSE);
121 fCvsPadPlane = ecvs->GetCanvas();
124 TEveWindowSlot *slot2 = TEveWindow::CreateWindowInTab(gEve->GetBrowser()->GetTabRight());
125 TEveWindowPack *pack3 = slot2->MakePack();
126 pack3->SetShowTitleBar(kFALSE);
127 pack3->SetElementName(
"Pad plane raw signals");
129 slot2 = pack3->NewSlotWithWeight(1.5);
130 auto *ecvs3 =
new TRootEmbeddedCanvas();
131 TEveWindowFrame *frame3 = slot2->MakeFrame(ecvs3);
132 frame3->SetElementName(
"AtTPC Pad Plane All");
133 fPadAll = ecvs3->GetCanvas();
135 slot2 = pack3->NewSlotWithWeight(1.5);
136 auto *ecvs31 =
new TRootEmbeddedCanvas();
137 TEveWindowFrame *frame31 = slot2->MakeFrame(ecvs31);
138 frame31->SetElementName(
"AtTPC Mesh");
139 fCvsMesh = ecvs31->GetCanvas();
143 TEveWindowSlot *slotH = TEveWindow::CreateWindowInTab(gEve->GetBrowser()->GetTabRight());
144 TEveWindowPack *packH = slotH->MakePack();
145 packH->SetShowTitleBar(kFALSE);
146 packH->SetHorizontal();
147 packH->SetElementName(
"Radius - Z ");
149 slotH = packH->NewSlotWithWeight(1.5);
150 auto *ecvsH1 =
new TRootEmbeddedCanvas();
151 TEveWindowFrame *frameH1 = slotH->MakeFrame(ecvsH1);
152 frameH1->SetElementName(
"Quadrant 1");
153 fCvsQuadrant1 = ecvsH1->GetCanvas();
155 slotH = packH->NewSlotWithWeight(1.5);
156 auto *ecvsH2 =
new TRootEmbeddedCanvas();
157 TEveWindowFrame *frameH2 = slotH->MakeFrame(ecvsH2);
158 frameH2->SetElementName(
"Quadrant 2");
159 fCvsQuadrant2 = ecvsH2->GetCanvas();
161 slotH = packH->NewSlotWithWeight(1.5);
162 auto *ecvsH3 =
new TRootEmbeddedCanvas();
163 TEveWindowFrame *frameH3 = slotH->MakeFrame(ecvsH3);
164 frameH3->SetElementName(
"Quadrant 3");
165 fCvsQuadrant3 = ecvsH3->GetCanvas();
167 slotH = packH->NewSlotWithWeight(1.5);
168 auto *ecvsH4 =
new TRootEmbeddedCanvas();
169 TEveWindowFrame *frameH4 = slotH->MakeFrame(ecvsH4);
170 frameH4->SetElementName(
"Quadrant 4");
171 fCvsQuadrant4 = ecvsH4->GetCanvas();
175 TEveWindowSlot *slotHEL = TEveWindow::CreateWindowInTab(gEve->GetBrowser()->GetTabRight());
176 TEveWindowPack *packHEL = slotHEL->MakePack();
177 packHEL->SetShowTitleBar(kFALSE);
178 packHEL->SetHorizontal();
179 packHEL->SetElementName(
"Radius - Energy Loss ");
181 slotHEL = packHEL->NewSlotWithWeight(1.5);
182 auto *ecvsHEL1 =
new TRootEmbeddedCanvas();
183 TEveWindowFrame *frameHEL1 = slotHEL->MakeFrame(ecvsHEL1);
184 frameHEL1->SetElementName(
"Quadrant Energy Loss 1");
185 fCvsELQuadrant1 = ecvsHEL1->GetCanvas();
187 slotHEL = packHEL->NewSlotWithWeight(1.5);
188 auto *ecvsHEL2 =
new TRootEmbeddedCanvas();
189 TEveWindowFrame *frameHEL2 = slotHEL->MakeFrame(ecvsHEL2);
190 frameHEL2->SetElementName(
"Quadrant Energy Loss 2");
191 fCvsELQuadrant2 = ecvsHEL2->GetCanvas();
193 slotHEL = packHEL->NewSlotWithWeight(1.5);
194 auto *ecvsHEL3 =
new TRootEmbeddedCanvas();
195 TEveWindowFrame *frameHEL3 = slotHEL->MakeFrame(ecvsHEL3);
196 frameHEL3->SetElementName(
"Quadrant Energy Loss 3");
197 fCvsELQuadrant3 = ecvsHEL3->GetCanvas();
199 slotHEL = packHEL->NewSlotWithWeight(1.5);
200 auto *ecvsHEL4 =
new TRootEmbeddedCanvas();
201 TEveWindowFrame *frameHEL4 = slotHEL->MakeFrame(ecvsHEL4);
202 frameHEL4->SetElementName(
"Quadrant Energy Loss 4");
203 fCvsELQuadrant4 = ecvsHEL4->GetCanvas();
206 TEveWindowSlot *slotHK = TEveWindow::CreateWindowInTab(gEve->GetBrowser()->GetTabRight());
207 TEveWindowPack *packHK = slotHK->MakePack();
208 packHK->SetShowTitleBar(kFALSE);
209 packHK->SetHorizontal();
210 packHK->SetElementName(
"Vertex - Kinematics ");
212 slotHK = packHK->NewSlotWithWeight(1.5);
213 auto *ecvsHK1 =
new TRootEmbeddedCanvas();
214 TEveWindowFrame *frameHK1 = slotHK->MakeFrame(ecvsHK1);
215 frameHK1->SetElementName(
"Vertex Position");
216 fCvsVertex = ecvsHK1->GetCanvas();
218 slotHK = packHK->NewSlotWithWeight(1.5);
219 auto *ecvsHK2 =
new TRootEmbeddedCanvas();
220 TEveWindowFrame *frameHK2 = slotHK->MakeFrame(ecvsHK2);
221 frameHK2->SetElementName(
"Angle-Angle Kinematics");
222 fCvsKineAA = ecvsHK2->GetCanvas();
224 TEveWindowSlot *slotAux = TEveWindow::CreateWindowInTab(gEve->GetBrowser()->GetTabRight());
225 TEveWindowPack *packAux = slotAux->MakePack();
226 packAux->SetShowTitleBar(kFALSE);
227 packAux->SetHorizontal();
228 packAux->SetElementName(
"Auxiliary GET Channels");
230 slotAux = packAux->NewSlotWithWeight(1.5);
231 auto *ecvsAux1 =
new TRootEmbeddedCanvas();
232 TEveWindowFrame *frameAux1 = slotAux->MakeFrame(ecvsAux1);
233 frameAux1->SetElementName(
"Auxiliary GET Channels");
234 fCvsAux = ecvsAux1->GetCanvas();
239 TGeoNode *geoNode = gGeoManager->GetTopNode();
240 auto *topNode =
new TEveGeoTopNode(gGeoManager, geoNode, option, level, nNodes);
241 gEve->AddGlobalElement(topNode);
243 Int_t transparency = 80;
247 gGeoManager->GetVolume(
"drift_volume")->SetTransparency(transparency);
261 gEve->FullRedraw3D(kTRUE);
262 fEvent = gEve->AddEvent(
this);
267 gEve->GetBrowser()->GetTabRight()->SetTab(1);
270 gEve->Redraw3D(kTRUE, kTRUE);
272 TGLViewer *dfViewer = gEve->GetDefaultGLViewer();
273 dfViewer->CurrentCamera().RotateRad(-.7, 0.5);
279 GotoEvent(fCurrentEvent->GetIntNumber());
286 std::cout <<
" Event number : " << fEntry << std::endl;
287 fRunAna->Run((Long64_t)event);
293 std::cout <<
" Event number : " << fEntry << std::endl;
294 fRunAna->Run((Long64_t)fEntry);
300 std::cout <<
" Event number : " << fEntry << std::endl;
301 fRunAna->Run((Long64_t)fEntry);
306 int event = gPad->GetEvent();
309 TObject *select = gPad->GetSelected();
312 if (select->InheritsFrom(TH2::Class())) {
313 auto *h =
dynamic_cast<TH2Poly *
>(select);
314 gPad->GetCanvas()->FeedbackMode(kTRUE);
317 int pyold = gPad->GetUniqueID();
318 int px = gPad->GetEventX();
319 int py = gPad->GetEventY();
320 float uxmin = gPad->GetUxmin();
321 float uxmax = gPad->GetUxmax();
322 int pxmin = gPad->XtoAbsPixel(uxmin);
323 int pxmax = gPad->XtoAbsPixel(uxmax);
325 gVirtualX->DrawLine(pxmin, pyold, pxmax, pyold);
326 gVirtualX->DrawLine(pxmin, py, pxmax, py);
327 gPad->SetUniqueID(py);
328 Float_t upx = gPad->AbsPixeltoX(px);
329 Float_t upy = gPad->AbsPixeltoY(py);
330 Double_t x = gPad->PadtoX(upx);
331 Double_t
y = gPad->PadtoY(upy);
332 Int_t bin = h->FindBin(x,
y);
333 const char *bin_name = h->GetBinName(bin);
336 std::cout <<
" Bin number selected : " << bin <<
" Bin name :" << bin_name << std::endl;
342 fRunAna->Run((Long64_t)fEntry);
349 TChain *chain = FairRootManager::Instance()->GetInChain();
350 Int_t Entries = chain->GetEntriesFast();
352 TEveBrowser *browser = gEve->GetBrowser();
353 browser->StartEmbedding(TRootBrowser::kLeft);
355 auto *frmMain =
new TGMainFrame(gClient->GetRoot(), 1000, 600);
356 frmMain->SetWindowName(
"XX GUI");
357 frmMain->SetCleanup(kDeepCleanup);
359 auto *hf =
new TGVerticalFrame(frmMain);
372 drawPatternRecognition =
new TGTextButton(hf,
"&Enable Pattern Recognition visualization");
373 drawPatternRecognition->SetToolTipText(
"Press to enable Pattern Recognition visualization", 400);
374 drawPatternRecognition->Connect(
"Clicked()",
"AtEventManagerProto", fInstance,
"EnableDrawPatternRecognition()");
375 hf->AddFrame(drawPatternRecognition,
new TGLayoutHints(kLHintsCenterX, 5, 5, 3, 4));
377 saveASCIIevent =
new TGTextButton(hf,
"&Save event as text file");
378 saveASCIIevent->SetToolTipText(
"Dump the waveform of each hit into a text file", 400);
379 saveASCIIevent->Connect(
"Clicked()",
"AtEventManagerProto", fInstance,
"SaveASCIIEvent()");
380 hf->AddFrame(saveASCIIevent,
new TGLayoutHints(kLHintsCenterX, 5, 5, 3, 4));
404 frmMain->AddFrame(hf);
407 TString Infile =
"Input file : ";
409 TFile *file = FairRootManager::Instance()->GetInChain()->GetFile();
410 Infile += file->GetName();
411 auto *TFName =
new TGLabel(frmMain, Infile.Data());
412 frmMain->AddFrame(TFName);
414 UInt_t RunId = FairRunAna::Instance()->getRunId();
415 TString run =
"Run Id : ";
417 auto *TRunId =
new TGLabel(frmMain, run.Data());
418 frmMain->AddFrame(TRunId);
420 TString nevent =
"No of events : ";
422 auto *TEvent =
new TGLabel(frmMain, nevent.Data());
423 frmMain->AddFrame(TEvent);
425 auto *
f =
new TGHorizontalFrame(frmMain);
426 auto *l =
new TGLabel(
f,
"Current Event:");
427 f->AddFrame(l,
new TGLayoutHints(kLHintsLeft | kLHintsCenterY, 1, 2, 1, 1));
429 fCurrentEvent =
new TGNumberEntry(
f, 0., 6, -1, TGNumberFormat::kNESInteger, TGNumberFormat::kNEANonNegative,
430 TGNumberFormat::kNELLimitMinMax, 0, Entries);
431 f->AddFrame(fCurrentEvent,
new TGLayoutHints(kLHintsLeft, 1, 1, 1, 1));
432 fCurrentEvent->Connect(
"ValueSet(Long_t)",
"AtEventManager", fInstance,
"SelectEvent()");
433 frmMain->AddFrame(
f);
445 frmMain->MapSubwindows();
447 frmMain->MapWindow();
449 browser->StopEmbedding();
450 browser->SetTabTitle(
"AtTPC Event Control", 0);
456 drawPatternRecognition->SetState(kButtonDown);
458 drawPatternRecognition->SetText(
"&Disable Vis. Recons.");
461 drawPatternRecognition->SetText(
"&Visualize Reconstruction");
464 drawPatternRecognition->SetState(kButtonUp);
470 Int_t
event = fEntry;
471 TFile *file = FairRootManager::Instance()->GetInChain()->GetFile();
472 std::string file_name = file->GetName();
473 std::string cmd =
"mv event.dat event_" + std::to_string(event) +
".dat";
474 gSystem->Exec(cmd.c_str());