Back to home page

sPhenix code displayed by LXR

 
 

    


File indexing completed on 2025-08-05 08:19:17

0001 /*******************************************************************************
0002  * Copyright (c) The JETSCAPE Collaboration, 2018
0003  *
0004  * Modular, task-based framework for simulating all aspects of heavy-ion collisions
0005  *
0006  * For the list of contributors see AUTHORS.
0007  *
0008  * Report issues at https://github.com/JETSCAPE/JETSCAPE/issues
0009  *
0010  * or via email to bugs.jetscape@gmail.com
0011  *
0012  * Distributed under the GNU General Public License 3.0 (GPLv3 or later).
0013  * See COPYING for details.
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   // The tasks are hadronization modules
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     //signal = outHadrons;
0140     signal.clear();
0141     // foreach hadronizon object tasks
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   // foreach hadronizon object tasks
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   // foreach hadronizon object tasks
0164     for(shared_ptr<JetScapeTask> it : GetTaskList()){
0165         JetScapeTask *jet = it.get();
0166         Hadronization *hit = (Hadronization *) jet;
0167         hit->DeleteRealHadrons();
0168     }
0169 }
0170 
0171 } // namespace Jetscape