= pyROOTとgwpyを組み合わせて使う =
== pyROOT ==
[[https://www.isee.nagoya-u.ac.jp/~okumura/files/RHEA2017-6.pdf|高エネルギー宇宙物理学のためのROOT入門 ‒第6回‒]]
[[https://www-he.scphys.kyoto-u.ac.jp/member/n.kamo/wiki/doku.php?id=study:software:root:pyroot|KamonoWiki]]
[[https://www-he.scphys.kyoto-u.ac.jp/member/shotakaha/dokuwiki/doku.php?id=toolbox:pyroot:start|QumaWiki]]
== gwpyのFrequencySeriesをROOTのTH1にする ==
{{{#!python
mean = FrequencySeries(...)
error = FrequencySeries(...)
nbin = mean.size
value = mean.value
freqs = mean.frequencies.value
df = mean.df.value
fmin = freqs[0] - df*0.5
fmax = freqs[-1]+ df*0.5
h = TH1F('h', ';Frequency [Hz]', nbin, fmin, fmax)
h.Sumw2()
h.SetContent(array('d', np.insert( value, 0,0) ) )
h.SetError( array('d', np.insert(error.value, 0,0) ) )
}}}
for文でSetBinContentして行っても良いが、pythonでは極力ループを避けるべきなので、配列として渡す。<
>
numpy.ndarrayは直接渡せないので、array.arrayを介す必要がある。([[https://oxon.hatenablog.com/entry/20101014/1287009414|参考]])<
>
[[https://root.cern.ch/doc/master/classTH1.html#a828aa3b97264611a20c3849e1820b28b|SetContent()]]と[[https://root.cern.ch/doc/master/classTH1.html#a02b9ba99fdb9312861ac3a0f5d25946d|SetError()]]はゼロbin目(アンダーフロー)から詰めるため、ndarrayの先頭にゼロを追加しておく必要がある。
[[http://scikit-hep.org/root_numpy/|root_numpy]]を使えばもっと効率よく書けるかもしれないが、これはインストールの敷居が高いので保留