Пустая гистограмма TH2F в Root - PullRequest
1 голос
/ 09 февраля 2020

Я пытаюсь построить 2-мерный из файла root, но по какой-то причине вместо хорошего графика я получаю пустой холст с 918 записями, среднее значение x = 0, среднее значение y = 47 и оба из Стандартные отклонения равны 0. Я понятия не имею, почему это произошло, и, видимо, проблема с последней строкой h1->Fill(xk,yk);, потому что cout непосредственно перед тем, как он работает. Не могли бы вы помочь мне разобраться?

Вот мой полный код:

{
#include <iostream>
#include <vector>

using namespace std;

TFile f1("data1.root");
TFile f2("data2.root");

TTreeReader reader("T1", &f1);
TTreeReaderValue<Double_t> X(reader, "X"); 
TTreeReaderValue<Double_t> Y(reader, "Y");

TH2F* h1=new TH2F("h1"," ",10000,0,900,0,70);

vector<vector<Double_t>>v1;

while (reader.Next()) {
    //cout<<*X<<" "<<*Y<<endl;
    vector<Double_t>i;
    i.push_back(*X);
    i.push_back(*Y);
    v1.push_back(i);
}

for (int k=0;k<918;k++)
    {
        Double_t xk=v1[k][0];
        Double_t yk=v1[k][1];
        cout<<xk<<" "<<yk<<endl;
        h1->Fill(xk,yk);
    }

h1->Draw();
}

1 Ответ

0 голосов
/ 10 февраля 2020

Я подозреваю, что вы вызываете неправильный конструктор в

TH2F* h1=new TH2F("h1"," ",10000,0,900,0,70);

Конструкторы TH2F из здесь принимают 6 цифр c аргументов (3 для оси x и 3 для ось y) или указатели на массивы, и вы предоставляете 5.

Проверка создаваемой гистограммы:

root [2] h->GetXaxis()->GetNbins()
(int) 10000
root [3] h->GetYaxis()->GetNbins()
(int) 900

root [6] h->GetXaxis()->GetBinLowEdge(1)
(double) 0.0000000


root [10] h->GetYaxis()->GetBinLowEdge(1)
(double) 0.0000000
root [11] h->GetYaxis()->GetBinUpEdge(900)
(double) 70.000000

root [13] h->GetXaxis()->GetBinUpEdge(10000)
(double) 1.0000000

похоже, что разрешение перегрузки выбрало создание экземпляра оси x отличается от того, что вы хотели. Я подозреваю (по предоставленным вами числам), что вы пропустили количество корзин по оси Y:

TH2F* h1=new TH2F("h1"," ",10000,0,900,10000,0,70);
...