ROOT logo
///////////////////////////////////////////////////////////////////////////
//                                                                       //
// AliFemtoCorrFctn3DSpherical: a class to calculate 3D correlation      //
// for pairs of identical particles, binned in spherical coordinates.    //
// In analysis the function should be first created in a macro, then     //
// added to the analysis, and at the end of the macro the procedure to   //
// write out histograms should be called.                                //
//                                                                       //
///////////////////////////////////////////////////////////////////////////

#include "AliFemtoCorrFctn3DSpherical.h"
#include <TMath.h>
#include <cstdio>

#ifdef __ROOT__ 
ClassImp(AliFemtoCorrFctn3DSpherical)
#endif

//____________________________
  AliFemtoCorrFctn3DSpherical::AliFemtoCorrFctn3DSpherical(char* title, const int& nqbins, const float& QLo, const float& QHi, const int& nphibins, const int& ncthetabins):
  fNumerator(0),
  fDenominator(0) //,
							  //  fPairCut(0x0)
{
  // set up numerator
  char tTitNum[101] = "Num";
  strncat(tTitNum,title, 100);
  fNumerator = new TH3D(tTitNum,title,nqbins,QLo,QHi,nphibins,-TMath::Pi(),TMath::Pi(),ncthetabins,-1.0,1.0);
  // set up denominator
  char tTitDen[101] = "Den";
  strncat(tTitDen,title, 100);
  fDenominator = new TH3D(tTitDen,title,nqbins,QLo,QHi,nphibins,-TMath::Pi(),TMath::Pi(),ncthetabins,-1.0,1.0);

  // to enable error bar calculation...
  fNumerator->Sumw2();
  fDenominator->Sumw2();
}

AliFemtoCorrFctn3DSpherical::AliFemtoCorrFctn3DSpherical(const AliFemtoCorrFctn3DSpherical& aCorrFctn) :
  AliFemtoCorrFctn(aCorrFctn),
  fNumerator(0),
  fDenominator(0) //,
							//  fPairCut(0x0)
{
  // Copy constructor
  fNumerator = new TH3D(*aCorrFctn.fNumerator);
  fDenominator = new TH3D(*aCorrFctn.fDenominator);
  //  fPairCut = aCorrFctn.fPairCut;
}
//____________________________
AliFemtoCorrFctn3DSpherical::~AliFemtoCorrFctn3DSpherical(){
  // Destructor
  delete fNumerator;
  delete fDenominator;
}
//_________________________
AliFemtoCorrFctn3DSpherical& AliFemtoCorrFctn3DSpherical::operator=(const AliFemtoCorrFctn3DSpherical& aCorrFctn)
{
  // assignment operator
  if (this == &aCorrFctn)
    return *this;

  if (fNumerator) delete fNumerator;
  fNumerator = new TH3D(*aCorrFctn.fNumerator);
  if (fDenominator) delete fDenominator;
  fDenominator = new TH3D(*aCorrFctn.fDenominator);
  
  //  fPairCut = aCorrFctn.fPairCut;
  
  return *this;
}

//_________________________
void AliFemtoCorrFctn3DSpherical::WriteOutHistos(){
  // Write out all histograms to file
  fNumerator->Write();
  fDenominator->Write();
}
//______________________________
TList* AliFemtoCorrFctn3DSpherical::GetOutputList()
{
  // Prepare the list of objects to be written to the output
  TList *tOutputList = new TList();

  tOutputList->Add(fNumerator); 
  tOutputList->Add(fDenominator);  

  return tOutputList;
}

//_________________________
void AliFemtoCorrFctn3DSpherical::Finish(){
  // here is where we should normalize, fit, etc...
}

