#include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include "TH2F.h" #include "TCanvas.h" #include "TPad.h" #include #include #include #include "TAxis.h" #include "TH1.h" #include "TArrayD.h" using namespace std; void invoke(double a, double b, double c, void (*func)(double, double, double)) { return a,b,c; } Double_t ScaleX(Double_t x, double a, double b, double c, void scaleaxis(double a, double b, double c)) { Double_t v; invoke(a,b,c, scaleaxis); cout << "a=" << a << "b=" << b << "c=" << c << endl; v = a + b*x + c*x*x; return v; } void ScaleAxis(TAxis *a, Double_t (*Scale)(Double_t, double, double, double, void scaleaxis(double a, double b, double c))) { if (!a) return; invoke(a,b,c, scaleaxis); if (a->GetXbins()->GetSize()) { TArrayD X(*(a->GetXbins())); for(Int_t i = 0; i < X.GetSize(); i++) X[i] = Scale(X[i],a,b,c,scalexaxis); a->Set((X.GetSize() - 1), X.GetArray()); } else { a->Set( a->GetNbins(), Scale(a->GetXmin()), Scale(a->GetXmax())); } return; } void ScaleXaxis(TH1 *h, Double_t (*Scale)(Double_t)) { if (!h) return; ScaleAxis(h->GetXaxis(), Scale); return; } void scaleaxis(double a, double b, double c) { TFile *RootIn = TFile::Open("filein.hist","READ"); TFile *RootOut = new TFile("fileout.hist","RECREATE"); TH1F *h = (TH1F*)RootIn->Get("zint"); ScaleXaxis(h,ScaleX); h->ResetStats(); h->Draw(); h->Write(); RootOut->Write(); RootIn->Close(); RootOut->Close(); }