Hi, when I use Sumw2() (to prepare a histogram with errors for rescaling), it produces strange results when used on the output of my folding function. The folding function works fine by itself, as does Sumw2(). When I try to Sumw2() a folded histogram, all the errors get set to zero. Here is a CINT command sequence that produces the unwanted results: gROOT->Reset(); .L fold.C TF1 *f1=new TF1("y1", "0.1*x", 0,5); TF1 *f2=new TF1("y2", "(sin(4*x))^2", 0,5); TH1D *h = new TH1D("h1","name", 20, 0, 5); h->FillRandom("y2", 500); TH1D *a = foldgauss(h, f1); cout << a->GetBinError(3) << endl; // gives something a->Sumw2(); cout << a->GetBinError(3) << endl; // supposed to give the same, gives 0 And the function foldgauss in fold.C: // fold.C //______________________________________________________________________ // Folds a histogram (orig) with a gaussian with varying sigma // Preserves the original. TH1D *foldgauss(TH1D *orig, TF1 *sigma) { Double_t af, bf, d; Int_t n, nf, offset; d = orig->GetBinWidth(1); // assume all bins alike n = orig->GetNbinsX(); // folder-histogram properties // position zero to the middle of a bin offset = -n-1; af = -d*(n+0.5); nf = 2*n+1; bf = -af; TF1 *f = new TF1("ffunct", "gaus(0)", -1, 1); TH1D *folder = new TH1D("folder", "Folding function", nf, af, bf); TH1D *folded = new TH1D(*orig); folded->Reset(); Double_t temp, stdev, x; for(Int_t i=1; i<=n; i++) { temp = orig->GetBinContent(i); // folding function into histogram x = orig->GetBinCenter(i); stdev = sigma->Eval(x); f->SetParameters(1, 0, stdev); folder->Eval(f); // normalize folder->Scale(1/(folder->Integral())); for(Int_t j=1; j<=nf; j++) if ((i+j+offset >= 1) && (i+j+offset <= n)) folded->AddBinContent(i+j+offset, folder->GetBinContent(j) * temp); } delete folder; delete f; return folded; } Again, please reply also to my e-mail address. Thanks! Ville
This archive was generated by hypermail 2b29 : Tue Jan 02 2001 - 11:50:31 MET