void loopdir(const char *dirname, int depth) { DIR *dp = NULL; struct dirent *entry = NULL; struct stat statbuf; if (NULL == (dp = opendir(dirname))) { printf("can't open dir %s\n", dirname); return; } chdir(dirname); char curdir[FILENAME_MAX] = {0}; getcwd(curdir, sizeof(curdir)); while ((entry = readdir(dp)) != NULL) { lstat(entry->d_name, &statbuf); if (S_ISDIR(statbuf.st_mode)) { if (0 == strcmp(".", entry->d_name) || 0 == strcmp("..", entry->d_name)) { continue; } printf("%d, %s, %s\n", depth, "", entry->d_name); loopdir(entry->d_name, depth + 1); } else { printf("%d, %s, %s curdir: %s\n", depth, "", entry->d_name, curdir); } } chdir(".."); closedir(dp); }
int main(int argc, char *argv[]) { char current_dir[FILENAME_MAX] = {0}; getcwd(current_dir, sizeof(current_dir)); loopdir("./", 0); return 0; }
void comparePlots(std::string plotsMAHIOFF, std::string plotsMAHION) { setGlobalStyle(); int setLog[] = {0,0,0,0,0,0,0,0,0,0}; //open files TFile* f_plotsMAHIOFF = TFile::Open(plotsMAHIOFF.c_str()); TFile* f_plotsMAHION = TFile::Open(plotsMAHION.c_str()); std::vector<TH1*> h_MAHIOFF; std::vector<TH1*> h_MAHION; std::vector<TGraph*> g_MAHIOFF; std::vector<TGraph*> g_MAHION; std::vector<TEfficiency*> e_MAHIOFF; std::vector<TEfficiency*> e_MAHION; loopdir(f_plotsMAHIOFF, h_MAHIOFF, g_MAHIOFF, e_MAHIOFF); loopdir(f_plotsMAHION, h_MAHION, g_MAHION, e_MAHION); for(int itr=0; itr<h_MAHIOFF.size(); ++itr) { std::cout << "histoName: " << h_MAHIOFF.at(itr)->GetName() << std::endl; setMAHIOFFstyle(h_MAHIOFF.at(itr),h_MAHIOFF.at(itr)); setMAHIONstyle(h_MAHION.at(itr),h_MAHION.at(itr)); //legend TLegend* leg = new TLegend(0.82, 0.78, 1.03, 0.89); //leg->SetFillColor(kWhite); leg->AddEntry(h_MAHIOFF.at(itr),"MAHIOFF Data","L"); leg->AddEntry(h_MAHION.at(itr),"MAHION Data","P"); TCanvas* c1 = new TCanvas(); c1 -> cd(); TPad* p1 = new TPad("p1","p1",0., 0.25, 1., 1.); if(setLog[itr] == 1) p1->SetLogy(); TPad* p2 = new TPad("p2","p2",0., 0., 1., 0.25); p1 -> Draw(); p2 -> Draw(); //draw first pad p1 -> cd(); p1 -> SetGridx(); p1 -> SetGridy(); //scale and compute ratio h_MAHIOFF.at(itr)->Sumw2(); h_MAHION.at(itr)->Sumw2(); h_MAHIOFF.at(itr)->Scale(h_MAHION.at(itr)->Integral()/h_MAHIOFF.at(itr)->Integral()); h_MAHIOFF.at(itr)->Draw("HISTO,E"); h_MAHION.at(itr)->Draw("P,sames"); leg->Draw("same"); TH1F* ratioHisto; if(h_MAHIOFF.at(itr)->GetXaxis()->GetXbins()->GetArray() != nullptr) ratioHisto = new TH1F("tmp","tmp",h_MAHIOFF.at(itr)->GetNbinsX(),h_MAHIOFF.at(itr)->GetXaxis()->GetXbins()->GetArray()); else ratioHisto = new TH1F("tmp","tmp",h_MAHIOFF.at(itr)->GetNbinsX(), h_MAHIOFF.at(itr)->GetBinLowEdge(1), h_MAHIOFF.at(itr)->GetBinLowEdge(h_MAHIOFF.at(itr)->GetNbinsX())+h_MAHIOFF.at(itr)->GetBinWidth(1)); ratioHisto->Sumw2(); for(int bin = 1; bin <= h_MAHIOFF.at(itr)->GetNbinsX(); ++bin) { if(h_MAHIOFF.at(itr)->GetBinContent(bin) == 0. || h_MAHION.at(itr)->GetBinContent(bin) == 0.) continue; float valMAHIOFF = h_MAHIOFF.at(itr)->GetBinContent(bin); float valMAHION = h_MAHION.at(itr)->GetBinContent(bin); float sigmaMAHIOFF = h_MAHIOFF.at(itr)->GetBinError(bin); float sigmaMAHION = h_MAHION.at(itr)->GetBinError(bin); ratioHisto -> SetBinContent(bin, valMAHIOFF/valMAHION); ratioHisto -> SetBinError(bin, sqrt((sigmaMAHIOFF/valMAHION)*(sigmaMAHIOFF/valMAHION) + (valMAHIOFF*sigmaMAHION/valMAHION/valMAHION)*(valMAHIOFF*sigmaMAHION/valMAHION/valMAHION))); } p2 -> cd(); p2 -> SetGridx(); p2 -> SetGridy(); // For the axis labels: //tdrStyle->SetLabelSize(0.1, "XYZ"); ratioHisto -> GetYaxis() -> SetRangeUser(0., 2.); ratioHisto -> DrawCopy("P"); TF1* line = new TF1("line", "1.", -1000000., 1000000.); line -> SetLineWidth(2); line -> SetLineColor(kRed); line -> Draw("same"); delete ratioHisto; } for(int itr=0; itr<g_MAHIOFF.size(); ++itr) { std::cout << "graphName: " << g_MAHIOFF.at(itr)->GetName() << std::endl; setMAHIOFFstyle(g_MAHIOFF.at(itr),g_MAHIOFF.at(itr)); setMAHIONstyle(g_MAHION.at(itr),g_MAHION.at(itr)); //legend TLegend* leg = new TLegend(0.82, 0.78, 1.03, 0.89); //leg->SetFillColor(kWhite); leg->AddEntry(g_MAHIOFF.at(itr),"MAHIOFF Data","L"); leg->AddEntry(g_MAHION.at(itr),"MAHION Data","P"); TCanvas* g1 = new TCanvas(); g1 -> cd(); g1->SetGridx(); g1->SetGridy(); g_MAHIOFF.at(itr)->Draw("AP"); g_MAHION.at(itr)->Draw("P,sames"); leg->Draw("same"); } for(int itr=0; itr<e_MAHIOFF.size(); ++itr) { std::cout << "teffName: " << e_MAHIOFF.at(itr)->GetName() << std::endl; setMAHIOFFstyle(e_MAHIOFF.at(itr),e_MAHIOFF.at(itr)); setMAHIONstyle(e_MAHION.at(itr),e_MAHION.at(itr)); //legend TLegend* leg = new TLegend(0.82, 0.78, 1.03, 0.89); //leg->SetFillColor(kWhite); leg->AddEntry(e_MAHIOFF.at(itr),"MAHIOFF Data","L"); leg->AddEntry(e_MAHION.at(itr),"MAHION Data","P"); TCanvas* e1 = new TCanvas(); e1 -> cd(); e1->SetGridx(); e1->SetGridy(); e_MAHIOFF.at(itr)->Draw("AP"); e_MAHION.at(itr)->Draw("P,sames"); leg->Draw("same"); } }