]> git.uio.no Git - u/mrichter/AliRoot.git/blobdiff - PWG2/FLOW/AliFlowAnalysisWithCumulants.h
overloaded write method
[u/mrichter/AliRoot.git] / PWG2 / FLOW / AliFlowAnalysisWithCumulants.h
index 219b52f9c95ccd79959f1a3bbe689c3a1959eded..2927d035a6e296a0f436ffd5e5a5d7796128a67d 100644 (file)
-#ifndef AliFlowAnalysisWithCumulants_H
-#define AliFlowAnalysisWithCumulants_H
+/* 
+ * Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. 
+ * See cxx source for full Copyright notice 
+ * $Id$ 
+ */
 
-//******************************* 
-// flow analysis with cumulants *   
-// author: Ante Bilandzic       * 
-// email: anteb@nikhef.nl       *
-//******************************* 
+/******************************** 
+ * flow analysis with cumulants * 
+ *                              * 
+ * author: Ante Bilandzic       * 
+ *          (anteb@nikhef.nl)   *
+ *******************************/ 
+
+#ifndef ALIFLOWANALYSISWITHCUMULANTS_H
+#define ALIFLOWANALYSISWITHCUMULANTS_H
 
 #include "AliFlowCommonConstants.h"
 #include "AliFlowCumuConstants.h"
 
-class TH1;
 class TObjArray;
 class TList;
 class TFile;
 
+class TH1;
+class TProfile;
+class TProfile2D;
+class TProfile3D;
+
 class AliFlowEventSimple;
 class AliFlowTrackSimple;
 class AliFlowCommonHist;
 class AliFlowCommonHistResults;
 class AliFlowVector;
 
