问题标签 [root-framework]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c++ - 具有许多成员变量的类的最佳实践
简短的问题: 如果您必须有许多(甚至超过 200 个)成员变量(它们中的每一个都将是我们分析中感兴趣的一些物理量的图)。声明这些变量的最佳位置是什么?
长解释: 我用于分析的框架创建了一个循环事件的类,它可以缩小到
在标题中,您可以声明如下指针(这显然是ROOT
我们必须使用的包的要求):
和指向直方图类的指针:
然后constructor
必须初始化指向某个明确内存地址的指针(据我所知,这是为了以后从文件中读取数据)
然后在initialize
函数中打开一个包含先前存储的数据的文件,并将类成员的地址设置为指向文件中包含的对象(我不知道这是如何工作的,或者我的陈述是否准确):
然后在execute
循环中调用函数,每个事件一次,你会做你想要的物理选择
最后在finalize
函数中,您将在选择完成后的每个事件中执行所有您需要做的事情,例如将直方图存储在另一个文件中
现在想象一下,我有 20 个 quantites jets
,30 个electrons
,30 个muons
等等,你可以看到成员变量的数量是如何变得巨大的!很快代码就变得一团糟,那么您的专业程序员将如何处理这种情况?希望这足够清楚!
root-framework - 将 TTreeCache 与 TChain 好友一起使用
我在我的分析代码中使用了三个交友的 TChains,地址仅为每条链上的一些分支设置。在这种情况下,我使用 TTreeCache 的最佳方式是什么?我是否必须手动指定要缓存的分支?我想缓存所有设置了地址的分支,但只有那些。
在单独的说明中,我想首先只从第一棵树中获取条目,并且只有在我决定进一步分析事件时才从其他友好的树中获取条目。
c++ - 没有 C++ 的 ROOT
今年夏天我将使用 ROOT 进行数据分析。但是我没有任何C++背景。这个问题可能是基于意见的,但我需要帮助。是否可以在不了解 C++ 的情况下使用 ROOT?提前致谢!
c++ - 在 ROOT 中绘制 ASCII 文件
我正在尝试编写一个从具有 4 列的 ASCII 文件中读取数据的小宏。但我只想将第二列和第三列绘制为(x,y)。
java - ROOT 的 Java 包装器。OutputStreamReader 被阻塞
TLDR;有没有一种友好的方法可以让 Java 从 ROOT 标准输出中读取?反之亦然?
我有一个启动 ROOT 进程的 Java 函数。Java 和 ROOT 然后通过标准输入和标准输出进行通信。好吧,无论如何,这就是计划。出于某种原因,我无法cin
通过 Java 进程访问(ROOT)输出的任何信息。
我确定我在这里偶然发现了几个同时出现的问题,很抱歉这个问题很长,包含的代码尽可能简单
根代码:
我使用以下命令运行此代码:
输出如下所示:
当我用键盘输入一些文本时,它会以明显的方式工作。
现在这里是相关的Java代码:
然后调用start
会communicate
产生以下输出:
然后它阻塞。Java 甚至没有收到“ROOT::loop iteration”这一行。
任何帮助或方向将不胜感激。我所有的谷歌搜索和实验都是空白的。
编辑
cout
将语句更改为:cout << "stuff" << endl;
使事情变得更好。我的 java 程序现在看起来像:
然后阻塞。
从 ROOT 代码中删除该行cin >> in_str;
会导致 Java 生成以下无限内容:
所以现在的问题cin
...
shell - 将 shell 命令输出分配给 ROOT 中的变量
我正在我的 ROOT 代码中执行一个 shell 命令,使用gSystem
它返回一个int
,如此处所示gSystem->Exec()。但是当我尝试将输出分配给代码变量时,分配不会发生。
我也试过gSystem->Exec("ls ./folder | egrep -o '[0-9]{3,3}' | head -1") >> low_edge
了,但没有成功。
我错过了一些明显的东西吗?
c++ - 在已编译的 ROOT (CERN) 应用程序中将 TCanvas 绘制到屏幕上
在屏幕上绘画的规则是什么?
我的最终目标是将 TCanvas 放入一个类中并从那里进行绘制,但现在我认为看一个不太复杂的示例可能会有所帮助。下面是一些在我的电脑上编译并绘制到屏幕上的代码。
您可能会注意到一些注释掉的行。如果我使用这些定义中的任何一个,在稍后调用的and方法canvas
上使用适当的成员访问运算符,应用程序会在将空白 TCanvas 窗口打印到屏幕后崩溃。如果我更改并指向指针,它也会崩溃。Update
Draw
app
h
如果我尝试使用任何类型的 ROOT 对象来实例化一个类,它会使应用程序崩溃。
现在,我正在使用 MSVC++ 进行编译cl.exe
并与link.exe
. 我正在开发一个 64 位的 Windows 7 Enterprise N。我正在尝试移植一个我在 Unix 中构建的应用程序,它new TApplication("name",0,0);
在开始时很简单,main
一切正常。
所以,重申一下:我怎样才能在这个操作系统和其他操作系统中将我的直方图显示在屏幕上?我怀疑我是否能够理解“为什么”,但是为其他阅读此内容的人写一些关于此的内容可能会很好。否则,只需一步一步地描述如何使用这些对象进行绘画就可以了。
非常感谢您对此的任何帮助;如果证明有用,我很乐意提供更多信息/示例。
更新:如果我用类似的东西编译它,它适用于我的特殊情况
不知道为什么。
请参阅https://root.cern.ch/phpBB3/viewtopic.php?f=3&t=3402&p=85329&hilit=Vector+stl+of+TH1F *+Objects#p85329 。
c++ - 当您将对象作为参数传递给 C++ 中的函数时,您可以从 ROOT 对象访问方法吗?
请原谅我的无知,但我是 C++ 和 ROOT 的新手,我不知道我做错了什么。
我要做的是编写一个函数,该函数返回直方图中 n 峰值的 bin 位置。以下是我的代码:
当我在 ROOT 中执行此代码时,我得到以下信息:
我认为这是访问函数内部对象方法的问题,因为当我在 testing() 函数中调用 histo->GetNBinsX() 方法时,我没有遇到任何问题。不过我不知道。
谢谢,如果我正在做其他灾难性的可怕编码实践,请告诉我。
c++ - 从 ROOT(cern)使用 AddFriend 时出现“非法指针”错误
目标; 我希望比较两个具有相同结构的ROOT TTree对象的内容(但显然不是相同的内容)。最好的方法似乎是使用AddFriend。
问题; 我收到此错误消息;
到目前为止我已经尝试过什么;在成功运行此页面
底部的示例后,我决定将其缩减为仅阅读和添加朋友部分,因为我已经创建tree3.root
并tree3f.root
在第一次运行中。所以我有一个名为 tree3.C 的文件,其中包含;
当从根提示符加载 ( root[] .L tree3.C
) 并运行 ( )时,这按预期工作。root[] tree3r()
因此,我将副本放在包含我的两个根文件plainMaskOutput.root
和, 的文件夹中DNMaskOutput.root
,并更改了副本中的字符串以匹配我的文件名。所以我有;
这给出了上面的错误。我不明白为什么这些事情的行为不同?为什么他们不能只是朋友?
c++ - TTree 对象;使用绘制选项对差异进行直方图
此宏适用于ROOT (cern) TTree对象。其目的是显示一个直方图并从中减去另一个直方图。树是朋友。我正在尝试使用这些Draw()
选项从另一个中减去一个直方图;
然而,它使错误的轴为负。结果看起来像;
据我所知,这些图表的形状几乎相同,这显然是它们背靠背的显示。我怎样才能让它改变它减去的轴,从x到y?
它可能不需要,但这是完整的宏;