#include "TCanvas.h" #include "TFile.h" #include "TGaxis.h" #include "TH1D.h" #include "TH2D.h" #include "TLegend.h" #include "TLegendEntry.h" #include "TPaveText.h" #include "TROOT.h" #include "TString.h" #include "TStyle.h" #include "TSystem.h" #include #include using namespace std; #include "drawHists.C" //#include "scaleHists.C" #include "/u/ekrebs/workspace/cbmroot/JUL13/dielectron/CbmMvdAnaNames.h" //TString sSaveDir("/u/ekrebs/docs/talks/Cbm_Dilepton_2014_02_21"); //TString sInDir("."); //TString sAna("reco"); //TString sField("1.0"); const Int_t nFiles = 14; struct setup { string fileId; string field; string legendName; Color_t color; Bool_t bDraw; }; setup setups[nFiles]; /* TString fsMvd[nFiles] = { "nomvd", "nomvd", "mvd2", "mvd3", "mvd3_051020", "mvd4", "mvd5", "mvd3", "mvd3", "mvd3_nomvdcut", "mvd4_nomvdcut", "mvd4_3mvdcut", "mvd4_delta_10khz", "mvd4_delta_30khz" }; TString fsField[nFiles] = { "1.0", "0.7", "1.0", "1.0", "1.0", "1.0", "1.0", "0.3", "0.7", "1.0", "1.0", "1.0", "1.0", "1.0" }; TString fsMvdLegendNames[nFiles] = { "No Mvd", "No Mvd / 70% field", "2 Mvd at z = 10/20 cm", "3 Mvd at z = 10/15/20 cm", "3 Mvd at z = 5/10/20 cm", "4 Mvd at z = 5/10/15/20 cm", "5 Mvd at z = 8.5-24.5 cm", "3 Mvd at z = 10/15/20 cm / 30% field", "3 Mvd at z = 10/15/20 cm / 70% field", "3 Mvd at z = 10/15/20 cm / No 1st MVD cut", "4 Mvd at z = 5/10/15/20 cm / No 1st MVD cut", "4 Mvd at z = 5/10/15/20 cm / 3 MVD cut", "4 Mvd at z = 5/10/15/20 cm with delta e^{-}, 10 kHz", "4 Mvd at z = 5/10/15/20 cm with delta e^{-}, 30 kHz"}; Color_t fColours[nFiles] = { kOrange+5, kOrange, kGreen+3, kBlue, kViolet, kMagenta, kRed, kBlue-9, kBlue-7, kBlue+4, kMagenta+3, kMagenta-8, kBlack, kGray+2 }; // all //Bool_t fDraw[nFiles] = { kTRUE, kTRUE, kTRUE, kTRUE, kTRUE, kTRUE, //kTRUE, kTRUE, kTRUE, kTRUE, kTRUE }; // MVD setups //Bool_t fDraw[nFiles] = { kTRUE, kFALSE, kTRUE, kTRUE, kTRUE, //kTRUE, kFALSE, kFALSE, kFALSE, kFALSE, kFALSE, kFALSE }; // Compare MVD cut Bool_t fDraw[nFiles] = { kTRUE, kFALSE, kTRUE, kTRUE, kTRUE, kTRUE, kFALSE, kFALSE, kFALSE, kTRUE, kTRUE, kTRUE, kTRUE, kTRUE }; // Magnetic field //Bool_t fDraw[nFiles] = { kTRUE, kTRUE, kFALSE, kTRUE, kFALSE, //kFALSE, kFALSE, kTRUE, kTRUE, kFALSE, kFALSE, kFALSE }; */ Int_t idxNorm = -1; TString sSourceLegendNames[CbmMvdAnaNames::kNofSourceTypes] = { "#rho^{0}", "other particles", "#pi^{0}-Dalitz", "#gamma-Conversion", "#eta" }; void initSetups(const string& opt="all") { // all setups Bool_t bDrawAll = opt.find("all") != std::string::npos; // different number of stations at full field Bool_t bDrawStations = opt.find("stations") != std::string::npos; // MVD station cut Bool_t bDrawMvdCut = opt.find("mvdcut") != std::string::npos; // different field strengths Bool_t bDrawField = opt.find("field") != std::string::npos; // with/without delta electrons Bool_t bDrawDelta = opt.find("delta") != std::string::npos; setups[0].fileId = "nomvd"; setups[0].field = "1.0"; setups[0].legendName = "No Mvd"; setups[0].color = kOrange+5; setups[0].bDraw = bDrawAll || bDrawStations; setups[1].fileId = "nomvd"; setups[1].field = "0.7"; setups[1].legendName = "No Mvd"; setups[1].color = kOrange; setups[1].bDraw = bDrawAll || bDrawField; setups[2].fileId = "mvd2"; setups[2].field = "1.0"; setups[2].legendName = "2 Mvd at z = 10/20 cm"; setups[2].color = kGreen+3; setups[2].bDraw = bDrawAll || bDrawStations; setups[3].fileId = "mvd3"; setups[3].field = "1.0"; setups[3].legendName = "3 Mvd at z = 10/15/20 cm"; setups[3].color = kBlue; setups[3].bDraw = bDrawAll || bDrawStations || bDrawField || bDrawMvdCut; setups[4].fileId = "mvd3_051020"; setups[4].field = "1.0"; setups[4].legendName = "3 Mvd at z = 5/10/20 cm"; setups[4].color = kViolet; setups[4].bDraw = bDrawAll || bDrawStations; setups[5].fileId = "mvd4"; setups[5].field = "1.0"; setups[5].legendName = "4 Mvd at z = 5/10/15/20 cm"; setups[5].color = kMagenta; setups[5].bDraw = bDrawAll || bDrawStations || bDrawMvdCut || bDrawDelta; setups[6].fileId = "mvd5"; setups[6].field = "1.0"; setups[6].legendName = "5 Mvd at z = 8.5-24.5 cm"; setups[6].color = kRed; setups[6].bDraw = bDrawAll; setups[7].fileId = "mvd3"; setups[7].field = "0.3"; setups[7].legendName = "3 Mvd at z = 5/10/20 cm"; setups[7].color = kBlue-9; setups[7].bDraw = bDrawAll || bDrawField; setups[8].fileId = "mvd3"; setups[8].field = "0.7"; setups[8].legendName = "3 Mvd at z = 5/10/20 cm"; setups[8].color = kBlue-7; setups[8].bDraw = bDrawAll || bDrawField; setups[9].fileId = "mvd3_nomvdcut"; setups[9].field = "1.0"; setups[9].legendName = "3 Mvd at z = 5/10/20 cm / No 1st MVD cut"; setups[9].color = kBlue+4; setups[9].bDraw = bDrawAll || bDrawMvdCut; setups[10].fileId = "mvd4_nomvdcut"; setups[10].field = "1.0"; setups[10].legendName = "4 Mvd at z = 5/10/15/20 cm / No 1st MVD cut"; setups[10].color = kMagenta+3; setups[10].bDraw = bDrawAll || bDrawMvdCut; setups[11].fileId = "mvd4_3mvdcut"; setups[11].field = "1.0"; setups[11].legendName = "4 Mvd at z = 5/10/15/20 cm / 3 MVD cut"; setups[11].color = kMagenta-8; setups[11].bDraw = bDrawAll || bDrawMvdCut; setups[12].fileId = "mvd4_delta_10khz"; setups[12].field = "1.0"; setups[12].legendName = "4 Mvd at z = 5/10/15/20 cm with delta e^{-}, 10 kHz"; setups[12].color = kMagenta+1; setups[12].bDraw = bDrawAll || bDrawDelta; setups[13].fileId = "mvd4_delta_30khz"; setups[13].field = "1.0"; setups[13].legendName = "4 Mvd at z = 5/10/15/20 cm with delta e^{-}, 30 kHz"; setups[13].color = kBlack; setups[13].bDraw = bDrawAll || bDrawDelta; } void drawTrackTypes(Int_t cut, Bool_t bDetailedSegs, Bool_t bTrackRatios) { TH2F* fh_ee_tracks[CbmMvdAnaNames::kNofSourceTypes][nFiles];// = { NULL }; TH1F* fh_tracks[CbmMvdAnaNames::kNofSourceTypes][nFiles];// = { NULL }; for(Int_t iFile = 0; iFile < nFiles; iFile++) { TString fileNameReco(Form("%s/analysis.mvd.%s.25gev_%sfield_%s.rho0.epem.root", sInDir.Data(), "reco", setups[iFile].field.c_str(), setups[iFile].fileId.c_str())); TFile *histFileReco = NULL; if(!gSystem->IsFileInIncludePath(fileNameReco.Data())) { cout<<"Input file "<cd("TrackTypes")) { cout<<"Directory TrackTypes not found"<Get(Form("fh_ee_track_%stypes_%s_%s;1", sDetSeg.Data(), CbmMvdAnaNames::kSourceTypesNames[iSource], CbmMvdAnaNames::kCutTypesNames[cut])); if(!fh_ee_tracks[iSource][iFile]) { cout<<"Could not find histogram for source "<GetNbinsX(), 0.5, fh_ee_tracks[iSource][iFile]->GetNbinsX()+0.5); for(Int_t iBin = 1; iBin <= fh_tracks[iSource][iFile]->GetNbinsX(); iBin++) { //fh_tracks[iSource]->GetXaxis()->SetBinLabel(iBin, CbmMvdAnaNames::kTrackDetTypesNamesReco[iBin-1]); fh_tracks[iSource][iFile]->GetXaxis()->SetBinLabel(iBin, fh_ee_tracks[iSource][iFile]->GetXaxis()->GetBinLabel(iBin)); fh_tracks[iSource][iFile]->SetBinContent(iBin, 0.); } } for(Int_t iSource = 0; iSource < CbmMvdAnaNames::kNofSourceTypes; iSource++) { TH2F *fh_ee = fh_ee_tracks[iSource][iFile]; cout<<"Source: "<GetNbinsX(); iBin++) { Float_t sum = fh_ee->GetBinContent(iBin) + //fh_ee->GetBinContent(iBin, CbmMvdAnaNames::kStsRich-1); fh_ee->GetBinContent(iBin, fh_ee->GetNbinsY()); if(iBin != fh_ee->GetNbinsX()) { //sum += fh_ee->GetBinContent(CbmMvdAnaNames::kStsRich-1, iBin); sum += fh_ee->GetBinContent(fh_ee->GetNbinsX(), iBin); } nIdentified += sum; sum = sum / (Float_t)nEvents; fh_tracks[iSource][iFile]->SetBinContent(iBin, sum); if(bDetailedSegs) { cout<<"Track type "<Scale(100./(Float_t)nIdentified); } } TString sHistPrefix(""); if(bDetailedSegs) { sHistPrefix = "fh_ee_track_det_types"; } else { sHistPrefix = "fh_ee_track_types"; } //cTracks->SaveAs(Form("%s/%s_%sfield_%s.png", sSaveDir.Data(), sHistPrefix.Data(), sField.Data(), sMvd.Data())); } gStyle->SetOptStat(""); //TCanvas *cTracks = new TCanvas("Tracks", "Tracks", 1200, 1200); //cTracks->Divide(2,2); TCanvas *cTracks[CbmMvdAnaNames::kNofSourceTypes]; for(Int_t iSource = 0; iSource < CbmMvdAnaNames::kNofSourceTypes; iSource++) { cTracks[iSource] = new TCanvas(Form("Tracks%s", CbmMvdAnaNames::kSourceTypesNames[iSource]), "Tracks", 800, 800); } TLegend *legend = new TLegend(0.55, 0.99 - (0.3/7.) * nFiles, 0.99, 0.99, "","brNDC"); for(Int_t iFile = 0; iFile < nFiles; iFile++) { if(setups[iFile].bDraw) { legend->AddEntry(fh_tracks[0][iFile], setups[iFile].legendName.c_str(), "lpf"); } } Float_t yMax[CbmMvdAnaNames::kNofSourceTypes] = { 0 }; for(Int_t iFile = 0; iFile < nFiles; iFile++) { for(Int_t iSource = 0; iSource < CbmMvdAnaNames::kNofSourceTypes; iSource++) { //yMax[iSource] = 0; TH1F *h = fh_tracks[iSource][iFile]; if(!h) continue; cout<<"Max source "<GetYaxis()->SetTitleOffset(1.1); } else { h->GetYaxis()->SetTitle("Yield per Event"); h->GetYaxis()->SetTitleOffset(1.4); } h->Draw(); //legend->Draw("same"); } else { //if(iFile != 2) h->Draw("sames"); } if(bTrackRatios && !bDetailedSegs) { for(Int_t iBin = 0; iBin < CbmMvdAnaNames::kNofTrackTypes; iBin++) { Float_t frac = h->GetBinContent(iBin+1); cout<<"MVD config "<cd(); legend->Draw(""); } void drawCutEffs() { TH1D *h_cut_effs_signal[nFiles] = { NULL }; TH1D *h_cut_effs_bg [nFiles] = { NULL }; TH1D *h_cut_sb [nFiles] = { NULL }; for(Int_t iFile = 0; iFile < nFiles; iFile++) { TString fileNameReco(Form("%s/analysis.mvd.%s.25gev_%sfield_%s.rho0.epem.root", //sInDir.Data(), "reco", fsField[iFile].Data(), fsMvd[iFile].Data())); sInDir.Data(), "reco", setups[iFile].field.c_str(), setups[iFile].fileId.c_str())); TFile *histFileReco = NULL; if(!gSystem->IsFileInIncludePath(fileNameReco.Data())) { cout<<"Input file "<cd(); //cCutSb->SetLogy(); if(idxNorm >= 0) { TH1D *h_norm = h_cut_sb[idxNorm]; for(Int_t iBin = 1; iBin <= h_norm->GetXaxis()->GetNbins(); iBin++) { if(!h_norm) continue; Double_t norm = h_norm->GetBinContent(iBin); for(Int_t iFile = 0; iFile < nFiles; iFile++) { TH1D *h = h_cut_sb[iFile]; if(!h) continue; h->SetBinContent(iBin, h->GetBinContent(iBin) / norm); } } } THStack *hStackSb = new THStack("hStackSb", "hStackSb"); for(Int_t iFile = 0; iFile < nFiles; iFile++) { TH1D *h = h_cut_sb[iFile]; if(h && setups[iFile].bDraw) { h->SetMarkerStyle(kFullSquare); h->SetMarkerColor(setups[iFile].color); h->SetLineColor(setups[iFile].color); hStackSb->Add(h); } else { cout<<"No histogram for file "<Draw("nostack lp"); setStackAxis(hStackSb); hStackSb->SetTitle("0.55 GeV #leq p #leq 1.2 GeV"); hStackSb->GetYaxis()->SetTitleOffset(1.3); if(idxNorm >= 0) { hStackSb->GetYaxis()->SetTitle("S/B / (S/B)_{No Mvd}"); } hStackSb->Draw("nostack lp"); TLegend *legend = new TLegend(0.15, 0.92 - (0.3/7.) * hStackSb->GetStack()->GetEntriesFast(), 0.59, 0.92, "","brNDC"); for(Int_t iFile = 0; iFile < nFiles; iFile++) { if(h_cut_sb[iFile] && setups[iFile].bDraw) { legend->AddEntry(h_cut_sb[iFile], setups[iFile].legendName.c_str(), "lpf"); } } //TCanvas *cLegendSb = new TCanvas("cLegendSb", "Legend", 800, 800); //cLegendSb->cd(); legend->Draw("same"); } void drawMismatches() { Int_t nDeltaFiles = 0; for(Int_t iFile = 0; iFile < nFiles; iFile++) { if(setups[iFile].bDraw) { nDeltaFiles++; } } const Int_t kNofDeltaFiles = nDeltaFiles; TH1F* fh_mcid_mvdstsmatch[CbmMvdAnaNames::kNofSourceTypes][kNofDeltaFiles]; Int_t fileId[kNofDeltaFiles]; for(Int_t iDelta = 0; iDelta < kNofDeltaFiles; iDelta++) { fileId[iDelta] = -1; } Int_t nDelta = 0; for(Int_t iFile = 0; iFile < nFiles; iFile++) { if(!setups[iFile].bDraw) continue; TString fileNameReco(Form("%s/analysis.mvd.%s.25gev_%sfield_%s.rho0.epem.root", sInDir.Data(), "reco", setups[iFile].field.c_str(), setups[iFile].fileId.c_str())); TFile *histFileReco = NULL; if(!gSystem->IsFileInIncludePath(fileNameReco.Data())) { cout<<"Input file "<cd("HitsInStsTrack")) { cout<<"Directory HitsInStsTrack not found"<Get(Form("fh_e_mcid_mvd_hits_mvdstsmatch_%s;1", CbmMvdAnaNames::kSourceTypesNames[iSource])); if(!fh_mcid_mvdstsmatch[iSource][nDelta]) { cout<<"Could not find histogram for source "<GetXaxis()->GetNbins(); iBin = iBin + 2) { Float_t nSame = h->GetBinContent(iBin); Float_t nDiff = h->GetBinContent(iBin+1); Float_t nAll = nSame + nDiff; h->SetBinContent(iBin, nSame / nAll); h->SetBinContent(iBin+1, nDiff / nAll); } h->GetYaxis()->SetRangeUser(0., 1.05); h->SetLineColor(setups[fileId[iDelta]].color); h->SetBarWidth(0.8); h->SetBarOffset(0.2); h->SetLineWidth(3); if(iDelta == 0) { h->SetFillStyle(3004); } if(iDelta == 1) { h->SetFillStyle(3006); } if(iDelta == 2) { h->SetFillStyle(3007); } h->SetFillStyle(0); h->SetFillColor(h->GetLineColor()); hStack[iSource]->Add(h); } } TLegend *legend = new TLegend(0.45, 0.94 - (0.4/7.) * nDelta, 0.99, 0.94, "","brNDC"); for(Int_t iDelta = 0; iDelta < nDelta; iDelta++) { if(fh_mcid_mvdstsmatch[0][iDelta]) { legend->AddEntry(fh_mcid_mvdstsmatch[0][iDelta], setups[fileId[iDelta]].legendName.c_str(), "lpf"); } } TCanvas *cMismatch[CbmMvdAnaNames::kNofSourceTypes] = { NULL }; for(Int_t iSource = 0; iSource < CbmMvdAnaNames::kNofSourceTypes; iSource++) { cMismatch[iSource] = new TCanvas(Form("cMismatch_%s", CbmMvdAnaNames::kSourceTypesNames[iSource]), Form("cMismatch_%s", CbmMvdAnaNames::kSourceTypesNames[iSource]), 800, 800); cMismatch[iSource]->cd(); hStack[iSource]->Draw("nostack"); legend->Draw("same"); } } void drawCompareSetups() { sInDir="./histos_jun14"; initSetups("stations"); //drawTrackTypes(CbmMvdAnaNames::kCutGamma, kFALSE, kFALSE); drawCutEffs(); //drawMismatches(); }