ATTPCROOT  0.3.0-alpha
A ROOT-based framework for analyzing data from active target detectors
AtTabMacro.cxx
Go to the documentation of this file.
1 #include "AtTabMacro.h"
2 
3 #include "AtViewerManager.h"
4 
5 #include <TCanvas.h>
6 
7 #include <iostream>
8 #include <memory> // for allocator, unique_ptr
9 
10 namespace DataHandling {
11 class AtSubject;
12 }
13 constexpr auto cRED = "\033[1;31m";
14 constexpr auto cYELLOW = "\033[1;33m";
15 constexpr auto cNORMAL = "\033[0m";
16 constexpr auto cGREEN = "\033[1;32m";
17 constexpr auto cBLUE = "\033[1;34m";
18 
20 
21 AtTabMacro::AtTabMacro(int nRow, int nCol, TString name) : AtTabCanvas(name, nRow, nCol)
22 {
23  if (AtViewerManager::Instance() == nullptr)
24  throw "AtViewerManager must be initialized before creating tabs!";
25 
27  fPadNum->Attach(this);
28 }
30 {
31  fPadNum->Detach(this);
32 }
34 {
35 
36  std::cout << " ===== AtTabMacro::Init =====" << std::endl;
37 
38  if (fTabName == "Macro") {
39  fTabName = TString::Format(fTabName + " %d", fTabId);
40  }
41 
42  std::cout << " AtTabMacro::Init : Initialization complete! "
43  << "\n";
44 }
45 
46 void AtTabMacro::MakeTab(TEveWindowSlot *slot)
47 {
49 
50  DrawTree();
51 }
52 
54 {
55  for (auto &[pos, func] : fDrawTreeMap) {
56  fCanvas->cd(pos + 1);
57  func(fTabInfo.get());
58  }
59  UpdateCanvas();
60 }
61 
63 {
64  for (auto &[pos, func] : fDrawEventMap) {
65  fCanvas->cd(pos + 1);
66  func(fTabInfo.get());
67  }
68  UpdateCanvas();
69 }
70 
72 {
73 
74  if (sub != fPadNum)
75  return;
76  for (auto &[pos, func] : fDrawPadMap) {
77  fCanvas->cd(pos + 1);
78  func(fTabInfo.get(), fPadNum->Get());
79  }
80  UpdateCanvas();
81 }
82 
83 void AtTabMacro::SetDrawTreeFunction(std::function<void(AtTabInfo(*))> function, int row, int col)
84 {
85  fDrawTreeMap.emplace(row * fCols + col, function);
86 }
87 
88 void AtTabMacro::SetDrawEventFunction(std::function<void(AtTabInfo(*))> function, int row, int col)
89 {
90  fDrawEventMap.emplace(row * fCols + col, function);
91 }
92 
93 void AtTabMacro::SetDrawPadFunction(std::function<void(AtTabInfo(*), Int_t)> function, int row, int col)
94 {
95  fDrawPadMap.emplace(row * fCols + col, function);
96 }
AtTabCanvas::fCanvas
TCanvas * fCanvas
Definition: AtTabCanvas.h:22
AtTabInfo
Contains all the data needed by an AtTab.
Definition: AtTabInfo.h:51
AtTabMacro::~AtTabMacro
~AtTabMacro()
Definition: AtTabMacro.cxx:29
AtTabMacro::SetDrawPadFunction
void SetDrawPadFunction(std::function< void(AtTabInfo(*), Int_t)> function, int row=0, int col=0)
Definition: AtTabMacro.cxx:93
AtTabMacro::SetDrawEventFunction
void SetDrawEventFunction(std::function< void(AtTabInfo(*))> function, int row=0, int col=0)
Definition: AtTabMacro.cxx:88
cGREEN
constexpr auto cGREEN
Definition: AtTabMacro.cxx:16
DataHandling::AtSubject::Detach
void Detach(AtObserver *observer)
Detach an observer to stop getting notified when this subject changes.
Definition: AtDataSubject.h:37
AtViewerManager::Instance
static AtViewerManager * Instance()
Definition: AtViewerManager.cxx:43
AtTabMacro::InitTab
void InitTab() override
Definition: AtTabMacro.cxx:33
AtTabMacro.h
AtTabCanvas::MakeTab
void MakeTab(TEveWindowSlot *slot) override
Create the gui components of the tab in the passed window slot.
Definition: AtTabCanvas.cxx:8
cNORMAL
constexpr auto cNORMAL
Definition: AtTabMacro.cxx:15
AtTabBase::fTabId
Int_t fTabId
Definition: AtTabBase.h:30
AtViewerManager::GetPadNum
DataHandling::AtPadNum & GetPadNum()
Definition: AtViewerManager.h:75
ClassImp
ClassImp(AtTabMacro)
AtTabMacro::fDrawEventMap
std::unordered_map< Int_t, std::function< void(AtTabInfo(*))> > fDrawEventMap
Definition: AtTabMacro.h:29
DataHandling
Definition: AtDataObserver.h:4
AtTabMacro::fPadNum
DataHandling::AtPadNum * fPadNum
Definition: AtTabMacro.h:26
DataHandling::AtSimpleType::Get
T Get() const
Definition: AtDataSubject.h:57
AtTabMacro::AtTabMacro
AtTabMacro(int nRow=1, int nCol=1, TString name="Macro")
Definition: AtTabMacro.cxx:21
AtTabCanvas
Abstract class for a tab composed of a single TCanvas.
Definition: AtTabCanvas.h:20
AtTabMacro::fDrawPadMap
std::unordered_map< Int_t, std::function< void(AtTabInfo(*), Int_t)> > fDrawPadMap
Definition: AtTabMacro.h:30
cYELLOW
constexpr auto cYELLOW
Definition: AtTabMacro.cxx:14
AtTabMacro::Exec
void Exec() override
Called after the run's Exec() to update tab.
Definition: AtTabMacro.cxx:62
DataHandling::AtSubject::Attach
void Attach(AtObserver *observer)
Attach an observer to get notified when this subject changes.
Definition: AtDataSubject.cxx:12
AtTabMacro::SetDrawTreeFunction
void SetDrawTreeFunction(std::function< void(AtTabInfo(*))> function, int row=0, int col=0)
Definition: AtTabMacro.cxx:83
DataHandling::AtSubject
Definition: AtDataSubject.h:24
AtTabMacro::Update
void Update(DataHandling::AtSubject *sub) override
Definition: AtTabMacro.cxx:71
AtTabMacro
Tab for drawing arbitrary functions (probably needs refactor)
Definition: AtTabMacro.h:24
cRED
constexpr auto cRED
Definition: AtTabMacro.cxx:13
AtTabCanvas::UpdateCanvas
void UpdateCanvas()
Definition: AtTabCanvas.cxx:24
AtViewerManager.h
AtTabBase::fTabName
TString fTabName
Definition: AtTabBase.h:31
AtTabMacro::DrawTree
void DrawTree()
Definition: AtTabMacro.cxx:53
cBLUE
constexpr auto cBLUE
Definition: AtTabMacro.cxx:17
AtTabCanvas::fCols
Int_t fCols
Definition: AtTabCanvas.h:23
AtTabMacro::fDrawTreeMap
std::unordered_map< Int_t, std::function< void(AtTabInfo(*))> > fDrawTreeMap
Definition: AtTabMacro.h:28
AtTabBase::fTabInfo
std::unique_ptr< AtTabInfo > fTabInfo
Definition: AtTabBase.h:33
AtTabMacro::MakeTab
void MakeTab(TEveWindowSlot *) override
Create the gui components of the tab in the passed window slot.
Definition: AtTabMacro.cxx:46