File indexing completed on 2025-08-05 08:19:17
0001
0002
0003
0004
0005
0006
0007
0008
0009
0010
0011
0012
0013
0014
0015
0016 #include "HadronizationManager.h"
0017 #include "JetScapeLogger.h"
0018 #include "JetScapeSignalManager.h"
0019 #include <string>
0020 #include "Hadronization.h"
0021
0022 #include <iostream>
0023 #include <vector>
0024
0025 #include <thread>
0026 #include <future>
0027
0028 using namespace std;
0029
0030 namespace Jetscape {
0031
0032 HadronizationManager::HadronizationManager() {
0033 SetId("HadronizationManager");
0034 GetFinalPartonListConnected = false;
0035 GetHadronListConnected = false;
0036 VERBOSE(8);
0037 }
0038
0039 HadronizationManager::~HadronizationManager() {
0040 Clear();
0041
0042
0043 if (GetNumberOfTasks() > 0)
0044 EraseTaskLast();
0045 }
0046
0047 void HadronizationManager::Clear() {
0048 JSDEBUG << "Hadronization task List ...";
0049
0050 hd.clear();
0051
0052 int n = GetNumberOfTasks();
0053 for (int i = 1; i < n; i++)
0054 EraseTaskLast();
0055
0056 JetScapeSignalManager::Instance()->CleanUp();
0057 JetScapeTask::ClearTasks();
0058 VERBOSE(8) << hd.size();
0059 }
0060
0061 void HadronizationManager::Init() {
0062 JSINFO << "Initialize Hadronization Manager ...";
0063
0064 if (GetNumberOfTasks() < 1) {
0065 JSWARN << " : No valid Hadronization Manager modules found ...";
0066 exit(-1);
0067 }
0068
0069 JSINFO << "Found " << GetNumberOfTasks()
0070 << " Hadronization Manager Tasks/Modules Initialize them ... ";
0071 JetScapeTask::InitTasks();
0072
0073 JSINFO << "Connect HadronizationManager Signal to Energy Loss ...";
0074 JetScapeSignalManager::Instance()->ConnectGetFinalPartonListSignal(
0075 shared_from_this());
0076 }
0077
0078 void HadronizationManager::WriteTask(weak_ptr<JetScapeWriter> w) {
0079 VERBOSE(8);
0080 JetScapeTask::WriteTasks(w);
0081 }
0082
0083 void HadronizationManager::Exec() {
0084
0085 VERBOSE(2) << "Run Hadronization Manager ...";
0086 JSDEBUG << "Task Id = " << this_thread::get_id();
0087
0088 if (GetNumberOfTasks() < 1) {
0089 JSWARN << " : No valid Hadronization modules found ...";
0090 exit(-1);
0091 }
0092
0093 CreateSignalSlots();
0094
0095 if (GetGetFinalPartonListConnected()) {
0096 GetFinalPartonList(hd);
0097 hadrons.clear();
0098 GetHadronList(hadrons);
0099 VERBOSE(2) << " There are " << hd.size()
0100 << " partons ready for hadronization";
0101 VERBOSE(2) << " There are already " << hadrons.size() << " hadrons";
0102
0103 for (auto it : GetTaskList()) {
0104 dynamic_pointer_cast<Hadronization>(it)->AddInPartons(hd);
0105 dynamic_pointer_cast<Hadronization>(it)->AddInHadrons(hadrons);
0106 }
0107 JetScapeTask::ExecuteTasks();
0108 } else {
0109 VERBOSE(2) << " There are no partons ready for recombination";
0110 }
0111 }
0112
0113 void HadronizationManager::CreateSignalSlots() {
0114 for (auto it : GetTaskList()) {
0115 for (auto it2 : it->GetTaskList()) {
0116 if (!dynamic_pointer_cast<Hadronization>(it2)
0117 ->GetTransformPartonsConnected()) {
0118 JetScapeSignalManager::Instance()->ConnectTransformPartonsSignal(
0119 dynamic_pointer_cast<Hadronization>(it),
0120 dynamic_pointer_cast<Hadronization>(it2));
0121 }
0122 if (!dynamic_pointer_cast<Hadronization>(it2)
0123 ->GetGetHydroHyperSurfaceConnected()) {
0124 JetScapeSignalManager::Instance()->ConnectGetHydroHyperSurfaceSignal(
0125 dynamic_pointer_cast<Hadronization>(it2));
0126 }
0127 if (!dynamic_pointer_cast<Hadronization>(it2)
0128 ->GetGetHydroCellSignalConnected()) {
0129 JetScapeSignalManager::Instance()->ConnectGetHydroCellSignal(
0130 dynamic_pointer_cast<Hadronization>(it2));
0131 }
0132 }
0133 }
0134
0135 JetScapeSignalManager::Instance()->PrintTransformPartonsSignalMap();
0136 }
0137
0138 void HadronizationManager::GetHadrons(vector<shared_ptr<Hadron>>& signal){
0139
0140 signal.clear();
0141
0142 for(shared_ptr<JetScapeTask> it : GetTaskList()){
0143 vector<shared_ptr<Hadron>> tempHadronList;
0144 JetScapeTask *jet = it.get();
0145 Hadronization *hit = (Hadronization *) jet;
0146 tempHadronList = hit->GetHadrons();
0147 for(auto hadron : tempHadronList){
0148 signal.push_back(hadron);
0149 }
0150 }
0151 }
0152
0153 void HadronizationManager::DeleteHadrons() {
0154
0155 for(shared_ptr<JetScapeTask> it : GetTaskList()){
0156 JetScapeTask *jet = it.get();
0157 Hadronization *hit = (Hadronization *) jet;
0158 hit->DeleteHadrons();
0159 }
0160 }
0161
0162 void HadronizationManager::DeleteRealHadrons() {
0163
0164 for(shared_ptr<JetScapeTask> it : GetTaskList()){
0165 JetScapeTask *jet = it.get();
0166 Hadronization *hit = (Hadronization *) jet;
0167 hit->DeleteRealHadrons();
0168 }
0169 }
0170
0171 }