ROOT logo
///////////////////////////////////////////////////////////////////////////
//                                                                       //
// AliFemtoModelCorrFctn3DSpherical: 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 "AliFemtoModelCorrFctn3DSpherical.h"
#include "AliFemtoModelManager.h"
#include <TMath.h>
#include <cstdio>
//#include <Math/SpecFunc.h>

#ifdef __ROOT__ 
ClassImp(AliFemtoModelCorrFctn3DSpherical)
#endif

//____________________________
AliFemtoModelCorrFctn3DSpherical::AliFemtoModelCorrFctn3DSpherical(char* title, const int& nqbins, const float& QLo, const float& QHi, const int& nphibins, const int& ncthetabins):
  AliFemtoModelCorrFctn(),
  fTrueNumeratorSph(0),
  fFakeNumeratorSph(0),
  fDenominatorSph(0),
  fPairCut(0x0)
{
  // set up numerator
  char tTitNum[101] = "NumTrue";
  strncat(tTitNum,title, 100);
  fTrueNumeratorSph = new TH3D(tTitNum,title,nqbins,QLo,QHi,nphibins,-TMath::Pi(),TMath::Pi(),ncthetabins,-1.0,1.0);
  // set up numerator
  char tTitNumF[101] = "NumFake";
  strncat(tTitNumF,title, 100);
  fFakeNumeratorSph = new TH3D(tTitNumF,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);
  fDenominatorSph = new TH3D(tTitDen,title,nqbins,QLo,QHi,nphibins,-TMath::Pi(),TMath::Pi(),ncthetabins,-1.0,1.0);

  // to enable error bar calculation...
  fTrueNumeratorSph->Sumw2();
  fFakeNumeratorSph->Sumw2();
  fDenominatorSph->Sumw2();
}

AliFemtoModelCorrFctn3DSpherical::AliFemtoModelCorrFctn3DSpherical(const AliFemtoModelCorrFctn3DSpherical& aCorrFctn) :
  AliFemtoModelCorrFctn(aCorrFctn),
  fTrueNumeratorSph(0),
  fFakeNumeratorSph(0),
  fDenominatorSph(0),
  fPairCut(0x0)
{
  // Copy constructor
  fTrueNumeratorSph = new TH3D(*aCorrFctn.fTrueNumeratorSph);
  fFakeNumeratorSph = new TH3D(*aCorrFctn.fFakeNumeratorSph);
  fDenominatorSph = new TH3D(*aCorrFctn.fDenominatorSph);
  fPairCut = aCorrFctn.fPairCut;
}
//____________________________
AliFemtoModelCorrFctn3DSpherical::~AliFemtoModelCorrFctn3DSpherical(){
  // Destructor
  delete fTrueNumeratorSph;
  delete fFakeNumeratorSph;
  delete fDenominatorSph;
}
//_________________________
AliFemtoModelCorrFctn3DSpherical& AliFemtoModelCorrFctn3DSpherical::operator=(const AliFemtoModelCorrFctn3DSpherical& aCorrFctn)
{
  // assignment operator
  if (this == &aCorrFctn)
    return *this;

  if (fTrueNumeratorSph) delete fTrueNumeratorSph;
  fTrueNumeratorSph = new TH3D(*aCorrFctn.fTrueNumeratorSph);
  if (fFakeNumeratorSph) delete fFakeNumeratorSph;
  fFakeNumeratorSph = new TH3D(*aCorrFctn.fFakeNumeratorSph);
  if (fDenominatorSph) delete fDenominatorSph;
  fDenominatorSph = new TH3D(*aCorrFctn.fDenominatorSph);
  
  fPairCut = aCorrFctn.fPairCut;
  
  return *this;
}

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

  tOutputList->Add(fTrueNumeratorSph); 
  tOutputList->Add(fFakeNumeratorSph); 
  tOutputList->Add(fDenominatorSph);  

  return tOutputList;
}

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

//____________________________
AliFemtoString AliFemtoModelCorrFctn3DSpherical::Report(){
  // Construct the report
  string stemp = "PRF Frame Spherical 3D Model Correlation Function Report:\n";
  char ctemp[100];
  snprintf(ctemp , 100, "Number of entries in numerator:\t%E\n",fTrueNumeratorSph->GetEntries());
  stemp += ctemp;
  snprintf(ctemp , 100, "Number of entries in denominator:\t%E\n",fDenominatorSph->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 AliFemtoModelCorrFctn3DSpherical::AddRealPair( AliFemtoPair* pair){
  // perform operations on real pairs
  if (fPairCut){
    if (!(fPairCut->Pass(pair))) return;
  }

  Double_t weight = fManager->GetWeight(pair);

  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);

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

  Double_t weight = fManager->GetWeight(pair);

  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);

  fFakeNumeratorSph->Fill(tKR,tKP,tKC,weight);
  fDenominatorSph->Fill(tKR,tKP,tKC);
}


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