Hi Christiam, Tim, etc, Most of the time, you can use the number of entries if all your weights = 1. Double_t norm = h->GetEntries(); if (norm) h->Scale(1/norm); If you have weights, you can do: Double_t norm = h->GetSumOfWeights(); At the end, use h->Integral() if you want to normalize to a sub-range of an histogram. Rene Brun Christian Holm Christensen wrote: > > Hi Tim, > > You wrote in a reply to Christopher B. Lirakis: > > > I normalize histograms like this : > > > > let's say h1 contains the TH1 descendant histogram you want to > > normalize (TH1F *h1) > > > > if (h1->Integral()!=0) > > h1->Scale(1/h1->Integral()); > > This is not exactly a FAST way to do this, since it invloves sending > to messages to the TH1 object. If you're not pursuaded that this is > slow, take a look at the code for the method TH1::Intergal(void), > which uses the method TH1::Interal(int, int). The later contains THREE > for loops, and multiple uses of TH1<x>::GetBinContent(int) (one for > each bin)! > > Rather, you should save the returned value in a temporary variable, > compare the value to zero, and if ture, use that value. It may be, > that the compiler actually does exactly this for you, but it really > depends on the compiler optimization, and hence on the compiler - you > really want to minize that dependency. In short, do: > > THF1* h = new THF1(....); > // Fill histogram > int intergal = h->Intergral(); > if (intergral > 0) > h->Scale(1/intergral); > else { > cerr << "Empty Histogram: " << h->GetName() << endl; > return kError; > } > > Omit the last `else' if you don't consider an empty histogram an > error. > > Perhaps a method called TH1* TH1::Normalize() is in order, so that > nobody feels inclinded to write (I belive) slow code. > > I hope this was of some help to you. If my intuition with regards to > speed are completly wrong, I apologize and stand corrected. > > Cheers, > > Christian Holm Christensen > ______________________________________________________________________ > Address: Phone: (+45) 35 35 96 91 > Sankt Hansgade 23, 1. th. Office: (+45) 353 25 307 > DK-2200 Copenhagen N Web: www.nbi.dk/~cholm > Denmark Email: cholm@nbi.dk >
This archive was generated by hypermail 2b29 : Tue Jan 02 2001 - 11:50:17 MET