将C++ argv[] 解释为变量与 CERN 根之间的关系
Interpret C++ argv[] as relationship between variables with CERN's ROOT
我希望能够调用命令行中变量或变量组合的函数,例如:
$ ./myFunction.exe "var1"
或
$ ./myFunction.exe "var1/var2"
稍后,在脚本中,我定义了一个变量 float var ,该>应根据用户输入来定义。对于第一种情况,我想要:
float VAR = var1;
...对于第二种情况,我想要:
float VAR = var1/var2;
Cern的根框架中是否有一种方法可以将此用户定义的字符数组解释为此类变量名称之间的关系?我意识到这是一个伸展,但是现在每次我想更改VAR时,我都需要对此进行精心编码,我宁愿不必这样做。
请注意,这些变量是在我从外部 *.root文件中读取的ttree中命名的,因此我认为使用groot-> ProcessLine()()可能有一种方法来定义 var ,但我无法弄清楚。我知道这在直c 中是不可能的,但是我觉得有根。
您是否在根5或6上?对我来说,这在root 5.34:
上起作用在test.cpp
double x = 2;
double y = 3;
double z;
void test(const char* arg)
{
gROOT->ProcessLine(TString("z=")+arg);
cout << z << endl;
}
在根外壳中:
.x test.cpp("x/y")
输出:
0.666667
不起作用的是x
和y
作为test()
中的本地变量,这将导致
Error: Symbol x is not defined in current scope
Error: Symbol y is not defined in current scope
在本示例中也创建了变量z
,因此ProcessLine
函数似乎在全局范围中运行,而不是在调用函数的范围中运行。
我假设您只想将算术表达式传递到例程中。如果是这样,这是使用root's tformula的替代解决方案(在root6中):
#include <iostream>
#include "TFormula.h"
#include "TString.h"
int main(int argc, char **argv)
{
TFormula my_formula("my_formula", TString(argv[argc-1]) );
my_formula.SetParNames("var1", "var2");
my_formula.SetParameter("var1", 3.45678);
my_formula.SetParameter("var2", 8.76543);
// The formula does not define any variable so input to TFormula::Eval() is
// irrelevant
double dummy = 0;
std::cout << "my_formula: " << my_formula.GetExpFormula("clingp") << "n"
<< "result: " << my_formula.Eval(dummy) << std::endl;
return EXIT_SUCCESS;
}
注意事项是您需要将变量包裹在方括号中[]
中:
$ ./myFunction.exe "[var1]/[var2]"
$ ./myFunction.exe "[var1]"
$ ./myFunction.exe "[var1]/[var2]+[var1]*[var2]"
这是tformula参数的符号。
相关文章:
- C++中std::resize(n)和std::shrink_to_fit之间的区别
- int(c) 和 c-'0' 之间的区别。C++
- 在cuda线程之间共享大量常量数据
- 在c代码之间共享数据的最佳方式
- Mix_Init和Mix_OpenAudio SDL之间的区别是什么
- C++ 使用 assign 函数的字符串与直接使用 '=' 更改值的字符串之间的区别
- VSOMEIP-2个设备之间的通信(TCP/UDP)不工作
- std::atomic和std::condition_variable wait,notify_*方法之间的区别
- 大小相等但成员数量不同的结构之间的性能差异
- 类与私有变量的其他类之间的线程安全性
- 如何在cpp文件之间切换窗口?在Qt中
- 线程之间的布尔停止信号
- 我是C++编程的新手,这些代码之间有什么区别,我应该使用哪一个
- 在 const 函数中通过引用和指针返回之间的区别
- 我想知道长双倍和双倍之间的区别
- 如何防止clang格式在流运算符调用之间添加换行符<<
- 在两台机器之间进行时间戳的最佳c++chrono函数是什么
- 使用.find函数在c++中查找字符和另一个字符之间的大小
- 构造函数和转换运算符之间的重载解析
- 将C++ argv[] 解释为变量与 CERN 根之间的关系