ROOT logo
////////////////////////////////////////////////////////////////////////////////
//                                                                            //
// AliFemtoCorrFctnDirectYlm - Correlation function that is binned in Ylms    //
// directly. Provides a way to store the numerator and denominator            //
// in Ylms directly and correctly calculate the correlation                   //
// function from them.                                                        //
// Added the option to use q components in LCMS for identical particles       //
//                                                                            //
// Authors: Adam Kisiel kisiel@mps.ohio-state.edu                             //
//                                                                            //
////////////////////////////////////////////////////////////////////////////////
#ifndef ALIFEMTOCORRFCTNDIRECTYLM_H
#define ALIFEMTOCORRFCTNDIRECTYLM_H

#include <math.h>
#include <complex>
#include <TH1D.h>
#include <TH3D.h>
#include <TFile.h>
#include "AliFemtoCorrFctn.h"
#include "AliFemtoYlm.h"
#include "AliFemtoPairCut.h"

using namespace std;

class AliFemtoCorrFctnDirectYlm: public AliFemtoCorrFctn {
 public:
  AliFemtoCorrFctnDirectYlm();
  AliFemtoCorrFctnDirectYlm(const char *name, int maxl, int ibin, double vmin, double vmax, int aUseLCMS);
  AliFemtoCorrFctnDirectYlm(const AliFemtoCorrFctnDirectYlm& aCorrFctn);
  ~AliFemtoCorrFctnDirectYlm();

  AliFemtoCorrFctnDirectYlm& operator=(const AliFemtoCorrFctnDirectYlm& aCorrFctn);

  void AddRealPair(double *qvec, double weight=1.0);
  void AddMixedPair(double *qvec, double weight=1.0);

  void AddRealPair(double qout, double qside, double qlong, double weight=1.0);
  void AddMixedPair(double qout, double qside, double qlong, double weight=1.0);

  virtual AliFemtoString Report();

  virtual void AddRealPair(AliFemtoPair* aPair);
  virtual void AddMixedPair(AliFemtoPair* aPair);

  virtual void Finish();
  virtual TList* GetOutputList();

  void Write();

  void ReadFromFile(TFile *infile, const char *name, int maxl);

  TH1D *GetNumRealHist(int el, int em);
  TH1D *GetNumImagHist(int el, int em);

  TH1D *GetDenRealHist(int el, int em);
  TH1D *GetDenImagHist(int el, int em);

  void SetUseLCMS(int aUseLCMS);
  int  GetUseLCMS();

 private:
  double ClebschGordan(double aJot1, double aEm1, double aJot2, double aEm2, double aJot, double aEm);
  double DeltaJ(double aJot1, double aJot2, double aJot);
  double WignerSymbol(double aJot1, double aEm1, double aJot2, double aEm2, double aJot, double aEm);
  
  void GetMtilde(complex<double>* aMat, double *aMTilde); 
  
  int  GetMaxJM() const;
  void GetElEmForIndex(int aIndex, double *aEl, double *aEm) const;
  void GetElEmForIndex(int aIndex, int *aEl, int *aEm) const;
  int  GetBin(int qbin, int ilmzero, int zeroimag, int ilmprim, int primimag);

  int  PackYlmVector(const double *invec, double *outvec);
  int  PackYlmMatrix(const double *inmat, double *outmat);

  int GetIndexForLM(int el, int em) const;

  void PackCovariances();
  void UnpackCovariances();

  TH1D **fnumsreal;            // Real parts of Ylm components of the numerator
  TH1D **fnumsimag;            // Imaginary parts of Ylm components of the numerator
  TH1D **fdensreal;            // Real parts of Ylm components of the denominator	    
  TH1D **fdensimag;            // Imaginary parts of Ylm components of the denominator

  TH1D *fbinctn;               // Bin occupation for the numerator
  TH1D *fbinctd;               // Bin occupation for the denominator

