У меня возник вопрос, как исправить пустую гистограмму. Я создаю вектор под названием «масса», для которого я хочу построить его гистограмму (как видно из кода) из переменных в моих ветвях Muon_PT, Muon_Eta, Muon_Phi и mass. Однако я получаю пустую гистограмму. Я подозреваю, что он не читает переменные ветви. Я подозреваю это, потому что, когда я пишу что-то вроде:
auto idx_cmb = Combinations(Muon_PT, 2);
, я получаю ошибку, которая:
Warning in <TROOT::Append>: Replacing existing TH1: mass (Potential memory leak).
terminate called after throwing an instance of 'std::runtime_error'
what(): Cannot make unique combinations of size 2 from vector of size 0.
Хотя, когда я строю гистограмму в терминале ROOT, я могу получить гистограмму Просто когда я пишу это по собственному сценарию, я не могу вызвать ветви. Ниже мой код:
#include "Math/Vector4Dfwd.h"
#include "ROOT/RDF/RInterface.hxx"
#include "ROOT/RDataFrame.hxx"
#include "ROOT/RVec.hxx"
#include "TCanvas.h"
#include "TH1D.h"
#include "TLatex.h"
#include "TLegend.h"
#include "TStyle.h"
#include <string>
#include <vector>
using namespace ROOT::VecOps;
const auto z_mass = 91.2;
void selectMuon() {
ROOT::EnableImplicitMT();
ROOT::RDataFrame df("Delphes;4", "tag_1_delphes_events.root");
TH1F *histDiMuonMass = new TH1F(
"mass", "M_{inv}(Z[3]Z[5]); M_inv (GeV/c^2); Events", 50, 0.0, 1500);
RVec<float> Muon_PT;
RVec<float> Muon_Eta;
RVec<float> Muon_Phi;
RVec<int> Muon_Charge;
// auto idx_cmb = Combinations(Muon_PT, 2);
for (size_t i = 0; i < Muon_Charge.size(); i++) {
if (Muon_Charge[1] != Muon_Charge[2]) {
ROOT::Math::PtEtaPhiMVector m1((Muon_PT)[1], (Muon_Eta)[1], (Muon_Phi)[1],
0.1);
ROOT::Math::PtEtaPhiMVector m2((Muon_PT)[2], (Muon_Eta)[2], (Muon_Phi)[2],
0.1);
auto mass = (m1 + m2).M();
histDiMuonMass->Fill(mass);
auto df_mass = df.Define("Dimuon_mass", InvariantMass<float>,
{"Muon_PT", "Muon_Eta", "Muon_Phi", "m"});
// Make histogram of dimuon mass spectrum
auto h = df_mass.Histo1D({"Dimuon_mass", "Dimuon_mass", 30000, 0.25, 300},
"Dimuon_mass");
}
} // end of event for loop
histDiMuonMass->Draw();
}
Почему нет доступа к переменным филиала Muon_PT, et c. Как я могу это исправить?