#include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include "../scripts/palettes.C" using namespace std; TH1* GetHistogramValues(const char* file, const char* hist_name, const char* value_format, double& val_x, double& val_y){ // Open the file TFile* infile=TFile::Open(file); if(!infile) { cout<<"Error: Cannot open file: "<Get(hist_name); if(!profile) { cout<<"Error: Cannot find histogram ("<(profile); if(hist){ cout<<"2D histogram, make profile."<ProfileX((profile_name+"_profile").Data(),1,-1,"s"); //infile->Close(); } else{ cout<<"1D histogram, treat as profile."<SetName((profile_name+"_profile").Data()); } cout<<"file: "<SetTitle(Form("%g_%g",val_x,val_y)); // Return the profile return profile; } void BuildScan2DPlot( TString histogram_files, const char* title="Signal Particle Height as a Function of Dipole Field", const char* hist_name="truth_IPhaseIISignalAcceptanceAnalyzer/hBeamHeightPrimary", const TString bin_request="mu-", double normalisation=1, const char* outFileName="overlaid", const char* value_format="Tor1_%g-Tor2_%g.root", int n_x=3, double min_x=0, double max_x=2.5, int n_y=3, double min_y=0, double max_y=2.5 ){ //TColor::SetPalette(51,0); SetUserPalette(1); TObjArray* names=histogram_files.Tokenize(" "); TIterator* iterator=names->MakeIterator(); TObject* object=NULL; TH2* outGraph=new TH2F("combined",title,n_x,min_x,max_x,n_y,min_y,max_y); int count=0; while((object=iterator->Next())){ double val_x=0, val_y=0; TH1* hist=GetHistogramValues(object->GetName(),hist_name,value_format,val_x,val_y); if(!hist) continue; double val_z=-999; if(bin_request.IsDigit()){ val_z=hist->GetBinContent(bin_request.Atoi()); }else{ int bin_x=hist->GetXaxis()->FindBin(bin_request.Data()); val_z=hist->GetBinContent(bin_x); } if(normalisation!=1) val_z/=normalisation; cout<<"Vals: ("<Fill(val_x,val_y,val_z); ++count; } //TCanvas* c1=new TCanvas("c1","c1",1400,1000); gStyle->SetOptStat(0); TCanvas* c1=new TCanvas("c1","c1",899,972); outGraph->Draw("colz text30"); c1->SetGridy(); c1->SetGridx(); gPad->Print(Form("%s.png" ,outFileName)); gPad->Print(Form("%s.svg" ,outFileName)); gPad->Print(Form("%s.root",outFileName)); }