ROOT logo
////////////////////////////////////////////////////////////////////////////////
///                                                                          ///
/// AliFemtoModelGausLCMSFreezeOutGenerator - freeze-out                     ///
/// coordinates generator, generating a 3D gaussian ellipsoid in LCMS        ///
/// Authors: Adam Kisiel kisiel@mps.ohio-state.edu                           ///
///                                                                          ///
////////////////////////////////////////////////////////////////////////////////
#ifdef __ROOT__
  ClassImp(AliFemtoModelGausLCMSFreezeOutGenerator, 1)
#endif

#include "math.h"
#include "AliFemtoModelGausLCMSFreezeOutGenerator.h"
#include "AliFemtoModelHiddenInfo.h"
#include "AliFemtoLorentzVector.h"
#include <TMath.h>

//_______________________
AliFemtoModelGausLCMSFreezeOutGenerator::AliFemtoModelGausLCMSFreezeOutGenerator() :
  fSizeOut(0), fSizeSide(0), fSizeLong(0)
{
  // Default constructor
  fRandom = new TRandom2();
}

//_______________________
AliFemtoModelGausLCMSFreezeOutGenerator::AliFemtoModelGausLCMSFreezeOutGenerator(const AliFemtoModelGausLCMSFreezeOutGenerator &aModel):
  AliFemtoModelFreezeOutGenerator(aModel),
  fSizeOut(0), fSizeSide(0), fSizeLong(0)
{
  // Copy constructor
  fRandom = new TRandom2();
  SetSizeOut(aModel.GetSizeOut());
  SetSizeSide(aModel.GetSizeSide());
  SetSizeLong(aModel.GetSizeLong());
}
//_______________________
AliFemtoModelGausLCMSFreezeOutGenerator::~AliFemtoModelGausLCMSFreezeOutGenerator()
{
  if (fRandom) delete fRandom;
}
//_______________________
AliFemtoModelGausLCMSFreezeOutGenerator& AliFemtoModelGausLCMSFreezeOutGenerator::operator=(const AliFemtoModelGausLCMSFreezeOutGenerator &aModel)
{
  if (this != &aModel) {
    fRandom = new TRandom2();
    SetSizeOut(aModel.GetSizeOut());
    SetSizeSide(aModel.GetSizeSide());
    SetSizeLong(aModel.GetSizeLong());
  }

  return *this;
}
//_______________________
void AliFemtoModelGausLCMSFreezeOutGenerator::GenerateFreezeOut(AliFemtoPair *aPair)
{
  // Generate two particle emission points with respect
  // to their pair momentum 
  // The source is the 3D Gaussian ellipsoid in the LCMS frame
  //AliFemtoModelHiddenInfo *inf1 = (AliFemtoModelHiddenInfo *) aPair->Track1()->HiddenInfo();
  //AliFemtoModelHiddenInfo *inf2 = (AliFemtoModelHiddenInfo *) aPair->Track2()->HiddenInfo();
  AliFemtoTrack *inf1 = (AliFemtoTrack *) aPair->Track1()->Track();
  AliFemtoTrack *inf2 = (AliFemtoTrack *) aPair->Track2()->Track();

  if ((!inf1) || (!inf2)) { cout << "Hidden info not created! "  << endl; exit(kFALSE); }

  Double_t tPx = inf1->GetTrueMomentum()->x() + inf2->GetTrueMomentum()->x();
  Double_t tPy = inf1->GetTrueMomentum()->y() + inf2->GetTrueMomentum()->y();
  Double_t tPz = inf1->GetTrueMomentum()->z() + inf2->GetTrueMomentum()->z();
  Double_t tM1 = inf1->GetMass();
  Double_t tM2 = inf2->GetMass();
  Double_t tE1 = sqrt(tM1*tM1 + inf1->GetTrueMomentum()->Mag2());
  Double_t tE2 = sqrt(tM2*tM2 + inf2->GetTrueMomentum()->Mag2());
  Double_t tEs = tE1 + tE2;

  Double_t tPt = sqrt(tPx*tPx + tPy*tPy);

  Double_t tRout = fRandom->Gaus(0.0, fSizeOut);
  Double_t tRside = fRandom->Gaus(0.0, fSizeSide);
  Double_t tRlong = fRandom->Gaus(0.0, fSizeLong);
  
  Double_t tXout = (tPx * tRout + tPy * tRside)/tPt;
  Double_t tXside = (tPy * tRout - tPx * tRside)/tPt;

  Double_t tBetaz = tPz/tEs;
  Double_t tGammaz = 1.0/TMath::Sqrt(1-tBetaz*tBetaz);
  
  Double_t tXlong = tGammaz * (tRlong + tBetaz * 0);
  Double_t tXtime = tGammaz * (0 + tBetaz * tRlong);
  
  if (!(inf1->GetEmissionPoint())) {
    AliFemtoLorentzVector *tPos = new AliFemtoLorentzVector(0,0,0,0);
    inf1->SetEmissionPoint(tPos);
    delete tPos;
  }
  else
    inf1->SetEmissionPoint(0,0,0,0);
  if (!(inf2->GetEmissionPoint())) {
    AliFemtoLorentzVector *tPos = new AliFemtoLorentzVector(tXout,tXside,tXlong,tXtime);
    inf2->SetEmissionPoint(tPos);
    delete tPos;
  }
  else
    inf2->SetEmissionPoint(tXout, tXside, tXlong, tXtime);
}

