00001 #ifndef SimDataFormats_GeneratorProducts_LHECommonBlocks_h 00002 #define SimDataFormats_GeneratorProducts_LHECommonBlocks_h 00003 00004 #include "SimDataFormats/GeneratorProducts/interface/LesHouches.h" 00005 00006 extern "C" { 00007 extern struct HEPRUP_ { 00008 int idbmup[2]; 00009 double ebmup[2]; 00010 int pdfgup[2]; 00011 int pdfsup[2]; 00012 int idwtup; 00013 int nprup; 00014 double xsecup[100]; 00015 double xerrup[100]; 00016 double xmaxup[100]; 00017 int lprup[100]; 00018 } heprup_; 00019 00020 extern struct HEPEUP_ { 00021 int nup; 00022 int idprup; 00023 double xwgtup; 00024 double scalup; 00025 double aqedup; 00026 double aqcdup; 00027 int idup[500]; 00028 int istup[500]; 00029 int mothup[500][2]; 00030 int icolup[500][2]; 00031 double pup[500][5]; 00032 double vtimup[500]; 00033 double spinup[500]; 00034 } hepeup_; 00035 } // extern "C" 00036 00037 namespace lhef { 00038 00039 class CommonBlocks { 00040 public: 00041 static void fillHEPRUP(const HEPRUP *heprup) 00042 { 00043 heprup_.idbmup[0] = heprup->IDBMUP.first; 00044 heprup_.idbmup[1] = heprup->IDBMUP.second; 00045 heprup_.ebmup[0] = heprup->EBMUP.first; 00046 heprup_.ebmup[1] = heprup->EBMUP.second; 00047 heprup_.pdfgup[0] = heprup->PDFGUP.first; 00048 heprup_.pdfgup[1] = heprup->PDFGUP.second; 00049 heprup_.pdfsup[0] = heprup->PDFSUP.first; 00050 heprup_.pdfsup[1] = heprup->PDFSUP.second; 00051 heprup_.idwtup = heprup->IDWTUP; 00052 heprup_.nprup = heprup->NPRUP; 00053 for(int i = 0; i < heprup->NPRUP; i++) { 00054 heprup_.xsecup[i] = heprup->XSECUP[i]; 00055 heprup_.xerrup[i] = heprup->XERRUP[i]; 00056 heprup_.xmaxup[i] = heprup->XMAXUP[i]; 00057 heprup_.lprup[i] = heprup->LPRUP[i]; 00058 } 00059 } 00060 00061 static void fillHEPEUP(const HEPEUP *hepeup) 00062 { 00063 hepeup_.nup = hepeup->NUP; 00064 hepeup_.idprup = hepeup->IDPRUP; 00065 hepeup_.xwgtup = hepeup->XWGTUP; 00066 hepeup_.scalup = hepeup->SCALUP; 00067 hepeup_.aqedup = hepeup->AQEDUP; 00068 hepeup_.aqcdup = hepeup->AQCDUP; 00069 for(int i = 0; i < hepeup->NUP; i++) { 00070 hepeup_.idup[i] = hepeup->IDUP[i]; 00071 hepeup_.istup[i] = hepeup->ISTUP[i]; 00072 hepeup_.mothup[i][0] = hepeup->MOTHUP[i].first; 00073 hepeup_.mothup[i][1] = hepeup->MOTHUP[i].second; 00074 hepeup_.icolup[i][0] = hepeup->ICOLUP[i].first; 00075 hepeup_.icolup[i][1] = hepeup->ICOLUP[i].second; 00076 for(unsigned int j = 0; j < 5; j++) 00077 hepeup_.pup[i][j] = hepeup->PUP[i][j]; 00078 hepeup_.vtimup[i] = hepeup->VTIMUP[i]; 00079 hepeup_.spinup[i] = hepeup->SPINUP[i]; 00080 } 00081 } 00082 00083 static void readHEPRUP(HEPRUP *heprup) 00084 { 00085 heprup->resize(heprup_.nprup); 00086 heprup->IDBMUP.first = heprup_.idbmup[0]; 00087 heprup->IDBMUP.second = heprup_.idbmup[1]; 00088 heprup->EBMUP.first = heprup_.ebmup[0]; 00089 heprup->EBMUP.second = heprup_.ebmup[1]; 00090 heprup->PDFGUP.first = heprup_.pdfgup[0]; 00091 heprup->PDFGUP.second = heprup_.pdfgup[1]; 00092 heprup->PDFSUP.first = heprup_.pdfsup[0]; 00093 heprup->PDFSUP.second = heprup_.pdfsup[1]; 00094 heprup->IDWTUP = heprup_.idwtup; 00095 for(int i = 0; i < heprup->NPRUP; i++) { 00096 heprup->XSECUP[i] = heprup_.xsecup[i]; 00097 heprup->XERRUP[i] = heprup_.xerrup[i]; 00098 heprup->XMAXUP[i] = heprup_.xmaxup[i]; 00099 heprup->LPRUP[i] = heprup_.lprup[i]; 00100 } 00101 } 00102 00103 static void readHEPEUP(HEPEUP *hepeup) 00104 { 00105 hepeup->resize(hepeup_.nup); 00106 hepeup->IDPRUP = hepeup_.idprup; 00107 hepeup->XWGTUP = hepeup_.xwgtup; 00108 hepeup->SCALUP = hepeup_.scalup; 00109 hepeup->AQEDUP = hepeup_.aqedup; 00110 hepeup->AQCDUP = hepeup_.aqcdup; 00111 for(int i = 0; i < hepeup->NUP; i++) { 00112 hepeup->IDUP[i] = hepeup_.idup[i]; 00113 hepeup->ISTUP[i] = hepeup_.istup[i]; 00114 hepeup->MOTHUP[i].first = hepeup_.mothup[i][0]; 00115 hepeup->MOTHUP[i].second = hepeup_.mothup[i][1]; 00116 hepeup->ICOLUP[i].first = hepeup_.icolup[i][0]; 00117 hepeup->ICOLUP[i].second = hepeup_.icolup[i][1]; 00118 for(unsigned int j = 0; j < 5; j++) 00119 hepeup->PUP[i][j] = hepeup_.pup[i][j]; 00120 hepeup->VTIMUP[i] = hepeup_.vtimup[i]; 00121 hepeup->SPINUP[i] = hepeup_.spinup[i]; 00122 } 00123 } 00124 00125 private: 00126 CommonBlocks(); 00127 ~CommonBlocks(); 00128 }; 00129 00130 } // namespace lhef 00131 00132 #endif // SimDataFormats_GeneratorProducts_LHECommonBlocks_h