#if !defined(__CINT__) || defined(__MAKECINT__) #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #endif void RatioPlot(TH1F **num,TH1F **den,TString t1,TString t2,TString opt,Double_t Low[],Double_t Up[]); void SetDrawAtt(Int_t markerstyle,Int_t markercolor,Int_t markersize,Int_t linecolor,Int_t linewidth,TH1 *h1); void ResetOutOfRange(TH1F *histo, Int_t ipart, Double_t lowRange[3], Double_t upRange[3]); void MakeCorrectedSpectraITSsaNsigma( TString period="LHC10d", TString MCname="LHC10f6a", Float_t DCAcut=7, Int_t lowmult=-1, Int_t upmult=-1 ) { // parameters Bool_t MakeMCPlots=1; Bool_t MakeSystErr=0; Bool_t NormalizeData=1; Bool_t NormalizeToINEL=0; Bool_t SaveOnlyAsymm=0; Bool_t CorrectOnlyForEfficiency=0; Bool_t MarekNorm=0; Bool_t DCACorrection=1; Bool_t GFCorrection=1; //MC Histos TH1F *fHistPrimMCposBefEvSel[3]; TH1F *fHistPrimMCnegBefEvSel[3]; TH1F *fHistPrimMCpos[3]; TH1F *fHistPrimMCneg[3]; TH1F *hHistPosNSigma[3]; TH1F *hHistNegNSigma[3]; TH1F *hHistPosNSigmaMean[3]; TH1F *hHistNegNSigmaMean[3]; TH1F *hHistPosNSigmaPrim[3]; TH1F *hHistNegNSigmaPrim[3]; TH1F *hHistPosNSigmaPrimMean[3]; TH1F *hHistNegNSigmaPrimMean[3]; TH1F *hHistPosNSigmaPrimMC[3]; TH1F *hHistNegNSigmaPrimMC[3]; TH1F *hHistPosNSigmaPrimMCMean[3]; TH1F *hHistNegNSigmaPrimMCMean[3]; TH1F *hHistPosNSigmaMC[3]; TH1F *hHistNegNSigmaMC[3]; TH1F *hHistPosNSigmaMCMean[3]; TH1F *hHistNegNSigmaMCMean[3]; TH1F *hCorrFactPos[3]; TH1F *hCorrFactNeg[3]; TH1F *hCorrFactPosMean[3]; TH1F *hCorrFactNegMean[3]; TH1F *hEffPos[3]; TH1F *hEffNeg[3]; TH1F *hEffPosMean[3]; TH1F *hEffNegMean[3]; //DATA Histos TH1F *hHistPosNSigmaDATA[3]; TH1F *hHistNegNSigmaDATA[3]; TH1F *hHistPosNSigmaMeanDATA[3]; TH1F *hHistNegNSigmaMeanDATA[3]; TH1F *hITSsaPos[3]; TH1F *hITSsaNeg[3]; TH1F *hITSsaPosMean[3]; TH1F *hITSsaNegMean[3]; TH1F *hITSsaRawPos[3]; TH1F *hITSsaRawNeg[3]; TH1F *hITSsaRawPosMean[3]; TH1F *hITSsaRawNegMean[3]; // Float_t nmin=1.5; Double_t Low[3]={0.10,0.2,0.3}; Double_t Up[3]={0.4,0.5,0.7}; Double_t lowRange[3]={0.10,0.2,0.3}; Double_t upRange[3]={0.6,0.6,0.6}; const Int_t nbinspt=22; Double_t xbins[nbinspt+1]={0.08,0.10,0.12,0.14,0.16,0.18,0.20,0.25,0.30,0.35,0.40,0.45,0.50,0.55,0.60,0.65,0.70,0.75,0.80,0.85,0.90,0.95,1.0}; TString fname_MC=Form("./%s/AnalysisResults.root",MCname.Data()); cout<Close(); delete outMC; TString foutDATA; if(CorrectOnlyForEfficiency){ foutDATA=Form("outSpectraData_%s_%s_%.0fDCA.root",period.Data(),MCname.Data(),DCAcut); }else{ foutDATA=Form("outCorrSpectraData_%s_%s_%.0fDCA.root",period.Data(),MCname.Data(),DCAcut); } TString fnameDATA=Form("%s/AnalysisResults.root",period.Data()); cout<Close(); delete outDATA; TString lnameMC=Form("clistITSsaMult%ito%i",lowmult,upmult); Printf("\n------------------ READING MC %s -------------------\n",lnameMC.Data()); TFile *finMC = new TFile(fname_MC.Data()); TDirectory *dirFileMC=(TDirectory*)finMC->Get("PWG2SpectraITSsa"); TList * cOutputMC = (TList*)dirFileMC->Get(lnameMC.Data()); //cOutputMC->Print(); TH1F *fHistNEventsMC = (TH1F*)cOutputMC->FindObject("fHistNEvents"); Float_t normMC=(Float_t)1/fHistNEventsMC->GetBinContent(fHistNEventsMC->FindBin(1.)); printf("- NormalizationMC (NEvents): %.0f \n",fHistNEventsMC->GetBinContent(fHistNEventsMC->FindBin(1.))); for(Int_t ipart=0;ipart<=2;ipart++){ fHistPrimMCposBefEvSel[ipart]=(TH1F*)cOutputMC->FindObject(Form("fHistPrimMCposBefEvSel%i",ipart));//primaries generated (before event selection) fHistPrimMCnegBefEvSel[ipart]=(TH1F*)cOutputMC->FindObject(Form("fHistPrimMCnegBefEvSel%i",ipart)); fHistPrimMCpos[ipart]=(TH1F*)cOutputMC->FindObject(Form("fHistPrimMCpos%i",ipart)); //primaries generated (after event selection) fHistPrimMCneg[ipart]=(TH1F*)cOutputMC->FindObject(Form("fHistPrimMCneg%i",ipart)); hHistPosNSigma[ipart]=(TH1F*)cOutputMC->FindObject(Form("hHistPosNSigma%i",ipart));//NSigma recontructed, no MCtruth hHistNegNSigma[ipart]=(TH1F*)cOutputMC->FindObject(Form("hHistNegNSigma%i",ipart)); hHistPosNSigmaPrimMC[ipart]=(TH1F*)cOutputMC->FindObject(Form("hHistPosNSigmaPrimMC%i",ipart));//NSigma recontructed, MCtruth hHistNegNSigmaPrimMC[ipart]=(TH1F*)cOutputMC->FindObject(Form("hHistNegNSigmaPrimMC%i",ipart)); hHistPosNSigmaMC[ipart]=(TH1F*)cOutputMC->FindObject(Form("hHistPosNSigmaMC%i",ipart));//NSigma recontructed, MCtruth hHistNegNSigmaMC[ipart]=(TH1F*)cOutputMC->FindObject(Form("hHistNegNSigmaMC%i",ipart)); hHistPosNSigmaPrim[ipart]=(TH1F*)cOutputMC->FindObject(Form("hHistPosNSigmaPrim%i",ipart));//NSigma recontructed, truth hHistNegNSigmaPrim[ipart]=(TH1F*)cOutputMC->FindObject(Form("hHistNegNSigmaPrim%i",ipart)); hHistPosNSigmaMean[ipart]=(TH1F*)cOutputMC->FindObject(Form("hHistPosNSigmaMean%i",ipart));//NSigmaMean recontructed, no MCtruth hHistNegNSigmaMean[ipart]=(TH1F*)cOutputMC->FindObject(Form("hHistNegNSigmaMean%i",ipart)); hHistPosNSigmaPrimMCMean[ipart]=(TH1F*)cOutputMC->FindObject(Form("hHistPosNSigmaPrimMCMean%i",ipart));//NSigmaMean recontructed, no MCtruth hHistNegNSigmaPrimMCMean[ipart]=(TH1F*)cOutputMC->FindObject(Form("hHistNegNSigmaPrimMCMean%i",ipart)); hHistPosNSigmaMCMean[ipart]=(TH1F*)cOutputMC->FindObject(Form("hHistPosNSigmaMCMean%i",ipart));//NSigmaMean recontructed, no MCtruth hHistNegNSigmaMCMean[ipart]=(TH1F*)cOutputMC->FindObject(Form("hHistNegNSigmaMCMean%i",ipart)); hHistPosNSigmaPrimMean[ipart]=(TH1F*)cOutputMC->FindObject(Form("hHistPosNSigmaPrimMean%i",ipart));//NSigmaMean recontructed, no MCtruth hHistNegNSigmaPrimMean[ipart]=(TH1F*)cOutputMC->FindObject(Form("hHistNegNSigmaPrimMean%i",ipart)); } for(Int_t ipart=0;ipart<=2;ipart++){ hCorrFactPos[ipart]=new TH1F(Form("hCorrFactPos%i",ipart),Form("hCorrFactPos%i",ipart),nbinspt,xbins); hCorrFactNeg[ipart]=new TH1F(Form("hCorrFactNeg%i",ipart),Form("hCorrFactNeg%i",ipart),nbinspt,xbins); hCorrFactPosMean[ipart]=new TH1F(Form("hCorrFactPosMean%i",ipart),Form("hCorrFactPosMean%i",ipart),nbinspt,xbins); hCorrFactNegMean[ipart]=new TH1F(Form("hCorrFactNegMean%i",ipart),Form("hCorrFactNegMean%i",ipart),nbinspt,xbins); hEffPos[ipart]=new TH1F(Form("hEffPos%i",ipart),Form("hEffPos%i",ipart),nbinspt,xbins); hEffNeg[ipart]=new TH1F(Form("hEffNeg%i",ipart),Form("hEffNeg%i",ipart),nbinspt,xbins); hEffPosMean[ipart]=new TH1F(Form("hEffPosMean%i",ipart),Form("hEffPosMean%i",ipart),nbinspt,xbins); hEffNegMean[ipart]=new TH1F(Form("hEffNegMean%i",ipart),Form("hEffNegMean%i",ipart),nbinspt,xbins); } for(Int_t ipart=0;ipart<=2;ipart++){ hHistPosNSigma[ipart]->Sumw2(); hHistNegNSigma[ipart]->Sumw2(); hHistPosNSigmaMean[ipart]->Sumw2(); hHistNegNSigmaMean[ipart]->Sumw2(); hHistPosNSigmaPrimMC[ipart]->Sumw2(); hHistNegNSigmaPrimMC[ipart]->Sumw2(); hHistPosNSigmaMC[ipart]->Sumw2(); hHistNegNSigmaMC[ipart]->Sumw2(); hHistPosNSigmaPrimMCMean[ipart]->Sumw2(); hHistNegNSigmaPrimMCMean[ipart]->Sumw2(); hHistPosNSigmaPrim[ipart]->Sumw2(); hHistNegNSigmaPrim[ipart]->Sumw2(); hHistPosNSigmaPrimMean[ipart]->Sumw2(); hHistNegNSigmaPrimMean[ipart]->Sumw2(); hHistPosNSigmaMCMean[ipart]->Sumw2(); hHistNegNSigmaMCMean[ipart]->Sumw2(); hCorrFactPos[ipart]->Divide(hHistPosNSigma[ipart],fHistPrimMCposBefEvSel[ipart],1,1,"B"); hCorrFactNeg[ipart]->Divide(hHistNegNSigma[ipart],fHistPrimMCnegBefEvSel[ipart],1,1,"B"); hCorrFactPosMean[ipart]->Divide(hHistPosNSigmaMean[ipart],fHistPrimMCposBefEvSel[ipart],1,1,"B"); hCorrFactNegMean[ipart]->Divide(hHistNegNSigmaMean[ipart],fHistPrimMCnegBefEvSel[ipart],1,1,"B"); // hCorrFactPos[ipart]->Divide(hHistPosNSigmaPrim[ipart],fHistPrimMCposBefEvSel[ipart],1,1,"B"); // hCorrFactNeg[ipart]->Divide(hHistNegNSigmaPrim[ipart],fHistPrimMCnegBefEvSel[ipart],1,1,"B"); // hCorrFactPosMean[ipart]->Divide(hHistPosNSigmaPrimMean[ipart],fHistPrimMCposBefEvSel[ipart],1,1,"B"); // hCorrFactNegMean[ipart]->Divide(hHistNegNSigmaPrimMean[ipart],fHistPrimMCnegBefEvSel[ipart],1,1,"B"); //hCorrFactPos[ipart]->Divide(hHistPosNSigmaPrimMC[ipart],fHistPrimMCposBefEvSel[ipart],1,1,"B"); //hCorrFactNeg[ipart]->Divide(hHistNegNSigmaPrimMC[ipart],fHistPrimMCnegBefEvSel[ipart],1,1,"B"); //hCorrFactPosMean[ipart]->Divide(hHistPosNSigmaPrimMCMean[ipart],fHistPrimMCposBefEvSel[ipart],1,1,"B"); //hCorrFactNegMean[ipart]->Divide(hHistNegNSigmaPrimMCMean[ipart],fHistPrimMCnegBefEvSel[ipart],1,1,"B"); hCorrFactPos[ipart]->SetTitle(Form("Correction Factor NSigma Pos%i",ipart)); hCorrFactNeg[ipart]->SetTitle(Form("Correction Factor NSigma Neg%i",ipart)); hCorrFactPosMean[ipart]->SetTitle(Form("Corr Fact NSigma Pos%i",ipart)); hCorrFactNegMean[ipart]->SetTitle(Form("Corr Fact NSigma Neg%i",ipart)); hCorrFactPos[ipart]->SetName(Form("hCorrFactPos%i",ipart)); hCorrFactNeg[ipart]->SetName(Form("hCorrFactNeg%i",ipart)); hCorrFactPosMean[ipart]->SetName(Form("hCorrFactPosMean%i",ipart)); hCorrFactNegMean[ipart]->SetName(Form("hCorrFactNegMean%i",ipart)); SetDrawAtt(21+ipart,ipart+4,1,ipart+4,1,hCorrFactPos[ipart]); SetDrawAtt(25+ipart,ipart+4,1,ipart+4,1,hCorrFactNeg[ipart]); SetDrawAtt(21+ipart,ipart+1,1,ipart+1,1,hCorrFactPosMean[ipart]); SetDrawAtt(25+ipart,ipart+1,1,ipart+1,1,hCorrFactNegMean[ipart]); ResetOutOfRange(hCorrFactPos[ipart],ipart,lowRange,upRange); ResetOutOfRange(hCorrFactNeg[ipart],ipart,lowRange,upRange); ResetOutOfRange(hCorrFactPosMean[ipart],ipart,lowRange,upRange); ResetOutOfRange(hCorrFactNegMean[ipart],ipart,lowRange,upRange); hHistPosNSigmaPrimMC[ipart]->Sumw2(); hHistNegNSigmaPrimMC[ipart]->Sumw2(); hHistPosNSigmaPrimMCMean[ipart]->Sumw2(); hHistNegNSigmaPrimMCMean[ipart]->Sumw2(); hEffPos[ipart]->Divide(hHistPosNSigmaPrimMC[ipart],fHistPrimMCpos[ipart],1,1,"B"); hEffNeg[ipart]->Divide(hHistNegNSigmaPrimMC[ipart],fHistPrimMCneg[ipart],1,1,"B"); hEffPosMean[ipart]->Divide(hHistPosNSigmaPrimMCMean[ipart],fHistPrimMCpos[ipart],1,1,"B"); hEffNegMean[ipart]->Divide(hHistNegNSigmaPrimMCMean[ipart],fHistPrimMCneg[ipart],1,1,"B"); hEffPos[ipart]->SetTitle(Form("Efficiency NSigma Pos%i",ipart)); hEffNeg[ipart]->SetTitle(Form("Efficiency NSigma Neg%i",ipart)); hEffPosMean[ipart]->SetTitle(Form("Efficiency NSigma Asymm Pos%i",ipart)); hEffNegMean[ipart]->SetTitle(Form("Efficiency NSigma Asymm Neg%i",ipart)); hEffPos[ipart]->SetName(Form("hEffPos%i",ipart)); hEffNeg[ipart]->SetName(Form("hEffNeg%i",ipart)); hEffPosMean[ipart]->SetName(Form("hEffPosMean%i",ipart)); hEffNegMean[ipart]->SetName(Form("hEffNegMean%i",ipart)); SetDrawAtt(21+ipart,ipart+4,1,ipart+4,1,hEffPos[ipart]); SetDrawAtt(25+ipart,ipart+4,1,ipart+4,1,hEffNeg[ipart]); SetDrawAtt(21+ipart,ipart+1,1,ipart+1,1,hEffPosMean[ipart]); SetDrawAtt(25+ipart,ipart+1,1,ipart+1,1,hEffNegMean[ipart]); ResetOutOfRange(hEffPos[ipart],ipart,lowRange,upRange); ResetOutOfRange(hEffNeg[ipart],ipart,lowRange,upRange); ResetOutOfRange(hEffPosMean[ipart],ipart,lowRange,upRange); ResetOutOfRange(hEffNegMean[ipart],ipart,lowRange,upRange); hCorrFactPos[ipart]->SetMinimum(0.); hCorrFactNeg[ipart]->SetMinimum(0.); hCorrFactPosMean[ipart]->SetMinimum(0.); hCorrFactNegMean[ipart]->SetMinimum(0.); hEffPos[ipart]->SetMinimum(0.); hEffNeg[ipart]->SetMinimum(0.); hEffPosMean[ipart]->SetMinimum(0.); hEffNegMean[ipart]->SetMinimum(0.); hCorrFactPos[ipart]->SetMaximum(1.); hCorrFactNeg[ipart]->SetMaximum(1.); hCorrFactPosMean[ipart]->SetMaximum(1.); hCorrFactNegMean[ipart]->SetMaximum(1.); hEffPos[ipart]->SetMaximum(1.); hEffNeg[ipart]->SetMaximum(1.); hEffPosMean[ipart]->SetMaximum(1.); hEffNegMean[ipart]->SetMaximum(1.); } if(MakeMCPlots){ TCanvas *cCorr=new TCanvas("cCorr","cCorr"); cCorr->SetGridy(); for(Int_t ipart=0;ipart<=2;ipart++){ if(ipart==0)hCorrFactPos[ipart]->Draw("P"); else hCorrFactPos[ipart]->Draw("PSAME"); hCorrFactNeg[ipart]->Draw("PSAME"); } cCorr->BuildLegend(); TCanvas *cCorrMean=new TCanvas("cCorrMean","cCorrMean"); cCorrMean->SetGridy(); for(Int_t ipart=0;ipart<=2;ipart++){ if(ipart==0){ TH1F * hempty=(TH1F*)hCorrFactPosMean[ipart]->Clone(); hempty->SetXTitle("P_{T} (GeV/c)"); hempty->SetYTitle("Acc x #epsilon x Contamination"); hempty->Reset("all"); hempty->Draw(); } hCorrFactPosMean[ipart]->Draw("PSAME"); hCorrFactNegMean[ipart]->Draw("PSAME"); } cCorrMean->BuildLegend(); TCanvas *cCorrcfPos=new TCanvas("cCorrcfPos","cCorrcfPos"); cCorrcfPos->SetGridy(); for(Int_t ipart=0;ipart<=2;ipart++){ if(ipart==0)hCorrFactPos[ipart]->Draw("P"); else hCorrFactPos[ipart]->Draw("PSAME"); hCorrFactPosMean[ipart]->Draw("PSAME"); } cCorrcfPos->BuildLegend(); TCanvas *cCorrcfNeg=new TCanvas("cCorrcfNeg","cCorrcfNeg"); cCorrcfNeg->SetGridy(); for(Int_t ipart=0;ipart<=2;ipart++){ if(ipart==0)hCorrFactNeg[ipart]->Draw("P"); else hCorrFactNeg[ipart]->Draw("PSAME"); hCorrFactNegMean[ipart]->Draw("PSAME"); } cCorrcfNeg->BuildLegend(); TCanvas *cEff=new TCanvas("cEff","cEff"); cEff->SetGridy(); for(Int_t ipart=0;ipart<=2;ipart++){ if(ipart==0)hEffPos[ipart]->Draw("P"); else hEffPos[ipart]->Draw("PSAME"); hEffNeg[ipart]->Draw("PSAME"); } cEff->BuildLegend(); TCanvas *cEffMean=new TCanvas("cEffMean","cEffMean"); cEffMean->SetGridy(); for(Int_t ipart=0;ipart<=2;ipart++){ if(ipart==0)hEffPosMean[ipart]->Draw("P"); else hEffPosMean[ipart]->Draw("PSAME"); hEffNegMean[ipart]->Draw("PSAME"); } cEffMean->BuildLegend(); RatioPlot(hEffNegMean,hEffPosMean,"Neg","Pos","Efficiency",Low,Up); TCanvas *cEffcfPos=new TCanvas("cEffcfPos","cEffcfPos"); cEffcfPos->SetGridy(); for(Int_t ipart=0;ipart<=2;ipart++){ if(ipart==0)hEffPos[ipart]->Draw("P"); else hEffPos[ipart]->Draw("PSAME"); hEffPosMean[ipart]->Draw("PSAME"); } cEffcfPos->BuildLegend(); TCanvas *cEffcfNeg=new TCanvas("cEffcfNeg","cEffcfNeg"); cEffcfNeg->SetGridy(); for(Int_t ipart=0;ipart<=2;ipart++){ if(ipart==0)hEffNeg[ipart]->Draw("P"); else hEffNeg[ipart]->Draw("PSAME"); hEffNegMean[ipart]->Draw("PSAME"); } cEffcfNeg->BuildLegend(); } for(Int_t ipart=0;ipart<=2;ipart++) { hHistPosNSigma[ipart]->Scale(normMC,"width"); hHistNegNSigma[ipart]->Scale(normMC,"width"); hHistPosNSigmaMean[ipart]->Scale(normMC,"width"); hHistNegNSigmaMean[ipart]->Scale(normMC,"width"); } //////////////////////////////Prim/All Sec/All SecStr/All TH1F *hPrimPos[3]; TH1F *hPrimNeg[3]; TH1F *hSecPos[3]; TH1F *hSecNeg[3]; TH1F *hSecStrPos[3]; TH1F *hSecStrNeg[3]; TH1F *hAllPos[3]; TH1F *hAllNeg[3]; TH1F *hAllSecPos[3]; TH1F *hAllSecNeg[3]; for(Int_t ipart=0;ipart<=2;ipart++){ hPrimPos[ipart]=(TH1F*)cOutputMC->FindObject(Form("fHistPrimMCposReco%i",ipart)); hPrimNeg[ipart]=(TH1F*)cOutputMC->FindObject(Form("fHistPrimMCnegReco%i",ipart)); hSecPos[ipart]=(TH1F*)cOutputMC->FindObject(Form("fHistSecMatMCposReco%i",ipart)); hSecNeg[ipart]=(TH1F*)cOutputMC->FindObject(Form("fHistSecMatMCnegReco%i",ipart)); hSecStrPos[ipart]=(TH1F*)cOutputMC->FindObject(Form("fHistSecStrMCposReco%i",ipart)); hSecStrNeg[ipart]=(TH1F*)cOutputMC->FindObject(Form("fHistSecStrMCnegReco%i",ipart)); hAllSecPos[ipart]=(TH1F*)hSecPos[ipart]->Clone(Form("hAllSecPos%i",ipart)); hAllSecPos[ipart]->Add(hSecStrPos[ipart]); hAllSecNeg[ipart]=(TH1F*)hSecNeg[ipart]->Clone(Form("hAllSecNeg%i",ipart)); hAllSecNeg[ipart]->Add(hSecStrNeg[ipart]); hAllPos[ipart]=(TH1F*)hPrimPos[ipart]->Clone(Form("hAllPos%i",ipart)); hAllPos[ipart]->Add(hSecPos[ipart]); hAllPos[ipart]->Add(hSecStrPos[ipart]); hAllNeg[ipart]=(TH1F*)hPrimNeg[ipart]->Clone(Form("hAllNeg%i",ipart)); hAllNeg[ipart]->Add(hSecNeg[ipart]); hAllNeg[ipart]->Add(hSecStrNeg[ipart]); hPrimPos[ipart]->Divide(hAllPos[ipart]); hSecPos[ipart]->Divide(hAllPos[ipart]); hSecStrPos[ipart]->Divide(hAllPos[ipart]); hPrimNeg[ipart]->Divide(hAllNeg[ipart]); hSecNeg[ipart]->Divide(hAllNeg[ipart]); hSecStrNeg[ipart]->Divide(hAllNeg[ipart]); hAllSecPos[ipart]->Divide(hAllPos[ipart]); hAllSecNeg[ipart]->Divide(hAllNeg[ipart]); for(Int_t binnum=1;binnum<=hAllSecNeg[ipart]->GetNbinsX();binnum++){ hAllSecPos[ipart]->SetBinContent(binnum,1-hAllSecPos[ipart]->GetBinContent(binnum)); hAllSecNeg[ipart]->SetBinContent(binnum,1-hAllSecNeg[ipart]->GetBinContent(binnum)); } } ///////////////////////////////////////////// TFile *outMC2=new TFile(foutMC.Data(),"update"); TList *lMC=new TList(); lMC->SetOwner(); lMC->SetName(Form("MC_Mult%ito%i",lowmult,upmult)); for(Int_t ipart=0;ipart<=2;ipart++){ lMC->Add(hCorrFactPos[ipart]); lMC->Add(hCorrFactNeg[ipart]); lMC->Add(hCorrFactPosMean[ipart]); lMC->Add(hCorrFactNegMean[ipart]); lMC->Add(hEffPos[ipart]); lMC->Add(hEffNeg[ipart]); lMC->Add(hEffPosMean[ipart]); lMC->Add(hEffNegMean[ipart]); lMC->Add(hHistPosNSigma[ipart]); lMC->Add(hHistNegNSigma[ipart]); lMC->Add(hHistPosNSigmaMean[ipart]); lMC->Add(hHistNegNSigmaMean[ipart]); lMC->Add(hPrimPos[ipart]); lMC->Add(hPrimNeg[ipart]); lMC->Add(hSecPos[ipart]); lMC->Add(hSecNeg[ipart]); lMC->Add(hSecStrPos[ipart]); lMC->Add(hSecStrNeg[ipart]); lMC->Add(hAllSecPos[ipart]); lMC->Add(hAllSecNeg[ipart]); } lMC->Write(Form("MC_Mult%ito%i",lowmult,upmult),1); outMC2->Close(); delete outMC2; TString lnameDATA=Form("clistITSsaMult%ito%i",lowmult,upmult); Printf("\n\n------------------ READING DATA %s -------------------\n",lnameDATA.Data()); TFile *finDATA = new TFile(fnameDATA.Data()); TDirectory *dirFileDATA=(TDirectory*)finDATA->Get("PWG2SpectraITSsa"); TList *cOutputDATA = (TList*)dirFileDATA->Get(lnameDATA.Data()); for(Int_t ipart=0;ipart<=2;ipart++){ hHistPosNSigmaDATA[ipart]=(TH1F*)cOutputDATA->FindObject(Form("hHistPosNSigma%i",ipart)); hHistNegNSigmaDATA[ipart]=(TH1F*)cOutputDATA->FindObject(Form("hHistNegNSigma%i",ipart)); hHistPosNSigmaMeanDATA[ipart]=(TH1F*)cOutputDATA->FindObject(Form("hHistPosNSigmaMean%i",ipart)); hHistNegNSigmaMeanDATA[ipart]=(TH1F*)cOutputDATA->FindObject(Form("hHistNegNSigmaMean%i",ipart)); hITSsaPos[ipart]=(TH1F*)hHistPosNSigmaDATA[ipart]->Clone(Form("hITSsaPos%i",ipart)); hITSsaNeg[ipart]=(TH1F*)hHistNegNSigmaDATA[ipart]->Clone(Form("hITSsaNeg%i",ipart)); hITSsaPosMean[ipart]=(TH1F*)hHistPosNSigmaMeanDATA[ipart]->Clone(Form("hITSsaPosAsymm%i",ipart)); hITSsaNegMean[ipart]=(TH1F*)hHistNegNSigmaMeanDATA[ipart]->Clone(Form("hITSsaNegAsymm%i",ipart)); hITSsaRawPos[ipart]=(TH1F*)hHistPosNSigmaDATA[ipart]->Clone(Form("hITSsaRawPos%i",ipart)); hITSsaRawNeg[ipart]=(TH1F*)hHistNegNSigmaDATA[ipart]->Clone(Form("hITSsaRawNeg%i",ipart)); hITSsaRawPosMean[ipart]=(TH1F*)hHistPosNSigmaMeanDATA[ipart]->Clone(Form("hITSsaRawPosAsymm%i",ipart)); hITSsaRawNegMean[ipart]=(TH1F*)hHistNegNSigmaMeanDATA[ipart]->Clone(Form("hITSsaRawNegAsymm%i",ipart)); hITSsaPos[ipart]->Sumw2(); hITSsaNeg[ipart]->Sumw2(); hITSsaPosMean[ipart]->Sumw2(); hITSsaNegMean[ipart]->Sumw2(); hITSsaRawPos[ipart]->Sumw2(); hITSsaRawNeg[ipart]->Sumw2(); hITSsaRawPosMean[ipart]->Sumw2(); hITSsaRawNegMean[ipart]->Sumw2(); hITSsaPos[ipart]->Divide(hCorrFactPos[ipart]); hITSsaNeg[ipart]->Divide(hCorrFactNeg[ipart]); hITSsaPosMean[ipart]->Divide(hCorrFactPosMean[ipart]); hITSsaNegMean[ipart]->Divide(hCorrFactNegMean[ipart]); SetDrawAtt(21+ipart,ipart+4,1,ipart+4,1,hITSsaPos[ipart]); SetDrawAtt(25+ipart,ipart+4,1,ipart+4,1,hITSsaNeg[ipart]); SetDrawAtt(21+ipart,ipart+1,1,ipart+1,1,hITSsaPosMean[ipart]); SetDrawAtt(25+ipart,ipart+1,1,ipart+1,1,hITSsaNegMean[ipart]); SetDrawAtt(21+ipart,ipart+4,1,ipart+4,1,hITSsaRawPos[ipart]); SetDrawAtt(25+ipart,ipart+4,1,ipart+4,1,hITSsaRawNeg[ipart]); SetDrawAtt(21+ipart,ipart+1,1,ipart+1,1,hITSsaRawPosMean[ipart]); SetDrawAtt(25+ipart,ipart+1,1,ipart+1,1,hITSsaRawNegMean[ipart]); } if(!CorrectOnlyForEfficiency){ if(DCACorrection){ printf("- Correction from DCA\n"); // Correction factor based on fit to DCA distr for P and Pibar TString fnameDCAPosP=Form("./DCACorr%s_%s_%.0fDCA_PosP_TFraction.root",period.Data(),MCname.Data(),DCAcut); TFile *fDCAPosP= new TFile(fnameDCAPosP.Data()); TH1F * hDCAPosP= (TH1F*)fDCAPosP->Get("hPrimAllDATAMC"); //TH1F * hDCAPosP= (TH1F*)fDCAPosP->Get("hPrimAllDATA"); TString fnameDCANegP=Form("./DCACorr%s_%s_%.0fDCA_NegP_TFraction.root",period.Data(),MCname.Data(),DCAcut); TFile *fDCANegP= new TFile(fnameDCANegP.Data()); TH1F * hDCANegP= (TH1F*)fDCANegP->Get("hPrimAllDATAMC"); //TH1F * hDCANegP= (TH1F*)fDCANegP->Get("hPrimAllDATA"); for(Int_t pbin=0;pbin<=hDCAPosP->GetNbinsX();pbin++)hDCAPosP->SetBinError(pbin,0); for(Int_t pbin=0;pbin<=hDCANegP->GetNbinsX();pbin++)hDCANegP->SetBinError(pbin,0); hITSsaPos[2]->Multiply(hDCAPosP); hITSsaNeg[2]->Multiply(hDCANegP); hITSsaPosMean[2]->Multiply(hDCAPosP); hITSsaNegMean[2]->Multiply(hDCANegP); hDCAPosP->Draw(""); hDCANegP->Draw("same"); } else{ Printf("NO DCA correction for protons"); } if(GFCorrection){ printf("- Geant/FLUKA correction\n"); //GeantFluka correction for Pi and K TString fnameGeanFlukaPi="$ALICE_ROOT/PWGLF/SPECTRA/PiKaPr/ITSsa/RootFilesGeantFlukaCorrection/correctionForCrossSection.211.root"; TFile *fGeanFlukaPi= new TFile(fnameGeanFlukaPi.Data()); TH1F *hGeantFlukaPiPos=(TH1F*)fGeanFlukaPi->Get("gHistCorrectionForCrossSectionParticles"); TH1F *hGeantFlukaPiNeg=(TH1F*)fGeanFlukaPi->Get("gHistCorrectionForCrossSectionAntiParticles"); for(Int_t binPi=0;binPi<=hITSsaPos[0]->GetNbinsX();binPi++){ Float_t FlukaCorrPiPos=hGeantFlukaPiPos->GetBinContent(hGeantFlukaPiPos->FindBin(hITSsaPos[0]->GetBinCenter(binPi))); Float_t FlukaCorrPiNeg=hGeantFlukaPiNeg->GetBinContent(hGeantFlukaPiNeg->FindBin(hITSsaNeg[0]->GetBinCenter(binPi))); hITSsaPos[0]->SetBinContent(binPi,hITSsaPos[0]->GetBinContent(binPi)*FlukaCorrPiPos); hITSsaPos[0]->SetBinError(binPi,hITSsaPos[0]->GetBinError(binPi)*FlukaCorrPiPos); hITSsaNeg[0]->SetBinContent(binPi,hITSsaNeg[0]->GetBinContent(binPi)*FlukaCorrPiNeg); hITSsaNeg[0]->SetBinError(binPi,hITSsaNeg[0]->GetBinError(binPi)*FlukaCorrPiNeg); hITSsaPosMean[0]->SetBinContent(binPi,hITSsaPosMean[0]->GetBinContent(binPi)*FlukaCorrPiPos); hITSsaPosMean[0]->SetBinError(binPi,hITSsaPosMean[0]->GetBinError(binPi)*FlukaCorrPiPos); hITSsaNegMean[0]->SetBinContent(binPi,hITSsaNegMean[0]->GetBinContent(binPi)*FlukaCorrPiNeg); hITSsaNegMean[0]->SetBinError(binPi,hITSsaNegMean[0]->GetBinError(binPi)*FlukaCorrPiNeg); } TString fnameGeanFlukaK="$ALICE_ROOT/PWGLF/SPECTRA/PiKaPr/ITSsa/RootFilesGeantFlukaCorrection/correctionForCrossSection.321.root"; TFile *fGeanFlukaK= new TFile(fnameGeanFlukaK.Data()); TH1F *hGeantFlukaKPos=(TH1F*)fGeanFlukaK->Get("gHistCorrectionForCrossSectionParticles"); TH1F *hGeantFlukaKNeg=(TH1F*)fGeanFlukaK->Get("gHistCorrectionForCrossSectionAntiParticles"); for(Int_t binK=0;binK<=hITSsaPos[1]->GetNbinsX();binK++){ Float_t FlukaCorrKPos=hGeantFlukaKPos->GetBinContent(hGeantFlukaKPos->FindBin(hITSsaPos[1]->GetBinCenter(binK))); Float_t FlukaCorrKNeg=hGeantFlukaKNeg->GetBinContent(hGeantFlukaKNeg->FindBin(hITSsaNeg[1]->GetBinCenter(binK))); hITSsaPos[1]->SetBinContent(binK,hITSsaPos[1]->GetBinContent(binK)*FlukaCorrKPos); hITSsaNeg[1]->SetBinContent(binK,hITSsaNeg[1]->GetBinContent(binK)*FlukaCorrKNeg); hITSsaPos[1]->SetBinError(binK,hITSsaPos[1]->GetBinError(binK)*FlukaCorrKPos); hITSsaNeg[1]->SetBinError(binK,hITSsaNeg[1]->GetBinError(binK)*FlukaCorrKNeg); hITSsaPosMean[1]->SetBinContent(binK,hITSsaPosMean[1]->GetBinContent(binK)*FlukaCorrKPos); hITSsaNegMean[1]->SetBinContent(binK,hITSsaNegMean[1]->GetBinContent(binK)*FlukaCorrKNeg); hITSsaPosMean[1]->SetBinError(binK,hITSsaPosMean[1]->GetBinError(binK)*FlukaCorrKPos); hITSsaNegMean[1]->SetBinError(binK,hITSsaNegMean[1]->GetBinError(binK)*FlukaCorrKNeg); } //Geant Fluka for P // ITS specific file for protons/antiprotons Int_t kNCharge=2; Int_t kPos=0; Int_t kNeg=1; TFile* fITS = new TFile ("$ALICE_ROOT/PWGLF/SPECTRA/PiKaPr/ITSsa/RootFilesGeantFlukaCorrection/correctionForCrossSectionITS_20100719.root"); // TH2D * hCorrFlukaITS[kNCharge]; TH2D * hCorrFlukaITS[2]; hCorrFlukaITS[kPos] = (TH2D*)fITS->Get("gHistCorrectionForCrossSectionProtons"); hCorrFlukaITS[kNeg] = (TH2D*)fITS->Get("gHistCorrectionForCrossSectionAntiProtons"); for(Int_t icharge = 0; icharge < kNCharge; icharge++){ Int_t nbins = hITSsaPos[2]->GetNbinsX(); Int_t nbinsy=hCorrFlukaITS[icharge]->GetNbinsY(); //for(Int_t binP=0;binP<=hITSsaPos[2]->GetNbinsX();binP++){ for(Int_t ibin = 0; ibin < nbins; ibin++){ Float_t pt = hITSsaPos[2]->GetBinCenter(ibin); Float_t minPtCorrection = hCorrFlukaITS[icharge]->GetYaxis()->GetBinLowEdge(1); Float_t maxPtCorrection = hCorrFlukaITS[icharge]->GetYaxis()->GetBinLowEdge(nbinsy+1); if (pt < minPtCorrection) pt = minPtCorrection+0.0001; if (pt > maxPtCorrection) pt = maxPtCorrection; Float_t correction = hCorrFlukaITS[icharge]->GetBinContent(1,hCorrFlukaITS[icharge]->GetYaxis()->FindBin(pt)); cout<SetBinContent(ibin,hITSsaPos[2]->GetBinContent(ibin)*correction); hITSsaPos[2]->SetBinError(ibin,hITSsaPos[2]->GetBinError (ibin)*correction); hITSsaPosMean[2]->SetBinContent(ibin,hITSsaPosMean[2]->GetBinContent(ibin)*correction); hITSsaPosMean[2]->SetBinError(ibin,hITSsaPosMean[2]->GetBinError (ibin)*correction); }else if (hITSsaPos[2]->GetBinContent(ibin) > 0) { // If we are skipping a non-empty bin, we notify the user cout << "Fluka/GEANT: Not correcting bin "<GetBinContent(ibin) << endl; } } if(icharge==1){ if (correction != 0) {// If the bin is empty this is a 0 hITSsaNeg[2]->SetBinContent(ibin,hITSsaNeg[2]->GetBinContent(ibin)*correction); hITSsaNeg[2]->SetBinError(ibin,hITSsaNeg[2]->GetBinError (ibin)*correction); hITSsaNegMean[2]->SetBinContent(ibin,hITSsaNegMean[2]->GetBinContent(ibin)*correction); hITSsaNegMean[2]->SetBinError(ibin,hITSsaNegMean[2]->GetBinError (ibin)*correction); }else if (hITSsaNeg[2]->GetBinContent(ibin) > 0) { // If we are skipping a non-empty bin, we notify the user cout << "Fluka/GEANT: Not correcting bin "<GetBinContent(ibin) << endl; } } } } }else{ Printf("SPECTRA ARE NOT CORRECTED FOR GEANT/FLUKA"); } }else{ Printf("SPECTRA ARE NOT CORRECTED FOR DCA FIT + GEANT/FLUKA"); } Float_t norm; TH1F *fHistNEvents =0x0; if(MarekNorm){ Printf("Normalization to the number of events with good vertex"); TFile *finMAREK = new TFile(fnameDATA.Data()); TDirectory *dirFileMAREK=(TDirectory*)finMAREK->Get("PWG2SpectraITSTPC"); if(!dirFileMAREK)Printf("!dirFileMAREK"); TString lnameMAREK=Form("outputlow%dup%dHI0",lowmult,upmult); TList *cOutputMAREK = (TList*)dirFileMAREK->Get(lnameMAREK.Data()); if(!cOutputMAREK)Printf("!cOutputMAREK"); TH1F *StatsHistMAREK=(TH1F*)cOutputMAREK->FindObject("StatsHist"); norm=(Float_t)1/StatsHistMAREK->GetBinContent(3); } else{ Printf("Normalization to the number of events after phys sel"); fHistNEvents = (TH1F*)cOutputDATA->FindObject("fHistNEvents"); norm=(Float_t)1/fHistNEvents->GetBinContent(fHistNEvents->FindBin(1.)); } if(NormalizeData)printf("- Normalization (NEvents): %.0f \n",1/norm); else printf("- Normalization (NEvents): %.0f !!!!!!!SPECTRA ARE NOT NORMALIZED!!!!!!\n",fHistNEvents->GetBinContent(fHistNEvents->FindBin(1.))); for(Int_t ipart=0;ipart<=2;ipart++){ if(NormalizeData){ hITSsaPos[ipart]->Scale(norm,"width"); hITSsaNeg[ipart]->Scale(norm,"width"); hITSsaPosMean[ipart]->Scale(norm,"width"); hITSsaNegMean[ipart]->Scale(norm,"width"); hITSsaRawPos[ipart]->Scale(norm,"width"); hITSsaRawNeg[ipart]->Scale(norm,"width"); hITSsaRawPosMean[ipart]->Scale(norm,"width"); hITSsaRawNegMean[ipart]->Scale(norm,"width"); } else{ hITSsaPos[ipart]->Scale(1,"width"); hITSsaNeg[ipart]->Scale(1,"width"); hITSsaPosMean[ipart]->Scale(1,"width"); hITSsaNegMean[ipart]->Scale(1,"width"); hITSsaRawPos[ipart]->Scale(1,"width"); hITSsaRawNeg[ipart]->Scale(1,"width"); hITSsaRawPosMean[ipart]->Scale(1,"width"); hITSsaRawNegMean[ipart]->Scale(1,"width"); } if(NormalizeToINEL){ Float_t INEL=0.86; printf("Normalization to INEL : %.2f \n",INEL); hITSsaPos[ipart]->Scale(INEL,""); hITSsaNeg[ipart]->Scale(INEL,""); hITSsaPosMean[ipart]->Scale(INEL,""); hITSsaNegMean[ipart]->Scale(INEL,""); hITSsaRawPos[ipart]->Scale(INEL,""); hITSsaRawNeg[ipart]->Scale(INEL,""); hITSsaRawPosMean[ipart]->Scale(INEL,""); hITSsaRawNegMean[ipart]->Scale(INEL,""); } else printf("Normalization to INEL ignored \n"); hITSsaPos[ipart]->SetMinimum(0.00001); hITSsaNeg[ipart]->SetMinimum(0.00001); hITSsaPosMean[ipart]->SetMinimum(0.00001); hITSsaNegMean[ipart]->SetMinimum(0.00001); hITSsaRawPos[ipart]->SetMinimum(0.00001); hITSsaRawNeg[ipart]->SetMinimum(0.00001); hITSsaRawPosMean[ipart]->SetMinimum(0.00001); hITSsaRawNegMean[ipart]->SetMinimum(0.00001); hITSsaPos[ipart]->GetXaxis()->SetTitle("Pt [GeV/c]"); hITSsaNeg[ipart]->GetXaxis()->SetTitle("Pt [GeV/c]"); hITSsaPosMean[ipart]->GetXaxis()->SetTitle("Pt [GeV/c]"); hITSsaNegMean[ipart]->GetXaxis()->SetTitle("Pt [GeV/c]"); hITSsaRawPos[ipart]->GetXaxis()->SetTitle("Pt [GeV/c]"); hITSsaRawNeg[ipart]->GetXaxis()->SetTitle("Pt [GeV/c]"); hITSsaRawPosMean[ipart]->GetXaxis()->SetTitle("Pt [GeV/c]"); hITSsaRawNegMean[ipart]->GetXaxis()->SetTitle("Pt [GeV/c]"); hITSsaPos[ipart]->SetTitle(Form("ITSsa NSigma Symm Pos%i",ipart)); hITSsaNeg[ipart]->SetTitle(Form("ITSsa NSigma Symm Neg%i",ipart)); hITSsaPosMean[ipart]->SetTitle(Form("ITSsa NSigma Asymm Pos%i",ipart)); hITSsaNegMean[ipart]->SetTitle(Form("ITSsa NSigma Asymm Neg%i",ipart)); hITSsaRawPos[ipart]->SetTitle(Form("ITSsaRaw NSigma Symm Pos%i",ipart)); hITSsaRawNeg[ipart]->SetTitle(Form("ITSsaRaw NSigma Symm Neg%i",ipart)); hITSsaRawPosMean[ipart]->SetTitle(Form("ITSsaRaw NSigma Asymm Pos%i",ipart)); hITSsaRawNegMean[ipart]->SetTitle(Form("ITSsaRaw NSigma Asymm Neg%i",ipart)); ResetOutOfRange(hITSsaPos[ipart],ipart,lowRange,upRange); ResetOutOfRange(hITSsaNeg[ipart],ipart,lowRange,upRange); ResetOutOfRange(hITSsaPosMean[ipart],ipart,lowRange,upRange); ResetOutOfRange(hITSsaNegMean[ipart],ipart,lowRange,upRange); } TH1F *hSystematicsITSsaPos[3]; TH1F *hSystematicsITSsaNeg[3]; TH1F *hSystematicsITSsaPosMean[3]; TH1F *hSystematicsITSsaNegMean[3]; if(MakeSystErr){ printf("- making Systematic Error\n"); //preliminary systematic error TFile *fsys = new TFile("RootFilesSystError/ITSsa-systematics-20101014.root"); //fsys->Print("all"); //cout<GetSize()<Get("hSystTotPosPion"); hSystNeg[0]=(TH1F*)fsys->Get("hSystTotNegPion"); hSystPos[1]=(TH1F*)fsys->Get("hSystTotPosKaon"); hSystNeg[1]=(TH1F*)fsys->Get("hSystTotNegKaon"); hSystPos[2]=(TH1F*)fsys->Get("hSystTotPosProton"); hSystNeg[2]=(TH1F*)fsys->Get("hSystTotNegProton"); for(Int_t ipart=0;ipart<=2;ipart++){ hSystematicsITSsaPos[ipart]=(TH1F*)hITSsaPos[ipart]->Clone(Form("hSystematicsITSsaPos%i",ipart)); hSystematicsITSsaNeg[ipart]=(TH1F*)hITSsaNeg[ipart]->Clone(Form("hSystematicsITSsaNeg%i",ipart)); hSystematicsITSsaPosMean[ipart]=(TH1F*)hITSsaPosMean[ipart]->Clone(Form("hSystematicsITSsaPosAsymm%i",ipart)); hSystematicsITSsaNegMean[ipart]=(TH1F*)hITSsaNegMean[ipart]->Clone(Form("hSystematicsITSsaNegAsymm%i",ipart)); for(Int_t ibin=0;ibin<=hSystematicsITSsaPos[ipart]->GetNbinsX();ibin++){ Float_t syserr=hSystPos[ipart]->GetBinContent(hSystPos[ipart]->FindBin(hSystematicsITSsaPos[ipart]->GetBinCenter(ibin))); hSystematicsITSsaPos[ipart]->SetBinError(ibin,syserr*hSystematicsITSsaPos[ipart]->GetBinContent(ibin)); hSystematicsITSsaPosMean[ipart]->SetBinError(ibin,syserr*hSystematicsITSsaPosMean[ipart]->GetBinContent(ibin)); } for(Int_t ibin=0;ibin<=hSystematicsITSsaNeg[ipart]->GetNbinsX();ibin++){ Float_t syserr=hSystNeg[ipart]->GetBinContent(hSystNeg[ipart]->FindBin(hSystematicsITSsaNeg[ipart]->GetBinCenter(ibin))); hSystematicsITSsaNeg[ipart]->SetBinError(ibin,syserr*hSystematicsITSsaNeg[ipart]->GetBinContent(ibin)); hSystematicsITSsaNegMean[ipart]->SetBinError(ibin,syserr*hSystematicsITSsaNegMean[ipart]->GetBinContent(ibin)); } } } TCanvas *cSpectraSymm=new TCanvas("cSpectraSymm","cSpectraSymm"); cSpectraSymm->SetGridy(); for(Int_t ipart=0;ipart<=2;ipart++){ if(ipart==0)hITSsaPos[ipart]->DrawCopy("P"); else hITSsaPos[ipart]->DrawCopy("PSAME"); hITSsaNeg[ipart]->DrawCopy("PSAME"); } cSpectraSymm->BuildLegend(); TCanvas *cSpectraAsymm=new TCanvas("cSpectraAsymm","cSpectraAsymm"); cSpectraAsymm->SetGridy(); for(Int_t ipart=0;ipart<=2;ipart++){ if(ipart==0)hITSsaPosMean[ipart]->DrawCopy("P"); else hITSsaPosMean[ipart]->DrawCopy("PSAME"); hITSsaNegMean[ipart]->DrawCopy("PSAME"); } cSpectraAsymm->BuildLegend(); /////////////////////////// SCALING SPECTRA FOR TRACKING EFFICIENCY !!!!!!!!!!!!!!!!!!!!!!!!!!!!! Float_t ScalingFactor=1.015; Printf("SCALING FACTOR: %f",ScalingFactor); for(Int_t ipart=0;ipart<=2;ipart++){ hITSsaPosMean[ipart]->Scale(ScalingFactor); Printf("Scaling %s by %f",hITSsaPosMean[ipart]->GetName(),ScalingFactor); hITSsaNegMean[ipart]->Scale(ScalingFactor); Printf("Scaling %s by %f",hITSsaNegMean[ipart]->GetName(),ScalingFactor); hITSsaPos[ipart]->Scale(ScalingFactor); Printf("Scaling %s by %f",hITSsaPos[ipart]->GetName(),ScalingFactor); hITSsaNeg[ipart]->Scale(ScalingFactor); Printf("Scaling %s by %f",hITSsaNeg[ipart]->GetName(),ScalingFactor); } TFile *outDATA2=new TFile(foutDATA.Data(),"update"); TList *lDATA=new TList(); lDATA->SetOwner(); lDATA->SetName(Form("DATA_Mult%ito%i",lowmult,upmult)); if(SaveOnlyAsymm){ for(Int_t ipart=0;ipart<=2;ipart++) lDATA->Add(hITSsaPosMean[ipart]); for(Int_t ipart=0;ipart<=2;ipart++) lDATA->Add(hITSsaNegMean[ipart]); }else{ for(Int_t ipart=0;ipart<=2;ipart++){ lDATA->Add(fHistPrimMCposBefEvSel[ipart]); lDATA->Add(fHistPrimMCnegBefEvSel[ipart]); lDATA->Add(hHistPosNSigmaPrimMean[ipart]); lDATA->Add(hHistNegNSigmaPrimMean[ipart]); lDATA->Add(hHistPosNSigmaPrimMCMean[ipart]); lDATA->Add(hHistNegNSigmaPrimMCMean[ipart]); lDATA->Add(hITSsaPos[ipart]); lDATA->Add(hITSsaNeg[ipart]); lDATA->Add(hITSsaPosMean[ipart]); lDATA->Add(hITSsaNegMean[ipart]); lDATA->Add(hITSsaRawPos[ipart]); lDATA->Add(hITSsaRawNeg[ipart]); lDATA->Add(hITSsaRawPosMean[ipart]); lDATA->Add(hITSsaRawNegMean[ipart]); } if(MakeSystErr){ for(Int_t ipart=0;ipart<=2;ipart++){ lDATA->Add(hSystematicsITSsaPos[ipart]); lDATA->Add(hSystematicsITSsaNeg[ipart]); lDATA->Add( hSystematicsITSsaPosMean[ipart]); lDATA->Add( hSystematicsITSsaNegMean[ipart]); } } } lDATA->Write(Form("DATA_Mult%ito%i",lowmult,upmult),1); outDATA2->Close(); delete outDATA2; RatioPlot(hITSsaNeg,hITSsaPos,"Neg","Pos","Symm NSigma",Low,Up); RatioPlot(hITSsaNegMean,hITSsaPosMean,"Neg","Pos","Assymm NSigma",Low,Up); RatioPlot(hITSsaPos,hITSsaPosMean,"Symm","Asymm","Positive",Low,Up); RatioPlot(hITSsaNeg,hITSsaNegMean,"Symm","Asymm","Negative",Low,Up); } //end main void ResetOutOfRange(TH1F *histo, Int_t ipart, Double_t lowRange[3], Double_t upRange[3]){ // set to -1 the bin contents out of the selcted pt range for(Int_t ibin=0;ibin<=histo->GetNbinsX();ibin++){ if(histo->GetBinCenter(ibin)GetBinCenter(ibin)>upRange[ipart]) histo->SetBinContent(ibin,-1); } } void RatioPlot(TH1F **num,TH1F **den,TString t1,TString t2,TString opt,Double_t Low[],Double_t Up[]) { gROOT->SetStyle("Plain"); gStyle->SetOptTitle(0); TH1F *Num[3]; TString title=Form("%s/%s - %s",t1.Data(),t2.Data(),opt.Data()); TCanvas *c=new TCanvas(title.Data(),title.Data()); c->Divide(3,2); for(Int_t ipart=0;ipart<=2;ipart++){ num[ipart]->GetXaxis()->SetRangeUser(Low[ipart],Up[ipart]-0.00001); num[ipart]->SetMarkerColor(2); num[ipart]->SetLineColor(2); num[ipart]->SetStats(kFALSE); den[ipart]->GetXaxis()->SetRangeUser(Low[ipart],Up[ipart]-0.00001); den[ipart]->SetMarkerColor(1); den[ipart]->SetLineColor(1); den[ipart]->SetStats(kFALSE); c->cd(ipart+1); gPad->SetGridy(); //gPad->SetLogy(); num[ipart]->Draw(""); den[ipart]->Draw("same"); TPaveText *tpave=new TPaveText(0.1,0.2,0.5,0.29,"brNDC"); tpave->SetBorderSize(0); tpave->SetFillStyle(0); tpave->SetFillColor(0); tpave->SetTextColor(2); tpave->SetTextSize(.04); TText *txt1=tpave->AddText(t1.Data()); txt1->SetTextFont(62); txt1->SetTextColor(2); TText *txt2=tpave->AddText(t2.Data()); txt2->SetTextFont(62); txt2->SetTextColor(1); tpave->Draw(); Num[ipart]=(TH1F*)num[ipart]->Clone(title.Data()); Num[ipart]->SetTitle(title.Data()); Num[ipart]->Divide(den[ipart]); Num[ipart]->GetXaxis()->SetRangeUser(Low[ipart],Up[ipart]-0.00001); Num[ipart]->SetMarkerColor(4); Num[ipart]->SetLineColor(4); Num[ipart]->SetMaximum(1.2); Num[ipart]->SetMinimum(.8); c->cd(ipart+4); gPad->SetGridy(); Num[ipart]->SetStats(kFALSE); Num[ipart]->Draw(); TPaveText *tpave_1=new TPaveText(0.3,0.7,0.7,0.99,"brNDC"); tpave_1->SetBorderSize(0); tpave_1->SetFillStyle(0); tpave_1->SetFillColor(0); tpave_1->SetTextColor(2); tpave_1->SetTextSize(.04); TText *txt1_1=tpave_1->AddText(title.Data()); txt1_1->SetTextFont(62); tpave_1->Draw(); // TLine line = TLine(Low[ipart],1,Up[ipart],1); // line.SetLineColor(2); // line.SetLineStyle(2); // line.SetLineWidth(2); // line.DrawClone("same"); } } void SetDrawAtt(Int_t markerstyle,Int_t markercolor,Int_t markersize,Int_t linecolor,Int_t linewidth,TH1 *h1) { h1->SetMarkerStyle(markerstyle); h1->SetMarkerColor(markercolor); h1->SetMarkerSize(markersize); h1->SetLineColor(linecolor); h1->SetLineWidth(linewidth); }