Пустая гистограмма: значения, возможно, не распознаны? - PullRequest
0 голосов
/ 03 марта 2020

У меня возник вопрос, как исправить пустую гистограмму. Я создаю вектор под названием «масса», для которого я хочу построить его гистограмму (как видно из кода) из переменных в моих ветвях 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. Как я могу это исправить?

...