source: HiSusy/trunk/Pythia8/pythia8170/include/LHAFortran.h @ 1

Last change on this file since 1 was 1, checked in by zerwas, 11 years ago

first import of structure, PYTHIA8 and DELPHES

File size: 3.7 KB
Line 
1// LHAFortran.h is a part of the PYTHIA event generator.
2// Copyright (C) 2012 Torbjorn Sjostrand.
3// PYTHIA is licenced under the GNU GPL version 2, see COPYING for details.
4// Please respect the MCnet Guidelines, see GUIDELINES for details.
5
6// Header file for Fortran Les Houches Accord user process information.
7// LHAupFortran: derived class with the HEPRUP and HEPEUP Fortran info.
8// You are expected to supply the fillHepRup and fillHepEup methods.
9
10#ifndef Pythia8_LHAFortran_H
11#define Pythia8_LHAFortran_H
12
13#include "PythiaStdlib.h"
14
15namespace Pythia8 {
16
17//==========================================================================
18
19// Give access to the HEPRUP and HEPEUP Fortran commonblocks.
20
21#ifdef _WIN32
22  #define heprup_ HEPRUP
23  #define hepeup_ HEPEUP
24#endif
25
26extern "C" {
27
28  extern struct {
29    int idbmup[2];
30    double ebmup[2];
31    int pdfgup[2], pdfsup[2], idwtup, nprup;
32    double xsecup[100], xerrup[100], xmaxup[100];
33    int lprup[100];
34  } heprup_;
35
36  extern struct {
37    int nup, idprup;
38    double xwgtup, scalup, aqedup, aqcdup;
39    int idup[500], istup[500], mothup[500][2], icolup[500][2];
40    double pup[500][5], vtimup[500],spinup[500];
41  } hepeup_;
42
43}
44
45//==========================================================================
46
47// A derived class with initialization information from the HEPRUP
48// Fortran commonblock and event information from the HEPEUP one.
49
50class LHAupFortran : public LHAup {
51
52public:
53
54  // Constructor.
55  LHAupFortran() {}
56
57  // Routine for doing the job of setting initialization info. 
58  bool setInit() {
59    // Call the routine that does the job.
60    if (!fillHepRup()) return false;
61    // Store beam and strategy info.
62    setBeamA(heprup_.idbmup[0], heprup_.ebmup[0], heprup_.pdfgup[0], 
63      heprup_.pdfsup[0]);
64    setBeamB(heprup_.idbmup[1], heprup_.ebmup[1], heprup_.pdfgup[1], 
65      heprup_.pdfsup[1]);
66    setStrategy(heprup_.idwtup);
67    // Store process info. Protect against vanishing cross section.
68    for (int ip = 0; ip < heprup_.nprup; ++ip) {
69      double xsec = max( 1e-10, heprup_.xsecup[ip]);
70      addProcess( heprup_.lprup[ip], xsec, heprup_.xerrup[ip], 
71        heprup_.xmaxup[ip] );
72    }
73    // Store the beam energies to calculate x values later.
74    eBeamA = heprup_.ebmup[0];
75    eBeamB = heprup_.ebmup[1];   
76    // Done.
77    return true;
78  } 
79
80  // Routine for doing the job of setting info on next event. 
81  bool setEvent(int idProcIn = 0) {
82    // In some strategies the type of the next event has been set.
83    hepeup_.idprup = idProcIn;
84    // Call the routine that does the job.
85    if (!fillHepEup()) return false;
86    // Store process info.
87    setProcess(hepeup_.idprup, hepeup_.xwgtup, hepeup_.scalup, 
88      hepeup_.aqedup, hepeup_.aqcdup);
89    // Store particle info.
90    for (int ip = 0; ip < hepeup_.nup; ++ip) addParticle(hepeup_.idup[ip], 
91      hepeup_.istup[ip], hepeup_.mothup[ip][0], hepeup_.mothup[ip][1], 
92      hepeup_.icolup[ip][0], hepeup_.icolup[ip][1], hepeup_.pup[ip][0], 
93      hepeup_.pup[ip][1], hepeup_.pup[ip][2], hepeup_.pup[ip][3], 
94      hepeup_.pup[ip][4], hepeup_.vtimup[ip], hepeup_.spinup[ip]) ;
95    // Store x values (here E = pup[ip][3]), but note incomplete info.
96    setPdf( hepeup_.idup[0], hepeup_.idup[1], hepeup_.pup[0][3]/eBeamA, 
97            hepeup_.pup[1][3]/eBeamB, 0., 0., 0., false);
98    // Done.
99    return true;
100  }
101
102private:
103
104  // Save beam energies to calculate x values.
105  double eBeamA, eBeamB;
106
107  // User-written routine that does the intialization and fills heprup.
108  bool fillHepRup();
109
110  // User-written routine that does the event generation and fills hepeup.
111  bool fillHepEup();
112
113};
114
115//==========================================================================
116
117} // end namespace Pythia8
118
119#endif // Pythia8_LHAFortran_H
Note: See TracBrowser for help on using the repository browser.