ROOT logo
////////////////////////////////////////////////////////////////////////////////
///                                                                          ///
/// AliFemtoModelWeightGeneratorBasic -  basic femtoscopic weight generator  ///
/// only return a simple                                                          ///
/// Authors: Adam Kisiel kisiel@mps.ohio-state.edu                           ///
///                                                                          ///
////////////////////////////////////////////////////////////////////////////////
#ifdef __ROOT__
  ClassImp(AliFemtoModelWeightGeneratorBasic, 1)
#endif

#include "AliFemtoModelWeightGeneratorBasic.h"
#include "AliFemtoModelHiddenInfo.h"

//________________________
AliFemtoModelWeightGeneratorBasic::AliFemtoModelWeightGeneratorBasic():
  AliFemtoModelWeightGenerator()
{
  /* no-op */
}
//________________________
AliFemtoModelWeightGeneratorBasic::AliFemtoModelWeightGeneratorBasic(const AliFemtoModelWeightGeneratorBasic &aModel) :
  AliFemtoModelWeightGenerator(aModel)
{
  /* no-op */
}

//________________________
AliFemtoModelWeightGeneratorBasic::~AliFemtoModelWeightGeneratorBasic()
{
  /* no-op */
}

AliFemtoModelWeightGeneratorBasic& AliFemtoModelWeightGeneratorBasic::operator=(const AliFemtoModelWeightGeneratorBasic &aModel)
{
  if (this != &aModel) {
    AliFemtoModelWeightGenerator::operator=(aModel);
  }
  
  return *this;
}

