--- /dev/null
+/*************************************************************************\r
+* Copyright(c) 1998-2008, ALICE Experiment at CERN, All rights reserved. *\r
+* *\r
+* Author: The ALICE Off-line Project. *\r
+* Contributors are mentioned in the code where appropriate. *\r
+* *\r
+* Permission to use, copy, modify and distribute this software and its *\r
+* documentation strictly for non-commercial purposes is hereby granted *\r
+* without fee, provided that the above copyright notice appears in all *\r
+* copies and that both the copyright notice and this permission notice *\r
+* appear in the supporting documentation. The authors make no claims *\r
+* about the suitability of this software for any purpose. It is *\r
+* provided "as is" without express or implied warranty. * \r
+**************************************************************************/
+
+/* $Id$ */\r
+\r
+/***************************************************************
+ * Only in this class nested loops are used for flow analysis. *
+ * Nested loops are used to evaluate: *
+ * *
+ * a) Distribution of relative angle difference (phi1-phi2). *
+ * *
+ * Author: Ante Bilandzic (abilandzic@gmail.com) *
+ ***************************************************************/ \r
+\r
+#define AliFlowAnalysisWithNestedLoops_cxx\r
+\r
+#include "Riostream.h"\r
+#include "AliFlowCommonConstants.h"\r
+#include "AliFlowCommonHist.h"\r
+#include "AliFlowCommonHistResults.h"\r
+\r
+#include "TMath.h"\r
+#include "TFile.h"\r
+#include "TList.h"\r
+#include "TProfile.h"\r
+\r
+#include "AliFlowEventSimple.h"\r
+#include "AliFlowTrackSimple.h"\r
+#include "AliFlowAnalysisWithNestedLoops.h"\r
+\r
+class TH1;\r
+class TList;\r\r
+ClassImp(AliFlowAnalysisWithNestedLoops)\r
+\r
+//================================================================================================================
+
+AliFlowAnalysisWithNestedLoops::AliFlowAnalysisWithNestedLoops(): \r
+fHistList(NULL),
+fHistListName(NULL),\r
+fAnalysisLabel(NULL),
+fAnalysisSettings(NULL),\r
+fCommonHists(NULL),
+fnBinsPhi(0),\r
+fPhiMin(0),\r
+fPhiMax(0),\r
+fPhiBinWidth(0),\r
+fnBinsPt(0),\r
+fPtMin(0),\r
+fPtMax(0),\r
+fPtBinWidth(0),\r
+fnBinsEta(0),\r
+fEtaMin(0),\r
+fEtaMax(0),\r
+fEtaBinWidth(0),
+fWeightsList(NULL),\r
+fUsePhiWeights(kFALSE),\r
+fUsePtWeights(kFALSE),\r
+fUseEtaWeights(kFALSE),\r
+fUseParticleWeights(NULL),\r
+fPhiWeights(NULL),\r
+fPtWeights(NULL),\r
+fEtaWeights(NULL),
+fResultsList(NULL),
+fRelativeAngleDistribution(NULL)\r
+{\r
+ // Constructor. \r
+ \r // Base list to hold all output objects:\r
+ fHistList = new TList();
+ fHistListName = new TString("cobjNL");\r
+ fHistList->SetName(fHistListName->Data());\r
+ fHistList->SetOwner(kTRUE);
+
+ // List to hold histograms with phi, pt and eta weights: \r
+ fWeightsList = new TList();
+
+ // List to hold objects with final results: \r
+ fResultsList = new TList();
+ \r
+} // AliFlowAnalysisWithNestedLoops::AliFlowAnalysisWithNestedLoops()\r
+ \r
+//================================================================================================================ \r
+\r
+AliFlowAnalysisWithNestedLoops::~AliFlowAnalysisWithNestedLoops()\r
+{\r
+ // Destructor.\r
+ \r
+ delete fHistList;\r
+\r
+} // end of AliFlowAnalysisWithNestedLoops::~AliFlowAnalysisWithNestedLoops()\r
+\r
+//================================================================================================================\r
+\r
+void AliFlowAnalysisWithNestedLoops::Init()\r
+{
+ // Initialize and book all objects.
+
+ // a) Cross check if the user settings make sense before starting;
+ // b) Access all common constants;
+ // c) Book and nest all lists in the base list fHistList;
+ // d) Book profile holding seetings for analysis with nested loops;\r
+ // e) Book common control histograms;
+ // f) Book all objects relevant for distributions;
+ // g) Book and fill histograms to hold phi, pt and eta weights.
+
+ this->CrossCheckSettings();\r
+ this->AccessConstants();
+ this->BookAndNestAllLists();
+ this->BookProfileHoldingSettings();\r
+ this->BookCommonHistograms();
+ this->BookEverythingForDistributions();
+ this->BookAndFillWeightsHistograms();\r
+\r
+} // end of void AliFlowAnalysisWithNestedLoops::Init()\r
+\r
+//================================================================================================================\r
+\r
+void AliFlowAnalysisWithNestedLoops::Make(AliFlowEventSimple* anEvent)\r
+{\r
+ // Running over data only in this method.\r
+
+ // a) Check all pointers used in method Make();
+ // b) Define local variables;
+ // c) Fill common control histograms;
+ // d) Loop over data and store for each distinct pair phi1-phi2 in fRelativeAngleDistribution.\r
+
+ // a) Check all pointers used in method Make():
+ this->CheckPointersUsedInMake();
+
+ // b) Define local variables:
+ Double_t dPhi1=0., dPhi2=0.; // azimuthal angles in the laboratory frame\r
+ AliFlowTrackSimple *aftsTrack = NULL; // simple track
+
+ // c) Fill common control histograms:
+ fCommonHists->FillControlHistograms(anEvent);
+
+ // d) Loop over data and store for each distinct pair phi1-phi2 in fRelativeAngleDistribution:\r
+ Int_t nPrim = anEvent->NumberOfTracks(); // nPrim = total number of primary tracks, i.e. nPrim = nRP + nPOI + rest, where:\r
+ // nRP = # of particles used to determine the reaction plane ("Reference Particles");\r
+ // nPOI = # of particles of interest for a detailed flow analysis ("Particles of Interest");\r
+ // rest = # of particles which are not niether RPs nor POIs. \r
+ // Start nested loops over data:
+ for(Int_t i=0;i<nPrim;i++) \r
+ { \r
+ aftsTrack=anEvent->GetTrack(i);\r
+ if(aftsTrack)
+ {\r
+ if(!aftsTrack->InRPSelection()) continue; // consider only tracks which are RPs \r
+ dPhi1 = aftsTrack->Phi();
+ for(Int_t j=0;j<nPrim;j++) \r
+ { \r
+ if(j==i) continue; // eliminating trivial contribution from autocorrelation
+ aftsTrack=anEvent->GetTrack(j);\r
+ if(aftsTrack)
+ {\r
+ if(!aftsTrack->InRPSelection()) continue; // consider only tracks which are RPs \r
+ dPhi2 = aftsTrack->Phi();
+ // Fill the histogram:
+ fRelativeAngleDistribution->Fill(dPhi1-dPhi2);
+ }
+ } // end of for(Int_t j=0;j<nPrim;j++)\r
+ } else // to if(aftsTrack)\r
+ {\r
+ cout<<endl;\r
+ cout<<" WARNING (NL): No particle! (i.e. aftsTrack is a NULL pointer in AFAWNL::Make().)"<<endl;\r
+ cout<<endl; \r
+ }
+ \r
+ } // end of for(Int_t i=0;i<nPrim;i++)
+ \r
+} // end of AliFlowAnalysisWithNestedLoops::Make(AliFlowEventSimple* anEvent)\r\r
+//================================================================================================================\r
+\r
+void AliFlowAnalysisWithNestedLoops::Finish()\r
+{\r
+ // Calculate the final results.
+
+ // a) Check all pointers used in this method;
+ // b) Access settings for analysis with mixed harmonics;
+
+ this->CheckPointersUsedInFinish();
+ this->AccessSettings();\r
+ \r
+} // end of AliFlowAnalysisWithNestedLoops::Finish()\r
+\r
+//================================================================================================================\r
+\r
+void AliFlowAnalysisWithNestedLoops::GetOutputHistograms(TList *outputListHistos)\r
+{\r
+ // Get pointers to all objects saved in the output file.
+
+ // a) Get pointers for common control histograms.\r \r
+ if(outputListHistos)\r
+ { \r
+ this->SetHistList(outputListHistos);
+ if(!fHistList)
+ {
+ cout<<endl;
+ cout<<" WARNING (NL): fHistList is NULL in AFAWNL::GOH() !!!!"<<endl;
+ cout<<endl;
+ exit(0);
+ }
+ this->GetPointersForCommonHistograms();
+ this->GetPointersForResultsHistograms();\r
+ } else
+ {
+ cout<<endl;
+ cout<<" WARNING (NL): outputListHistos is NULL in AFAWNL::GOH() !!!!"<<endl;
+ cout<<endl;
+ exit(0);
+ }
+ \r
+} // end of void AliFlowAnalysisWithNestedLoops::GetOutputHistograms(TList *outputListHistos)\r
+\r
+//================================================================================================================
+
+void AliFlowAnalysisWithNestedLoops::GetPointersForCommonHistograms() \r
+{\r
+ // Get pointers to common control histograms.\r
+ \r
+ TString commonHistsName = "AliFlowCommonHistNL";\r
+ AliFlowCommonHist *commonHist = dynamic_cast<AliFlowCommonHist*>(fHistList->FindObject(commonHistsName.Data()));\r
+ if(commonHist)
+ {
+ this->SetCommonHists(commonHist);
+ } else
+ {
+ cout<<endl;
+ cout<<" WARNING (NL): commonHist is NULL in AFAWNL::GPFCH() !!!!"<<endl;
+ cout<<endl;
+ exit(0);
+ }
+
+} // end of void AliFlowAnalysisWithNestedLoops::GetPointersForCommonHistograms()
+
+//================================================================================================================
+
+void AliFlowAnalysisWithNestedLoops::GetPointersForResultsHistograms() \r
+{\r
+ // Get pointers to histograms holding final results.\r
+ \r
+ TList *resultsList = NULL;\r
+ resultsList = dynamic_cast<TList*>(fHistList->FindObject("Results"));\r
+ if(!resultsList) \r
+ {\r
+ cout<<"WARNING: resultsList is NULL in AFAWNL::GPFRH() !!!!"<<endl;\r
+ exit(0); \r
+ }
+
+ TString relativeAngleDistributionName = "fRelativeAngleDistribution";\r
+ TH1D *relativeAngleDistribution = dynamic_cast<TH1D*>(resultsList->FindObject(relativeAngleDistributionName.Data()));\r
+ if(relativeAngleDistribution)\r
+ {\r
+ this->SetRelativeAngleDistribution(relativeAngleDistribution); \r
+ }
+
+} // end of void AliFlowAnalysisWithNestedLoops::GetPointersForResultsHistograms()
+\r
+//================================================================================================================
+
+void AliFlowAnalysisWithNestedLoops::WriteHistograms(TString outputFileName)\r
+{\r
+ // Store the final results in output .root file.\r
+ TFile *output = new TFile(outputFileName.Data(),"RECREATE");\r
+ fHistList->Write(fHistList->GetName(),TObject::kSingleKey);\r
+ delete output;\r
+}\r
+\r
+//================================================================================================================\r
+
+void AliFlowAnalysisWithNestedLoops::WriteHistograms(TDirectoryFile *outputFileName)
+{
+ // Store the final results in output .root file.
+ fHistList->SetName("cobjNL");
+ fHistList->SetOwner(kTRUE);
+ outputFileName->Add(fHistList);
+ outputFileName->Write(outputFileName->GetName(),TObject::kSingleKey);
+}
+
+//================================================================================================================
+
+void AliFlowAnalysisWithNestedLoops::BookAndNestAllLists()\r
+{
+ // Book and nest all list in base list fHistList.
+
+ // Weights:
+ fWeightsList->SetName("Weights");\r
+ fWeightsList->SetOwner(kTRUE); \r
+ fHistList->Add(fWeightsList);
+ // Results:
+ fResultsList->SetName("Results");\r
+ fResultsList->SetOwner(kTRUE); \r
+ fHistList->Add(fResultsList);
+
+} // end of void AliFlowAnalysisWithNestedLoops::BookAndNestAllLists()
+
+//================================================================================================================
+
+void AliFlowAnalysisWithNestedLoops::BookProfileHoldingSettings()\r
+{
+ // Book profile to hold all analysis settings.
+
+ TString analysisSettingsName = "fAnalysisSettings";\r
+ fAnalysisSettings = new TProfile(analysisSettingsName.Data(),"Settings for analysis with nested loops",1,0,1);
+ //fAnalysisSettings->GetXaxis()->SetBinLabel(1," ... ");
+ //fAnalysisSettings->Fill(0.5, ... );\r
+ fHistList->Add(fAnalysisSettings);
+
+} // end of void AliFlowAnalysisWithNestedLoops::BookProfileHoldingSettings()
+\r
+//================================================================================================================
+
+void AliFlowAnalysisWithNestedLoops::BookCommonHistograms()\r
+{\r
+ // Book common control histograms and common histograms for final results.
+ \r
+ TString commonHistsName = "AliFlowCommonHistNL";\r
+ fCommonHists = new AliFlowCommonHist(commonHistsName.Data());\r
+ fHistList->Add(fCommonHists); \r
+ \r
+} // end of void AliFlowAnalysisWithNestedLoops::BookCommonHistograms()\r
+
+//================================================================================================================
+
+void AliFlowAnalysisWithNestedLoops::BookEverythingForDistributions()\r
+{\r
+ // Book all objects relevant for distributions.
+
+ // Histogram to hold distribution of phi1-phi2:
+ TString relativeAngleDistributionName = "fRelativeAngleDistribution";\r
+ fRelativeAngleDistribution = new TH1D(relativeAngleDistributionName.Data(),"Relative angle distribution",720,-TMath::TwoPi(),TMath::TwoPi());
+ fRelativeAngleDistribution->GetYaxis()->SetTitle("#frac{dN}{#Delta #phi}");
+ fRelativeAngleDistribution->GetXaxis()->SetTitle("#Delta #phi");
+ fResultsList->Add(fRelativeAngleDistribution);
+
+} // end fo void AliFlowAnalysisWithNestedLoops::BookEverythingForDistributions()
+\r
+//================================================================================================================
+
+void AliFlowAnalysisWithNestedLoops::AccessConstants()\r
+{\r
+ // Access needed common constants from AliFlowCommonConstants.\r
+ \r
+ fnBinsPhi = AliFlowCommonConstants::GetMaster()->GetNbinsPhi();\r
+ fPhiMin = AliFlowCommonConstants::GetMaster()->GetPhiMin(); \r
+ fPhiMax = AliFlowCommonConstants::GetMaster()->GetPhiMax();\r
+ if(fnBinsPhi) fPhiBinWidth = (fPhiMax-fPhiMin)/fnBinsPhi; \r
+ fnBinsPt = AliFlowCommonConstants::GetMaster()->GetNbinsPt();\r
+ fPtMin = AliFlowCommonConstants::GetMaster()->GetPtMin(); \r
+ fPtMax = AliFlowCommonConstants::GetMaster()->GetPtMax();\r
+ if(fnBinsPt) fPtBinWidth = (fPtMax-fPtMin)/fnBinsPt; \r
+ fnBinsEta = AliFlowCommonConstants::GetMaster()->GetNbinsEta();\r
+ fEtaMin = AliFlowCommonConstants::GetMaster()->GetEtaMin(); \r
+ fEtaMax = AliFlowCommonConstants::GetMaster()->GetEtaMax();\r
+ if(fnBinsEta) fEtaBinWidth = (fEtaMax-fEtaMin)/fnBinsEta; \r
+ \r
+} // end of void AliFlowAnalysisWithNestedLoops::AccessConstants()
+
+//================================================================================================================\r
+\r
+void AliFlowAnalysisWithNestedLoops::CrossCheckSettings()\r
+{\r
+ // Cross-check if the user settings make sense. \r
+ \r
+} // end of void AliFlowAnalysisWithNestedLoops::CrossCheckSettings()\r
+
+//================================================================================================================\r
+
+void AliFlowAnalysisWithNestedLoops::BookAndFillWeightsHistograms()\r
+{\r
+ // Book and fill (by accessing file "weights.root") histograms which hold phi, pt and eta weights.\r
+\r
+ if(!fWeightsList)\r
+ {\r
+ cout<<"WARNING: fWeightsList is NULL in AFAWNL::BAFWH() !!!!"<<endl;\r
+ exit(0); \r
+ }\r
+ // Profile to hold flags for weights: \r
+ TString fUseParticleWeightsName = "fUseParticleWeightsNL";\r
+ fUseParticleWeights = new TProfile(fUseParticleWeightsName.Data(),"0 = particle weight not used, 1 = particle weight used ",3,0,3);\r
+ fUseParticleWeights->SetLabelSize(0.06);\r
+ (fUseParticleWeights->GetXaxis())->SetBinLabel(1,"w_{#phi}");\r
+ (fUseParticleWeights->GetXaxis())->SetBinLabel(2,"w_{p_{T}}");\r
+ (fUseParticleWeights->GetXaxis())->SetBinLabel(3,"w_{#eta}");\r
+ fUseParticleWeights->Fill(0.5,(Int_t)fUsePhiWeights);\r
+ fUseParticleWeights->Fill(1.5,(Int_t)fUsePtWeights);\r
+ fUseParticleWeights->Fill(2.5,(Int_t)fUseEtaWeights);\r
+ fWeightsList->Add(fUseParticleWeights); \r
+ // Phi-weights: \r
+ if(fUsePhiWeights)\r
+ {\r
+ if(fWeightsList->FindObject("phi_weights"))\r
+ {\r
+ fPhiWeights = dynamic_cast<TH1F*>(fWeightsList->FindObject("phi_weights"));\r
+ if(TMath::Abs(fPhiWeights->GetBinWidth(1)-fPhiBinWidth)>pow(10.,-6.))\r
+ {\r
+ cout<<endl;
+ cout<<"WARNING (NL): Inconsistent binning in histograms for phi-weights throughout the code."<<endl;\r
+ cout<<endl;
+ exit(0);\r
+ }\r
+ } else \r
+ {\r
+ cout<<"WARNING (NL): fWeightsList->FindObject(\"phi_weights\") is NULL in AFAWNL::BAFWH() !!!!"<<endl;\r
+ exit(0);\r
+ }\r
+ } // end of if(fUsePhiWeights)\r
+ // Pt-weights:\r
+ if(fUsePtWeights) \r
+ {\r
+ if(fWeightsList->FindObject("pt_weights"))\r
+ {\r
+ fPtWeights = dynamic_cast<TH1D*>(fWeightsList->FindObject("pt_weights"));\r
+ if(TMath::Abs(fPtWeights->GetBinWidth(1)-fPtBinWidth)>pow(10.,-6.))\r
+ {\r
+ cout<<endl;
+ cout<<"WARNING (NL): Inconsistent binning in histograms for pt-weights throughout the code."<<endl;\r
+ cout<<endl;
+ exit(0);\r
+ }\r
+ } else \r
+ {\r
+ cout<<"WARNING (NL): fWeightsList->FindObject(\"pt_weights\") is NULL in AFAWNL::BAFWH() !!!!"<<endl;\r
+ exit(0);\r
+ }\r
+ } // end of if(fUsePtWeights) \r
+ // Eta-weights:\r
+ if(fUseEtaWeights) \r
+ {\r
+ if(fWeightsList->FindObject("eta_weights"))\r
+ {\r
+ fEtaWeights = dynamic_cast<TH1D*>(fWeightsList->FindObject("eta_weights"));\r
+ if(TMath::Abs(fEtaWeights->GetBinWidth(1)-fEtaBinWidth)>pow(10.,-6.))\r
+ {\r
+ cout<<endl;
+ cout<<"WARNING (NL): Inconsistent binning in histograms for eta-weights throughout the code."<<endl;\r
+ cout<<endl;
+ exit(0);\r
+ }\r
+ } else \r
+ {\r
+ cout<<"WARNING: fUseEtaWeights && fWeightsList->FindObject(\"eta_weights\") is NULL in AFAWNL::BAFWH() !!!!"<<endl;\r
+ exit(0);\r
+ }\r
+ } // end of if(fUseEtaWeights)\r
+ \r
+} // end of AliFlowAnalysisWithNestedLoops::BookAndFillWeightsHistograms()
+
+//================================================================================================================
+\r
+void AliFlowAnalysisWithNestedLoops::CheckPointersUsedInMake()\r
+{\r
+ // Check pointers used in method Make().\r
+
+ if(!fRelativeAngleDistribution)
+ {
+ cout<<endl;
+ cout<<" WARNING (NL): !fRelativeAngleDistribution is NULL !!!!"<<endl;
+ cout<<endl;
+ exit(0);
+ }
+ \r
+} // end of AliFlowAnalysisWithNestedLoops::CheckPointersUsedInMake()
+
+//================================================================================================================
+\r
+void AliFlowAnalysisWithNestedLoops::CheckPointersUsedInFinish()\r
+{\r
+ // Check pointers used in method Finish().
+ \r
+} // end of AliFlowAnalysisWithNestedLoops::CheckPointersUsedInFinish()\r
+
+//================================================================================================================
+\r
+void AliFlowAnalysisWithNestedLoops::AccessSettings()\r
+{\r
+ // Access the settings for analysis with mixed harmonics.
+ \r
+} // end of AliFlowAnalysisWithNestedLoops::AccessSettings()
+
+//================================================================================================================
--- /dev/null
+/*
+ * Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved.
+ * See cxx source for full Copyright notice
+ * $Id$
+ */
+
+/***************************************************************
+ * Only in this class nested loops are used for flow analysis. *
+ * Nested loops are used to evaluate: *
+ * *
+ * a) Distribution of relative angle difference (phi1-phi2). *
+ * *
+ * Author: Ante Bilandzic (abilandzic@gmail.com) *
+ ***************************************************************/
+
+#ifndef ALIFLOWANALYSISNESTEDLOOPS_H
+#define ALIFLOWANALYSISNESTEDLOOPS_H
+
+#include "AliFlowCommonConstants.h" // needed as include
+
+class TList;
+class TFile;
+class TH1;
+class TProfile;
+
+class AliFlowEventSimple;
+class AliFlowCommonHist;
+class AliFlowCommonHistResults;
+
+//================================================================================================================
+
+class AliFlowAnalysisWithNestedLoops
+{
+ public:
+ AliFlowAnalysisWithNestedLoops();
+ virtual ~AliFlowAnalysisWithNestedLoops();
+ // 0.) Methods called in the constructor:
+ // 1.) Method Init() and methods called within Init():
+ virtual void Init();
+ virtual void CrossCheckSettings();
+ virtual void AccessConstants();
+ virtual void BookAndNestAllLists();
+ virtual void BookProfileHoldingSettings();
+ virtual void BookCommonHistograms();
+ virtual void BookEverythingForDistributions();
+ virtual void BookAndFillWeightsHistograms();
+ // 2.) Method Make() and methods called within Make():
+ virtual void Make(AliFlowEventSimple *anEvent);
+ virtual void CheckPointersUsedInMake();
+ // 3.) Method Finish() and methods called within Finish():
+ virtual void Finish();
+ virtual void CheckPointersUsedInFinish();
+ virtual void AccessSettings();
+ // 4.) Method GetOutputHistograms and method called within it:
+ virtual void GetOutputHistograms(TList *outputListHistos);
+ virtual void GetPointersForCommonHistograms();
+ virtual void GetPointersForResultsHistograms();
+ // 5.) Other methods:
+ virtual void WriteHistograms(TString outputFileName);
+ virtual void WriteHistograms(TDirectoryFile *outputFileName);
+ // 6.) Setters and getters:
+ void SetHistList(TList* const hl) {this->fHistList = hl;}
+ TList* GetHistList() const {return this->fHistList;}
+ void SetHistListName(const char *hln) {this->fHistListName->Append(*hln);};
+ TString *GetHistListName() const {return this->fHistListName;};
+ void SetAnalysisLabel(const char *al) {this->fAnalysisLabel->Append(*al);};
+ TString *GetAnalysisLabel() const {return this->fAnalysisLabel;};
+ void SetAnalysisSettings(TProfile* const as) {this->fAnalysisSettings = as;};
+ TProfile* GetAnalysisSettings() const {return this->fAnalysisSettings;};
+ void SetCommonHists(AliFlowCommonHist* const ch) {this->fCommonHists = ch;};
+ AliFlowCommonHist* GetCommonHists() const {return this->fCommonHists;};
+ void SetWeightsList(TList* const wl) {this->fWeightsList = (TList*)wl->Clone();}
+ TList* GetWeightsList() const {return this->fWeightsList;}
+ void SetUsePhiWeights(Bool_t const uPhiW) {this->fUsePhiWeights = uPhiW;};
+ Bool_t GetUsePhiWeights() const {return this->fUsePhiWeights;};
+ void SetUsePtWeights(Bool_t const uPtW) {this->fUsePtWeights = uPtW;};
+ Bool_t GetUsePtWeights() const {return this->fUsePtWeights;};
+ void SetUseEtaWeights(Bool_t const uEtaW) {this->fUseEtaWeights = uEtaW;};
+ Bool_t GetUseEtaWeights() const {return this->fUseEtaWeights;};
+ void SetUseParticleWeights(TProfile* const uPW) {this->fUseParticleWeights = uPW;};
+ TProfile* GetUseParticleWeights() const {return this->fUseParticleWeights;};
+ void SetPhiWeights(TH1F* const histPhiWeights) {this->fPhiWeights = histPhiWeights;};
+ TH1F* GetPhiWeights() const {return this->fPhiWeights;};
+ void SetPtWeights(TH1D* const histPtWeights) {this->fPtWeights = histPtWeights;};
+ TH1D* GetPtWeights() const {return this->fPtWeights;};
+ void SetEtaWeights(TH1D* const histEtaWeights) {this->fEtaWeights = histEtaWeights;};
+ TH1D* GetEtaWeights() const {return this->fEtaWeights;};
+ void SetResultsList(TList* const rlist) {this->fResultsList = rlist;}
+ TList* GetResultsList() const {return this->fResultsList;}
+ void SetRelativeAngleDistribution(TH1D* const rad) {this->fRelativeAngleDistribution = rad;};
+ TH1D* GetRelativeAngleDistribution() const {return this->fRelativeAngleDistribution;};
+
+ private:
+ AliFlowAnalysisWithNestedLoops(const AliFlowAnalysisWithNestedLoops& afawQc);
+ AliFlowAnalysisWithNestedLoops& operator=(const AliFlowAnalysisWithNestedLoops& afawQc);
+ // 0.) Base:
+ TList *fHistList; // base list to hold all output objects
+ TString *fHistListName; // name of base list
+ TString *fAnalysisLabel; // analysis label
+ TProfile *fAnalysisSettings; // profile to hold analysis settings
+ // 1.) Common:
+ AliFlowCommonHist *fCommonHists; // common control histograms (filled only with events with 3 or more tracks for 3-p correlators)
+ Int_t fnBinsPhi; // number of phi bins
+ Double_t fPhiMin; // minimum phi
+ Double_t fPhiMax; // maximum phi
+ Double_t fPhiBinWidth; // bin width for phi histograms
+ Int_t fnBinsPt; // number of pt bins
+ Double_t fPtMin; // minimum pt
+ Double_t fPtMax; // maximum pt
+ Double_t fPtBinWidth; // bin width for pt histograms
+ Int_t fnBinsEta; // number of eta bins
+ Double_t fEtaMin; // minimum eta
+ Double_t fEtaMax; // maximum eta
+ Double_t fEtaBinWidth; // bin width for eta histograms
+ // 2a.) Particle weights:
+ TList *fWeightsList; // list to hold all histograms with particle weights: fUseParticleWeights, fPhiWeights, fPtWeights and fEtaWeights
+ Bool_t fUsePhiWeights; // use phi weights
+ Bool_t fUsePtWeights; // use pt weights
+ Bool_t fUseEtaWeights; // use eta weights
+ TProfile *fUseParticleWeights; // profile with three bins to hold values of fUsePhiWeights, fUsePtWeights and fUseEtaWeights
+ TH1F *fPhiWeights; // histogram holding phi weights
+ TH1D *fPtWeights; // histogram holding phi weights
+ TH1D *fEtaWeights; // histogram holding phi weights
+ // 3.) Final results:
+ TList *fResultsList; // list holding objects with final results
+ TH1D *fRelativeAngleDistribution; // distribution of phi1-phi2 for all distinct pairs of particles
+
+ ClassDef(AliFlowAnalysisWithNestedLoops, 0);
+
+};
+
+//================================================================================================================
+
+#endif
+
+
+
+
+