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