TGraph2D* GetInterpolatingGraph(TH2F *hold){ float binsize = hold->GetXaxis()->GetBinWidth(1)/2.; TString name = hold->GetName(); name.ReplaceAll("Org",""); TGraph2D *g = new TGraph2D(hold); g->SetNpx(int(g->GetXmax()-g->GetXmin())/binsize); g->SetNpy(int(g->GetYmax()-g->GetYmin())/binsize); //cout << "name " << g->GetN() << " " << hold->Integral() << endl; return g; }
TH2F* InterpolateThisHistogram(TH2F *hold/*, TH2F* hnew*/){ float binsize = hold->GetXaxis()->GetBinWidth(1)/2.; TString name = hold->GetName(); name.ReplaceAll("Org",""); TGraph2D *g = new TGraph2D(hold); //cout << g->GetXmax() << " " << g->GetXmin() << " " << g->GetYmax() << " " << g->GetYmin() << " " << binsize << endl; g->SetNpx(int(g->GetXmax()-g->GetXmin())/binsize); g->SetNpy(int(g->GetYmax()-g->GetYmin())/binsize); TH2F *hnew = (TH2F*)g->GetHistogram(); //TH2F *htemp = (TH2F*)hnew->Clone(name); //name.ReplaceAll("YXZ",""); TH2F *h = new TH2F(name.Data(),hold->GetTitle(),hnew->GetNbinsX(),g->GetXmin()-binsize,g->GetXmax()-binsize,hnew->GetNbinsY(),g->GetYmin()-binsize,g->GetYmax()-binsize); for(unsigned int x = 1; x<=hnew->GetNbinsX(); ++x){ for(unsigned int y = 1; y<=hnew->GetNbinsY(); ++y){ h->SetBinContent(x,y,hnew->GetBinContent(x,y)); } } delete g; return h; }
void fillGraphsFromFiles( const TString& par1, const TString& par2, const vector<TString>& fnames, vector<string>& keys, map<string,TGraph2D *>& m_graphs) { keys.push_back("-2s"); keys.push_back("-1s"); keys.push_back("median"); keys.push_back("+1s"); keys.push_back("+2s"); keys.push_back("obs"); for (int i=0; i<6; i++) { m_graphs[keys[i]] = new TGraph2D(); m_graphs[keys[i]]->SetName(Form("graph2D%s",keys[i].c_str())); } int nobs=0, nexp=0; for( size_t i=0; i<fnames.size(); i++) { double par1val = extractParValue(par1,fnames[i]); double par2val = extractParValue(par2,fnames[i]); //cout << par1val << "\t" << par2val << endl; if (par1val == -9e99 || par2val == -9e99) continue; TFile *f = new TFile(fnames[i]); double obs,median,s68hi,s68lo,s95hi,s95lo; int num = getBands(f,1,0,obs,median,s68hi,s68lo,s95hi,s95lo); switch (num) { case 0: break; case 1: //cout << "SetPoint(i="<<nobs<<",par1="<<par1val<<",par2="<<par2val<<",obs="<<obs<<");"<<endl; m_graphs["obs"]->SetPoint(nobs,par1val,par2val,obs); nobs++; break; default: m_graphs["+2s"]->SetPoint(nexp,par1val,par2val,s95hi); m_graphs["-2s"]->SetPoint(nexp,par1val,par2val,s95lo); m_graphs["+1s"]->SetPoint(nexp,par1val,par2val,s68hi); m_graphs["-1s"]->SetPoint(nexp,par1val,par2val,s68lo); m_graphs["median"]->SetPoint(nexp,par1val,par2val,median); nexp++; break; } f->Close(); delete f; //if (!(i%10)) cout << i << " " << std::flush; } // file loop #if 0 TGraph2D *gobs = m_graphs["obs"]; cout << "obs has " << gobs->GetN() << " points" << endl; cout << "npx = " << gobs->GetNpx() << endl; cout << "npy = " << gobs->GetNpy() << endl; cout << "xmin = " << gobs->GetXmin() << endl; cout << "xmax = " << gobs->GetXmax() << endl; cout << "ymin = " << gobs->GetYmin() << endl; cout << "ymax = " << gobs->GetYmax() << endl; cout << "zmin = " << gobs->GetZmin() << endl; cout << "zmax = " << gobs->GetZmax() << endl; double *xvec = gobs->GetX(); double *yvec = gobs->GetY(); double *zvec = gobs->GetZ(); for (int i=0; i<gobs->GetN(); i++) printf("%lf\t%lf\t%lf\n",xvec[i],yvec[i],zvec[i]); #endif } // fillGraphsFromFiles