// @(#)root/pythia6:$Name: $:$Id: TPythia6.h,v 1.2 2001/02/01 15:06:59 brun Exp $ // Author: Rene Brun 19/10/99 /************************************************************************* * Copyright (C) 1995-2000, Rene Brun and Fons Rademakers. * * All rights reserved. * * * * For the licensing terms see $ROOTSYS/LICENSE. * * For the list of contributors see $ROOTSYS/README/CREDITS. * *************************************************************************/ #ifndef PYTHIA_TPythia6 #define PYTHIA_TPythia6 //////////////////////////////////////////////////////////////////////////////// // // // TPythia6 // // // // TPythia is an interface class to F77 version of Pythia 6.1 // // CERNLIB event generators, written by T.Sjostrand. // // For the details about these generators look at Pythia/Jetset manual: // // // //****************************************************************************** //** ** //** ** //** PPP Y Y TTTTT H H III A JJJJ EEEE TTTTT SSS EEEE TTTTT ** //** P P Y Y T H H I A A J E T S E T ** //** PPP Y T HHHHH I AAAAA J EEE T SSS EEE T ** //** P Y T H H I A A J J E T S E T ** //** P Y T H H III A A JJ EEEE T SSS EEEE T ** //** ** //** ** //** *......* Welcome to the Lund Monte Carlo! ** //** *:::!!:::::::::::* ** //** *::::::!!::::::::::::::* This is PYTHIA version 5.720 ** //** *::::::::!!::::::::::::::::* Last date of change: 29 Nov 1995 ** //** *:::::::::!!:::::::::::::::::* ** //** *:::::::::!!:::::::::::::::::* This is JETSET version 7.408 ** //** *::::::::!!::::::::::::::::*! Last date of change: 23 Aug 1995 ** //** *::::::!!::::::::::::::* !! ** //** !! *:::!!:::::::::::* !! Main author: ** //** !! !* -><- * !! Torbjorn Sjostrand ** //** !! !! !! Dept. of theoretical physics 2 ** //** !! !! !! University of Lund ** //** !! !! Solvegatan 14A ** //** !! ep !! S-223 62 Lund, Sweden ** //** !! !! phone: +46 - 46 - 222 48 16 ** //** !! pp !! E-mail: torbjorn@thep.lu.se ** //** !! e+e- !! ** //** !! !! Copyright Torbjorn Sjostrand ** //** !! and CERN, Geneva 1993 ** //** ** //** ** //** The latest program versions and documentation is found on WWW address ** //** http://thep.lu.se/tf2/staff/torbjorn/Welcome.html ** //** ** //** When you cite these programs, priority should always be given to the ** //** latest published description. Currently this is ** //** T. Sjostrand, Computer Physics Commun. 82 (1994) 74. ** //** The most recent long description (unpublished) is ** //** T. Sjostrand, LU TP 95-20 and CERN-TH.7112/93 (revised August 1995). ** //** Also remember that the programs, to a large extent, represent original ** //** physics research. Other publications of special relevance to your ** //** studies may therefore deserve separate mention. ** //** ** //** ** //****************************************************************************** //#ifdef __GNUG__ //#pragma interface //#endif #ifndef ROOT_TPythia6Calls #include "TPythia6Calls.h" #endif #ifndef ROOT_TGenerator #include "TGenerator.h" #endif #ifndef ROOT_TObjArray #include "TObjArray.h" #endif class TPythia6 : public TGenerator { protected: static TPythia6* fgInstance; // PYTHIA6 common-blocks Pyjets_t* fPyjets; Pydat1_t* fPydat1; Pydat2_t* fPydat2; Pydat3_t* fPydat3; Pydat4_t* fPydat4; Pydatr_t* fPydatr; Pysubs_t* fPysubs; Pypars_t* fPypars; Pyint1_t* fPyint1; Pyint2_t* fPyint2; Pyint3_t* fPyint3; Pyint4_t* fPyint4; Pyint5_t* fPyint5; Pyint6_t* fPyint6; Pyint7_t* fPyint7; Pyint8_t* fPyint8; Pyint9_t* fPyint9; Pyuppr_t* fPyuppr; Pymssm_t* fPymssm; Pyssmt_t* fPyssmt; Pyints_t* fPyints; Pybins_t* fPybins; // ****** cleanup stuff (thanks Jim K.) class Cleaner { public: Cleaner(); ~Cleaner(); }; friend class Cleaner; //------------------------------------------------------------------------------ // functions: //------------------------------------------------------------------------------ public: // ****** constructors and destructor TPythia6(); virtual ~TPythia6(); static TPythia6* Instance(); // ****** accessors // FORTRAN indexing in accessing the arrays, // indices start from 1 !!!!! // ****** access to PYTHIA6 common-blocks // ****** /PYJETS/ Pyjets_t* GetPyjets () { return fPyjets; } int GetN () { return fPyjets->N; } int GetNPAD () { return fPyjets->NPAD; } int GetK(int ip, int i) { return fPyjets->K[i-1][ip-1]; } double GetP(int ip, int i) { return fPyjets->P[i-1][ip-1]; } double GetV(int ip, int i) { return fPyjets->V[i-1][ip-1]; } void SetN (int n) { fPyjets->N = n; } void SetNPAD (int n) { fPyjets->NPAD = n; } void SetK(int ip, int i, int k) { fPyjets->K[i-1][ip-1] = k; } void SetP(int ip, int i, double p) { fPyjets->P[i-1][ip-1] = p; } void SetV(int ip, int i, double v) { fPyjets->V[i-1][ip-1] = v; } // ****** /PYDAT1/ Pydat1_t* GetPydat1 () { return fPydat1; } int GetMSTU(int i) { return fPydat1->MSTU[i-1]; } double GetPARU(int i) { return fPydat1->PARU[i-1]; } int GetMSTJ(int i) { return fPydat1->MSTJ[i-1]; } double GetPARJ(int i) { return fPydat1->PARJ[i-1]; } void SetMSTU(int i, int m ) { fPydat1->MSTU[i-1] = m; } void SetPARU(int i, double p) { fPydat1->PARU[i-1] = p; } void SetMSTJ(int i, int m ) { fPydat1->MSTJ[i-1] = m; } void SetPARJ(int i, double p) { fPydat1->PARJ[i-1] = p; } // ****** /PYDAT2/ Pydat2_t* GetPydat2 () { return fPydat2; } int GetKCHG(int ip, int i) { return fPydat2->KCHG[i-1][ip-1]; } double GetPMAS(int ip, int i) { return fPydat2->PMAS[i-1][ip-1]; } double GetPARF (int i) { return fPydat2->PARF[i-1]; } double GetVCKM(int i, int j) { return fPydat2->VCKM[j-1][i-1]; } void SetKCHG(int ip, int i, int k ) { fPydat2->KCHG[i-1][ip-1] = k; } void SetPMAS(int ip, int i, double m) { fPydat2->PMAS[i-1][ip-1] = m; } void SetPARF (int i, double p) { fPydat2->PARF[i-1] = p; } void SetVCKM (int i, int j, double v) { fPydat2->VCKM[j-1][i-1] = v; } // ****** /PYDAT3/ Pydat3_t* GetPydat3() { return fPydat3; } int GetMDCY(int i, int j) { return fPydat3->MDCY[j-1][i-1]; } int GetMDME(int i, int j) { return fPydat3->MDME[j-1][i-1]; } double GetBRAT (int i) { return fPydat3->BRAT[i-1]; } int GetKFDP(int i, int j) { return fPydat3->KFDP[j-1][i-1]; } void SetMDCY(int i, int j, int m) { fPydat3->MDCY[j-1][i-1] = m; } void SetMDME(int i, int j, int m) { fPydat3->MDME[j-1][i-1] = m; } void SetBRAT(int i, double b) { fPydat3->BRAT[i-1] = b; } void SetKFDP(int i, int j, int k) { fPydat3->KFDP[j-1][i-1] = k; } // ****** /PYDAT4/ Pydat4_t* GetPydat4() { return fPydat4; } // ****** /PYDATR/ - random number generator info Pydatr_t* GetPydatr () { return fPydatr; } int GetMRPY(int i) { return fPydatr->MRPY[i-1]; } double GetRRPY(int i) { return fPydatr->RRPY[i-1]; } void SetMRPY(int i, int m) { fPydatr->MRPY[i-1] = m; } void SetRRPY(int i, double r) { fPydatr->RRPY[i-1] = r; } // ****** /PYSUBS/ Pysubs_t* GetPysubs () { return fPysubs; } int GetMSEL () { return fPysubs->MSEL; } int GetMSELPD () { return fPysubs->MSELPD; } int GetMSUB (int i) { return fPysubs->MSUB[i-1]; } double GetCKIN (int i) { return fPysubs->CKIN[i-1]; } Int_t GetKFIN(int i, int j) {return fPysubs->KFIN[j-1][i-1]; } void SetMSEL (int m) { fPysubs->MSEL = m; } void SetMSELPD (int m) { fPysubs->MSELPD = m; } void SetMSUB (int i, int m) { fPysubs->MSUB[i-1] = m; } void SetCKIN (int i, double c) { fPysubs->CKIN[i-1] = c; } void SetKFIN(int i, int j, Int_t kfin=1) { fPysubs->KFIN[j-1][i-1] = kfin; } // ****** /PYPARS/ Pypars_t* GetPypars() { return fPypars; } int GetMSTP(int i) { return fPypars->MSTP[i-1]; } double GetPARP(int i) { return fPypars->PARP[i-1]; } int GetMSTI(int i) { return fPypars->MSTI[i-1]; } double GetPARI(int i) { return fPypars->PARI[i-1]; } void SetMSTP (int i, int m) { fPypars->MSTP[i-1] = m; } void SetPARP (int i, double p) { fPypars->PARP[i-1] = p; } void SetMSTI (int i, int m) { fPypars->MSTI[i-1] = m; } void SetPARI (int i, double p) { fPypars->PARI[i-1] = p; } // ****** /PYINT1/ Pyint1_t* GetPyint1() { return fPyint1; } int GetMINT(int i) { return fPyint1->MINT[i-1]; } double GetVINT(int i) { return fPyint1->VINT[i-1]; } void SetMINT(int i, int m ) { fPyint1->MINT[i-1] = m; } void SetVINT(int i, double v) { fPyint1->VINT[i-1] = v; } // ****** /PYINT2/ and /PYINT3/ Pyint2_t* GetPyint2() { return fPyint2; } Pyint3_t* GetPyint3() { return fPyint3; } // ****** /PYINT4/ Pyint4_t* GetPyint4() { return fPyint4; } int GetMWID (int i) { return fPyint4->MWID[i-1]; } double GetWIDS(int i,int j) { return fPyint4->WIDS[j-1][i-1]; } void SetMWID(int i, int m) { fPyint4->MWID[i-1] = m; } void SetWIDS(int i, int j, double w) { fPyint4->WIDS[j-1][i-1] = w; } // ****** / PYINT5/ Pyint5_t* GetPyint5() { return fPyint5; } int GetNGENPD() { return fPyint5->NGENPD; } void SetNGENPD(int n) { fPyint5->NGENPD = n; } // ****** /PYINT6/ Pyint6_t* GetPyint6 () { return fPyint6; } char* GetPROC(int i) { return fPyint6->PROC[i]; } Pyint7_t* GetPyint7() { return fPyint7; } Pyint8_t* GetPyint8() { return fPyint8; } Pyint9_t* GetPyint9() { return fPyint9; } Pyuppr_t* GetPyuppr() { return fPyuppr; } // ****** /PYMSSM/ - indexing in FORTRAN starts // from 0! Pymssm_t* GetPymssm() { return fPymssm; } int GetIMSS(int i) { return fPymssm->IMSS[i]; } double GetRMSS(int i) { return fPymssm->RMSS[i]; } void SetIMSS(int i, int m) { fPymssm->IMSS[i] = m; } void SetRMSS(int i, double r) { fPymssm->RMSS[i] = r; } // ****** /PYSSMT/ Pyssmt_t* GetPyssmt() { return fPyssmt; } double GetZMIX(int i, int j) { return fPyssmt->ZMIX[j-1][i-1]; } double GetUMIX(int i, int j) { return fPyssmt->UMIX[j-1][i-1]; } double GetVMIX(int i, int j) { return fPyssmt->VMIX[j-1][i-1]; } double GetSMZ (int i) { return fPyssmt->SMZ[i-1]; } double GetSMW (int i) { return fPyssmt->SMW[i-1]; } void SetZMIX(int i, int j, double z) { fPyssmt->ZMIX[j-1][i-1] = z; } void SetUMIX(int i, int j, double u) { fPyssmt->UMIX[j-1][i-1] = u; } void SetSMZ (int i, double s) { fPyssmt->SMZ[i-1] = s; } void SetSMW (int i, double s) { fPyssmt->SMW[i-1] = s; } Pyints_t* GetPyints() { return fPyints; } Pybins_t* GetPybins() { return fPybins; } // ****** TPYTHIA routines void GenerateEvent(); void Initialize(const char *frame, const char *beam, const char *target, float win); Int_t ImportParticles(TClonesArray *particles, Option_t *option=""); TObjArray *ImportParticles(Option_t *option=""); void OpenFortranFile(int lun, char* name); void CloseFortranFile(int lun); int Pycomp(int kf); void Pyedit(int medit); void Pyevnt(); void Pyexec(); void Pyhepc(int mconv); void Pyinit(char* frame, char* beam, char* target, double wint); void Pylist(int flag); void Pyname(int kf, char* name); double Pyr(int idummy); void Pyrget(int lun, int move); void Pyrset(int lun, int move); void Pystat(int flag); void Pytest(int flag); void Pyupda(int mupda, int lun); void SetupTest(); ClassDef(TPythia6,0) //Interface to Pythia6.1 Event Generator }; #endif