次のような構造のルート ファイルを読み込んでいます。
$ root -l Residual_Position_iter_99_R1869.root
.lroot [0]
Attaching file Residual_Position_iter_99_R1869.root as _file0...
s
Warning in <TClass::TClass>: no dictionary for class TF1Parameters is available
root [1] .ls
TFile** Residual_Position_iter_99_R1869.root
TFile* Residual_Position_iter_99_R1869.root
KEY: TH1F Pos_g3xcl_100;1
KEY: TH1F Pos_g3ycl_100;1
KEY: TH1F Pos_g2xcl_100;1
KEY: TH1F Pos_g2ycl_100;1
KEY: TH1F Pos_g1xcl_100;1
KEY: TH1F residual_g1xcl_100;1
KEY: TH1F residual_g1ycl_100;1
KEY: TH1F residual_g2xcl_100;1
KEY: TH1F residual_g2ycl_100;1
KEY: TH1F residual_g3xcl_100;1
KEY: TH1F residual_g3ycl_100;1
これを読むために、私はマクロを書きました:
import ROOT
from ROOT import TFile, TH1F, TObject
ROOT.gROOT.SetBatch(True) # This will prevent histogram to show
c=ROOT.TCanvas("c","c",800,600)
f1=ROOT.TFile("Residual_Position_iter_99_R1869.root","READ")
h1x=f1.Get("Pos_g1xcl_100"); c.cd(); h1x.Draw()
c.Print("plots/residual.pdf")
このコードは正常に動作しています。ただし、 Pos*のようなブランチに対してのみ問題ありません。でも交換したら
h1x=f1.Get("Pos_g1xcl_100");
と
h1x=f1.Get("residual_g1xcl_100");
次に、セグメンテーション違反が発生しています[1]。Pos_g1xcl_100 と Residual_g1xcl_100 の違いは、1 つは単純なヒストグラムであり、後の 1 つは適合とともにヒストグラムであることです。
[1]
TClass::TClass:0: RuntimeWarning: クラス TF1Parameters のディクショナリがありません TStreamerInfo::BuildOld:0: RuntimeWarning: TF1::fParErrors を type:vector から type:Double_t* に変換できません。要素をスキップ TStreamerInfo::BuildOld:0: RuntimeWarning: TF1::fParMin を type:vector から type:Double_t* に変換できません。要素 TStreamerInfo::BuildOld:0 をスキップします: RuntimeWarning: TF1::fParMax を type:vector から type:Double_t* に変換できません。要素 TStreamerInfo:: をスキップしますBuildOld:0: RuntimeWarning: TF1::fSave を type:vector から type:Double_t* に変換できません。エレメント TStreamerInfo::BuildOld:0: RuntimeWarning: TF1::fParams を type:TF1Parameters* から type:Double_t* に変換できません。要素をスキップ
* ブレーク *セグメンテーション違反