在数据帧中保存TLorentzVector信息以备将来分析

问题描述 投票:1回答:1

我想知道将TLorentzVector信息从.root文件转换为Pandas DataFrames的推荐协议。到目前为止,我的策略一直是为我关心的每个粒子保存pT,eta和phi信息。然后,我编写自己的函数(基于TLorentzVector定义)来计算我可能偶尔需要的任何其他数量,例如DeltaR,mT等。

然后我想知道是否只能将TLorentzVector保存到我的DataFrame中,并使用uproot即时使用类似这样的方法获取pT,eta,phi等数量(当我在我刚从.root文件转换的DataFrame :)

for row in df.index:
    print(df.at[row,"leptons_p4_0"].pt)

但是,我很快意识到,仅Pandas并不能理解TLorentzVector是什么,因此当我稍后使用pd.read_csv重新加载文件时,这将不起作用。

然后,其他人如何建议我将TLorentzVector信息保存在稍后将在大熊猫中打开而不是连根拔起的DataFrame中?看来我的选择是为每个粒子保存(pT,eta,phi)列,然后编写我自己的函数,或者保存TLorentzVector组件(E,px,py,pz)并使用uproot_methods来转换它们每次我重新加载DataFrame时,组件都返回到TLorentzVector中。或者,希望我还没有另一个更简单的解决方案!

非常感谢您的任何建议。

我想知道将TLorentzVector信息从.root文件转换为Pandas DataFrames的推荐协议。到目前为止,我的策略是将pT,eta和phi信息保存为...

uproot
1个回答
0
投票

由于熊猫没有任何处理洛伦兹向量的功能,只能根据其成分(pT,eta,phi,mass)表达它们,并且编写自己的函数对其进行转换是唯一的选择,特别是如果您想要与CSV相互保存。

© www.soinside.com 2019 - 2024. All rights reserved.