void Pulls(TString nSt="") { TStopwatch timer; timer.Start(); // gROOT->LoadMacro("$VMCWORKDIR/gconfig/basiclibs.C"); // basiclibs(); TStyle *plain = new TStyle("Plain","Plain Style(no colors/fill areas)"); //plain->SetCanvasBorderMode(0); //plain->SetPadBorderMode(0); plain->SetPadColor(0); plain->SetCanvasColor(0); plain->SetTitleColor(0); plain->SetStatColor(0); plain->SetOptStat(10); plain->SetOptFit(0011); plain->SetStatW(0.225); plain->SetStatH(0.06); //plain->SetStatX(0.7); plain->SetOptTitle(0); plain->SetFrameBorderMode(0); plain->cd(); TString name = "out.root"; TFile *dir = new TFile(name.Data(),"read"); //TDirectory *dir = f->GetDirectory("HLTTPCCATrackerPerformance.root:/HLTTPCCATrackerPerformance/TrackFit"); FILE *ress, *pulls; ress = fopen("resolution.txt","w"); pulls = fopen("pull.txt","w"); const int NParameters = 8; TH1D *hRes[NParameters]; TH1D *hPull[NParameters]; TF1 *fRes[NParameters]; TF1 *fPull[NParameters]; string sRes[NParameters]; string sPull[NParameters]; string sResFit[NParameters]; string sPullFit[NParameters]; string ParNames[NParameters] = {"X","Y","Z","Px","Py","Pz","E","M"}; string ParVal[NParameters] = {" [cm]"," [cm]"," [cm]"," [GeV/c]"," [GeV/c]"," [Gev/c]"," [GeV/c^2]"," [GeV/c^2]"}; string AxisNameRes[NParameters]; string AxisNamePull[NParameters]; AxisNameRes[0] = "Residual (x^{reco} - x^{mc}) [cm]"; AxisNameRes[1] = "Residual (y^{reco} - y^{mc}) [cm]"; AxisNameRes[2] = "Residual (z^{reco} - z^{mc}) [cm]"; AxisNameRes[3] = "Residual (P_x^{reco} - P_x^{mc}) [GeV/c]"; AxisNameRes[4] = "Residual (P_y^{reco} - P_y^{mc}) [GeV/c]"; AxisNameRes[5] = "Residual (P_z^{reco} - P_z^{mc}) [GeV/c]"; AxisNameRes[6] = "Residual (E^{reco} - E^{mc}) [GeV/c]"; AxisNameRes[7] = "Residual (M^{reco} - M^{mc}) [GeV/c^2]"; AxisNamePull[0] = "Pull x"; AxisNamePull[1] = "Pull y"; AxisNamePull[2] = "Pull z"; AxisNamePull[3] = "Pull P_x"; AxisNamePull[4] = "Pull P_y"; AxisNamePull[5] = "Pull P_z"; AxisNamePull[6] = "Pull E"; AxisNamePull[7] = "Pull M"; string res = "res"; string pull = "pull"; for(int i=0; iGet(sRes[i].data()); cout <SetLineColor(2); hRes[i]->Fit(sResFit[i].data(),"","",hRes[i]->GetXaxis()->GetXmin(),hRes[i]->GetXaxis()->GetXmax()); hPull[i] = (TH1D*) dir->Get(sPull[i].data()); fPull[i] = new TF1(sPullFit[i].data(),"gaus"); fPull[i]->SetLineColor(2); hPull[i]->Fit(sPullFit[i].data(),"","",hPull[i]->GetXaxis()->GetXmin(),hPull[i]->GetXaxis()->GetXmax()); // hPull[i]->Fit(sPullFit[i].data(),"","",-2,2); } for(int i=0; iGetParameter(1), fRes[i]->GetParameter(2)); fprintf(pulls,"%s %.3g %.3g\n", ParNames[i], fPull[i]->GetParameter(1), fPull[i]->GetParameter(2)); } fclose(ress); fclose(pulls); TCanvas *c1; c1 = new TCanvas("c1","position",0,0,1200,800); // c1 -> Divide(NParameters-2,2); c1 -> Divide(3,2); c1->UseCurrentStyle(); TCanvas *c2; c2 = new TCanvas("c2","momentum",0,0,1200,800); // c1 -> Divide(NParameters-2,2); c2 -> Divide(NParameters-3,2); c2->UseCurrentStyle(); int NPad=0; for(int i=0; i<3; i++) { //if(i == 1 || i == 3) continue; NPad++; c1->cd(NPad); hRes[i]->GetXaxis()->SetTitle(AxisNameRes[i].data()); hRes[i]->GetXaxis()->SetTitleOffset(1); hRes[i]->Draw(); fRes[i]->Draw("same"); } for(int i=0; i<3; i++) { //if(i == 1 || i == 3) continue; NPad++; c1->cd(NPad); hPull[i]->GetXaxis()->SetTitle(AxisNamePull[i].data()); hPull[i]->GetXaxis()->SetTitleOffset(1); hPull[i]->Draw(); fPull[i]->Draw("same"); } NPad=0; for(int i=3; icd(NPad); hRes[i]->GetXaxis()->SetTitle(AxisNameRes[i].data()); hRes[i]->GetXaxis()->SetTitleOffset(1); hRes[i]->Draw(); fRes[i]->Draw("same"); } for(int i=3; icd(NPad); hPull[i]->GetXaxis()->SetTitle(AxisNamePull[i].data()); hPull[i]->GetXaxis()->SetTitleOffset(1); hPull[i]->Draw(); fPull[i]->Draw("same"); } c1->SaveAs("FitQAx.pdf"); c2->SaveAs("FitQAp.pdf"); // c1->SaveAs("FitQA.png"); timer.Stop(); Double_t rtime = timer.RealTime(); Double_t ctime = timer.CpuTime(); printf("RealTime=%f seconds, CpuTime=%f seconds\n",rtime,ctime); }