У меня есть XY-карта положений событий в детекторе частиц, и эти события имеют десятки переменных, которые их характеризуют. Возьмите энергию, например: я могу найти среднюю энергию события в маленькой области детектора, сделав три TH2F в ROOT:
TH2F* h_xy = new TH2F("h_xy","h_xy",100,-10,10,100,-10,10);
TH2F* h_xyw = new TH2F("h_xyw","h_xyw",100,-10,10,100,-10,10);
TH2F* h_avg = new TH2F("h_avg","h_avg",100,-10,10,100,-10,10);
я чувствую h_xy
со всеми моими событиями, распределенными по xy. Каждая запись в гистограмме взвешивается до 1. Затем я заполняю h_xyw
со всеми моими событиями, взвешенными по энергии. Разделив h_xyw
от h_xy
дает среднюю энергию за бин, который я положил в h_avg
, Я делаю все это в командной строке ROOT, поэтому очень просто:
tree->Draw("energy>>h_xy","","colz")
А затем вытащить информацию прямо из гистограмм. следующий, Я хотел бы иметь возможность построить стандартное отклонение весов в каждой корзине, в дополнение к средней. Я знаю, что могу сделать это, написав скомпилированный скрипт, но мне интересно, есть ли простой способ сделать эту командную строку, о которой я просто не думал.
Подобно вашим существующим командам, вы можете заполнить другую гистограмму h_xyww
с энергией в квадрате в виде весов. Тогда вы делите h_xyww
от h_xy
(среднеквадратичная энергия), умножьте гистограмму на средние энергии на себя (квадрат средней энергии), а затем вычтите их друг от друга.
std_dev^2 = <E^2> - <E>^2
Других решений пока нет …