00001 #include "TF1F.h"
00002 #include "TMath.h"
00003 ClassImp(TF1F);
00004
00005 void TF1F::Save(Double_t xmin, Double_t xmax, Double_t ymin, Double_t ymax, Double_t zmin, Double_t zmax) {
00006 fXmin = xmin; fXmax = xmax; fStep = 20, fdX = 1./fStep; fNpx = TMath::Nint((fXmax - fXmin)/fdX);
00007 TF1::Save(xmin,xmax,ymin,ymax,zmin,zmax);
00008 }
00009
00010 Double_t TF1F::GetSaveL(Double_t *xx) {
00011
00012 if (xx[0] < fXmin || xx[0] > fXmax || fdX <= 0) return 0.;
00013 Int_t bin = Int_t((xx[0]-fXmin)/fdX);
00014 #if 1
00015 return fSave[bin];
00016 #else
00017 Double_t xlow = fXmin + bin*fdX;
00018 Double_t xup = xlow + fdX;
00019 Double_t ylow = fSave[bin];
00020 Double_t yup = fSave[bin+1];
00021 Double_t y = ((xup*ylow-xlow*yup) + xx[0]*(yup-ylow))/fdX;
00022 return y;
00023 #endif
00024 }
00025
00026 Double_t TF1F::GetSaveL(Int_t N, Double_t x, Double_t *y) {
00027
00028 memset(y, 0, N*sizeof(Double_t));
00029 Int_t bin = Int_t((x-fXmin)/fdX);
00030 Int_t i1 = 0;
00031 while (bin < 0) {i1++; bin += fStep;}
00032 for (Int_t i = i1; i < N && bin < fNsave - 3; i++, bin += fStep) {
00033 y[i] = fSave[bin];
00034 }
00035 return y[0];
00036 }
00037
00038 Double_t TF1F::GetSaveL(Int_t N, Double_t *x, Double_t *y) {
00039
00040 memset(y, 0, N*sizeof(Double_t));
00041 if (fNsave <= 0) return 0.;
00042 for (Int_t i = 0; i < N; i++) {
00043 if (x[i] > fXmin) {
00044 Int_t bin = Int_t((x[i]-fXmin)/fdX);
00045 if (bin < fNsave - 3) y[i] = fSave[bin];
00046 }
00047 }
00048 return y[0];
00049 }