TH1D *fIntFlowEventWeightsForCorrelationsEBE; // 1st bin: eW_<2>, 2nd bin: eW_<4>, 3rd bin: eW_<6>, 4th bin: eW_<8>
TH1D *fIntFlowCorrelationsAllEBE; // to be improved (add comment)
TH1D *fIntFlowCorrectionTermsForNUAEBE[2]; // [0=sin terms,1=cos terms], NUA = non-uniform acceptance
- TH1D *fIntFlowEventWeightForCorrectionTermsForNUAEBE[2]; // [0=sin terms,1=cos terms], NUA = non-uniform acceptance
- Double_t fReferenceMultiplicityEBE; // reference multiplicity
+ TH1D *fIntFlowEventWeightForCorrectionTermsForNUAEBE[2]; // [0=sin terms,1=cos terms], NUA = non-uniform acceptance
// 3d.) profiles:
TProfile *fAvMultiplicity; // profile to hold average multiplicities and number of events for events with nRP>=0, nRP>=1, ... , and nRP>=8
TProfile *fIntFlowCorrelationsPro; // average correlations <<2>>, <<4>>, <<6>> and <<8>> (with wrong errors!)
TProfile *fDiffFlowDirectCorrelations[2][2][4]; // [0=RP,1=POI][0=pt,1=eta][correlation index]
TProfile *fDiffFlowDirectCorrectionTermsForNUA[2][2][2][10]; // [0=RP,1=POI][0=pt,1=eta][0=sin terms,1=cos terms][correction term index]
- ClassDef(AliFlowAnalysisWithQCumulants, 1);
+ ClassDef(AliFlowAnalysisWithQCumulants, 0);
};
//================================================================================================================
fHistProMeanPtperBin(NULL),
fHistQ(NULL),
fHarmonic(NULL),
+ fRefMultVsNoOfRPs(NULL),
fHistList(NULL)
{
fHistProMeanPtperBin(new TProfile(*a.fHistProMeanPtperBin)),
fHistQ(new TH1F(*a.fHistQ)),
fHarmonic(new TProfile(*a.fHarmonic)),
+ fRefMultVsNoOfRPs(new TProfile(*a.fRefMultVsNoOfRPs)),
fHistList(NULL)
{
// copy constructor
fHistList-> Add(fHistPhiEtaPOI);
fHistList-> Add(fHistProMeanPtperBin);
fHistList-> Add(fHarmonic);
+ fHistList-> Add(fRefMultVsNoOfRPs);
fHistList-> Add(fHistQ);
// TListIter next = TListIter(a.fHistList);
fHistProMeanPtperBin(NULL),
fHistQ(NULL),
fHarmonic(NULL),
+ fRefMultVsNoOfRPs(NULL),
fHistList(NULL)
{
sName +=anInput;
fHarmonic = new TProfile(sName.Data(),sName.Data(),1,0,1);
fHarmonic ->SetYTitle("harmonic");
+
+ //<reference multiplicity> versus # of RPs
+ sName = "Reference_Multiplicity_Vs_Number_Of_RPs_";
+ sName +=anInput;
+ fRefMultVsNoOfRPs = new TProfile(sName.Data(),sName.Data(),iNbinsMult, dMultMin, dMultMax);
+ fRefMultVsNoOfRPs->SetYTitle("<reference multiplicity>");
+ fRefMultVsNoOfRPs->SetXTitle("# of RPs");
//list of histograms if added here also add in copy constructor
fHistList = new TList();
fHistList-> Add(fHistPhiEtaRP);
fHistList-> Add(fHistPhiEtaPOI);
fHistList-> Add(fHistProMeanPtperBin);
- fHistList-> Add(fHarmonic);
+ fHistList-> Add(fHarmonic);
+ fHistList-> Add(fRefMultVsNoOfRPs);
fHistList-> Add(fHistQ);
}
delete fHistProMeanPtperBin;
delete fHistQ;
delete fHarmonic;
+ delete fRefMultVsNoOfRPs;
delete fHistList;
}
fHistMultRP->Fill(dMultRP);
fHistMultPOI->Fill(dMultPOI);
+
+ //<reference multiplicity> versus # of RPs:
+ fRefMultVsNoOfRPs->Fill(dMultRP+0.5,anEvent->GetReferenceMultiplicity(),1.);
return kTRUE;
}
// add comment
// Set how many output analysis files in total you want to access:
-const Int_t nFiles = 2;
+const Int_t nFiles = 1;
// Set how many of those output analysis files you want to represent with a mesh (usually used to represent results of simulations):
-const Int_t nSim = 1;
+const Int_t nSim = 0;
// Set paths of all output analysis files (first the ones to be represented with mesh (simulations), then the ones to be represented with markers (real data))
-TString files[nFiles] = {"sim/pythia/LHC10a18","data/mergedBC"};
+TString files[nFiles] = {"data"};
// Set analysis types for all output analysis files (can be "ESD","AOD","MC",""):
-TString type[nFiles] = {"ESD","ESD"};
+TString type[nFiles] = {"ESD"};
// Set mesh color:
-Int_t meshColor[nSim] = {kBlue-10};
+Int_t meshColor[nSim] = {};
// Set marker styles:
Int_t markerStyle[nFiles-nSim] = {kStar};
+// Set marker colors:
+Int_t markerColor[nFiles-nSim] = {kBlack};
+
// Set legend entries:
-TString legendEntry[nFiles] = {"Pythia (LHC10a18)","7 TeV data (LHC10b, LHC10c)"};
+TString legendEntry[nFiles] = {"pp example run"};
+// Set if you whish to plot cumulants versus <reference multiplicity> (by default they are plotted versus # of RPs):
+Bool_t plotCumulantsVsReferenceMultiplicity = kTRUE;
+
// Set flow values whose theoretical contribution to cumulants will be shown on the plots with the straight coloured lines:
Bool_t showTheoreticalLines = kFALSE;
const Int_t nFlowValues = 2;
Int_t lineColor[nFlowValues] = {kRed,kBlue};
// If the statistical error of 6th and 8th order cumulant is huge you may prefer not to show them:
-Bool_t plotOnly2ndAnd4thOrderCumulant = kFALSE;
+Bool_t plotOnly2ndAnd4thOrderCumulant = kTRUE;
// For comparison sake show also GFC results with dotted line:
Bool_t showAlsoGFCResults = kFALSE;
TList *lists[nFiles][nMethods] = {{NULL}}; // lists cobj<method> holding objects with results for each method
TH1D *cumulantsVsM[nFiles][nMethods][4] = {{{NULL}}}; // histograms with results for cumulants vs multiplicity (4 stands for 4 cumulant orders)
TLine *lines[nFlowValues][4] = {{NULL}}; // lines denoting theoretical flow contribution to cumulants
+TProfile *refMultVsNoOfRPs = NULL; // <reference multipicity> versus # of RPs
// Ranges for plots:
Double_t xMin[4]={0.};
if(cumulantsVsM[f][0][co])
{
cumulantsVsM[f][0][co]->Draw("e1same");
- cumulantsVsM[f][0][co]->SetMarkerStyle(markerStyle[f-nSim]);
+ cumulantsVsM[f][0][co]->SetMarkerStyle(markerStyle[f-nSim]);
+ cumulantsVsM[f][0][co]->SetMarkerColor(markerColor[f-nSim]);
if(co==0)
{
if(showAlsoGFCResults)
// Draw legend:
if(co==0){legend->Draw("same");}
} // end of for(Int_t co=0;co<4;co++) // cumulant order
-
+
+ // Plot also <reference multiplicity> vs # of RPs:
+ if(plotCumulantsVsReferenceMultiplicity)
+ {
+ if(refMultVsNoOfRPs)
+ {
+ TCanvas *cRefMultVsNoOfRPs = new TCanvas("cRefMultVsNoOfRPs","#LTreference multiplicity#GT vs # of RPs");
+ refMultVsNoOfRPs->SetTitle("");
+ refMultVsNoOfRPs->GetXaxis()->SetRangeUser(0,refMultVsNoOfRPs->FindLastBinAbove());
+ refMultVsNoOfRPs->Draw();
+ } else
+ {
+ cout<<endl;
+ cout<<"WARNING: refMultVsNoOfRPs is NULL in Plot() !!!!"<<endl;
+ cout<<endl;
+ }
+ }
+
} // end of void Plot()
// =====================================================================================
void GetHistograms()
{
// Get histograms with results for cumulants vs multiplicity.
+
+ if(plotCumulantsVsReferenceMultiplicity) {GetProfileForRefMultVsNoOfRPs();}
TString qcFlag[4] = {"QC{2}","QC{4}","QC{6}","QC{8}"};
TString gfcFlag[4] = {"GFC{2}","GFC{4}","GFC{6}","GFC{8}"};
for(Int_t co=0;co<4;co++)
{
cumulantsVsM[f][m][co] = dynamic_cast<TH1D*> (temp->FindObject(Form("fIntFlowQcumulantsVsM, %s",qcFlag[co].Data())));
+ if(plotCumulantsVsReferenceMultiplicity)
+ {
+ Map(cumulantsVsM[f][m][co]);
+ }
}
}
} // end of if(!(strcmp(method[m].Data(),"QC")))
for(Int_t co=0;co<4;co++)
{
cumulantsVsM[f][m][co] = dynamic_cast<TH1D*> (temp->FindObject(Form("fReferenceFlowCumulantsVsM, %s",gfcFlag[co].Data())));
+ if(plotCumulantsVsReferenceMultiplicity)
+ {
+ Map(cumulantsVsM[f][m][co]);
+ }
}
}
} // end of else if(!(strcmp(method[m].Data(),"QC")))
// =====================================================================================
+void GetProfileForRefMultVsNoOfRPs()
+{
+ // Get profile holding <reference multiplicity> versus # of RPs.
+
+ AliFlowCommonHist *commonHist = dynamic_cast<AliFlowCommonHist*> (lists[0][0]->FindObject("AliFlowCommonHistQC"));
+ if(commonHist && commonHist->GetRefMultVsNoOfRPs())
+ {
+ refMultVsNoOfRPs = commonHist->GetRefMultVsNoOfRPs();
+ } else
+ {
+ cout<<endl;
+ cout<<"WARNING: commonHist && commonHist->GetRefMultVsNoOfRPs() is NULL in method"<<endl;
+ cout<<" GetProfileForRefMultVsNoOfRPs() !!!! But was searching only in the file"<<endl;
+ cout<<" "<<commonOutputFiles[0]->GetName()<<", though."<<endl;
+ cout<<" Do you have this file available?"<<endl;
+ cout<<endl;
+ }
+
+} // end of void GetProfileForRefMultVsNoOfRPs()
+
+// =====================================================================================
+
+void Map(TH1D *hist)
+{
+ // Map cumulant versus # of RPs into cumulants versus <reference multiplicity>.
+
+ TH1D *temp = NULL;
+ if(hist)
+ {
+ temp = (TH1D*) hist->Clone();
+ temp->Reset();
+ Int_t nBins = hist->GetNbinsX();
+ for(Int_t b=1;b<=nBins;b++)
+ {
+ temp->SetBinContent((Int_t)refMultVsNoOfRPs->GetBinContent(b),hist->GetBinContent(b));
+ temp->SetBinError((Int_t)refMultVsNoOfRPs->GetBinContent(b),hist->GetBinError(b));
+ }
+ }
+
+ hist = temp;
+
+ return;
+
+} // end of Map()
+
+// =====================================================================================
+
TGraphErrors* GetGraphErrors(Int_t bin, Int_t nFiles, TH1D** qc)
{
TGraphErrors *ge = new TGraphErrors(nFiles);
// y-axis:
styleHist->GetYaxis()->SetRangeUser(yMin[co],yMax[co]);
- styleHist->GetXaxis()->SetTitle("M");
+ if(plotCumulantsVsReferenceMultiplicity)
+ {
+ styleHist->GetXaxis()->SetTitle("#LTreference multiplicity#GT");
+ } else
+ {
+ styleHist->GetXaxis()->SetTitle("# of RPs");
+ }
+
styleHist->GetYaxis()->SetTitle(yAxisTitle.Data());
return styleHist;