2016-10-16 4 views
0

ヒストグラムの一部を(エラーデータを保存して)プロットする最良の方法は何ですか?ヒストグラム内の特定のビンのみをプロットする

たとえば、約16kビンのヒストグラムがありますが、ビン12200〜13500だけをプロットしたいと思います。ただし、このヒストグラムは他の2つのヒストグラムを引いたものです。だから、それは標準ポアソン誤差データとは異なるのですエラーデータ、持っている(!そうでない場合は、私は仮定し、その後、私はまた、エラーが適切に伝播するようにする方法を把握する必要があります。)

私のアプローチがあった。

TH1D noBgCounts(counts - bgcounts); 
auto noBgCounts_plot = new TH1D("Plot", titleString.c_str(), end_bin - start_bin, start_bin, end_bin); 
for (int i = 0; i < end_bin - start_bin; ++i) { 
    noBgCounts_plot->SetBinContent(i, noBgCounts.GetBinContent(start_bin+i)); 
} 

次に、noBgCounts_plotをプロットしますが、これはエラーを保存しないGetBinContentの戻り値の型を調べているので、標準のsqrtエラーが残っています。

また、このデータ(noBgCounts_plot)にガウス分布を適用する必要があります。ガウス関数は、ビンのエラーを使用してそのパラメータの誤差を定式化していますか? (私はそう仮定します)もしそうなら、ヒストグラムの一部だけをどのようにフィットさせるのですか?

ありがとうございました!

答えて

2

引数のSetBinContentと戻り値GetBinContentは実際にはfloat/doubleだけなので、各ヒストグラムビンの中央値のみをコピーします。エラーもコピーしたい場合は、SetBinErrorGetBinErrorを使用できます。

すべてのビンが隣り合っている場合は、TAxis::SetRangeUserまたはSetRangeの方がよいでしょう。

TH1F* h = new TH1F("h","H",100,-5,5); 
for (int i = 0 ; i < 1000; i ++) { 
    h->FillRandom("gaus"); 
} 
h->Draw(); 
h->GetXaxis()->SetRangeUser(-3,-1); // only draw axis range from -3 to -1 
h->GetXaxis()->SetRange(10,15); // only draw bins 10 to 15 
h->Draw(); 

、引数はxminTH1::Fit (TF1 *f1, Option_t *option="", Option_t *goption="", Double_t xmin=0, Double_t xmax=0)とフィットし、あなたのフィット範囲を設定xmax`。

関連する問題