#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; double ScaleX(double x, double c0, double c1, double c2) { double v; v = c0 + c1*x + c2*x*x; return v; } void ScaleAxis(TAxis *a, double c0, double c1, double c2, double (*Scale)(double, double, double, double)) { if (!a) return; if (a->GetXbins()->GetSize()) { TArrayD X(*(a->GetXbins())); for(Int_t i = 0; i < X.GetSize(); i++) X[i] = Scale(X[i],c0,c1,c2); a->Set((X.GetSize() - 1), X.GetArray()); } else { a->Set( a->GetNbins(), Scale(a->GetXmin(),c0,c1,c2), Scale(a->GetXmax(),c0,c1,c2)); } return; } void ScaleXaxis(TH1 *h, double c0, double c1, double c2, double (*Scale)(double, double, double, double)) { if (!h) return; ScaleAxis(h->GetXaxis(), c0,c1,c2,Scale); return; } void scaleaxis(double c0, double c1, double c2) { TFile *RootIn = TFile::Open("filein.hist","READ"); TFile *RootOut = new TFile("fileout.hist","RECREATE"); TH1F *h = (TH1F*)RootIn->Get("zint"); ScaleXaxis(h,c0,c1,c2,&ScaleX); h->ResetStats(); h->Draw(); h->Write(); RootOut->Write(); RootIn->Close(); RootOut->Close(); }