MpdFemtoCutMonitorHandler.cxx 8.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367
  1. //
  2. // A handler for cut monitors
  3. //
  4. // C++ headers
  5. #include <iterator>
  6. // MpdFemtoMaker headers
  7. #include "MpdFemtoCutMonitorHandler.h"
  8. ClassImp(MpdFemtoCutMonitorHandler)
  9. //_________________
  10. MpdFemtoCutMonitorHandler::MpdFemtoCutMonitorHandler() :
  11. mCollectionsEmpty(true),
  12. mPassColl(nullptr),
  13. mFailColl(nullptr) {
  14. // Default constructor
  15. mPassColl = new MpdFemtoCutMonitorCollection();
  16. mFailColl = new MpdFemtoCutMonitorCollection();
  17. }
  18. //_________________
  19. MpdFemtoCutMonitorHandler::MpdFemtoCutMonitorHandler(const MpdFemtoCutMonitorHandler& copy) :
  20. mCollectionsEmpty(copy.mCollectionsEmpty),
  21. mPassColl(nullptr),
  22. mFailColl(nullptr) {
  23. // Copy constructor
  24. mPassColl = new MpdFemtoCutMonitorCollection(copy.mPassColl->begin(), copy.mPassColl->end());
  25. mFailColl = new MpdFemtoCutMonitorCollection(copy.mFailColl->begin(), copy.mFailColl->end());
  26. }
  27. //_________________
  28. MpdFemtoCutMonitorHandler& MpdFemtoCutMonitorHandler::operator=(const MpdFemtoCutMonitorHandler& copy) {
  29. // Assignment operator
  30. if (this != &copy) {
  31. if (mPassColl) {
  32. mPassColl->clear();
  33. mPassColl->insert(mPassColl->begin(), copy.mPassColl->begin(), copy.mPassColl->end());
  34. } else {
  35. mPassColl = new MpdFemtoCutMonitorCollection(copy.mPassColl->begin(), copy.mPassColl->end());
  36. }
  37. if (mFailColl) {
  38. mFailColl->clear();
  39. mFailColl->insert(mFailColl->begin(), copy.mFailColl->begin(), copy.mFailColl->end());
  40. } else {
  41. mFailColl = new MpdFemtoCutMonitorCollection(copy.mFailColl->begin(), copy.mFailColl->end());
  42. }
  43. } // if ( this != &copy )
  44. return *this;
  45. }
  46. //_________________
  47. MpdFemtoCutMonitorHandler::~MpdFemtoCutMonitorHandler() {
  48. // Default destructor
  49. delete mPassColl;
  50. delete mFailColl;
  51. // if (mPassColl) { delete mPassColl; mPassColl = nullptr; }
  52. // if (mFailColl) { delete mFailColl; mFailColl = nullptr; }
  53. }
  54. //_________________
  55. void MpdFemtoCutMonitorHandler::fillCutMonitor(const MpdFemtoEvent* event, bool pass) {
  56. // Fill event cut monitors
  57. if (mCollectionsEmpty) return;
  58. MpdFemtoCutMonitorIterator iter;
  59. MpdFemtoBaseCutMonitor* CM;
  60. if (pass) {
  61. for (iter = mPassColl->begin(); iter != mPassColl->end(); iter++) {
  62. CM = *iter;
  63. CM->fill(event);
  64. }
  65. }//if ( pass)
  66. else {
  67. for (iter = mFailColl->begin(); iter != mFailColl->end(); iter++) {
  68. CM = *iter;
  69. CM->fill(event);
  70. }
  71. } //else
  72. }
  73. //_________________
  74. void MpdFemtoCutMonitorHandler::fillCutMonitor(const MpdFemtoTrack* track, bool pass) {
  75. // Fill track cut monitors
  76. if (mCollectionsEmpty) return;
  77. MpdFemtoCutMonitorIterator iter;
  78. MpdFemtoBaseCutMonitor* CM;
  79. if (pass) {
  80. for (iter = mPassColl->begin(); iter != mPassColl->end(); iter++) {
  81. CM = *iter;
  82. CM->fill(track);
  83. }
  84. } else {
  85. for (iter = mFailColl->begin(); iter != mFailColl->end(); iter++) {
  86. CM = *iter;
  87. CM->fill(track);
  88. }
  89. }
  90. }
  91. //_________________
  92. void MpdFemtoCutMonitorHandler::fillCutMonitor(const MpdFemtoV0* v0, bool pass) {
  93. // Fill V0 cut monitors
  94. if (mCollectionsEmpty) return;
  95. MpdFemtoCutMonitorIterator iter;
  96. MpdFemtoBaseCutMonitor* CM;
  97. if (pass) {
  98. for (iter = mPassColl->begin(); iter != mPassColl->end(); iter++) {
  99. CM = *iter;
  100. CM->fill(v0);
  101. }
  102. } else {
  103. for (iter = mFailColl->begin(); iter != mFailColl->end(); iter++) {
  104. CM = *iter;
  105. CM->fill(v0);
  106. }
  107. }
  108. }
  109. //_________________
  110. void MpdFemtoCutMonitorHandler::fillCutMonitor(const MpdFemtoKink* kink, bool pass) {
  111. if (mCollectionsEmpty) return;
  112. MpdFemtoCutMonitorIterator iter;
  113. MpdFemtoBaseCutMonitor* CM;
  114. if (pass) {
  115. for (iter = mPassColl->begin(); iter != mPassColl->end(); iter++) {
  116. CM = *iter;
  117. CM->fill(kink);
  118. }
  119. } else {
  120. for (iter = mFailColl->begin(); iter != mFailColl->end(); iter++) {
  121. CM = *iter;
  122. CM->fill(kink);
  123. }
  124. }
  125. }
  126. //_________________
  127. void MpdFemtoCutMonitorHandler::fillCutMonitor(const MpdFemtoXi* xi, bool pass) {
  128. if (mCollectionsEmpty) return;
  129. MpdFemtoCutMonitorIterator iter;
  130. MpdFemtoBaseCutMonitor* CM;
  131. if (pass) {
  132. for (iter = mPassColl->begin(); iter != mPassColl->end(); iter++) {
  133. CM = *iter;
  134. CM->fill(xi);
  135. }
  136. } else {
  137. for (iter = mFailColl->begin(); iter != mFailColl->end(); iter++) {
  138. CM = *iter;
  139. CM->fill(xi);
  140. }
  141. }
  142. }
  143. //_________________
  144. void MpdFemtoCutMonitorHandler::fillCutMonitor(const MpdFemtoPair* pair, bool pass) {
  145. if (mCollectionsEmpty) return;
  146. MpdFemtoCutMonitorIterator iter;
  147. MpdFemtoBaseCutMonitor* CM;
  148. if (pass) {
  149. for (iter = mPassColl->begin(); iter != mPassColl->end(); iter++) {
  150. CM = *iter;
  151. CM->fill(pair);
  152. }
  153. } else {
  154. for (iter = mFailColl->begin(); iter != mFailColl->end(); iter++) {
  155. CM = *iter;
  156. CM->fill(pair);
  157. }
  158. }
  159. }
  160. //_________________
  161. void MpdFemtoCutMonitorHandler::fillCutMonitor(const MpdFemtoParticleCollection* partColl) {
  162. if (mCollectionsEmpty) return;
  163. MpdFemtoCutMonitorIterator iter;
  164. MpdFemtoBaseCutMonitor* CM;
  165. for (iter = mPassColl->begin(); iter != mPassColl->end(); iter++) {
  166. CM = *iter;
  167. CM->fill(partColl);
  168. }
  169. }
  170. //_________________
  171. void MpdFemtoCutMonitorHandler::fillCutMonitor(const MpdFemtoEvent* event, const MpdFemtoParticleCollection* partColl) {
  172. // Fill event particle collection
  173. if (mCollectionsEmpty) return;
  174. MpdFemtoCutMonitorIterator iter;
  175. MpdFemtoBaseCutMonitor* CM;
  176. for (iter = mPassColl->begin(); iter != mPassColl->end(); iter++) {
  177. CM = *iter;
  178. CM->fill(event, partColl);
  179. }
  180. }
  181. //_________________
  182. void MpdFemtoCutMonitorHandler::fillCutMonitor(const MpdFemtoParticleCollection *partColl1,
  183. const MpdFemtoParticleCollection *partColl2) {
  184. // Fill event particle collection
  185. if (mCollectionsEmpty) return;
  186. MpdFemtoCutMonitorIterator iter;
  187. MpdFemtoBaseCutMonitor* CM;
  188. for (iter = mPassColl->begin(); iter != mPassColl->end(); iter++) {
  189. CM = *iter;
  190. CM->fill(partColl1, partColl2);
  191. }
  192. }
  193. //_________________
  194. void MpdFemtoCutMonitorHandler::finish() {
  195. MpdFemtoCutMonitorIterator iter;
  196. for (iter = mPassColl->begin(); iter != mPassColl->end(); iter++) {
  197. (*iter)->finish();
  198. }
  199. for (iter = mFailColl->begin(); iter != mFailColl->end(); iter++) {
  200. (*iter)->finish();
  201. }
  202. }
  203. //_________________
  204. void MpdFemtoCutMonitorHandler::addCutMonitor(MpdFemtoBaseCutMonitor* cutMoni1, MpdFemtoBaseCutMonitor* cutMoni2) {
  205. std::cout << "Adding cut monitor 1 ";
  206. std::cout << cutMoni1 << std::endl;
  207. std::cout << "Size of the first collection: " << mPassColl->size() << std::endl;
  208. mPassColl->push_back(cutMoni1);
  209. std::cout << "Adding cut monitor 2 ";
  210. std::cout << cutMoni1 << std::endl;
  211. mFailColl->push_back(cutMoni2);
  212. mCollectionsEmpty = false;
  213. }
  214. //_________________
  215. void MpdFemtoCutMonitorHandler::addCutMonitor(MpdFemtoBaseCutMonitor* cutMoni) {
  216. //cout << " make a copy of the cutmonitor and push both into the collections " << endl;
  217. //cout << " not yet implemented" << endl;
  218. mPassColl->push_back(cutMoni);
  219. //cout << " only pass collection pushed" << endl;
  220. mCollectionsEmpty = false;
  221. }
  222. //_________________
  223. void MpdFemtoCutMonitorHandler::addCutMonitorPass(MpdFemtoBaseCutMonitor* cutMoni) {
  224. mPassColl->push_back(cutMoni);
  225. mCollectionsEmpty = false;
  226. }
  227. //_________________
  228. void MpdFemtoCutMonitorHandler::addCutMonitorFail(MpdFemtoBaseCutMonitor* cutMoni) {
  229. mFailColl->push_back(cutMoni);
  230. mCollectionsEmpty = false;
  231. }
  232. //_________________
  233. MpdFemtoBaseCutMonitor* MpdFemtoCutMonitorHandler::passMonitor(int n) {
  234. if (static_cast<int> (mPassColl->size()) <= n) {
  235. return nullptr;
  236. }
  237. MpdFemtoCutMonitorIterator iter = mPassColl->begin();
  238. for (int i = 0; i < n; i++) {
  239. iter++;
  240. }
  241. return *iter;
  242. }
  243. //_________________
  244. MpdFemtoBaseCutMonitor* MpdFemtoCutMonitorHandler::failMonitor(int n) {
  245. if (static_cast<int> (mFailColl->size()) <= n) {
  246. return nullptr;
  247. }
  248. MpdFemtoCutMonitorIterator iter = mFailColl->begin();
  249. for (int i = 0; i < n; i++) {
  250. iter++;
  251. }
  252. return *iter;
  253. }
  254. //_________________
  255. TList *MpdFemtoCutMonitorHandler::getOutputList() {
  256. TList *tOutputList = new TList();
  257. for (auto &cut_monitor : *mPassColl) {
  258. TList *tLp = cut_monitor->getOutputList();
  259. TIter nextLp(tLp);
  260. while (TObject * obj = nextLp()) {
  261. tOutputList->Add(obj);
  262. }
  263. delete tLp;
  264. }
  265. for (auto &cut_monitor : *mFailColl) {
  266. TList *tLf = cut_monitor->getOutputList();
  267. TIter nextLf(tLf);
  268. while (TObject * obj = nextLf()) {
  269. tOutputList->Add(obj);
  270. }
  271. delete tLf;
  272. }
  273. return tOutputList;
  274. }
  275. //_________________
  276. void MpdFemtoCutMonitorHandler::eventBegin(const MpdFemtoEvent* aEvent) {
  277. for (auto &cut_monitor : *mPassColl) {
  278. cut_monitor->eventBegin(aEvent);
  279. }
  280. for (auto &cut_monitor : *mFailColl) {
  281. cut_monitor->eventBegin(aEvent);
  282. }
  283. }
  284. //_________________
  285. void MpdFemtoCutMonitorHandler::eventEnd(const MpdFemtoEvent* aEvent) {
  286. for (auto &cut_monitor : *mPassColl) {
  287. cut_monitor->eventEnd(aEvent);
  288. }
  289. for (auto &cut_monitor : *mFailColl) {
  290. cut_monitor->eventEnd(aEvent);
  291. }
  292. }