如何正确地将分支添加到已存在的树中
How to Properly Add a Branch to An Already Existing Tree
我正在计算dimuon通道的不变质量。
我正在使用RDataFrame进行此计算。我的代码片段如下:
// Enable multi-threading
ROOT::EnableImplicitMT();
// Create dataframe from NanoAOD files
ROOT::RDataFrame df("Delphes;6",
"tag_1_delphes_events.root");
//auto mu_mass = df.Define("muon_mass", "0.1");
// For simplicity, select only events with exactly two muons and require opposite charge
//auto df_2mu = df.Filter("nMuon == 2", "Events with exactly two muons");
auto df_os = df.Filter("Muon.Charge[0] != Muon.Charge[1]", "Muons with opposite charge");
// Compute invariant mass of the dimuon system
auto df_mu_mass = df_os.Define("muon_mass", "0.1");
auto df_mass = df_mu_mass.Define("Dimuon_mass", InvariantMass<float>, {"Muon.PT", "Muon.Eta", "Muon.Phi", "muon_mass"});
// Make histogram of dimuon mass spectrum
auto h = df_mass.Histo1D({"Dimuon_mass", "Dimuon_mass", 30000, 0.25, 300}, "Dimuon_mass");
// Request cut-flow report
auto report = df_mass.Report();
// Produce plot
我的PT、eta、Phi值是浮点值。我得到的错误是:
terminate called after throwing an instance of 'std::runtime_error'
what(): RColumnValue: type specified for column "muon_mass" is ROOT::VecOps::RVec<float> but temporary column has type double
我试图在我的Define中在0.1前面插入RVec,但没有成功。我该如何解决这个问题以使其正常工作?
我发现解决这个问题的最简单方法是在Tree 中手动添加分支值
相关文章:
- 将成员变量添加到共享库中的类中,不会破坏二进制兼容性吗
- 如何在C++中从两个单独的for循环中添加两个数组
- C++模板来检查友元函数的存在
- 如何正确地将分支添加到已存在的树中
- 如何将分支添加到已存在的TTree:ROOT
- 有没有办法将字符串添加到 Vector 中,但前提是它尚不存在?->C++
- 如果键不存在,使用 [] 运算符访问 STL Map 元素会添加新元素
- 添加按钮时出错,即使存在这样的插槽,也不存在
- 阵列不能两次将相同的名称保存,当要添加新字符串时,程序应检查以查看该名称是否已经存在
- 运算符重载:简单添加...错误 C2677:二进制"+":未找到采用类型 ___ 的全局运算符(或者不存在可接受的转换)
- 插入时对对象进行排序(若存在,则添加数据)
- 创建一个函数,该函数返回一个新的相同二叉树,并向所有预先存在的叶添加新节点
- 在文本文件内预先存在的字符串前面添加一个单词
- 要添加到代码中的标头或内容以检测文件夹是否存在
- 添加 -fPIC 编译标志后"Recompile with -fPIC"错误仍然存在
- 如何将宏命令添加到解决方案或项目中存在的所有文件中
- QtableWidget中的主键-如果行存在,则更新,否则添加
- 为已经存在的函数添加功能(c#, c++)
- 连接两个对象容器,如果已经存在则添加元素
- SWIG 添加行以删除不存在的变量