2016-10-16 3 views
0

히스토그램의 일부분을 플롯하는 가장 좋은 방법은 무엇입니까 (오류 데이터 보존 중)?히스토그램의 특정 빈 만 플롯

예를 들어, 약 16k 개의 저장소가있는 막대 그래프가 있지만 12200 - 13500 저장소 만 계획하고 싶습니다. 그러나이 막대 그래프는 두 개의 다른 막대 그래프를 빼서 만들어졌습니다.

: 그래서 표준 포아송 오류 데이터는 다릅니다 오류 데이터 (!. 나는 그것을하지 않는 경우에, 나는 또한 오류가 제대로 전달하는 방법을 강구해야 가정)

내 방식이었다있다

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`.