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