8 #include <FairRootManager.h>
9 #include <FairRunAna.h>
15 #include <TGComboBox.h>
18 #include <TGNumberEntry.h>
30 TString AtSidebarRunInfo::GetFileName(TString filePath)
35 while (filePath.Tokenize(tok, loc,
"/")) {
44 TString Infile =
"Input file : ";
45 TFile *file = FairRootManager::Instance()->GetInChain()->GetFile();
47 fRunFile =
new TGLabel(
this, (Infile + file->GetName()).Data());
50 if (fRunFile->GetWidth() > this->GetWidth()) {
52 TString fileName = GetFileName(file->GetName());
53 fRunFile =
new TGLabel(
this, (Infile + fileName).Data());
56 this->AddFrame(fRunFile);
58 UInt_t RunId = FairRunAna::Instance()->getRunId();
59 TString run =
"Run Id : ";
61 fRunId =
new TGLabel(
this, run.Data());
62 this->AddFrame(fRunId);
64 TString nevent =
"No of events : ";
65 nevent += FairRootManager::Instance()->GetInChain()->GetEntriesFast();
66 fRunLength =
new TGLabel(
this, nevent.Data());
67 this->AddFrame(fRunLength);
70 UInt_t options, Pixel_t back)
83 fCurrentPadFrame =
new TGHorizontalFrame(
this);
84 fCurrentPadLabel =
new TGLabel(fCurrentPadFrame,
"Current Pad: ");
87 new TGNumberEntry(fCurrentPadFrame, 0., 6, -1, TGNumberFormat::kNESInteger, TGNumberFormat::kNEAAnyNumber,
90 fCurrentPadEntry->Connect(
"ValueSet(Long_t)",
"AtSidebarPadControl",
this,
"SelectPad()");
92 fCurrentPadFrame->AddFrame(fCurrentPadLabel,
new TGLayoutHints(kLHintsLeft | kLHintsCenterY, 1, 2, 1, 1));
93 fCurrentPadFrame->AddFrame(fCurrentPadEntry);
95 fRedrawPadButton =
new TGTextButton(fCurrentPadFrame,
"Redraw Pad");
96 fRedrawPadButton->Connect(
"Clicked()",
"AtSidebarPadControl",
this,
"SelectPad()");
97 fCurrentPadFrame->AddFrame(fRedrawPadButton,
new TGLayoutHints(kLHintsCenterY, 1, 1, 1, 1));
98 this->AddFrame(fCurrentPadFrame,
new TGLayoutHints());
100 fCurrentPadId =
new TGLabel(
this, fPadRefString);
101 this->AddFrame(fCurrentPadId,
new TGLayoutHints(kLHintsCenterX | kLHintsExpandX));
106 if (changedSubject == &fPadNum && fCurrentPadEntry) {
107 fCurrentPadEntry->SetIntNumber(fPadNum.
Get());
109 fCurrentPadId->SetText(TString::Format(fPadRefString, ref.cobo, ref.asad, ref.aget, ref.ch));
115 fPadNum.
Set(fCurrentPadEntry->GetIntNumber(),
false);
120 UInt_t options, Pixel_t back)
123 fEntryNumber.
Attach(
this);
127 fEntryNumber.
Detach(
this);
132 if (changedSubject == &fEntryNumber && fCurrentEventEntry)
133 fCurrentEventEntry->SetIntNumber(fEntryNumber.
Get());
138 fEntryNumber.
Set(fCurrentEventEntry->GetIntNumber());
143 fEntryNumber.
Set(fEntryNumber.
Get());
149 fCurrentEventFrame =
new TGHorizontalFrame(
this);
150 fCurrentEventLabel =
new TGLabel(fCurrentEventFrame,
"Current Event: ");
152 fCurrentEventEntry =
new TGNumberEntry(fCurrentEventFrame, 0., 6, -1, TGNumberFormat::kNESInteger,
153 TGNumberFormat::kNEANonNegative, TGNumberFormat::kNELLimitMinMax, 0,
154 FairRootManager::Instance()->GetInChain()->GetEntriesFast());
156 fCurrentEventEntry->Connect(
"ValueSet(Long_t)",
"AtSidebarEventControl",
this,
"SelectEvent()");
158 fCurrentEventFrame->AddFrame(fCurrentEventLabel,
new TGLayoutHints(kLHintsLeft | kLHintsCenterY, 1, 2, 1, 1));
159 fCurrentEventFrame->AddFrame(fCurrentEventEntry);
161 this->AddFrame(fCurrentEventFrame,
new TGLayoutHints(kLHintsExpandX));
164 fButtonFrame =
new TGHorizontalFrame(
this);
166 TString icondir(Form(
"%s/icons/", gSystem->Getenv(
"VMCWORKDIR")));
168 TGButton *b =
nullptr;
170 b =
new TGPictureButton(fButtonFrame, gClient->GetPicture(icondir +
"arrow_left.gif"));
172 b =
new TGTextButton(fButtonFrame,
"Prev");
174 fButtonFrame->AddFrame(b,
new TGLayoutHints(kLHintsCenterY, 1, 1, 1, 1));
178 b =
new TGPictureButton(fButtonFrame, gClient->GetPicture(icondir +
"arrow_right.gif"));
180 b =
new TGTextButton(fButtonFrame,
"Next");
181 fButtonFrame->AddFrame(b,
new TGLayoutHints(kLHintsCenterY, 1, 1, 1, 1));
184 fRerunButton =
new TGTextButton(fButtonFrame,
"Rerun Event");
185 fRerunButton->Connect(
"Clicked()",
"AtSidebarEventControl",
this,
"RedrawEvent()");
186 fButtonFrame->AddFrame(fRerunButton,
new TGLayoutHints(kLHintsCenterY, 1, 1, 1, 1));
188 this->AddFrame(fButtonFrame,
new TGLayoutHints(kLHintsCenterX));
193 UInt_t h, UInt_t options, Pixel_t back)
197 fBranches.insert({
"AtRawEvent", rawEvent});
198 fBranches.insert({
"AtEvent",
event});
199 fBranches.insert({
"AtPatternEvent", patternEvent});
201 for (
auto &[className, branch] : fBranches)
208 auto frame =
new TGHorizontalFrame(
this);
210 fLabels =
new TGVerticalFrame(frame);
211 fBoxes =
new TGVerticalFrame(frame);
213 FillBranchFrame(
"Raw Event: ",
"AtRawEvent");
214 FillBranchFrame(
"Event: ",
"AtEvent");
215 FillBranchFrame(
"Pattern Event: ",
"AtPatternEvent");
218 for (
auto &[name, box] : fBranchBoxes)
221 frame->AddFrame(fLabels);
222 frame->AddFrame(fBoxes);
223 this->AddFrame(frame,
new TGLayoutHints(kLHintsExpandX));
231 void AtSidebarBranchControl::FillBranchFrame(std::string label, std::string className)
234 if (branchMap.find(className) == branchMap.end())
237 auto labelf =
new TGLabel(fLabels, label.data());
238 fLabels->AddFrame(labelf,
new TGLayoutHints(kLHintsRight));
240 auto &branchNames = branchMap.at(className);
241 fBranchBoxes[className] =
new TGComboBox(fBoxes);
242 for (
int i = 0; i < branchNames.size(); ++i)
243 fBranchBoxes[className]->AddEntry(branchNames[i], i);
244 fBranchBoxes[className]->Connect(
"Selected(Int_t)",
"AtSidebarBranchControl",
this,
245 TString::Format(
"Selected%s(Int_t)", className.data()));
246 fBranchBoxes[className]->Select(0);
248 fBranchBoxes[className]->SetHeight(labelf->GetHeight());
249 fBoxes->AddFrame(fBranchBoxes[className],
new TGLayoutHints(kLHintsExpandX));
254 for (
auto &[className, branch] : fBranches)
258 int AtSidebarBranchControl::GetIndex(TString val,
const std::vector<TString> &vec)
260 auto iter = std::find(begin(vec), end(vec), val);
261 if (iter == vec.end())
264 return std::distance(begin(vec), iter);
272 fBranchBoxes[className]->Select(ind);
273 fBranches.at(className).SetBranchName(name);
295 for (
auto &[name, branch] : fBranches)
296 if (changedSubject == &branch)
297 fBranchBoxes[name]->Select(GetIndex(branch.GetBranchName(), branchNames.at(name)));