MpdFemtoModelGausLCMSFreezeOutGenerator.cxx 4.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123
  1. /**
  2. * MpdFemtoModelGausLCMSFreezeOutGenerator - freeze-out
  3. * coordinates generator, generating a 3D gaussian ellipsoid in LCMS
  4. */
  5. // C++ headers
  6. #include <math.h>
  7. #include <iostream>
  8. // MpdFemtoMaker headers
  9. #include "MpdFemtoModelGausLCMSFreezeOutGenerator.h"
  10. #include "MpdFemtoModelHiddenInfo.h"
  11. // ROOT headers
  12. #include "TMath.h"
  13. #include "TLorentzVector.h"
  14. ClassImp(MpdFemtoModelGausLCMSFreezeOutGenerator);
  15. //_________________
  16. MpdFemtoModelGausLCMSFreezeOutGenerator::MpdFemtoModelGausLCMSFreezeOutGenerator() :
  17. mSizeOut(0), mSizeSide(0), mSizeLong(0) {
  18. // Default constructor
  19. mRandom = new TRandom3();
  20. }
  21. //_________________
  22. MpdFemtoModelGausLCMSFreezeOutGenerator::MpdFemtoModelGausLCMSFreezeOutGenerator(const MpdFemtoModelGausLCMSFreezeOutGenerator &aModel) :
  23. MpdFemtoBaseModelFreezeOutGenerator(aModel),
  24. mSizeOut(0), mSizeSide(0), mSizeLong(0) {
  25. // Copy constructor
  26. mRandom = new TRandom3();
  27. setSizeOut(aModel.sizeOut());
  28. setSizeSide(aModel.sizeSide());
  29. setSizeLong(aModel.sizeLong());
  30. }
  31. //_________________
  32. MpdFemtoModelGausLCMSFreezeOutGenerator& MpdFemtoModelGausLCMSFreezeOutGenerator::operator=(const MpdFemtoModelGausLCMSFreezeOutGenerator &aModel) {
  33. // Assignment operator
  34. if (this != &aModel) {
  35. mRandom = new TRandom3();
  36. setSizeOut(aModel.sizeOut());
  37. setSizeSide(aModel.sizeSide());
  38. setSizeLong(aModel.sizeLong());
  39. }
  40. return *this;
  41. }
  42. //_________________
  43. MpdFemtoModelGausLCMSFreezeOutGenerator::~MpdFemtoModelGausLCMSFreezeOutGenerator() {
  44. if (mRandom) delete mRandom;
  45. }
  46. //_________________
  47. void MpdFemtoModelGausLCMSFreezeOutGenerator::generateFreezeOut(MpdFemtoPair *aPair) {
  48. // Generate two-particle emission points with respect
  49. // to their pair momentum
  50. // The source is the 3D Gaussian ellipsoid in the LCMS frame
  51. //MpdFemtoModelHiddenInfo *inf1 = (MpdFemtoModelHiddenInfo *) aPair->Track1()->HiddenInfo();
  52. //MpdFemtoModelHiddenInfo *inf2 = (MpdFemtoModelHiddenInfo *) aPair->Track2()->HiddenInfo();
  53. // Mike Lisa
  54. MpdFemtoTrack *inf1 = (MpdFemtoTrack *) aPair->track1()->track();
  55. MpdFemtoTrack *inf2 = (MpdFemtoTrack *) aPair->track2()->track();
  56. if ((!inf1) || (!inf2)) {
  57. std::cout << "Hidden info not created! " << std::endl;
  58. exit(kFALSE);
  59. }
  60. //std::cout<<" we are in Freeze-out Generator inf1 inf2 "<<inf1<<" "<<inf2<<std::endl;
  61. //std::cout<<" inf1 GetMass "<<((MpdFemtoModelHiddenInfo*)inf1->GetHiddenInfo())->GetPDGPid()<<std::endl;
  62. //std::cout<<" true mom " <<((MpdFemtoModelHiddenInfo*)inf1->GetHiddenInfo())->GetTrueMomentum()->x()<<std::endl;
  63. double tPx = (((MpdFemtoModelHiddenInfo*) inf1->hiddenInfo())->trueMomentum().X() +
  64. ((MpdFemtoModelHiddenInfo*) inf2->hiddenInfo())->trueMomentum().X());
  65. double tPy = (((MpdFemtoModelHiddenInfo*) inf1->hiddenInfo())->trueMomentum().Y() +
  66. ((MpdFemtoModelHiddenInfo*) inf2->hiddenInfo())->trueMomentum().Y());
  67. double tPz = (((MpdFemtoModelHiddenInfo*) inf1->hiddenInfo())->trueMomentum().Z() +
  68. ((MpdFemtoModelHiddenInfo*) inf2->hiddenInfo())->trueMomentum().Z());
  69. // double tPy = inf1->GetTrueMomentum()->y() + inf2->GetTrueMomentum()->y();
  70. // double tPz = inf1->GetTrueMomentum()->z() + inf2->GetTrueMomentum()->z();
  71. //std::cout<<" tPx tPy tPz"<<tPx<<" "<<tPy<<" "<<tPz<<std::endl;
  72. if (!(tPx == 0 && tPy == 0 && tPz == 0)) {
  73. double tM1 = ((MpdFemtoModelHiddenInfo*) inf1->hiddenInfo())->mass();
  74. double tM2 = ((MpdFemtoModelHiddenInfo*) inf2->hiddenInfo())->mass();
  75. double tE1 = TMath::Sqrt(tM1 * tM1 +
  76. ((MpdFemtoModelHiddenInfo*) inf1->hiddenInfo())->trueMomentum().Mag2());
  77. double tE2 = TMath::Sqrt(tM2 * tM2 +
  78. ((MpdFemtoModelHiddenInfo*) inf2->hiddenInfo())->trueMomentum().Mag2());
  79. double tEs = tE1 + tE2;
  80. //std::cout<<" tM1 tM2 tE1 tE2"<<tM1<<" "<<tM2<<" "<<tE2<<std::endl;
  81. double tPt = TMath::Sqrt(tPx * tPx + tPy * tPy);
  82. double tRout = mRandom->Gaus(0.0, mSizeOut);
  83. double tRside = mRandom->Gaus(0.0, mSizeSide);
  84. double tRlong = mRandom->Gaus(0.0, mSizeLong);
  85. double tXout = (tPx * tRout + tPy * tRside) / tPt;
  86. double tXside = (tPy * tRout - tPx * tRside) / tPt;
  87. double tBetaz = tPz / tEs;
  88. double tGammaz = 1.0 / TMath::Sqrt(1 - tBetaz * tBetaz);
  89. double tXlong = tGammaz * (tRlong + tBetaz * 0);
  90. double tXtime = tGammaz * (0 + tBetaz * tRlong);
  91. //std::cout<<" tXout tXside before hidden infor "<<tXout<<" "<<tXside<<std::endl;
  92. inf1->hiddenInfo()->setEmissionPoint(0., 0., 0., 0.);
  93. inf2->hiddenInfo()->setEmissionPoint(tXout, tXside, tXlong, tXtime);
  94. //std::cout<<" after all tXout tXside "<<tXout<<" "<<tXside<<std::endl;
  95. } // if ( !(tPx==0 && tPy==0 && tPz==0 ) ) {
  96. }