Back to home page

sPhenix code displayed by LXR

 
 

    


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

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 // jetscape writer ascii class
0016 
0017 #include "JetScapeWriterStream.h"
0018 #include "JetScapeLogger.h"
0019 #include "JetScapeXML.h"
0020 
0021 namespace Jetscape {
0022 
0023 // Register the modules with the base class
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   // JSINFO<<"Run JetScapeWriterStream<T>: Write event # "<<GetCurrentEvent()<<" ...";
0083   // do nothing, the modules handle this
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     //Write Init Informations, like XML and ... to file ...
0107     //WriteInitFileXMLMain();
0108     //WriteInitFileXMLUser();
0109   }
0110 }
0111 
0112 template <class T> void JetScapeWriterStream<T>::Exec() {
0113   // JSINFO<<"Run JetScapeWriterStream<T>: Write event # "<<GetCurrentEvent()<<" ...";
0114 
0115   // if (GetActive())
0116   //   WriteEvent();
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   // write vertices
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 } // end namespace Jetscape