Files
2025-12-05 08:54:02 +01:00

208 lines
9.1 KiB
C++

//
// ********************************************************************
// * License and Disclaimer *
// * *
// * The Geant4 software is copyright of the Copyright Holders of *
// * the Geant4 Collaboration. It is provided under the terms and *
// * conditions of the Geant4 Software License, included in the file *
// * LICENSE and available at http://cern.ch/geant4/license . These *
// * include a list of copyright holders. *
// * *
// * Neither the authors of this software system, nor their employing *
// * institutes,nor the agencies providing financial support for this *
// * work make any representation or warranty, express or implied, *
// * regarding this software system or assume any liability for its *
// * use. Please see the license in the file LICENSE and URL above *
// * for the full disclaimer and the limitation of liability. *
// * *
// * This code implementation is the result of the scientific and *
// * technical work of the GEANT4 collaboration. *
// * By using, copying, modifying or distributing the software (or *
// * any work based on the software) you agree to acknowledge its *
// * use in resulting scientific publications, and indicate your *
// * acceptance of all terms of the Geant4 Software license. *
// ********************************************************************
//
/// \file Pythia6.hh
/// \brief Definition of the Pythia6 class
// ----------------------------------------------------------------------------
// ******************************************************************************
// ******************************************************************************
// ** **
// ** **
// ** *......* Welcome to the Lund Monte Carlo! **
// ** *:::!!:::::::::::* **
// ** *::::::!!::::::::::::::* PPP Y Y TTTTT H H III A **
// ** *::::::::!!::::::::::::::::* P P Y Y T H H I A A **
// ** *:::::::::!!:::::::::::::::::* PPP Y T HHHHH I AAAAA **
// ** *:::::::::!!:::::::::::::::::* P Y T H H I A A **
// ** *::::::::!!::::::::::::::::*! P Y T H H III A A **
// ** *::::::!!::::::::::::::* !! **
// ** !! *:::!!:::::::::::* !! This is PYTHIA version 6.418 **
// ** !! !* -><- * !! Last date of change: 9 Jun 2008 **
// ** !! !! !! **
// ** !! !! !! Now is 0 Jan 2000 at 0:00:00 **
// ** !! !! **
// ** !! lh !! Disclaimer: this program comes **
// ** !! !! without any guarantees. Beware **
// ** !! hh !! of errors and use common sense **
// ** !! ll !! when interpreting results. **
// ** !! !! **
// ** !! Copyright T. Sjostrand (2008) **
// ** **
// ** An archive of program versions and documentation is found on the web: **
// ** http://www.thep.lu.se/~torbjorn/Pythia.html **
// ** **
// ** When you cite this program, the official reference is to the 6.4 manual: **
// ** T. Sjostrand, S. Mrenna and P. Skands, JHEP05 (2006) 026 **
// ** (LU TP 06-13, FERMILAB-PUB-06-052-CD-T) [hep-ph/0603175]. **
// ** **
// ** Also remember that the program, to a large extent, represents original **
// ** physics research. Other publications of special relevance to your **
// ** studies may therefore deserve separate mention. **
// ** **
// ** Main author: Torbjorn Sjostrand; Department of Theoretical Physics, **
// ** Lund University, Solvegatan 14A, S-223 62 Lund, Sweden; **
// ** phone: + 46 - 46 - 222 48 16; e-mail: torbjorn@thep.lu.se **
// ** Author: Stephen Mrenna; Computing Division, GDS Group, **
// ** Fermi National Accelerator Laboratory, MS 234, Batavia, IL 60510, USA; **
// ** phone: + 1 - 630 - 840 - 2556; e-mail: mrenna@fnal.gov **
// ** Author: Peter Skands; Theoretical Physics Department, **
// ** Fermi National Accelerator Laboratory, MS 106, Batavia, IL 60510, USA; **
// ** and CERN/PH, CH-1211 Geneva, Switzerland; **
// ** phone: + 41 - 22 - 767 24 59; e-mail: skands@fnal.gov **
// ** **
// ** **
// ******************************************************************************
#ifndef PYTHIA_Pythia6
#define PYTHIA_Pythia6
#include <vector>
int const KNDCAY = 8000; // should be 4000 for pythia61
/// PYJETS common-block
struct Pyjets_t
{
int N;
int NPAD;
int K[5][4000];
double P[5][4000];
double V[5][4000];
};
/// PYDAT1 common-block
struct Pydat1_t
{
int MSTU[200];
double PARU[200];
int MSTJ[200];
double PARJ[200];
};
/// PYDAT3 common-block
struct Pydat3_t
{
int MDCY[3][500];
int MDME[2][KNDCAY];
double BRAT[KNDCAY];
int KFDP[5][KNDCAY];
};
/// Structure for Pythia6 particle properties
struct Pythia6Particle
{
Pythia6Particle(int ks, int kf, int parent, int firstChild, int lastChild, float px, float py,
float pz, float energy, float mass, float vx, float vy, float vz, float time,
float lifetime)
: fKS(ks),
fKF(kf),
fParent(parent),
fFirstChild(firstChild),
fLastChild(lastChild),
fPx(px),
fPy(py),
fPz(pz),
fEnergy(energy),
fMass(mass),
fVx(vx),
fVy(vy),
fVz(vz),
fTime(time),
fLifetime(lifetime)
{}
int fKS; // status of particle ( LUJETS K[1] )
int fKF; // KF flavour code ( LUJETS K[2] )
int fParent; // parrent's id ( LUJETS K[3] )
int fFirstChild; // id of first child ( LUJETS K[4] )
int fLastChild; // id of last child ( LUJETS K[5] )
float fPx; // X momenta [GeV/c] ( LUJETS P[1] )
float fPy; // Y momenta [GeV/c] ( LUJETS P[2] )
float fPz; // Z momenta [GeV/c] ( LUJETS P[3] )
float fEnergy; // Energy [GeV] ( LUJETS P[4] )
float fMass; // Mass [Gev/c^2] ( LUJETS P[5] )
float fVx; // X vertex [mm] ( LUJETS V[1] )
float fVy; // Y vertex [mm] ( LUJETS V[2] )
float fVz; // Z vertex [mm] ( LUJETS V[3] )
float fTime; // time of procuction [mm/c]( LUJETS V[4] )
float fLifetime; // proper lifetime [mm/c] ( LUJETS V[5] )
};
typedef std::vector<Pythia6Particle*> ParticleVector;
/// The C++ interface class to Pythia6
///
/// According to TPythia6 class from Root:
/// (The TPythia6 class is an interface class to F77 routines in Pythia6 //
/// CERNLIB event generators, written by T.Sjostrand.)
/// http://root.cern/
/// see http://root.cern/root/License.html
///
/// The complete Pythia6 documentation can be found at:
/// http://home.thep.lu.se/~torbjorn/pythiaaux/recent.html
///
class Pythia6
{
public:
// ****** constructors and destructor
Pythia6();
virtual ~Pythia6();
static Pythia6* Instance();
// ****** TPYTHIA routines
//
int Pycomp(int kf);
void Py1ent(int line, int kf, double pe, double theta, double phi);
ParticleVector* ImportParticles();
int ImportParticles(ParticleVector* particles, const char* option = "");
// ****** /PYDAT1/
//
void SetMSTJ(int i, int m) { fPydat1->MSTJ[i - 1] = m; }
// ****** /PYDAT3/
//
int GetMDCY(int i, int j) { return fPydat3->MDCY[j - 1][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; }
private:
static Pythia6* fgInstance;
ParticleVector* fParticles;
Pyjets_t* fPyjets;
Pydat1_t* fPydat1;
Pydat3_t* fPydat3;
};
#endif