//____________________________
AliFemtoString AliFemtoCorrFctn3DSpherical::Report(){
  // Construct the report
  string stemp = "PRF Frame Spherical 3D Correlation Function Report:\n";
  char ctemp[100];
  snprintf(ctemp , 100, "Number of entries in numerator:\t%E\n",fNumerator->GetEntries());
  stemp += ctemp;
  snprintf(ctemp , 100, "Number of entries in denominator:\t%E\n",fDenominator->GetEntries());
  stemp += ctemp;

  if (fPairCut){
    snprintf(ctemp , 100, "Here is the PairCut specific to this CorrFctn\n");
    stemp += ctemp;
    stemp += fPairCut->Report();
  }
  else{
    snprintf(ctemp , 100, "No PairCut specific to this CorrFctn\n");
    stemp += ctemp;
  }

  //  
  AliFemtoString returnThis = stemp;
  return returnThis;
}
//____________________________
void AliFemtoCorrFctn3DSpherical::AddRealPair( AliFemtoPair* pair){
  // perform operations on real pairs
  if (fPairCut){
    if (!(fPairCut->Pass(pair))) return;
  }

  double tKO = pair->KOut();
  double tKS = pair->KSide();
  double tKL = pair->KLong();

  double tKR = sqrt(tKO*tKO + tKS*tKS + tKL*tKL);
  double tKC;
  if ( fabs(tKR) < 1e-10 ) tKC = 0.0;
  else tKC=tKL/tKR;
  double tKP=atan2(tKS,tKO);

  fNumerator->Fill(tKR,tKP,tKC);
}
//____________________________
void AliFemtoCorrFctn3DSpherical::AddMixedPair( AliFemtoPair* pair){
  // perform operations on mixed pairs
  if (fPairCut){
    if (!(fPairCut->Pass(pair))) return;
  }

  double tKO = pair->KOut();
  double tKS = pair->KSide();
  double tKL = pair->KLong();

  double tKR = sqrt(tKO*tKO + tKS*tKS + tKL*tKL);
  double tKC;
  if ( fabs(tKR) < 1e-10 ) tKC = 0.0;
  else tKC=tKL/tKR;
  double tKP=atan2(tKS,tKO);

  fDenominator->Fill(tKR,tKP,tKC);
}


 AliFemtoCorrFctn3DSpherical.cxx:1
 AliFemtoCorrFctn3DSpherical.cxx:2
 AliFemtoCorrFctn3DSpherical.cxx:3
 AliFemtoCorrFctn3DSpherical.cxx:4
 AliFemtoCorrFctn3DSpherical.cxx:5
 AliFemtoCorrFctn3DSpherical.cxx:6
 AliFemtoCorrFctn3DSpherical.cxx:7
 AliFemtoCorrFctn3DSpherical.cxx:8
 AliFemtoCorrFctn3DSpherical.cxx:9
 AliFemtoCorrFctn3DSpherical.cxx:10
 AliFemtoCorrFctn3DSpherical.cxx:11
 AliFemtoCorrFctn3DSpherical.cxx:12
 AliFemtoCorrFctn3DSpherical.cxx:13
 AliFemtoCorrFctn3DSpherical.cxx:14
 AliFemtoCorrFctn3DSpherical.cxx:15
 AliFemtoCorrFctn3DSpherical.cxx:16
 AliFemtoCorrFctn3DSpherical.cxx:17
 AliFemtoCorrFctn3DSpherical.cxx:18
 AliFemtoCorrFctn3DSpherical.cxx:19
 AliFemtoCorrFctn3DSpherical.cxx:20
 AliFemtoCorrFctn3DSpherical.cxx:21
 AliFemtoCorrFctn3DSpherical.cxx:22
 AliFemtoCorrFctn3DSpherical.cxx:23
 AliFemtoCorrFctn3DSpherical.cxx:24
 AliFemtoCorrFctn3DSpherical.cxx:25
 AliFemtoCorrFctn3DSpherical.cxx:26
 AliFemtoCorrFctn3DSpherical.cxx:27
 AliFemtoCorrFctn3DSpherical.cxx:28
 AliFemtoCorrFctn3DSpherical.cxx:29
 AliFemtoCorrFctn3DSpherical.cxx:30
 AliFemtoCorrFctn3DSpherical.cxx:31
 AliFemtoCorrFctn3DSpherical.cxx:32
 AliFemtoCorrFctn3DSpherical.cxx:33
 AliFemtoCorrFctn3DSpherical.cxx:34
 AliFemtoCorrFctn3DSpherical.cxx:35
 AliFemtoCorrFctn3DSpherical.cxx:36
 AliFemtoCorrFctn3DSpherical.cxx:37
 AliFemtoCorrFctn3DSpherical.cxx:38
 AliFemtoCorrFctn3DSpherical.cxx:39
 AliFemtoCorrFctn3DSpherical.cxx:40
 AliFemtoCorrFctn3DSpherical.cxx:41
 AliFemtoCorrFctn3DSpherical.cxx:42
 AliFemtoCorrFctn3DSpherical.cxx:43
 AliFemtoCorrFctn3DSpherical.cxx:44
 AliFemtoCorrFctn3DSpherical.cxx:45
 AliFemtoCorrFctn3DSpherical.cxx:46
 AliFemtoCorrFctn3DSpherical.cxx:47
 AliFemtoCorrFctn3DSpherical.cxx:48
 AliFemtoCorrFctn3DSpherical.cxx:49
 AliFemtoCorrFctn3DSpherical.cxx:50
 AliFemtoCorrFctn3DSpherical.cxx:51
 AliFemtoCorrFctn3DSpherical.cxx:52
 AliFemtoCorrFctn3DSpherical.cxx:53
 AliFemtoCorrFctn3DSpherical.cxx:54
 AliFemtoCorrFctn3DSpherical.cxx:55
 AliFemtoCorrFctn3DSpherical.cxx:56
 AliFemtoCorrFctn3DSpherical.cxx:57
 AliFemtoCorrFctn3DSpherical.cxx:58
 AliFemtoCorrFctn3DSpherical.cxx:59
 AliFemtoCorrFctn3DSpherical.cxx:60
 AliFemtoCorrFctn3DSpherical.cxx:61
 AliFemtoCorrFctn3DSpherical.cxx:62
 AliFemtoCorrFctn3DSpherical.cxx:63
 AliFemtoCorrFctn3DSpherical.cxx:64
 AliFemtoCorrFctn3DSpherical.cxx:65
 AliFemtoCorrFctn3DSpherical.cxx:66
 AliFemtoCorrFctn3DSpherical.cxx:67
 AliFemtoCorrFctn3DSpherical.cxx:68
 AliFemtoCorrFctn3DSpherical.cxx:69
 AliFemtoCorrFctn3DSpherical.cxx:70
 AliFemtoCorrFctn3DSpherical.cxx:71
 AliFemtoCorrFctn3DSpherical.cxx:72
 AliFemtoCorrFctn3DSpherical.cxx:73
 AliFemtoCorrFctn3DSpherical.cxx:74
 AliFemtoCorrFctn3DSpherical.cxx:75
 AliFemtoCorrFctn3DSpherical.cxx:76
 AliFemtoCorrFctn3DSpherical.cxx:77
 AliFemtoCorrFctn3DSpherical.cxx:78
 AliFemtoCorrFctn3DSpherical.cxx:79
 AliFemtoCorrFctn3DSpherical.cxx:80
 AliFemtoCorrFctn3DSpherical.cxx:81
 AliFemtoCorrFctn3DSpherical.cxx:82
 AliFemtoCorrFctn3DSpherical.cxx:83
 AliFemtoCorrFctn3DSpherical.cxx:84
 AliFemtoCorrFctn3DSpherical.cxx:85
 AliFemtoCorrFctn3DSpherical.cxx:86
 AliFemtoCorrFctn3DSpherical.cxx:87
 AliFemtoCorrFctn3DSpherical.cxx:88
 AliFemtoCorrFctn3DSpherical.cxx:89
 AliFemtoCorrFctn3DSpherical.cxx:90
 AliFemtoCorrFctn3DSpherical.cxx:91
 AliFemtoCorrFctn3DSpherical.cxx:92
 AliFemtoCorrFctn3DSpherical.cxx:93
 AliFemtoCorrFctn3DSpherical.cxx:94
 AliFemtoCorrFctn3DSpherical.cxx:95
 AliFemtoCorrFctn3DSpherical.cxx:96
 AliFemtoCorrFctn3DSpherical.cxx:97
 AliFemtoCorrFctn3DSpherical.cxx:98
 AliFemtoCorrFctn3DSpherical.cxx:99
 AliFemtoCorrFctn3DSpherical.cxx:100
 AliFemtoCorrFctn3DSpherical.cxx:101
 AliFemtoCorrFctn3DSpherical.cxx:102
 AliFemtoCorrFctn3DSpherical.cxx:103
 AliFemtoCorrFctn3DSpherical.cxx:104
 AliFemtoCorrFctn3DSpherical.cxx:105
 AliFemtoCorrFctn3DSpherical.cxx:106
 AliFemtoCorrFctn3DSpherical.cxx:107
 AliFemtoCorrFctn3DSpherical.cxx:108
 AliFemtoCorrFctn3DSpherical.cxx:109
 AliFemtoCorrFctn3DSpherical.cxx:110
 AliFemtoCorrFctn3DSpherical.cxx:111
 AliFemtoCorrFctn3DSpherical.cxx:112
 AliFemtoCorrFctn3DSpherical.cxx:113
 AliFemtoCorrFctn3DSpherical.cxx:114
 AliFemtoCorrFctn3DSpherical.cxx:115
 AliFemtoCorrFctn3DSpherical.cxx:116
 AliFemtoCorrFctn3DSpherical.cxx:117
 AliFemtoCorrFctn3DSpherical.cxx:118
 AliFemtoCorrFctn3DSpherical.cxx:119
 AliFemtoCorrFctn3DSpherical.cxx:120
 AliFemtoCorrFctn3DSpherical.cxx:121
 AliFemtoCorrFctn3DSpherical.cxx:122
 AliFemtoCorrFctn3DSpherical.cxx:123
 AliFemtoCorrFctn3DSpherical.cxx:124
 AliFemtoCorrFctn3DSpherical.cxx:125
 AliFemtoCorrFctn3DSpherical.cxx:126
 AliFemtoCorrFctn3DSpherical.cxx:127
 AliFemtoCorrFctn3DSpherical.cxx:128
 AliFemtoCorrFctn3DSpherical.cxx:129
 AliFemtoCorrFctn3DSpherical.cxx:130
 AliFemtoCorrFctn3DSpherical.cxx:131
 AliFemtoCorrFctn3DSpherical.cxx:132
 AliFemtoCorrFctn3DSpherical.cxx:133
 AliFemtoCorrFctn3DSpherical.cxx:134
 AliFemtoCorrFctn3DSpherical.cxx:135
 AliFemtoCorrFctn3DSpherical.cxx:136
 AliFemtoCorrFctn3DSpherical.cxx:137
 AliFemtoCorrFctn3DSpherical.cxx:138
 AliFemtoCorrFctn3DSpherical.cxx:139
 AliFemtoCorrFctn3DSpherical.cxx:140
 AliFemtoCorrFctn3DSpherical.cxx:141
 AliFemtoCorrFctn3DSpherical.cxx:142
 AliFemtoCorrFctn3DSpherical.cxx:143
 AliFemtoCorrFctn3DSpherical.cxx:144
 AliFemtoCorrFctn3DSpherical.cxx:145
 AliFemtoCorrFctn3DSpherical.cxx:146
 AliFemtoCorrFctn3DSpherical.cxx:147
 AliFemtoCorrFctn3DSpherical.cxx:148
 AliFemtoCorrFctn3DSpherical.cxx:149
 AliFemtoCorrFctn3DSpherical.cxx:150
 AliFemtoCorrFctn3DSpherical.cxx:151
 AliFemtoCorrFctn3DSpherical.cxx:152
 AliFemtoCorrFctn3DSpherical.cxx:153
 AliFemtoCorrFctn3DSpherical.cxx:154
 AliFemtoCorrFctn3DSpherical.cxx:155
 AliFemtoCorrFctn3DSpherical.cxx:156
 AliFemtoCorrFctn3DSpherical.cxx:157
 AliFemtoCorrFctn3DSpherical.cxx:158
 AliFemtoCorrFctn3DSpherical.cxx:159