Hi Constantin, Your proposal could not be implemented. I have made this function "const", still being back compatible and without requiring an extra argument. (in CVS) Rene Brun On Thu, 26 Feb 2004, Constantin Loizides wrote: > Hi Rene, > > it happens quite often that I am passing a pointer of > an histogram to another class or to a member function > of another class. Most of the time I only > want to Monte Carlo sample values from that histogram. > So I would prefer to pass const TH1F pointers. > Looking into the ROOT code it seems that it would be no > problem to have something like the following. > > virtual Axis_t TH1::GetRandom(Bool_t UseIfOutdated) const > > with the following implementation > > Axis_t TH1::GetRandom(Bool_t UseIfOutdated) const > { > // return a random number distributed according the histogram bin contents. > // This function checks if the bins integral exists. If not, zero is > // returned > // if UseIfOutdated is true and If the number of entries > // is not the same as when the integral was computed > // the random value is still computed, otherwise (if UseIfOutdated > // is false, again zero is returned > // NB Only valid for 1-d histograms. Use GetRandom2 or 3 otherwise. > > if (fDimension > 1) { > Error("GetRandom","Function only valid for 1-d histograms"); > return 0; > } > > if(!fIntegral) return 0; > Int_t nbinsx = GetNbinsX(); > > if ((!UseIfOutdated) && (fIntegral[nbinsx+1] != fEntries)) > { > Error("GetRandom","Integral values must be computed, but GetRandom() > const was called!"); > return 0; > } > > Double_t r1 = gRandom->Rndm(); > Int_t ibin = TMath::BinarySearch(nbinsx,fIntegral,r1); > return GetBinLowEdge(ibin+1) > +GetBinWidth(ibin+1)*(r1-fIntegral[ibin])/(fIntegral[ibin+1] - > fIntegral[ibin]); > } > > Of course it would be nice to have the same for 2 and 3d, > > what do you think? > > Regards, > Constantin >
This archive was generated by hypermail 2b29 : Sun Jan 02 2005 - 05:50:06 MET