Эй, я использую ROOT в данный момент, и я создал макрос, который будет брать две гистограммы и вычитать одну из другой, а также перебирать каждую ячейку, чтобы проверить, есть ли какие-либо ненулевые ячейки, это проверит, являются ли гистограммы или нет равный.
В настоящее время я создаю две гистограммы внутри макроса только для проверки функции, а третья гистограмма - Hist 1 - Hist 2, но я хотел бы сделать так, чтобы я мог вводить любые две гистограммы в качестве параметров в макрос и выполнять тест .
Как я могу это сделать?
Макрос в настоящее время таков, и, чтобы напомнить вам, что две гистограммы внутри предназначены только для его проверки:
#include "TCanvas.h"
#include "TROOT.h"
#include "TPad.h"
#include "TH1F.h"
#include "math.h"
#include "TRandom.h"
#include "TH1.h"
string subtracthist() {
TCanvas *c1 = new TCanvas();
////////First histogram
TH1F *h1 = new TH1F("h1","Histogram 1",100,-3,3);
h1->FillRandom("gaus",10000);
////////Second histogram
TH1F *h2 = new TH1F("h2","Histogram 2",100,-3,3);
h2->FillRandom("gaus",10000);
////////First Histogram minus Second Histogram
TH1F *h3 = new TH1F("h3","Subtracted Histograms",100,-3,3);
h3->Add(h1,h2,1,-1);
// h3->Draw();
//TH1F *h4 = new TH1F("h4","Test", 100,-3,3);
//h4->Draw();
//c1->Update();
////////Caluclate Total number of bins in histogram including underflow and overflow bins
Int_t numberofbins = h3->GetSize();
////////This loop will run through each bin and check its content, if there is a nonzero bin the loop will break and output "The Histograms are not the same" If all bins are zero, it will output "The Histograms are the same".
for(int i=0; i<=(numberofbins - 1); i++) {
Int_t x = h3->GetBinContent(i);
if (x != 0)
{return "The Histograms are not the same";
break;}
}
return "The Histograms are the same";
}
main()
, я рекомендую не добавлять функциюmain
в файлы корневых макросов. 09.04.2016