//________________________
Double_t AliFemtoModelWeightGeneratorBasic::GenerateWeight(AliFemtoPair *aPair)
{
  // Generate a simple femtoscopic weight coming only from 
  // quantum statistics - symmetrization or anti-symmetrization
  // of the pair wave function

  // Get hidden information pointers
  //AliFemtoModelHiddenInfo *inf1 = (AliFemtoModelHiddenInfo *) aPair->Track1()->HiddenInfo();
  //AliFemtoModelHiddenInfo *inf2 = (AliFemtoModelHiddenInfo *) aPair->Track2()->HiddenInfo();
  AliFemtoTrack *inf1 = (AliFemtoTrack *) aPair->Track1()->Track();
  AliFemtoTrack *inf2 = (AliFemtoTrack *) aPair->Track2()->Track();

  // Calculate pair variables
  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 tE  = inf1->GetTrueMomentum()->e +inf2->GetTrueMomentum()->.e;
  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 tE  = tE1 + tE2;
  Double_t tPt = tPx*tPx + tPy*tPy;
  Double_t tMt = tE*tE - tPz*tPz;//mCVK;
  Double_t tM  = sqrt(tMt - tPt);
  tMt = sqrt(tMt);
  tPt = sqrt(tPt);
  Double_t tBetat = tPt/tMt;

  // Boost to LCMS
  Double_t tBeta = tPz/tE;
  Double_t tGamma = tE/tMt;	    
  fKStarLong = tGamma * (inf1->GetTrueMomentum()->z() - tBeta * tE1);
  Double_t tE1L = tGamma * (tE1  - tBeta * inf1->GetTrueMomentum()->z());
  
  // Transform positions to LCMS
//   Double_t tP1zl = tGamma * (inf1->GetEmissionPoint()->z() - tBeta * inf1->GetEmissionPoint()->t());
//   Double_t tP1tl = tGamma * (inf1->GetEmissionPoint()->t() - tBeta * inf1->GetEmissionPoint()->z());
  
//   Double_t tP2zl = tGamma * (inf2->GetEmissionPoint()->z() - tBeta * inf2->GetEmissionPoint()->t());
//   Double_t tP2tl = tGamma * (inf2->GetEmissionPoint()->t() - tBeta * inf2->GetEmissionPoint()->z());
  
//   Double_t tP1pzl = tGamma * (inf1->GetTrueMomentum()->z() - tBeta * tE1);
//   Double_t tP1el  = tGamma * (tE1  - tBeta * inf1->GetTrueMomentum()->z());
  
//   Double_t tP2pzl = tGamma * (inf2->GetTrueMomentum()->z() - tBeta * tE2);
//   Double_t tP2el  = tGamma * (tE2  - tBeta * inf2->GetTrueMomentum()->z());
  
  // Rotate in transverse plane
  fKStarOut  = ( inf1->GetTrueMomentum()->x()*tPx + inf1->GetTrueMomentum()->y()*tPy)/tPt;
  fKStarSide = (-inf1->GetTrueMomentum()->x()*tPy + inf1->GetTrueMomentum()->y()*tPx)/tPt;
      
//   Double_t tP1pxl = fKStarOut;
//   Double_t tP1pyl = fKStarSide;
  
//   Double_t tP2pxl = (inf2->GetTrueMomentum()->x()*tPx + inf2->GetTrueMomentum()->y()*tPy)/tPt;
//   Double_t tP2pyl = (inf2->GetTrueMomentum()->y()*tPx - inf2->GetTrueMomentum()->x()*tPy)/tPt;;
  
//   Double_t tKO = tP1pxl - tP2pxl;
//   Double_t tKS = tP1pyl - tP2pyl;
//   Double_t tKL = tP1pzl - tP2pzl;
//   Double_t tDE = tP1el  - tP2el;
  
  // save the rotated coordinates in LCMS variables
//   Double_t tP1xl = ( inf1->GetEmissionPoint()->x()*tPx + inf1->GetEmissionPoint()->y()*tPy)/tPt;
//   Double_t tP1yl = (-inf1->GetEmissionPoint()->x()*tPy + inf1->GetEmissionPoint()->y()*tPx)/tPt;

//   Double_t tP2xl = ( inf2->GetEmissionPoint()->x()*tPx + inf2->GetEmissionPoint()->y()*tPy)/tPt;
//   Double_t tP2yl = (-inf2->GetEmissionPoint()->x()*tPy + inf2->GetEmissionPoint()->y()*tPx)/tPt;
  
  // Boost to pair cms
  fKStarOut = tMt/tM * (fKStarOut - tPt/tMt * tE1L);
  
  tBetat = tPt/tMt;
//   Double_t tGammat = 1.0/sqrt(1.0-tBetat*tBetat);
  
//   Double_t tP1xp = tGammat*(tP1xl - tBetat*tP1tl);
//   Double_t tP1tp = tGammat*(tP1tl - tBetat*tP1xl);
  
//   Double_t tP2xp = tGammat*(tP2xl - tBetat*tP2tl);
//   Double_t tP2tp = tGammat*(tP2tl - tBetat*tP2xl);
  
//   Double_t tRO = (tP1xl - tP2xl)/0.197327;
//   Double_t tRS = (tP1yl - tP2yl)/0.197327;
//   Double_t tRL = (tP1zl - tP2zl)/0.197327;
//   Double_t tDT = (tP1tl - tP2tl)/0.197327;
  
  Double_t tDX = inf1->GetEmissionPoint()->x()-inf2->GetEmissionPoint()->x();
  Double_t tDY = inf1->GetEmissionPoint()->y()-inf2->GetEmissionPoint()->y();
  Double_t tRLong = inf1->GetEmissionPoint()->z()-inf2->GetEmissionPoint()->z();
  Double_t tDTime = inf1->GetEmissionPoint()->t()-inf2->GetEmissionPoint()->t();

  Double_t tROut = (tDX*tPx + tDY*tPy)/tPt;
  Double_t tRSide = (-tDX*tPy + tDY*tPx)/tPt;

  fRStarSide = tRSide;
  Double_t tRSS = fRStarSide/0.197327;

  fRStarLong = tGamma*(tRLong - tBeta* tDTime);
  Double_t tDTimePairLCMS = tGamma*(tDTime - tBeta* tRLong);

  Double_t tRLS = fRStarLong/0.197327;
  tBeta = tPt/tMt;
  tGamma = tMt/tM;

  fRStarOut = tGamma*(tROut - tBeta* tDTimePairLCMS);
  Double_t tROS = fRStarOut/0.197327;
//   Double_t tDTimePairCMS = tGamma*(tDTimePairLCMS - tBeta* tROut);
  fRStar = ::sqrt(fRStarOut*fRStarOut + fRStarSide*fRStarSide +
			   fRStarLong*fRStarLong);
  fKStar = ::sqrt(fKStarOut*fKStarOut + fKStarSide*fKStarSide + fKStarLong*fKStarLong);
//   Double_t tRSt = fRStar/0.197327;

  if (fPairType != fgkPairTypeNone) {
    if ((fPairType == PionPlusPionPlus()) || (fPairType == KaonPlusKaonPlus()))
      return 1.0 + cos (2*(fKStarOut * tROS + fKStarSide * tRSS + fKStarLong * tRLS));
    else if (fPairType == ProtonProton())
      return 1.0 - 0.5 * cos (2*(fKStarOut * tROS + fKStarSide * tRSS + fKStarLong * tRLS));
    else 
      return 1.0;
  }
  else {
    Int_t tPairType = GetPairTypeFromPair(aPair);
    if ((tPairType == PionPlusPionPlus()) || (tPairType == KaonPlusKaonPlus()))
      return 1.0 + cos (2*(fKStarOut * tROS + fKStarSide * tRSS + fKStarLong * tRLS));
    else if (tPairType == ProtonProton())
      return 1.0 - 0.5 * cos (2*(fKStarOut * tROS + fKStarSide * tRSS + fKStarLong * tRLS));
    else 
      return 1.0;
    
  }
}