-class AliFlowAnalysisWithCumulants {
+//================================================================================================================
+
+class AliFlowAnalysisWithCumulants{
  public:
   AliFlowAnalysisWithCumulants();
-  virtual ~AliFlowAnalysisWithCumulants();
+  virtual ~AliFlowAnalysisWithCumulants(); 
   
   virtual void CreateOutputObjects();
   virtual void Make(AliFlowEventSimple* anEvent);
   virtual void Finish();
+  virtual void WriteHistograms(TString* outputFileName);
+  virtual void WriteHistograms(TString outputFileName);
+  
+//----------------------------------------------------------------------------------------------------------------
+//                                            setters and getters                                     fBinWidth            
+//----------------------------------------------------------------------------------------------------------------
+  TList* GetHistList() const {return this->fHistList;}      //output histogram list
+  
+  void SetIntFlowResults(TH1D* ifr)  {this->fIntFlowResultsGFC = ifr;};
+  TH1D* GetIntFlowResults() const    {return this->fIntFlowResultsGFC;};
+  
+  void SetDiffFlowResults2nd(TH1D* diff2nd)  {this->fDiffFlowResults2ndOrderGFC = diff2nd;};
+  TH1D* GetDiffFlowResults2nd() const        {return this->fDiffFlowResults2ndOrderGFC;};
+  
+  void SetDiffFlowResults4th(TH1D* diff4th)  {this->fDiffFlowResults4thOrderGFC = diff4th;};
+  TH1D* GetDiffFlowResults4th() const        {return this->fDiffFlowResults4thOrderGFC;};
+  
+  void SetDiffFlowResults6th(TH1D* diff6th)  {this->fDiffFlowResults6thOrderGFC = diff6th;};
+  TH1D* GetDiffFlowResults6th() const        {return this->fDiffFlowResults6thOrderGFC;};
+  
+  void SetDiffFlowResults8th(TH1D* diff8th)  {this->fDiffFlowResults8thOrderGFC = diff8th;};
+  TH1D* GetDiffFlowResults8th() const        {return this->fDiffFlowResults8thOrderGFC;};
+  
+  void SetCommonHistsResults2nd(AliFlowCommonHistResults* chr2nd)  {this->fCommonHistsResults2nd = chr2nd;};
+  AliFlowCommonHistResults* GetCommonHistsResults2nd() const       {return this->fCommonHistsResults2nd;};
+  
+  void SetCommonHistsResults4th(AliFlowCommonHistResults* chr4th)  {this->fCommonHistsResults4th = chr4th;};
+  AliFlowCommonHistResults* GetCommonHistsResults4th() const       {return this->fCommonHistsResults4th;};
+  
+  void SetCommonHistsResults6th(AliFlowCommonHistResults* chr6th)  {this->fCommonHistsResults6th = chr6th;};
+  AliFlowCommonHistResults* GetCommonHistsResults6th() const       {return this->fCommonHistsResults6th;};
+  
+  void SetCommonHistsResults8th(AliFlowCommonHistResults* chr8th)  {this->fCommonHistsResults8th = chr8th;};
+  AliFlowCommonHistResults* GetCommonHistsResults8th() const       {return this->fCommonHistsResults8th;};
+  
+  void SetIntFlowGenFun(TProfile2D* ifgf)  {this->fIntFlowGenFun = ifgf;};
+  TProfile2D* GetIntFlowGenFun() const     {return this->fIntFlowGenFun;};
 
-  // Output 
-  void SetHistFileName(TString name)  {this->fHistFileName = name ;} // Sets output file name
-  TString GetHistFileName() const { return this->fHistFileName ; } // Gets output file name
-  TFile* GetHistFile() const { return this->fHistFile ; }     // Gets output file
+  void SetIntFlowGenFun4(TProfile2D* ifgf4)  {this->fIntFlowGenFun4 = ifgf4;}; //(only for other system of Eq.)
+  TProfile2D* GetIntFlowGenFun4() const      {return this->fIntFlowGenFun4;};  //(only for other system of Eq.)
+  
+  void SetIntFlowGenFun6(TProfile2D* ifgf6)  {this->fIntFlowGenFun6 = ifgf6;}; //(only for other system of Eq.)
+  TProfile2D* GetIntFlowGenFun6() const      {return this->fIntFlowGenFun6;};  //(only for other system of Eq.)
+  
+  void SetIntFlowGenFun8(TProfile2D* ifgf8)  {this->fIntFlowGenFun8 = ifgf8;}; //(only for other system of Eq.)
+  TProfile2D* GetIntFlowGenFun8() const      {return this->fIntFlowGenFun8;};  //(only for other system of Eq.)
+  
+  void SetIntFlowGenFun16(TProfile2D* ifgf16)  {this->fIntFlowGenFun16 = ifgf16;}; //(only for other system of Eq.)
+  TProfile2D* GetIntFlowGenFun16() const       {return this->fIntFlowGenFun16;};   //(only for other system of Eq.)
+  void SetAverageMultiplicity4(TProfile* am4)     {this->fAvMultIntFlow4GFC = am4;};  //(only for other system of Eq.)
+  TProfile* GetAverageMultiplicity4() const       {return this->fAvMultIntFlow4GFC;}; //(only for other system of Eq.)
+  
+  void SetAverageMultiplicity6(TProfile* am6)     {this->fAvMultIntFlow6GFC = am6;};  //(only for other system of Eq.)
+  TProfile* GetAverageMultiplicity6() const       {return this->fAvMultIntFlow6GFC;}; //(only for other system of Eq.)
+  
+  void SetAverageMultiplicity8(TProfile* am8)     {this->fAvMultIntFlow8GFC = am8;};  //(only for other system of Eq.)
+  TProfile* GetAverageMultiplicity8() const       {return this->fAvMultIntFlow8GFC;}; //(only for other system of Eq.)
+  
+  void SetAverageMultiplicity16(TProfile* am16)    {this->fAvMultIntFlow16GFC = am16;}; //(only for other system of Eq.)
+  TProfile* GetAverageMultiplicity16() const       {return this->fAvMultIntFlow16GFC;}; //(only for other system of Eq.)
+  
+  //----------------------------------------------------------------------------------------------------------
+  //RP = Reaction Plane (RP denotes particles used to determine the reaction plane)
+  void SetDiffFlowPtRPGenFunRe(TProfile3D* dfRPPtgfRe)  {this->fDiffFlowPtRPGenFunRe = dfRPPtgfRe;};
+  TProfile3D* GetDiffFlowPtRPGenFunRe() const            {return this->fDiffFlowPtRPGenFunRe;};
+  
+  void SetDiffFlowPtRPGenFunIm(TProfile3D* dfRPPtgfIm)  {this->fDiffFlowPtRPGenFunIm = dfRPPtgfIm;};
+  TProfile3D* GetDiffPtRPFlowGenFunIm() const            {return this->fDiffFlowPtRPGenFunIm;};
+  
+  void SetNumberOfParticlesPerPtBinRP(TProfile* nopppbRP) {this->fPtBinRPNoOfParticles = nopppbRP;};
+  TProfile* GetNumberOfParticlesPerPtBinRP() const         {return this->fPtBinRPNoOfParticles;};  
+  
+  void SetDiffFlowEtaRPGenFunRe(TProfile3D* dfEtaRPgfRe)   {this->fDiffFlowEtaRPGenFunRe = dfEtaRPgfRe;};
+  TProfile3D* GetDiffFlowEtaRPGenFunRe() const              {return this->fDiffFlowEtaRPGenFunRe;};
+  
+  void SetDiffFlowEtaRPGenFunIm(TProfile3D* dfEtaRPgfIm)   {this->fDiffFlowEtaRPGenFunIm = dfEtaRPgfIm;};
+  TProfile3D* GetDiffFlowEtaRPGenFunIm() const              {return this->fDiffFlowEtaRPGenFunIm;};
+  
+  void SetNumberOfParticlesPerEtaBinRP(TProfile* noppebRP)    {this->fEtaBinRPNoOfParticles = noppebRP;};
+  TProfile* GetNumberOfParticlesPerEtaBinRP() const            {return this->fEtaBinRPNoOfParticles;}; 
+  //----------------------------------------------------------------------------------------------------------
+   
+  //----------------------------------------------------------------------------------------------------------
+  //POI = Particles Of Interest (POI denotes particles of interest for the final physical results for int. and diff. flow)
+  void SetDiffFlowPtPOIGenFunRe(TProfile3D* dfPOIPtgfRe)  {this->fDiffFlowPtPOIGenFunRe = dfPOIPtgfRe;};
+  TProfile3D* GetDiffFlowPtPOIGenFunRe() const            {return this->fDiffFlowPtPOIGenFunRe;};
+  
+  void SetDiffFlowPtPOIGenFunIm(TProfile3D* dfPOIPtgfIm)  {this->fDiffFlowPtPOIGenFunIm = dfPOIPtgfIm;};
+  TProfile3D* GetDiffPtPOIFlowGenFunIm() const            {return this->fDiffFlowPtPOIGenFunIm;};
+  
+  void SetNumberOfParticlesPerPtBinPOI(TProfile* nopppbPOI) {this->fPtBinPOINoOfParticles = nopppbPOI;};
+  TProfile* GetNumberOfParticlesPerPtBinPOI() const         {return this->fPtBinPOINoOfParticles;};  
+  
+  void SetDiffFlowEtaPOIGenFunRe(TProfile3D* dfEtaPOIgfRe)   {this->fDiffFlowEtaPOIGenFunRe = dfEtaPOIgfRe;};
+  TProfile3D* GetDiffFlowEtaPOIGenFunRe() const              {return this->fDiffFlowEtaPOIGenFunRe;};
+  
+  void SetDiffFlowEtaPOIGenFunIm(TProfile3D* dfEtaPOIgfIm)   {this->fDiffFlowEtaPOIGenFunIm = dfEtaPOIgfIm;};
+  TProfile3D* GetDiffFlowEtaPOIGenFunIm() const              {return this->fDiffFlowEtaPOIGenFunIm;};
+  
+  void SetNumberOfParticlesPerEtaBinPOI(TProfile* noppebPOI)    {this->fEtaBinPOINoOfParticles = noppebPOI;};
+  TProfile* GetNumberOfParticlesPerEtaBinPOI() const            {return this->fEtaBinPOINoOfParticles;};  
+  //----------------------------------------------------------------------------------------------------------
+    
+  void SetAverageMultiplicity(TProfile* am)      {this->fAvMultIntFlowGFC = am;};
+  TProfile* GetAverageMultiplicity() const       {return this->fAvMultIntFlowGFC;};
+  
+  void SetQVectorComponents(TProfile* sqvc)    {this->fQVectorComponentsGFC = sqvc;};
+  TProfile* GetQVectorComponents() const       {return this->fQVectorComponentsGFC;};
+  
+  void SetCommonHists(AliFlowCommonHist* ch)  {this->fCommonHists = ch;};
+  AliFlowCommonHist* GetCommonHists() const   {return this->fCommonHists;};
+//----------------------------------------------------------------------------------------------------------------
+ private:
+  AliFlowAnalysisWithCumulants(const AliFlowAnalysisWithCumulants& afawc);
+  AliFlowAnalysisWithCumulants& operator=(const AliFlowAnalysisWithCumulants& afawc);
+  AliFlowTrackSimple* fTrack;                                   //track
+  static const Int_t fgkQmax = AliFlowCumuConstants::kQmax;     //needed for numerics
+  static const Int_t fgkPmax = AliFlowCumuConstants::kPmax;     //needed for numerics  
+  static const Int_t fgkQmax4 = AliFlowCumuConstants::kQmax4;   //needed for numerics (only for different system of Eq.)
+  static const Int_t fgkPmax4 = AliFlowCumuConstants::kPmax4;   //needed for numerics (only for different system of Eq.) 
+  static const Int_t fgkQmax6 = AliFlowCumuConstants::kQmax6;   //needed for numerics (only for different system of Eq.)
+  static const Int_t fgkPmax6 = AliFlowCumuConstants::kPmax6;   //needed for numerics (only for different system of Eq.) 
+  static const Int_t fgkQmax8 = AliFlowCumuConstants::kQmax8;   //needed for numerics (only for different system of Eq.)
+  static const Int_t fgkPmax8 = AliFlowCumuConstants::kPmax8;   //needed for numerics (only for different system of Eq.)  
+  static const Int_t fgkQmax16 = AliFlowCumuConstants::kQmax16; //needed for numerics (only for different system of Eq.)
+  static const Int_t fgkPmax16 = AliFlowCumuConstants::kPmax16; //needed for numerics (only for different system of Eq.)
+  static const Int_t fgkFlow = AliFlowCumuConstants::kFlow;     //integrated flow coefficient to be calculated
+  static const Int_t fgkMltpl = AliFlowCumuConstants::kMltpl;   //the multiple in p=m*n (diff. flow) 
+  TList* fHistList;                                             //list to hold all output histograms
 
+  Double_t fR0;         //needed for numerics
+  Double_t fPtMax;      //maximum pt
+  Double_t fPtMin;      //minimum pt
+  Double_t fBinWidthPt; //width of pt bin (in GeV)
+  Int_t    fgknBinsPt;  //number of pt bins
+  
+  Double_t fEtaMax;      //maximum pt
+  Double_t fEtaMin;      //minimum pt
+  Double_t fBinWidthEta; //width of pt bin (in GeV)
+  Int_t    fgknBinsEta;  //number of pt bins
+      
+  Double_t fAvQx;  //<Q_x>
+  Double_t fAvQy;  //<Q_y>
+  Double_t fAvQ2x; //<(Q_x)^2>
+  Double_t fAvQ2y; //<(Q_y)^2>
 
- private:
-  AliFlowAnalysisWithCumulants(const AliFlowAnalysisWithCumulants& aAnalysis);
-  AliFlowAnalysisWithCumulants& operator=(const AliFlowAnalysisWithCumulants& aAnalysis);
-
-  AliFlowTrackSimple* fTrack;//track
-  static const Int_t fgkQmax=AliFlowCumuConstants::kQmax;//needed for numerics
-  static const Int_t fgkPmax=AliFlowCumuConstants::kPmax;//needed for numerics  
-  static const Int_t fgkFlow=AliFlowCumuConstants::kFlow;//integrated flow coefficient to be calculated
-  static const Int_t fgkMltpl=AliFlowCumuConstants::kMltpl;//the multiple in p=m*n (diff. flow) 
-  static const Int_t fgknBins=100;//number of pt bins
+  TProfile*          fAvMultIntFlowGFC; //average selected multiplicity
  
-  TString  fHistFileName;      //! The output file name     
-  TFile* fHistFile; // histogram file for Cumulants
-  Double_t fAvM;//avarage SELECTED multiplicity
-
-  Double_t fR0;//needed for numerics
-  Double_t fPtMax;//maximum pt
-  Double_t fPtMin;//minimum pt
-  Double_t fBinWidth;//width of pt bin (in GeV)
-      
-  Double_t fAvQx;//<Q_x>
-  Double_t fAvQy;//<Q_y>
-  Double_t fAvQ2x;//<(Q_x)^2>
-  Double_t fAvQ2y;//<(Q_y)^2>
-   
-  Int_t fNumberOfEvents;//number of events 
-   
-  AliFlowCommonHist* fCommonHists;//control histograms
-  AliFlowCommonHistResults *fCommonHistsRes2, *fCommonHistsRes4, *fCommonHistsRes6, *fCommonHistsRes8;//histograms with various order final results 
-  
-  Double_t fAvG[fgkPmax][fgkQmax];//avarage of the generating function used for integrated flow
-  Int_t fBinEventEntries[fgknBins];//counts how many events have at least 1 particle in particular bin
-  Int_t fBinNoOfParticles[fgknBins];//number of particles per bin
-  Double_t fBinMeanPt[fgknBins];//mean pt per bin
-  Double_t fBinEventDRe[fgknBins][fgkPmax][fgkQmax];//real part of the generating function used for differential flow
-  Double_t fBinEventDIm[fgknBins][fgkPmax][fgkQmax];//imaginary part of the generating function used for differential flow
+  TProfile*          fQVectorComponentsGFC; //averages of Q-vector components (1st bin: <Q_x>, 2nd bin: <Q_y>, 3rd bin: <(Q_x)^2>, 4th bin: <(Q_y)^2>)
     
+  TH1D*              fIntFlowResultsGFC; //integrated flow final results
+  
+  TH1D*              fDiffFlowResults2ndOrderGFC; //differential flow final results (2nd order estimate) 
+  TH1D*              fDiffFlowResults4thOrderGFC; //differential flow final results (4th order estimate)
+  TH1D*              fDiffFlowResults6thOrderGFC; //differential flow final results (6th order estimate)
+  TH1D*              fDiffFlowResults8thOrderGFC; //differential flow final results (8th order estimate)
+  
+  AliFlowCommonHistResults*  fCommonHistsResults2nd; //final results for 2nd order int. and diff. flow stored in the common histograms 
+  AliFlowCommonHistResults*  fCommonHistsResults4th; //final results for 4th order int. and diff. flow stored in the common histograms 
+  AliFlowCommonHistResults*  fCommonHistsResults6th; //final results for 6th order int. and diff. flow stored in the common histograms
+  AliFlowCommonHistResults*  fCommonHistsResults8th; //final results for 8th order int. and diff. flow stored in the common histograms
+  
+  TProfile2D*        fIntFlowGenFun;   //avarage of the generating function for integrated flow 
+  
+  TProfile2D*        fIntFlowGenFun4;  //avarage of the generating function for integrated flow (only for different system of Eq.)
+  TProfile2D*        fIntFlowGenFun6;  //avarage of the generating function for integrated flow (only for different system of Eq.)
+  TProfile2D*        fIntFlowGenFun8;  //avarage of the generating function for integrated flow (only for different system of Eq.)
+  TProfile2D*        fIntFlowGenFun16; //avarage of the generating function for integrated flow (only for different system of Eq.)
+
+  TProfile*          fAvMultIntFlow4GFC;  //average selected multiplicity (only for different system of Eq.)
+  TProfile*          fAvMultIntFlow6GFC;  //average selected multiplicity (only for different system of Eq.) 
+  TProfile*          fAvMultIntFlow8GFC;  //average selected multiplicity (only for different system of Eq.)
+  TProfile*          fAvMultIntFlow16GFC; //average selected multiplicity (only for different system of Eq.)
+
+  //RP = Reaction Plane (RP denotes particles used to determine the reaction plane)                                                       
+  TProfile3D*        fDiffFlowPtRPGenFunRe; //avarage of the generating function for differential flow in Pt (real part)
+  TProfile3D*        fDiffFlowPtRPGenFunIm; //avarage of the generating function for differential flow in Pt (imaginary part)
+  TProfile*          fPtBinRPNoOfParticles; //number of particles per pt bin
+  TProfile3D*        fDiffFlowEtaRPGenFunRe; //avarage of the generating function for differential flow in Eta (real part)
+  TProfile3D*        fDiffFlowEtaRPGenFunIm; //avarage of the generating function for differential flow in Eta (imaginary part)
+  TProfile*          fEtaBinRPNoOfParticles; //number of particles per eta bin
+                                    
+  //POI = Particles Of Interest (POI denotes particles of interest for the final physical results for int. and diff. flow)                                                        
+  TProfile3D*        fDiffFlowPtPOIGenFunRe; //avarage of the generating function for differential flow in Pt (real part)
+  TProfile3D*        fDiffFlowPtPOIGenFunIm; //avarage of the generating function for differential flow in Pt (imaginary part)
+  TProfile*          fPtBinPOINoOfParticles; //number of particles per pt bin
+  TProfile3D*        fDiffFlowEtaPOIGenFunRe; //avarage of the generating function for differential flow in Eta (real part)
+  TProfile3D*        fDiffFlowEtaPOIGenFunIm; //avarage of the generating function for differential flow in Eta (imaginary part)
+  TProfile*          fEtaBinPOINoOfParticles; //number of particles per eta bin
+  
+  /*
+  TProfile2D *fDiffFlowGenFunRe0,*fDiffFlowGenFunRe1,*fDiffFlowGenFunRe2,*fDiffFlowGenFunRe3;//differential flow 
+  TProfile2D *fDiffFlowGenFunRe4,*fDiffFlowGenFunRe5,*fDiffFlowGenFunRe6,*fDiffFlowGenFunRe7;//differential flow
+  TProfile2D *fDiffFlowGenFunIm0,*fDiffFlowGenFunIm1,*fDiffFlowGenFunIm2,*fDiffFlowGenFunIm3;//differential flow
+  TProfile2D *fDiffFlowGenFunIm4,*fDiffFlowGenFunIm5,*fDiffFlowGenFunIm6,*fDiffFlowGenFunIm7;//differential flow
+  */
+  AliFlowCommonHist* fCommonHists;      //common control histograms
+  
+  Bool_t fOtherEquations; //numerical equations for cumulants solved up to different highest order 
+      
   ClassDef(AliFlowAnalysisWithCumulants, 0);
 };
+
+//================================================================================================================
+
 #endif
 
 
+
+
+