using std::endl;
using std::cout;
using std::flush;
+using std::ofstream;
+using std::ios;
//================================================================================================================
fMaxNoRPs(-44),
fExactNoRPs(-44),
fPropagateError(kTRUE),
+ fAnalysisTag(""),
+ fDumpThePoints(kFALSE),
+ fMaxNoEventsPerFile(100),
// 1.) Control histograms:
fControlHistogramsList(NULL),
fControlHistogramsFlagsPro(NULL),
// e) Calculate multi-particle correlations from Q-vector components;
// f) Calculate e-b-e cumulants;
// g) Reset Q-vector components;
- // h) Cross-check results with nested loops.
+ // h) Cross-check results with nested loops;
+ // i) Dump the points.
// a) Cross-check internal flags:
if(fUseInternalFlags){if(!this->CrossCheckInternalFlags(anEvent)){return;}}
if(fCrossCheckWithNestedLoops){this->CrossCheckWithNestedLoops(anEvent);}
if(fCrossCheckDiffWithNestedLoops){this->CrossCheckDiffWithNestedLoops(anEvent);}
+ // i) Dump the points:
+ if(fDumpThePoints){this->DumpThePoints(anEvent);}
+
} // end of AliFlowAnalysisWithMultiparticleCorrelations::Make(AliFlowEventSimple *anEvent)
//=======================================================================================================================
else if(fCalculateOnlySin && 0==cs){continue;}
for(Int_t c=0;c<fMaxCorrelator;c++)
{
+ if(c==fDontGoBeyond){continue;}
+ if(fCalculateOnlyForHarmonicQC && c%2==0){continue;}
if(!fCorrelationsPro[cs][c]){Fatal(sMethodName.Data(),"fCorrelationsPro[%d][%d] is NULL, for one reason or another...",cs,c);}
}
}
else if(fCalculateOnlySin && 0==cs){continue;}
for(Int_t c=0;c<fMaxCorrelator;c++)
{
+ if(c==fDontGoBeyond){continue;}
+ if(fCalculateOnlyForHarmonicQC && c%2==0){continue;}
if(!fCorrelationsPro[cs][c]){Fatal(sMethodName.Data(),"fCorrelationsPro[%d][%d] is NULL, for one reason or another...",cs,c);}
}
}
// d) Q-cumulants;
// e) Weights;
// f) Differential correlations;
- // g) Nested loops.
+ // g) Nested loops;
+ // h) Dump the points.
TString sMethodName = "AliFlowAnalysisWithMultiparticleCorrelations::CrossCheckSettings()";
}
// f) Differential correlations:
+ if(fCalculateDiffCorrelations && !fCalculateDiffQvectors)
+ {
+ Fatal(sMethodName.Data(),"fCalculateDiffCorrelations && !fCalculateDiffQvectors");
+ }
+ if(fCalculateDiffCorrelations && !fCalculateQvector)
+ {
+ Fatal(sMethodName.Data(),"fCalculateDiffCorrelations && !fCalculateQvector");
+ }
+ if(!fCalculateDiffCorrelations && fCalculateDiffQvectors)
+ {
+ Fatal(sMethodName.Data(),"!fCalculateDiffCorrelations && fCalculateDiffQvectors");
+ }
if(fCalculateDiffCorrelations && !fUseDefaultBinning && (fnDiffBins < 1 || !fRangesDiffBins))
{
Fatal(sMethodName.Data(),"fCalculateDiffCorrelations && !fUseDefaultBinning && (fnDiffBins < 1 || !fRangesDiffBins)");
{
Fatal(sMethodName.Data(),"fCalculateDiffCorrelations && !(fCalculateDiffCos || fCalculateDiffSin)");
}
+ if(fCalculateDiffCorrelations && fDontFill[1])
+ {
+ Warning(sMethodName.Data(),"fCalculateDiffCorrelations && fDontFill[1]");
+ }
// g) Nested loops:
if(fCrossCheckDiffWithNestedLoops && (1 == fCrossCheckDiffCSCOBN[0] && !fCalculateDiffSin))
Fatal(sMethodName.Data(),"fCrossCheckDiffWithNestedLoops && (0 == fCrossCheckDiffCSCOBN[0] && !CalculateDiffCos)");
}
+ // h) Dump the points:
+ if(fDumpThePoints && !fFillMultDistributionsHist)
+ {
+ Fatal(sMethodName.Data(),"if(fDumpThePoints && !fFillMultDistributionsHist)");
+ }
+ if(fDumpThePoints && fMaxNoEventsPerFile <= 0)
+ {
+ Fatal(sMethodName.Data(),"if(fDumpThePoints && fMaxNoEventsPerFile <= 0)");
+ }
+
} // end of void AliFlowAnalysisWithMultiparticleCorrelations::CrossCheckSettings()
//=======================================================================================================================
// b2) Book TH2D *fMultCorrelationsHist[3].
// a) Book the profile holding all the flags for control histograms: TBI stil incomplete
- fControlHistogramsFlagsPro = new TProfile("fControlHistogramsFlagsPro","Flags and settings for control histograms",4,0,4);
+ fControlHistogramsFlagsPro = new TProfile("fControlHistogramsFlagsPro","Flags and settings for control histograms",7,0,7);
fControlHistogramsFlagsPro->SetTickLength(-0.01,"Y");
fControlHistogramsFlagsPro->SetMarkerStyle(25);
fControlHistogramsFlagsPro->SetLabelSize(0.04);
fControlHistogramsFlagsPro->GetXaxis()->SetBinLabel(2,"fFillKinematicsHist"); fControlHistogramsFlagsPro->Fill(1.5,fFillKinematicsHist);
fControlHistogramsFlagsPro->GetXaxis()->SetBinLabel(3,"fFillMultDistributionsHist"); fControlHistogramsFlagsPro->Fill(2.5,fFillMultDistributionsHist);
fControlHistogramsFlagsPro->GetXaxis()->SetBinLabel(4,"fFillMultCorrelationsHist"); fControlHistogramsFlagsPro->Fill(3.5,fFillMultCorrelationsHist);
+ fControlHistogramsFlagsPro->GetXaxis()->SetBinLabel(5,"fDontFill[0=RP]"); fControlHistogramsFlagsPro->Fill(4.5,fDontFill[0]);
+ fControlHistogramsFlagsPro->GetXaxis()->SetBinLabel(6,"fDontFill[1=POI]"); fControlHistogramsFlagsPro->Fill(5.5,fDontFill[1]);
+ fControlHistogramsFlagsPro->GetXaxis()->SetBinLabel(7,"fDontFill[2=REF]"); fControlHistogramsFlagsPro->Fill(6.5,fDontFill[2]);
fControlHistogramsList->Add(fControlHistogramsFlagsPro);
if(!fFillControlHistograms){return;} // TBI is this safe? Well, perhaps it is if I can't implement it better...
{
for(Int_t rp=0;rp<2;rp++) // [RP,POI]
{
+ if(fDontFill[rp]){continue;}
for(Int_t ppe=0;ppe<3;ppe++) // [phi,pt,eta]
{
fKinematicsHist[rp][ppe] = new TH1D(name[rp][ppe].Data(),title[rp].Data(),fnBins[rp][ppe],fMin[rp][ppe],fMax[rp][ppe]);
{
for(Int_t rprm=0;rprm<3;rprm++) // [RP,POI,reference multiplicity]
{
+ if(fDontFill[rprm]){continue;}
fMultDistributionsHist[rprm] = new TH1D(nameMult[rprm].Data(),titleMult[rprm].Data(),fnBinsMult[rprm],fMinMult[rprm],fMaxMult[rprm]);
fMultDistributionsHist[rprm]->GetXaxis()->SetTitle(xAxisTitleMult[rprm].Data());
fMultDistributionsHist[rprm]->SetLineColor(lineColorMult[rprm]);
} // for(Int_t rprm=0;rprm<3;rprm++) // [RP,POI,reference multiplicity]
} // if(fFillMultDistributionsHist)
- // b2) Book TH2D *fMultCorrelationsHist[3]:
+ // b2) Book TH2I *fMultCorrelationsHist[3]:
if(fFillMultCorrelationsHist)
{
- // ...
- fMultCorrelationsHist[0] = new TH2D("Multiplicity (RP vs. POI)","Multiplicity (RP vs. POI)",fnBinsMult[0],fMinMult[0],fMaxMult[0],fnBinsMult[1],fMinMult[1],fMaxMult[1]);
- fMultCorrelationsHist[0]->GetXaxis()->SetTitle(xAxisTitleMult[0].Data());
- fMultCorrelationsHist[0]->GetYaxis()->SetTitle(xAxisTitleMult[1].Data());
- fControlHistogramsList->Add(fMultCorrelationsHist[0]);
- // ...
- fMultCorrelationsHist[1] = new TH2D("Multiplicity (RP vs. REF)","Multiplicity (RP vs. REF)",fnBinsMult[0],fMinMult[0],fMaxMult[0],fnBinsMult[2],fMinMult[2],fMaxMult[2]);
- fMultCorrelationsHist[1]->GetXaxis()->SetTitle(xAxisTitleMult[0].Data());
- fMultCorrelationsHist[1]->GetYaxis()->SetTitle(xAxisTitleMult[2].Data());
- fControlHistogramsList->Add(fMultCorrelationsHist[1]);
- // ...
- fMultCorrelationsHist[2] = new TH2D("Multiplicity (POI vs. REF)","Multiplicity (POI vs. REF)",fnBinsMult[1],fMinMult[1],fMaxMult[1],fnBinsMult[2],fMinMult[2],fMaxMult[2]);
- fMultCorrelationsHist[2]->GetXaxis()->SetTitle(xAxisTitleMult[1].Data());
- fMultCorrelationsHist[2]->GetYaxis()->SetTitle(xAxisTitleMult[2].Data());
- fControlHistogramsList->Add(fMultCorrelationsHist[2]);
+ if(!fDontFill[0] && !fDontFill[1])
+ {
+ fMultCorrelationsHist[0] = new TH2I("Multiplicity (RP vs. POI)","Multiplicity (RP vs. POI)",fnBinsMult[0],fMinMult[0],fMaxMult[0],fnBinsMult[1],fMinMult[1],fMaxMult[1]);
+ fMultCorrelationsHist[0]->GetXaxis()->SetTitle(xAxisTitleMult[0].Data());
+ fMultCorrelationsHist[0]->GetYaxis()->SetTitle(xAxisTitleMult[1].Data());
+ fControlHistogramsList->Add(fMultCorrelationsHist[0]);
+ }
+ if(!fDontFill[0] && !fDontFill[2])
+ {
+ fMultCorrelationsHist[1] = new TH2I("Multiplicity (RP vs. REF)","Multiplicity (RP vs. REF)",fnBinsMult[0],fMinMult[0],fMaxMult[0],fnBinsMult[2],fMinMult[2],fMaxMult[2]);
+ fMultCorrelationsHist[1]->GetXaxis()->SetTitle(xAxisTitleMult[0].Data());
+ fMultCorrelationsHist[1]->GetYaxis()->SetTitle(xAxisTitleMult[2].Data());
+ fControlHistogramsList->Add(fMultCorrelationsHist[1]);
+ }
+ if(!fDontFill[1] && !fDontFill[2])
+ {
+ fMultCorrelationsHist[2] = new TH2I("Multiplicity (POI vs. REF)","Multiplicity (POI vs. REF)",fnBinsMult[1],fMinMult[1],fMaxMult[1],fnBinsMult[2],fMinMult[2],fMaxMult[2]);
+ fMultCorrelationsHist[2]->GetXaxis()->SetTitle(xAxisTitleMult[1].Data());
+ fMultCorrelationsHist[2]->GetYaxis()->SetTitle(xAxisTitleMult[2].Data());
+ fControlHistogramsList->Add(fMultCorrelationsHist[2]);
+ }
} // if(fFillMultCorrelationsHist){
} // void AliFlowAnalysisWithMultiparticleCorrelations::BookEverythingForControlHistograms()
{
if((0==rp && pTrack->InRPSelection()) || (1==rp && pTrack->InPOISelection())) // TBI
{
- fKinematicsHist[rp][ppe]->Fill(dPhiPtEta[ppe]);
+ if(fKinematicsHist[rp][ppe]){fKinematicsHist[rp][ppe]->Fill(dPhiPtEta[ppe]);}
}
} // for(Int_t ppe=0;ppe<3;ppe++) // [phi,pt,eta]
} // for(Int_t rp=0;rp<2;rp++) // [RP,POI]
Double_t dMult[3] = {dMultRP,dMultPOI,dMultREF};
for(Int_t rprm=0;rprm<3;rprm++) // [RP,POI,reference multiplicity]
{
- if(fFillMultDistributionsHist){fMultDistributionsHist[rprm]->Fill(dMult[rprm]);}
+ if(fFillMultDistributionsHist && fMultDistributionsHist[rprm]){fMultDistributionsHist[rprm]->Fill(dMult[rprm]);}
}
- // c) Fill TH2D *fMultCorrelationsHist[3]:
+ // c) Fill TH2I *fMultCorrelationsHist[3]:
if(fFillMultCorrelationsHist)
{
- fMultCorrelationsHist[0]->Fill((Int_t)dMultRP,(Int_t)dMultPOI); // RP vs. POI
- fMultCorrelationsHist[1]->Fill((Int_t)dMultRP,(Int_t)dMultREF); // RP vs. refMult
- fMultCorrelationsHist[2]->Fill((Int_t)dMultPOI,(Int_t)dMultREF); // POI vs. refMult
+ if(fMultCorrelationsHist[0]){fMultCorrelationsHist[0]->Fill((Int_t)dMultRP,(Int_t)dMultPOI);} // RP vs. POI
+ if(fMultCorrelationsHist[1]){fMultCorrelationsHist[1]->Fill((Int_t)dMultRP,(Int_t)dMultREF);} // RP vs. refMult
+ if(fMultCorrelationsHist[2]){fMultCorrelationsHist[2]->Fill((Int_t)dMultPOI,(Int_t)dMultREF);} // POI vs. refMult
} // if(fFillMultCorrelationsHist)
} // void AliFlowAnalysisWithMultiparticleCorrelations::FillControlHistograms(AliFlowEventSimple *anEvent)
// a) Initialize TH1D *fKinematicsHist[2][3];
// b) Initialize TH1D *fMultDistributionsHist[3];
// c) Initialize TH2D *fMultCorrelationsHist[3];
- // d) Initialize default binning values for fKinematicsHist[2][3];
- // e) Initialize default binning values for fMultCorrelationsHist[3].
+ // d) Initialize Bool_t fDontFill[3];
+ // e) Initialize default binning values for fKinematicsHist[2][3];
+ // f) Initialize default binning values for fMultCorrelationsHist[3].
// a) Initialize TH1D *fKinematicsHist[2][3]:
for(Int_t rp=0;rp<2;rp++) // [RP,POI]
fMultDistributionsHist[rprm] = NULL;
}
- // c) Initialize TH2D *fMultCorrelationsHist[3]:
+ // c) Initialize TH2I *fMultCorrelationsHist[3]:
for(Int_t r=0;r<3;r++) // [RP vs. POI, RP vs. refMult, POI vs. refMult]
{
fMultCorrelationsHist[r] = NULL;
}
- // d) Initialize default binning values for fKinematicsHist[2][3]:
+ // d) Initialize Bool_t fDontFill[3]:
+ for(Int_t rpr=0;rpr<3;rpr++) // [RP,POI,REF]
+ {
+ fDontFill[rpr] = kFALSE;
+ }
+
+ // e) Initialize default binning values for fKinematicsHist[2][3]:
// nBins:
fnBins[0][0] = 360; // [RP][phi]
fnBins[0][1] = 1000; // [RP][pt]
fMax[1][1] = 10.; // [POI][pt]
fMax[1][2] = 1.; // [POI][eta]
- // e) Initialize default binning values for fMultCorrelationsHist[3]:
+ // f) Initialize default binning values for fMultCorrelationsHist[3]:
// nBins:
fnBinsMult[0] = 3000; // [RP]
fnBinsMult[1] = 3000; // [POI]
else if(fCalculateOnlySin && 0==cs){continue;}
for(Int_t c=0;c<fMaxCorrelator;c++) // [1p,2p,...,8p]
{
+ if(c==fDontGoBeyond){continue;}
+ if(fCalculateOnlyForHarmonicQC && c%2==0){continue;}
fCorrelationsPro[cs][c] = new TProfile(Form("%dpCorrelations%s",c+1,sCosSin[cs].Data()),"",nBins[c],0.,1.*nBins[c]);
fCorrelationsPro[cs][c]->Sumw2();
fCorrelationsPro[cs][c]->SetStats(kFALSE);
{
if(fCalculateOnlyCos && 1==cs){continue;}
else if(fCalculateOnlySin && 0==cs){continue;}
- fCorrelationsPro[cs][0]->GetXaxis()->SetBinLabel(binNo[cs][0]++,Form("%s(%d)",sCosSin[cs].Data(),n1));
+ if(fCorrelationsPro[cs][0]){fCorrelationsPro[cs][0]->GetXaxis()->SetBinLabel(binNo[cs][0]++,Form("%s(%d)",sCosSin[cs].Data(),n1));}
} // for(Int_t cs=0;cs<2;cs++)
nToBeFilled[0]++;
}
{
if(fCalculateOnlyCos && 1==cs){continue;}
else if(fCalculateOnlySin && 0==cs){continue;}
- fCorrelationsPro[cs][1]->GetXaxis()->SetBinLabel(binNo[cs][1]++,Form("%s(%d,%d)",sCosSin[cs].Data(),n1,n2));
+ if(fCorrelationsPro[cs][1]){fCorrelationsPro[cs][1]->GetXaxis()->SetBinLabel(binNo[cs][1]++,Form("%s(%d,%d)",sCosSin[cs].Data(),n1,n2));}
} // for(Int_t cs=0;cs<2;cs++)
nToBeFilled[1]++;
}
{
if(fCalculateOnlyCos && 1==cs){continue;}
else if(fCalculateOnlySin && 0==cs){continue;}
- fCorrelationsPro[cs][2]->GetXaxis()->SetBinLabel(binNo[cs][2]++,Form("%s(%d,%d,%d)",sCosSin[cs].Data(),n1,n2,n3));
+ if(fCorrelationsPro[cs][2]){fCorrelationsPro[cs][2]->GetXaxis()->SetBinLabel(binNo[cs][2]++,Form("%s(%d,%d,%d)",sCosSin[cs].Data(),n1,n2,n3));}
} // for(Int_t cs=0;cs<2;cs++)
nToBeFilled[2]++;
}
{
if(fCalculateOnlyCos && 1==cs){continue;}
else if(fCalculateOnlySin && 0==cs){continue;}
- fCorrelationsPro[cs][3]->GetXaxis()->SetBinLabel(binNo[cs][3]++,Form("%s(%d,%d,%d,%d)",sCosSin[cs].Data(),n1,n2,n3,n4));
+ if(fCorrelationsPro[cs][3]){fCorrelationsPro[cs][3]->GetXaxis()->SetBinLabel(binNo[cs][3]++,Form("%s(%d,%d,%d,%d)",sCosSin[cs].Data(),n1,n2,n3,n4));}
} // for(Int_t cs=0;cs<2;cs++)
nToBeFilled[3]++;
}
{
if(fCalculateOnlyCos && 1==cs){continue;}
else if(fCalculateOnlySin && 0==cs){continue;}
- fCorrelationsPro[cs][4]->GetXaxis()->SetBinLabel(binNo[cs][4]++,Form("%s(%d,%d,%d,%d,%d)",sCosSin[cs].Data(),n1,n2,n3,n4,n5));
+ if(fCorrelationsPro[cs][4]){fCorrelationsPro[cs][4]->GetXaxis()->SetBinLabel(binNo[cs][4]++,Form("%s(%d,%d,%d,%d,%d)",sCosSin[cs].Data(),n1,n2,n3,n4,n5));}
} // for(Int_t cs=0;cs<2;cs++)
nToBeFilled[4]++;
}
{
if(fCalculateOnlyCos && 1==cs){continue;}
else if(fCalculateOnlySin && 0==cs){continue;}
- fCorrelationsPro[cs][5]->GetXaxis()->SetBinLabel(binNo[cs][5]++,Form("%s(%d,%d,%d,%d,%d,%d)",sCosSin[cs].Data(),n1,n2,n3,n4,n5,n6));
+ if(fCorrelationsPro[cs][5]){fCorrelationsPro[cs][5]->GetXaxis()->SetBinLabel(binNo[cs][5]++,Form("%s(%d,%d,%d,%d,%d,%d)",sCosSin[cs].Data(),n1,n2,n3,n4,n5,n6));}
} // for(Int_t cs=0;cs<2;cs++)
nToBeFilled[5]++;
}
{
if(fCalculateOnlyCos && 1==cs){continue;}
else if(fCalculateOnlySin && 0==cs){continue;}
- fCorrelationsPro[cs][6]->GetXaxis()->SetBinLabel(binNo[cs][6]++,Form("%s(%d,%d,%d,%d,%d,%d,%d)",sCosSin[cs].Data(),n1,n2,n3,n4,n5,n6,n7));
+ if(fCorrelationsPro[cs][6]){fCorrelationsPro[cs][6]->GetXaxis()->SetBinLabel(binNo[cs][6]++,Form("%s(%d,%d,%d,%d,%d,%d,%d)",sCosSin[cs].Data(),n1,n2,n3,n4,n5,n6,n7));}
} // for(Int_t cs=0;cs<2;cs++)
nToBeFilled[6]++;
}
{
if(fCalculateOnlyCos && 1==cs){continue;}
else if(fCalculateOnlySin && 0==cs){continue;}
- fCorrelationsPro[cs][7]->GetXaxis()->SetBinLabel(binNo[cs][7]++,Form("%s(%d,%d,%d,%d,%d,%d,%d,%d)",sCosSin[cs].Data(),n1,n2,n3,n4,n5,n6,n7,n8));
+ if(fCorrelationsPro[cs][7]){fCorrelationsPro[cs][7]->GetXaxis()->SetBinLabel(binNo[cs][7]++,Form("%s(%d,%d,%d,%d,%d,%d,%d,%d)",sCosSin[cs].Data(),n1,n2,n3,n4,n5,n6,n7,n8));}
} // for(Int_t cs=0;cs<2;cs++)
nToBeFilled[7]++;
}
else if(fCalculateOnlySin && 0==cs){continue;}
for(Int_t c=0;c<fMaxCorrelator;c++) // [1p,2p,...,8p]
{
+ if(!fCorrelationsPro[cs][c]){continue;}
fCorrelationsPro[cs][c]->SetTitle(Form("%d-p correlations, %s terms, %d/%d in total",c+1,sCosSin[cs].Data(),nToBeFilled[c],nBinsTitle[c]));
fCorrelationsPro[cs][c]->GetXaxis()->SetRangeUser(0.,fCorrelationsPro[cs][c]->GetBinLowEdge(nToBeFilled[c]+1));
}
fDiffCorrelationsFlagsPro->GetXaxis()->SetBinLabel(5,"fUseDefaultBinning"); fDiffCorrelationsFlagsPro->Fill(4.5,fUseDefaultBinning);
fDiffCorrelationsList->Add(fDiffCorrelationsFlagsPro);
+ if(!fCalculateDiffCorrelations){return;}
+
// b) Book TProfile *fDiffCorrelationsPro[2][4] ([0=cos,1=sin][1p,2p,3p,4p]):
Bool_t fDiffStore[2][4] = {{0,1,1,1},{0,0,0,0}}; // store or not TBI promote to data member, and implement setter perhaps
Int_t markerColor[2] = {kRed,kGreen};
fFillKinematicsHist = fControlHistogramsFlagsPro->GetBinContent(2);
fFillMultDistributionsHist = fControlHistogramsFlagsPro->GetBinContent(3);
fFillMultCorrelationsHist = fControlHistogramsFlagsPro->GetBinContent(4);
+ fDontFill[0] = fControlHistogramsFlagsPro->GetBinContent(5);
+ fDontFill[1] = fControlHistogramsFlagsPro->GetBinContent(6);
+ fDontFill[2] = fControlHistogramsFlagsPro->GetBinContent(7);
if(!fFillControlHistograms){return;} // TBI is this safe enough
TString name[2][3] = {{"RP,phi","RP,pt","RP,eta"},{"POI,phi","POI,pt","POI,eta"}}; // [RP,POI][phi,pt,eta]
for(Int_t rp=0;rp<2;rp++) // [RP,POI]
{
+ if(fDontFill[rp]){continue;}
for(Int_t ppe=0;ppe<3;ppe++) // [phi,pt,eta]
{
fKinematicsHist[rp][ppe] = dynamic_cast<TH1D*>(fControlHistogramsList->FindObject(name[rp][ppe].Data()));
TString nameMult[3] = {"Multiplicity (RP)","Multiplicity (POI)","Multiplicity (REF)"}; // [RP,POI,reference multiplicity]
for(Int_t rprm=0;rprm<3;rprm++) // [RP,POI,reference multiplicity]
{
+ if(fDontFill[rprm]){continue;}
fMultDistributionsHist[rprm] = dynamic_cast<TH1D*>(fControlHistogramsList->FindObject(nameMult[rprm].Data()));
if(!fMultDistributionsHist[rprm] && fFillMultDistributionsHist){Fatal(sMethodName.Data(),"%s",nameMult[rprm].Data());} // TBI
} // for(Int_t rprm=0;rprm<3;rprm++) // [RP,POI,reference multiplicity]
- // f) Get pointers to TH2D *fMultCorrelationsHist[3]: TBI automatize the things here...
- fMultCorrelationsHist[0] = dynamic_cast<TH2D*>(fControlHistogramsList->FindObject("Multiplicity (RP vs. POI)"));
- if(!fMultCorrelationsHist[0] && fFillMultCorrelationsHist){Fatal(sMethodName.Data(),"Multiplicity (RP vs. POI)");} // TBI
- fMultCorrelationsHist[1] = dynamic_cast<TH2D*>(fControlHistogramsList->FindObject("Multiplicity (RP vs. REF)"));
- if(!fMultCorrelationsHist[1] && fFillMultCorrelationsHist){Fatal(sMethodName.Data(),"Multiplicity (RP vs. REF)");} // TBI
- fMultCorrelationsHist[2] = dynamic_cast<TH2D*>(fControlHistogramsList->FindObject("Multiplicity (POI vs. REF)"));
- if(!fMultCorrelationsHist[2] && fFillMultCorrelationsHist){Fatal(sMethodName.Data(),"Multiplicity (POI vs. REF)");} // TBI
+ // f) Get pointers to TH2I *fMultCorrelationsHist[3]: TBI automatize the things here (at some point...)...
+ if(!fDontFill[0] && !fDontFill[1])
+ {
+ fMultCorrelationsHist[0] = dynamic_cast<TH2I*>(fControlHistogramsList->FindObject("Multiplicity (RP vs. POI)"));
+ if(!fMultCorrelationsHist[0] && fFillMultCorrelationsHist){Fatal(sMethodName.Data(),"Multiplicity (RP vs. POI)");} // TBI
+ }
+ if(!fDontFill[0] && !fDontFill[2])
+ {
+ fMultCorrelationsHist[1] = dynamic_cast<TH2I*>(fControlHistogramsList->FindObject("Multiplicity (RP vs. REF)"));
+ if(!fMultCorrelationsHist[1] && fFillMultCorrelationsHist){Fatal(sMethodName.Data(),"Multiplicity (RP vs. REF)");} // TBI
+ }
+ if(!fDontFill[1] && !fDontFill[2])
+ {
+ fMultCorrelationsHist[2] = dynamic_cast<TH2I*>(fControlHistogramsList->FindObject("Multiplicity (POI vs. REF)"));
+ if(!fMultCorrelationsHist[2] && fFillMultCorrelationsHist){Fatal(sMethodName.Data(),"Multiplicity (POI vs. REF)");} // TBI
+ }
} // void AliFlowAnalysisWithMultiparticleCorrelations::GetPointersForControlHistograms()
else if(fCalculateOnlySin && 0==cs){continue;}
for(Int_t c=0;c<fMaxCorrelator;c++)
{
+ if(c==fDontGoBeyond){continue;}
+ if(fCalculateOnlyForHarmonicQC && c%2==0){continue;}
fCorrelationsPro[cs][c] = dynamic_cast<TProfile*>(fCorrelationsList->FindObject(Form("%dpCorrelations%s",c+1,sCosSin[cs].Data())));
if(!fCorrelationsPro[cs][c]){Fatal(sMethodName.Data(),"%dpCorrelations%s",c+1,sCosSin[cs].Data());}
}
if(!fCalculateDiffCorrelations){return;}
+ // TBI get all pointers below for diff. stuff eventually, not needed for the time being.
// d) Get pointers to TProfile *fDiffCorrelationsPro[2][4]: // TBI
/*
{
// Book all base objects.
- fInternalFlagsPro = new TProfile("fInternalFlagsPro","Internal flags and settings",5,0,5);
+ fInternalFlagsPro = new TProfile("fInternalFlagsPro","Internal flags and settings",8,0,8);
fInternalFlagsPro->SetLabelSize(0.05);
fInternalFlagsPro->SetStats(kFALSE);
fInternalFlagsPro->SetFillColor(kGray);
fInternalFlagsPro->GetXaxis()->SetBinLabel(3,"fMaxNoRPs"); fInternalFlagsPro->Fill(2.5,fMaxNoRPs);
fInternalFlagsPro->GetXaxis()->SetBinLabel(4,"fExactNoRPs"); fInternalFlagsPro->Fill(3.5,fExactNoRPs);
fInternalFlagsPro->GetXaxis()->SetBinLabel(5,"fPropagateError"); fInternalFlagsPro->Fill(4.5,fPropagateError);
+ fInternalFlagsPro->GetXaxis()->SetBinLabel(6,Form("fAnalysisTag = %s",fAnalysisTag.Data()));
+ fInternalFlagsPro->GetXaxis()->SetBinLabel(7,"fDumpThePoints"); fInternalFlagsPro->Fill(6.5,fDumpThePoints);
+ fInternalFlagsPro->GetXaxis()->SetBinLabel(8,"fMaxNoEventsPerFile"); fInternalFlagsPro->Fill(7.5,fMaxNoEventsPerFile);
fHistList->Add(fInternalFlagsPro);
return wCov;
-} // Double_t AliFlowAnalysisWithMultiparticleCorrelationsCovariance(const char *x, const char *y, TProfile2D *profile2D, Bool_t bUnbiasedEstimator = kFALSE)
+} // Double_t AliFlowAnalysisWithMultiparticleCorrelations::Covariance(const char *x, const char *y, TProfile2D *profile2D, Bool_t bUnbiasedEstimator = kFALSE)
//=======================================================================================================================
TString sType[2] = {"RP","POI"};
TString sVariable[3] = {"phi","pt","eta"};
fWeightsHist[rp][ppe]->SetName(Form("%s weights (%s)",sVariable[ppe].Data(),sType[rp].Data()));
- fWeightsHist[rp][ppe]->SetTitle(Form("%s weights (%s)",sVariable[ppe].Data(),sType[rp].Data()));
+ //fWeightsHist[rp][ppe]->SetTitle(Form("%s weights (%s)",sVariable[ppe].Data(),sType[rp].Data()));
// Flag:
fUseWeights[rp][ppe] = kTRUE;
//=======================================================================================================================
-void AliFlowAnalysisWithMultiparticleCorrelations::SetnBins(const char *type, const char *variable, const Int_t nBins)
+void AliFlowAnalysisWithMultiparticleCorrelations::SetnBins(const char *type, const char *variable, Int_t nBins)
{
// Set number of bins for histograms fKinematicsHist[2][3].
- TString sMethodName = "void AliFlowAnalysisWithMultiparticleCorrelations::SetnBins(const char *type, const char *variable, const Int_t nBins)";
+ TString sMethodName = "void AliFlowAnalysisWithMultiparticleCorrelations::SetnBins(const char *type, const char *variable, Int_t nBins)";
// Basic protection:
if(!(TString(type).EqualTo("RP") || TString(type).EqualTo("POI")))
fnBins[rp][ppe] = nBins;
-} // void AliFlowAnalysisWithMultiparticleCorrelations::SetnBins(const char *type, const char *variable, const Int_t nBins)
+} // void AliFlowAnalysisWithMultiparticleCorrelations::SetnBins(const char *type, const char *variable, Int_t nBins)
//=======================================================================================================================
-void AliFlowAnalysisWithMultiparticleCorrelations::SetMin(const char *type, const char *variable, const Double_t min)
+void AliFlowAnalysisWithMultiparticleCorrelations::SetMin(const char *type, const char *variable, Double_t min)
{
// Set min bin range for histograms fKinematicsHist[2][3].
- TString sMethodName = "void AliFlowAnalysisWithMultiparticleCorrelations::SetMin(const char *type, const char *variable, const Double_t min)";
+ TString sMethodName = "void AliFlowAnalysisWithMultiparticleCorrelations::SetMin(const char *type, const char *variable, Double_t min)";
// Basic protection:
if(!(TString(type).EqualTo("RP") || TString(type).EqualTo("POI")))
fMin[rp][ppe] = min;
-} // void AliFlowAnalysisWithMultiparticleCorrelations::SetMin(const char *type, const char *variable, const Double_t min)
+} // void AliFlowAnalysisWithMultiparticleCorrelations::SetMin(const char *type, const char *variable, Double_t min)
//=======================================================================================================================
-void AliFlowAnalysisWithMultiparticleCorrelations::SetMax(const char *type, const char *variable, const Double_t max)
+void AliFlowAnalysisWithMultiparticleCorrelations::SetMax(const char *type, const char *variable, Double_t max)
{
// Set max bin range for histograms fKinematicsHist[2][3].
- TString sMethodName = "void AliFlowAnalysisWithMultiparticleCorrelations::SetMax(const char *type, const char *variable, const Double_t max)";
+ TString sMethodName = "void AliFlowAnalysisWithMultiparticleCorrelations::SetMax(const char *type, const char *variable, Double_t max)";
// Basic protection:
if(!(TString(type).EqualTo("RP") || TString(type).EqualTo("POI")))
fMax[rp][ppe] = max;
-} // void AliFlowAnalysisWithMultiparticleCorrelations::SetMax(const char *type, const char *variable, const Double_t min)
+} // void AliFlowAnalysisWithMultiparticleCorrelations::SetMax(const char *type, const char *variable, Double_t min)
//=======================================================================================================================
-void AliFlowAnalysisWithMultiparticleCorrelations::SetnBinsMult(const char *type, const Int_t nBinsMult)
+void AliFlowAnalysisWithMultiparticleCorrelations::SetnBinsMult(const char *type, Int_t nBinsMult)
{
// Set number of bins for histograms fMultDistributionsHist[3].
- TString sMethodName = "void AliFlowAnalysisWithMultiparticleCorrelations::SetnBinsMult(const char *type, const Int_t nBinsMult)";
+ TString sMethodName = "void AliFlowAnalysisWithMultiparticleCorrelations::SetnBinsMult(const char *type, Int_t nBinsMult)";
// Basic protection:
if(!(TString(type).EqualTo("RP") || TString(type).EqualTo("POI") || TString(type).EqualTo("REF")))
fnBinsMult[rpr] = nBinsMult;
-} // void AliFlowAnalysisWithMultiparticleCorrelations::SetnBinsMult(const char *type, const Int_t nBinsMult)
+} // void AliFlowAnalysisWithMultiparticleCorrelations::SetnBinsMult(const char *type, Int_t nBinsMult)
//=======================================================================================================================
-void AliFlowAnalysisWithMultiparticleCorrelations::SetMinMult(const char *type, const Double_t minMult)
+void AliFlowAnalysisWithMultiparticleCorrelations::SetMinMult(const char *type, Double_t minMult)
{
// Set min bin range for histograms fMultDistributionsHist[3].
- TString sMethodName = "void AliFlowAnalysisWithMultiparticleCorrelations::SetMinMult(const char *type, const Double_t minMult)";
+ TString sMethodName = "void AliFlowAnalysisWithMultiparticleCorrelations::SetMinMult(const char *type, Double_t minMult)";
// Basic protection:
if(!(TString(type).EqualTo("RP") || TString(type).EqualTo("POI") || TString(type).EqualTo("REF")))
fMinMult[rpr] = minMult;
-} // void AliFlowAnalysisWithMultiparticleCorrelations::SetMinMult(const char *type const Double_t minMult)
+} // void AliFlowAnalysisWithMultiparticleCorrelations::SetMinMult(const char *type, Double_t minMult)
//=======================================================================================================================
-void AliFlowAnalysisWithMultiparticleCorrelations::SetMaxMult(const char *type, const Double_t maxMult)
+void AliFlowAnalysisWithMultiparticleCorrelations::SetMaxMult(const char *type, Double_t maxMult)
{
// Set max bin range for histograms fMultDistributionsHist[3].
- TString sMethodName = "void AliFlowAnalysisWithMultiparticleCorrelations::SetMaxMult(const char *type, const Double_t maxMult)";
+ TString sMethodName = "void AliFlowAnalysisWithMultiparticleCorrelations::SetMaxMult(const char *type, Double_t maxMult)";
// Basic protection:
if(!(TString(type).EqualTo("RP") || TString(type).EqualTo("POI") || TString(type).EqualTo("REF")))
fMaxMult[rpr] = maxMult;
-} // void AliFlowAnalysisWithMultiparticleCorrelations::SetMaxMult(const char *type, const Double_t minMult)
+} // void AliFlowAnalysisWithMultiparticleCorrelations::SetMaxMult(const char *type, Double_t minMult)
+
+//=======================================================================================================================
+
+void AliFlowAnalysisWithMultiparticleCorrelations::DumpThePoints(AliFlowEventSimple *anEvent)
+{
+ // Dump the points into the external file.
+
+ // Dumping format:
+ // Event <eventNo> Multiplicity <multRP>
+ // phi pt eta
+
+ TString sMethodName = "void AliFlowAnalysisWithMultiparticleCorrelations::DumpThePoints(AliFlowEventSimple *anEvent)";
+
+ // Basic protection:
+ if(!anEvent){Fatal(sMethodName.Data(),"if(!anEvent)");}
+ if(!fMultDistributionsHist[0]){Fatal(sMethodName.Data(),"if(!fMultDistributionsHist[0])");}
+ if(fMaxNoEventsPerFile<=0){Fatal(sMethodName.Data(),"if(fMaxNoEventsPerFile<=0)");}
+
+ // Determine event number and multiplicity:
+ Int_t eventNo = (Int_t) fMultDistributionsHist[0]->GetEntries(); // TBI this is a little bit shaky...
+ Int_t multRP = (Int_t) anEvent->GetNumberOfRPs(); // TBI shall I promote this variable into data member?
+
+ // Determine external file name:
+ Int_t fileCounter = (Int_t)((eventNo-1)/fMaxNoEventsPerFile);
+ TString filename = Form("%s_%d.dat",fAnalysisTag.Data(),fileCounter);
+
+ // Open external file and dump:
+ ofstream myfile;
+ myfile.open(filename.Data(),ios::app);
+ myfile << Form("Event %d Multiplicity %d\n",eventNo,multRP);
+ Int_t nTracks = (Int_t) anEvent->NumberOfTracks();
+ Double_t dPhi = 0., dPt = 0., dEta = 0.;
+ for(Int_t t=0;t<nTracks;t++) // loop over all tracks
+ {
+ AliFlowTrackSimple *pTrack = anEvent->GetTrack(t);
+ if(!pTrack){printf("\n AAAARGH: pTrack is NULL in MPC::DumpThePoints(AliFlowEventSimple *anEvent) !!!!"); continue;}
+ if(pTrack->InRPSelection())
+ {
+ dPhi = pTrack->Phi();
+ dPt = pTrack->Pt();
+ dEta = pTrack->Eta();
+ myfile<<Form("%f %f %f\n",dPhi,dPt,dEta);
+ //cout<<Form("%f %f %f",dPhi,dPt,dEta)<<endl;
+ }
+ } // for(Int_t t=0;t<nTracks;t++) // loop over all tracks
+ myfile<<"\n";
+ myfile.close();
+
+} // void AliFlowAnalysisWithMultiparticleCorrelations::DumpThePoints(AliFlowEventSimple *anEvent)
//=======================================================================================================================
+TH1D *AliFlowAnalysisWithMultiparticleCorrelations::GetHistogramWithWeights(const char *filePath, const char *listName, const char *type, const char *variable, const char *production)
+{
+ // Access from external ROOT file the desired histogram with weights.
+
+ // a) Return value;
+ // b) Method name;
+ // c) Basic protection for arguments;
+ // d) Check if the external ROOT file exists at specified path;
+ // e) Access the external ROOT file and fetch the desired histogram with weights;
+ // f) Close the external ROOT file.
+
+ // a) Return value:
+ TH1D *hist = NULL;
+
+ // b) Method name:
+ TString sMethodName = "Double_t AliFlowAnalysisWithMultiparticleCorrelations::GetHistogramWithWeights(const char *filePath, const char *listName, const char *type, const char *variable, const char *production)";
+
+ // c) Basic protection for arguments:
+ if(!(TString(type).EqualTo("RP") || TString(type).EqualTo("POI"))){Fatal(sMethodName.Data(),"!(TString(type).EqualTo...");}
+ if(!(TString(variable).EqualTo("phi") || TString(variable).EqualTo("pt") || TString(variable).EqualTo("eta"))){Fatal(sMethodName.Data(),"!(TString(variable).EqualTo...");}
+ if(!(TString(production).EqualTo("data") || TString(production).BeginsWith("LHC"))){Fatal(sMethodName.Data(),"!(TString(production).EqualTo...");}
+
+ // d) Check if the external ROOT file exists at specified path:
+ if(gSystem->AccessPathName(filePath,kFileExists))
+ {
+ Fatal(sMethodName.Data(),"if(gSystem->AccessPathName(filePath,kFileExists)), filePath = %s",filePath);
+ }
+
+ // e) Access the external ROOT file and fetch the desired histogram with weights:
+ TFile *weightsFile = TFile::Open(filePath,"READ");
+ TList *weightsFileLOK = weightsFile->GetListOfKeys();
+ if(!weightsFileLOK || weightsFileLOK->GetEntries() != 1) // TBI get rid of the 2nd condition at some point...
+ {
+ //printf("\n => if(!weightsFileLOK || weightsFileLOK->GetEntries() != 1)\n\n");
+ Fatal(sMethodName.Data(),"if(!weightsFileLOK || weightsFileLOK->GetEntries() != 1)");
+ }
+ // Access TDirectoryFile "weightsMPCanalysis":
+ TDirectoryFile *directoryFile = dynamic_cast<TDirectoryFile*>(weightsFile->Get("weightsMPCanalysis"));
+ if(!directoryFile)
+ {
+ //printf("\n => if(!directoryFile)\n\n");
+ Fatal(sMethodName.Data(),"if(!directoryFile)");
+ }
+ // Access the specified list:
+ TList *list = dynamic_cast<TList*>(directoryFile->Get(listName));
+ if(!list)
+ {
+ cout<<Form("listName = %s",listName)<<endl;
+ Warning(sMethodName.Data(),"if(!list)");
+ return NULL;
+ }
+ // Finally, access the desired histogram:
+ hist = dynamic_cast<TH1D*>(list->FindObject(Form("%s,%s,%s",type,variable,production)));
+ if(!hist)
+ {
+ //printf("\n => if(!hist)\n\n");
+ Warning(sMethodName.Data(),"if(!hist)");
+ return NULL;
+ } else { hist->SetDirectory(0); }
+
+ // f) Close the external ROOT file:
+ weightsFile->Close(); delete weightsFile;
+
+ return hist;
+
+} // TH1D *AliFlowAnalysisWithMultiparticleCorrelations::GetHistogramWithWeights(const char *filePath, const char *listName, const char *type, const char *variable, const char *production)
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+