//_______________________
void AliFemtoModelGausLCMSFreezeOutGenerator::SetSizeOut(Double_t aSizeOut)
{
  fSizeOut = aSizeOut;
}
//_______________________
void AliFemtoModelGausLCMSFreezeOutGenerator::SetSizeSide(Double_t aSizeSide)
{
  fSizeSide = aSizeSide;
}
//_______________________
void AliFemtoModelGausLCMSFreezeOutGenerator::SetSizeLong(Double_t aSizeLong)
{
  fSizeLong = aSizeLong;
}

//_______________________
Double_t AliFemtoModelGausLCMSFreezeOutGenerator::GetSizeOut() const
{
  return fSizeOut;
}
//_______________________
Double_t AliFemtoModelGausLCMSFreezeOutGenerator::GetSizeSide() const
{
  return fSizeSide;
}
//_______________________
Double_t AliFemtoModelGausLCMSFreezeOutGenerator::GetSizeLong() const
{
  return fSizeLong;
}
//_______________________
AliFemtoModelFreezeOutGenerator* AliFemtoModelGausLCMSFreezeOutGenerator::Clone() const
{ 
  return GetGenerator(); 
}
//_______________________
AliFemtoModelFreezeOutGenerator* AliFemtoModelGausLCMSFreezeOutGenerator::GetGenerator() const 
{ 
  AliFemtoModelFreezeOutGenerator* tModel = new AliFemtoModelGausLCMSFreezeOutGenerator(*this); return tModel; 
}
 AliFemtoModelGausLCMSFreezeOutGenerator.cxx:1
 AliFemtoModelGausLCMSFreezeOutGenerator.cxx:2
 AliFemtoModelGausLCMSFreezeOutGenerator.cxx:3
 AliFemtoModelGausLCMSFreezeOutGenerator.cxx:4
 AliFemtoModelGausLCMSFreezeOutGenerator.cxx:5
 AliFemtoModelGausLCMSFreezeOutGenerator.cxx:6
 AliFemtoModelGausLCMSFreezeOutGenerator.cxx:7
 AliFemtoModelGausLCMSFreezeOutGenerator.cxx:8
 AliFemtoModelGausLCMSFreezeOutGenerator.cxx:9
 AliFemtoModelGausLCMSFreezeOutGenerator.cxx:10
 AliFemtoModelGausLCMSFreezeOutGenerator.cxx:11
 AliFemtoModelGausLCMSFreezeOutGenerator.cxx:12
 AliFemtoModelGausLCMSFreezeOutGenerator.cxx:13
 AliFemtoModelGausLCMSFreezeOutGenerator.cxx:14
 AliFemtoModelGausLCMSFreezeOutGenerator.cxx:15
 AliFemtoModelGausLCMSFreezeOutGenerator.cxx:16
 AliFemtoModelGausLCMSFreezeOutGenerator.cxx:17
 AliFemtoModelGausLCMSFreezeOutGenerator.cxx:18
 AliFemtoModelGausLCMSFreezeOutGenerator.cxx:19
 AliFemtoModelGausLCMSFreezeOutGenerator.cxx:20
 AliFemtoModelGausLCMSFreezeOutGenerator.cxx:21
 AliFemtoModelGausLCMSFreezeOutGenerator.cxx:22
 AliFemtoModelGausLCMSFreezeOutGenerator.cxx:23
 AliFemtoModelGausLCMSFreezeOutGenerator.cxx:24
 AliFemtoModelGausLCMSFreezeOutGenerator.cxx:25
 AliFemtoModelGausLCMSFreezeOutGenerator.cxx:26
 AliFemtoModelGausLCMSFreezeOutGenerator.cxx:27
 AliFemtoModelGausLCMSFreezeOutGenerator.cxx:28
 AliFemtoModelGausLCMSFreezeOutGenerator.cxx:29
 AliFemtoModelGausLCMSFreezeOutGenerator.cxx:30
 AliFemtoModelGausLCMSFreezeOutGenerator.cxx:31
 AliFemtoModelGausLCMSFreezeOutGenerator.cxx:32
 AliFemtoModelGausLCMSFreezeOutGenerator.cxx:33
 AliFemtoModelGausLCMSFreezeOutGenerator.cxx:34
 AliFemtoModelGausLCMSFreezeOutGenerator.cxx:35
 AliFemtoModelGausLCMSFreezeOutGenerator.cxx:36
 AliFemtoModelGausLCMSFreezeOutGenerator.cxx:37
 AliFemtoModelGausLCMSFreezeOutGenerator.cxx:38
 AliFemtoModelGausLCMSFreezeOutGenerator.cxx:39
 AliFemtoModelGausLCMSFreezeOutGenerator.cxx:40
 AliFemtoModelGausLCMSFreezeOutGenerator.cxx:41
 AliFemtoModelGausLCMSFreezeOutGenerator.cxx:42
 AliFemtoModelGausLCMSFreezeOutGenerator.cxx:43
 AliFemtoModelGausLCMSFreezeOutGenerator.cxx:44
 AliFemtoModelGausLCMSFreezeOutGenerator.cxx:45
 AliFemtoModelGausLCMSFreezeOutGenerator.cxx:46
 AliFemtoModelGausLCMSFreezeOutGenerator.cxx:47
 AliFemtoModelGausLCMSFreezeOutGenerator.cxx:48
 AliFemtoModelGausLCMSFreezeOutGenerator.cxx:49
 AliFemtoModelGausLCMSFreezeOutGenerator.cxx:50
 AliFemtoModelGausLCMSFreezeOutGenerator.cxx:51
 AliFemtoModelGausLCMSFreezeOutGenerator.cxx:52
 AliFemtoModelGausLCMSFreezeOutGenerator.cxx:53
 AliFemtoModelGausLCMSFreezeOutGenerator.cxx:54
 AliFemtoModelGausLCMSFreezeOutGenerator.cxx:55
 AliFemtoModelGausLCMSFreezeOutGenerator.cxx:56
 AliFemtoModelGausLCMSFreezeOutGenerator.cxx:57
 AliFemtoModelGausLCMSFreezeOutGenerator.cxx:58
 AliFemtoModelGausLCMSFreezeOutGenerator.cxx:59
 AliFemtoModelGausLCMSFreezeOutGenerator.cxx:60
 AliFemtoModelGausLCMSFreezeOutGenerator.cxx:61
 AliFemtoModelGausLCMSFreezeOutGenerator.cxx:62
 AliFemtoModelGausLCMSFreezeOutGenerator.cxx:63
 AliFemtoModelGausLCMSFreezeOutGenerator.cxx:64
 AliFemtoModelGausLCMSFreezeOutGenerator.cxx:65
 AliFemtoModelGausLCMSFreezeOutGenerator.cxx:66
 AliFemtoModelGausLCMSFreezeOutGenerator.cxx:67
 AliFemtoModelGausLCMSFreezeOutGenerator.cxx:68
 AliFemtoModelGausLCMSFreezeOutGenerator.cxx:69
 AliFemtoModelGausLCMSFreezeOutGenerator.cxx:70
 AliFemtoModelGausLCMSFreezeOutGenerator.cxx:71
 AliFemtoModelGausLCMSFreezeOutGenerator.cxx:72
 AliFemtoModelGausLCMSFreezeOutGenerator.cxx:73
 AliFemtoModelGausLCMSFreezeOutGenerator.cxx:74
 AliFemtoModelGausLCMSFreezeOutGenerator.cxx:75
 AliFemtoModelGausLCMSFreezeOutGenerator.cxx:76
 AliFemtoModelGausLCMSFreezeOutGenerator.cxx:77
 AliFemtoModelGausLCMSFreezeOutGenerator.cxx:78
 AliFemtoModelGausLCMSFreezeOutGenerator.cxx:79
 AliFemtoModelGausLCMSFreezeOutGenerator.cxx:80
 AliFemtoModelGausLCMSFreezeOutGenerator.cxx:81
 AliFemtoModelGausLCMSFreezeOutGenerator.cxx:82
 AliFemtoModelGausLCMSFreezeOutGenerator.cxx:83
 AliFemtoModelGausLCMSFreezeOutGenerator.cxx:84
 AliFemtoModelGausLCMSFreezeOutGenerator.cxx:85
 AliFemtoModelGausLCMSFreezeOutGenerator.cxx:86
 AliFemtoModelGausLCMSFreezeOutGenerator.cxx:87
 AliFemtoModelGausLCMSFreezeOutGenerator.cxx:88
 AliFemtoModelGausLCMSFreezeOutGenerator.cxx:89
 AliFemtoModelGausLCMSFreezeOutGenerator.cxx:90
 AliFemtoModelGausLCMSFreezeOutGenerator.cxx:91
 AliFemtoModelGausLCMSFreezeOutGenerator.cxx:92
 AliFemtoModelGausLCMSFreezeOutGenerator.cxx:93
 AliFemtoModelGausLCMSFreezeOutGenerator.cxx:94
 AliFemtoModelGausLCMSFreezeOutGenerator.cxx:95
 AliFemtoModelGausLCMSFreezeOutGenerator.cxx:96
 AliFemtoModelGausLCMSFreezeOutGenerator.cxx:97
 AliFemtoModelGausLCMSFreezeOutGenerator.cxx:98
 AliFemtoModelGausLCMSFreezeOutGenerator.cxx:99
 AliFemtoModelGausLCMSFreezeOutGenerator.cxx:100
 AliFemtoModelGausLCMSFreezeOutGenerator.cxx:101
 AliFemtoModelGausLCMSFreezeOutGenerator.cxx:102
 AliFemtoModelGausLCMSFreezeOutGenerator.cxx:103
 AliFemtoModelGausLCMSFreezeOutGenerator.cxx:104
 AliFemtoModelGausLCMSFreezeOutGenerator.cxx:105
 AliFemtoModelGausLCMSFreezeOutGenerator.cxx:106
 AliFemtoModelGausLCMSFreezeOutGenerator.cxx:107
 AliFemtoModelGausLCMSFreezeOutGenerator.cxx:108
 AliFemtoModelGausLCMSFreezeOutGenerator.cxx:109
 AliFemtoModelGausLCMSFreezeOutGenerator.cxx:110
 AliFemtoModelGausLCMSFreezeOutGenerator.cxx:111
 AliFemtoModelGausLCMSFreezeOutGenerator.cxx:112
 AliFemtoModelGausLCMSFreezeOutGenerator.cxx:113
 AliFemtoModelGausLCMSFreezeOutGenerator.cxx:114
 AliFemtoModelGausLCMSFreezeOutGenerator.cxx:115
 AliFemtoModelGausLCMSFreezeOutGenerator.cxx:116
 AliFemtoModelGausLCMSFreezeOutGenerator.cxx:117
 AliFemtoModelGausLCMSFreezeOutGenerator.cxx:118
 AliFemtoModelGausLCMSFreezeOutGenerator.cxx:119
 AliFemtoModelGausLCMSFreezeOutGenerator.cxx:120
 AliFemtoModelGausLCMSFreezeOutGenerator.cxx:121
 AliFemtoModelGausLCMSFreezeOutGenerator.cxx:122
 AliFemtoModelGausLCMSFreezeOutGenerator.cxx:123
 AliFemtoModelGausLCMSFreezeOutGenerator.cxx:124
 AliFemtoModelGausLCMSFreezeOutGenerator.cxx:125
 AliFemtoModelGausLCMSFreezeOutGenerator.cxx:126
 AliFemtoModelGausLCMSFreezeOutGenerator.cxx:127
 AliFemtoModelGausLCMSFreezeOutGenerator.cxx:128
 AliFemtoModelGausLCMSFreezeOutGenerator.cxx:129
 AliFemtoModelGausLCMSFreezeOutGenerator.cxx:130
 AliFemtoModelGausLCMSFreezeOutGenerator.cxx:131
 AliFemtoModelGausLCMSFreezeOutGenerator.cxx:132
 AliFemtoModelGausLCMSFreezeOutGenerator.cxx:133
 AliFemtoModelGausLCMSFreezeOutGenerator.cxx:134
 AliFemtoModelGausLCMSFreezeOutGenerator.cxx:135
 AliFemtoModelGausLCMSFreezeOutGenerator.cxx:136
 AliFemtoModelGausLCMSFreezeOutGenerator.cxx:137
 AliFemtoModelGausLCMSFreezeOutGenerator.cxx:138
 AliFemtoModelGausLCMSFreezeOutGenerator.cxx:139
 AliFemtoModelGausLCMSFreezeOutGenerator.cxx:140
 AliFemtoModelGausLCMSFreezeOutGenerator.cxx:141
 AliFemtoModelGausLCMSFreezeOutGenerator.cxx:142
 AliFemtoModelGausLCMSFreezeOutGenerator.cxx:143
 AliFemtoModelGausLCMSFreezeOutGenerator.cxx:144
 AliFemtoModelGausLCMSFreezeOutGenerator.cxx:145
 AliFemtoModelGausLCMSFreezeOutGenerator.cxx:146
 AliFemtoModelGausLCMSFreezeOutGenerator.cxx:147