MpdFemtoModelManager.cxx 5.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208
  1. //
  2. // Manager for model studies
  3. //
  4. // MpdFemtoMaker headers
  5. #include "MpdFemtoModelManager.h"
  6. #include "MpdFemtoModelHiddenInfo.h"
  7. // C++ headers
  8. #include <iostream>
  9. ClassImp(MpdFemtoModelManager);
  10. //_____________________________________________
  11. MpdFemtoModelManager::MpdFemtoModelManager() :
  12. mFreezeOutGenerator(nullptr),
  13. mWeightGenerator(nullptr),
  14. mCreateCopyHiddenInfo(false) {
  15. // Default constructor
  16. /* empty */
  17. }
  18. //_________________
  19. MpdFemtoModelManager::MpdFemtoModelManager(const MpdFemtoModelManager& copy) :
  20. mFreezeOutGenerator(nullptr),
  21. mWeightGenerator(nullptr),
  22. mCreateCopyHiddenInfo(copy.mCreateCopyHiddenInfo) {
  23. // Copy constructor
  24. // Copy freeze-out coordinate generator if exists
  25. if (copy.mFreezeOutGenerator) {
  26. mFreezeOutGenerator = copy.mFreezeOutGenerator->clone();
  27. }
  28. // Copy femtoscopic weight generator if exists
  29. if (copy.mWeightGenerator) {
  30. mWeightGenerator = copy.mWeightGenerator->clone();
  31. }
  32. }
  33. //_________________
  34. MpdFemtoModelManager::~MpdFemtoModelManager() {
  35. if (mFreezeOutGenerator) delete mFreezeOutGenerator;
  36. if (mWeightGenerator) delete mWeightGenerator;
  37. }
  38. //_________________
  39. MpdFemtoModelManager& MpdFemtoModelManager::operator=(const MpdFemtoModelManager& copy) {
  40. // Check if the instance is not a copy of the object.
  41. // If not then copy it.
  42. if (this != &copy) {
  43. // Copy freeze-out coordinate generator if exists
  44. if (copy.mFreezeOutGenerator) {
  45. mFreezeOutGenerator = copy.mFreezeOutGenerator->clone();
  46. } else {
  47. mFreezeOutGenerator = nullptr;
  48. }
  49. // Copy femtoscopic weight generator if exists
  50. if (copy.mWeightGenerator) {
  51. mWeightGenerator = copy.mWeightGenerator->clone();
  52. } else {
  53. mWeightGenerator = nullptr;
  54. }
  55. // Copy hidden info copy status
  56. mCreateCopyHiddenInfo = copy.mCreateCopyHiddenInfo;
  57. }
  58. return *this;
  59. }
  60. //_____________________________________________
  61. double MpdFemtoModelManager::weight(MpdFemtoPair *aPair) {
  62. if (!mWeightGenerator) {
  63. std::cout << "No weight generator set! Cannot calculate weight" << std::endl;
  64. return 1.0;
  65. // exit(0);
  66. }
  67. // Return femtoscopic weight for a given pair
  68. if (mCreateCopyHiddenInfo) {
  69. // Try to guess particle masses and pid from the weight generator
  70. int tPid1 = 0, tPid2 = 0;
  71. // pi+pi+
  72. if (mWeightGenerator->pairType() == MpdFemtoBaseModelWeightGenerator::pionPlusPionPlus()) {
  73. tPid1 = 211;
  74. tPid2 = 211;
  75. }
  76. // pi+pi-
  77. if (mWeightGenerator->pairType() == MpdFemtoBaseModelWeightGenerator::pionPlusPionMinus()) {
  78. tPid1 = 211;
  79. tPid2 = -211;
  80. }
  81. // K+K+
  82. if (mWeightGenerator->pairType() == MpdFemtoBaseModelWeightGenerator::kaonPlusKaonPlus()) {
  83. tPid1 = 321;
  84. tPid2 = 321;
  85. }
  86. // K+K-
  87. if (mWeightGenerator->pairType() == MpdFemtoBaseModelWeightGenerator::kaonPlusKaonMinus()) {
  88. tPid1 = 321;
  89. tPid2 = -321;
  90. }
  91. // pp
  92. if (mWeightGenerator->pairType() == MpdFemtoBaseModelWeightGenerator::protonProton()) {
  93. tPid1 = 2212;
  94. tPid2 = 2212;
  95. }
  96. // p antip
  97. if (mWeightGenerator->pairType() == MpdFemtoBaseModelWeightGenerator::protonAntiproton()) {
  98. tPid1 = 2212;
  99. tPid2 = -2212;
  100. }
  101. // pi+K+
  102. if (mWeightGenerator->pairType() == MpdFemtoBaseModelWeightGenerator::pionPlusKaonPlus()) {
  103. tPid1 = 211;
  104. tPid2 = 321;
  105. }
  106. // pi+K-
  107. if (mWeightGenerator->pairType() == MpdFemtoBaseModelWeightGenerator::pionPlusKaonMinus()) {
  108. tPid1 = 211;
  109. tPid2 = -321;
  110. }
  111. // pi+p
  112. if (mWeightGenerator->pairType() == MpdFemtoBaseModelWeightGenerator::pionPlusProton()) {
  113. tPid1 = 211;
  114. tPid2 = 2212;
  115. }
  116. // pi+antip
  117. if (mWeightGenerator->pairType() == MpdFemtoBaseModelWeightGenerator::pionPlusAntiproton()) {
  118. tPid1 = 211;
  119. tPid2 = -2212;
  120. }
  121. // K+p
  122. if (mWeightGenerator->pairType() == MpdFemtoBaseModelWeightGenerator::kaonPlusProton()) {
  123. tPid1 = 321;
  124. tPid2 = 2212;
  125. }
  126. // K+antip
  127. if (mWeightGenerator->pairType() == MpdFemtoBaseModelWeightGenerator::kaonPlusAntiproton()) {
  128. tPid1 = 321;
  129. tPid2 = -2212;
  130. }
  131. // LambdaLambda
  132. if (mWeightGenerator->pairType() == MpdFemtoBaseModelWeightGenerator::lambdaLambda()) {
  133. tPid1 = 3122;
  134. tPid2 = 3122;
  135. }
  136. // AntiLambdaAntiLambda
  137. if (mWeightGenerator->pairType() == MpdFemtoBaseModelWeightGenerator::antilambdaAntilambda()) {
  138. tPid1 = -3122;
  139. tPid2 = -3122;
  140. }
  141. // LambdaAntiLambda
  142. if (mWeightGenerator->pairType() == MpdFemtoBaseModelWeightGenerator::lambdaAntilambda()) {
  143. tPid1 = 3122;
  144. tPid2 = -3122;
  145. }
  146. // If hiddenInfo of the first particle from the pair is not set, then set it
  147. if (!(aPair->track1()->hiddenInfo())) {
  148. MpdFemtoModelHiddenInfo *inf1 = new MpdFemtoModelHiddenInfo();
  149. inf1->setTrueMomentum(aPair->track1()->track()->p());
  150. inf1->setPDGPid(tPid1);
  151. aPair->track1()->setHiddenInfo(inf1);
  152. delete inf1;
  153. }
  154. // If hiddenInfo of the second particle from the pair is not set, then set it
  155. if (!(aPair->track2()->hiddenInfo())) {
  156. MpdFemtoModelHiddenInfo *inf2 = new MpdFemtoModelHiddenInfo();
  157. inf2->setTrueMomentum(aPair->track2()->track()->p());
  158. inf2->setPDGPid(tPid2);
  159. aPair->track2()->setHiddenInfo(inf2);
  160. delete inf2;
  161. }
  162. }
  163. // If freeze-out coordinate generator exists, then perform generation
  164. if (mFreezeOutGenerator) {
  165. mFreezeOutGenerator->generateFreezeOut(aPair);
  166. }
  167. return mWeightGenerator->generateWeight(aPair);
  168. }
  169. //_________________
  170. void MpdFemtoModelManager::createCopyHiddenInfo(bool aCopy) {
  171. mCreateCopyHiddenInfo = aCopy;
  172. }