bool PlotManager::saveResolution(const string& histName, const string& histTitle, const string& srcHistName, const char sliceDirection) { if ( ! isSetup_ ) return false; TH2F* srcHist = dynamic_cast<TH2F*>(theSrcFile_->Get(srcHistName.c_str())); // Check validity of objects if ( srcHist == NULL ) { cerr << "Cannot get object : " << histName << endl; return false; } if ( srcHist->IsA()->InheritsFrom("TH2") ) return false; // Push to base directory string pwd(gDirectory->GetPath()); string newHistPath = dirname(histName); string newHistName = basename(histName); if ( newHistPath.empty() ) { theOutFile_->cd(); } else if ( theOutFile_->cd(newHistPath.c_str()) == kFALSE ) { cout << "Cannot find directory, do mkdirs" << endl; mkdirs(theOutFile_, newHistPath)->cd(); } // Create a function for resolution model TF1 gaus("gaus", "gaus"); gaus.SetParameters(1.0, 0.0, 0.1); //gaus.SetRange(yMin, yMax); // Do FitSlices. if ( sliceDirection == 'X' ) srcHist->FitSlicesX(&gaus); else srcHist->FitSlicesY(&gaus); TH1F* meanHist = dynamic_cast<TH1F*>(theOutFile_->Get((srcHistName+"_1").c_str())); TH1F* widthHist = dynamic_cast<TH1F*>(theOutFile_->Get((srcHistName+"_2").c_str())); TH1F* chi2Hist = dynamic_cast<TH1F*>(theOutFile_->Get((srcHistName+"_chi2").c_str())); // Cosmetics meanHist ->SetName((newHistName+"_Mean" ).c_str()); widthHist->SetName((newHistName+"_Width").c_str()); chi2Hist ->SetName((newHistName+"_Chi2" ).c_str()); meanHist ->SetTitle((histTitle+" Mean" ).c_str()); widthHist->SetTitle((histTitle+" Width").c_str()); chi2Hist ->SetTitle((histTitle+" Chi2" ).c_str()); meanHist ->GetYaxis()->SetTitle("Gaussian mean" ); widthHist->GetYaxis()->SetTitle("Gaussian width" ); chi2Hist ->GetYaxis()->SetTitle("Gaussian fit #Chi^{2}"); // Save histograms meanHist ->Write(); widthHist->Write(); chi2Hist ->Write(); // Pop directory gDirectory->cd(pwd.c_str()); return true; }