Back to home page

EIC code displayed by LXR

 
 

    


File indexing completed on 2025-01-18 10:01:10

0001 //--------------------------------------------------------------------------
0002 #ifndef PYTHIA_WRAPPER_6_H
0003 #define PYTHIA_WRAPPER_6_H
0004 
0005 //////////////////////////////////////////////////////////////////////////
0006 // Matt.Dobbs@Cern.CH, November 2000
0007 // Version 6.200 update October 2001
0008 // Wrapper for FORTRAN version of Pythia 
0009 // This wrapper is NOT intended as a part of HepMC - it is only supplied
0010 // for your convenience.
0011 //////////////////////////////////////////////////////////////////////////
0012 // 
0013 // A simple example of calling Pythia from C++ using this header file is
0014 // given in test/test_PythiaWrapper.cxx
0015 //
0016 // Note the pyhepc routine is used by Pythia to fill
0017 // the HEPEVT common block uses double precision and 4000 entries.
0018 //
0019 
0020 #include <ctype.h>
0021 #include <cstring>
0022 
0023 //--------------------------------------------------------------------------
0024 // Initialization routine
0025 
0026 
0027 extern "C" {
0028     void initpydata(void);
0029 }
0030 #define initpydata initpydata_
0031 
0032 //--------------------------------------------------------------------------
0033 // PYTHIA Common Block Declarations
0034 
0035 const int pyjets_maxn =4000;
0036 extern "C" {
0037     extern struct {
0038     int n, npad, k[5][pyjets_maxn];
0039     double p[5][pyjets_maxn], v[5][pyjets_maxn];
0040     } pyjets_;
0041 }
0042 #define pyjets pyjets_
0043 
0044 extern "C" {
0045     extern struct {
0046         int mstu[200];
0047         double paru[200];
0048         int mstj[200];
0049         double parj[200];
0050     } pydat1_;
0051 }
0052 #define pydat1 pydat1_
0053 
0054 extern "C" {
0055     extern struct {
0056     int kchg[4][500];
0057     double pmas[4][500], parf[2000], vckm[4][4];  
0058     } pydat2_;
0059 }
0060 #define pydat2 pydat2_
0061 
0062 extern "C" {
0063     extern struct {
0064     int mdcy[3][500], mdme[2][8000];
0065     double brat[8000];
0066     int kfdp[5][8000];
0067     } pydat3_;
0068 }
0069 #define pydat3 pydat3_
0070 
0071 extern "C" {
0072     extern struct {
0073     int mrpy[6];
0074     double rrpy[100];
0075     } pydatr_;
0076 }
0077 #define pydatr pydatr_
0078 
0079 extern "C" {
0080     extern struct {
0081     int msel, mselpd, msub[500], kfin[81][2];
0082     double ckin[200];
0083     } pysubs_;
0084 }
0085 #define pysubs pysubs_
0086 
0087 extern "C" {
0088     extern struct {
0089     int mstp[200];
0090     double parp[200];
0091     int msti[200];
0092     double pari[200];
0093     } pypars_;
0094 }
0095 #define pypars pypars_
0096 
0097 extern "C" {
0098     extern struct {
0099     int mint[400];
0100     double vint[400];
0101     } pyint1_;
0102 }
0103 #define pyint1 pyint1_
0104 
0105 extern "C" {
0106     extern struct {
0107     int iset[500], kfpr[2][500];
0108     double coef[20][500];
0109     int icol[2][4][40];
0110     } pyint2_;
0111 }
0112 #define pyint2 pyint2_
0113 
0114 extern "C" {
0115     extern struct pin3 {
0116         double xsfx[81][2]; // Fortran is xsfx(2,-40:40)
0117     int isig[3][1000];
0118     double sigh[1000];
0119     } pyint3_;
0120 }
0121 #define pyint3 pyint3_
0122 
0123 extern "C" {
0124     extern struct {
0125         int mwid[500];
0126     double wids[5][500];
0127     } pyint4_;
0128 }
0129 #define pyint4 pyint4_
0130 
0131 extern "C" {
0132     extern struct pin5 {
0133     int ngenpd, ngen[3][501];   // Fortran is ngen(0:500,3)
0134     double xsec[3][501];        // Fortran is xsec(0:500,3)
0135     } pyint5_;
0136 }
0137 #define pyint5 pyint5_
0138 
0139 extern "C" {
0140     extern struct pin7 {
0141         double sigt[6][7][7];   // Fortran is sigt(0:6,0:6,0:5)
0142     } pyint7_;
0143 }
0144 #define pyint7 pyint7_
0145 
0146 extern "C" {
0147     extern struct pin8 {
0148     double xpvmd[13];   // Fortran is xpvmd(-6:6)
0149     double xpanl[13];   // Fortran is xpanl(-6:6)
0150     double xpanh[13];   // Fortran is xpanh(-6:6)
0151     double xpbeh[13];   // Fortran is xpbeh(-6:6)
0152     double xpdir[13];   // Fortran is xpdir(-6:6)
0153     } pyint8_;
0154 }
0155 #define pyint8 pyint8_
0156 
0157 extern "C" {
0158     extern struct pin9 {
0159     double vxpvmd[13];  // Fortran is vxpvmd(-6:6)
0160     double vxpanl[13];  // Fortran is vxpanl(-6:6)
0161     double vxpanh[13];  // Fortran is vxpanh(-6:6)
0162     double vxpdgm[13];  // Fortran is vxpdgm(-6:6)
0163     } pyint9_;
0164 }
0165 #define pyint9 pyint9_
0166 
0167 extern "C" {
0168     extern struct pssm {
0169     int imss[100];      // Fortran is imss(0:99)
0170     double rmss[100];   // Fortran is rmss(0:99)
0171     } pyssm_;
0172 }
0173 #define pyssm pyssm_
0174 
0175 extern "C" {
0176     extern struct {
0177         double zmix[4][4];
0178     double umix[2][2];
0179     double vmix[2][2];
0180     double smz[4];
0181     double smw[2];
0182     double sfmix[4][16];
0183         double zmixi[4][4];
0184     double umixi[2][2];
0185     double vmixi[2][2];
0186     } pyssmt_;
0187 }
0188 #define pyssmt pyssmt_
0189 
0190 extern "C" {
0191     extern struct {
0192         double rvlam[3][3][3];
0193         double rvlamp[3][3][3];
0194         double rvlamb[3][3][3];
0195     } pymsrv_;
0196 }
0197 #define pymsrv pymsrv_
0198 
0199 extern "C" {
0200     extern struct prvnv {
0201         double ab[2][16][2];
0202     double rms[4];      // Fortran is rms(0:3)
0203     double res[5][6];
0204     int idr;
0205     int idr2;
0206     double dcmass;
0207     int kfr[3];
0208     } pyrvnv_;
0209 }
0210 #define pyrvnv pyrvnv_
0211 
0212 extern "C" {
0213     extern struct prvpm {
0214         double rm[4];       // Fortran is rm(0:3)
0215     double a[2];
0216     double b[2];
0217     double resm[2];
0218     double resw[2];
0219     bool mflag;
0220     } pyrvpm_;
0221 }
0222 #define pyrvpm pyrvpm_
0223 
0224 extern "C" {
0225     extern struct {
0226         double xxm[20];
0227     } pyints_;
0228 }
0229 #define pyints pyints_
0230 
0231 extern "C" {
0232     extern struct {
0233         double x1;
0234     } pyg2dx_;
0235 }
0236 #define pyg2dx pyg2dx_
0237 
0238 //--------------------------------------------------------------------------
0239 // PYTHIA routines declaration
0240 
0241 #define pyhepc pyhepc_ 
0242 #define pyinit pyinit_
0243 #define pylist pylist_
0244 #define pystat pystat_
0245 #define pyevnt pyevnt_
0246 #define upinit upinit_
0247 #define upevnt upevnt_
0248     extern "C" {
0249     void pyhepc(int*);
0250     void pyinit(const char*,const char*,const char*,double*,int,int,int);
0251     void pylist(int*);
0252     void pystat(int*);
0253     void pyevnt();
0254     void upinit();
0255     void upevnt();
0256     }
0257 
0258 // define methods to hide the subtle syntax necessary to call fortran from C++
0259 inline void call_pyhepc( int mode ){ pyhepc( &mode ); }
0260 inline void call_pyinit( const char* frame, const char* beam, const char* target,
0261           double win ) 
0262 { pyinit( frame,beam,target,&win,strlen(frame),strlen(beam),strlen(target) ); }
0263 inline void call_pylist( int mode ){ pylist( &mode ); }
0264 inline void call_pystat( int mode ){ pystat( &mode ); }
0265 inline void call_pyevnt(){ pyevnt(); }
0266 
0267 
0268 //--------------------------------------------------------------------------
0269 // PYTHIA block data
0270 // ( with gcc it works to initialize the block data by calling 
0271 //   "pydata();" at beginning, but this fails for f77, so the fortran routine
0272 //   initpydata.f is supplied ... call it instead for platform independent
0273 //   behaviour )
0274 
0275 #define pydata pydata_
0276 extern "C" {
0277     void pydata(void);
0278 }
0279 
0280 #endif  // PYTHIA_WRAPPER_6_H
0281 //--------------------------------------------------------------------------