00001 #include <iostream> 00002 #include <iomanip> 00003 #include <sstream> 00004 #include <string> 00005 00006 #include "SimDataFormats/GeneratorProducts/interface/LesHouches.h" 00007 #include "SimDataFormats/GeneratorProducts/interface/LHEEventProduct.h" 00008 00009 void LHEEventProduct::const_iterator::next() 00010 { 00011 const lhef::HEPEUP &hepeup = event->hepeup(); 00012 int line = this->line++; 00013 00014 if (!line) { 00015 std::ostringstream ss; 00016 ss << std::setprecision(7) 00017 << std::scientific 00018 << std::uppercase 00019 << " " << hepeup.NUP 00020 << " " << hepeup.IDPRUP 00021 << " " << hepeup.XWGTUP 00022 << " " << hepeup.SCALUP 00023 << " " << hepeup.AQEDUP 00024 << " " << hepeup.AQCDUP << std::endl; 00025 tmp = ss.str(); 00026 return; 00027 } 00028 line--; 00029 00030 if (line < hepeup.NUP) { 00031 std::ostringstream ss; 00032 ss << std::setprecision(10) 00033 << std::scientific 00034 << std::uppercase 00035 << "\t" << hepeup.IDUP[line] 00036 << "\t" << hepeup.ISTUP[line] 00037 << "\t" << hepeup.MOTHUP[line].first 00038 << "\t" << hepeup.MOTHUP[line].second 00039 << "\t" << hepeup.ICOLUP[line].first 00040 << "\t" << hepeup.ICOLUP[line].second 00041 << "\t" << hepeup.PUP[line][0] 00042 << "\t" << hepeup.PUP[line][1] 00043 << "\t" << hepeup.PUP[line][2] 00044 << "\t" << hepeup.PUP[line][3] 00045 << "\t" << hepeup.PUP[line][4] 00046 << std::setprecision(3) 00047 << "\t" << hepeup.VTIMUP[line] 00048 << std::setprecision(1) 00049 << std::fixed 00050 << "\t" << hepeup.SPINUP[line] << std::endl; 00051 tmp = ss.str(); 00052 return; 00053 } 00054 line -= hepeup.NUP; 00055 00056 if (event->pdf()) { 00057 if (!line) { 00058 const PDF &pdf = *event->pdf(); 00059 std::ostringstream ss; 00060 ss << std::setprecision(7) 00061 << std::scientific 00062 << std::uppercase 00063 << "#pdf " << pdf.id.first 00064 << " " << pdf.id.second 00065 << " " << pdf.x.first 00066 << " " << pdf.x.second 00067 << " " << pdf.scalePDF 00068 << " " << pdf.xPDF.first 00069 << " " << pdf.xPDF.second << std::endl; 00070 tmp = ss.str(); 00071 return; 00072 } 00073 line--; 00074 } 00075 00076 if (line < (int)event->comments_size()) { 00077 tmp = *(event->comments_begin() + line); 00078 return; 00079 } 00080 line -= event->comments_size(); 00081 00082 if (!line) { 00083 tmp = "</event>\n"; 00084 return; 00085 } 00086 00087 tmp.clear(); 00088 this->line = npos; 00089 } 00090 00091 LHEEventProduct::const_iterator LHEEventProduct::begin() const 00092 { 00093 const_iterator result; 00094 result.event = this; 00095 result.line = 0; 00096 result.tmp = "<event>\n"; 00097 return result; 00098 }