From 1315fe58dda7cd81d7379df16e2677e4e7a336d5 Mon Sep 17 00:00:00 2001 From: snelling Date: Mon, 1 Dec 2008 14:14:08 +0000 Subject: [PATCH] Added seperate methods to write histograms to a file when not using the task framework --- PWG2/FLOW/AliAnalysisTaskQCumulants.cxx | 31 +- PWG2/FLOW/AliFittingQDistribution.cxx | 20 +- PWG2/FLOW/AliFittingQDistribution.h | 1 + PWG2/FLOW/AliFlowAnalysisWithCumulants.cxx | 20 +- PWG2/FLOW/AliFlowAnalysisWithCumulants.h | 1 + PWG2/FLOW/AliFlowAnalysisWithQCumulants.cxx | 436 +++++++++++++------- PWG2/FLOW/AliFlowAnalysisWithQCumulants.h | 42 +- PWG2/FLOW/AliQCumulantsFunctions.cxx | 230 +++++++---- PWG2/FLOW/AliQCumulantsFunctions.h | 15 +- 9 files changed, 532 insertions(+), 264 deletions(-) diff --git a/PWG2/FLOW/AliAnalysisTaskQCumulants.cxx b/PWG2/FLOW/AliAnalysisTaskQCumulants.cxx index 5b716dc580c..e4041e703ae 100644 --- a/PWG2/FLOW/AliAnalysisTaskQCumulants.cxx +++ b/PWG2/FLOW/AliAnalysisTaskQCumulants.cxx @@ -239,9 +239,10 @@ void AliAnalysisTaskQCumulants::Exec(Option_t *) } Printf("There are %d tracks in this event", fESD->GetNumberOfTracks()); - //Q-cumulant analysis + //Q-cumulant analysis AliFlowEventSimple* fEvent = fEventMaker->FillTracks(fESD,fCFManager1,fCFManager2); - fQCA->Make(fEvent); + //AliFlowEventSimple* fEvent = fEventMaker->FillTracks(fESD); + fQCA->Make(fEvent); delete fEvent; } else if (fAnalysisType == "ESDMC0") { @@ -311,15 +312,17 @@ void AliAnalysisTaskQCumulants::Terminate(Option_t *) if(fListHistos) { //histograms to store the final results (integrated flow) - TH1D *intFlowResults = dynamic_cast(fListHistos->FindObject("fIntFlowResults")); + TH1D *intFlowResults = dynamic_cast(fListHistos->FindObject("fIntFlowResultsQC")); //histograms to store the final results (differential flow) - TH1D *diffFlowResults2ndOrder = dynamic_cast(fListHistos->FindObject("fDiffFlowResults2ndOrder")); - TH1D *diffFlowResults4thOrder = dynamic_cast(fListHistos->FindObject("fDiffFlowResults4thOrder")); + TH1D *diffFlowResults2ndOrder = dynamic_cast(fListHistos->FindObject("fDiffFlowResults2ndOrderQC")); + TH1D *diffFlowResults4thOrder = dynamic_cast(fListHistos->FindObject("fDiffFlowResults4thOrderQC")); + //histogram to store the final results for covariances (1st bin <2*4>-<2>*<4>, 2nd bin <2*6>-<2>*<6>, ...) + TH1D *covariances = dynamic_cast(fListHistos->FindObject("fCovariances")); //profile with avarage selected multiplicity for int. flow - TProfile *AvMultHere = dynamic_cast(fListHistos->FindObject("fAvMultIntFlow")); + TProfile *AvMultHere = dynamic_cast(fListHistos->FindObject("fAvMultIntFlowQC")); //profile with avarage values of Q-vector components (1st bin: , 2nd bin: , 3rd bin: <(Q_x)^2>, 4th bin: <(Q_y)^2>) TProfile *QvectorComponentsHere = dynamic_cast(fListHistos->FindObject("fQvectorComponents")); @@ -339,12 +342,22 @@ void AliAnalysisTaskQCumulants::Terminate(Option_t *) TProfile *binned3p_2n1n1n = dynamic_cast(fListHistos->FindObject("f3_2n1n1n")); TProfile *binned3p_1n1n2n = dynamic_cast(fListHistos->FindObject("f3_1n1n2n")); TProfile *binned4p_1n1n1n1n = dynamic_cast(fListHistos->FindObject("f4_1n1n1n1n")); - + + /* + AliFlowCommonHistResults *commonHR2nd = dynamic_cast(fListHistos->FindObject("fCommonHistsResults2nd")); + AliFlowCommonHistResults *commonHR4th = dynamic_cast(fListHistos->FindObject("fCommonHistsResults4th")); + AliFlowCommonHistResults *commonHR6th = dynamic_cast(fListHistos->FindObject("fCommonHistsResults6th")); + AliFlowCommonHistResults *commonHR8th = dynamic_cast(fListHistos->FindObject("fCommonHistsResults8th")); + */ - - AliQCumulantsFunctions finalResults(intFlowResults,diffFlowResults2ndOrder,diffFlowResults4thOrder,AvMultHere,QvectorComponentsHere,QCorrelations,QCovariance,QCorrelationsPerBin,DirectHere,binned2p_1n1n,binned2p_2n2n, binned3p_2n1n1n,binned3p_1n1n2n, binned4p_1n1n1n1n); + /* + AliQCumulantsFunctions finalResults(intFlowResults,diffFlowResults2ndOrder,diffFlowResults4thOrder,covariances,AvMultHere,QvectorComponentsHere,QCorrelations,QCovariance,QCorrelationsPerBin,DirectHere,binned2p_1n1n,binned2p_2n2n, binned3p_2n1n1n,binned3p_1n1n2n, binned4p_1n1n1n1n, commonHR2nd, commonHR4th, commonHR6th, commonHR8th); + */ + AliQCumulantsFunctions finalResults(intFlowResults,diffFlowResults2ndOrder,diffFlowResults4thOrder,covariances,AvMultHere,QvectorComponentsHere,QCorrelations,QCovariance,QCorrelationsPerBin,DirectHere,binned2p_1n1n,binned2p_2n2n, binned3p_2n1n1n,binned3p_1n1n2n, binned4p_1n1n1n1n); + + finalResults.Calculate(); diff --git a/PWG2/FLOW/AliFittingQDistribution.cxx b/PWG2/FLOW/AliFittingQDistribution.cxx index 6acdaba18d1..60f8cd79257 100644 --- a/PWG2/FLOW/AliFittingQDistribution.cxx +++ b/PWG2/FLOW/AliFittingQDistribution.cxx @@ -35,6 +35,7 @@ #include "AliFlowEventSimple.h" #include "AliFlowTrackSimple.h" #include "AliFittingQDistribution.h" +#include "AliFittingFunctionsForQDistribution.h" class TH1; class TGraph; @@ -138,15 +139,30 @@ void AliFittingQDistribution::Make(AliFlowEventSimple* anEvent) q = fQVector.Mod()/sqrt(fQVector.GetMult()); fQDistributionFQD->Fill(q,1.); } -} +}//end of Make() //================================================================================================================ void AliFittingQDistribution::Finish() { - //not needed for the time being... + //calculate the final results + AliFittingFunctionsForQDistribution finalFitting(fAvMultIntFlowFQD,fQDistributionFQD,fIntFlowResultsFQD); + + finalFitting.Calculate(); +} + +//================================================================================================================ + +void AliFittingQDistribution::WriteHistograms(TString* outputFileName) +{ + //store the final results in output .root file + TFile *output = new TFile(outputFileName->Data(),"RECREATE"); + fHistList->Write(); + delete output; } +//================================================================================================================ + diff --git a/PWG2/FLOW/AliFittingQDistribution.h b/PWG2/FLOW/AliFittingQDistribution.h index a6565994974..7ae855151bf 100644 --- a/PWG2/FLOW/AliFittingQDistribution.h +++ b/PWG2/FLOW/AliFittingQDistribution.h @@ -40,6 +40,7 @@ class AliFittingQDistribution{ virtual void CreateOutputObjects(); virtual void Make(AliFlowEventSimple* anEvent); virtual void Finish(); + virtual void WriteHistograms(TString* outputFileName); TList* GetHistList() const {return this->fHistList;} //output histogram list diff --git a/PWG2/FLOW/AliFlowAnalysisWithCumulants.cxx b/PWG2/FLOW/AliFlowAnalysisWithCumulants.cxx index ea7687ce9d8..212e16dfeb0 100644 --- a/PWG2/FLOW/AliFlowAnalysisWithCumulants.cxx +++ b/PWG2/FLOW/AliFlowAnalysisWithCumulants.cxx @@ -38,6 +38,7 @@ #include "AliFlowTrackSimple.h" #include "AliFlowAnalysisWithCumulants.h" #include "AliFlowCumuConstants.h" +#include "AliCumulantsFunctions.h" class TH1; class TGraph; @@ -422,9 +423,26 @@ void AliFlowAnalysisWithCumulants::Make(AliFlowEventSimple* anEvent) void AliFlowAnalysisWithCumulants::Finish() { - //not needed for the time being... + //calculate the final results + AliCumulantsFunctions finalResults(fIntFlowGenFun,NULL,NULL, fIntFlowResults,fDiffFlowResults2,fDiffFlowResults4,fDiffFlowResults6,fDiffFlowResults8,fAvMultIntFlow,fQVectorComponents,fQDist,fDiffFlowGenFunRe0,fDiffFlowGenFunRe1,fDiffFlowGenFunRe2, +fDiffFlowGenFunRe3,fDiffFlowGenFunRe4,fDiffFlowGenFunRe5,fDiffFlowGenFunRe6,fDiffFlowGenFunRe7,fDiffFlowGenFunIm0,fDiffFlowGenFunIm1, +fDiffFlowGenFunIm2,fDiffFlowGenFunIm3,fDiffFlowGenFunIm4,fDiffFlowGenFunIm5,fDiffFlowGenFunIm6,fDiffFlowGenFunIm7); + + finalResults.Calculate(); } +//================================================================================================================ + +void AliFlowAnalysisWithCumulants::WriteHistograms(TString* outputFileName) +{ + //store the final results in output .root file + TFile *output = new TFile(outputFileName->Data(),"RECREATE"); + fHistList->Write(); + delete output; +} + +//================================================================================================================ + diff --git a/PWG2/FLOW/AliFlowAnalysisWithCumulants.h b/PWG2/FLOW/AliFlowAnalysisWithCumulants.h index e63bd00fedf..65cb8840df0 100644 --- a/PWG2/FLOW/AliFlowAnalysisWithCumulants.h +++ b/PWG2/FLOW/AliFlowAnalysisWithCumulants.h @@ -42,6 +42,7 @@ class AliFlowAnalysisWithCumulants{ virtual void CreateOutputObjects(); virtual void Make(AliFlowEventSimple* anEvent); virtual void Finish(); + virtual void WriteHistograms(TString* outputFileName); TList* GetHistList() const {return this->fHistList;} //output histogram list diff --git a/PWG2/FLOW/AliFlowAnalysisWithQCumulants.cxx b/PWG2/FLOW/AliFlowAnalysisWithQCumulants.cxx index e0c824230b0..1b9d9f75812 100644 --- a/PWG2/FLOW/AliFlowAnalysisWithQCumulants.cxx +++ b/PWG2/FLOW/AliFlowAnalysisWithQCumulants.cxx @@ -28,15 +28,17 @@ #include "AliFlowCommonHistResults.h" #include "TChain.h" #include "TFile.h" -#include "TList.h" //NEW +#include "TList.h" #include "TParticle.h" #include "TRandom3.h" +#include "TStyle.h" #include "TProfile.h" #include "TProfile2D.h" #include "TProfile3D.h" #include "AliFlowEventSimple.h" #include "AliFlowTrackSimple.h" #include "AliFlowAnalysisWithQCumulants.h" +#include "AliQCumulantsFunctions.h" #include "TRandom.h" @@ -61,11 +63,12 @@ ClassImp(AliFlowAnalysisWithQCumulants) AliFlowAnalysisWithQCumulants::AliFlowAnalysisWithQCumulants(): fTrack(NULL), fHistList(NULL), - fAvMultIntFlow(NULL), + fAvMultIntFlowQC(NULL), fQvectorComponents(NULL), - fIntFlowResults(NULL), - fDiffFlowResults2ndOrder(NULL), - fDiffFlowResults4thOrder(NULL), + fIntFlowResultsQC(NULL), + fDiffFlowResults2ndOrderQC(NULL), + fDiffFlowResults4thOrderQC(NULL), + fCovariances(NULL), fQCorrelations(NULL), fQCovariance(NULL), fDirectCorrelations(NULL), @@ -82,7 +85,12 @@ AliFlowAnalysisWithQCumulants::AliFlowAnalysisWithQCumulants(): f4_1n1n1n1n(NULL), fQCorrelationsPerBin(NULL), fCommonHists(NULL), - abTempDeleteMe(0) + //fCommonHistsResults2nd(NULL), + //fCommonHistsResults4th(NULL), + //fCommonHistsResults6th(NULL), + f2Distribution(NULL), + f4Distribution(NULL), + f6Distribution(NULL) { //constructor fHistList = new TList(); @@ -101,10 +109,14 @@ void AliFlowAnalysisWithQCumulants::CreateOutputObjects() //various output histograms //avarage multiplicity - fAvMultIntFlow = new TProfile("fAvMultIntFlow","Avarage multiplicity of selected particles used for int. flow",1,0,1,0,100000,"s"); - fAvMultIntFlow->SetXTitle(""); - fAvMultIntFlow->SetYTitle(""); - fHistList->Add(fAvMultIntFlow); + fAvMultIntFlowQC = new TProfile("fAvMultIntFlowQC","Average Multiplicity",1,0,1,"s"); + fAvMultIntFlowQC->SetXTitle(""); + fAvMultIntFlowQC->SetYTitle(""); + fAvMultIntFlowQC->SetLabelSize(0.06); + fAvMultIntFlowQC->SetMarkerStyle(25); + fAvMultIntFlowQC->SetLabelOffset(0.01); + (fAvMultIntFlowQC->GetXaxis())->SetBinLabel(1,"Average Multiplicity"); + fHistList->Add(fAvMultIntFlowQC); //Q-vector stuff fQvectorComponents = new TProfile("fQvectorComponents","Avarage of Q-vector components",44,0.,44.,"s"); @@ -113,27 +125,72 @@ void AliFlowAnalysisWithQCumulants::CreateOutputObjects() //fHistList->Add(fQvectorComponents); //final results for integrated flow from Q-cumulants - fIntFlowResults = new TH1D("fIntFlowResults","Integrated Flow From Q-cumulants",4,0,4); - fIntFlowResults->SetXTitle(""); - fIntFlowResults->SetYTitle("Integrated Flow [%]"); - fHistList->Add(fIntFlowResults); - + fIntFlowResultsQC = new TH1D("fIntFlowResultsQC","Integrated Flow from Q-cumulants",4,0,4); + //fIntFlowResults->SetXTitle(""); + //fIntFlowResultsQC->SetYTitle("Integrated Flow"); + fIntFlowResultsQC->SetLabelSize(0.06); + fIntFlowResultsQC->SetTickLength(1); + fIntFlowResultsQC->SetMarkerStyle(25); + (fIntFlowResultsQC->GetXaxis())->SetBinLabel(1,"v_{n}{2}"); + (fIntFlowResultsQC->GetXaxis())->SetBinLabel(2,"v_{n}{4}"); + (fIntFlowResultsQC->GetXaxis())->SetBinLabel(3,"v_{n}{6}"); + (fIntFlowResultsQC->GetXaxis())->SetBinLabel(4,"v_{n}{8}"); + //gStyle->SetErrorX(0); + fHistList->Add(fIntFlowResultsQC); + //final results for differential flow from 2nd order Q-cumulant - fDiffFlowResults2ndOrder = new TH1D("fDiffFlowResults2ndOrder","Differential Flow From 2nd Order Q-cumulant",10000,0,1000); - fDiffFlowResults2ndOrder->SetXTitle("Pt [GeV]"); - fDiffFlowResults2ndOrder->SetYTitle("Differential Flow [%]"); - fHistList->Add(fDiffFlowResults2ndOrder); + fDiffFlowResults2ndOrderQC = new TH1D("fDiffFlowResults2ndOrderQC","Differential Flow from 2nd Order Q-cumulant",10000,0,1000); + fDiffFlowResults2ndOrderQC->SetXTitle("p_{t} [GeV]"); + //fDiffFlowResults2ndOrderQC->SetYTitle("Differential Flow"); + fHistList->Add(fDiffFlowResults2ndOrderQC); //final results for differential flow from 4th order Q-cumulant - fDiffFlowResults4thOrder = new TH1D("fDiffFlowResults4thOrder","Differential Flow From 4th Order Q-cumulant",10000,0,1000); - fDiffFlowResults4thOrder->SetXTitle("Pt [GeV]"); - fDiffFlowResults4thOrder->SetYTitle("Differential Flow [%]"); - fHistList->Add(fDiffFlowResults4thOrder); + fDiffFlowResults4thOrderQC = new TH1D("fDiffFlowResults4thOrderQC","Differential Flow from 4th Order Q-cumulant",10000,0,1000); + fDiffFlowResults4thOrderQC->SetXTitle("p_{t} [GeV]"); + //fDiffFlowResults4thOrderQC->SetYTitle("Differential Flow"); + fHistList->Add(fDiffFlowResults4thOrderQC); + + //final results for covariances (1st bin: <2*4>-<2>*<4>, 2nd bin: <2*6>-<2>*<6>, ...) + fCovariances = new TH1D("fCovariances","Covariances",6,0,6); + //fCovariances->SetXTitle(""); + //fCovariances->SetYTitle(""); + fCovariances->SetLabelSize(0.04); + fCovariances->SetTickLength(1); + fCovariances->SetMarkerStyle(25); + (fCovariances->GetXaxis())->SetBinLabel(1,"Cov(2,4)"); + (fCovariances->GetXaxis())->SetBinLabel(2,"Cov(2,6)"); + (fCovariances->GetXaxis())->SetBinLabel(3,"Cov(2,8)"); + (fCovariances->GetXaxis())->SetBinLabel(4,"Cov(4,6)"); + (fCovariances->GetXaxis())->SetBinLabel(5,"Cov(4,8)"); + (fCovariances->GetXaxis())->SetBinLabel(6,"Cov(6,8)"); + fHistList->Add(fCovariances); //multi-particle correlations calculated from Q-vectors fQCorrelations = new TProfile("fQCorrelations","multi-particle correlations from Q-vectors",35,0,35,"s"); - fQCorrelations->SetXTitle(""); - fQCorrelations->SetYTitle("correlations"); + //fQCorrelations->SetXTitle("correlations"); + //fQCorrelations->SetYTitle(""); + fQCorrelations->SetTickLength(-0.01,"Y"); + fQCorrelations->SetMarkerStyle(25); + fQCorrelations->SetLabelSize(0.03); + fQCorrelations->SetLabelOffset(0.01,"Y"); + (fQCorrelations->GetXaxis())->SetBinLabel(1,"<<2>>_{n|n}"); + (fQCorrelations->GetXaxis())->SetBinLabel(2,"<<2>>_{2n|2n}"); + (fQCorrelations->GetXaxis())->SetBinLabel(3,"<<2>>_{3n|3n}"); + (fQCorrelations->GetXaxis())->SetBinLabel(4,"<<2>>_{4n|4n}"); + (fQCorrelations->GetXaxis())->SetBinLabel(6,"<<3>>_{2n|n,n}"); + (fQCorrelations->GetXaxis())->SetBinLabel(7,"<<3>>_{3n|2n,n}"); + (fQCorrelations->GetXaxis())->SetBinLabel(8,"<<3>>_{4n|2n,2n}"); + (fQCorrelations->GetXaxis())->SetBinLabel(9,"<<3>>_{4n|3n,n}"); + (fQCorrelations->GetXaxis())->SetBinLabel(11,"<<4>>_{n,n|n,n}"); + (fQCorrelations->GetXaxis())->SetBinLabel(12,"<<4>>_{2n,n|2n,n}"); + (fQCorrelations->GetXaxis())->SetBinLabel(13,"<<4>>_{3n|n,n,n}"); + (fQCorrelations->GetXaxis())->SetBinLabel(14,"<<4>>_{4n|2n,n,n}"); + (fQCorrelations->GetXaxis())->SetBinLabel(15,"<<4>>_{3n,n|2n,2n}"); + (fQCorrelations->GetXaxis())->SetBinLabel(16,"<<5>>_{2n|n,n,n,n}"); + (fQCorrelations->GetXaxis())->SetBinLabel(17,"<<5>>_{2n,2n|2n,n,n}"); + (fQCorrelations->GetXaxis())->SetBinLabel(18,"<<5>>_{3n,n|2n,n,n}"); + (fQCorrelations->GetXaxis())->SetBinLabel(19,"<<5>>_{4n|n,n,n,n}"); + (fQCorrelations->GetXaxis())->SetBinLabel(21,"<<6>>_{n,n,n|n,n,n}"); fHistList->Add(fQCorrelations); //covariance of multi-particle correlations @@ -150,68 +207,68 @@ void AliFlowAnalysisWithQCumulants::CreateOutputObjects() //ReD fReD = new TProfile("fReD","Re[D]",10000,0.,1000.,"s"); - fReD->SetXTitle("Pt"); + fReD->SetXTitle("p_{t} [GeV]"); fReD->SetYTitle("Re[D]"); //fHistList->Add(fReD); //ImD fImD = new TProfile("fImD","Im[D]",10000,0.,1000.,"s"); - fImD->SetXTitle("Pt"); + fImD->SetXTitle("p_{t} [GeV]"); fImD->SetYTitle("Im[D]"); //fHistList->Add(fImD); //fReq1n fReq1n = new TProfile("fReq1n","Re[q_n]",10000,0.,1000.,"s"); - fReq1n->SetXTitle("Pt"); + fReq1n->SetXTitle("p_{t} [GeV]"); fReq1n->SetYTitle("Re[q_n]"); fHistList->Add(fReq1n); //fImq1n fImq1n = new TProfile("fImq1n","Im[q_n]",10000,0.,1000.,"s"); - fImq1n->SetXTitle("Pt"); + fImq1n->SetXTitle("p_{t} [GeV]"); fImq1n->SetYTitle("Im[q_n]"); fHistList->Add(fImq1n); //fReq2n fReq2n = new TProfile("fReq2n","Re[q_2n]",10000,0.,1000.,"s"); - fReq2n->SetXTitle("Pt"); + fReq2n->SetXTitle("p_{t} [GeV]"); fReq2n->SetYTitle("Im[D]"); fHistList->Add(fReq2n); //fImq2n fImq2n = new TProfile("fImq2n","Im[q_2n]",10000,0.,1000.,"s"); - fImq2n->SetXTitle("Pt"); + fImq2n->SetXTitle("p_{t} [GeV]"); fImq2n->SetYTitle("Im[q_2n]"); fHistList->Add(fImq2n); //f2_1n1n f2_1n1n = new TProfile("f2_1n1n","<2'>_{n|n}",10000,0.,1000.,"s"); - f2_1n1n->SetXTitle("Pt"); - f2_1n1n->SetYTitle("<2'>_{n|n}"); + f2_1n1n->SetXTitle("p_{t} [GeV]"); + //f2_1n1n->SetYTitle("<2'>_{n|n}"); fHistList->Add(f2_1n1n); //f2_2n2n f2_2n2n = new TProfile("f2_2n2n","<2'>_{2n|2n}",10000,0.,1000.,"s"); - f2_2n2n->SetXTitle("Pt"); - f2_2n2n->SetYTitle("<2'>_{2n|2n}"); + f2_2n2n->SetXTitle("p_{t} [GeV]"); + //f2_2n2n->SetYTitle("<2'>_{2n|2n}"); fHistList->Add(f2_2n2n); //f3_2n1n1n f3_2n1n1n = new TProfile("f3_2n1n1n","<3'>_{2n|n,n}",10000,0.,1000.,"s"); - f3_2n1n1n->SetXTitle("Pt"); - f3_2n1n1n->SetYTitle("<3'>_{2n|n,n}"); + f3_2n1n1n->SetXTitle("p_{t} [GeV]"); + //f3_2n1n1n->SetYTitle("<3'>_{2n|n,n}"); fHistList->Add(f3_2n1n1n); //f3_1n1n2n f3_1n1n2n = new TProfile("f3_1n1n2n","<3'>_{n,n|2n}",10000,0.,1000.,"s"); - f3_1n1n2n->SetXTitle("Pt"); - f3_1n1n2n->SetYTitle("<3'>_{n,n|2n}"); + f3_1n1n2n->SetXTitle("p_{t} [GeV]"); + //f3_1n1n2n->SetYTitle("<3'>_{n,n|2n}"); fHistList->Add(f3_1n1n2n); //f4_1n1n1n1n f4_1n1n1n1n = new TProfile("f4_1n1n1n1n","<4'>_{n,n|n,n}",10000,0.,1000.,"s"); - f4_1n1n1n1n->SetXTitle("Pt"); - f4_1n1n1n1n->SetYTitle("<4'>_{n,n|n,n}"); + f4_1n1n1n1n->SetXTitle("p_{t} [GeV]"); + //f4_1n1n1n1n->SetYTitle("<4'>_{n,n|n,n}"); fHistList->Add(f4_1n1n1n1n); //multi-particle correlations calculated from Q-vectors for each pt bin @@ -221,8 +278,44 @@ void AliFlowAnalysisWithQCumulants::CreateOutputObjects() //fHistList->Add(fQCorrelationsPerBin); //common control histograms - fCommonHists = new AliFlowCommonHist("QCumulants"); - fHistList->Add(fCommonHists->GetHistList()); + fCommonHists = new AliFlowCommonHist("AliFlowCommonHistQC"); + fHistList->Add(fCommonHists); + + /* + //common histograms for final results + fCommonHistsResults2nd = new AliFlowCommonHistResults("AliFlowCommonHistResults2ndOrderQC"); + fHistList->Add(fCommonHistsResults2nd); + + //common histograms for final results + fCommonHistsResults4th = new AliFlowCommonHistResults("AliFlowCommonHistResults4thOrderQC"); + fHistList->Add(fCommonHistsResults4th); + + //common histograms for final results + fCommonHistsResults6th = new AliFlowCommonHistResults("AliFlowCommonHistResults6thOrderQC"); + fHistList->Add(fCommonHistsResults6th); + + //common histograms for final results + fCommonHistsResults8th = new AliFlowCommonHistResults("AliFlowCommonHistResults8thOrderQC"); + fHistList->Add(fCommonHistsResults8th); + */ + + //weighted <2>_{n|n} distribution + f2Distribution = new TH1D("f2Distribution","<2>_{n|n} distribution",100000,-0.02,0.1); + f2Distribution->SetXTitle("<2>_{n|n}"); + f2Distribution->SetYTitle("Counts"); + fHistList->Add(f2Distribution); + + //weighted <4>_{n,n|n,n} distribution + f4Distribution = new TH1D("f4Distribution","<4>_{n,n|n,n} distribution",100000,-0.00025,0.002); + f4Distribution->SetXTitle("<4>_{n,n|n,n}"); + f4Distribution->SetYTitle("Counts"); + fHistList->Add(f4Distribution); + + //weighted <6>_{n,n,n|n,n,n} distribution + f6Distribution = new TH1D("f6Distribution","<6>_{n,n,n|n,n,n} distribution",100000,-0.000005,0.000025); + f6Distribution->SetXTitle("<6>_{n,n,n|n,n,n}"); + f6Distribution->SetYTitle("Counts"); + fHistList->Add(f6Distribution); }//end of CreateOutputObjects() @@ -230,19 +323,19 @@ void AliFlowAnalysisWithQCumulants::CreateOutputObjects() void AliFlowAnalysisWithQCumulants::Make(AliFlowEventSimple* anEvent) { - //running over data - + //running over data + //get the total multiplicity of event: //Int_t nPrim = anEvent->NumberOfTracks(); - - - //if(nPrim>8&&nPrim<24) + //if(nPrim>8&&nPrim<24) //{ //fill the common control histograms: - fCommonHists->FillControlHistograms(anEvent); + fCommonHists->FillControlHistograms(anEvent); + + //get the selected multiplicity (i.e. number of particles used for int. flow): //Int_t nEventNSelTracksIntFlow = anEvent->GetEventNSelTracksIntFlow(); @@ -272,27 +365,40 @@ void AliFlowAnalysisWithQCumulants::Make(AliFlowEventSimple* anEvent) //multiplicity (to be improved, because I already have nEventNSelTracksIntFlow and nPrim) Double_t M = Qvector1n.GetMult(); - fAvMultIntFlow->Fill(0.,M,1.); + fAvMultIntFlowQC->Fill(0.,M,1.); //--------------------------------------------------------------------------------------------------------- //************* //* Q-vectors * //************* - Double_t ReQ2nQ1nstarQ1nstar = pow(Qvector1n.X(),2.)*Qvector2n.X()+2.*Qvector1n.X()*Qvector1n.Y()*Qvector2n.Y()-pow(Qvector1n.Y(),2.)*Qvector2n.X(); - //Double_t ImQ2nQ1nstarQ1nstar = calculate and implement this (deleteMe) - Double_t ReQ4nQ2nstarQ2nstar = pow(Qvector2n.X(),2.)*Qvector4n.X()+2.*Qvector2n.X()*Qvector2n.Y()*Qvector4n.Y()-pow(Qvector2n.Y(),2.)*Qvector4n.X(); + Double_t ReQ2nQ1nstarQ1nstar = pow(Qvector1n.X(),2.)*Qvector2n.X()+2.*Qvector1n.X()*Qvector1n.Y()*Qvector2n.Y()-pow(Qvector1n.Y(),2.)*Qvector2n.X();//Re[Q_{2n} Q_{n}^* Q_{n}^*] + //Double_t ImQ2nQ1nstarQ1nstar = pow(Qvector1n.X(),2.)*Qvector2n.Y()-2.*Qvector1n.X()*Qvector1n.Y()*Qvector2n.X()-pow(Qvector1n.Y(),2.)*Qvector2n.Y();//Im[Q_{2n} Q_{n}^* Q_{n}^*] + Double_t ReQ1nQ1nQ2nstar = ReQ2nQ1nstarQ1nstar;//Re[Q_{n} Q_{n} Q_{2n}^*] = Re[Q_{2n} Q_{n}^* Q_{n}^*] + Double_t ReQ3nQ1nQ2nstarQ2nstar = (pow(Qvector2n.X(),2.)-pow(Qvector2n.Y(),2.))*(Qvector3n.X()*Qvector1n.X()-Qvector3n.Y()*Qvector1n.Y())+2.*Qvector2n.X()*Qvector2n.Y()*(Qvector3n.X()*Qvector1n.Y()+Qvector3n.Y()*Qvector1n.X()); + //Double_t ImQ3nQ1nQ2nstarQ2nstar = calculate and implement this (deleteMe) + Double_t ReQ2nQ2nQ3nstarQ1nstar = ReQ3nQ1nQ2nstarQ2nstar; + Double_t ReQ4nQ2nstarQ2nstar = pow(Qvector2n.X(),2.)*Qvector4n.X()+2.*Qvector2n.X()*Qvector2n.Y()*Qvector4n.Y()-pow(Qvector2n.Y(),2.)*Qvector4n.X();//Re[Q_{4n} Q_{2n}^* Q_{2n}^*] //Double_t ImQ4nQ2nstarQ2nstar = calculate and implement this (deleteMe) - Double_t ReQ4nQ3nstarQ1nstar = Qvector4n.X()*(Qvector3n.X()*Qvector1n.X()-Qvector3n.Y()*Qvector1n.Y())+Qvector4n.Y()*(Qvector3n.X()*Qvector1n.Y()+Qvector3n.Y()*Qvector1n.X()); + Double_t ReQ2nQ2nQ4nstar = ReQ4nQ2nstarQ2nstar; + Double_t ReQ4nQ3nstarQ1nstar = Qvector4n.X()*(Qvector3n.X()*Qvector1n.X()-Qvector3n.Y()*Qvector1n.Y())+Qvector4n.Y()*(Qvector3n.X()*Qvector1n.Y()+Qvector3n.Y()*Qvector1n.X());//Re[Q_{4n} Q_{3n}^* Q_{n}^*] + Double_t ReQ3nQ1nQ4nstar = ReQ4nQ3nstarQ1nstar;//Re[Q_{3n} Q_{n} Q_{4n}^*] = Re[Q_{4n} Q_{3n}^* Q_{n}^*] //Double_t ImQ4nQ3nstarQ1nstar = calculate and implement this (deleteMe) - Double_t ReQ3nQ2nstarQ1nstar = Qvector3n.X()*Qvector2n.X()*Qvector1n.X()-Qvector3n.X()*Qvector2n.Y()*Qvector1n.Y()+Qvector3n.Y()*Qvector2n.X()*Qvector1n.Y()+Qvector3n.Y()*Qvector2n.Y()*Qvector1n.X(); //Re + Double_t ReQ3nQ2nstarQ1nstar = Qvector3n.X()*Qvector2n.X()*Qvector1n.X()-Qvector3n.X()*Qvector2n.Y()*Qvector1n.Y()+Qvector3n.Y()*Qvector2n.X()*Qvector1n.Y()+Qvector3n.Y()*Qvector2n.Y()*Qvector1n.X();//Re[Q_{3n} Q_{2n}^* Q_{n}^*] + Double_t ReQ2nQ1nQ3nstar = ReQ3nQ2nstarQ1nstar;//Re[Q_{2n} Q_{n} Q_{3n}^*] = Re[Q_{3n} Q_{2n}^* Q_{n}^*] //Double_t ImQ3nQ2nstarQ1nstar; //calculate and implement this (deleteMe) - Double_t ReQ3nQ1nstarQ1nstarQ1nstar = Qvector3n.X()*pow(Qvector1n.X(),3)-3.*Qvector1n.X()*Qvector3n.X()*pow(Qvector1n.Y(),2)+3.*Qvector1n.Y()*Qvector3n.Y()*pow(Qvector1n.X(),2)-Qvector3n.Y()*pow(Qvector1n.Y(),3); //Re + Double_t ReQ3nQ1nstarQ1nstarQ1nstar = Qvector3n.X()*pow(Qvector1n.X(),3)-3.*Qvector1n.X()*Qvector3n.X()*pow(Qvector1n.Y(),2)+3.*Qvector1n.Y()*Qvector3n.Y()*pow(Qvector1n.X(),2)-Qvector3n.Y()*pow(Qvector1n.Y(),3);//Re[Q_{3n} Q_{n}^* Q_{n}^* Q_{n}^*] //Double_t ImQ3nQ1nstarQ1nstarQ1nstar; //calculate and implement this (deleteMe) - Double_t Q2nQ1nQ2nstarQ1nstar = pow(Qvector2n.Mod()*Qvector1n.Mod(),2); //<|Q_{2n}|^2 |Q_{n}|^2> - Double_t ReQ4nQ2nstarQ1nstarQ1nstar = (Qvector4n.X()*Qvector2n.X()+Qvector4n.Y()*Qvector2n.Y())*(pow(Qvector1n.X(),2)-pow(Qvector1n.Y(),2))+2.*Qvector1n.X()*Qvector1n.Y()*(Qvector4n.Y()*Qvector2n.X()-Qvector4n.X()*Qvector2n.Y()); //Re + Double_t Q2nQ1nQ2nstarQ1nstar = pow(Qvector2n.Mod()*Qvector1n.Mod(),2);//|Q_{2n}|^2 |Q_{n}|^2 + Double_t ReQ4nQ2nstarQ1nstarQ1nstar = (Qvector4n.X()*Qvector2n.X()+Qvector4n.Y()*Qvector2n.Y())*(pow(Qvector1n.X(),2)-pow(Qvector1n.Y(),2))+2.*Qvector1n.X()*Qvector1n.Y()*(Qvector4n.Y()*Qvector2n.X()-Qvector4n.X()*Qvector2n.Y());//Re[Q_{4n} Q_{2n}^* Q_{n}^* Q_{n}^*] //Double_t ImQ4nQ2nstarQ1nstarQ1nstar; //calculate and implement this (deleteMe) - Double_t ReQ2nQ1nQ1nstarQ1nstarQ1nstar = (Qvector2n.X()*Qvector1n.X()-Qvector2n.Y()*Qvector1n.Y())*(pow(Qvector1n.X(),3)-3.*Qvector1n.X()*pow(Qvector1n.Y(),2))+(Qvector2n.X()*Qvector1n.Y()+Qvector1n.X()*Qvector2n.Y())*(3.*Qvector1n.Y()*pow(Qvector1n.X(),2)-pow(Qvector1n.Y(),3)); + Double_t ReQ2nQ1nQ1nstarQ1nstarQ1nstar = (Qvector2n.X()*Qvector1n.X()-Qvector2n.Y()*Qvector1n.Y())*(pow(Qvector1n.X(),3)-3.*Qvector1n.X()*pow(Qvector1n.Y(),2))+(Qvector2n.X()*Qvector1n.Y()+Qvector1n.X()*Qvector2n.Y())*(3.*Qvector1n.Y()*pow(Qvector1n.X(),2)-pow(Qvector1n.Y(),3));//Re[Q_{2n} Q_{n} Q_{n}^* Q_{n}^* Q_{n}^*] //Double_t ImQ2nQ1nQ1nstarQ1nstarQ1nstar; //calculate and implement this (deleteMe) + Double_t ReQ2nQ2nQ2nstarQ1nstarQ1nstar = pow(Qvector2n.Mod(),2.)*(Qvector2n.X()*(pow(Qvector1n.X(),2.)-pow(Qvector1n.Y(),2.))+2.*Qvector2n.Y()*Qvector1n.X()*Qvector1n.Y());//Re[Q_{2n} Q_{2n} Q_{2n}^* Q_{n}^* Q_{n}^*] + //Double_t ImQ2nQ2nQ2nstarQ1nstarQ1nstar = pow(Qvector2n.Mod(),2.)*(Qvector2n.Y()*(pow(Qvector1n.X(),2.)-pow(Qvector1n.Y(),2.))-2.*Qvector2n.X()*Qvector1n.X()*Qvector1n.Y());//Im[Q_{2n} Q_{2n} Q_{2n}^* Q_{n}^* Q_{n}^*] + Double_t ReQ4nQ1nstarQ1nstarQ1nstarQ1nstar = pow(Qvector1n.X(),4.)*Qvector4n.X()-6.*pow(Qvector1n.X(),2.)*Qvector4n.X()*pow(Qvector1n.Y(),2.)+pow(Qvector1n.Y(),4.)*Qvector4n.X()+4.*pow(Qvector1n.X(),3.)*Qvector1n.Y()*Qvector4n.Y()-4.*pow(Qvector1n.Y(),3.)*Qvector1n.X()*Qvector4n.Y(); + //Double_t ImQ4nQ1nstarQ1nstarQ1nstarQ1nstar = pow(Qvector1n.X(),4.)*Qvector4n.Y()-6.*pow(Qvector1n.X(),2.)*Qvector4n.Y()*pow(Qvector1n.Y(),2.)+pow(Qvector1n.Y(),4.)*Qvector4n.Y()+4.*pow(Qvector1n.Y(),3.)*Qvector1n.X()*Qvector4n.X()-4.*pow(Qvector1n.X(),3.)*Qvector1n.Y()*Qvector4n.X(); + + //--------------------------------------------------------------------------------------------------------- //--------------------------------------------------------------------------------------------------------- @@ -313,9 +419,16 @@ void AliFlowAnalysisWithQCumulants::Make(AliFlowEventSimple* anEvent) //12th bin: <4>_{2n,n|2n,n} = four_2n1n2n1n //13th bin: <4>_{3n|n,n,n} = four_3n1n1n1n //14th bin: <4>_{4n|2n,n,n} = four_4n2n1n1n + //15th bin: <4>_{3n,n|2n,2n} = four_3n1n2n2n //16th bin: <5>_{2n|n,n,n,n} = five_2n1n1n1n1n + //17th bin: <5>_{2n,2n|2n,n,n} = five_2n2n2n1n1n + //18th bin: <5>_{3n,n|2n,n,n} = five_3n1n2n1n1n + //19th bin: <5>_{4n|n,n,n,n} = five_4n1n1n1n1n //21th bin: <6>_{n,n,n|n,n,n} = six_1n1n1n1n1n1n + //31th bin: <4>_{2n,2n|2n,2n} = four_2n2n2n2n //to be improved + //32nd bin: <4>_{3n,n|3n,n} = four_3n1n3n1n //to be improved + // binning of fQCovariance: // 1st bin: <2>_{n|n}*<4>_{n,n|n,n} // 2nd bin: <2>_{n|n}*<6>_{n,n,n|n,n,n} @@ -330,11 +443,13 @@ void AliFlowAnalysisWithQCumulants::Make(AliFlowEventSimple* anEvent) two_2n2n = (pow(Qvector2n.Mod(),2.)-M)/(M*(M-1.)); //<2>_{2n|2n} = two_3n3n = (pow(Qvector3n.Mod(),2.)-M)/(M*(M-1.)); //<2>_{3n|3n} = two_4n4n = (pow(Qvector4n.Mod(),2.)-M)/(M*(M-1.)); //<2>_{4n|4n} = - + fQCorrelations->Fill(0.,two_1n1n,M*(M-1.)); fQCorrelations->Fill(1.,two_2n2n,M*(M-1.)); fQCorrelations->Fill(2.,two_3n3n,M*(M-1.)); fQCorrelations->Fill(3.,two_4n4n,M*(M-1.)); + + f2Distribution->Fill(two_1n1n,M*(M-1.)); } //3-particle @@ -353,37 +468,62 @@ void AliFlowAnalysisWithQCumulants::Make(AliFlowEventSimple* anEvent) } //4-particle - Double_t four_1n1n1n1n=0., four_2n1n2n1n=0., four_3n1n1n1n=0., four_4n2n1n1n=0.; + Double_t four_1n1n1n1n=0., four_2n2n2n2n=0., four_2n1n2n1n=0., four_3n1n1n1n=0., four_4n2n1n1n=0., four_3n1n2n2n=0., four_3n1n3n1n=0.; if(M>3) { - four_1n1n1n1n = (2.*M*(M-3.)+pow(Qvector1n.Mod(),4.)-4.*(M-2.)*pow(Qvector1n.Mod(),2.)-2.*ReQ2nQ1nstarQ1nstar+pow(Qvector2n.Mod(),2.))/(M*(M-1)*(M-2.)*(M-3.)); //<4>_{n,n|n,n} - four_2n1n2n1n = (Q2nQ1nQ2nstarQ1nstar-2.*ReQ3nQ2nstarQ1nstar-2.*ReQ2nQ1nstarQ1nstar)/(M*(M-1.)*(M-2.)*(M-3.))-((M-5.)*pow(Qvector1n.Mod(),2.)+(M-4.)*pow(Qvector2n.Mod(),2.)-pow(Qvector3n.Mod(),2.))/(M*(M-1.)*(M-2.)*(M-3.))+(M-6.)/((M-1.)*(M-2.)*(M-3.)); //Re[<4>_{2n,n|2n,n}] - four_3n1n1n1n = (ReQ3nQ1nstarQ1nstarQ1nstar-3.*ReQ3nQ2nstarQ1nstar-3.*ReQ2nQ1nstarQ1nstar)/(M*(M-1.)*(M-2.)*(M-3.))+(2.*pow(Qvector3n.Mod(),2.)+3.*pow(Qvector2n.Mod(),2.)+6.*pow(Qvector1n.Mod(),2.)-6.*M)/(M*(M-1.)*(M-2.)*(M-3.)); //Re[<4>_{3n|n,n,n}] - four_4n2n1n1n = (ReQ4nQ2nstarQ1nstarQ1nstar-M*(M-1.)*(M-2.)*(2.*three_3n2n1n+2.*three_4n3n1n+three_4n2n2n+three_2n1n1n)-M*(M-1.)*(2.*two_1n1n+2.*two_2n2n+2*two_3n3n+two_4n4n)-M)/(M*(M-1.)*(M-2.)*(M-3.)); //Re[<4>_{4n|2n,n,n}] - - fQCorrelations->Fill(10.,four_1n1n1n1n,M*(M-1.)*(M-2.)*(M-3.)); + four_1n1n1n1n = (2.*M*(M-3.)+pow(Qvector1n.Mod(),4.)-4.*(M-2.)*pow(Qvector1n.Mod(),2.)-2.*ReQ2nQ1nstarQ1nstar+pow(Qvector2n.Mod(),2.))/(M*(M-1)*(M-2.)*(M-3.));//<4>_{n,n|n,n} + four_2n2n2n2n = (2.*M*(M-3.)+pow(Qvector2n.Mod(),4.)-4.*(M-2.)*pow(Qvector2n.Mod(),2.)-2.*ReQ4nQ2nstarQ2nstar+pow(Qvector4n.Mod(),2.))/(M*(M-1)*(M-2.)*(M-3.));//<4>_{2n,2n|2n,2n} + four_2n1n2n1n = (Q2nQ1nQ2nstarQ1nstar-2.*ReQ3nQ2nstarQ1nstar-2.*ReQ2nQ1nstarQ1nstar)/(M*(M-1.)*(M-2.)*(M-3.))-((M-5.)*pow(Qvector1n.Mod(),2.)+(M-4.)*pow(Qvector2n.Mod(),2.)-pow(Qvector3n.Mod(),2.))/(M*(M-1.)*(M-2.)*(M-3.))+(M-6.)/((M-1.)*(M-2.)*(M-3.));//Re[<4>_{2n,n|2n,n}] + four_3n1n1n1n = (ReQ3nQ1nstarQ1nstarQ1nstar-3.*ReQ3nQ2nstarQ1nstar-3.*ReQ2nQ1nstarQ1nstar)/(M*(M-1.)*(M-2.)*(M-3.))+(2.*pow(Qvector3n.Mod(),2.)+3.*pow(Qvector2n.Mod(),2.)+6.*pow(Qvector1n.Mod(),2.)-6.*M)/(M*(M-1.)*(M-2.)*(M-3.));//Re[<4>_{3n|n,n,n}] + four_4n2n1n1n = (ReQ4nQ2nstarQ1nstarQ1nstar-2.*ReQ4nQ3nstarQ1nstar-ReQ4nQ2nstarQ2nstar-2.*ReQ3nQ2nstarQ1nstar)/(M*(M-1.)*(M-2.)*(M-3.))-(ReQ2nQ1nstarQ1nstar-2.*pow(Qvector4n.Mod(),2.)-2.*pow(Qvector3n.Mod(),2.)-3.*pow(Qvector2n.Mod(),2.)-4.*pow(Qvector1n.Mod(),2.))/(M*(M-1.)*(M-2.)*(M-3.))-(6.)/((M-1.)*(M-2.)*(M-3.));//Re[<4>_{4n|2n,n,n}] + four_3n1n2n2n = (ReQ3nQ1nQ2nstarQ2nstar-ReQ4nQ2nstarQ2nstar-ReQ3nQ1nQ4nstar-2.*ReQ3nQ2nstarQ1nstar)/(M*(M-1.)*(M-2.)*(M-3.))-(2.*ReQ1nQ1nQ2nstar-pow(Qvector4n.Mod(),2.)-2.*pow(Qvector3n.Mod(),2.)-4.*pow(Qvector2n.Mod(),2.)-4.*pow(Qvector1n.Mod(),2.))/(M*(M-1.)*(M-2.)*(M-3.))-(6.)/((M-1.)*(M-2.)*(M-3.));//Re[<4>_{3n,n|2n,2n}] + four_3n1n3n1n = (pow(Qvector3n.Mod(),2.)*pow(Qvector1n.Mod(),2.)-2.*ReQ4nQ3nstarQ1nstar-2.*ReQ3nQ2nstarQ1nstar)/(M*(M-1.)*(M-2.)*(M-3.))+(pow(Qvector4n.Mod(),2.)-(M-4.)*pow(Qvector3n.Mod(),2.)+pow(Qvector2n.Mod(),2.)-(M-4.)*pow(Qvector1n.Mod(),2.))/(M*(M-1.)*(M-2.)*(M-3.))+(M-6.)/((M-1.)*(M-2.)*(M-3.));//<4>_{3n,n|3n,n} + //four_3n1n3n1n = Q3nQ1nQ3nstarQ1nstar/(M*(M-1.)*(M-2.)*(M-3.))-(2.*three_3n2n1n+2.*three_4n3n1n)/(M-3.)-(two_4n4n+M*two_3n3n+two_2n2n+M*two_1n1n)/((M-2.)*(M-3.))-M/((M-1.)*(M-2.)*(M-3.));//<4>_{3n,n|3n,n} + + fQCorrelations->Fill(10.,four_1n1n1n1n,M*(M-1.)*(M-2.)*(M-3.)); + + fQCorrelations->Fill(30.,four_2n2n2n2n,M*(M-1.)*(M-2.)*(M-3.));//to be improved + fQCorrelations->Fill(31.,four_3n1n3n1n,M*(M-1.)*(M-2.)*(M-3.));//to be improved + fQCorrelations->Fill(11.,four_2n1n2n1n,M*(M-1.)*(M-2.)*(M-3.)); fQCorrelations->Fill(12.,four_3n1n1n1n,M*(M-1.)*(M-2.)*(M-3.)); - fQCorrelations->Fill(13.,four_4n2n1n1n,M*(M-1.)*(M-2.)*(M-3.)); + fQCorrelations->Fill(13.,four_4n2n1n1n,M*(M-1.)*(M-2.)*(M-3.)); + fQCorrelations->Fill(14.,four_3n1n2n2n,M*(M-1.)*(M-2.)*(M-3.)); + f4Distribution->Fill(four_1n1n1n1n,M*(M-1.)*(M-2.)*(M-3.)); + fQCovariance->Fill(0.,two_1n1n*four_1n1n1n1n,M*(M-1.)*M*(M-1.)*(M-2.)*(M-3.)); } //5-particle - //if(M>4) - //{ - //temporarily, doesn't work with above scoping - //Double_t five_2n1n1n1n1n = (ReQ2nQ1nQ1nstarQ1nstarQ1nstar-M*(M-1.)*(M-2.)*(M-3.)*(four_3n1n1n1n+3.*four_1n1n1n1n+3.*four_2n1n2n1n)-M*(M-1.)*(M-2.)*(3.*M*three_2n1n1n+4.*three_3n2n1n)-M*(M-1.)*((9.*M-11.)*two_1n1n+(3.*M-2.)*two_2n2n+two_3n3n)-M*(3.*M-2.))/(M*(M-1.)*(M-2.)*(M-3.)*(M-4.)); //Re[<5>_{2n,n|n,n,n}] - - //fQCorrelations->Fill(15.,five_2n1n1n1n1n,M*(M-1.)*(M-2.)*(M-3.)*(M-4.)); - //} + Double_t five_2n1n1n1n1n=0., five_2n2n2n1n1n=0., five_3n1n2n1n1n=0., five_4n1n1n1n1n=0.; + if(M>4) + { + five_2n1n1n1n1n = (ReQ2nQ1nQ1nstarQ1nstarQ1nstar-ReQ3nQ1nstarQ1nstarQ1nstar+6.*ReQ3nQ2nstarQ1nstar)/(M*(M-1.)*(M-2.)*(M-3.)*(M-4.))-(ReQ2nQ1nQ3nstar+3.*(M-6.)*ReQ2nQ1nstarQ1nstar+3.*ReQ1nQ1nQ2nstar)/(M*(M-1.)*(M-2.)*(M-3.)*(M-4.))-(2.*pow(Qvector3n.Mod(),2.)+3.*pow(Qvector2n.Mod()*Qvector1n.Mod(),2.)-3.*(M-4.)*pow(Qvector2n.Mod(),2.))/(M*(M-1.)*(M-2.)*(M-3.)*(M-4.))-3.*(pow(Qvector1n.Mod(),4.)-2.*(2*M-5.)*pow(Qvector1n.Mod(),2.)+2.*M*(M-4.))/(M*(M-1.)*(M-2.)*(M-3.)*(M-4.));//Re[<5>_{2n,n|n,n,n}] + + five_2n2n2n1n1n = (ReQ2nQ2nQ2nstarQ1nstarQ1nstar-ReQ4nQ2nstarQ1nstarQ1nstar-2.*ReQ2nQ2nQ3nstarQ1nstar)/(M*(M-1.)*(M-2.)*(M-3.)*(M-4.))+2.*(ReQ4nQ2nstarQ2nstar+4.*ReQ3nQ2nstarQ1nstar+ReQ3nQ1nQ4nstar)/(M*(M-1.)*(M-2.)*(M-3.)*(M-4.))+(ReQ2nQ2nQ4nstar-2.*(M-5.)*ReQ2nQ1nstarQ1nstar+2.*ReQ1nQ1nQ2nstar)/(M*(M-1.)*(M-2.)*(M-3.)*(M-4.))-(2.*pow(Qvector4n.Mod(),2.)+4.*pow(Qvector3n.Mod(),2.)+1.*pow(Qvector2n.Mod(),4.)-2.*(3.*M-10.)*pow(Qvector2n.Mod(),2.))/(M*(M-1.)*(M-2.)*(M-3.)*(M-4.))-(4.*pow(Qvector1n.Mod(),2.)*pow(Qvector2n.Mod(),2.)-4.*(M-5.)*pow(Qvector1n.Mod(),2.)+4.*M*(M-6.))/(M*(M-1.)*(M-2.)*(M-3.)*(M-4.));//Re[<5>_{2n,2n|2n,n,n}] + + //five_2n2n2n1n1n = ReQ2nQ2nQ2nstarQ1nstarQ1nstar/(M*(M-1.)*(M-2.)*(M-3.)*(M-4.))-(4.*four_2n1n2n1n+2.*four_3n1n2n2n+1.*four_2n2n2n2n+four_4n2n1n1n)/(M-4.)-(2.*three_4n3n1n+three_4n2n2n+three_4n2n2n+2.*three_3n2n1n)/((M-3.)*(M-4.))-(4.*three_3n2n1n+(2.*M-1.)*three_2n1n1n+2.*three_2n1n1n)/((M-3.)*(M-4.))-(two_4n4n+2.*two_3n3n+4.*(M-1.)*two_2n2n+2.*(2.*M-1.)*two_1n1n)/((M-2.)*(M-3.)*(M-4.))-(2.*M-1.)/((M-1.)*(M-2.)*(M-3.)*(M-4.)); + + five_4n1n1n1n1n = (ReQ4nQ1nstarQ1nstarQ1nstarQ1nstar-6.*ReQ4nQ2nstarQ1nstarQ1nstar-4.*ReQ3nQ1nstarQ1nstarQ1nstar)/(M*(M-1.)*(M-2.)*(M-3.)*(M-4.))+(8.*ReQ4nQ3nstarQ1nstar+3.*ReQ4nQ2nstarQ2nstar+12.*ReQ3nQ2nstarQ1nstar+12.*ReQ2nQ1nstarQ1nstar)/(M*(M-1.)*(M-2.)*(M-3.)*(M-4.))-(6.*pow(Qvector4n.Mod(),2.)+8.*pow(Qvector3n.Mod(),2.)+12.*pow(Qvector2n.Mod(),2.)+24.*pow(Qvector1n.Mod(),2.)-24.*M)/(M*(M-1.)*(M-2.)*(M-3.)*(M-4.));//Re[<5>_{4n|n,n,n,n}] + + //five_4n1n1n1n1n = ReQ4nQ1nstarQ1nstarQ1nstarQ1nstar/(M*(M-1.)*(M-2.)*(M-3.)*(M-4.)) - (4.*four_3n1n1n1n+6.*four_4n2n1n1n)/(M-4.) - (6.*three_2n1n1n + 12.*three_3n2n1n + 4.*three_4n3n1n + 3.*three_4n2n2n)/((M-3.)*(M-4.)) - (4.*two_1n1n + 6.*two_2n2n + 4.*two_3n3n + 1.*two_4n4n)/((M-2.)*(M-3.)*(M-4.)) - 1./((M-1.)*(M-2.)*(M-3.)*(M-4.)); + + fQCorrelations->Fill(15.,five_2n1n1n1n1n,M*(M-1.)*(M-2.)*(M-3.)*(M-4.)); + fQCorrelations->Fill(16.,five_2n2n2n1n1n,M*(M-1.)*(M-2.)*(M-3.)*(M-4.)); + fQCorrelations->Fill(17.,five_3n1n2n1n1n,M*(M-1.)*(M-2.)*(M-3.)*(M-4.)); + fQCorrelations->Fill(18.,five_4n1n1n1n1n,M*(M-1.)*(M-2.)*(M-3.)*(M-4.)); + } //6-particle + Double_t six_1n1n1n1n1n1n=0.; if(M>5) { - Double_t six_1n1n1n1n1n1n = (pow(Qvector1n.Mod(),6.)+9.*Q2nQ1nQ2nstarQ1nstar-6.*ReQ2nQ1nQ1nstarQ1nstarQ1nstar)/(M*(M-1)*(M-2)*(M-3)*(M-4)*(M-5)) + 4.*(ReQ3nQ1nstarQ1nstarQ1nstar-3.*ReQ3nQ2nstarQ1nstar)/(M*(M-1)*(M-2)*(M-3)*(M-4)*(M-5)) + 2.*(9.*(M-4.)*ReQ2nQ1nstarQ1nstar+2.*pow(Qvector3n.Mod(),2.))/(M*(M-1)*(M-2)*(M-3)*(M-4)*(M-5)) - 9.*(pow(Qvector1n.Mod(),4.)+pow(Qvector2n.Mod(),2.))/(M*(M-1)*(M-2)*(M-3)*(M-5)) + (18.*pow(Qvector1n.Mod(),2.))/(M*(M-1)*(M-3)*(M-4)) - (6.)/((M-1)*(M-2)*(M-3)); //<6>_{n,n,n|n,n,n} + six_1n1n1n1n1n1n = (pow(Qvector1n.Mod(),6.)+9.*Q2nQ1nQ2nstarQ1nstar-6.*ReQ2nQ1nQ1nstarQ1nstarQ1nstar)/(M*(M-1)*(M-2)*(M-3)*(M-4)*(M-5))+4.*(ReQ3nQ1nstarQ1nstarQ1nstar-3.*ReQ3nQ2nstarQ1nstar)/(M*(M-1)*(M-2)*(M-3)*(M-4)*(M-5))+2.*(9.*(M-4.)*ReQ2nQ1nstarQ1nstar+2.*pow(Qvector3n.Mod(),2.))/(M*(M-1)*(M-2)*(M-3)*(M-4)*(M-5))-9.*(pow(Qvector1n.Mod(),4.)+pow(Qvector2n.Mod(),2.))/(M*(M-1)*(M-2)*(M-3)*(M-5))+(18.*pow(Qvector1n.Mod(),2.))/(M*(M-1)*(M-3)*(M-4))-(6.)/((M-1)*(M-2)*(M-3));//<6>_{n,n,n|n,n,n} + + fQCorrelations->Fill(20.,six_1n1n1n1n1n1n,M*(M-1.)*(M-2.)*(M-3.)*(M-4.)*(M-5.)); - fQCorrelations->Fill(20.,six_1n1n1n1n1n1n,M*(M-1.)*(M-2.)*(M-3.)*(M-4.)*(M-5.)); + f6Distribution->Fill(six_1n1n1n1n1n1n,M*(M-1.)*(M-2.)*(M-3.)*(M-4.)*(M-5.)); fQCovariance->Fill(1.,two_1n1n*six_1n1n1n1n1n1n,M*(M-1.)*M*(M-1.)*(M-2.)*(M-3.)*(M-4.)*(M-5.)); fQCovariance->Fill(2.,four_1n1n1n1n*six_1n1n1n1n1n1n,M*(M-1.)*(M-2.)*(M-3.)*M*(M-1.)*(M-2.)*(M-3.)*(M-4.)*(M-5.)); @@ -398,16 +538,19 @@ void AliFlowAnalysisWithQCumulants::Make(AliFlowEventSimple* anEvent) Double_t Q_y = Qvector1n.Y(); Double_t Q_2x = Qvector2n.X(); Double_t Q_2y = Qvector2n.Y(); - + Double_t q_x=0.,q_y=0.,q_2x=0.,q_2y=0.,m=0.; for(Int_t i=0;iGetTrack(i); - fReq1n->Fill(fTrack->Pt(),cos(n*(fTrack->Phi())),1.); - fImq1n->Fill(fTrack->Pt(),sin(n*(fTrack->Phi())),1.); - fReq2n->Fill(fTrack->Pt(),cos(2.*n*(fTrack->Phi())),1.); - fImq2n->Fill(fTrack->Pt(),sin(2.*n*(fTrack->Phi())),1.); + if(fTrack) + { + fReq1n->Fill(fTrack->Pt(),cos(n*(fTrack->Phi())),1.); + fImq1n->Fill(fTrack->Pt(),sin(n*(fTrack->Phi())),1.); + fReq2n->Fill(fTrack->Pt(),cos(2.*n*(fTrack->Phi())),1.); + fImq2n->Fill(fTrack->Pt(),sin(2.*n*(fTrack->Phi())),1.); + } } Double_t twoDiff_1n1n=0.,twoDiff_2n2n=0.,threeDiff_2n1n1n=0.,threeDiff_1n1n2n=0.,fourDiff_1n1n1n1n=0.; @@ -471,36 +614,6 @@ void AliFlowAnalysisWithQCumulants::Make(AliFlowEventSimple* anEvent) - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - @@ -840,8 +953,8 @@ fQCorrelations->Fill(32,threeDiff_2n_n_n,mm*(Mhere-1.)*(Mhere-2.));//<3'>_{2n|n, -/* +/* @@ -872,9 +985,18 @@ fQCorrelations->Fill(32,threeDiff_2n_n_n,mm*(Mhere-1.)*(Mhere-2.));//<3'>_{2n|n, //12th bin: <4>_{2n,n|2n,n} //13th bin: <4>_{3n|n,n,n} //14th bin: <4>_{4n|2n,n,n} - //16th bin: <5>_{2n|n,n,n,n} + //15th bin: <4>_{3n,n|2n,2n} + //16th bin: <5>_{2n,n|n,n,n} + //17th bin: <5>_{2n,2n|2n,n,n} + //18th bin: <5>_{3n,n|2n,n,n} + //19th bin: <5>_{4n|n,n,n,n} //21th bin: <6>_{n,n,n|n,n,n} + + //31th bin: <4>_{2n,2n|2n,2n} //to be improved + //32nd bin: <4>_{3n,n|3n,n} //to be improved + + //differential flow //41st bin: <2'>_{n|n} //42nd bin: <2'>_{2n|2n} @@ -896,14 +1018,14 @@ fQCorrelations->Fill(32,threeDiff_2n_n_n,mm*(Mhere-1.)*(Mhere-2.));//<3'>_{2n|n, if(j==i)continue; fTrack=anEvent->GetTrack(j); phi2=fTrack->Phi(); - fDirectCorrelations->Fill(0.,cos(n*(phi1-phi2)),1); //<2>_{n,n} - fDirectCorrelations->Fill(1.,cos(2.*n*(phi1-phi2)),1); //<2>_{2n,2n} - fDirectCorrelations->Fill(2.,cos(3.*n*(phi1-phi2)),1); //<2>_{3n,3n} - fDirectCorrelations->Fill(3.,cos(4.*n*(phi1-phi2)),1); //<2>_{4n,4n} + fDirectCorrelations->Fill(0.,cos(n*(phi1-phi2)),1); //<2>_{n|n} + fDirectCorrelations->Fill(1.,cos(2.*n*(phi1-phi2)),1); //<2>_{2n|2n} + fDirectCorrelations->Fill(2.,cos(3.*n*(phi1-phi2)),1); //<2>_{3n|3n} + fDirectCorrelations->Fill(3.,cos(4.*n*(phi1-phi2)),1); //<2>_{4n|4n} } } - //<3>_{2n,n,n}, <3>_{3n|2n,n}, <3>_{4n,2n,2n} and <3>_{4n,3n,n} + //<3>_{2n|n,n}, <3>_{3n|2n,n}, <3>_{4n|2n,2n} and <3>_{4n|3n,n} for(Int_t i=0;iGetTrack(i); @@ -918,15 +1040,15 @@ fQCorrelations->Fill(32,threeDiff_2n_n_n,mm*(Mhere-1.)*(Mhere-2.));//<3'>_{2n|n, if(k==i||k==j)continue; fTrack=anEvent->GetTrack(k); phi3=fTrack->Phi(); - fDirectCorrelations->Fill(5.,cos(2*n*phi1-n*(phi2+phi3)),1); //<3>_{2n,n,n} - fDirectCorrelations->Fill(6.,cos(3.*n*phi1-2.*n*phi2-n*phi3),1); //<3>_{3n,2n,n} - fDirectCorrelations->Fill(7.,cos(4.*n*phi1-2.*n*phi2-2.*n*phi3),1); //<3>_{4n,2n,2n} - fDirectCorrelations->Fill(8.,cos(4.*n*phi1-3.*n*phi2-n*phi3),1); //<3>_{4n,3n,n} + fDirectCorrelations->Fill(5.,cos(2*n*phi1-n*(phi2+phi3)),1); //<3>_{2n|n,n} + fDirectCorrelations->Fill(6.,cos(3.*n*phi1-2.*n*phi2-n*phi3),1); //<3>_{3n|2n,n} + fDirectCorrelations->Fill(7.,cos(4.*n*phi1-2.*n*phi2-2.*n*phi3),1); //<3>_{4n|2n,2n} + fDirectCorrelations->Fill(8.,cos(4.*n*phi1-3.*n*phi2-n*phi3),1); //<3>_{4n|3n,n} } } } - //<4>_{n,n,n,n}, <4>_{2n,n,2n,n}, <4>_{3n,n,n,n} and <4>_{4n,2n,n,n} + //<4>_{n,n|n,n}, <4>_{2n,n|2n,n}, <4>_{3n|n,n,n}, <4>_{4n|2n,n,n}, <4>_{2n,2n|2n,2n} and <4>_{3n,n|3n,n} for(Int_t i=0;iGetTrack(i); @@ -946,10 +1068,13 @@ fQCorrelations->Fill(32,threeDiff_2n_n_n,mm*(Mhere-1.)*(Mhere-2.));//<3'>_{2n|n, if(l==i||l==j||l==k)continue; fTrack=anEvent->GetTrack(l); phi4=fTrack->Phi(); - fDirectCorrelations->Fill(10.,cos(n*phi1+n*phi2-n*phi3-n*phi4),1); //<4>_{n,n,n,n} - fDirectCorrelations->Fill(11.,cos(2.*n*phi1+n*phi2-2.*n*phi3-n*phi4),1); //<4>_{2n,n,2n,n} - fDirectCorrelations->Fill(12.,cos(3.*n*phi1-n*phi2-n*phi3-n*phi4),1); //<4>_{3n,n,n,n} - fDirectCorrelations->Fill(13.,cos(4.*n*phi1-2.*n*phi2-n*phi3-n*phi4),1); //<4>_{4n,2n,n,n} + fDirectCorrelations->Fill(10.,cos(n*phi1+n*phi2-n*phi3-n*phi4),1); //<4>_{n,n|n,n} + fDirectCorrelations->Fill(11.,cos(2.*n*phi1+n*phi2-2.*n*phi3-n*phi4),1); //<4>_{2n,n|2n,n} + fDirectCorrelations->Fill(12.,cos(3.*n*phi1-n*phi2-n*phi3-n*phi4),1); //<4>_{3n|n,n,n} + fDirectCorrelations->Fill(13.,cos(4.*n*phi1-2.*n*phi2-n*phi3-n*phi4),1); //<4>_{4n|2n,n,n} + fDirectCorrelations->Fill(14.,cos(3.*n*phi1+n*phi2-2.*n*phi3-2.*n*phi4),1); //<4>_{3n,n|2n,2n} + fDirectCorrelations->Fill(30.,cos(2.*n*phi1+2*n*phi2-2.*n*phi3-2.*n*phi4),1); //<4>_{2n,2n|2n,2n}//to be improved + fDirectCorrelations->Fill(31.,cos(3.*n*phi1+n*phi2-3.*n*phi3-n*phi4),1); //<4>_{3n,n|3n,n}//to be improved } } } @@ -960,7 +1085,6 @@ fQCorrelations->Fill(32,threeDiff_2n_n_n,mm*(Mhere-1.)*(Mhere-2.));//<3'>_{2n|n, - */ @@ -968,34 +1092,38 @@ fQCorrelations->Fill(32,threeDiff_2n_n_n,mm*(Mhere-1.)*(Mhere-2.));//<3'>_{2n|n, - /* + + //<5>_{2n,n,n,n,n} - for(Int_t i=0;iWrite(); + delete output; +} - - - - - - - - - - - - - - +//================================================================================================================ diff --git a/PWG2/FLOW/AliFlowAnalysisWithQCumulants.h b/PWG2/FLOW/AliFlowAnalysisWithQCumulants.h index a41e0652f43..33caf1ff1f2 100644 --- a/PWG2/FLOW/AliFlowAnalysisWithQCumulants.h +++ b/PWG2/FLOW/AliFlowAnalysisWithQCumulants.h @@ -41,26 +41,27 @@ class AliFlowAnalysisWithQCumulants{ virtual void CreateOutputObjects(); virtual void Make(AliFlowEventSimple* anEvent); virtual void Finish(); + virtual void WriteHistograms(TString* outputFileName); - TList* GetHistList() const {return this->fHistList;} //output histogram list + TList* GetHistList() const {return this->fHistList;} //output histogram list private: AliFlowAnalysisWithQCumulants(const AliFlowAnalysisWithQCumulants& afawQc); AliFlowAnalysisWithQCumulants& operator=(const AliFlowAnalysisWithQCumulants& afawQc); AliFlowTrackSimple* fTrack; //track TList* fHistList; //list to hold all output histograms - TProfile* fAvMultIntFlow; //avarage selected multiplicity + TProfile* fAvMultIntFlowQC; //avarage selected multiplicity TProfile* fQvectorComponents; //avarages of Q-vector components (1st bin: , 2nd bin: , 3rd bin: <(Q_x)^2>, 4th bin: <(Q_y)^2>, 5th bin: <|Q|^2>) - TH1D* fIntFlowResults; //integrated flow results from Q-cumulants - TH1D* fDiffFlowResults2ndOrder; //differential flow results from 2nd order Q-cumulant - TH1D* fDiffFlowResults4thOrder; //differential flow results from 4th order Q-cumulant + TH1D* fIntFlowResultsQC; //integrated flow results from Q-cumulants + TH1D* fDiffFlowResults2ndOrderQC; //differential flow results from 2nd order Q-cumulant + TH1D* fDiffFlowResults4thOrderQC; //differential flow results from 4th order Q-cumulant + TH1D* fCovariances; //final results for covariances: 1st bin: <2*4>-<2>*<4>, 2nd bin: <2*6>-<2>*<6>, ... TProfile* fQCorrelations; //multi-particle correlations calculated from Q-vectors TProfile* fQCovariance; //covariance of multi-particle correlations - TProfile* fDirectCorrelations; //multi-particle correlations calculated with nested loops - + TProfile* fDirectCorrelations; //multi-particle correlations calculated with nested loop TProfile* fReD; TProfile* fImD; @@ -70,20 +71,27 @@ class AliFlowAnalysisWithQCumulants{ TProfile* fReq2n; //real part of q-vector evaluated in harmonic 2n for each pt-bin TProfile* fImq2n; //imaginary part of q-vector evaluated in harmonic 2n for each pt-bin - TProfile* f2_1n1n; //<2'>_{n|n} per pt-bin - TProfile* f2_2n2n; //<2'>_{2n|2n} per pt-bin - TProfile* f3_2n1n1n; //<3'>_{2n|n,n} per pt-bin - TProfile* f3_1n1n2n; //<3'>_{n,n|2n} per pt-bin - TProfile* f4_1n1n1n1n; //<4'>_{n,n|n,n} per pt-bin + TProfile* f2_1n1n; //<<2'>>_{n|n} per pt-bin + TProfile* f2_2n2n; //<<2'>>_{2n|2n} per pt-bin + TProfile* f3_2n1n1n; //<<3'>>_{2n|n,n} per pt-bin + TProfile* f3_1n1n2n; //<<3'>>_{n,n|2n} per pt-bin + TProfile* f4_1n1n1n1n; //<<4'>>_{n,n|n,n} per pt-bin TProfile* fQCorrelationsPerBin; - AliFlowCommonHist* fCommonHists; //common control histograms + AliFlowCommonHist* fCommonHists; //common control histograms - - Int_t abTempDeleteMe; - - + /* + AliFlowCommonHistResults* fCommonHistsResults2nd; //final results for 2nd order int. and diff. flow stored in the common histograms + AliFlowCommonHistResults* fCommonHistsResults4th; //final results for 4th order int. and diff. flow stored in the common histograms + AliFlowCommonHistResults* fCommonHistsResults6th; //final results for 6th order int. and diff. flow stored in the common histograms + AliFlowCommonHistResults* fCommonHistsResults8th; //final results for 8th order int. and diff. flow stored in the common histograms + */ + + TH1D* f2Distribution; //distribution of <2>_{n|n} + TH1D* f4Distribution; //distribution of <4>_{n,n|n,n} + TH1D* f6Distribution; //distribution of <6>_{n,n,n|n,n,n} + ClassDef(AliFlowAnalysisWithQCumulants, 0); }; diff --git a/PWG2/FLOW/AliQCumulantsFunctions.cxx b/PWG2/FLOW/AliQCumulantsFunctions.cxx index fbfbbbf0a3f..4916863844a 100644 --- a/PWG2/FLOW/AliQCumulantsFunctions.cxx +++ b/PWG2/FLOW/AliQCumulantsFunctions.cxx @@ -25,7 +25,6 @@ #define AliQCumulantsFunctions_cxx #include "Riostream.h" -#include "AliFlowCommonConstants.h" #include "TChain.h" #include "TFile.h" #include "TList.h" @@ -44,6 +43,7 @@ #include "AliFlowTrackSimple.h" #include "AliFlowAnalysisWithCumulants.h" #include "AliFlowCommonConstants.h" +#include "AliFlowCommonHistResults.h" #include "AliQCumulantsFunctions.h" ClassImp(AliQCumulantsFunctions) @@ -54,6 +54,7 @@ AliQCumulantsFunctions::AliQCumulantsFunctions(): fIntRes(NULL), fDiffRes2nd(NULL), fDiffRes4th(NULL), + fCovar(NULL), fAvMult(NULL), fQVector(NULL), fQCorr(NULL), @@ -64,7 +65,11 @@ AliQCumulantsFunctions::AliQCumulantsFunctions(): fbin2_2n2n(NULL), fbin3_2n1n1n(NULL), fbin3_1n1n2n(NULL), - fbin4_1n1n1n1n(NULL) + fbin4_1n1n1n1n(NULL) + //fchr2nd(NULL), + //fchr4th(NULL), + //fchr6th(NULL), + //fchr8th(NULL) { //default constructor } @@ -74,10 +79,12 @@ AliQCumulantsFunctions::~AliQCumulantsFunctions() //destructor } -AliQCumulantsFunctions::AliQCumulantsFunctions(TH1D *intRes, TH1D *diffRes2nd, TH1D *diffRes4th, TProfile *AvMult, TProfile *QVector, TProfile *QCorr, TProfile *QCovar, TProfile *QCorrPerBin, TProfile *Direct, TProfile *bin2_1n1n, TProfile *bin2_2n2n, TProfile *bin3_2n1n1n, TProfile *bin3_1n1n2n, TProfile *bin4_1n1n1n1n): +/* +AliQCumulantsFunctions::AliQCumulantsFunctions(TH1D *intRes, TH1D *diffRes2nd, TH1D *diffRes4th, TH1D *covar, TProfile *AvMult, TProfile *QVector, TProfile *QCorr, TProfile *QCovar, TProfile *QCorrPerBin, TProfile *Direct, TProfile *bin2_1n1n, TProfile *bin2_2n2n, TProfile *bin3_2n1n1n, TProfile *bin3_1n1n2n, TProfile *bin4_1n1n1n1n, AliFlowCommonHistResults *chr2nd, AliFlowCommonHistResults *chr4th, AliFlowCommonHistResults *chr6th, AliFlowCommonHistResults *chr8th): fIntRes(intRes), fDiffRes2nd(diffRes2nd), fDiffRes4th(diffRes4th), + fCovar(covar), fAvMult(AvMult), fQVector(QVector), fQCorr(QCorr), @@ -88,11 +95,42 @@ AliQCumulantsFunctions::AliQCumulantsFunctions(TH1D *intRes, TH1D *diffRes2nd, T fbin2_2n2n(bin2_2n2n), fbin3_2n1n1n(bin3_2n1n1n), fbin3_1n1n2n(bin3_1n1n2n), - fbin4_1n1n1n1n(bin4_1n1n1n1n) + fbin4_1n1n1n1n(bin4_1n1n1n1n), + fchr2nd(chr2nd), + fchr4th(chr4th), + fchr6th(chr6th), + fchr8th(chr8th) { //custom constructor } +*/ + +AliQCumulantsFunctions::AliQCumulantsFunctions(TH1D *intRes, TH1D *diffRes2nd, TH1D *diffRes4th, TH1D *covar, TProfile *AvMult, TProfile *QVector, TProfile *QCorr, TProfile *QCovar, TProfile *QCorrPerBin, TProfile *Direct, TProfile *bin2_1n1n, TProfile *bin2_2n2n, TProfile *bin3_2n1n1n, TProfile *bin3_1n1n2n, TProfile *bin4_1n1n1n1n): + fIntRes(intRes), + fDiffRes2nd(diffRes2nd), + fDiffRes4th(diffRes4th), + fCovar(covar), + fAvMult(AvMult), + fQVector(QVector), + fQCorr(QCorr), + fQCovar(QCovar), + fQCorrPerBin(QCorrPerBin), + fDirect(Direct), + fbin2_1n1n(bin2_1n1n), + fbin2_2n2n(bin2_2n2n), + fbin3_2n1n1n(bin3_2n1n1n), + fbin3_1n1n2n(bin3_1n1n2n), + fbin4_1n1n1n1n(bin4_1n1n1n1n) + //fchr2nd(chr2nd), + //fchr4th(chr4th), + //fchr6th(chr6th), + //fchr8th(chr8th) +{ + //custom constructor +} + + //================================================================================================================ void AliQCumulantsFunctions::Calculate() @@ -123,6 +161,9 @@ void AliQCumulantsFunctions::Calculate() Double_t cov24=fQCovar->GetBinContent(1)-two*four;//cov24=<<2>*<4>>-<<2>>*<<4>> Double_t cov26=fQCovar->GetBinContent(2)-two*six; //cov26=<<2>*<6>>-<<2>>*<<6>> Double_t cov46=fQCovar->GetBinContent(3)-four*six;//cov46=<<4>*<6>>-<<4>>*<<6>> + fCovar->SetBinContent(1,cov24); + fCovar->SetBinContent(2,cov26); + fCovar->SetBinContent(4,cov46); //2nd, 4th and 6th order Q-cumulant and theirs errors: Double_t secondOrderQCumulant = two; //c_n{2} @@ -136,7 +177,7 @@ void AliQCumulantsFunctions::Calculate() fourthOrderQCumulantError = pow(16.*pow(two,2.)*pow(twoErr,2.)+pow(fourErr,2.)-8.*two*cov24,0.5);//sigma_{c_n{4}} } - Double_t sixthOrderQCumulant = six-9.*two*four+12.*pow(two,3.); //c_n{6} + Double_t sixthOrderQCumulant = six-9.*two*four+12.*pow(two,3.); //c_n{6} Double_t sixthOrderQCumulantError = 0.; //sigma_{c_n{6}} if(81.*pow(4.*two*two-four,2.)*pow(twoErr,2.)+81.*pow(two,2.)*pow(fourErr,2.)+pow(sixErr,2.)-162.*(4.*two*two-four)*two*cov24+18.*(4.*two*two-four)*cov26-18.*two*cov46>0.) @@ -159,6 +200,7 @@ void AliQCumulantsFunctions::Calculate() cout<<" v_"<SetBinContent(1,vn2); fIntRes->SetBinError(1,sd2); + //fchr2nd->FillIntegratedFlow(vn2,sd2);//common histogram }else{ cout<<" v_"<SetBinContent(2,vn4); fIntRes->SetBinError(2,sd4); + //fchr4th->FillIntegratedFlow(vn4,sd4);//common histogram }else{ cout<<" v_"<SetBinContent(3,vn6); fIntRes->SetBinError(3,sd6); + //fchr6th->FillIntegratedFlow(vn6,sd6);//common histogram //fIntRes->Draw("E1P0"); }else{ cout<<" v_"<_{n|n} from Q-vectors = "<GetBinContent(1)<_{n|n} from Q-vectors = "<GetBinContent(1)<<" +/- "<GetBinContent(1),0.5)<_{n|n} from nested loops = "<GetBinContent(1)<_{n|n} from Q-vectors = "<GetBinContent(1)<_{n|n} from nested loops = "<GetBinContent(1)<_{2n|2n} from Q-vectors = "<GetBinContent(2)<_{2n|2n} from nested loops = "<GetBinContent(2)<_{2n|2n} from Q-vectors = "<GetBinContent(2)<_{2n|2n} from nested loops = "<GetBinContent(2)<_{3n|3n} from Q-vectors = "<GetBinContent(3)<_{3n|3n} from nested loops = "<GetBinContent(3)<_{3n|3n} from Q-vectors = "<GetBinContent(3)<_{3n|3n} from nested loops = "<GetBinContent(3)<_{4n|4n} from Q-vectors = "<GetBinContent(4)<_{4n|4n} from nested loops = "<GetBinContent(4)<_{4n|4n} from Q-vectors = "<GetBinContent(4)<_{4n|4n} from nested loops = "<GetBinContent(4)<_{2n,n,n} from Q-vectors = "<GetBinContent(6)<_{2n,n,n} from nested loops = "<GetBinContent(6)<_{2n,n,n} from Q-vectors = "<GetBinContent(6)<_{2n,n,n} from nested loops = "<GetBinContent(6)<_{3n,2n,n} from Q-vectors = "<GetBinContent(7)<_{3n,2n,n} from nested loops = "<GetBinContent(7)<_{3n,2n,n} from Q-vectors = "<GetBinContent(7)<_{3n,2n,n} from nested loops = "<GetBinContent(7)<_{4n,2n,2n} from Q-vectors = "<GetBinContent(8)<_{4n,2n,2n} from nested loops = "<GetBinContent(8)<_{4n,2n,2n} from Q-vectors = "<GetBinContent(8)<_{4n,2n,2n} from nested loops = "<GetBinContent(8)<_{4n,3n,n} from Q-vectors = "<GetBinContent(9)<_{4n,3n,n} from nested loops = "<GetBinContent(9)<_{4n,3n,n} from Q-vectors = "<GetBinContent(9)<_{4n,3n,n} from nested loops = "<GetBinContent(9)<_{n,n|n,n} from Q-vectors = "<GetBinContent(11)<_{n,n|n,n} from nested loops = "<GetBinContent(11)<_{n,n|n,n} from Q-vectors = "<GetBinContent(11)<_{n,n|n,n} from nested loops = "<GetBinContent(11)<_{2n,n|2n,n} from Q-vectors = "<GetBinContent(12)<_{2n,n|2n,n} from nested loops = "<GetBinContent(12)<_{2n,2n|2n,2n} from Q-vectors = "<GetBinContent(31)<_{2n,2n|2n,2n} from nested loops = "<GetBinContent(31)<_{3n|n,n,n} from Q-vectors = "<GetBinContent(13)<_{3n|n,n,n} from nested loops = "<GetBinContent(13)<_{3n,n|3n,n} from Q-vectors = "<GetBinContent(32)<_{3n,n|3n,n} from nested loops = "<GetBinContent(32)<_{4n|2n,n,n} from Q-vectors = "<GetBinContent(14)<_{4n|2n,n,n} from nested loops = "<GetBinContent(14)<_{2n,n|2n,n} from Q-vectors = "<GetBinContent(12)<_{2n,n|2n,n} from nested loops = "<GetBinContent(12)<_{3n|n,n,n} from Q-vectors = "<GetBinContent(13)<_{3n|n,n,n} from nested loops = "<GetBinContent(13)<_{4n|2n,n,n} from Q-vectors = "<GetBinContent(14)<_{4n|2n,n,n} from nested loops = "<GetBinContent(14)<_{3n,n|2n,2n} from Q-vectors = "<GetBinContent(15)<_{3n,n|2n,2n} from nested loops = "<GetBinContent(15)<_{2n,n|n,n,n} from Q-vectors = "<GetBinContent(16)<_{2n,n|n,n,n} from nested loops = "<GetBinContent(16)<_{2n,2n|2n,n,n} from Q-vectors = "<GetBinContent(17)<_{2n,2n|2n,n,n} from nested loops = "<GetBinContent(17)<_{3n,n|2n,n,n} from Q-vectors = "<GetBinContent(18)<_{3n,n|2n,n,n} from nested loops = "<GetBinContent(18)<_{4n|n,n,n,n} from Q-vectors = "<GetBinContent(19)<_{4n|n,n,n,n} from nested loops = "<GetBinContent(19)<_{2n,n|n,n,n} from Q-vectors = "<GetBinContent(16)<_{2n,n|n,n,n} from nested loops = "<GetBinContent(16)<_{n,n,n|n,n,n} from Q-vectors = "<GetBinContent(21)<_{n,n,n|n,n,n} from nested loops = "<GetBinContent(21)<