Back to home page

EIC code displayed by LXR

 
 

    


File indexing completed on 2025-02-23 09:21:10

0001 //
0002 // ********************************************************************
0003 // * License and Disclaimer                                           *
0004 // *                                                                  *
0005 // * The  Geant4 software  is  copyright of the Copyright Holders  of *
0006 // * the Geant4 Collaboration.  It is provided  under  the terms  and *
0007 // * conditions of the Geant4 Software License,  included in the file *
0008 // * LICENSE and available at  http://cern.ch/geant4/license .  These *
0009 // * include a list of copyright holders.                             *
0010 // *                                                                  *
0011 // * Neither the authors of this software system, nor their employing *
0012 // * institutes,nor the agencies providing financial support for this *
0013 // * work  make  any representation or  warranty, express or implied, *
0014 // * regarding  this  software system or assume any liability for its *
0015 // * use.  Please see the license in the file  LICENSE  and URL above *
0016 // * for the full disclaimer and the limitation of liability.         *
0017 // *                                                                  *
0018 // * This  code  implementation is the result of  the  scientific and *
0019 // * technical work of the GEANT4 collaboration.                      *
0020 // * By using,  copying,  modifying or  distributing the software (or *
0021 // * any work based  on the software)  you  agree  to acknowledge its *
0022 // * use  in  resulting  scientific  publications,  and indicate your *
0023 // * acceptance of all terms of the Geant4 Software license.          *
0024 // ********************************************************************
0025 //
0026 //
0027 /// \file eventgenerator/pythia/decayer6/include/Pythia6.hh
0028 /// \brief Definition of the Pythia6 class
0029 
0030 //
0031 // ----------------------------------------------------------------------------
0032 
0033 // ******************************************************************************
0034 // ******************************************************************************
0035 // **                                                                          **
0036 // **                                                                          **
0037 // **              *......*                  Welcome to the Lund Monte Carlo!  **
0038 // **         *:::!!:::::::::::*                                               **
0039 // **      *::::::!!::::::::::::::*          PPP  Y   Y TTTTT H   H III   A    **
0040 // **    *::::::::!!::::::::::::::::*        P  P  Y Y    T   H   H  I   A A   **
0041 // **   *:::::::::!!:::::::::::::::::*       PPP    Y     T   HHHHH  I  AAAAA  **
0042 // **   *:::::::::!!:::::::::::::::::*       P      Y     T   H   H  I  A   A  **
0043 // **    *::::::::!!::::::::::::::::*!       P      Y     T   H   H III A   A  **
0044 // **      *::::::!!::::::::::::::* !!                                         **
0045 // **      !! *:::!!:::::::::::*    !!       This is PYTHIA version 6.418      **
0046 // **      !!     !* -><- *         !!       Last date of change:  9 Jun 2008  **
0047 // **      !!     !!                !!                                         **
0048 // **      !!     !!                !!       Now is  0 Jan 2000 at  0:00:00    **
0049 // **      !!                       !!                                         **
0050 // **      !!        lh             !!       Disclaimer: this program comes    **
0051 // **      !!                       !!       without any guarantees. Beware    **
0052 // **      !!                 hh    !!       of errors and use common sense    **
0053 // **      !!    ll                 !!       when interpreting results.        **
0054 // **      !!                       !!                                         **
0055 // **      !!                                Copyright T. Sjostrand (2008)     **
0056 // **                                                                          **
0057 // ** An archive of program versions and documentation is found on the web:    **
0058 // ** http://www.thep.lu.se/~torbjorn/Pythia.html                              **
0059 // **                                                                          **
0060 // ** When you cite this program, the official reference is to the 6.4 manual: **
0061 // ** T. Sjostrand, S. Mrenna and P. Skands, JHEP05 (2006) 026                 **
0062 // ** (LU TP 06-13, FERMILAB-PUB-06-052-CD-T) [hep-ph/0603175].                **
0063 // **                                                                          **
0064 // ** Also remember that the program, to a large extent, represents original   **
0065 // ** physics research. Other publications of special relevance to your        **
0066 // ** studies may therefore deserve separate mention.                          **
0067 // **                                                                          **
0068 // ** Main author: Torbjorn Sjostrand; Department of Theoretical Physics,      **
0069 // **   Lund University, Solvegatan 14A, S-223 62 Lund, Sweden;                **
0070 // **   phone: + 46 - 46 - 222 48 16; e-mail: torbjorn@thep.lu.se              **
0071 // ** Author: Stephen Mrenna; Computing Division, GDS Group,                   **
0072 // **   Fermi National Accelerator Laboratory, MS 234, Batavia, IL 60510, USA; **
0073 // **   phone: + 1 - 630 - 840 - 2556; e-mail: mrenna@fnal.gov                 **
0074 // ** Author: Peter Skands; Theoretical Physics Department,                    **
0075 // **   Fermi National Accelerator Laboratory, MS 106, Batavia, IL 60510, USA; **
0076 // **   and CERN/PH, CH-1211 Geneva, Switzerland;                              **
0077 // **   phone: + 41 - 22 - 767 24 59; e-mail: skands@fnal.gov                  **
0078 // **                                                                          **
0079 // **                                                                          **
0080 // ******************************************************************************
0081 
0082 #ifndef PYTHIA_Pythia6
0083 #define PYTHIA_Pythia6
0084 
0085 #include <vector>
0086 
0087 int const KNDCAY = 8000;  // should be 4000 for pythia61
0088 
0089 /// PYJETS common-block
0090 struct Pyjets_t
0091 {
0092     int N;
0093     int NPAD;
0094     int K[5][4000];
0095     double P[5][4000];
0096     double V[5][4000];
0097 };
0098 
0099 /// PYDAT1 common-block
0100 struct Pydat1_t
0101 {
0102     int MSTU[200];
0103     double PARU[200];
0104     int MSTJ[200];
0105     double PARJ[200];
0106 };
0107 
0108 /// PYDAT3 common-block
0109 struct Pydat3_t
0110 {
0111     int MDCY[3][500];
0112     int MDME[2][KNDCAY];
0113     double BRAT[KNDCAY];
0114     int KFDP[5][KNDCAY];
0115 };
0116 
0117 /// Structure for Pythia6 particle properties
0118 struct Pythia6Particle
0119 {
0120     Pythia6Particle(int ks, int kf, int parent, int firstChild, int lastChild, float px, float py,
0121                     float pz, float energy, float mass, float vx, float vy, float vz, float time,
0122                     float lifetime)
0123       : fKS(ks),
0124         fKF(kf),
0125         fParent(parent),
0126         fFirstChild(firstChild),
0127         fLastChild(lastChild),
0128         fPx(px),
0129         fPy(py),
0130         fPz(pz),
0131         fEnergy(energy),
0132         fMass(mass),
0133         fVx(vx),
0134         fVy(vy),
0135         fVz(vz),
0136         fTime(time),
0137         fLifetime(lifetime)
0138     {}
0139 
0140     int fKS;  // status of particle       ( LUJETS K[1] )
0141     int fKF;  // KF flavour code          ( LUJETS K[2] )
0142     int fParent;  // parrent's id             ( LUJETS K[3] )
0143     int fFirstChild;  // id of first child        ( LUJETS K[4] )
0144     int fLastChild;  // id of last  child        ( LUJETS K[5] )
0145 
0146     float fPx;  // X momenta [GeV/c]        ( LUJETS P[1] )
0147     float fPy;  // Y momenta [GeV/c]        ( LUJETS P[2] )
0148     float fPz;  // Z momenta [GeV/c]        ( LUJETS P[3] )
0149     float fEnergy;  // Energy    [GeV]          ( LUJETS P[4] )
0150     float fMass;  // Mass      [Gev/c^2]      ( LUJETS P[5] )
0151 
0152     float fVx;  // X vertex  [mm]           ( LUJETS V[1] )
0153     float fVy;  // Y vertex  [mm]           ( LUJETS V[2] )
0154     float fVz;  // Z vertex  [mm]           ( LUJETS V[3] )
0155     float fTime;  // time of procuction [mm/c]( LUJETS V[4] )
0156     float fLifetime;  // proper lifetime [mm/c]   ( LUJETS V[5] )
0157 };
0158 
0159 typedef std::vector<Pythia6Particle*> ParticleVector;
0160 
0161 /// The C++ interface class to Pythia6
0162 ///
0163 /// According to TPythia6 class from Root:
0164 /// (The TPythia6 class is an interface class to F77 routines in Pythia6                //
0165 /// CERNLIB event generators, written by T.Sjostrand.)
0166 /// http://root.cern.ch/
0167 /// see http://root.cern.ch/root/License.html
0168 ///
0169 /// The complete Pythia6 documentation can be found at:
0170 /// http://home.thep.lu.se/~torbjorn/pythiaaux/recent.html
0171 ///
0172 
0173 class Pythia6
0174 {
0175   public:
0176     // ****** constructors and destructor
0177     Pythia6();
0178     virtual ~Pythia6();
0179 
0180     static Pythia6* Instance();
0181 
0182     // ****** TPYTHIA routines
0183     //
0184     int Pycomp(int kf);
0185     void Py1ent(int line, int kf, double pe, double theta, double phi);
0186     ParticleVector* ImportParticles();
0187     int ImportParticles(ParticleVector* particles, const char* option = "");
0188 
0189     // ****** /PYDAT1/
0190     //
0191     void SetMSTJ(int i, int m) { fPydat1->MSTJ[i - 1] = m; }
0192 
0193     // ****** /PYDAT3/
0194     //
0195     int GetMDCY(int i, int j) { return fPydat3->MDCY[j - 1][i - 1]; }
0196     int GetKFDP(int i, int j) { return fPydat3->KFDP[j - 1][i - 1]; }
0197     void SetMDCY(int i, int j, int m) { fPydat3->MDCY[j - 1][i - 1] = m; }
0198     void SetMDME(int i, int j, int m) { fPydat3->MDME[j - 1][i - 1] = m; }
0199 
0200   private:
0201     static Pythia6* fgInstance;
0202 
0203     ParticleVector* fParticles;
0204     Pyjets_t* fPyjets;
0205     Pydat1_t* fPydat1;
0206     Pydat3_t* fPydat3;
0207 };
0208 
0209 #endif