  TH3D *fcovnum;               // Numerator covariance matrix packed into TH3D
  TH3D *fcovden;               // Denominator covariance matrix packed into TH3D

  double *fcovmnum;            // Covariance matrix for the numerator
  double *fcovmden;            // Covariance matrix for the denominator

  int fMaxL;                  // l cut-off of the decomposition

  int    fMaxJM;               // number of l-m combinations
  double *fels;                // table of l's
  double *fems;                // table of m's
  int    *felsi;               // table of integer l's
  int    *femsi;               // table of integer m's

  complex<double> *fYlmBuffer; // buffer for ylm calculation
  double *factorials;         // Helper table of factorials

  double fSout;                // Save last calculated qout
  double fSside;               // Save last calculated qside
  double fSlong;               // Save last calculated qlong

  int    fUseLCMS;             // 0 - Use PRF, 1 - Use LCMS
};

#endif

 AliFemtoCorrFctnDirectYlm.h:1
 AliFemtoCorrFctnDirectYlm.h:2
 AliFemtoCorrFctnDirectYlm.h:3
 AliFemtoCorrFctnDirectYlm.h:4
 AliFemtoCorrFctnDirectYlm.h:5
 AliFemtoCorrFctnDirectYlm.h:6
 AliFemtoCorrFctnDirectYlm.h:7
 AliFemtoCorrFctnDirectYlm.h:8
 AliFemtoCorrFctnDirectYlm.h:9
 AliFemtoCorrFctnDirectYlm.h:10
 AliFemtoCorrFctnDirectYlm.h:11
 AliFemtoCorrFctnDirectYlm.h:12
 AliFemtoCorrFctnDirectYlm.h:13
 AliFemtoCorrFctnDirectYlm.h:14
 AliFemtoCorrFctnDirectYlm.h:15
 AliFemtoCorrFctnDirectYlm.h:16
 AliFemtoCorrFctnDirectYlm.h:17
 AliFemtoCorrFctnDirectYlm.h:18
 AliFemtoCorrFctnDirectYlm.h:19
 AliFemtoCorrFctnDirectYlm.h:20
 AliFemtoCorrFctnDirectYlm.h:21
 AliFemtoCorrFctnDirectYlm.h:22
 AliFemtoCorrFctnDirectYlm.h:23
 AliFemtoCorrFctnDirectYlm.h:24
 AliFemtoCorrFctnDirectYlm.h:25
 AliFemtoCorrFctnDirectYlm.h:26
 AliFemtoCorrFctnDirectYlm.h:27
 AliFemtoCorrFctnDirectYlm.h:28
 AliFemtoCorrFctnDirectYlm.h:29
 AliFemtoCorrFctnDirectYlm.h:30
 AliFemtoCorrFctnDirectYlm.h:31
 AliFemtoCorrFctnDirectYlm.h:32
 AliFemtoCorrFctnDirectYlm.h:33
 AliFemtoCorrFctnDirectYlm.h:34
 AliFemtoCorrFctnDirectYlm.h:35
 AliFemtoCorrFctnDirectYlm.h:36
 AliFemtoCorrFctnDirectYlm.h:37
 AliFemtoCorrFctnDirectYlm.h:38
 AliFemtoCorrFctnDirectYlm.h:39
 AliFemtoCorrFctnDirectYlm.h:40
 AliFemtoCorrFctnDirectYlm.h:41
 AliFemtoCorrFctnDirectYlm.h:42
 AliFemtoCorrFctnDirectYlm.h:43
 AliFemtoCorrFctnDirectYlm.h:44
 AliFemtoCorrFctnDirectYlm.h:45
 AliFemtoCorrFctnDirectYlm.h:46
 AliFemtoCorrFctnDirectYlm.h:47
 AliFemtoCorrFctnDirectYlm.h:48
 AliFemtoCorrFctnDirectYlm.h:49
 AliFemtoCorrFctnDirectYlm.h:50
 AliFemtoCorrFctnDirectYlm.h:51
 AliFemtoCorrFctnDirectYlm.h:52
 AliFemtoCorrFctnDirectYlm.h:53
 AliFemtoCorrFctnDirectYlm.h:54
 AliFemtoCorrFctnDirectYlm.h:55
 AliFemtoCorrFctnDirectYlm.h:56
 AliFemtoCorrFctnDirectYlm.h:57
 AliFemtoCorrFctnDirectYlm.h:58
 AliFemtoCorrFctnDirectYlm.h:59
 AliFemtoCorrFctnDirectYlm.h:60
 AliFemtoCorrFctnDirectYlm.h:61
 AliFemtoCorrFctnDirectYlm.h:62
 AliFemtoCorrFctnDirectYlm.h:63
 AliFemtoCorrFctnDirectYlm.h:64
 AliFemtoCorrFctnDirectYlm.h:65
 AliFemtoCorrFctnDirectYlm.h:66
 AliFemtoCorrFctnDirectYlm.h:67
 AliFemtoCorrFctnDirectYlm.h:68
 AliFemtoCorrFctnDirectYlm.h:69
 AliFemtoCorrFctnDirectYlm.h:70
 AliFemtoCorrFctnDirectYlm.h:71
 AliFemtoCorrFctnDirectYlm.h:72
 AliFemtoCorrFctnDirectYlm.h:73
 AliFemtoCorrFctnDirectYlm.h:74
 AliFemtoCorrFctnDirectYlm.h:75
 AliFemtoCorrFctnDirectYlm.h:76
 AliFemtoCorrFctnDirectYlm.h:77
 AliFemtoCorrFctnDirectYlm.h:78
 AliFemtoCorrFctnDirectYlm.h:79
 AliFemtoCorrFctnDirectYlm.h:80
 AliFemtoCorrFctnDirectYlm.h:81
 AliFemtoCorrFctnDirectYlm.h:82
 AliFemtoCorrFctnDirectYlm.h:83
 AliFemtoCorrFctnDirectYlm.h:84
 AliFemtoCorrFctnDirectYlm.h:85
 AliFemtoCorrFctnDirectYlm.h:86
 AliFemtoCorrFctnDirectYlm.h:87
 AliFemtoCorrFctnDirectYlm.h:88
 AliFemtoCorrFctnDirectYlm.h:89
 AliFemtoCorrFctnDirectYlm.h:90
 AliFemtoCorrFctnDirectYlm.h:91
 AliFemtoCorrFctnDirectYlm.h:92
 AliFemtoCorrFctnDirectYlm.h:93
 AliFemtoCorrFctnDirectYlm.h:94
 AliFemtoCorrFctnDirectYlm.h:95
 AliFemtoCorrFctnDirectYlm.h:96
 AliFemtoCorrFctnDirectYlm.h:97
 AliFemtoCorrFctnDirectYlm.h:98
 AliFemtoCorrFctnDirectYlm.h:99
 AliFemtoCorrFctnDirectYlm.h:100
 AliFemtoCorrFctnDirectYlm.h:101
 AliFemtoCorrFctnDirectYlm.h:102
 AliFemtoCorrFctnDirectYlm.h:103
 AliFemtoCorrFctnDirectYlm.h:104
 AliFemtoCorrFctnDirectYlm.h:105
 AliFemtoCorrFctnDirectYlm.h:106
 AliFemtoCorrFctnDirectYlm.h:107
 AliFemtoCorrFctnDirectYlm.h:108
 AliFemtoCorrFctnDirectYlm.h:109
 AliFemtoCorrFctnDirectYlm.h:110
 AliFemtoCorrFctnDirectYlm.h:111
 AliFemtoCorrFctnDirectYlm.h:112
 AliFemtoCorrFctnDirectYlm.h:113
 AliFemtoCorrFctnDirectYlm.h:114
 AliFemtoCorrFctnDirectYlm.h:115