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

#include "math.h"
#include "AliFemtoModelGausRinvFreezeOutGenerator.h"
#include "AliFemtoModelHiddenInfo.h"
#include "AliFemtoModelGlobalHiddenInfo.h"
#include "AliFemtoLorentzVector.h"
#include "AliFemtoTrack.h"

//_______________________
AliFemtoModelGausRinvFreezeOutGenerator::AliFemtoModelGausRinvFreezeOutGenerator() :
  fSizeInv(0),
  fSelectPrimary(false)
{
  // Default constructor
  fRandom = new TRandom2();
}

//_______________________
AliFemtoModelGausRinvFreezeOutGenerator::AliFemtoModelGausRinvFreezeOutGenerator(const AliFemtoModelGausRinvFreezeOutGenerator &aModel):
  AliFemtoModelFreezeOutGenerator(),
  fSizeInv(0),
  fSelectPrimary(false)
{
  // Copy constructor
  fRandom = new TRandom2();
  SetSizeInv(aModel.GetSizeInv());
}
//_______________________
AliFemtoModelGausRinvFreezeOutGenerator::~AliFemtoModelGausRinvFreezeOutGenerator()
{
  if (fRandom) delete fRandom;
}
//_______________________
AliFemtoModelGausRinvFreezeOutGenerator& AliFemtoModelGausRinvFreezeOutGenerator::operator=(const AliFemtoModelGausRinvFreezeOutGenerator &aModel)
{
  if (this != &aModel) {
    fRandom = new TRandom2();
    SetSizeInv(aModel.GetSizeInv());
  }

  return *this;

}
//_______________________
void AliFemtoModelGausRinvFreezeOutGenerator::GenerateFreezeOut(AliFemtoPair *aPair)
{
  AliFemtoTrack *inf1 = (AliFemtoTrack *) aPair->Track1()->Track();
  AliFemtoTrack *inf2 = (AliFemtoTrack *) aPair->Track2()->Track();

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

  if (fSelectPrimary) {
    const AliFemtoTrack *infg1 = dynamic_cast<const AliFemtoTrack *>(aPair->Track1()->Track());
    const AliFemtoTrack *infg2 = dynamic_cast<const AliFemtoTrack *>(aPair->Track2()->Track());
    
    if ((infg1) && (infg2)) {
      // assume the emission point is in [cm] and try to judge if
      // both particles are primary
      Double_t dist1 = infg1->GetGlobalEmissionPoint()->Perp();
      Double_t dist2 = infg2->GetGlobalEmissionPoint()->Perp();

      if ((dist1 > 0.05) && (dist2 > 0.05)) {
	// At least one particle is non primary
	if (!(inf1->GetEmissionPoint())) {
	  AliFemtoLorentzVector tPos(-1000,1000,-500,0);
	  inf1->SetEmissionPoint(&tPos);
	}
	else
	  inf1->SetEmissionPoint(-1000,1000,-500,0);
	if (!(inf2->GetEmissionPoint())) {
	  AliFemtoLorentzVector tPos(fRandom->Gaus(0,1000.0),fRandom->Gaus(0,1000),fRandom->Gaus(0,1000),0.0);
	  inf2->SetEmissionPoint(&tPos);
	}
	else
	  inf2->SetEmissionPoint(fRandom->Gaus(0,1000), fRandom->Gaus(0,1000), fRandom->Gaus(0,1000), 0.0);
	
	return;
      }
    }
  }

  // Generate two particle emission points with respect
  // to their pair momentum 
  // The source is the 3D Gaussian ellipsoid in the LCMS frame

  // Calculate sum momenta
  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 tMt = sqrt(tEs*tEs - tPz*tPz);

  // Generate positions in PRF from a Gaussian
  Double_t tROutS =  fRandom->Gaus(0,fSizeInv); // reuse of long
  Double_t tRSideS = fRandom->Gaus(0,fSizeInv);
  Double_t tRLongS = fRandom->Gaus(0,fSizeInv);
  Double_t tRTimeS = 0;
      
  Double_t tBetat  = tPt/tMt;
  Double_t tGammat = 1.0/sqrt(1.0-tBetat*tBetat);

  Double_t tBetaz  = tPz/tEs;
  Double_t tGammaz = 1.0/sqrt(1.0-tBetaz*tBetaz);

  Double_t tROut = tGammat * (tROutS + tBetat * tRTimeS);
  Double_t tDtL  = tGammat * (tRTimeS + tBetat * tROutS);
  Double_t tRSide = tRSideS;

  Double_t tRLong = tGammaz * (tRLongS + tBetaz * tDtL);
  Double_t tDt    = tGammaz * (tDtL + tBetaz * tRLongS);
	  
  tPx /= tPt;
  tPy /= tPt;
	  
  Double_t tXout  = tROut*tPx-tRSide*tPy;
  Double_t tXside = tROut*tPy+tRSide*tPx;
  Double_t tXlong = tRLong;
  Double_t tXtime = tDt;
  
  if (!(inf1->GetEmissionPoint())) {
    AliFemtoLorentzVector tPos(0,0,0,0);
    inf1->SetEmissionPoint(&tPos);
  }
  else
    inf1->SetEmissionPoint(0,0,0,0);
  if (!(inf2->GetEmissionPoint())) {
    AliFemtoLorentzVector tPos(tXout,tXside,tXlong,tXtime);
    inf2->SetEmissionPoint(&tPos);
  }
  else
    inf2->SetEmissionPoint(tXout, tXside, tXlong, tXtime);
}

//_______________________
void AliFemtoModelGausRinvFreezeOutGenerator::SetSizeInv(Double_t aSizeInv)
{
  fSizeInv = aSizeInv;
}
//_______________________
Double_t AliFemtoModelGausRinvFreezeOutGenerator::GetSizeInv() const
{
  return fSizeInv;
}
//_______________________
AliFemtoModelFreezeOutGenerator* AliFemtoModelGausRinvFreezeOutGenerator::Clone() const
{ 
  return GetGenerator(); 
}
//_______________________
inline AliFemtoModelFreezeOutGenerator* AliFemtoModelGausRinvFreezeOutGenerator::GetGenerator() const 
{ 
  AliFemtoModelFreezeOutGenerator* tModel = new AliFemtoModelGausRinvFreezeOutGenerator(*this); 
  return tModel; 
}
//_______________________
void AliFemtoModelGausRinvFreezeOutGenerator::SetSelectPrimaryFromHidden(bool aUse)
{
  fSelectPrimary = aUse;
}
Bool_t AliFemtoModelGausRinvFreezeOutGenerator::GetSelectPrimaryFromHidden()
{
  return fSelectPrimary;
}

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