File indexing completed on 2025-08-05 08:19:19
0001
0002
0003
0004
0005
0006
0007
0008
0009
0010
0011
0012
0013
0014
0015
0016
0017 #include "JetScapeWriterStream.h"
0018 #include "JetScapeLogger.h"
0019 #include "JetScapeXML.h"
0020
0021 namespace Jetscape {
0022
0023
0024 template <>
0025 RegisterJetScapeModule<JetScapeWriterStream<ofstream>>
0026 JetScapeWriterStream<ofstream>::reg("JetScapeWriterAscii");
0027 template <>
0028 RegisterJetScapeModule<JetScapeWriterStream<ogzstream>>
0029 JetScapeWriterStream<ogzstream>::regGZ("JetScapeWriterAsciiGZ");
0030
0031 template <class T>
0032 JetScapeWriterStream<T>::JetScapeWriterStream(string m_file_name_out) {
0033 SetOutputFileName(m_file_name_out);
0034 }
0035
0036 template <class T> JetScapeWriterStream<T>::~JetScapeWriterStream() {
0037 VERBOSE(8);
0038 if (GetActive())
0039 Close();
0040 }
0041
0042 template <class T> void JetScapeWriterStream<T>::WriteHeaderToFile() {
0043 VERBOSE(3) << "Run JetScapeWriterStream<T>: Write header of event # "
0044 << GetCurrentEvent() << " ...";
0045 Write(to_string(GetCurrentEvent()) + " Event");
0046
0047 std::ostringstream oss;
0048 oss.str("");
0049 oss << GetId() << "sigmaGen " << GetHeader().GetSigmaGen();
0050 WriteComment(oss.str());
0051 oss.str("");
0052 oss << GetId() << "sigmaErr " << GetHeader().GetSigmaErr();
0053 WriteComment(oss.str());
0054 oss.str("");
0055 oss << GetId() << "weight " << GetHeader().GetEventWeight();
0056 WriteComment(oss.str());
0057
0058 if (GetHeader().GetNpart() > -1) {
0059 oss.str("");
0060 oss << GetId() << "Npart " << GetHeader().GetNpart();
0061 WriteComment(oss.str());
0062 }
0063 if (GetHeader().GetNcoll() > -1) {
0064 oss.str("");
0065 oss << GetId() << "Ncoll " << GetHeader().GetNcoll();
0066 WriteComment(oss.str());
0067 }
0068 if (GetHeader().GetTotalEntropy() > -1) {
0069 oss.str("");
0070 oss << GetId() << "TotalEntropy " << GetHeader().GetTotalEntropy();
0071 WriteComment(oss.str());
0072 }
0073
0074 if (GetHeader().GetEventPlaneAngle() > -999) {
0075 oss.str("");
0076 oss << GetId() << "EventPlaneAngle " << GetHeader().GetEventPlaneAngle();
0077 WriteComment(oss.str());
0078 }
0079 }
0080
0081 template <class T> void JetScapeWriterStream<T>::WriteEvent() {
0082
0083
0084 }
0085
0086 template <class T> void JetScapeWriterStream<T>::Write(weak_ptr<Parton> p) {
0087 auto pp = p.lock();
0088 if (pp) {
0089 output_file << *pp << endl;
0090 }
0091 }
0092
0093 template <class T> void JetScapeWriterStream<T>::Write(weak_ptr<Vertex> v) {
0094 auto vv = v.lock();
0095 if (vv) {
0096 output_file << *vv << endl;
0097 }
0098 }
0099
0100 template <class T> void JetScapeWriterStream<T>::Init() {
0101 if (GetActive()) {
0102 JSINFO << "JetScape Stream Writer initialized with output file = "
0103 << GetOutputFileName();
0104 output_file.open(GetOutputFileName().c_str());
0105
0106
0107
0108
0109 }
0110 }
0111
0112 template <class T> void JetScapeWriterStream<T>::Exec() {
0113
0114
0115
0116
0117 }
0118
0119 template <class T> void JetScapeWriterStream<T>::WriteInitFileXMLMain() {
0120 JSDEBUG << "Write XML Main to output file. XML file = "
0121 << JetScapeXML::Instance()->GetXMLMainFileName();
0122 tinyxml2::XMLPrinter printer;
0123 JetScapeXML::Instance()->GetXMLDocumentMain().Print(&printer);
0124 WriteComment("Init XML Main file used : " +
0125 JetScapeXML::Instance()->GetXMLMainFileName());
0126 output_file << printer.CStr();
0127 }
0128
0129 template <class T> void JetScapeWriterStream<T>::WriteInitFileXMLUser() {
0130 JSDEBUG << "Write XML User to output file. XML file = "
0131 << JetScapeXML::Instance()->GetXMLUserFileName();
0132 tinyxml2::XMLPrinter printer;
0133 JetScapeXML::Instance()->GetXMLDocumentUser().Print(&printer);
0134 WriteComment("Init XML User file used : " +
0135 JetScapeXML::Instance()->GetXMLUserFileName());
0136 output_file << printer.CStr();
0137 }
0138
0139 template <class T>
0140 void JetScapeWriterStream<T>::Write(weak_ptr<PartonShower> ps) {
0141 auto pShower = ps.lock();
0142 if (!pShower)
0143 return;
0144
0145 WriteComment(
0146 "Parton Shower in JetScape format to be used later by GTL graph:");
0147
0148
0149 PartonShower::node_iterator nIt, nEnd;
0150
0151 for (nIt = pShower->nodes_begin(), nEnd = pShower->nodes_end(); nIt != nEnd;
0152 ++nIt) {
0153 WriteWhiteSpace("[" + to_string(nIt->id()) + "] V");
0154 Write(pShower->GetVertex(*nIt));
0155 }
0156
0157 PartonShower::edge_iterator eIt, eEnd;
0158 for (eIt = pShower->edges_begin(), eEnd = pShower->edges_end(); eIt != eEnd;
0159 ++eIt) {
0160 WriteWhiteSpace("[" + to_string(eIt->source().id()) + "]=>[" +
0161 to_string(eIt->target().id()) + "] P");
0162 Write(pShower->GetParton(*eIt));
0163 }
0164 }
0165
0166 template <class T> void JetScapeWriterStream<T>::Write(weak_ptr<Hadron> h) {
0167 auto hh = h.lock();
0168 if (hh) {
0169 output_file << *hh << endl;
0170 }
0171 }
0172
0173 template class JetScapeWriterStream<ofstream>;
0174
0175 #ifdef USE_GZIP
0176 template class JetScapeWriterStream<ogzstream>;
0177 #endif
0178
0179 }