28 #define AliFlowAnalysisWithNestedLoops_cxx
30 #include "Riostream.h"
58 fAnalysisSettings(NULL),
59 fOppositeChargesPOI(kFALSE),
60 fEvaluateDifferential3pCorrelator(kFALSE),
61 fPrintOnTheScreen(kTRUE),
76 fUsePhiWeights(kFALSE),
77 fUsePtWeights(kFALSE),
78 fUseEtaWeights(kFALSE),
79 fUseParticleWeights(NULL),
84 fEvaluateNestedLoopsForRAD(kTRUE),
85 fRelativeAngleDistribution(NULL),
88 fEvaluateNestedLoopsForQC(kFALSE),
90 fEvaluateNestedLoopsForMH(kFALSE),
91 f3pCorrelatorPro(NULL),
92 f5pCorrelatorPro(NULL)
97 fHistList =
new TList();
98 fHistListName =
new TString(
"cobjNL");
99 fHistList->SetName(fHistListName->Data());
100 fHistList->SetOwner(kTRUE);
103 fWeightsList =
new TList();
106 fListRAD =
new TList();
109 fListQC =
new TList();
112 fListMH =
new TList();
115 this->InitializeArraysForMH();
148 Bool_t oldHistAddStatus = TH1::AddDirectoryStatus();
149 TH1::AddDirectory(kFALSE);
151 TH1::SetDefaultSumw2();
164 TH1::AddDirectory(oldHistAddStatus);
214 cout<<
" WARNING (NL): fHistList is NULL in AFAWNL::GOH() !!!!"<<endl;
226 cout<<
" WARNING (NL): outputListHistos is NULL in AFAWNL::GOH() !!!!"<<endl;
239 TString analysisSettingsName =
"fAnalysisSettings";
240 TProfile *analysisSettings =
dynamic_cast<TProfile*
>(
fHistList->FindObject(analysisSettingsName.Data()));
247 cout<<
" WARNING (NL): analysisSettings is NULL in AFAWNL::GPFBH() !!!!"<<endl;
260 TString commonHistsName =
"AliFlowCommonHistNL";
268 cout<<
" WARNING (NL): commonHist is NULL in AFAWNL::GPFCH() !!!!"<<endl;
281 TList *listRAD = NULL;
282 listRAD =
dynamic_cast<TList*
>(
fHistList->FindObject(
"Relative Angle Distribution"));
285 cout<<
"WARNING: listRAD is NULL in AFAWNL::GPFRAD() !!!!"<<endl;
289 TString relativeAngleDistributionName =
"fRelativeAngleDistribution";
290 TH1D *relativeAngleDistribution =
dynamic_cast<TH1D*
>(listRAD->FindObject(relativeAngleDistributionName.Data()));
291 if(relativeAngleDistribution)
296 TString chargeName =
"fCharge";
297 TH1D *
charge =
dynamic_cast<TH1D*
>(listRAD->FindObject(chargeName.Data()));
311 TList *listMH = NULL;
312 listMH =
dynamic_cast<TList*
>(
fHistList->FindObject(
"Mixed Harmonics"));
315 cout<<
"WARNING: listMH is NULL in AFAWNL::GPFMH() !!!!"<<endl;
319 TString s3pCorrelatorProName =
"f3pCorrelatorPro";
320 TProfile *p3pCorrelatorPro =
dynamic_cast<TProfile*
>(listMH->FindObject(s3pCorrelatorProName.Data()));
325 TString s5pCorrelatorProName =
"f5pCorrelatorPro";
326 TProfile *p5pCorrelatorPro =
dynamic_cast<TProfile*
>(listMH->FindObject(s5pCorrelatorProName.Data()));
332 TString psdFlag[2] = {
"PtSum",
"PtDiff"};
333 for(
Int_t sd=0;sd<2;sd++)
335 TProfile *p3pCorrelatorVsPtSumDiffDirectPro =
dynamic_cast<TProfile*
>(listMH->FindObject(Form(
"f3pCorrelatorDirectVs%s",psdFlag[sd].
Data())));
336 if(p3pCorrelatorVsPtSumDiffDirectPro)
349 TFile *output =
new TFile(outputFileName.Data(),
"RECREATE");
362 outputFileName->Write(outputFileName->GetName(),TObject::kSingleKey);
386 fListRAD->SetName(
"Relative Angle Distribution");
390 fListQC->SetName(
"Q-cumulants");
394 fListMH->SetName(
"Mixed Harmonics");
406 TString analysisSettingsName =
"fAnalysisSettings";
407 fAnalysisSettings =
new TProfile(analysisSettingsName.Data(),
"Settings for analysis with nested loops",7,0,7);
421 fAnalysisSettings->GetXaxis()->SetBinLabel(7,
"fEvaluateDifferential3pCorrelator");
433 TString commonHistsName =
"AliFlowCommonHistNL";
445 TString relativeAngleDistributionName =
"fRelativeAngleDistribution";
451 TString chargeName =
"fCharge";
452 fCharge =
new TH1D(chargeName.Data(),
"Charges",3,0,3);
454 fCharge->GetXaxis()->SetBinLabel(1,
"+");
455 fCharge->GetXaxis()->SetBinLabel(2,
"-");
456 fCharge->GetXaxis()->SetBinLabel(3,
"rest");
500 cout<<
"WARNING: fWeightsList is NULL in AFAWNL::BAFWH() !!!!"<<endl;
504 TString fUseParticleWeightsName =
"fUseParticleWeightsNL";
505 fUseParticleWeights =
new TProfile(fUseParticleWeightsName.Data(),
"0 = particle weight not used, 1 = particle weight used ",3,0,3);
522 printf(
"WARNING: no phi weights object, bye!\n");
528 cout<<
"WARNING (NL): Inconsistent binning in histograms for phi-weights throughout the code."<<endl;
534 cout<<
"WARNING (NL): fWeightsList->FindObject(\"phi_weights\") is NULL in AFAWNL::BAFWH() !!!!"<<endl;
546 printf(
"WARNING: no pt weights object, bye!\n");
552 cout<<
"WARNING (NL): Inconsistent binning in histograms for pt-weights throughout the code."<<endl;
558 cout<<
"WARNING (NL): fWeightsList->FindObject(\"pt_weights\") is NULL in AFAWNL::BAFWH() !!!!"<<endl;
570 printf(
"WARNING: no eta weights object, bye!\n");
576 cout<<
"WARNING (NL): Inconsistent binning in histograms for eta-weights throughout the code."<<endl;
582 cout<<
"WARNING: fUseEtaWeights && fWeightsList->FindObject(\"eta_weights\") is NULL in AFAWNL::BAFWH() !!!!"<<endl;
620 cout<<
" WARNING (NL): fRelativeAngleDistribution is NULL in "<<where.Data()<<
"() !!!!"<<endl;
625 if(strcmp(where.Data(),
"Make") == 0)
630 else if(strcmp(where.Data(),
"Finish") == 0)
644 if(strcmp(where.Data(),
"Make") == 0)
650 cout<<
" WARNING (NL): f3pCorrelatorPro is NULL in Make() !!!!"<<endl;
657 cout<<
" WARNING (NL): f5pCorrelatorPro is NULL in Make() !!!!"<<endl;
662 for(
Int_t sd=0;sd<2;sd++)
667 cout<<
" WARNING (NL): "<<Form(
"f3pCorrelatorVsPtSumDiffDirectPro[%d]",sd)<<
" is NULL in Make() !!!!"<<endl;
673 else if(strcmp(where.Data(),
"Finish") == 0)
679 cout<<
" WARNING (NL): f3pCorrelatorPro is NULL in Finish() !!!!"<<endl;
686 cout<<
" WARNING (NL): f5pCorrelatorPro is NULL in Finish() !!!!"<<endl;
716 for(
Int_t sd=0;sd<2;sd++)
732 TString s3pCorrelatorProName =
"f3pCorrelatorPro";
739 f3pCorrelatorPro->GetXaxis()->SetBinLabel(1,
"#LT#LTcos(#phi_{1}+#phi_{2}-2#phi_{3})#GT#GT");
746 TString s5pCorrelatorProName =
"f5pCorrelatorPro";
753 f5pCorrelatorPro->GetXaxis()->SetBinLabel(1,
"#LT#LTcos(2#phi_{1}+2#phi_{2}+2#phi_{3}-3#phi_{4}-3#phi_{5})#GT#GT");
756 f5pCorrelatorPro->GetXaxis()->SetBinLabel(1,Form(
"#LT#LTcos[%i(2#phi_{1}+2#phi_{2}+2#phi_{3}-3#phi_{4}-3#phi_{5})]#GT#GT",
fHarmonic));
761 TString psdFlag[2] = {
"PtSum",
"PtDiff"};
762 TString psdTitleFlag[2] = {
"(p_{t,1}+p_{t,2})/2",
"#left|p_{t,1}-p_{t,2}#right|"};
764 for(
Int_t sd=0;sd<2;sd++)
793 for(
Int_t i=0;i<nPrim;i++)
799 dPhi1 = aftsTrack->
Phi();
800 for(
Int_t j=0;j<nPrim;j++)
807 dPhi2 = aftsTrack->
Phi();
815 cout<<
" WARNING (NL): No particle! (i.e. aftsTrack is a NULL pointer in AFAWNL::Make().)"<<endl;
832 Double_t phi1=0.,phi2=0.,phi3=0.,phi4=0.,phi5=0.;
834 Int_t charge1=0,charge2=0;
841 for(
Int_t i1=0;i1<nPrim;i1++)
845 phi1 = aftsTrack->
Phi();
846 for(
Int_t i2=0;i2<nPrim;i2++)
851 phi2 = aftsTrack->
Phi();
852 for(
Int_t i3=0;i3<nPrim;i3++)
854 if(i3==i1||i3==i2)
continue;
857 phi3 = aftsTrack->
Phi();
867 for(
Int_t i1=0;i1<nPrim;i1++)
871 phi1=aftsTrack->
Phi();
872 for(
Int_t i2=0;i2<nPrim;i2++)
877 phi2=aftsTrack->
Phi();
878 for(
Int_t i3=0;i3<nPrim;i3++)
880 if(i3==i1||i3==i2)
continue;
883 phi3=aftsTrack->
Phi();
884 for(
Int_t i4=0;i4<nPrim;i4++)
886 if(i4==i1||i4==i2||i4==i3)
continue;
889 phi4=aftsTrack->
Phi();
890 for(
Int_t i5=0;i5<nPrim;i5++)
892 if(i5==i1||i5==i2||i5==i3||i5==i4)
continue;
895 phi5=aftsTrack->
Phi();
896 f5pCorrelatorPro->Fill(0.5,cos(2.*n*phi1+2.*n*phi2+2.*n*phi3-3.*n*phi4-3.*n*phi5),1.);
906 for(
Int_t i1=0;i1<nPrim;i1++)
910 psi1 = aftsTrack->
Phi();
911 pt1 = aftsTrack->
Pt();
912 charge1 = aftsTrack->
Charge();
913 for(
Int_t i2=0;i2<nPrim;i2++)
915 if(i2==i1){
continue;}
918 psi2 = aftsTrack->
Phi();
919 pt2 = aftsTrack->
Pt();
920 charge2 = aftsTrack->
Charge();
922 for(
Int_t i3=0;i3<nPrim;i3++)
924 if(i3==i1||i3==i2){
continue;}
927 phi3 = aftsTrack->
Phi();
930 Double_t ptDiff = TMath::Abs(pt1-pt2);
931 Double_t diff3pCorrelator = TMath::Cos(n*(psi1+psi2-2.*phi3));
947 cout<<
"********************************************************************"<<endl;
948 cout<<
"********************************************************************"<<endl;
949 cout<<
" Nested Loops "<<endl;
954 cout<<
" Evaluated for relative angle distribution."<<endl;
959 cout<<
" Evaluated for mixed harmonics:"<<endl;
971 cout<<
" Evaluated also for differential 3p correlator "<<endl;
974 cout<<
" cos["<<
fHarmonic<<
"(psi1+psi2-2phi3)]. "<<endl;
977 cout<<
" cos(psi1+psi2-2phi3). "<<endl;
984 cout<<
" Not evaluated."<<endl;
987 cout<<
"********************************************************************"<<endl;
988 cout<<
"********************************************************************"<<endl;
Double_t GetEtaMax() const
virtual void EvaluateNestedLoopsForMH(AliFlowEventSimple *anEvent)
virtual void CheckPointersUsedInFinish()
TProfile * fUseParticleWeights
AliFlowTrackSimple * GetTrack(Int_t i)
void Set5pCorrelatorPro(TProfile *const s3pPro)
virtual void BookEverythingForMH()
virtual void Make(AliFlowEventSimple *anEvent)
virtual void StoreHarmonic()
virtual void EvaluateNestedLoopsForRAD(AliFlowEventSimple *anEvent)
virtual void WriteHistograms(TString outputFileName)
Bool_t fEvaluateNestedLoopsForQC
Int_t GetNbinsPhi() const
Double_t GetPtMin() const
TProfile * f5pCorrelatorPro
TProfile * f3pCorrelatorVsPtSumDiffDirectPro[2]
Int_t GetEventNSelTracksRP() const
Double_t GetPtMax() const
virtual void BookAndFillProfileHoldingSettings()
void SetHistList(TList *const hl)
Bool_t InRPSelection() const
Bool_t FillControlHistograms(AliFlowEventSimple *anEvent, TList *weightsList=NULL, Bool_t usePhiWeights=kFALSE, Bool_t usePtWeights=kFALSE, Bool_t useEtaWeights=kFALSE)
virtual void BookAndFillWeightsHistograms()
virtual ~AliFlowAnalysisWithNestedLoops()
virtual void BookEverythingForRAD()
Bool_t fOppositeChargesPOI
virtual void CheckPointersForMH(TString where)
virtual void GetOutputHistograms(TList *outputListHistos)
virtual void CheckPointersForRAD(TString where)
virtual void InitializeArraysForMH()
Double_t GetPhiMax() const
virtual void BookCommonHistograms()
virtual void GetPointersForCommonHistograms()
Bool_t fEvaluateDifferential3pCorrelator
Bool_t fEvaluateNestedLoopsForRAD
Int_t GetNbinsEta() const
static AliFlowCommonConstants * GetMaster()
virtual void CrossCheckSettings()
virtual void BookAndNestAllLists()
void SetCommonHists(AliFlowCommonHist *const ch)
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)
void SetCharge(TH1D *const rad)
TH1D * fRelativeAngleDistribution
void SetRelativeAngleDistribution(TH1D *const rad)
ClassImp(AliFlowAnalysisWithNestedLoops) AliFlowAnalysisWithNestedLoops
TProfile * fAnalysisSettings
AliFlowCommonHist * fCommonHists
virtual void GetPointersForRAD()
Double_t GetPhiMin() const
Double_t GetEtaMin() const
Bool_t fEvaluateNestedLoopsForMH
virtual void CheckPointersUsedInMake()
virtual void PrintOnTheScreen()
virtual void AccessSettings()
Bool_t InPOISelection(Int_t poiType=1) const
virtual void AccessConstants()
virtual void GetPointersForMH()
void SetAnalysisSettings(TProfile *const as)
void Set3pCorrelatorPro(TProfile *const s3pPro)
virtual void GetPointersForBaseHistograms()
TProfile * f3pCorrelatorPro
void Set3pCorrelatorVsPtSumDiffDirectPro(TProfile *const s3pcvpsdd, Int_t const sd)
Int_t NumberOfTracks() const