4 // declaration of c++ Class THerwig6 to be used in ROOT
5 // this is a c++ interface to the F77 Herwig6 program
6 // author: j. g. contreras jgcn@moni.mda.cinvestav.mx
7 // date: december 22, 2000
11 Class THerwig6 is an interface to the Herwig program
13 C-----------------------------------------------------------------------
16 C a Monte Carlo event generator for simulating
17 C +---------------------------------------------------+
18 C | Hadron Emission Reactions With Interfering Gluons |
19 C +---------------------------------------------------+
20 C I.G. Knowles(*), G. Marchesini(+), M.H. Seymour($) and B.R. Webber(#)
21 C-----------------------------------------------------------------------
22 C with Minimal Supersymmetric Standard Model Matrix Elements by
23 C S. Moretti($) and K. Odagiri($)
24 C-----------------------------------------------------------------------
25 C R parity violating Supersymmetric Decays and Matrix Elements by
27 C-----------------------------------------------------------------------
28 C matrix element corrections to top decay and Drell-Yan type processes
30 C-----------------------------------------------------------------------
31 C Deep Inelastic Scattering and Heavy Flavour Electroproduction by
32 C G. Abbiendi(@) and L. Stanco(%)
33 C-----------------------------------------------------------------------
34 C and Jet Photoproduction in Lepton-Hadron Collisions by J. Chyla(~)
35 C-----------------------------------------------------------------------
36 C(*) Department of Physics & Astronomy, University of Edinburgh
37 C(+) Dipartimento di Fisica, Universita di Milano
38 C($) Rutherford Appleton Laboratory
39 C(#) Cavendish Laboratory, Cambridge
40 C(&) Department of Physics, University of Oxford
41 C(@) Dipartimento di Fisica, Universita di Bologna
42 C(%) Dipartimento di Fisica, Universita di Padova
43 C(~) Institute of Physics, Prague
44 C-----------------------------------------------------------------------
45 C Version 6.100 - 16th December 1999
46 C-----------------------------------------------------------------------
48 C G.Marchesini, B.R.Webber, G.Abbiendi, I.G.Knowles, M.H.Seymour,
49 C and L.Stanco, Computer Physics Communications 67 (1992) 465.
50 C-----------------------------------------------------------------------
51 C Please send e-mail about this program to one of the authors at the
52 C following Internet addresses:
53 C I.Knowles@ed.ac.uk Giuseppe.Marchesini@mi.infn.it
54 C M.Seymour@rl.ac.uk webber@hep.phy.cam.ac.uk
55 C-----------------------------------------------------------------------
58 /* declarations from ROOT */
59 #include "TGenerator.h"
60 #include "TObjArray.h"
62 // Translation of Fortran commons from the Herwig6
63 // f77 program into c++ structures to be used in ROOT
64 // and declaration of Fortran functions as extern
65 // C functions to be called from the class Herwig6
66 // author: j. g. contreras jgcn@moni.mda.cinvestav.mx
67 // date: december 22, 2000
69 int const NMXHEP = 2000;
76 int JMOHEP[NMXHEP][2];
77 int JDAHEP[NMXHEP][2];
78 double PHEP[NMXHEP][5];
79 double VHEP[NMXHEP][4];
192 int const NMXPAR = 500;
199 int JMOPAR[NMXPAR][2];
200 int JDAPAR[NMXPAR][2];
201 double PPAR[NMXPAR][5];
202 double VPAR[NMXPAR][4];
206 double DECPAR[NMXPAR][2];
207 double PHIPAR[NMXPAR][2];
208 double RHOPAR[NMXPAR][2];
212 int const MODMAX = 5;
219 double RHOHEP[NMXHEP][3];
225 int JCOPAR[NMXPAR][4];
331 int const NMXRES = 500;
334 double RLTIM[NMXRES+1];
335 double RMASS[NMXRES+1];
336 double RSPIN[NMXRES+1];
341 int VTOCDK[NMXRES+1];
342 int VTORDK[NMXRES+1];
343 int QORQQB[NMXRES+1];
344 int QBORQQ[NMXRES+1];
348 char RNAME[NMXRES+1][8];
349 char TXNAME[NMXRES+1][2][37];
352 int const NMXDKS = 4000;
353 int const NMXMOD = 200;
356 double BRFRAC[NMXDKS];
357 double CMMOM[NMXDKS];
358 double DKLTM[NMXRES];
360 int IDKPRD[NMXDKS][5];
372 double REPWT[5][4][4];
377 double SWTEF[NMXRES];
380 int const NMXCDK = 4000;
383 double CLDKWT[NMXCDK];
384 double CTHRPW[12][12];
414 double VTXQDK[NMXQDK][4];
420 int const NMXSUD = 1024;
424 double QEV[6][NMXSUD];
425 double SUD[6][NMXSUD];
454 double QMIXSS[2][2][6];
455 double LMIXSS[2][2][6];
469 double GHSQSS[2][2][6][4];
479 double LAMDA1[3][3][3];
480 double LAMDA2[3][3][3];
481 double LAMDA3[3][3][3];
500 int const NMXCL = 500;
503 double PPCL[NMXCL][5];
512 void hwusta_(char * name, int);
532 /* THerwig6 class declaration */
533 class THerwig6 : public TGenerator {
535 // Standard hep common block
537 // Herwig6 common-blocks
562 //----------------------------------------------------------------------------
564 //----------------------------------------------------------------------------
566 // ****** constructors and destructor
570 // acces to hep common block
571 Hepevt_t* GetHepevt () { return fHepevt; }
572 int GetNevhep () { return fHepevt->NEVHEP; }
573 int GetNhep () { return fHepevt->NHEP; }
574 int GetISTHEP (int i) { return fHepevt->ISTHEP[i-1]; }
575 int GetIDHEP (int i) { return fHepevt->IDHEP[i-1]; }
576 int GetJMOHEP (int i, int j) { return fHepevt->JMOHEP[i-1][j-1]; }
577 int GetJDAHEP (int i, int j) { return fHepevt->JDAHEP[i-1][j-1]; }
578 double GetPHEP (int i, int j) { return fHepevt->PHEP[i-1][j-1]; }
579 double GetVHEP (int i, int j) { return fHepevt->VHEP[i-1][j-1]; }
581 // access to Herwig6 common-blocks
582 // WARNING: Some arrays start in 1, others in 0. Look up the manual!
586 Hwbeam_t* GetHwbeam () { return fHwbeam; }
587 int GetIPART1 () { return fHwbeam->IPART1; }
588 int GetIPART2 () { return fHwbeam->IPART2; }
591 Hwbmch_t* GetHwbmch () { return fHwbmch; }
592 char* GetPART1 () { return fHwbmch->PART1; }
593 char* GetPART2 () { return fHwbmch->PART2; }
597 Hwproc_t* GetHwproc () { return fHwproc; }
598 double GetEBEAM1 () { return fHwproc->EBEAM1; }
599 double GetEBEAM2 () { return fHwproc->EBEAM2; }
600 double GetPBEAM1 () { return fHwproc->PBEAM1; }
601 double GetPBEAM2 () { return fHwproc->PBEAM2; }
602 int GetIPROC () { return fHwproc->IPROC; }
603 int GetMAXEV () { return fHwproc->MAXEV; }
606 Hwpram_t* GetHwpram () { return fHwpram; }
607 double GetQCDLAM () { return fHwpram->QCDLAM; }
608 void SetQCDLAM (double q) { fHwpram->QCDLAM = q; }
609 double GetVQCUT () { return fHwpram->VQCUT; }
610 void SetVQCUT (double v) { fHwpram->VQCUT = v; }
611 double GetVGCUT () { return fHwpram->VGCUT; }
612 void SetVGCUT (double v) { fHwpram->VGCUT = v; }
613 double GetVPCUT () { return fHwpram->VPCUT; }
614 void SetVPCUT (double v) { fHwpram->VPCUT = v; }
615 double GetCLMAX () { return fHwpram->CLMAX; }
616 void SetCLMAX (double c) { fHwpram->CLMAX = c; }
617 double GetCLPOW () { return fHwpram->CLPOW; }
618 void SetCLPOW (double c) { fHwpram->CLPOW = c; }
619 double GetPSPLT (int i) { return fHwpram->PSPLT[i-1];}
620 void SetPSPLT (int i, double p) { fHwpram->PSPLT[i-1] = p;}
621 double GetQDIQK () { return fHwpram->QDIQK; }
622 void SetQDIQK (double q) { fHwpram->QDIQK = q; }
623 double GetPDIQK () { return fHwpram->PDIQK; }
624 void SetPDIQK (double p) { fHwpram->PDIQK = p; }
625 double GetQSPAC () { return fHwpram->QSPAC; }
626 void SetQSPAC (double q) { fHwpram->QSPAC = q; }
627 double GetPTRMS () { return fHwpram->PTRMS; }
628 void SetPTRMS (double p) { fHwpram->PTRMS = p; }
629 double GetENSOF () { return fHwpram->ENSOF; }
630 void SetENSOF (double e) { fHwpram->ENSOF = e; }
631 int GetIPRINT () { return fHwpram->IPRINT; }
632 void SetIPRINT (int i) { fHwpram->IPRINT = i; }
633 int GetMODPDF (int i) { return fHwpram->MODPDF[i-1];}
634 void SetMODPDF (int i, int j) { fHwpram->MODPDF[i-1] = j; }
635 int GetNSTRU () { return fHwpram->NSTRU; }
636 void SetNSTRU (int i) { fHwpram->NSTRU = i; }
639 Hwprch_t* GetHwprch () { return fHwprch; }
640 char* GetAUTPDF (int i) { return fHwprch->AUTPDF[i-1]; }
641 void SetAUTPDF(int i,const char* s){ strncpy(fHwprch->AUTPDF[i-1],s,20);}
642 char* GetBDECAY () { return fHwprch->BDECAY; }
645 Hwpart_t* GetHwpart () { return fHwpart; }
648 Hwparp_t* GetHwparp () { return fHwparp; }
651 Hwbosc_t* GetHwbosc () { return fHwbosc; }
654 Hwparc_t* GetHwparc () { return fHwparc; }
657 Hwbrch_t* GetHwbrch () { return fHwbrch; }
660 Hwevnt_t* GetHwevnt () { return fHwevnt; }
661 double GetAVWGT () { return fHwevnt->AVWGT; }
662 int GetMAXPR () { return fHwevnt->MAXPR; }
663 void SetMAXPR (int i) { fHwevnt->MAXPR = i; }
664 int GetMAXER () { return fHwevnt->MAXER; }
665 void SetMAXER (int i) { fHwevnt->MAXER = i; }
666 int GetNRN (int i) { return fHwevnt->NRN[i-1]; }
667 void SetNRN (int i, int j) { fHwevnt->NRN[i-1] = j; }
670 Hwhard_t* GetHwhard () { return fHwhard; }
671 double GetPTMIN () { return fHwhard->PTMIN; }
672 void SetPTMIN (double d) { fHwhard->PTMIN = d; }
673 double GetPTPOW () { return fHwhard->PTPOW; }
674 void SetPTPOW (double d) { fHwhard->PTPOW = d; }
675 double GetYJMIN () { return fHwhard->YJMIN; }
676 void SetYJMIN (double d) { fHwhard->YJMIN = d; }
677 double GetYJMAX () { return fHwhard->YJMAX; }
678 void SetYJMAX (double d) { fHwhard->YJMAX = d; }
679 double GetQ2MIN () { return fHwhard->Q2MIN; }
680 void SetQ2MIN (double d) { fHwhard->Q2MIN = d; }
681 double GetQ2MAX () { return fHwhard->Q2MAX; }
682 void SetQ2MAX (double d) { fHwhard->Q2MAX = d; }
683 double GetYBMIN () { return fHwhard->YBMIN; }
684 void SetYBMIN (double d) { fHwhard->YBMIN = d; }
685 double GetYBMAX () { return fHwhard->YBMAX; }
686 void SetYBMAX (double d) { fHwhard->YBMAX = d; }
687 double GetZJMAX () { return fHwhard->ZJMAX; }
688 void SetZJMAX (double d) { fHwhard->ZJMAX = d; }
691 Hwprop_t* GetHwprop () { return fHwprop; }
692 double GetRMASS (int i) { return fHwprop->RMASS[i]; }
693 void SetRMASS (int i, double r) { fHwprop->RMASS[i] = r; }
696 Hwunam_t* GetHwunam () { return fHwunam; }
699 Hwupdt_t* GetHwupdt () { return fHwupdt; }
702 Hwuwts_t* GetHwuwts () { return fHwuwts; }
705 Hwuclu_t* GetHwuclu () { return fHwuclu; }
708 Hwdist_t* GetHwdist () { return fHwdist; }
711 Hwqdks_t* GetHwqdkt () { return fHwqdks; }
714 Hwusud_t* GetHwusud () { return fHwusud; }
717 Hwsusy_t* GetHwsusy () { return fHwsusy; }
720 Hwrpar_t* GetHwrpar () { return fHwrpar; }
723 Hwminb_t* GetHwminb () { return fHwminb; }
726 Hwclus_t* GetHwclus () { return fHwclus; }
729 // the user would call
731 // change by himself the parameters s/he wants
732 // Hwusta to make stable the particles s/he wants
734 // GenerateEvent as many times as wished
735 // An example is given in SetupTest
737 void GenerateEvent();
738 void Initialize(const char *beam, const char *target, double pbeam1, double pbeam2, int iproc);
740 void OpenFortranFile(int lun, char* name);
741 void CloseFortranFile(int lun);
742 Int_t ImportParticles(TClonesArray *particles, Option_t *option="");
743 TObjArray *ImportParticles(Option_t *option="");
744 TObjArray *Particles() { return fParticles; }
747 void Hwusta(char * name);
762 ClassDef(THerwig6,0) //Interface to Herwig6.1 Event Generator