void compareTPCTOF(Int_t icentr,Int_t spec,Int_t arm,Float_t pTh,Int_t addbin){ LoadLib(); Float_t ptMaxFit[8] = {20,0.7,0.55,1.2,2,2,2,2}; TProfile *pTPC = extractFlowVZEROsingle(icentr,spec,arm,0,pTh,addbin,"TPC",0,0,-1,-1+2*(spec!=3)); // TPC && !TOF (TPC PID) TProfile *pTPC2 = extractFlowVZEROsingle(icentr,spec,arm,0,pTh,addbin,"TPCextra",2,2,-1,-1+2*(spec!=3)); //TPC && TOF (TPC PID) TProfile *pTOF = extractFlowVZEROsingle(icentr,spec,arm,0,pTh,addbin,"TOF",1,1,-1,-1+2*(spec!=3)); //TPC && TOF (TPC&TOF PID) if(spec > 0) pTPC->Add(pTPC2); else pTPC->Add(pTOF); char name[100]; snprintf(name,100,"NUO_%i",spec); hNUO[spec] = pTPC->ProjectionX(name); hNUO[spec]->Add(pTOF,-1); if(spec && hNUO[0]) hNUO[spec]->Add(hNUO[0],-1); if(! kCleanMemory){ new TCanvas(); pTPC->Draw(); pTOF->Draw("SAME"); new TCanvas(); pTPC->SetLineColor(1); pTOF->SetLineColor(2); } hNUO[spec]->Draw(); if(kCleanMemory){ if(pTPC) delete pTPC; if(pTPC2) delete pTPC2; if(pTOF) delete pTOF; } }
void FillVZEROEPOADBFull(const char* filename = "AOD083.txt", Bool_t mbOnly = kFALSE) { gSystem->Load("libCore"); gSystem->Load("libTree"); gSystem->Load("libGeom"); gSystem->Load("libVMC"); gSystem->Load("libPhysics"); gSystem->Load("libMinuit"); gSystem->Load("libSTEERBase"); gSystem->Load("libESD"); gSystem->Load("libAOD"); gSystem->Load("libANALYSIS"); gSystem->Load("libANALYSISalice"); gSystem->Load("libOADB"); AliOADBContainer * oadbCont = new AliOADBContainer("vzeroEP"); { TList *defaultList = new TList; defaultList->SetName("Default"); TProfile *profHisto = NULL; TFile fInputDefault("minbias/VZERO.EPFlatenning.PS.LHC11h_AOD083_000170162.root"); TList *inputList = (TList*)fInputDefault.Get("coutput"); for(Int_t i = 0; i < 11; ++i) { profHisto = (TProfile*)inputList->FindObject(Form("fX2_%d",i))->Clone(Form("fX2_%d",i)); profHisto->SetDirectory(0); defaultList->Add(profHisto); profHisto = (TProfile*)inputList->FindObject(Form("fY2_%d",i))->Clone(Form("fY2_%d",i)); profHisto->SetDirectory(0); defaultList->Add(profHisto); profHisto = (TProfile*)inputList->FindObject(Form("fX2Y2_%d",i))->Clone(Form("fX2Y2_%d",i)); profHisto->SetDirectory(0); defaultList->Add(profHisto); profHisto = (TProfile*)inputList->FindObject(Form("fCos8Psi_%d",i))->Clone(Form("fCos8Psi_%d",i)); profHisto->SetDirectory(0); defaultList->Add(profHisto); } fInputDefault.Close(); oadbCont->AddDefaultObject(defaultList); printf("Run 170162 filled\n"); } { TList *list1 = new TList; TProfile *profHisto = NULL; TFile fInput1("minbias/VZERO.EPFlatenning.PS.LHC11h_AOD083_000169683.root"); TList *inputList = (TList*)fInput1.Get("coutput"); for(Int_t i = 0; i < 11; ++i) { profHisto = (TProfile*)inputList->FindObject(Form("fX2_%d",i))->Clone(Form("fX2_%d",i)); profHisto->SetDirectory(0); list1->Add(profHisto); profHisto = (TProfile*)inputList->FindObject(Form("fY2_%d",i))->Clone(Form("fY2_%d",i)); profHisto->SetDirectory(0); list1->Add(profHisto); profHisto = (TProfile*)inputList->FindObject(Form("fX2Y2_%d",i))->Clone(Form("fX2Y2_%d",i)); profHisto->SetDirectory(0); list1->Add(profHisto); profHisto = (TProfile*)inputList->FindObject(Form("fCos8Psi_%d",i))->Clone(Form("fCos8Psi_%d",i)); profHisto->SetDirectory(0); list1->Add(profHisto); } oadbCont->AppendObject(list1, 169683, 169683); printf("Run 169683 filled\n"); } // loop of over all other runs Int_t runList[500]; ifstream *fruns = new ifstream (filename); if (!*fruns) return; TString strLine; Int_t count = 0; while (strLine.ReadLine(*fruns)) { runList[count++] = strLine.Atoi(); } delete fruns; for(Int_t irun = 0; irun < count; ++irun) { TList *list2 = new TList; TProfile *profHisto = NULL; TFile fInput2(Form("csemi/VZERO.EPFlatenning.PS.LHC11h_AOD083_000%d.root",runList[irun])); TList *inputList = (TList*)fInput2.Get("coutput"); TFile fInput3(Form("cpbi2/VZERO.EPFlatenning.PS.LHC11h_AOD083_000%d.root",runList[irun])); TList *inputListBis = (TList*)fInput3.Get("coutput"); for(Int_t i = 0; i < 11; ++i) { profHisto = (TProfile*)inputList->FindObject(Form("fX2_%d",i))->Clone(Form("fX2_%d",i)); profHisto->SetDirectory(0); Int_t ibin = profHisto->FindBin(62.5); profHisto->SetBinContent(ibin,0); profHisto->SetBinError(ibin,0); profHisto->SetBinEntries(ibin,0); if (mbOnly) { profHisto = (TProfile*)inputListBis->FindObject(Form("fX2_%d",i))->Clone(Form("fX2_%d",i)); profHisto->SetDirectory(0); } else profHisto->Add((TProfile*)inputListBis->FindObject(Form("fX2_%d",i))); list2->Add(profHisto); profHisto = (TProfile*)inputList->FindObject(Form("fY2_%d",i))->Clone(Form("fY2_%d",i)); profHisto->SetDirectory(0); profHisto->SetBinContent(ibin,0); profHisto->SetBinError(ibin,0); profHisto->SetBinEntries(ibin,0); if (mbOnly) { profHisto = (TProfile*)inputListBis->FindObject(Form("fY2_%d",i))->Clone(Form("fY2_%d",i)); profHisto->SetDirectory(0); } else profHisto->Add((TProfile*)inputListBis->FindObject(Form("fY2_%d",i))); list2->Add(profHisto); profHisto = (TProfile*)inputList->FindObject(Form("fX2Y2_%d",i))->Clone(Form("fX2Y2_%d",i)); profHisto->SetDirectory(0); profHisto->SetBinContent(ibin,0); profHisto->SetBinError(ibin,0); profHisto->SetBinEntries(ibin,0); if (mbOnly) { profHisto = (TProfile*)inputListBis->FindObject(Form("fX2Y2_%d",i))->Clone(Form("fX2Y2_%d",i)); profHisto->SetDirectory(0); } else profHisto->Add((TProfile*)inputListBis->FindObject(Form("fX2Y2_%d",i))); list2->Add(profHisto); profHisto = (TProfile*)inputList->FindObject(Form("fCos8Psi_%d",i))->Clone(Form("fCos8Psi_%d",i)); profHisto->SetDirectory(0); profHisto->SetBinContent(ibin,0); profHisto->SetBinError(ibin,0); profHisto->SetBinEntries(ibin,0); if (mbOnly) { profHisto = (TProfile*)inputListBis->FindObject(Form("fCos8Psi_%d",i))->Clone(Form("fCos8Psi_%d",i)); profHisto->SetDirectory(0); } else profHisto->Add((TProfile*)inputListBis->FindObject(Form("fCos8Psi_%d",i))); list2->Add(profHisto); } oadbCont->AppendObject(list2, runList[irun], runList[irun]); printf("Run %d filled\n",runList[irun]); } TString oadbFileName = Form("%s/COMMON/EVENTPLANE/data/vzero.root", AliAnalysisManager::GetOADBPath()); oadbCont->WriteToFile(oadbFileName.Data()); }
TProfile *extractFlowVZEROsingle(Int_t icentr,Int_t spec,Int_t arm,Bool_t isMC,Float_t pTh,Int_t addbin,const char *nameSp,Float_t detMin,Float_t detMax,Int_t chMin,Int_t chMax){ LoadLib(); pTh += 0.00001; // NUA correction currently are missing char name[100]; char stringa[200]; snprintf(name,100,"AnalysisResults.root"); if(!fo) fo = new TFile(name); snprintf(name,100,"contVZEROv%i",arm); TList *cont = (TList *) fo->Get(name); cont->ls(); Float_t xMin[5] = {icentr/*centrality bin*/,chMin/*charge*/,pTh/*prob*/,-TMath::Pi()/arm/*Psi*/,detMin/*PID mask*/}; Float_t xMax[5] = {icentr+addbin,chMax,1.0,TMath::Pi()/arm,detMax}; cont->ls(); TProfile *p1 = cont->At(2); TProfile *p2 = cont->At(3); TProfile *p3 = cont->At(4); TH2F *hPsi2DA = cont->At(5); TH2F *hPsi2DC = cont->At(6); TH1D *hPsiA = hPsi2DA->ProjectionY("PsiA",icentr+1,icentr+addbin+1); TH1D *hPsiC = hPsi2DC->ProjectionY("PsiC",icentr+1,icentr+addbin+1); if(!fPsi) fPsi = new TF1("fPsi","pol0",-TMath::Pi()/arm,TMath::Pi()/arm); hPsiA->Fit(fPsi,"0"); Float_t offsetA = fPsi->GetParameter(0); hPsiC->Fit(fPsi,"0"); Float_t offsetC = fPsi->GetParameter(0); Int_t nbinPsi = hPsiA->GetNbinsX(); Float_t *NUAcorrA = new Float_t[nbinPsi]; Float_t *NUAcorrC = new Float_t[nbinPsi]; for(Int_t i=0;i < nbinPsi;i++){ NUAcorrA[i] = offsetA/(hPsiA->GetBinContent(i+1)); NUAcorrC[i] = offsetC/(hPsiC->GetBinContent(i+1)); } Float_t res1=0,res2=0,res3=0; Float_t eres1=0,eres2=0,eres3=0; for(Int_t i = icentr; i <= icentr+addbin;i++){ if(p1->GetBinError(i+1)){ eres1 += 1./p1->GetBinError(i+1)/p1->GetBinError(i+1); res1 += p1->GetBinContent(i+1)/p1->GetBinError(i+1)/p1->GetBinError(i+1); } if(p2->GetBinError(i+1)){ eres2 += 1./p2->GetBinError(i+1)/p2->GetBinError(i+1); res2 += p2->GetBinContent(i+1)/p2->GetBinError(i+1)/p2->GetBinError(i+1); } if(p3->GetBinError(i+1)){ eres3 += 1./p3->GetBinError(i+1)/p3->GetBinError(i+1); res3 += p3->GetBinContent(i+1)/p3->GetBinError(i+1)/p3->GetBinError(i+1); } } res1 /= eres1; res2 /= eres2; res3 /= eres3; eres1 = sqrt(1./eres1); eres2 = sqrt(1./eres2); eres3 = sqrt(1./eres3); AliFlowVZEROResults *a = (AliFlowVZEROResults *) cont->At(0); AliFlowVZEROResults *b = (AliFlowVZEROResults *) cont->At(1); TProfile *pp,*pp2; if(kNUAcorr){ // with NUA corrections pp = a->GetV2reweight(spec,xMin,xMax,3,NUAcorrA); pp2 = b->GetV2reweight(spec,xMin,xMax,3,NUAcorrC); } else{ pp = a->GetV2(spec,xMin,xMax); pp2 = b->GetV2(spec,xMin,xMax); } Float_t scaling = sqrt(res1*res3/res2); if(kVZEROrescorr){ pp->Scale(1./scaling); } Float_t err1_2 = eres1*eres1/res1/res1/4 + eres2*eres2/res2/res2/4 + eres3*eres3/res3/res3/4; Float_t err2_2 = err1_2; err1_2 /= scaling*scaling; printf("resolution V0A = %f +/- %f\n",scaling,err1_2); scaling = sqrt(res2*res3/res1); err2_2 /= scaling*scaling; if(kVZEROrescorr){ pp2->Scale(1./scaling); } printf("resolution V0C =%f +/- %f\n",scaling,err2_2); pp->SetName("V0A"); pp2->SetName("V0C"); if(! kCleanMemory){ new TCanvas(); pp->Draw(); pp2->Draw("SAME"); } TProfile *pData = new TProfile(*pp); pData->Add(pp2); snprintf(stringa,100,"%sData",nameSp); pData->SetName(stringa); TProfile *pMc = NULL; TProfile *ppMC; TProfile *ppMC2; if(isMC){ snprintf(name,100,"contVZEROmc"); cont = (TList *) fo->Get(name); cont->ls(); if(arm == 2){ AliFlowVZEROResults *c = (AliFlowVZEROResults *) cont->At(0); if(! kCleanMemory) c->GetV2(spec,xMin,xMax)->Draw("SAME"); } AliFlowVZEROResults *cA; if(fo->Get("contVZEROv2")) cA = (AliFlowVZEROResults *) cont->At(1+2*(arm==3)); else cA = (AliFlowVZEROResults *) cont->At(0); AliFlowVZEROResults *cC; if(fo->Get("contVZEROv2")) cC = (AliFlowVZEROResults *) cont->At(2+2*(arm==3)); else cC = (AliFlowVZEROResults *) cont->At(1); TProfile *p1mc = cont->At(5+3*(arm==3)); TProfile *p2mc = cont->At(6+3*(arm==3)); TProfile *p3mc = cont->At(7+3*(arm==3)); Float_t resMC1=0,resMC2=0,resMC3=0; Float_t eresMC1=0,eresMC2=0,eresMC3=0; for(Int_t i = icentr; i <= icentr+addbin;i++){ if(p1mc->GetBinError(i+1)){ eresMC1 += 1./p1mc->GetBinError(i+1)/p1mc->GetBinError(i+1); resMC1 += p1mc->GetBinContent(i+1)/p1mc->GetBinError(i+1)/p1mc->GetBinError(i+1); } if(p2mc->GetBinError(i+1)){ eresMC2 += 1./p2mc->GetBinError(i+1)/p2mc->GetBinError(i+1); resMC2 += p2mc->GetBinContent(i+1)/p2mc->GetBinError(i+1)/p2mc->GetBinError(i+1); } if(p3mc->GetBinError(i+1)){ eresMC3 += 1./p3mc->GetBinError(i+1)/p3mc->GetBinError(i+1); resMC3 += p3mc->GetBinContent(i+1)/p3mc->GetBinError(i+1)/p3mc->GetBinError(i+1); } } resMC1 /= eresMC1; resMC2 /= eresMC2; resMC3 /= eresMC3; eresMC1 = sqrt(1./eresMC1); eresMC2 = sqrt(1./eresMC2); eresMC3 = sqrt(1./eresMC3); ppMC = cA->GetV2(spec,xMin,xMax); ppMC2 = cC->GetV2(spec,xMin,xMax); scaling = sqrt(resMC1*resMC3/resMC2); ppMC->Scale(1./scaling); err1_2 = eresMC1*eresMC1/resMC1/resMC1/4 + eresMC2*eresMC2/resMC2/resMC2/4 + eresMC3*eresMC3/resMC3/resMC3/4; err2_2 = err1_2; err1_2 /= scaling*scaling; printf("resolution V0A (MC) = %f +/- %f\n",scaling,err1_2); scaling = sqrt(resMC2*resMC3/resMC1); err2_2 /= scaling*scaling; ppMC2->Scale(1./scaling); printf("resolution V0C (MC) =%f +/- %f\n",scaling,err2_2); ppMC->SetName("V0Amc"); ppMC2->SetName("V0Cmc"); if(! kCleanMemory){ ppMC->Draw("SAME"); ppMC2->Draw("SAME"); } pMc = new TProfile(*ppMC); pMc->Add(ppMC2); snprintf(stringa,100,"%sMC",nameSp); pMc->SetName(stringa); pMc->SetLineColor(2); } if(! kCleanMemory){ new TCanvas(); pData->Draw(); } if(pMc && !kCleanMemory){ pMc->Draw("SAME"); TH1D *hData = pData->ProjectionX(); TH1D *hMc = pMc->ProjectionX(); hData->Divide(hMc); new TCanvas(); hData->Draw(); } delete[] NUAcorrA; delete[] NUAcorrC; if(kCleanMemory){ if(pp) delete pp; if(pp2) delete pp2; if(ppMC) delete ppMC; if(ppMC2) delete ppMC2; } delete cont; if(isMC) return pMc; return pData; }