我是高能粒子物理系的一名谦虚的研究生.由于对C/C++毫无根据的厌恶以及对python的热爱,我到目前为止已经使用python进行数据分析(只是简单的事情)并且我将尝试支持针对ROOT库的python脚本,特别是使用MINUIT一些参数最小化.
除了询问是否有人对这些的安装和使用有任何提示,我想知道是否值得尝试它或只是为了使用C/C++的"规范",或者像pyminuit这样的东西是可用的.或者您认为我可以将整个C/C++脚本包装成python代码以利用我现有的自编分析方法(我还没有包装经验).抱歉模糊不清; 我走向了一个远远超过我目前经历的伟大未知.
背景:我们正在设计一个物理应用程序,它将进行大量的数据分析,但我们的重点是整合物理电子设备.
基本上我希望能够用Java编写的C++库编写的root(它是用C++编写的CERN的大数据分析库).基本上从Java中使用ROOT类的能力(并且不会浪费太多时间来编写JNI包装器)对我们来说是一个显而易见的事情(如果它很难,我们很可能会使用Qt).
我可以想到以下方法
其他可能很重要的事情:我们可以访问根源代码,但我们不想改变它.我们希望结果是可移植的.我们想坚持免费图书馆.正如我所说 - 我们可以从一开始就使用大量的ROOT代码,而不用大惊小怪.
我写了一个C++程序(有一个main.cpp,各种标题和实现文件),可以在g ++下编译.现在我试图在Cern的ROOT库中编译它,但我不知道如何,因为我知道如何在ROOT中编译文件的唯一方法是使用.L main.cpp.
如何在ROOT中包含多个文件?
我正在尝试使用python为TTree(ROOT对象)创建一个过滤器pyROOT.我从TTree获得了几个分支的信息,其中一些分支是C++类型的vector<int>,vector<float>或者vector<string>是.
为了将信息传递到新树,我需要从旧树访问它,我需要将向量等的地址传递给树,然后填充树.为此,我需要访问这样一个新向量的地址.这在C++中非常简单,但在查看Cython和boost之后,我无法解决这个问题.最终我想要像:
cppintvectorinpython = getcppintvector()
oldtree.setbranchaddress(branchname,cppintvectorinpython)
Run Code Online (Sandbox Code Playgroud)
这可能吗?
我正在尝试从Cern ROOT TTree文件中读取数据。我以前没有使用过root,为此我有点挣扎。我对C ++很熟悉,因此可以对数组的内容进行排序,但是我已经在线浏览了多个教程页面,但是却一无所获。
如何从TTree文件读取数据?我认为可以通过在for循环内遍历树的节点(再次,我不确定文件的组织方式?)来完成。
这是我一直尝试遵循的一种参考示例。
https://root.cern.ch/drupal/content/using-macro-read-ttree
据我了解,这是一个通用的问题,但是TTree不是通用的吗?(因为它们可以包含不同的变量名,所以我认为?)
因此,我认为重要的进一步信息是:
通过打开根对象浏览器TBrowser b-并浏览到'.root'文件,(并双击它),我可以看到该文件中有12个变量。例如,一个叫做“质量”,“电荷”等。
希望有足够的信息?如果没有,我可以提供更多。
在我的代码中,图例在循环内运行,我试图显示一个图表
0-10%
10-20%
Run Code Online (Sandbox Code Playgroud)
等等。问题是当我写这段代码时
legend->AddEntry(gr[i], Form("%d0-%d0 %%",i+0,i+1), "lep");
Run Code Online (Sandbox Code Playgroud)
表明
00-10%
10-20% etc
Run Code Online (Sandbox Code Playgroud)
那么如何在第一行不显示00,而是显示0呢?
所以,我已经试了又试遵循类似的问题问像这一个,但都没有成功。
这真的很简单-我有一些.root文件,可以看到ROOT中的直方图,但希望将数据导出为.txt或类似文件,以便能够在其他程序中进行分析。
我正在尝试在 Linux 上安装 ROOT CERN 软件包,使用 Ubuntu 18.04,每当我进入先决条件下载时,使用以下命令:
sudo apt-get install dpkg-dev cmake g++ gcc binutils libx11-dev libxpm-dev libxft-dev libxext-dev python openssl-dev
Run Code Online (Sandbox Code Playgroud)
我得到以下输出:
Reading package lists... Done
Building dependency tree
Reading state information... Done
E: Unable to locate package openssl-dev
Run Code Online (Sandbox Code Playgroud)
我已尝试按照此线程中的建议配置我的存储库来纠正此问题,但问题仍然存在。
想知道如何解决这个问题。谢谢你。
编辑:
sudo apt update命令的完整输出是:
Hit:1 http://us.archive.ubuntu.com/ubuntu bionic InRelease
Hit:2 http://security.ubuntu.com/ubuntu bionic-security InRelease
Hit:3 http://us.archive.ubuntu.com/ubuntu bionic-updates InRelease
Reading package lists... Done
Building dependency tree
Reading state information... Done
All packages are up to date.
Run Code Online (Sandbox Code Playgroud)
我也尝试安装 libssl-dev …
我正在使用CERN的ROOT框架(必需),我想从TNtuple中获取数据并绘制图形.我可以在创建TNtuple时或在将其写入.root文件之后绘制数据图形.一些支持文档建议我创建一个TTree,但这似乎可能是过度/迂回,因为我不会将它用于其他任何事情(并且TNtuple满足我的所有其他要求).有没有人有更好的建议如何从TNtuple中提取数据并绘制图表?
我正在使用 ROOT Cern 来求解多变量非线性方程组。对于某些问题,我有 4 个函数和 4 个变量。然而,对于其他人,我需要 20 个函数和 20 个变量。我使用一个名为“WrappedParamFunction”的类来包装函数,然后将包装的函数添加到“GSLMultiRootFinder”来解决它们。该函数是这样包装的:
ROOT::Math::WrappedParamFunction<> g0(&f0, "number of variables", "number of parameters");
Run Code Online (Sandbox Code Playgroud)
因此,我需要在我的void main(){}代码部分之前声明 f0...fi 函数。我以这种方式声明函数:
double f0(const double *x, const double *par){return -par[0]+y[0]*par[1];}
double f1(const double *x, const double *par){return -par[1]+y[1]*par[2];}
.
.
Run Code Online (Sandbox Code Playgroud)
有没有办法在循环内创建这些函数并将它们堆叠在数组中?像这样的东西:
double (*f[20])(const double *x, const double *par);
for(int i=0;i<20;i++){
f[i]= -par[i]+x[i]*par[i+1];
}
Run Code Online (Sandbox Code Playgroud)
这样稍后我就可以用这种方式包装函数:
ROOT::Math::WrappedParamFunction<> g0(f[0], "number of variables", "number of parameters");
Run Code Online (Sandbox Code Playgroud) 我正在尝试编写一个小宏,它从具有4列的ASCII文件中读取数据.但是我想仅将第二列的第二列绘制为(x,y).