21 #define AliFlowAnalysisWithMCEventPlane_cxx
23 #include "Riostream.h"
26 #include "TProfile2D.h"
55 fCommonHistsRes(NULL),
57 fHistProIntFlow(NULL),
58 fHistProIntFlowVsM(NULL),
59 fHistProDiffFlowPtEtaRP(NULL),
60 fHistProDiffFlowPtRP(NULL),
61 fHistProDiffFlowEtaRP(NULL),
62 fHistProDiffFlowPtEtaPOI(NULL),
63 fHistProDiffFlowPtPOI(NULL),
64 fHistProDiffFlowEtaPOI(NULL),
65 fHistSpreadOfFlow(NULL),
67 fMixedHarmonicsList(NULL),
68 fEvaluateMixedHarmonics(kFALSE),
69 fMixedHarmonicsSettings(NULL),
79 fHistList =
new TList();
83 fMixedHarmonicsList =
new TList();
84 this->InitalizeArraysForMixedHarmonics();
102 TFile *output =
new TFile(outputFileName->Data(),
"RECREATE");
115 TFile *output =
new TFile(outputFileName.Data(),
"RECREATE");
131 outputFileName->Write(outputFileName->GetName(), TObject::kSingleKey);
138 cout<<
"---Analysis with the real MC Event Plane---"<<endl;
143 Bool_t oldHistAddStatus = TH1::AddDirectoryStatus();
144 TH1::AddDirectory(kFALSE);
162 fHistRP =
new TH1F(
"Flow_RP_MCEP",
"Flow_RP_MCEP",100,0.,3.14);
163 fHistRP->SetXTitle(
"Reaction Plane Angle");
167 fHistProIntFlow =
new TProfile(
"FlowPro_V_MCEP",
"FlowPro_V_MCEP",1,0.,1.);
173 fHistProIntFlowVsM =
new TProfile(
"FlowPro_VsM_MCEP",
"FlowPro_VsM_MCEP",10000,0.,10000.);
179 fHistProDiffFlowPtEtaRP =
new TProfile2D(
"FlowPro_VPtEtaRP_MCEP",
"FlowPro_VPtEtaRP_MCEP",iNbinsPt,dPtMin,dPtMax,iNbinsEta,dEtaMin,dEtaMax);
184 fHistProDiffFlowPtRP =
new TProfile(
"FlowPro_VPtRP_MCEP",
"FlowPro_VPtRP_MCEP",iNbinsPt,dPtMin,dPtMax);
189 fHistProDiffFlowEtaRP =
new TProfile(
"FlowPro_VetaRP_MCEP",
"FlowPro_VetaRP_MCEP",iNbinsEta,dEtaMin,dEtaMax);
194 fHistProDiffFlowPtEtaPOI =
new TProfile2D(
"FlowPro_VPtEtaPOI_MCEP",
"FlowPro_VPtEtaPOI_MCEP",iNbinsPt,dPtMin,dPtMax,iNbinsEta,dEtaMin,dEtaMax);
199 fHistProDiffFlowPtPOI =
new TProfile(
"FlowPro_VPtPOI_MCEP",
"FlowPro_VPtPOI_MCEP",iNbinsPt,dPtMin,dPtMax);
204 fHistProDiffFlowEtaPOI =
new TProfile(
"FlowPro_VetaPOI_MCEP",
"FlowPro_VetaPOI_MCEP",iNbinsEta,dEtaMin,dEtaMax);
218 TH1::AddDirectory(oldHistAddStatus);
251 TProfile *flowEBE =
new TProfile(
"flowEBE",
"flowEBE",1,0,1);
257 for (
Int_t i=0;i<iNumberOfTracks;i++)
262 dPhi = pTrack->
Phi();
265 dEta = pTrack->
Eta();
271 flowEBE->Fill(0.,dv);
280 dPhi = pTrack->
Phi();
285 dEta = pTrack->
Eta();
310 if (outputListHistos) {
313 (outputListHistos->FindObject(
"AliFlowCommonHistMCEP"));
316 (outputListHistos->FindObject(
"AliFlowCommonHistResultsMCEP"));
318 TProfile *pHistProIntFlow =
dynamic_cast<TProfile*
>
319 (outputListHistos->FindObject(
"FlowPro_V_MCEP"));
321 TProfile2D *pHistProDiffFlowPtEtaRP =
dynamic_cast<TProfile2D*
>
322 (outputListHistos->FindObject(
"FlowPro_VPtEtaRP_MCEP"));
324 TProfile *pHistProDiffFlowPtRP =
dynamic_cast<TProfile*
>
325 (outputListHistos->FindObject(
"FlowPro_VPtRP_MCEP"));
327 TProfile *pHistProDiffFlowEtaRP =
dynamic_cast<TProfile*
>
328 (outputListHistos->FindObject(
"FlowPro_VetaRP_MCEP"));
330 TProfile2D *pHistProDiffFlowPtEtaPOI =
dynamic_cast<TProfile2D*
>
331 (outputListHistos->FindObject(
"FlowPro_VPtEtaPOI_MCEP"));
333 TProfile *pHistProDiffFlowPtPOI =
dynamic_cast<TProfile*
>
334 (outputListHistos->FindObject(
"FlowPro_VPtPOI_MCEP"));
336 TProfile *pHistProDiffFlowEtaPOI =
dynamic_cast<TProfile*
>
337 (outputListHistos->FindObject(
"FlowPro_VetaPOI_MCEP"));
339 if (pCommonHists && pCommonHistResults && pHistProIntFlow &&
340 pHistProDiffFlowPtRP && pHistProDiffFlowEtaRP &&
341 pHistProDiffFlowPtPOI && pHistProDiffFlowEtaPOI) {
352 cout<<
"WARNING: Histograms needed to run Finish() are not accessible!"<<endl; }
356 TList *pMixedHarmonicsList =
dynamic_cast<TList*
>
357 (outputListHistos->FindObject(
"Mixed Harmonics"));
360 }
else { cout <<
"histogram list pointer is empty" << endl;}
370 if(mixedHarmonicsList)
376 cout<<
"WARNING (MCEP): mixedHarmonicsList in NULL in MCEP::GetOutputHistoramsForMixedHarmonics() !!!! "<<endl;
387 if (
fDebug) cout<<
"AliFlowAnalysisWithMCEventPlane::Terminate()"<<endl;
403 cout<<
"dV"<<
fHarmonic<<
"{MC} is "<<dV<<
" +- "<<dErrV<<endl;
406 TH1F* fHistPtRP = NULL;
418 for(
Int_t b=1;b<=iNbinsPt;b++)
425 dYieldPtRP = fHistPtRP->GetBinContent(b);
426 dVRP += dvPtRP*dYieldPtRP;
427 dSumRP += dYieldPtRP;
429 dErrVRP += dYieldPtRP*dYieldPtRP*dErrvPtRP*dErrvPtRP;
433 if (!(TMath::AreEqualAbs(dSumRP, 0.0, 1e-10)) ) {
435 dErrVRP /= (dSumRP*dSumRP);
436 dErrVRP = TMath::Sqrt(dErrVRP);
440 cout<<
"dV"<<
fHarmonic<<
"{MC} (RP) is "<<dVRP<<
" +- "<<dErrVRP<<endl;
445 for(
Int_t b=1;b<=iNbinsEta;b++)
453 TH1F* fHistPtPOI = NULL;
468 for(
Int_t b=1;b<=iNbinsPt;b++){
475 dYieldPtPOI = fHistPtPOI->GetBinContent(b);
476 dVPOI += dvproPtPOI*dYieldPtPOI;
477 dSumPOI += dYieldPtPOI;
479 dErrVPOI += dYieldPtPOI*dYieldPtPOI*dErrdifcombPtPOI*dErrdifcombPtPOI;
482 }
else { cout<<
"fHistProFlow is NULL"<<endl; }
484 if (!(TMath::AreEqualAbs(dSumPOI, 0.0, 1e-10)) ) {
486 dErrVPOI /= (dSumPOI*dSumPOI);
487 dErrVPOI = TMath::Sqrt(dErrVPOI);
489 cout<<
"dV"<<
fHarmonic<<
"{MC} (POI) is "<<dVPOI<<
" +- "<<dErrVPOI<<endl;
496 for(
Int_t b=1;b<=iNbinsEta;b++)
515 for(
Int_t cs=0;cs<2;cs++)
519 for(
Int_t sd=0;sd<2;sd++)
539 TString mixedHarmonicsSettingsName =
"fMixedHarmonicsSettings";
540 fMixedHarmonicsSettings =
new TProfile(mixedHarmonicsSettingsName.Data(),
"Settings for Mixed Harmonics",4,0,4);
553 TString cosSinFlag[2] = {
"Cos",
"Sin"};
554 TString cosSinTitleFlag[2] = {
"cos[m#phi_{pair}-n#psi_{RP}]",
"sin[m#phi_{pair}-n#psi_{RP}]"};
555 if(fNinCorrelator == 2 && fMinCorrelator == 2 && TMath::Abs(
fXinPairAngle-0.5)<1.e-44)
557 cosSinTitleFlag[0] =
"cos[#phi_{1}+#phi_{2}-2#psi_{RP})]";
558 cosSinTitleFlag[1] =
"sin[#phi_{1}+#phi_{2}-2#psi_{RP})]";
560 TString psdFlag[2] = {
"Sum",
"Diff"};
561 TString psdTitleFlag[2] = {
"(p_{t,1}+p_{t,2})/2",
"#left|p_{t,1}-p_{t,2}#right|"};
562 TString pairCorrelatorName =
"fPairCorrelator";
563 TString pairCorrelatorVsMName =
"fPairCorrelatorVsM";
564 TString pairCorrelatorVsPtSumDiffName =
"fPairCorrelatorVsPt";
568 for(
Int_t cs=0;cs<2;cs++)
570 fPairCorrelator[cs] =
new TProfile(Form(
"%s, %s",pairCorrelatorName.Data(),cosSinFlag[cs].Data()),cosSinTitleFlag[cs].
Data(),1,0.,1.);
578 for(
Int_t sd=0;sd<2;sd++)
580 fPairCorrelatorVsPtSumDiff[cs][sd] =
new TProfile(Form(
"%s%s, %s",pairCorrelatorVsPtSumDiffName.Data(),psdFlag[sd].Data(),cosSinFlag[cs].Data()),cosSinTitleFlag[cs].
Data(),iNbinsPt,dPtMin,dPtMax);
607 for(
Int_t i=0;i<iNumberOfTracks;i++)
612 dPhi1 = pTrack->
Phi();
615 for(
Int_t j=0;j<iNumberOfTracks;j++)
621 dPhi2 = pTrack->
Phi();
624 Double_t dPhiPair = x*dPhi1+(1.-x)*dPhi2;
626 Double_t dPtDiff = TMath::Abs(dPt1-dPt2);
627 fPairCorrelator[0]->Fill(0.5,TMath::Cos(m*dPhiPair-n*dReactionPlane),1.);
628 fPairCorrelator[1]->Fill(0.5,TMath::Sin(m*dPhiPair-n*dReactionPlane),1.);
Double_t GetEtaMax() const
virtual AliFlowVector GetQ(Int_t n=2, TList *weightsList=NULL, Bool_t usePhiWeights=kFALSE, Bool_t usePtWeights=kFALSE, Bool_t useEtaWeights=kFALSE)
void SetHistProDiffFlowPtPOI(TProfile *const aHistProDiffFlowPtPOI)
virtual void InitalizeArraysForMixedHarmonics()
void SetHistProDiffFlowPtRP(TProfile *const aHistProDiffFlowPtRP)
AliFlowTrackSimple * GetTrack(Int_t i)
TProfile * fPairCorrelatorVsPtSumDiff[2][2]
Double_t GetPtMin() const
Bool_t FillDifferentialFlowPtRP(Int_t aBin, Double_t av, Double_t anError)
Int_t GetEventNSelTracksRP() const
AliFlowCommonHist * fCommonHists
TProfile * fPairCorrelatorVsM[2]
Double_t GetPtMax() const
void SetHistProDiffFlowEtaPOI(TProfile *const aHistProDiffFlowEtaPOI)
void GetOutputHistograms(TList *outputListHistos)
Bool_t InRPSelection() const
Bool_t FillControlHistograms(AliFlowEventSimple *anEvent, TList *weightsList=NULL, Bool_t usePhiWeights=kFALSE, Bool_t usePtWeights=kFALSE, Bool_t useEtaWeights=kFALSE)
TProfile * fHistProDiffFlowPtPOI
ClassImp(AliFlowAnalysisWithMCEventPlane) AliFlowAnalysisWithMCEventPlane
void WriteHistograms(TString *outputFileName)
void Make(AliFlowEventSimple *anEvent)
Bool_t FillIntegratedFlowRP(Double_t aV, Double_t anError)
TProfile * fMixedHarmonicsSettings
TProfile * fHistProDiffFlowPtRP
TProfile2D * fHistProDiffFlowPtEtaRP
TProfile * fPairCorrelator[2]
TProfile * fHistProDiffFlowEtaRP
Int_t GetNbinsEta() const
TProfile * fHistProIntFlow
static AliFlowCommonConstants * GetMaster()
virtual void EvaluateMixedHarmonics(AliFlowEventSimple *anEvent)
void SetHistProDiffFlowEtaRP(TProfile *const aHistProDiffFlowEtaRP)
void SetHistProDiffFlowPtEtaPOI(TProfile2D *const aHistProDiffFlowPtEtaPOI)
virtual void BookObjectsForMixedHarmonics()
AliFlowCommonHistResults * fCommonHistsRes
TList * fMixedHarmonicsList
virtual ~AliFlowAnalysisWithMCEventPlane()
TProfile * fHistProIntFlowVsM
TList * fHistList
flag for lyz analysis: more print statements
Bool_t Data(TH1F *h, Double_t *rangefit, Bool_t writefit, Double_t &sgn, Double_t &errsgn, Double_t &bkg, Double_t &errbkg, Double_t &sgnf, Double_t &errsgnf, Double_t &sigmafit, Int_t &status)
Bool_t FillIntegratedFlow(Double_t aV, Double_t anError)
Bool_t FillDifferentialFlowEtaPOI(Int_t aBin, Double_t av, Double_t anError)
Bool_t FillIntegratedFlowPOI(Double_t aV, Double_t anError)
void SetHistProDiffFlowPtEtaRP(TProfile2D *const aHistProDiffFlowPtEtaRP)
TProfile2D * fHistProDiffFlowPtEtaPOI
Bool_t FillDifferentialFlowPtPOI(Int_t aBin, Double_t av, Double_t anError)
TProfile * fHistProDiffFlowEtaPOI
void SetCommonHistsRes(AliFlowCommonHistResults *const aCommonHistResult)
Double_t GetEtaMin() const
Double_t GetMCReactionPlaneAngle() const
void SetCommonHists(AliFlowCommonHist *const aCommonHist)
Bool_t InPOISelection(Int_t poiType=1) const
virtual void GetOutputHistoramsForMixedHarmonics(TList *mixedHarmonicsList)
Bool_t FillDifferentialFlowEtaRP(Int_t aBin, Double_t av, Double_t anError)
Bool_t fEvaluateMixedHarmonics
Int_t NumberOfTracks() const
void SetHistProIntFlow(TProfile *const aHistProIntFlow)