static void RollRatio(Word x,Word y,Word ratio) { Word i; Word NoDelay; i = 0; NoDelay = 0; while (i<ratio) { DrawRatio(x,y,i); PlaySound(SND_MGUN|0x8000); ShowBJ(); if (WaitTicksEvent(6)) { NoDelay = 1; break; } i+=10; } DrawRatio(x,y,ratio); /* make ding sound */ if (ratio==100) { if (!NoDelay) { PlaySound(SND_EXTRA); WaitTicks(30); } BonusScore += 10000; DrawIBonus(); if (!NoDelay) { BJBreath(60); /* Breath a little */ } } }
//------------------------------------------------------------------------------------------------------------------------------------------- void ComparisonDataMC(TString fileNameData = "Data/efficiency_new.root", TString fileNameSim ="MonteCarlo/efficiency_new.root", Bool_t integrated = kFALSE) { // Open input Data files TFile *fileData = new TFile(fileNameData.Data(), "read"); if (!fileData || !fileData->IsOpen()) { printf("cannot open file %s \n",fileNameData.Data()); return; } // Open input Sim files TFile *fileSim = new TFile(fileNameSim.Data(), "read"); if (!fileSim || !fileSim->IsOpen()) { printf("cannot open file %s \n",fileNameSim.Data()); return; } TString hname = integrated ? "integratedTracking" : "tracking"; // Get Global Data and Sim graphs // TGraphAsymmErrors *effVScentData = static_cast<TGraphAsymmErrors*>(fileData->FindObjectAny("trackingEffVscentrality")); // if (!effVScentData) { // printf("Efficiency vs centrality from data not found\n"); // return; // } // TGraphAsymmErrors *effVScentSim = static_cast<TGraphAsymmErrors*>(fileSim->FindObjectAny("trackingEffVscentrality")); // if (!effVScentSim) { // printf("Efficiency vs centrality from sim not found\n"); // return; // } TGraphAsymmErrors *effVSrunData = static_cast<TGraphAsymmErrors*>(fileData->FindObjectAny("trackingEffVsRun")); if (!effVSrunData) { printf("Efficiency vs run from data not found\n"); return; } TGraphAsymmErrors *effVSrunSim = static_cast<TGraphAsymmErrors*>(fileSim->FindObjectAny("trackingEffVsRun")); if (!effVSrunSim) { printf("Efficiency vs run from sim not found\n"); return; } TGraphAsymmErrors *effVSyData = static_cast<TGraphAsymmErrors*>(fileData->FindObjectAny(Form("%sEffVsy",hname.Data()))); if (!effVSyData) { printf("Efficiency vs rapidity from data not found\n"); return; } TGraphAsymmErrors *effVSySim = static_cast<TGraphAsymmErrors*>(fileSim->FindObjectAny(Form("%sEffVsy",hname.Data()))); if (!effVSySim) { printf("Efficiency vs rapidity from sim not found\n"); return; } TGraphAsymmErrors *effVSptData = static_cast<TGraphAsymmErrors*>(fileData->FindObjectAny(Form("%sEffVspt",hname.Data()))); if (!effVSptData) { printf("Efficiency vs pt from data not found\n"); return; } TGraphAsymmErrors *effVSptSim = static_cast<TGraphAsymmErrors*>(fileSim->FindObjectAny(Form("%sEffVspt",hname.Data()))); if (!effVSptSim) { printf("Efficiency vs pt from sim not found\n"); return; } TGraphAsymmErrors *effVSphiData = static_cast<TGraphAsymmErrors*>(fileData->FindObjectAny(Form("%sEffVsphi",hname.Data()))); if (!effVSphiData) { printf("Efficiency vs phi from data not found\n"); return; } TGraphAsymmErrors *effVSphiSim = static_cast<TGraphAsymmErrors*>(fileSim->FindObjectAny(Form("%sEffVsphi",hname.Data()))); if (!effVSphiSim) { printf("Efficiency vs phi from sim not found\n"); return; } // Create an array list with the global ratios TObjArray globalRatios; // Create an array with the global plots of the individual efficencies and the ratios TObjArray globalRatiosAndEff; // globalRatios.Add(CreateRatioGraph("RatioEffVsCent","data/sim tracking efficiency versus centrality",effVScentData,effVScentSim)); //---- Eff vs run TGraphAsymmErrors* effVSrunDataCopy = static_cast<TGraphAsymmErrors*>(effVSrunData->Clone()); // We make clones to do not modify them TGraphAsymmErrors* effVSrunSimCopy = static_cast<TGraphAsymmErrors*>(effVSrunSim->Clone()); TGraphAsymmErrors *ratioRun = CreateRatioGraph("RatioEffVsRun","data/sim tracking efficiency versus run",*effVSrunData,*effVSrunSim); globalRatios.Add(ratioRun); TGraphAsymmErrors* ratioRunCopy = static_cast<TGraphAsymmErrors*>(ratioRun->Clone()); globalRatiosAndEff.Add(DrawRatio("RatioEffVSRunAndEff","Comparison Data&MC tracking efficiency versus run", effVSrunDataCopy,effVSrunSimCopy,ratioRunCopy)); //----- //---- Eff vs y TGraphAsymmErrors* effVSyDataCopy = static_cast<TGraphAsymmErrors*>(effVSyData->Clone()); // We make clones to do not modify them TGraphAsymmErrors* effVSySimCopy = static_cast<TGraphAsymmErrors*>(effVSySim->Clone()); TGraphAsymmErrors *ratioY = CreateRatioGraph("RatioEffVsY","data/sim tracking efficiency versus rapidity",*effVSyData,*effVSySim); globalRatios.Add(ratioY); TGraphAsymmErrors* ratioYCopy = static_cast<TGraphAsymmErrors*>(ratioY->Clone()); globalRatiosAndEff.Add(DrawRatio("RatioEffVSyAndEff","Comparison Data&MC tracking efficiency versus rapidity", effVSyDataCopy,effVSySimCopy,ratioYCopy)); //----- //-----Eff vs Pt TGraphAsymmErrors* effVSptDataCopy = static_cast<TGraphAsymmErrors*>(effVSptData->Clone()); // We make clones to do not modify them TGraphAsymmErrors* effVSptSimCopy = static_cast<TGraphAsymmErrors*>(effVSptSim->Clone()); TGraphAsymmErrors *ratioPt = CreateRatioGraph("RatioEffVsPt","data/sim tracking efficiency versus Pt",*effVSptData,*effVSptSim); globalRatios.Add(ratioPt); TGraphAsymmErrors* ratioPtCopy = static_cast<TGraphAsymmErrors*>(ratioPt->Clone()); globalRatiosAndEff.Add(DrawRatio("RatioEffVSptAndEff","Comparison Data&MC tracking efficiency versus Pt",effVSptDataCopy,effVSptSimCopy,ratioPtCopy)); //----- //----Eff vs phi TGraphAsymmErrors* effVSphiDataCopy = static_cast<TGraphAsymmErrors*>(effVSphiData->Clone()); // We make clones to do not modify them TGraphAsymmErrors* effVSphiSimCopy = static_cast<TGraphAsymmErrors*>(effVSphiSim->Clone()); TGraphAsymmErrors *ratioPhi = CreateRatioGraph("RatioEffVsPhi","data/sim tracking efficiency versus phi",*effVSphiData,*effVSphiSim); globalRatios.Add(ratioPhi); TGraphAsymmErrors* ratioPhiCopy = static_cast<TGraphAsymmErrors*>(ratioPhi->Clone()); globalRatiosAndEff.Add(DrawRatio("RatioEffVSphiAndEff","Comparison Data&MC tracking efficiency versus phi",effVSphiDataCopy,effVSphiSimCopy,ratioPhiCopy)); //------- //----Eff vs y vs phi TH2F *effVSyVSphiData = static_cast<TH2F*>(fileData->FindObjectAny("trackingEffVsphi-y")); if (!effVSyVSphiData) { printf("Efficiency vs rapidity vs phi from data not found\n"); return; } TH2F *effVSyVSphiSim = static_cast<TH2F*>(fileSim->FindObjectAny("trackingEffVsphi-y")); if (!effVSyVSphiSim) { printf("Efficiency vs rapidity vs phi from sim not found\n"); return; } Int_t nBins2dX = effVSyVSphiData->GetXaxis()->GetNbins(); Int_t nBins2dY = effVSyVSphiData->GetYaxis()->GetNbins(); Double_t effData2D,effSim2D,ratio2D; TH2F *effVSphiVSyRatio = new TH2F("RatioEffVSphiVSy","EffData/EffSim vs phi vs y",nBins2dX, effVSyVSphiData->GetXaxis()->GetBinLowEdge(1), effVSyVSphiData->GetXaxis()->GetBinUpEdge(nBins2dX),nBins2dY, effVSyVSphiData->GetYaxis()->GetBinLowEdge(1), effVSyVSphiData->GetYaxis()->GetBinUpEdge(nBins2dY)); effVSphiVSyRatio->GetXaxis()->SetTitle("phi"); effVSphiVSyRatio->GetYaxis()->SetTitle("y"); for (Int_t i = 1 ; i <= nBins2dX ; i++ ) { for (Int_t j = 1 ; j <= nBins2dY ; j++ ) { effData2D = effVSyVSphiData->GetBinContent(i,j); effSim2D = effVSyVSphiSim->GetBinContent(i,j); if (effData2D > 0. && effSim2D > 0.) { ratio2D = effData2D/effSim2D; // ratio2DErrh = rat*TMath::Sqrt(effDErrh*effDErrh/effD*effD + effSErrl*effSErrl/effS*effS); // ratio2DErrl = rat*TMath::Sqrt(effDErrl*effDErrl/effD*effD + effSErrh*effSErrh/effS*effS); } if (effData2D == 0 && effSim2D == 0) { ratio2D = 1.; // ratio2DErrh = 0.; // ratio2DErrl = 0.; } if (effData2D == 0 && effSim2D > 0.) { ratio2D = 0.; // ratio2DErrh = 0.; // ratio2DErrl = 0.; } if (effData2D > 0. && effSim2D == 0) { ratio2D = 2.; // ratio2DErrh = 0.; // ratio2DErrl = 0.; } effVSphiVSyRatio->SetBinContent(i,j,ratio2D); } } TH2F *effVSphiVSyRatioRapBins = new TH2F(); effVSphiVSyRatioRapBins->GetXaxis()->SetTitle("phi"); effVSphiVSyRatioRapBins->GetYaxis()->SetTitle("y"); effVSphiVSyRatioRapBins->SetName("RatioEffVSphiVSyRapBins"); effVSphiVSyRatioRapBins->SetTitle("EffData/EffSim vs phi vs y"); Int_t nxBins = effVSphiVSyRatio->GetXaxis()->GetNbins(); Int_t nyBins = effVSphiVSyRatio->GetYaxis()->GetNbins(); Double_t xBinEdge[nxBins+1]; Double_t yBinEdge[nyBins+1]; for (Int_t ybin = 0 ; ybin <= nyBins ; ybin++) { yBinEdge[ybin] = 2*TMath::ATan(TMath::Exp((effVSphiVSyRatio->GetYaxis()->GetBinLowEdge(ybin+1)))); } for (Int_t xbin = 0 ; xbin <= nxBins ; xbin++) { xBinEdge[xbin] = effVSphiVSyRatio->GetXaxis()->GetBinLowEdge(xbin+1); } effVSphiVSyRatioRapBins->SetBins(nxBins,xBinEdge,nyBins,yBinEdge); for (Int_t xbin = 1 ; xbin <= nxBins ; xbin++) { for (Int_t ybin = 1 ; ybin <= nyBins ; ybin++) { effVSphiVSyRatioRapBins->SetBinContent(xbin,ybin,effVSphiVSyRatio->GetBinContent(xbin,ybin)); } } globalRatiosAndEff.Add(effVSphiVSyRatio); globalRatiosAndEff.Add(effVSphiVSyRatioRapBins); //-------- TString hname2 = integrated ? "IntegratedChamber" : "Chamber"; // Get Chamber and DE Data and Sim graphs // TObjArray *listChEffVSrunData = static_cast<TObjArray*>(fileData->FindObjectAny("ChambersEffVSrun")); // if (!listChEffVSrunData) { // printf("list of Chamber efficiencies vs run from data not found\n"); // return; // } // TObjArray *listChEffVSrunSim = static_cast<TObjArray*>(fileSim->FindObjectAny("ChambersEffVSrun")); // if (!listChEffVSrunSim) { // printf("list of Chamber efficiencies vs run from sim not found\n"); // return; // } TObjArray *listChEffVSDEData = static_cast<TObjArray*>(fileData->FindObjectAny(Form("%sEffVsDE",hname2.Data()))); if (!listChEffVSDEData) { printf("list of Chamber efficiencies per DE from data not found\n"); return; } TObjArray *listChEffVSDESim = static_cast<TObjArray*>(fileSim->FindObjectAny(Form("%sEffVsDE",hname2.Data()))); if (!listChEffVSDESim) { printf("list of Chamber efficiencies per DE from sim not found\n"); return; } // TObjArray *listDEEffVSrunData = static_cast<TObjArray*>(fileData->FindObjectAny("DEEffVSrun")); // if (!listDEEffVSrunData) { // printf("list of DE efficiencies vs run from data not found\n"); // return; // } // TObjArray *listDEEffVSrunSim = static_cast<TObjArray*>(fileSim->FindObjectAny("DEEffVSrun")); // if (!listDEEffVSrunSim) { // printf("list of DE efficiencies vs run from sim not found\n"); // return; // } // Graph for global efficiency vs run TGraphAsymmErrors* gData ;//= static_cast<TGraphAsymmErrors*>(listChEffVSrunData->At(0)); TGraphAsymmErrors* gSim ;//= static_cast<TGraphAsymmErrors*>(listChEffVSrunSim->At(0)); //----Eff vs run // TGraphAsymmErrors *ratioEffvsrRun = CreateRatioGraph("RatioEffVsRun","data/sim tracking efficiency versus run",*gData,*gSim); // globalRatios.Add(ratioEffvsrRun); // // TGraphAsymmErrors* ratioEffvsrRunCopy = static_cast<TGraphAsymmErrors*>(ratioEffvsrRun->Clone()); // // globalRatiosAndEff.Add(DrawRatio("RatioEffVsRunAndEff","Comparison Data&MC tracking efficiency versus run",gData,gSim,ratioEffvsrRunCopy)); //------- //globalRatios.Add(CreateRatioGraph("RatioEffVsRun","data/sim tracking efficiency versus run",*gData,*gSim)); // Create a list with the Chamber and DE ratios // TObjArray chamberVSrunRatios; // TObjArray deVSrunRatios; TObjArray chamberVSdeRatios; // TObjArray chamberVSrunRatiosAndEff; // TObjArray deVSrunRatiosAndEff; TObjArray chamberVSdeRatiosAndEff; // Compute the ratios for Chamber vs run // for (Int_t nList = 1 ; nList < listChEffVSrunData->GetEntries() ; nList++) // { // gData = static_cast<TGraphAsymmErrors*>(listChEffVSrunData->At(nList)); // gSim = static_cast<TGraphAsymmErrors*>(listChEffVSrunSim->At(nList)); // if (!gData || !gSim ) // { // printf("Error readig from Chamber efficiency vs run list \n"); // return; // } // //----Eff of Chs vs run // TString name = Form("RatioEffCh%dVsRun",nList); TString title = Form("Chamber %d data/sim tracking efficiency versus run",nList); // // TGraphAsymmErrors *ratioEffChVsrRun = CreateRatioGraph(name.Data(),title.Data(),*gData,*gSim); // chamberVSrunRatios.Add(ratioEffChVsrRun); // // TGraphAsymmErrors* ratioEffChVsrRunCopy = static_cast<TGraphAsymmErrors*>(ratioEffChVsrRun->Clone()); // // TString nameRatio = Form("RatioEffCh%dVsRunAndEff",nList); TString titleRatio = Form("Comparison Data&MC Ch%d tracking efficiency versus run",nList); // chamberVSrunRatiosAndEff.Add(DrawRatio(nameRatio.Data(),titleRatio.Data(),gData,gSim,ratioEffChVsrRunCopy)); // //------- // // //// chamberVSrunRatios.Add(CreateRatioGraph(,,*gData,*gSim)); // // } //Load the mapping for the DE histos AliCDBManager::Instance()->SetDefaultStorage("local://$ALICE_ROOT/OCDB"); AliCDBManager::Instance()->SetRun(0); AliMUONCDB::LoadMapping(); AliMpDEIterator deit; // Loop over Chambers for (Int_t ich = 0 ; ich < 10 ; ich++) { // Compute the ratios for DE vs run deit.First(ich); // while ( !deit.IsDone() ) // { // TString currentDEName = Form("EffDE%dVSrun",deit.CurrentDEId()); // gData = static_cast<TGraphAsymmErrors*>(listDEEffVSrunData->FindObject(currentDEName.Data())); // gSim = static_cast<TGraphAsymmErrors*>(listDEEffVSrunSim->FindObject(currentDEName.Data())); // // TString name = Form("RatioEffDE%dVsRun",deit.CurrentDEId()); TString title = Form("DE %d data/sim tracking efficiency versus run",deit.CurrentDEId()); // if (!gData || !gSim ) // { // printf("Error readig from DE efficiency vs run list \n"); // return; // } // //----Eff of DEs vs run // TGraphAsymmErrors *ratioEffDEvsRun = CreateRatioGraph(name.Data(),title.Data(),*gData,*gSim); // deVSrunRatios.Add(ratioEffDEvsRun); // // TGraphAsymmErrors* ratioEffDEvsRunCopy = static_cast<TGraphAsymmErrors*>(ratioEffDEvsRun->Clone()); // // TString nameRatio = Form("RatioEffDE%dVsRunAndEff",deit.CurrentDEId()); TString titleRatio = Form("Comparison Data&MC DE%d tracking efficiency versus run",deit.CurrentDEId()); // deVSrunRatiosAndEff.Add(DrawRatio(nameRatio.Data(),titleRatio.Data(),gData,gSim,ratioEffDEvsRunCopy)); // //------- // //// deVSrunRatios.Add(CreateRatioGraph(name.Data(),title.Data(),*gData,*gSim)); // // deit.Next(); // } // Compute the ratios for Ch vs DE TString hname3 = integrated ? "integratedEff" : "eff"; gData = static_cast<TGraphAsymmErrors*>(listChEffVSDEData->FindObject(Form("%sCh%dVsDE",hname3.Data(),ich+1))); gSim = static_cast<TGraphAsymmErrors*>(listChEffVSDESim->FindObject(Form("%sCh%dVsDE",hname3.Data(),ich+1))); if (!gData || !gSim ) { printf("Error reading from Chamber efficiency per DE list \n"); return; } TString name = Form("RatioEffCh%dVsDE",ich+1); TString title = Form("Chamber %d data/sim tracking efficiency versus DE",ich+1); //----Eff of CHs vs DE TGraphAsymmErrors *ratioEffChvsDE = CreateRatioGraph(name.Data(),title.Data(),*gData,*gSim); chamberVSdeRatios.Add(ratioEffChvsDE); TGraphAsymmErrors* ratioEffChvsDECopy = static_cast<TGraphAsymmErrors*>(ratioEffChvsDE->Clone()); TString nameRatio = Form("RatioEffCh%dVsDEAndEff",ich+1); TString titleRatio = Form("Comparison Data&MC Ch%d tracking efficiency versus DE",ich+1); chamberVSdeRatiosAndEff.Add(DrawRatio(nameRatio.Data(),titleRatio.Data(),gData,gSim,ratioEffChvsDECopy)); //------- // chamberVSdeRatios.Add(CreateRatioGraph(name.Data(),title.Data(),*gData,*gSim)); } //Beautify graphs BeautifyGraphs(globalRatios,"EffData/EffSim"); // BeautifyGraphs(deVSrunRatios,"EffData/EffSim"); // BeautifyGraphs(chamberVSrunRatios,"EffData/EffSim"); BeautifyGraphs(chamberVSdeRatios,"EffData/EffSim"); // BeautifyGraphs(globalRatiosAndEff,"EffData/EffSim"); // BeautifyGraphs(deVSrunRatiosAndEff,"EffData/EffSim"); // BeautifyGraphs(chamberVSrunRatiosAndEff,"EffData/EffSim"); // BeautifyGraphs(chamberVSdeRatiosAndEff,"EffData/EffSim"); // set bin labels // SetRunLabel(deVSrunRatios,irun,runs); // SetRunLabel(chamberVSrunRatios,irun,runs); // SetRunLabel(globalRatios,irun,runs,1); //Write it in such a way the number is the position on the list of the graph you want to label // // save output TFile* file = new TFile("EffComparison.root","update"); globalRatios.Write("GlobalEffRatios", TObject::kOverwrite | TObject::kSingleKey); // chamberVSrunRatios.Write("ChambersEffVSrunRatios", TObject::kOverwrite | TObject::kSingleKey); // deVSrunRatios.Write("DEEffVSrunRatios", TObject::kOverwrite | TObject::kSingleKey); chamberVSdeRatios.Write("ChamberEffperDERatios", TObject::kOverwrite | TObject::kSingleKey); globalRatiosAndEff.Write("GlobalEffRatiosAndEffs", TObject::kOverwrite | TObject::kSingleKey); // chamberVSrunRatiosAndEff.Write("ChambersEffVSrunRatiosAndEff", TObject::kOverwrite | TObject::kSingleKey); // deVSrunRatiosAndEff.Write("DEEffVSrunRatiosAndEff", TObject::kOverwrite | TObject::kSingleKey); chamberVSdeRatiosAndEff.Write("ChamberEffperDERatiosAndEff", TObject::kOverwrite | TObject::kSingleKey); file->Close(); fileData->Close(); fileSim->Close(); }
void DrawSpectraAndRatios() { const Int_t nCent=7; const Char_t *title[nCent]={ "0-5 %", "5-10 %", "10-20 %", "20-40 %", "40-60 %", "60-80 %", "80-90 %" }; const Int_t colour[nCent]={2, 635, 797, 419, 4 , 6, 1 }; const Int_t marker[nCent]={22, 29, 34, 21, 23, 33, 20 }; const Float_t masize[nCent]={1.3, 1.6, 1.3, 1.2, 1.4, 1.8, 1.3}; const Float_t factor[nCent]={1.0, 1.0, 1.1, 1.5, 3.0,7.5,15.0}; //scale for drawing const Float_t factor2[nCent]={1.0, 0.9, 0.9, 1.1, 2.0,5.5,15.0}; //scale for lin lambda drawing const Float_t factor1[nCent]={1.0, 1/2., 1/4., 1/8., 1/16., 1/32., 1/64.}; //scale for log drawing const Char_t *rNameL[2*nCent]={ // file name, histo name "raw.root", "YieldLambda_0005", "raw.root", "YieldLambda_0510", "raw.root", "YieldLambda_1020", "raw.root", "YieldLambda_2040", "raw.root", "YieldLambda_4060", "raw.root", "YieldLambda_6080", "raw.root", "YieldLambda_8090" }; const Char_t *eNameL[2*nCent]={ // file name, histo name "eff.root", "eff_Lambda_comb_0005", "eff.root", "eff_Lambda_comb_0510", "eff.root", "eff_Lambda_comb_1020", "eff.root", "eff_Lambda_comb_2040", "eff.root", "eff_Lambda_comb_4060", "eff.root", "eff_Lambda_comb_6080", "eff.root", "eff_Lambda_comb_8090" }; const Char_t *rNameK[2*nCent]={ // file name, histo name "raw.root", "YieldK0Short_0005", "raw.root", "YieldK0Short_0510", "raw.root", "YieldK0Short_1020", "raw.root", "YieldK0Short_2040", "raw.root", "YieldK0Short_4060", "raw.root", "YieldK0Short_6080", "raw.root", "YieldK0Short_8090" }; const Char_t *eNameK[2*nCent]={ // file name, histo name "eff.root", "eff_K0s_comb_0005", "eff.root", "eff_K0s_comb_0510", "eff.root", "eff_K0s_comb_1020", "eff.root", "eff_K0s_comb_2040", "eff.root", "eff_K0s_comb_4060", "eff.root", "eff_K0s_comb_6080", "eff.root", "eff_K0s_comb_8090" }; gStyle->SetOptStat(0); gStyle->SetOptTitle(0); gStyle->SetLegendFillColor(0); TH1 *raw=0; TH1 *eff=0; TString option(""), ratio("ratio"); TCanvas *c1=new TCanvas; c1->SetLogy(); c1->SetLeftMargin(0.13); c1->SetBottomMargin(0.13); TCanvas *c1lin=new TCanvas; c1lin->SetLeftMargin(0.13); c1lin->SetBottomMargin(0.13); TCanvas *c2=new TCanvas; c2->SetLogy(); c2->SetLeftMargin(0.13); c2->SetBottomMargin(0.13); TCanvas *c2lin=new TCanvas; c2lin->SetLeftMargin(0.13); c2lin->SetBottomMargin(0.13); TCanvas *c3=new TCanvas; c3->SetLeftMargin(0.13); c3->SetBottomMargin(0.13); TH1 *lkRatio[nCent]={0}; for (Int_t cent=0; cent<nCent; cent++) { const Char_t *tit=title[cent]; Int_t col=colour[cent]; Int_t mar=marker[cent]; Float_t siz=masize[cent]; // Lambda if (!GetHistos(rNameL+2*cent, eNameL+2*cent, raw, eff)) return; TH1 *rawHl=MapHisto(raw); TH1 *effHl=MapHisto(eff); //Feed down FeedDown(rawHl); rawHl->Divide(effHl); SetAttributes(rawHl,tit,col,mar,siz); c1->cd(); DrawHisto(rawHl, option.Data(), sysEffLam, sysSigLam, factor1[cent]); TH1 *linHl=(TH1*)rawHl->Clone(); SetAttributes(linHl,tit,col,mar,siz,0.,20.,32); c1lin->cd(); DrawHisto(linHl, option.Data(), sysEffLam, sysSigLam, factor2[cent]); // K0s if (!GetHistos(rNameK+2*cent, eNameK+2*cent, raw, eff)) return; TH1 *rawHk=MapHisto(raw); TH1 *effHk=MapHisto(eff); rawHk->Divide(effHk); SetAttributes(rawHk,tit,col,mar,siz,1e-7); c2->cd(); DrawHisto(rawHk, option.Data(), sysEffK0s, sysSigK0s, factor1[cent]); TH1 *linHk=(TH1*)rawHk->Clone(); SetAttributes(linHk,tit,col,mar,siz,0.,120.,32); c2lin->cd(); DrawHisto(linHk, option.Data(), sysEffK0s, sysSigK0s, factor[cent]); // Lambda/K0s TH1 *rawHlk=(TH1*)rawHl->Clone(); lkRatio[cent]=rawHlk; TString name=ratio+rawHlk->GetName(); rawHlk->SetName(name.Data()); rawHlk->SetMaximum(1.7); rawHlk->Divide(rawHk); rawHlk->GetYaxis()->SetTitle("#Lambda/K^{0}_{S}"); c3->cd(); //if (cent!=1) DrawRatio(rawHlk,option.Data()); option+="same"; } for (Int_t cent=0; cent<nCent; cent++) { //if (cent != 1) lkRatio[cent]->Draw("same"); } TLegend *leg=c1->BuildLegend(0.68,0.46,0.88,0.82,"Centrality:"); leg->SetBorderSize(0); leg->SetFillColor(0); TLegendEntry *entry=leg->AddEntry("NULL","systematic uncertainty","lpf"); Int_t ci = TColor::GetColor("#cccccc"); entry->SetLineColor(ci); entry->SetLineStyle(1); entry->SetLineWidth(10); entry->SetMarkerColor(ci); c1->cd(); TLatex * tex = new TLatex(0.5,0.65,"#Lambda"); tex->SetNDC(); tex->SetTextFont(42); tex->SetTextSize(0.11); tex->SetLineWidth(2); tex->Draw(); tex = new TLatex(0.27,0.83,"Pb-Pb at #sqrt{s_{NN}}=2.76 TeV, |y|<0.5"); tex->SetNDC(); tex->SetTextFont(42); tex->SetLineWidth(2); tex->Draw(); //Float_t offx=0.15, offy=0.16, sizx=0.22, sizy=0.22; //DrawALICELogo(offx,offy,offx+sizx,offy+sizy); leg=c1lin->BuildLegend(0.69,0.43,0.88,0.80,"Centrality:"); leg->SetBorderSize(0); leg->SetFillColor(0); entry=leg->AddEntry("NULL","systematic uncertainty","lpf"); entry->SetLineColor(ci); entry->SetLineStyle(1); entry->SetLineWidth(10); entry->SetMarkerColor(ci); entry=leg->AddEntry("NULL","BGBW fit","l"); entry->SetLineColor(1); entry->SetLineStyle(1); entry->SetLineWidth(1); entry->SetMarkerColor(1); entry->SetMarkerStyle(21); entry->SetMarkerSize(1); c1lin->cd(); tex=new TLatex(0.27,0.83,"Pb-Pb at #sqrt{s_{NN}}=2.76 TeV, |y|<0.5"); tex->SetNDC(); tex->Draw(); tex = new TLatex(0.5,0.65,"#Lambda"); tex->SetNDC(); tex->SetTextSize(0.11); tex->Draw(); { TFile::Open(" BWFitResults_Lambda0_stat.root"); const Char_t *name[nCent]={ "BWFit_0005", "BWFit_0510","BWFit_1020","BWFit_2040", "BWFit_4060","BWFit_6080","BWFit_8090" }; DrawFit(name, factor2, nCent); } //Float_t offx1=0.70, offy1=0.18; //DrawALICELogo(offx1,offy1,offx1+sizx,offy1+sizy); leg=c2->BuildLegend(0.68,0.46,0.88,0.82,"Centrality:"); leg->SetBorderSize(0); leg->SetFillColor(0); entry=leg->AddEntry("NULL","systematic uncertainty","lpf"); entry->SetLineColor(ci); entry->SetLineStyle(1); entry->SetLineWidth(10); entry->SetMarkerColor(ci); c2->cd(); tex = new TLatex(0.5,0.65,"K^{0}_{S}"); tex->SetNDC(); tex->SetTextFont(42); tex->SetTextSize(0.089); tex->SetLineWidth(2); tex->Draw(); tex = new TLatex(0.27,0.83,"Pb-Pb at #sqrt{s_{NN}}=2.76 TeV, |y|<0.5"); tex->SetNDC(); tex->SetTextFont(42); tex->SetLineWidth(2); tex->Draw(); //DrawALICELogo(offx,offy,offx+sizx,offy+sizy); leg=c2lin->BuildLegend(0.69,0.43,0.88,0.80,"Centrality:"); leg->SetBorderSize(0); leg->SetFillColor(0); entry=leg->AddEntry("NULL","systematic uncertainty","lpf"); entry->SetLineColor(ci); entry->SetLineStyle(1); entry->SetLineWidth(10); entry->SetMarkerColor(ci); entry=leg->AddEntry("NULL","BGBW fit","l"); entry->SetLineColor(1); entry->SetLineStyle(1); entry->SetLineWidth(1); entry->SetMarkerColor(1); entry->SetMarkerStyle(21); entry->SetMarkerSize(1); c2lin->cd(); tex = new TLatex(0.27,0.83,"Pb-Pb at #sqrt{s_{NN}}=2.76 TeV, |y|<0.5"); tex->SetNDC(); tex->Draw(); tex = new TLatex(0.5,0.65,"K^{0}_{S}"); tex->SetNDC(); tex->SetTextSize(0.089); tex->Draw(); { TFile::Open("BWFitResults_K0_stat.root"); const Char_t *name[nCent]={ "BWFit_0005", "BWFit_0510","BWFit_1020","BWFit_2040", "BWFit_4060","BWFit_6080","BWFit_8090" }; DrawFit(name, factor, nCent); } //DrawALICELogo(offx1,offy1,offx1+sizx,offy1+sizy); //leg=c3->BuildLegend(0.74,0.62,0.88,0.88,"Centrality:"); leg=c3->BuildLegend(0.55,0.55,0.88,0.88,"Centrality:"); leg->SetBorderSize(0); leg->SetFillColor(0); entry=leg->AddEntry("NULL","systematic uncertainty","lpf"); entry->SetLineColor(ci); entry->SetLineStyle(1); entry->SetLineWidth(10); entry->SetMarkerColor(ci); return; }