File indexing completed on 2025-08-05 08:19:20
0001
0002
0003
0004
0005
0006
0007
0008
0009
0010
0011
0012
0013
0014
0015
0016 #include "PartonShowerGenerator.h"
0017 #include "PartonShower.h"
0018 #include "JetEnergyLoss.h"
0019 #include "JetScapeLogger.h"
0020
0021 #include <iostream>
0022
0023 using namespace std;
0024
0025 namespace Jetscape {
0026
0027 void PartonShowerGenerator::DoShower(JetEnergyLoss &j) {
0028 double tStart = 0;
0029 double currentTime = 0;
0030
0031 VERBOSESHOWER(8) << "Hard Parton from Initial Hard Process ...";
0032 VERBOSEPARTON(6, *j.GetShowerInitiatingParton());
0033
0034
0035 vector<Parton> pIn;
0036 vector<Parton> pOut;
0037 vector<Parton> pInTemp;
0038 vector<Parton> pOutTemp;
0039 vector<Parton> pInTempModule;
0040
0041 vector<node> vStartVec;
0042 vector<node> vStartVecOut;
0043 vector<node> vStartVecTemp;
0044
0045 node vStart;
0046 node vEnd;
0047
0048 pIn.push_back(*j.GetShowerInitiatingParton());
0049
0050
0051 vStart = j.GetShower()->new_vertex(make_shared<Vertex>());
0052 vEnd = j.GetShower()->new_vertex(make_shared<Vertex>());
0053 j.GetShower()->new_parton(
0054 vStart, vEnd, make_shared<Parton>(*j.GetShowerInitiatingParton()));
0055
0056
0057 vStartVec.push_back(vEnd);
0058
0059
0060
0061
0062 REMARK << "DoShower() Splitting including time evolution (allowing "
0063 "non-splits at later times) implemeted correctly (should be made "
0064 "nicer/pointers). To be checked!!!";
0065
0066
0067
0068 do {
0069 VERBOSESHOWER(7) << "Current time = " << currentTime << " with #Input "
0070 << pIn.size();
0071 currentTime += j.GetDeltaT();
0072
0073
0074
0075 for (int i = 0; i < pIn.size(); i++) {
0076
0077
0078
0079 pInTemp.push_back(pIn[i]);
0080 pInTempModule.push_back(pIn[i]);
0081
0082 j.SentInPartons(j.GetDeltaT(), currentTime, pIn[i].pt(), pInTempModule,
0083 pOutTemp);
0084
0085 vStart = vStartVec[i];
0086 vStartVecTemp.push_back(vStart);
0087
0088
0089
0090
0091 for (int k = 0; k < pOutTemp.size(); k++) {
0092 vEnd = j.GetShower()->new_vertex(
0093 make_shared<Vertex>(0, 0, 0, currentTime));
0094 j.GetShower()->new_parton(vStart, vEnd,
0095 make_shared<Parton>(pOutTemp[k]));
0096
0097
0098
0099
0100
0101
0102
0103 vStartVecOut.push_back(vEnd);
0104 pOut.push_back(pOutTemp[k]);
0105
0106
0107
0108
0109
0110
0111
0112
0113
0114
0115 if (pInTempModule.size() > 1) {
0116 VERBOSESHOWER(7) << pInTempModule.size() - 1
0117 << " new root node(s) to be added ...";
0118
0119
0120 for (int l = 1; l < pInTempModule.size(); l++) {
0121 node vNewRootNode = j.GetShower()->new_vertex(
0122 make_shared<Vertex>(0, 0, 0, currentTime - j.GetDeltaT()));
0123 j.GetShower()->new_parton(vNewRootNode, vEnd,
0124 make_shared<Parton>(pInTempModule[l]));
0125 }
0126 }
0127
0128
0129 if (k == 0) {
0130 pInTemp.pop_back();
0131 vStartVecTemp.pop_back();
0132 }
0133 }
0134
0135
0136 pOutTemp.clear();
0137 pInTempModule.clear();
0138 }
0139
0140
0141
0142 pIn.clear();
0143
0144 pIn.insert(pIn.end(), pInTemp.begin(), pInTemp.end());
0145 pIn.insert(pIn.end(), pOut.begin(), pOut.end());
0146
0147 pOut.clear();
0148 pInTemp.clear();
0149
0150 vStartVec.clear();
0151
0152 vStartVec.insert(vStartVec.end(), vStartVecTemp.begin(),
0153 vStartVecTemp.end());
0154 vStartVec.insert(vStartVec.end(), vStartVecOut.begin(), vStartVecOut.end());
0155
0156 vStartVecOut.clear();
0157 vStartVecTemp.clear();
0158 } while (currentTime < j.GetMaxT());
0159
0160
0161
0162
0163
0164
0165 pIn.clear();
0166 pOut.clear();
0167 pInTemp.clear();
0168 pOutTemp.clear();
0169 vStartVec.clear();
0170 }
0171
0172 }