#include void draw_qa_track_finding(TString inFileName) { // TPstyle(); gStyle->SetPalette(1); Int_t fShowStation1 = 0; Int_t fShowStation2 = 4; Int_t nofStations = 6; TFile* inFile = new TFile(inFileName.Data()); TH1F* fhMCAllVsP = (TH1F*)inFile->Get("GemTrackFinderQA/hMCAllVsP"); TH1F* fhMCAccVsP = (TH1F*)inFile->Get("GemTrackFinderQA/hMCAccVsP"); TH1F* fhMCPrimVsP = (TH1F*)inFile->Get("GemTrackFinderQA/hMCPrimVsP"); TH1F* fhMCSecVsP = (TH1F*)inFile->Get("GemTrackFinderQA/hMCSecVsP"); TH1F* fhRecoAccVsP = (TH1F*)inFile->Get("GemTrackFinderQA/hRecoAccVsP"); TH1F* fhRecoPrimVsP = (TH1F*)inFile->Get("GemTrackFinderQA/hRecoPrimVsP"); TH1F* fhRecoSecVsP = (TH1F*)inFile->Get("GemTrackFinderQA/hRecoSecVsP"); TH1F* fhEffAccVsP = (TH1F*)inFile->Get("GemTrackFinderQA/hEffAccVsP"); TH1F* fhEffPrimVsP = (TH1F*)inFile->Get("GemTrackFinderQA/hEffPrimVsP"); TH1F* fhEffSecVsP = (TH1F*)inFile->Get("GemTrackFinderQA/hEffSecVsP"); TH1F* fhEffAccVsT = (TH1F*)inFile->Get("GemTrackFinderQA/hEffAccVsT"); TH1F* fhEffPrimVsT = (TH1F*)inFile->Get("GemTrackFinderQA/hEffPrimVsT"); TH1F* fhEffSecVsT = (TH1F*)inFile->Get("GemTrackFinderQA/hEffSecVsT"); TH1F* fhEffAccVsN = (TH1F*)inFile->Get("GemTrackFinderQA/hEffAccVsN"); TH1F* fhEffPrimVsN = (TH1F*)inFile->Get("GemTrackFinderQA/hEffPrimVsN"); TH1F* fhEffSecVsN = (TH1F*)inFile->Get("GemTrackFinderQA/hEffSecVsN"); TH2F* fhMomResAcc = (TH2F*)inFile->Get("GemTrackFinderQA/hMomResAcc"); TH2F* fhMomResPrim = (TH2F*)inFile->Get("GemTrackFinderQA/hMomResPrim"); TH2F* fhMomResSec = (TH2F*)inFile->Get("GemTrackFinderQA/hMomResSec"); TH1F* fhNofMCTracksPerEvent = (TH1F*)inFile->Get("GemTrackFinderQA/hNofMCTracksPerEvent"); TH1F* fhNofHitsPerRecoTrack = (TH1F*)inFile->Get("GemTrackFinderQA/hNofHitsPerRecoTrack"); TH1F* fhNofCorrHitsPerRecoTrack = (TH1F*)inFile->Get("GemTrackFinderQA/hNofCorrHitsPerRecoTrack"); TH1F* fhNofNoTrHitsPerRecoTrack = (TH1F*)inFile->Get("GemTrackFinderQA/hNofNoTrHitsPerRecoTrack"); TH1F* fhNofOthTHitsPerRecoTrack = (TH1F*)inFile->Get("GemTrackFinderQA/hNofOthTHitsPerRecoTrack"); TH1F* fhNofHitsPerGhost = (TH1F*)inFile->Get("GemTrackFinderQA/hNofHitsPerGhost"); TH1F* fhNofHitsPerClone = (TH1F*)inFile->Get("GemTrackFinderQA/hNofHitsPerClone"); TCanvas* recoCanvas = new TCanvas("GemTrackFinderQACanvas","Gem Track Finder QA",10,10,1200,800); TPad* recoPad[10]; recoPad[0] = new TPad("titlePad", "Title pad" ,0.00,0.90,1.00,1.00); recoPad[1] = new TPad("efficiencyPPad","Efficiency P pad" ,0.00,0.45,0.33,0.90); recoPad[2] = new TPad("efficiencyTPad","Efficiency T pad" ,0.33,0.45,0.67,0.90); recoPad[3] = new TPad("efficiencyNPad","Efficiency N pad" ,0.67,0.45,1.00,0.90); recoPad[4] = new TPad("resolutionPad","Momentum resolution pad" ,0.00,0.00,0.33,0.45); recoPad[5] = new TPad("hitsOfTrackPad","Hits of track pad" ,0.33,0.00,0.67,0.45); recoPad[6] = new TPad("summaryPad", "Summary pad" ,0.67,0.00,1.00,0.45); for ( Int_t ipad = 0 ; ipad < 7 ; ipad++ ) { recoPad[ipad]->SetFillColor(0); recoPad[ipad]->SetBorderMode(0); recoPad[ipad]->Draw(); } recoPad[0]->cd(); TLegend* brp = new TLegend(0.1,0.1,0.9,0.9,"Gem Track Finder QA"); brp->SetTextAlign(22); brp->SetTextSize(0.6); brp->SetTextColor(1); brp->SetBorderSize(0); brp->SetFillColor(0); brp->Draw(); recoPad[0]->Update(); recoPad[1]->cd(); fhEffAccVsP->SetAxisRange(0.,110.,"Y"); fhEffAccVsP->SetLineWidth(2); fhEffAccVsP->SetLineColor(1); fhEffAccVsP->SetTitle("Efficiency vs momentum"); fhEffAccVsP->Draw("pe"); fhEffPrimVsP->SetAxisRange(0.,110.,"Y"); fhEffPrimVsP->SetLineWidth(2); fhEffPrimVsP->SetLineColor(2); fhEffPrimVsP->Draw("pesame"); fhEffSecVsP->SetLineWidth(2); fhEffSecVsP->SetLineColor(4); fhEffSecVsP->Draw("pesame"); TLegend* effLeg = new TLegend(0.3,0.15,0.68,0.4); effLeg->SetBorderSize(0); effLeg->SetFillColor(0); effLeg->AddEntry(fhEffPrimVsP,"primaries","pl"); effLeg->AddEntry(fhEffAccVsP, "all" ,"pl"); effLeg->AddEntry(fhEffSecVsP, "secondaries" ,"pl"); effLeg->Draw(); TLine* oneLine = new TLine(0.0,100.0,10.0,100.0); oneLine->SetLineStyle(2); oneLine->Draw(); recoPad[1]->Update(); recoPad[2]->cd(); fhEffAccVsT->SetAxisRange(0.,110.,"Y"); fhEffAccVsT->SetLineWidth(2); fhEffAccVsT->SetLineColor(1); fhEffAccVsT->SetTitle("Efficiency vs theta"); fhEffAccVsT->Draw("pe"); fhEffPrimVsT->SetAxisRange(0.,110.,"Y"); fhEffPrimVsT->SetLineWidth(2); fhEffPrimVsT->SetLineColor(2); fhEffPrimVsT->Draw("pesame"); fhEffSecVsT->SetLineWidth(2); fhEffSecVsT->SetLineColor(4); fhEffSecVsT->Draw("pesame"); TLegend* effLeg = new TLegend(0.3,0.15,0.68,0.4); effLeg->SetBorderSize(0); effLeg->SetFillColor(0); effLeg->AddEntry(fhEffPrimVsT,"primaries","pl"); effLeg->AddEntry(fhEffAccVsT, "all" ,"pl"); effLeg->AddEntry(fhEffSecVsT, "secondaries" ,"pl"); effLeg->Draw(); TLine* oneLine = new TLine(0.0,100.0,40.0,100.0); oneLine->SetLineStyle(2); oneLine->Draw(); recoPad[2]->Update(); recoPad[3]->cd(); fhEffAccVsN->SetAxisRange(0.,110.,"Y"); fhEffAccVsN->SetLineWidth(2); fhEffAccVsN->SetLineColor(1); fhEffAccVsN->SetTitle("Efficiency ns nof points"); fhEffAccVsN->Draw("pe"); fhEffPrimVsN->SetAxisRange(0.,110.,"Y"); fhEffPrimVsN->SetLineWidth(2); fhEffPrimVsN->SetLineColor(2); fhEffPrimVsN->Draw("pesame"); fhEffSecVsN->SetLineWidth(2); fhEffSecVsN->SetLineColor(4); fhEffSecVsN->Draw("pesame"); TLegend* effLeg = new TLegend(0.3,0.15,0.68,0.4); effLeg->SetBorderSize(0); effLeg->SetFillColor(0); effLeg->AddEntry(fhEffPrimVsN,"primaries","pl"); effLeg->AddEntry(fhEffAccVsN, "all" ,"pl"); effLeg->AddEntry(fhEffSecVsN, "secondaries" ,"pl"); effLeg->Draw(); TLine* oneLine = new TLine(0.0,100.0,40.0,100.0); oneLine->SetLineStyle(2); oneLine->Draw(); recoPad[1]->Update(); recoPad[4]->cd(); fhMomResPrim->SetAxisRange(-10.,10.,"Y"); fhMomResPrim->Draw("cont0"); TH1F* fhLowBand = new TH1F("fhLowBand","Low Band", fhMomResPrim->GetXaxis()->GetNbins(), fhMomResPrim->GetXaxis()->GetXmin(), fhMomResPrim->GetXaxis()->GetXmax()); TH1F* fhHigBand = new TH1F("fhHigBand","Hig Band", fhMomResPrim->GetXaxis()->GetNbins(), fhMomResPrim->GetXaxis()->GetXmin(), fhMomResPrim->GetXaxis()->GetXmax()); for ( Int_t ibin = fhMomResPrim->GetXaxis()->GetNbins() ; ibin > 1 ; ibin-- ) { TF1* gausFit = new TF1("gausFit","gaus"); TH1F* tempProjY = (TH1F*)fhMomResPrim->ProjectionY("tempProjY",ibin,ibin); tempProjY->Fit("gausFit","QN","",-5.,5.); fhLowBand->SetBinContent(ibin,gausFit->GetParameter(1)-gausFit->GetParameter(2)); fhLowBand->SetBinError(ibin,0.01); fhHigBand->SetBinContent(ibin,gausFit->GetParameter(1)+gausFit->GetParameter(2)); fhHigBand->SetBinError(ibin,0.01);//gausFit->GetPara(1)+gausFit->GetParError(2)); } fhLowBand->SetLineWidth(2); fhHigBand->SetLineWidth(2); fhLowBand->Draw("Psame"); fhHigBand->Draw("Psame"); recoPad[4]->Update(); recoPad[5]->cd(); Int_t lastNotEmptyBin = fhNofHitsPerRecoTrack->GetNbinsX(); while ( fhNofHitsPerRecoTrack->GetBinContent(lastNotEmptyBin) == 0 ) lastNotEmptyBin--; fhNofHitsPerRecoTrack->SetAxisRange(-0.5,1.2*lastNotEmptyBin,"X"); fhNofHitsPerRecoTrack->Draw(); fhNofCorrHitsPerRecoTrack->SetLineColor(3); fhNofCorrHitsPerRecoTrack->Draw("same"); fhNofNoTrHitsPerRecoTrack->SetLineColor(4); fhNofNoTrHitsPerRecoTrack->Draw("same"); fhNofOthTHitsPerRecoTrack->SetLineColor(2); fhNofOthTHitsPerRecoTrack->Draw("same"); TLegend* nhptLeg = new TLegend(0.25,0.65,0.6,0.85); nhptLeg->SetBorderSize(0); nhptLeg->SetFillColor(0); nhptLeg->AddEntry(fhNofHitsPerRecoTrack,"all hits","l"); nhptLeg->AddEntry(fhNofCorrHitsPerRecoTrack,"mc(hit)=mc(track)","l"); nhptLeg->AddEntry(fhNofNoTrHitsPerRecoTrack,"mc(hit)=-1","l"); nhptLeg->AddEntry(fhNofOthTHitsPerRecoTrack,"mc(hit)=mc(!track)","l"); nhptLeg->Draw(); recoPad[5]->Update(); Int_t nEvents = fhNofMCTracksPerEvent->GetEntries(); Int_t fNofMCAll = fhMCAllVsP ->Integral(); Int_t fNofMCAcc = fhMCAccVsP ->Integral(); Int_t fNofMCPrim = fhMCPrimVsP ->Integral(); Int_t fNofMCRef = fhMCPrimVsP ->Integral(fhMCPrimVsP->FindBin(0.5),fhMCPrimVsP->GetNbinsX()); Int_t fNofMCSec = fhMCSecVsP ->Integral(); Int_t fNofRecoAcc = fhRecoAccVsP ->Integral(); Int_t fNofRecoPrim = fhRecoPrimVsP->Integral(); Int_t fNofRecoRef = fhRecoPrimVsP->Integral(fhRecoPrimVsP->FindBin(0.5),fhRecoPrimVsP->GetNbinsX()); Int_t fNofRecoSec = fhRecoSecVsP ->Integral(); Int_t fNofRecoGhosts = fhNofHitsPerGhost->Integral(); Int_t fNofRecoClones = fhNofHitsPerClone->Integral(); Double_t effAcc = 100.*(Double_t)fNofRecoAcc /((Double_t)fNofMCAcc); Double_t effPrim = 100.*(Double_t)fNofRecoPrim/((Double_t)fNofMCPrim); Double_t effSec = 100.*(Double_t)fNofRecoSec /((Double_t)fNofMCSec); Double_t effRef = 100.*(Double_t)fNofRecoRef /((Double_t)fNofMCRef); recoPad[6]->cd(); TPaveText* printoutPave = new TPaveText(0.0,0.0,1.0,1.0); printoutPave->SetTextAlign(23); printoutPave->SetBorderSize(0); printoutPave->SetFillColor(0); printoutPave->AddText(Form("%i events",nEvents)); printoutPave->AddText(Form("%i MC tracks",fNofMCAll)); printoutPave->AddText("Tracking efficiencies:"); printoutPave->AddText(Form("all = %2.2f%% ( %d / %d )" ,effAcc ,fNofRecoAcc ,fNofMCAcc)); printoutPave->AddText(Form("prim = %2.2f%% ( %d / %d )",effPrim,fNofRecoPrim,fNofMCPrim)); printoutPave->AddText(Form("ref = %2.2f%% ( %d / %d )" ,effRef ,fNofRecoRef ,fNofMCRef)); printoutPave->AddText(Form("sec = %2.2f%% ( %d / %d )" ,effSec ,fNofRecoSec ,fNofMCSec)); printoutPave->AddText(Form("%i ghosts",fNofRecoGhosts)); printoutPave->AddText(Form("%i clones",fNofRecoClones)); printoutPave->Draw(); recoPad[6]->Update(); cout << "-------------------- PndGemTrackFinderQA : Summary ------------------" << endl; cout << " Events: " << setw(10) << nEvents << endl; cout << " MC Tracks: " << setw(10) << fNofMCAll << endl; cout << " reconstruable: " << setw(10) << fNofMCAcc << " reconstructed: " << setw(10) << fNofRecoAcc << " >>>> " << effAcc << "%" << endl; cout << " primaries : " << setw(10) << fNofMCPrim << " reconstructed: " << setw(10) << fNofRecoPrim << " >>>> " << effPrim << "%" << endl; cout << " reference : " << setw(10) << fNofMCRef << " reconstructed: " << setw(10) << fNofRecoRef << " >>>> " << effRef << "%" << endl; cout << " secondaries : " << setw(10) << fNofMCSec << " reconstructed: " << setw(10) << fNofRecoSec << " >>>> " << effSec << "%" << endl; cout << " ghosts : " << setw(10) << fNofRecoGhosts << " clones: " << setw(10) << fNofRecoClones << endl; cout << "---------------------------------------------------------------------" << endl; }