ATTPCROOT  0.3.0-alpha
A ROOT-based framework for analyzing data from active target detectors
AtEventManager.cxx
Go to the documentation of this file.
1 
2 #include "AtEventManager.h"
3 
4 #include "AtEvent.h" // for AtEvent
5 
6 #include <FairRootManager.h>
7 #include <FairRunAna.h>
8 
9 #include <Rtypes.h>
10 #include <TCanvas.h>
11 #include <TChain.h>
12 #include <TClonesArray.h> // for TClonesArray
13 #include <TEveBrowser.h>
14 #include <TEveEventManager.h>
15 #include <TEveGeoNode.h>
16 #include <TEveManager.h>
17 #include <TEveViewer.h>
18 #include <TEveWindow.h>
19 #include <TFile.h>
20 #include <TGButton.h>
21 #include <TGClient.h>
22 #include <TGFrame.h>
23 #include <TGLCamera.h>
24 #include <TGLViewer.h>
25 #include <TGLabel.h>
26 #include <TGLayout.h>
27 #include <TGNumberEntry.h>
28 #include <TGTab.h>
29 #include <TGWindow.h>
30 #include <TGeoManager.h>
31 #include <TGeoVolume.h>
32 #include <TH2.h>
33 #include <TH2Poly.h>
34 #include <TObject.h>
35 #include <TRootBrowser.h>
36 #include <TRootEmbeddedCanvas.h>
37 #include <TString.h>
38 #include <TStyle.h>
39 #include <TSystem.h>
40 #include <TVirtualPad.h>
41 #include <TVirtualX.h>
42 
43 #include "S800Ana.h"
44 #include "S800Calc.h"
45 
46 constexpr auto cRED = "\033[1;31m";
47 constexpr auto cYELLOW = "\033[1;33m";
48 constexpr auto cNORMAL = "\033[0m";
49 constexpr auto cGREEN = "\033[1;32m";
50 constexpr auto cBLUE = "\033[1;34m";
51 constexpr auto cWHITERED = "\033[37;41m";
52 
53 #include <iostream>
54 #include <string>
55 
56 class TGeoNode;
57 
58 using namespace std;
59 
61 
62 AtEventManager *AtEventManager::fInstance = nullptr;
64 {
65  return fInstance;
66 }
67 
69  : TEveEventManager("AtEventManager", ""), fRootManager(FairRootManager::Instance()), fRunAna(FairRunAna::Instance()),
70  fEntry(0), fEvent(nullptr), fCurrentEvent(nullptr), f3DThresDisplay(nullptr), fCvsPadPlane(nullptr),
71  fPadWave(nullptr), fPadAll(nullptr), fCvsQEvent(nullptr), fCvsHough(nullptr), fCvsRad(nullptr),
72  drawallpad(nullptr), eraseQevent(nullptr), drawReconstruction(nullptr), saveASCIIevent(nullptr),
73  toggleCorr(nullptr), kDrawAllOn(false), kEraseQ(false), kDrawReconstruction(false), kDraw3DGeo(false),
74  kDraw3DHist(false), kToggleData(false), k3DThreshold(0), fTofObjCorr(0), fMTDCObjRange(0), fMTDCXfRange(0),
75  cArray(nullptr), cS800Array(nullptr), cevent(nullptr), cS800Calc(nullptr), fCvsPIDFull(nullptr), fCvsPID(nullptr),
76  fCvsPID2(nullptr), fPIDFull(nullptr), fCvsPID2Full(nullptr), fPID2Full(nullptr), fEntries(0)
77 
78 {
79  fInstance = this;
80 }
81 
83 
84 /*void
85 AtEventManager::InitRiemann(Int_t option, Int_t level, Int_t nNodes)
86 {
87  TEveManager::Create();
88  fRunAna->Init();
89  fEvent= gEve->AddEvent(this);
90 }*/
91 
92 void AtEventManager::Init(Int_t option, Int_t level, Int_t nNodes)
93 {
94 
95  gStyle->SetOptTitle(0);
96  // gStyle->SetCanvasPreferGL(kTRUE);
97  gStyle->SetPalette(55);
98  TEveManager::Create();
99 
100  Int_t dummy;
101  UInt_t width, height;
102  UInt_t widthMax = 1400, heightMax = 650;
103  // Double_t ratio = (Double_t)widthMax / heightMax;
104  gVirtualX->GetWindowSize(gClient->GetRoot()->GetId(), dummy, dummy, width, height);
105  // Assume that width of screen is always larger than the height of screen
106  /*
107  if (width > widthMax) {
108  width = widthMax;
109  height = heightMax;
110  } else
111  height = (Int_t)(width / ratio);
112  */
113  // gEve->GetMainWindow()->Resize(width,height);
114 
115  /**************************************************************************/
116 
117  TEveWindowSlot *slot = nullptr;
118  TEveWindowPack *pack = nullptr;
119 
120  // 3D
121  slot = TEveWindow::CreateWindowInTab(gEve->GetBrowser()->GetTabRight());
122  pack = slot->MakePack();
123  pack->SetElementName("AtTPC 3D/Pad plane views");
124  pack->SetHorizontal();
125  // pack->SetVertical();
126  pack->SetShowTitleBar(kFALSE);
127 
128  pack->NewSlot()->MakeCurrent();
129  // if(kDraw3DGeo){
130  TEveViewer *view3D = gEve->SpawnNewViewer("3D View", "");
131  view3D->AddScene(gEve->GetGlobalScene());
132  view3D->AddScene(gEve->GetEventScene());
133  // }
134 
135  // Old arrangement
136 
137  /* slot = pack->NewSlotWithWeight(1.5);
138  TRootEmbeddedCanvas* ecvs = new TRootEmbeddedCanvas();
139  TEveWindowFrame* frame = slot->MakeFrame(ecvs);
140  frame->SetElementName("AtTPC Pad Plane");
141  pack->GetEveFrame()->SetShowTitleBar(kFALSE);
142  fCvsPadPlane = ecvs->GetCanvas();*/
143 
144  // New arrangement
145 
146  slot = pack->NewSlot();
147  TEveWindowPack *pack2 = slot->MakePack();
148  pack2->SetShowTitleBar(kFALSE);
149  pack2->SetVertical();
150  slot = pack2->NewSlot();
151  slot->StartEmbedding();
152  fPadWave = new TCanvas("AtPad Canvas");
153  fPadWave->ToggleEditor();
154  slot->StopEmbedding();
155 
156  /*slot = pack2->NewSlot();
157  slot->StartEmbedding();
158  fCvsPadPlane = new TCanvas("AtPoly");
159  fPadWave->ToggleEditor();
160  slot->StopEmbedding();
161  fCvsPadPlane->AddExec("ex","AtEventManager::DrawWave()");*/
162 
163  // Pad Plane
164  slot = pack2->NewSlotWithWeight(1.5);
165  auto *ecvs = new TRootEmbeddedCanvas();
166  TEveWindowFrame *frame = slot->MakeFrame(ecvs);
167  frame->SetElementName("AtTPC Pad Plane");
168  pack->GetEveFrame()->SetShowTitleBar(kFALSE);
169  fCvsPadPlane = ecvs->GetCanvas();
170  // fCvsPadPlane->AddExec("ex","AtEventManager::DrawWave()"); //OBSOLETE DO NOT USE
171 
172  // A test
173  /*slot = pack2->NewSlotWithWeight(1.5);
174  TRootEmbeddedCanvas* ecvs2 = new TRootEmbeddedCanvas();
175  TEveWindowFrame* frame2 = slot->MakeFrame(ecvs2);
176  frame2->SetElementName("AtTPC Pad Plane All");
177  fPadAll = ecvs2->GetCanvas();*/
178 
179  // Sixth tab 3D Histogram
180  TEveWindowSlot *slot5 = TEveWindow::CreateWindowInTab(gEve->GetBrowser()->GetTabRight());
181  TEveWindowPack *pack6 = slot5->MakePack();
182  pack6->SetShowTitleBar(kFALSE);
183  pack6->SetElementName("3D Histogram View");
184  slot5 = pack6->NewSlotWithWeight(1.5);
185  auto *ecvs6 = new TRootEmbeddedCanvas();
186  TEveWindowFrame *frame6 = slot5->MakeFrame(ecvs6);
187  frame6->SetElementName("3D Histogram View");
188  fCvs3DHist = ecvs6->GetCanvas();
189 
190  // Third tab
191  TEveWindowSlot *slot2 = TEveWindow::CreateWindowInTab(gEve->GetBrowser()->GetTabRight());
192  TEveWindowPack *pack3 = slot2->MakePack();
193  pack3->SetShowTitleBar(kFALSE);
194  pack3->SetElementName("Pad plane raw signals");
195 
196  slot2 = pack3->NewSlotWithWeight(1.5);
197  auto *ecvs3 = new TRootEmbeddedCanvas();
198  TEveWindowFrame *frame3 = slot2->MakeFrame(ecvs3);
199  frame3->SetElementName("AtTPC Pad Plane All");
200  fPadAll = ecvs3->GetCanvas();
201 
202  slot2 = pack3->NewSlotWithWeight(1.5);
203  auto *ecvs31 = new TRootEmbeddedCanvas();
204  TEveWindowFrame *frame31 = slot2->MakeFrame(ecvs31);
205  frame31->SetElementName("AtTPC Mesh");
206  fCvsMesh = ecvs31->GetCanvas();
207 
208  /* TEveWindowSlot* slot2 =
209  TEveWindow::CreateWindowInTab(gEve->GetBrowser()->GetTabRight());
210  TEveWindowPack* pack3;
211  pack3 = slot2->MakePack();
212  //pack3->SetShowTitleBar(kFALSE);
213  pack3->SetHorizontal();
214  pack3->SetElementName("Pad Plane Raw Signals");
215  TRootEmbeddedCanvas* ecvs2 = new TRootEmbeddedCanvas();
216 
217 
218  //TEveWindowFrame* frame2 = slot2->MakeFrame(ecvs2);
219 
220 
221 
222  fPadAll = ecvs2->GetCanvas();*/
223 
224  // fPadAll = new TCanvas();
225 
226  // Forth tab Reconstruction
227  TEveWindowSlot *slot3 = TEveWindow::CreateWindowInTab(gEve->GetBrowser()->GetTabRight());
228  TEveWindowPack *pack4 = slot3->MakePack();
229  pack4->SetShowTitleBar(kFALSE);
230  pack4->SetHorizontal();
231  pack4->SetElementName("Reconstruction");
232 
233  slot3 = pack4->NewSlotWithWeight(1.5);
234  auto *ecvs4 = new TRootEmbeddedCanvas();
235  TEveWindowFrame *frame4 = slot3->MakeFrame(ecvs4);
236  frame4->SetElementName("Hough Space");
237  fCvsHough = ecvs4->GetCanvas();
238 
239  slot3 = pack4->NewSlotWithWeight(1.5);
240  auto *ecvs4_add = new TRootEmbeddedCanvas();
241  TEveWindowFrame *frame4_add = slot3->MakeFrame(ecvs4_add);
242  frame4_add->SetElementName("Radius of curvature");
243  fCvsRad = ecvs4_add->GetCanvas();
244 
245  slot3 = pack4->NewSlotWithWeight(1.5);
246  auto *ecvs4_add2 = new TRootEmbeddedCanvas();
247  TEveWindowFrame *frame4_add2 = slot3->MakeFrame(ecvs4_add2);
248  frame4_add2->SetElementName("Theta");
249  fCvsTheta = ecvs4_add2->GetCanvas();
250 
251  slot3 = pack4->NewSlotWithWeight(1.5);
252  auto *ecvs4_add3 = new TRootEmbeddedCanvas();
253  TEveWindowFrame *frame4_add3 = slot3->MakeFrame(ecvs4_add3);
254  frame4_add3->SetElementName("Theta X Phi");
255  fCvsThetaxPhi = ecvs4_add3->GetCanvas();
256 
258  /* TEveWindowSlot* slotH =
259  TEveWindow::CreateWindowInTab(gEve->GetBrowser()->GetTabRight());
260  TEveWindowPack* packH = slotH->MakePack();
261  packH->SetShowTitleBar(kFALSE);
262  packH->SetHorizontal();
263  packH->SetElementName("Reconstruction (Prototype)");
264 
265  slotH = packH->NewSlotWithWeight(1.5);
266  TRootEmbeddedCanvas* ecvsH1 = new TRootEmbeddedCanvas();
267  TEveWindowFrame* frameH1 = slotH->MakeFrame(ecvsH1);
268  frameH1->SetElementName("Quadrant 1");
269  fCvsQuadrant1 = ecvsH1->GetCanvas();
270 
271  slotH = packH->NewSlotWithWeight(1.5);
272  TRootEmbeddedCanvas* ecvsH2 = new TRootEmbeddedCanvas();
273  TEveWindowFrame* frameH2 = slotH->MakeFrame(ecvsH2);
274  frameH2->SetElementName("Quadrant 2");
275  fCvsQuadrant2 = ecvsH2->GetCanvas();
276 
277  slotH = packH->NewSlotWithWeight(1.5);
278  TRootEmbeddedCanvas* ecvsH3 = new TRootEmbeddedCanvas();
279  TEveWindowFrame* frameH3 = slotH->MakeFrame(ecvsH3);
280  frameH3->SetElementName("Quadrant 3");
281  fCvsQuadrant3 = ecvsH3->GetCanvas();
282 
283  slotH = packH->NewSlotWithWeight(1.5);
284  TRootEmbeddedCanvas* ecvsH4 = new TRootEmbeddedCanvas();
285  TEveWindowFrame* frameH4 = slotH->MakeFrame(ecvsH4);
286  frameH4->SetElementName("Quadrant 4");
287  fCvsQuadrant4 = ecvsH4->GetCanvas();*/
288 
290 
291  // Fifth tab Phi Reconstruction
292  TEveWindowSlot *slot4 = TEveWindow::CreateWindowInTab(gEve->GetBrowser()->GetTabRight());
293  TEveWindowPack *pack5 = slot4->MakePack();
294  pack5->SetShowTitleBar(kFALSE);
295  pack5->SetElementName("Prototype Phi Recons.");
296  slot4 = pack5->NewSlotWithWeight(1.5);
297  auto *ecvs5 = new TRootEmbeddedCanvas();
298  TEveWindowFrame *frame5 = slot4->MakeFrame(ecvs5);
299  frame5->SetElementName("Phi Reconstruction");
300  fCvsPhi = ecvs5->GetCanvas();
301 
302  // Sixth tab Monte Carlo
303  TEveWindowSlot *slotMC = TEveWindow::CreateWindowInTab(gEve->GetBrowser()->GetTabRight());
304  TEveWindowPack *packMC = slotMC->MakePack();
305  packMC->SetShowTitleBar(kFALSE);
306  packMC->SetHorizontal();
307  packMC->SetElementName("Monte Carlo");
308 
309  slotMC = packMC->NewSlotWithWeight(1.5);
310  auto *ecvsMC_XY = new TRootEmbeddedCanvas();
311  TEveWindowFrame *frameMC_XY = slotMC->MakeFrame(ecvsMC_XY);
312  frameMC_XY->SetElementName("XY Projection");
313  fCvsMC_XY = ecvsMC_XY->GetCanvas();
314 
315  slotMC = packMC->NewSlotWithWeight(1.5);
316  auto *ecvsMC_Z = new TRootEmbeddedCanvas();
317  TEveWindowFrame *frameMC_Z = slotMC->MakeFrame(ecvsMC_Z);
318  frameMC_Z->SetElementName("Time Projection");
319  fCvsMC_Z = ecvsMC_Z->GetCanvas();
320 
321  TEveWindowSlot *slotAux = TEveWindow::CreateWindowInTab(gEve->GetBrowser()->GetTabRight());
322  TEveWindowPack *packAux = slotAux->MakePack();
323  packAux->SetShowTitleBar(kFALSE);
324  packAux->SetHorizontal();
325  packAux->SetElementName("Auxiliary GET Channels");
326 
327  slotAux = packAux->NewSlotWithWeight(1.5);
328  auto *ecvsAux1 = new TRootEmbeddedCanvas();
329  TEveWindowFrame *frameAux1 = slotAux->MakeFrame(ecvsAux1);
330  frameAux1->SetElementName("Auxiliary GET Channels");
331  fCvsAux = ecvsAux1->GetCanvas();
332 
333  // Seventh tab
334  TEveWindowSlot *slotS800 = TEveWindow::CreateWindowInTab(gEve->GetBrowser()->GetTabRight());
335  TEveWindowPack *packPID = slotS800->MakePack();
336  packPID->SetShowTitleBar(kFALSE);
337  packPID->SetElementName("S800 PIDs");
338  packPID->SetHorizontal();
339 
340  slotS800 = packPID->NewSlotWithWeight(1.5);
341  auto ecvsS800tof1 = new TRootEmbeddedCanvas();
342  TEveWindowFrame *frameS800tof1 = slotS800->MakeFrame(ecvsS800tof1);
343  frameS800tof1->SetElementName("T[Xf_Obj]-TObj (gated)");
344  fCvsPID = ecvsS800tof1->GetCanvas();
345 
346  slotS800 = packPID->NewSlotWithWeight(1.5);
347  auto ecvsS800tof2 = new TRootEmbeddedCanvas();
348  TEveWindowFrame *frameS800tof2 = slotS800->MakeFrame(ecvsS800tof2);
349  frameS800tof2->SetElementName("T[Xf_Obj]-TObj (full)");
350  fCvsPIDFull = ecvsS800tof2->GetCanvas();
351  DrawPIDFull();
352  // Eighth tab
353  // TEveWindowSlot *slotS8002 = TEveWindow::CreateWindowInTab(gEve->GetBrowser()->GetTabRight());
354  // TEveWindowPack *packPID2 = slotS8002->MakePack();
355  // packPID2->SetShowTitleBar(kFALSE);
356  // packPID2->SetElementName("S800 PIDs");
357 
358  slotS800 = packPID->NewSlotWithWeight(1.5);
359  auto ecvsS800dE1 = new TRootEmbeddedCanvas();
360  TEveWindowFrame *frameS800dE1 = slotS800->MakeFrame(ecvsS800dE1);
361  frameS800dE1->SetElementName("ICSumE-ToF (gated)");
362  fCvsPID2 = ecvsS800dE1->GetCanvas();
363 
364  slotS800 = packPID->NewSlotWithWeight(1.5);
365  auto ecvsS800dE2 = new TRootEmbeddedCanvas();
366  TEveWindowFrame *frameS800dE2 = slotS800->MakeFrame(ecvsS800dE2);
367  frameS800dE2->SetElementName("ICSumE-ToF (full)");
368  fCvsPID2Full = ecvsS800dE2->GetCanvas();
369  DrawPID2Full();
370  /**************************************************************************/
371 
372  fS800Ana.SetMTDCXfRange(fMTDCXfRange); // these 3 Setter must be before Init()
375 
376  fRunAna->Init();
377 
378  FillPIDFull(); // plot the Full PID at the beginning of the visualiztion
379 
380  if (gGeoManager) {
381  TGeoNode *geoNode = gGeoManager->GetTopNode();
382  auto *topNode = new TEveGeoTopNode(gGeoManager, geoNode, option, level, nNodes);
383  gEve->AddGlobalElement(topNode);
384 
385  Int_t transparency = 80;
386 
387  // gGeoManager -> DefaultColors();
388  // gGeoManager -> GetVolume("field_cage_in") -> SetVisibility(kFALSE); //active
389  gGeoManager->GetVolume("drift_volume")->SetTransparency(transparency);
390  // gGeoManager -> GetVolume("cageSide") -> SetTransparency(transparency);
391  // gGeoManager -> GetVolume("cageCorner") -> SetTransparency(transparency);
392  // gGeoManager -> GetVolume("frontWindow") -> SetTransparency(transparency);
393  // gGeoManager -> GetVolume("frontWindowFrame") -> SetTransparency(transparency);
394  // gGeoManager -> GetVolume("frontWindowCradle") -> SetTransparency(transparency);
395  // gGeoManager -> GetVolume("bottomPlate") -> SetTransparency(transparency);
396  // gGeoManager -> GetVolume("backWindowFrame") -> SetTransparency(transparency);
398  // gGeoManager -> GetVolume("topFrame") -> SetTransparency(transparency);
399  // gGeoManager -> GetVolume("ribmain") -> SetTransparency(transparency);
400  // gGeoManager -> GetVolume("wirePlane") -> SetTransparency(transparency);
401  // gGeoManager -> GetVolume("padPlane") -> SetTransparency(transparency);
402 
403  gEve->FullRedraw3D(kTRUE);
404  fEvent = gEve->AddEvent(this);
405  }
406 
407  /**************************************************************************/
408 
409  gEve->GetBrowser()->GetTabRight()->SetTab(1);
410  make_gui();
411 
412  gEve->Redraw3D(kTRUE, kTRUE);
413 
414  TGLViewer *dfViewer = gEve->GetDefaultGLViewer(); // Is this doing anything?
415  dfViewer->CurrentCamera().RotateRad(-.7, 0.5);
416  dfViewer->DoDraw();
417 
418  // RunEvent();
419  std::cout << "End of AtEventManager" << std::endl;
420 }
421 
423 {
424  GotoEvent(fCurrentEvent->GetIntNumber());
425  // cout<<fCurrentEvent->GetIntNumber()<<endl;
426 }
427 
428 void AtEventManager::GotoEvent(Int_t event)
429 {
430 
431  fEntry = event;
432  std::cout << cWHITERED << " Event number : " << fEntry << cNORMAL << std::endl;
433  fRunAna->Run((Long64_t)event);
434 }
435 
437 {
438 
439  Bool_t gated = kFALSE;
440  while (gated == kFALSE) {
441  fEntry += 1;
442  cArray = nullptr;
443  cevent = nullptr;
444  if (fEntry < 1 || fEntry > fEntries) {
445  fEntry = fEntries;
446  std::cout << " No gated events found! " << std::endl;
447  break;
448  }
449  fRootManager->ReadEvent(fEntry);
450  cArray = dynamic_cast<TClonesArray *>(fRootManager->GetObject("AtEventH"));
451  // cArray = dynamic_cast<TObject *>(fRootManager->GetObject("AtEventH"));
452  cevent = dynamic_cast<AtEvent *>(cArray->At(0));
453  gated = cevent->GetIsExtGate();
454  }
455 
456  std::cout << " Event number : " << fEntry << std::endl;
457  fRunAna->Run((Long64_t)fEntry);
458 }
459 
461 {
462 
463  Bool_t gated = kFALSE;
464  while (gated == kFALSE) {
465  fEntry -= 1;
466  cArray = nullptr;
467  cevent = nullptr;
468  if (fEntry < 1 || fEntry > fEntries) {
469  fEntry = 1;
470  std::cout << " No gated events found! " << std::endl;
471  break;
472  }
473  fRootManager->ReadEvent(fEntry);
474  cArray = dynamic_cast<TClonesArray *>(fRootManager->GetObject("AtEventH"));
475  // cArray = dynamic_cast<TObject *>(fRootManager->GetObject("AtEventH"));
476  cevent = dynamic_cast<AtEvent *>(cArray->At(0));
477  gated = cevent->GetIsExtGate();
478  }
479 
480  std::cout << " Event number : " << fEntry << std::endl;
481  fRunAna->Run((Long64_t)fEntry);
482 }
483 
485 {
486 
487  fPIDFull = new TH2F("PIDFull", "PIDFull", 200, -150, 50, 300, 150, 450);
488  // fLvsTheta->SetMarkerStyle(22);
489  // fLvsTheta->SetMarkerColor(kRed);
490 
491  fPIDFull->Draw("colz");
492 }
493 
495 {
496 
497  fPID2Full = new TH2F("PID2Full", "PID2Full", 200, -150, 50, 300, 150, 450);
498  // fLvsTheta->SetMarkerStyle(22);
499  // fLvsTheta->SetMarkerColor(kRed);
500 
501  fPID2Full->Draw("colz");
502 }
503 
505 {
506 
507  TChain *chain = FairRootManager::Instance()->GetInChain();
508  fEntries = chain->GetEntriesFast();
509 
510  for (int neve = 1; neve < fEntries; neve++) {
511  fRootManager->ReadEvent(neve);
512  cS800Calc = dynamic_cast<S800Calc *>(fRootManager->GetObject("s800cal"));
513  if (cS800Calc == nullptr)
514  break;
515  // cS800Calc = (S800Calc*) cS800Array->At(0);
516 
517  fS800Ana.Calc(cS800Calc);
518  if (fS800Ana.GetObjCorr_ToF() != -999)
519  fPIDFull->Fill(fS800Ana.GetObjCorr_ToF(), fS800Ana.GetXfObj_ToF());
520  if (fS800Ana.GetObjCorr_ToF() != -999)
521  fPID2Full->Fill(fS800Ana.GetObjCorr_ToF(), fS800Ana.GetICSum_E());
522  }
523 }
524 
525 /*void AtEventManager::NextEvent()
526 {
527  fEntry += 1;
528  std::cout << " Event number : " << fEntry << std::endl;
529  fRunAna->Run((Long64_t)fEntry);
530 }
531 
532 void AtEventManager::PrevEvent()
533 {
534  fEntry -= 1;
535  std::cout << " Event number : " << fEntry << std::endl;
536  fRunAna->Run((Long64_t)fEntry);
537 }*/
538 
540 {
541  int event = gPad->GetEvent();
542  if (event != 11)
543  return; // may be comment this line
544  TObject *select = gPad->GetSelected();
545  if (!select)
546  return;
547  if (select->InheritsFrom(TH2::Class())) {
548  auto *h = dynamic_cast<TH2Poly *>(select);
549  gPad->GetCanvas()->FeedbackMode(kTRUE);
550  // Char_t *bin_name = h->GetBinName();
551 
552  int pyold = gPad->GetUniqueID();
553  int px = gPad->GetEventX();
554  int py = gPad->GetEventY();
555  float uxmin = gPad->GetUxmin();
556  float uxmax = gPad->GetUxmax();
557  int pxmin = gPad->XtoAbsPixel(uxmin);
558  int pxmax = gPad->XtoAbsPixel(uxmax);
559  if (pyold)
560  gVirtualX->DrawLine(pxmin, pyold, pxmax, pyold);
561  gVirtualX->DrawLine(pxmin, py, pxmax, py);
562  gPad->SetUniqueID(py);
563  Float_t upx = gPad->AbsPixeltoX(px);
564  Float_t upy = gPad->AbsPixeltoY(py);
565  Double_t x = gPad->PadtoX(upx);
566  Double_t y = gPad->PadtoY(upy);
567  Int_t bin = h->FindBin(x, y);
568  const char *bin_name = h->GetBinName(bin);
569  // std::cout<<" X : "<<x<<" Y: "<<y<<std::endl;
570  // std::cout<<bin_name<<std::endl;
571  std::cout << " Bin number selected : " << bin << " Bin name :" << bin_name << std::endl;
572  }
573 
574  /*int event = gPad->GetEvent();
575  if (event != 11) return; //may be comment this line
576  TObject *select = gPad->GetSelected();
577  if (!select) return;
578  if (select->InheritsFrom("TObject")) {
579  TH2PolyBin *h = (TH2PolyBin*)select;
580  gPad->GetCanvas()->FeedbackMode(kTRUE);
581  Int_t bin = h->GetBinNumber();
582  std::cout<<" Clicked on bin : "<<bin<<std::endl;
583  }*/
584 }
585 
587 {
588  fRunAna->Run((Long64_t)fEntry);
589 }
590 
592 {
593  // Create minimal GUI for event navigation.
594 
595  TChain *chain = FairRootManager::Instance()->GetInChain();
596  Int_t Entries = chain->GetEntriesFast();
597 
598  TEveBrowser *browser = gEve->GetBrowser();
599  browser->StartEmbedding(TRootBrowser::kLeft);
600 
601  auto *frmMain = new TGMainFrame(gClient->GetRoot(), 1000, 600);
602  frmMain->SetWindowName("XX GUI");
603  frmMain->SetCleanup(kDeepCleanup);
604 
605  auto *hf = new TGVerticalFrame(frmMain);
606  {
607 
608  // TString icondir( Form("%s/icons/", gSystem->Getenv("VMCWORKDIR")) );
609  // TGPictureButton* b = 0;
610 
611  // EvNavHandler *fh = new EvNavHandler;
612  // AtEventManager *fh = new AtEventManager; //Wrong!! Another instance produces different events
613 
614  drawallpad = new TGTextButton(hf, "&Enable Draw All Pads");
615  drawallpad->SetToolTipText(
616  "Press to Enable/Disble drawing of all pads signal\n (Display on AtTPC Pad Plane Raw Signals tab) ", 400);
617  drawallpad->Connect("Clicked()", "AtEventManager", fInstance, "ChangeDrawAllPads()");
618  hf->AddFrame(drawallpad, new TGLayoutHints(kLHintsCenterX, 5, 5, 3, 4));
619 
620  eraseQevent = new TGTextButton(hf, "&Erase Q Event Pad");
621  eraseQevent->SetToolTipText("Press to erase Event Q histogram upon calling the next event", 400);
622  eraseQevent->Connect("Clicked()", "AtEventManager", fInstance, "EraseQEvent()");
623  hf->AddFrame(eraseQevent, new TGLayoutHints(kLHintsCenterX, 5, 5, 3, 4));
624 
625  drawReconstruction = new TGTextButton(hf, "&Visualize Reconstruction");
626  drawReconstruction->SetToolTipText("Press to enable Reconstruction visualization", 400);
627  drawReconstruction->Connect("Clicked()", "AtEventManager", fInstance, "EnableDrawReconstruction()");
628  hf->AddFrame(drawReconstruction, new TGLayoutHints(kLHintsCenterX, 5, 5, 3, 4));
629 
630  saveASCIIevent = new TGTextButton(hf, "&Save event as text file");
631  saveASCIIevent->SetToolTipText("Dump the waveform of each hit into a text file", 400);
632  saveASCIIevent->Connect("Clicked()", "AtEventManager", fInstance, "SaveASCIIEvent()");
633  hf->AddFrame(saveASCIIevent, new TGLayoutHints(kLHintsCenterX, 5, 5, 3, 4));
634 
635  toggleCorr = new TGTextButton(hf, "&Toggle Corrected Data");
636  toggleCorr->SetToolTipText("Press to toggle between data corrected by Lorentz Angle ", 400);
637  toggleCorr->Connect("Clicked()", "AtEventManager", fInstance, "ToggleCorrData()");
638  hf->AddFrame(toggleCorr, new TGLayoutHints(kLHintsCenterX, 5, 5, 3, 4));
639 
640  /* b = new TGPictureButton(hf, gClient->GetPicture(icondir+"arrow_left.gif"));
641  hf->AddFrame(b);
642  b->Connect("Clicked()", "AtEventManager", fInstance, "PrevEvent()");
643 
644  b = new TGPictureButton(hf, gClient->GetPicture(icondir+"arrow_right.gif"));
645  hf->AddFrame(b);
646  b->Connect("Clicked()", "AtEventManager", fInstance, "NextEvent()");*/
647 
648  // b = new TGPictureButton(hf, gClient->GetPicture(icondir+"goto.gif"));
649  // hf->AddFrame(b);
650  // b->Connect("Clicked()", "AtEventManager", fInstance, "GotoEvent(Int_t)");
651  }
652 
653  auto *hf_2 = new TGHorizontalFrame(frmMain);
654  {
655 
656  TString icondir(Form("%s/icons/", gSystem->Getenv("VMCWORKDIR")));
657  TGPictureButton *b = nullptr;
658 
659  b = new TGPictureButton(hf_2, gClient->GetPicture(icondir + "arrow_left.gif"));
660  hf_2->AddFrame(b);
661  b->Connect("Clicked()", "AtEventManager", fInstance, "PrevEvent()");
662 
663  b = new TGPictureButton(hf_2, gClient->GetPicture(icondir + "arrow_right.gif"));
664  hf_2->AddFrame(b);
665  b->Connect("Clicked()", "AtEventManager", fInstance, "NextEvent()");
666  }
667 
668  frmMain->AddFrame(hf);
669  frmMain->AddFrame(hf_2);
670 
671  TString Infile = "Input file : ";
672  // TFile* file =FairRunAna::Instance()->GetInputFile();
673  TFile *file = FairRootManager::Instance()->GetInChain()->GetFile();
674  Infile += file->GetName();
675  auto *TFName = new TGLabel(frmMain, Infile.Data());
676  frmMain->AddFrame(TFName);
677 
678  UInt_t RunId = FairRunAna::Instance()->getRunId();
679  TString run = "Run Id : ";
680  run += RunId;
681  auto *TRunId = new TGLabel(frmMain, run.Data());
682  frmMain->AddFrame(TRunId);
683 
684  TString nevent = "No of events : ";
685  nevent += Entries;
686  auto *TEvent = new TGLabel(frmMain, nevent.Data());
687  frmMain->AddFrame(TEvent);
688 
689  auto *f = new TGHorizontalFrame(frmMain);
690  auto *l = new TGLabel(f, "Current Event:");
691  f->AddFrame(l, new TGLayoutHints(kLHintsLeft | kLHintsCenterY, 1, 2, 1, 1));
692 
693  fCurrentEvent = new TGNumberEntry(f, 0., 6, -1, TGNumberFormat::kNESInteger, TGNumberFormat::kNEANonNegative,
694  TGNumberFormat::kNELLimitMinMax, 0, Entries);
695  f->AddFrame(fCurrentEvent, new TGLayoutHints(kLHintsLeft, 1, 1, 1, 1));
696  fCurrentEvent->Connect("ValueSet(Long_t)", "AtEventManager", fInstance, "SelectEvent()");
697  frmMain->AddFrame(f);
698 
699  auto *fThres = new TGHorizontalFrame(frmMain);
700  auto *lThres = new TGLabel(fThres, "3D threshold:");
701  fThres->AddFrame(lThres, new TGLayoutHints(kLHintsLeft | kLHintsCenterY, 1, 2, 1, 1));
702  f3DThresDisplay = new TGNumberEntry(fThres, 0., 6, -1, TGNumberFormat::kNESInteger, TGNumberFormat::kNEANonNegative,
703  TGNumberFormat::kNELLimitMinMax, 0, Entries);
704  fThres->AddFrame(f3DThresDisplay, new TGLayoutHints(kLHintsLeft, 1, 1, 1, 1));
705  f3DThresDisplay->Connect("ValueSet(Long_t)", "AtEventManager", fInstance, "Select3DThres()");
706  frmMain->AddFrame(fThres);
707 
708  frmMain->MapSubwindows();
709  frmMain->Resize();
710  frmMain->MapWindow();
711 
712  browser->StopEmbedding();
713  browser->SetTabTitle("AtTPC Event Control", 0);
714 }
715 
717 {
718  drawallpad->SetState(kButtonDown);
719  if (!kDrawAllOn) {
720  drawallpad->SetText("&Disable Draw All Pads");
721  kDrawAllOn = kTRUE;
722  } else {
723  drawallpad->SetText("&Enable Draw All Pads");
724  kDrawAllOn = kFALSE;
725  }
726  drawallpad->SetState(kButtonUp);
727 }
728 
730 {
731 
732  drawReconstruction->SetState(kButtonDown);
733  if (!kDrawReconstruction) {
734  drawReconstruction->SetText("&Disable Vis. Recons.");
735  kDrawReconstruction = kTRUE;
736  } else {
737  drawReconstruction->SetText("&Visualize Reconstruction");
738  kDrawReconstruction = kFALSE;
739  }
740  drawReconstruction->SetState(kButtonUp);
741 }
742 
744 {
745 
746  kEraseQ = kTRUE;
747 }
748 
750 {
751  kDraw3DGeo = kTRUE;
752 }
753 
755 {
756  kDraw3DHist = kTRUE;
757 }
758 
760 {
761 
762  k3DThreshold = f3DThresDisplay->GetIntNumber();
763 }
764 
766 {
767 
768  Int_t event = fEntry;
769  TFile *file = FairRootManager::Instance()->GetInChain()->GetFile();
770  std::string file_name = file->GetName();
771  std::string cmd = "mv event.dat event_" + std::to_string(event) + ".dat";
772  gSystem->Exec(cmd.c_str());
773 }
774 
776 {
777 
778  toggleCorr->SetState(kButtonDown);
779  if (!kToggleData) {
780  toggleCorr->SetText("&Toggle Raw Data");
781  kToggleData = kTRUE;
782  } else {
783  toggleCorr->SetText("&Toggle Corrected Data");
784  kToggleData = kFALSE;
785  }
786  toggleCorr->SetState(kButtonUp);
787 }
AtEventManager::SaveASCIIEvent
void SaveASCIIEvent()
Definition: AtEventManager.cxx:765
AtEventManager::PrevEvent
virtual void PrevEvent()
MENU
Definition: AtEventManager.cxx:460
AtEvent.h
AtEventManager::EnableDrawReconstruction
void EnableDrawReconstruction()
Definition: AtEventManager.cxx:729
AtEventManager::Draw3DGeo
void Draw3DGeo()
Definition: AtEventManager.cxx:749
S800Ana::SetTofObjCorr
void SetTofObjCorr(std::vector< Double_t > vec)
Definition: S800Ana.cxx:98
AtEventManager::fTofObjCorr
std::vector< Double_t > fTofObjCorr
Definition: AtEventManager.h:141
S800Ana::GetXfObj_ToF
Double_t GetXfObj_ToF()
Definition: S800Ana.cxx:127
S800Ana::SetMTDCXfRange
void SetMTDCXfRange(std::vector< Double_t > vec)
Definition: S800Ana.cxx:106
S800Calc
Definition: S800Calc.h:455
f
double(* f)(double t, const double *par)
Definition: lmcurve.cxx:21
cWHITERED
constexpr auto cWHITERED
Definition: AtEventManager.cxx:51
cGREEN
constexpr auto cGREEN
Definition: AtEventManager.cxx:49
AtEventManager::RunEvent
void RunEvent()
Definition: AtEventManager.cxx:586
S800Ana::GetObjCorr_ToF
Double_t GetObjCorr_ToF()
Definition: S800Ana.cxx:131
AtEvent
Definition: AtEvent.h:22
AtEventManager::DrawPID2Full
void DrawPID2Full()
Definition: AtEventManager.cxx:494
cBLUE
constexpr auto cBLUE
Definition: AtEventManager.cxx:50
cYELLOW
constexpr auto cYELLOW
Definition: AtEventManager.cxx:47
AtEventManager::EraseQEvent
void EraseQEvent()
Definition: AtEventManager.cxx:743
AtEventManager::ChangeDrawAllPads
void ChangeDrawAllPads()
Definition: AtEventManager.cxx:716
AtEventManager::FillPIDFull
void FillPIDFull()
Definition: AtEventManager.cxx:504
AtEventManager::Draw3DHist
void Draw3DHist()
Definition: AtEventManager.cxx:754
S800Ana.h
AtEventManager
Definition: AtEventManager.h:27
AtEventManager::DrawPIDFull
void DrawPIDFull()
Definition: AtEventManager.cxx:484
AtEventManager::AtEventManager
AtEventManager()
Definition: AtEventManager.cxx:68
AtEventManager::Instance
static AtEventManager * Instance()
Definition: AtEventManager.cxx:63
y
const double * y
Definition: lmcurve.cxx:20
AtEventManager::Init
virtual void Init(Int_t option=1, Int_t level=3, Int_t nNodes=10000)
Definition: AtEventManager.cxx:92
S800Calc.h
AtEventManager::ToggleCorrData
void ToggleCorrData()
Definition: AtEventManager.cxx:775
AtEventManager::make_gui
virtual void make_gui()
Definition: AtEventManager.cxx:591
AtEventManager.h
cNORMAL
constexpr auto cNORMAL
Definition: AtEventManager.cxx:48
S800Ana::GetICSum_E
Double_t GetICSum_E()
Definition: S800Ana.cxx:135
AtEventManager::GotoEvent
virtual void GotoEvent(Int_t event)
MENU
Definition: AtEventManager.cxx:428
AtEventManager::SelectEvent
virtual void SelectEvent()
Definition: AtEventManager.cxx:422
AtEventManager::fMTDCXfRange
std::vector< Double_t > fMTDCXfRange
Definition: AtEventManager.h:143
AtEventManager::fMTDCObjRange
std::vector< Double_t > fMTDCObjRange
Definition: AtEventManager.h:142
AtBaseEvent::GetIsExtGate
Bool_t GetIsExtGate() const
Definition: AtBaseEvent.h:71
AtEventManager::DrawWave
static void DrawWave()
Definition: AtEventManager.cxx:539
AtEventManager::NextEvent
virtual void NextEvent()
MENU
Definition: AtEventManager.cxx:436
ClassImp
ClassImp(AtEventManager)
AtEventManager::~AtEventManager
virtual ~AtEventManager()
S800Ana::Calc
void Calc(S800Calc *s800calc)
Definition: S800Ana.cxx:151
S800Ana::SetMTDCObjRange
void SetMTDCObjRange(std::vector< Double_t > vec)
Definition: S800Ana.cxx:102
AtEventManager::fS800Ana
S800Ana fS800Ana
Definition: AtEventManager.h:140
cRED
constexpr auto cRED
Definition: AtEventManager.cxx:46
AtEventManager::Select3DThres
virtual void Select3DThres()
Definition: AtEventManager.cxx:759