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"
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 {
534 //----------------------------------------------------------------------------
536 //----------------------------------------------------------------------------
538 // ****** constructors and destructor
540 THerwig6(const THerwig6 & source): TGenerator(source) {
541 Fatal("THerwig6","Copy constructor not implemented yet");
543 THerwig6 & operator=(const THerwig6 & /*source*/) {
544 Fatal("THerwig6","Assignment operator not implemented yet");
549 // acces to hep common block
550 Hepevt_t* GetHepevt () const { return fHepevt; }
551 int GetNevhep () const { return fHepevt->NEVHEP; }
552 int GetNhep () const { return fHepevt->NHEP; }
553 int GetISTHEP (int i)const { return fHepevt->ISTHEP[i-1]; }
554 int GetIDHEP (int i)const { return fHepevt->IDHEP[i-1]; }
555 int GetJMOHEP (int i, int j) const
556 { return fHepevt->JMOHEP[i-1][j-1]; }
557 int GetJDAHEP (int i, int j) const
558 { return fHepevt->JDAHEP[i-1][j-1]; }
559 double GetPHEP (int i, int j) const
560 { return fHepevt->PHEP[i-1][j-1]; }
561 double GetVHEP (int i, int j) const
562 { return fHepevt->VHEP[i-1][j-1]; }
564 // access to Herwig6 common-blocks
565 // WARNING: Some arrays start in 1, others in 0. Look up the manual!
569 Hwbeam_t* GetHwbeam () { return fHwbeam; }
570 int GetIPART1 () const { return fHwbeam->IPART1; }
571 int GetIPART2 () const { return fHwbeam->IPART2; }
574 Hwbmch_t* GetHwbmch () { return fHwbmch; }
575 char* GetPART1 () const { return fHwbmch->PART1; }
576 char* GetPART2 () const { return fHwbmch->PART2; }
580 Hwproc_t* GetHwproc () { return fHwproc; }
581 double GetEBEAM1 () const { return fHwproc->EBEAM1; }
582 double GetEBEAM2 () const { return fHwproc->EBEAM2; }
583 double GetPBEAM1 () const { return fHwproc->PBEAM1; }
584 double GetPBEAM2 () const { return fHwproc->PBEAM2; }
585 int GetIPROC () const { return fHwproc->IPROC; }
586 int GetMAXEV () const { return fHwproc->MAXEV; }
589 Hwpram_t* GetHwpram () { return fHwpram; }
590 double GetQCDLAM () const { return fHwpram->QCDLAM; }
591 void SetQCDLAM (double q) { fHwpram->QCDLAM = q; }
592 double GetVQCUT () const { return fHwpram->VQCUT; }
593 void SetVQCUT (double v) { fHwpram->VQCUT = v; }
594 double GetVGCUT () const { return fHwpram->VGCUT; }
595 void SetVGCUT (double v) { fHwpram->VGCUT = v; }
596 double GetVPCUT () const { return fHwpram->VPCUT; }
597 void SetVPCUT (double v) { fHwpram->VPCUT = v; }
598 double GetCLMAX () const { return fHwpram->CLMAX; }
599 void SetCLMAX (double c) { fHwpram->CLMAX = c; }
600 double GetCLPOW () const { return fHwpram->CLPOW; }
601 void SetCLPOW (double c) { fHwpram->CLPOW = c; }
602 double GetPSPLT (int i) const { return fHwpram->PSPLT[i-1];}
603 void SetPSPLT (int i, double p) { fHwpram->PSPLT[i-1] = p;}
604 double GetQDIQK () const { return fHwpram->QDIQK; }
605 void SetQDIQK (double q) { fHwpram->QDIQK = q; }
606 double GetPDIQK () const { return fHwpram->PDIQK; }
607 void SetPDIQK (double p) { fHwpram->PDIQK = p; }
608 double GetQSPAC () const { return fHwpram->QSPAC; }
609 void SetQSPAC (double q) { fHwpram->QSPAC = q; }
610 double GetPTRMS () const { return fHwpram->PTRMS; }
611 void SetPTRMS (double p) { fHwpram->PTRMS = p; }
612 double GetENSOF () const { return fHwpram->ENSOF; }
613 void SetENSOF (double e) { fHwpram->ENSOF = e; }
614 int GetIPRINT () const { return fHwpram->IPRINT; }
615 void SetIPRINT (int i) { fHwpram->IPRINT = i; }
616 int GetMODPDF (int i) const { return fHwpram->MODPDF[i-1];}
617 void SetMODPDF (int i, int j) { fHwpram->MODPDF[i-1] = j; }
618 int GetNSTRU () const { return fHwpram->NSTRU; }
619 void SetNSTRU (int i) { fHwpram->NSTRU = i; }
622 Hwprch_t* GetHwprch () { return fHwprch; }
623 char* GetAUTPDF (int i) { return fHwprch->AUTPDF[i-1]; }
624 void SetAUTPDF(int i,const char* s){ strncpy(fHwprch->AUTPDF[i-1],s,20);}
625 char* GetBDECAY () { return fHwprch->BDECAY; }
628 Hwpart_t* GetHwpart () { return fHwpart; }
631 Hwparp_t* GetHwparp () { return fHwparp; }
634 Hwbosc_t* GetHwbosc () { return fHwbosc; }
637 Hwparc_t* GetHwparc () { return fHwparc; }
640 Hwbrch_t* GetHwbrch () { return fHwbrch; }
643 Hwevnt_t* GetHwevnt () { return fHwevnt; }
644 double GetAVWGT () const { return fHwevnt->AVWGT; }
645 int GetMAXPR () const { return fHwevnt->MAXPR; }
646 void SetMAXPR (int i) { fHwevnt->MAXPR = i; }
647 int GetMAXER () const { return fHwevnt->MAXER; }
648 void SetMAXER (int i) { fHwevnt->MAXER = i; }
649 int GetNRN (int i) const { return fHwevnt->NRN[i-1]; }
650 void SetNRN (int i, int j) { fHwevnt->NRN[i-1] = j; }
653 Hwhard_t* GetHwhard () { return fHwhard; }
654 double GetPTMIN () const { return fHwhard->PTMIN; }
655 void SetPTMIN (double d) { fHwhard->PTMIN = d; }
656 double GetPTPOW () const { return fHwhard->PTPOW; }
657 void SetPTPOW (double d) { fHwhard->PTPOW = d; }
658 double GetYJMIN () const { return fHwhard->YJMIN; }
659 void SetYJMIN (double d) { fHwhard->YJMIN = d; }
660 double GetYJMAX () const { return fHwhard->YJMAX; }
661 void SetYJMAX (double d) { fHwhard->YJMAX = d; }
662 double GetQ2MIN () const { return fHwhard->Q2MIN; }
663 void SetQ2MIN (double d) { fHwhard->Q2MIN = d; }
664 double GetQ2MAX () const { return fHwhard->Q2MAX; }
665 void SetQ2MAX (double d) { fHwhard->Q2MAX = d; }
666 double GetYBMIN () const { return fHwhard->YBMIN; }
667 void SetYBMIN (double d) { fHwhard->YBMIN = d; }
668 double GetYBMAX () const { return fHwhard->YBMAX; }
669 void SetYBMAX (double d) { fHwhard->YBMAX = d; }
670 double GetZJMAX () const { return fHwhard->ZJMAX; }
671 void SetZJMAX (double d) { fHwhard->ZJMAX = d; }
674 Hwprop_t* GetHwprop () { return fHwprop; }
675 double GetRMASS (int i) const { return fHwprop->RMASS[i]; }
676 void SetRMASS (int i, double r) { fHwprop->RMASS[i] = r; }
679 Hwunam_t* GetHwunam () { return fHwunam; }
682 Hwupdt_t* GetHwupdt () { return fHwupdt; }
685 Hwuwts_t* GetHwuwts () { return fHwuwts; }
688 Hwuclu_t* GetHwuclu () { return fHwuclu; }
691 Hwdist_t* GetHwdist () { return fHwdist; }
694 Hwqdks_t* GetHwqdkt () { return fHwqdks; }
697 Hwusud_t* GetHwusud () { return fHwusud; }
700 Hwsusy_t* GetHwsusy () { return fHwsusy; }
703 Hwrpar_t* GetHwrpar () { return fHwrpar; }
706 Hwminb_t* GetHwminb () { return fHwminb; }
709 Hwclus_t* GetHwclus () { return fHwclus; }
712 // the user would call
714 // change by himself the parameters s/he wants
715 // Hwusta to make stable the particles s/he wants
717 // GenerateEvent as many times as wished
718 // An example is given in SetupTest
720 void GenerateEvent();
721 void Initialize(const char *beam, const char *target, double pbeam1, double pbeam2, int iproc);
723 void OpenFortranFile(int lun, char* name);
724 void CloseFortranFile(int lun);
725 Int_t ImportParticles(TClonesArray *particles, Option_t *option="");
726 TObjArray *ImportParticles(Option_t *option="");
727 TObjArray *Particles() { return fParticles; }
730 void Hwusta(char * name);
746 Hepevt_t* fHepevt; // Standard hep common block
747 // Herwig6 common-blocks
748 Hwbeam_t* fHwbeam; // Beams, process and number of events
749 Hwbmch_t* fHwbmch; // Beams, process and number of events
750 Hwproc_t* fHwproc; // Beams, process and number of events
751 Hwpram_t* fHwpram; // Basic parameters (and quantities derived from them)
752 Hwprch_t* fHwprch; // Basic parameters (and quantities derived from them)
753 Hwpart_t* fHwpart; // Parton shower common
754 Hwparp_t* fHwparp; // Parton polarization common
755 Hwbosc_t* fHwbosc; // Electroweak boson common
756 Hwparc_t* fHwparc; // Parton colour common
757 Hwbrch_t* fHwbrch; // Branching common
758 Hwevnt_t* fHwevnt; // Event common
759 Hwhard_t* fHwhard; // Hard subprocess common
760 Hwprop_t* fHwprop; // Particle properties
761 Hwunam_t* fHwunam; // Particle properties
762 Hwupdt_t* fHwupdt; // Particle decays
763 Hwuwts_t* fHwuwts; // Weights used in cluster decays
764 Hwuclu_t* fHwuclu; // Parameters for cluster decays
765 Hwdist_t* fHwdist; // Variables controling mixing and vertex information
766 Hwqdks_t* fHwqdks; // Arrays for temporarily storing heavy-b,c-hadrons decaying partonicaly
767 Hwusud_t* fHwusud; // Parameters for Sudakov form factors
768 Hwsusy_t* fHwsusy; // SUSY parameters
769 Hwrpar_t* fHwrpar; // R-Parity violating parameters and colours
770 Hwminb_t* fHwminb; // Parameters for minimum bias/soft underlying event
771 Hwclus_t* fHwclus; // Cluster common used by soft event routines
773 ClassDef(THerwig6,0) //Interface to Herwig6.1 Event Generator