//________________________
void     AliFemtoModelWeightGeneratorBasic::SetPairType(Int_t aPairType)
{
  AliFemtoModelWeightGenerator::SetPairType(aPairType);
}
//________________________
void     AliFemtoModelWeightGeneratorBasic::SetPairTypeFromPair(AliFemtoPair *aPair)
{
  AliFemtoModelWeightGenerator::SetPairTypeFromPair(aPair);
}
//________________________
Int_t    AliFemtoModelWeightGeneratorBasic::GetPairType() const
{
  return AliFemtoModelWeightGenerator::GetPairType();
}
//________________________
AliFemtoModelWeightGenerator* AliFemtoModelWeightGeneratorBasic::Clone() const
{
  return GetGenerator();
}
//________________________
AliFemtoModelWeightGenerator* AliFemtoModelWeightGeneratorBasic::GetGenerator() const
{
  AliFemtoModelWeightGeneratorBasic *tGen = new AliFemtoModelWeightGeneratorBasic(*this);
  return tGen;
}
 AliFemtoModelWeightGeneratorBasic.cxx:1
 AliFemtoModelWeightGeneratorBasic.cxx:2
 AliFemtoModelWeightGeneratorBasic.cxx:3
 AliFemtoModelWeightGeneratorBasic.cxx:4
 AliFemtoModelWeightGeneratorBasic.cxx:5
 AliFemtoModelWeightGeneratorBasic.cxx:6
 AliFemtoModelWeightGeneratorBasic.cxx:7
 AliFemtoModelWeightGeneratorBasic.cxx:8
 AliFemtoModelWeightGeneratorBasic.cxx:9
 AliFemtoModelWeightGeneratorBasic.cxx:10
 AliFemtoModelWeightGeneratorBasic.cxx:11
 AliFemtoModelWeightGeneratorBasic.cxx:12
 AliFemtoModelWeightGeneratorBasic.cxx:13
 AliFemtoModelWeightGeneratorBasic.cxx:14
 AliFemtoModelWeightGeneratorBasic.cxx:15
 AliFemtoModelWeightGeneratorBasic.cxx:16
 AliFemtoModelWeightGeneratorBasic.cxx:17
 AliFemtoModelWeightGeneratorBasic.cxx:18
 AliFemtoModelWeightGeneratorBasic.cxx:19
 AliFemtoModelWeightGeneratorBasic.cxx:20
 AliFemtoModelWeightGeneratorBasic.cxx:21
 AliFemtoModelWeightGeneratorBasic.cxx:22
 AliFemtoModelWeightGeneratorBasic.cxx:23
 AliFemtoModelWeightGeneratorBasic.cxx:24
 AliFemtoModelWeightGeneratorBasic.cxx:25
 AliFemtoModelWeightGeneratorBasic.cxx:26
 AliFemtoModelWeightGeneratorBasic.cxx:27
 AliFemtoModelWeightGeneratorBasic.cxx:28
 AliFemtoModelWeightGeneratorBasic.cxx:29
 AliFemtoModelWeightGeneratorBasic.cxx:30
 AliFemtoModelWeightGeneratorBasic.cxx:31
 AliFemtoModelWeightGeneratorBasic.cxx:32
 AliFemtoModelWeightGeneratorBasic.cxx:33
 AliFemtoModelWeightGeneratorBasic.cxx:34
 AliFemtoModelWeightGeneratorBasic.cxx:35
 AliFemtoModelWeightGeneratorBasic.cxx:36
 AliFemtoModelWeightGeneratorBasic.cxx:37
 AliFemtoModelWeightGeneratorBasic.cxx:38
 AliFemtoModelWeightGeneratorBasic.cxx:39
 AliFemtoModelWeightGeneratorBasic.cxx:40
 AliFemtoModelWeightGeneratorBasic.cxx:41
 AliFemtoModelWeightGeneratorBasic.cxx:42
 AliFemtoModelWeightGeneratorBasic.cxx:43
 AliFemtoModelWeightGeneratorBasic.cxx:44
 AliFemtoModelWeightGeneratorBasic.cxx:45
 AliFemtoModelWeightGeneratorBasic.cxx:46
 AliFemtoModelWeightGeneratorBasic.cxx:47
 AliFemtoModelWeightGeneratorBasic.cxx:48
 AliFemtoModelWeightGeneratorBasic.cxx:49
 AliFemtoModelWeightGeneratorBasic.cxx:50
 AliFemtoModelWeightGeneratorBasic.cxx:51
 AliFemtoModelWeightGeneratorBasic.cxx:52
 AliFemtoModelWeightGeneratorBasic.cxx:53
 AliFemtoModelWeightGeneratorBasic.cxx:54
 AliFemtoModelWeightGeneratorBasic.cxx:55
 AliFemtoModelWeightGeneratorBasic.cxx:56
 AliFemtoModelWeightGeneratorBasic.cxx:57
 AliFemtoModelWeightGeneratorBasic.cxx:58
 AliFemtoModelWeightGeneratorBasic.cxx:59
 AliFemtoModelWeightGeneratorBasic.cxx:60
 AliFemtoModelWeightGeneratorBasic.cxx:61
 AliFemtoModelWeightGeneratorBasic.cxx:62
 AliFemtoModelWeightGeneratorBasic.cxx:63
 AliFemtoModelWeightGeneratorBasic.cxx:64
 AliFemtoModelWeightGeneratorBasic.cxx:65
 AliFemtoModelWeightGeneratorBasic.cxx:66
 AliFemtoModelWeightGeneratorBasic.cxx:67
 AliFemtoModelWeightGeneratorBasic.cxx:68
 AliFemtoModelWeightGeneratorBasic.cxx:69
 AliFemtoModelWeightGeneratorBasic.cxx:70
 AliFemtoModelWeightGeneratorBasic.cxx:71
 AliFemtoModelWeightGeneratorBasic.cxx:72
 AliFemtoModelWeightGeneratorBasic.cxx:73
 AliFemtoModelWeightGeneratorBasic.cxx:74
 AliFemtoModelWeightGeneratorBasic.cxx:75
 AliFemtoModelWeightGeneratorBasic.cxx:76
 AliFemtoModelWeightGeneratorBasic.cxx:77
 AliFemtoModelWeightGeneratorBasic.cxx:78
 AliFemtoModelWeightGeneratorBasic.cxx:79
 AliFemtoModelWeightGeneratorBasic.cxx:80
 AliFemtoModelWeightGeneratorBasic.cxx:81
 AliFemtoModelWeightGeneratorBasic.cxx:82
 AliFemtoModelWeightGeneratorBasic.cxx:83
 AliFemtoModelWeightGeneratorBasic.cxx:84
 AliFemtoModelWeightGeneratorBasic.cxx:85
 AliFemtoModelWeightGeneratorBasic.cxx:86
 AliFemtoModelWeightGeneratorBasic.cxx:87
 AliFemtoModelWeightGeneratorBasic.cxx:88
 AliFemtoModelWeightGeneratorBasic.cxx:89
 AliFemtoModelWeightGeneratorBasic.cxx:90
 AliFemtoModelWeightGeneratorBasic.cxx:91
 AliFemtoModelWeightGeneratorBasic.cxx:92
 AliFemtoModelWeightGeneratorBasic.cxx:93
 AliFemtoModelWeightGeneratorBasic.cxx:94
 AliFemtoModelWeightGeneratorBasic.cxx:95
 AliFemtoModelWeightGeneratorBasic.cxx:96
 AliFemtoModelWeightGeneratorBasic.cxx:97
 AliFemtoModelWeightGeneratorBasic.cxx:98
 AliFemtoModelWeightGeneratorBasic.cxx:99
 AliFemtoModelWeightGeneratorBasic.cxx:100
 AliFemtoModelWeightGeneratorBasic.cxx:101
 AliFemtoModelWeightGeneratorBasic.cxx:102
 AliFemtoModelWeightGeneratorBasic.cxx:103
 AliFemtoModelWeightGeneratorBasic.cxx:104
 AliFemtoModelWeightGeneratorBasic.cxx:105
 AliFemtoModelWeightGeneratorBasic.cxx:106
 AliFemtoModelWeightGeneratorBasic.cxx:107
 AliFemtoModelWeightGeneratorBasic.cxx:108
 AliFemtoModelWeightGeneratorBasic.cxx:109
 AliFemtoModelWeightGeneratorBasic.cxx:110
 AliFemtoModelWeightGeneratorBasic.cxx:111
 AliFemtoModelWeightGeneratorBasic.cxx:112
 AliFemtoModelWeightGeneratorBasic.cxx:113
 AliFemtoModelWeightGeneratorBasic.cxx:114
 AliFemtoModelWeightGeneratorBasic.cxx:115
 AliFemtoModelWeightGeneratorBasic.cxx:116
 AliFemtoModelWeightGeneratorBasic.cxx:117
 AliFemtoModelWeightGeneratorBasic.cxx:118
 AliFemtoModelWeightGeneratorBasic.cxx:119
 AliFemtoModelWeightGeneratorBasic.cxx:120
 AliFemtoModelWeightGeneratorBasic.cxx:121
 AliFemtoModelWeightGeneratorBasic.cxx:122
 AliFemtoModelWeightGeneratorBasic.cxx:123
 AliFemtoModelWeightGeneratorBasic.cxx:124
 AliFemtoModelWeightGeneratorBasic.cxx:125
 AliFemtoModelWeightGeneratorBasic.cxx:126
 AliFemtoModelWeightGeneratorBasic.cxx:127
 AliFemtoModelWeightGeneratorBasic.cxx:128
 AliFemtoModelWeightGeneratorBasic.cxx:129
 AliFemtoModelWeightGeneratorBasic.cxx:130
 AliFemtoModelWeightGeneratorBasic.cxx:131
 AliFemtoModelWeightGeneratorBasic.cxx:132
 AliFemtoModelWeightGeneratorBasic.cxx:133
 AliFemtoModelWeightGeneratorBasic.cxx:134
 AliFemtoModelWeightGeneratorBasic.cxx:135
 AliFemtoModelWeightGeneratorBasic.cxx:136
 AliFemtoModelWeightGeneratorBasic.cxx:137
 AliFemtoModelWeightGeneratorBasic.cxx:138
 AliFemtoModelWeightGeneratorBasic.cxx:139
 AliFemtoModelWeightGeneratorBasic.cxx:140
 AliFemtoModelWeightGeneratorBasic.cxx:141
 AliFemtoModelWeightGeneratorBasic.cxx:142
 AliFemtoModelWeightGeneratorBasic.cxx:143
 AliFemtoModelWeightGeneratorBasic.cxx:144
 AliFemtoModelWeightGeneratorBasic.cxx:145
 AliFemtoModelWeightGeneratorBasic.cxx:146
 AliFemtoModelWeightGeneratorBasic.cxx:147
 AliFemtoModelWeightGeneratorBasic.cxx:148
 AliFemtoModelWeightGeneratorBasic.cxx:149
 AliFemtoModelWeightGeneratorBasic.cxx:150
 AliFemtoModelWeightGeneratorBasic.cxx:151
 AliFemtoModelWeightGeneratorBasic.cxx:152
 AliFemtoModelWeightGeneratorBasic.cxx:153
 AliFemtoModelWeightGeneratorBasic.cxx:154
 AliFemtoModelWeightGeneratorBasic.cxx:155
 AliFemtoModelWeightGeneratorBasic.cxx:156
 AliFemtoModelWeightGeneratorBasic.cxx:157
 AliFemtoModelWeightGeneratorBasic.cxx:158
 AliFemtoModelWeightGeneratorBasic.cxx:159
 AliFemtoModelWeightGeneratorBasic.cxx:160
 AliFemtoModelWeightGeneratorBasic.cxx:161
 AliFemtoModelWeightGeneratorBasic.cxx:162
 AliFemtoModelWeightGeneratorBasic.cxx:163
 AliFemtoModelWeightGeneratorBasic.cxx:164
 AliFemtoModelWeightGeneratorBasic.cxx:165
 AliFemtoModelWeightGeneratorBasic.cxx:166
 AliFemtoModelWeightGeneratorBasic.cxx:167
 AliFemtoModelWeightGeneratorBasic.cxx:168
 AliFemtoModelWeightGeneratorBasic.cxx:169
 AliFemtoModelWeightGeneratorBasic.cxx:170
 AliFemtoModelWeightGeneratorBasic.cxx:171
 AliFemtoModelWeightGeneratorBasic.cxx:172
 AliFemtoModelWeightGeneratorBasic.cxx:173
 AliFemtoModelWeightGeneratorBasic.cxx:174
 AliFemtoModelWeightGeneratorBasic.cxx:175
 AliFemtoModelWeightGeneratorBasic.cxx:176
 AliFemtoModelWeightGeneratorBasic.cxx:177
 AliFemtoModelWeightGeneratorBasic.cxx:178
 AliFemtoModelWeightGeneratorBasic.cxx:179
 AliFemtoModelWeightGeneratorBasic.cxx:180
 AliFemtoModelWeightGeneratorBasic.cxx:181
 AliFemtoModelWeightGeneratorBasic.cxx:182
 AliFemtoModelWeightGeneratorBasic.cxx:183
 AliFemtoModelWeightGeneratorBasic.cxx:184
 AliFemtoModelWeightGeneratorBasic.cxx:185
 AliFemtoModelWeightGeneratorBasic.cxx:186
 AliFemtoModelWeightGeneratorBasic.cxx:187
 AliFemtoModelWeightGeneratorBasic.cxx:188
 AliFemtoModelWeightGeneratorBasic.cxx:189
 AliFemtoModelWeightGeneratorBasic.cxx:190
 AliFemtoModelWeightGeneratorBasic.cxx:191
 AliFemtoModelWeightGeneratorBasic.cxx:192
 AliFemtoModelWeightGeneratorBasic.cxx:193
 AliFemtoModelWeightGeneratorBasic.cxx:194
 AliFemtoModelWeightGeneratorBasic.cxx:195
 AliFemtoModelWeightGeneratorBasic.cxx:196
 AliFemtoModelWeightGeneratorBasic.cxx:197
 AliFemtoModelWeightGeneratorBasic.cxx:198
 AliFemtoModelWeightGeneratorBasic.cxx:199
 AliFemtoModelWeightGeneratorBasic.cxx:200
 AliFemtoModelWeightGeneratorBasic.cxx:201
 AliFemtoModelWeightGeneratorBasic.cxx:202