0

次のような構造のルート ファイルを読み込んでいます。

$ 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: Ru​​ntimeWarning: クラス TF1Parameters のディクショナリがありません TStreamerInfo::BuildOld:0: Ru​​ntimeWarning: 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: Ru​​ntimeWarning: TF1::fSave を type:vector から type:Double_t* に変換できません。エレメント TStreamerInfo::BuildOld:0: Ru​​ntimeWarning: TF1::fParams を type:TF1Parameters* から type:Double_t* に変換できません。要素をスキップ

* ブレーク *セグメンテーション違反

4

0 に答える 0