GSI Object Oriented Online Offline (Go4) GO4-6.4.0
Loading...
Searching...
No Matches
TGo4CommandLine.cpp
Go to the documentation of this file.
1// $Id$
2//-----------------------------------------------------------------------
3// The GSI Online Offline Object Oriented (Go4) Project
4// Experiment Data Processing at EE department, GSI
5//-----------------------------------------------------------------------
6// Copyright (C) 2000- GSI Helmholtzzentrum fuer Schwerionenforschung GmbH
7// Planckstr. 1, 64291 Darmstadt, Germany
8// Contact: http://go4.gsi.de
9//-----------------------------------------------------------------------
10// This software can be used under the license agreements as stated
11// in Go4License.txt file which is part of the distribution.
12//-----------------------------------------------------------------------
13
14#include "TGo4CommandLine.h"
15
16#include <iostream>
17
18#include "TROOT.h"
19
20#include "TGo4Log.h"
21#include "TGo4QSettings.h"
22#include "TGo4MacroDialog.h"
23
24#include <QFileDialog>
25
26TGo4CommandLine::TGo4CommandLine(QWidget *parent, const char *name) :
27 QGo4Widget(parent, name),fbPythonBound(false)
28{
29 setupUi(this);
30
32 QObject::connect(ExecuteBut, &QPushButton::clicked, this, &TGo4CommandLine::ExecuteSlot);
33 QObject::connect(PredefinedBut, &QPushButton::clicked, this, &TGo4CommandLine::PredefinedDialog);
34 QObject::connect(FileSearchBut, &QPushButton::clicked, this, &TGo4CommandLine::FileSearchDialog);
35
37}
38
39
41{
42 QFileDialog fd( this, "Select ROOT macro to execute in GUI", QString(),
43 "ROOT macro (*.C *.c);;Go4 hotstart script (*.hotstart);;Python script(*.py)");
44 fd.setFileMode( QFileDialog::ExistingFile);
45
46 if (fd.exec() != QDialog::Accepted) return;
47
48 QStringList flst = fd.selectedFiles();
49 if (flst.isEmpty()) return;
50 bool iscint = fd.selectedNameFilter().contains(".C") || fd.selectedNameFilter().contains(".c");
51 bool ishot = fd.selectedNameFilter().contains(".hotstart");
52 bool ispyth = fd.selectedNameFilter().contains(".py");
53
54 QString cmd;
55 if (iscint) {
56 cmd = QString(".x ") + flst[0];
57 } else if (ispyth) {
58 cmd = QString("$") + flst[0];
59 } else if (ishot) {
60 cmd = flst[0];
61 } else {
62 std::cout << "TGo4CommandLine NEVER COME HERE - unknown file type!\n-" << std::endl;
63 return;
64 }
65
66 int index = InputLine->findText(cmd);
67 if (index < 0) {
68 InputLine->insertItem(-1, cmd);
69 index = InputLine->findText(cmd);
70 }
71 InputLine->setCurrentIndex(index);
72}
73
78
80{
81 const char pyprompt = '$';
82 QString pyinitfile="python/go4init.py"; // JAM put this to settings later?
83 QString str = InputLine->currentText();
84 if (str.isEmpty())
85 return;
86
87 if (str.contains("help") || str.contains(".go4h"))
88 {
89 PrintHelp();
90 }
91 else if (str.contains(".hotstart") && !str.contains(".x"))
92 {
93 StatusMessage(QString("Executing hotstart script: ") + str);
94 StartHotstart(str.toLatin1().constData());
95 }
96 else
97 {
98 // process CLING line, check if python or not:
99 if (str.contains(pyprompt)) {
100 // Python support as initiated by Sven Augustin, MPI Heidelberg
101 str.remove(0, str.indexOf(pyprompt) + 1);
102 StatusMessage(QString("Executing Python script: ") + str);
103 const QString PY_EXT = ".py";
104 int imin = str.indexOf(PY_EXT + " ");
105 int imax = str.length();
106
107 if (imin == -1) {
108 imin = imax;
109 } else {
110 imin += PY_EXT.length();
111 }
112
113 QString scrstring = str.left(imin);
114 QString argstring = str.mid(imin);
115
116 str = "TPython::Exec(\"import sys; sys.argv = [\'" + scrstring + "\'] + \'" + argstring + "\'.split()\");";
117 str += "TPython::LoadMacro(\"" + scrstring + "\")";
118 if (!fbPythonBound)
119 {
120 QString go4sys=TGo4Log::GO4SYS();
121 str.prepend("TPython::LoadMacro(\"" + go4sys + pyinitfile +"\");");
122 str.prepend("TPython::Bind(TGo4AbstractInterface::Instance(), \"go4\");");
123 fbPythonBound = kTRUE;
124 }
125
126 }
127 else
128 {
129 StatusMessage(QString("Executing command: ") + str);
130 }
131 try
132 {
133 gROOT->ProcessLineSync(str.toLatin1().constData());
134 go4sett->setCommandsHistoryGUI(InputLine->getHistory(50));
135 }
136 catch(std::exception& ex)
137 {
138 StatusMessage(QString("Error invoking command - Exception: ") + QString(ex.what()));
139 }
140 catch(...)
141 {
142 StatusMessage(QString("Error invoking command - unknown Exception!"));
143 }
144
145 }
146
147}
148
150{
151 // read command history from settings:
152 QStringList histlist = go4sett->getCommandsHistoryGUI();
153 InputLine->addItems(histlist);
154 // prepared pre-loading of system macros:
155
156 auto load_macro = [](const char *name) {
157 TString exec = ".L ";
158 exec += TGo4Log::subGO4SYS(name);
159 gROOT->ProcessLineSync(exec.Data());
160 };
161
162 load_macro("macros/corrhistos.C");
163 load_macro("macros/hishisto.C");
164 load_macro("macros/addhistos.C");
165 load_macro("macros/divhistos.C");
166 load_macro("macros/profileX.C");
167 load_macro("macros/profileY.C");
168 load_macro("macros/projectionX.C");
169 load_macro("macros/projectionY.C");
170 load_macro("macros/rebin.C");
171 load_macro("macros/scalex.C");
172 load_macro("macros/fft.C");
173}
174
175
177{
179 if (md.exec() != QDialog::Accepted) return;
180 InputLine->insertItem(0, md.getCommand());
181 InputLine->setCurrentIndex(0);
182}
183
184
186{
187 std::cout <<"\n--- Go4 GUI command line short help --- " << std::endl;
188 std::cout <<"- execute any command by pressing RETURN (Enter key)" << std::endl;
189 std::cout <<"--" << std::endl;
190 std::cout <<"- use '.h' for help concerning ROOT commands" << std::endl;
191 std::cout <<"--" << std::endl;
192 std::cout <<"- use 'go4->...' to access TGo4AbstractInterface for gui commands" << std::endl;
193 std::cout <<"--" << std::endl;
194 std::cout <<"- Some useful Go4 GUI command functions:" << std::endl;
195
196 std::cout <<"\t- TObject *go4->GetObject(const char *itemname);"<< std::endl;
197 std::cout <<"\t\t: get browser object by full pathname. " << std::endl;
198 std::cout <<"\t- TString go4->FindItem(const char *name); " << std::endl;
199 std::cout <<"\t\t: get full pathname of browser object by name " << std::endl;
200 std::cout <<"\t- TString go4->SaveToMemory(const char *path, TObject *obj, Bool_t ownership = kFALSE);"<< std::endl;
201 std::cout <<"\t\t: Put object obj into workspace memory under subfolder path. Returns full item pathname. " << std::endl;
202 std::cout <<"\t- ViewPanelHandle go4->StartViewPanel()"<< std::endl;
203 std::cout <<"\t\t: Open new Go4 viewpanel with default size. Returns handle of new panel." << std::endl;
204 std::cout <<"\t- Bool_t go4->DrawItem(const char *itemname, ViewPanelHandle panel = nullptr, const char *drawopt = nullptr);"<< std::endl;
205 std::cout <<"\t\t: Draw object of full name itemname onto viewpanel panel. Will open new viewpanel if panel not specified. \n\t ROOT drawoption may be set. " << std::endl;
206 std::cout <<"\t- go4->OpenFile(const char *fname)" << std::endl;
207 std::cout <<"\t\t: open ROOT file of fname in Go4 browser " << std::endl;
208 std::cout <<"\t- go4->LaunchAnalysis()" << std::endl;
209 std::cout <<"\t\t: Start Go4 analysis process with previous set up " << std::endl;
210 std::cout <<"--" << std::endl;
211 std::cout <<"---- Please: note the Go4 helpwindow with TGo4AbstractInterface full method documentation!" << std::endl;
212 std::cout <<"---- see example scripts at $GO4SYS/macros !" << std::endl;
213 std::cout <<"---- visit our website at: \t http://go4.gsi.de !" << std::endl;
214 std::cout <<"------ " << std::endl;
215 HelpWindow("docs/Go4Reference.pdf", "Show Go4 Reference manual...");
216}
TGo4QSettings * go4sett
void StartHotstart(const char *filename)
QGo4Widget(QWidget *parent=nullptr, const char *name=nullptr, Qt::WindowFlags f=Qt::Widget)
void StatusMessage(const QString &message)
void HelpWindow(const char *filename, const char *msg=nullptr)
virtual void PredefinedDialog()
virtual void FileSearchDialog()
virtual void LoadHistory()
virtual void ExecuteSlot()
virtual void enterPressedSlot()
virtual void PrintHelp()
TGo4CommandLine(QWidget *parent=nullptr, const char *name=nullptr)
static TString subGO4SYS(const char *subdir)
Return subdirectory in the GO4SYS.
Definition TGo4Log.cxx:189
static const char * GO4SYS()
Return GO4SYS environment variable or Go4 top directory during compile (if GO4SYS) not set.
Definition TGo4Log.cxx:156
const QString & getCommand()