CGEM BOSS 6.6.5.h
BESIII Offline Software System
Loading...
Searching...
No Matches
EvtPyGaGa.cc
Go to the documentation of this file.
1//--------------------------------------------------------------------------
2//
3// Environment:
4// This software is part of the EvtGen package developed jointly
5// for the BaBar and CLEO collaborations. If you use all or part
6// of it, please give an appropriate acknowledgement.
7//
8// Copyright Information: See EvtGen/COPYRIGHT
9// Copyright (C) 1998 Caltech, UCSB
10//
11// Module: EvtPycont.cc
12//
13// Description: Routine to generate e+e- --> q\barq via Jetset
14//
15// Modification history:
16//
17// PCK August 4, 1997 Module created
18// RS October 28, 2002 copied from EvtJscont.cc
19//
20//------------------------------------------------------------------------
21//
23#include <stdlib.h>
27#include "EvtGenBase/EvtPDL.hh"
30#include "EvtGenBase/EvtId.hh"
32#include <string.h>
33#include <iostream>
34
35extern "C" {
36 extern void pystat_(int &);
37}
38
39extern "C" {
40extern struct
41{
42 int dc[18];
44}
45
47{
48 int i=1;
49 pystat_(i);
50}
51
52void EvtPyGaGa::getName(std::string& model_name)
53{
54 model_name="PYGAGA";
55}
56
58{
59 return new EvtPyGaGa;
60}
61
63{
64 // check that there are 1 argument
65 checkNArg(0);
66 for( int i=0; i<18; i++)
67 decaych_.dc[i]=0;
68}
69
71{
72 noProbMax();
73}
74
76{
78 EvtVector4R p4[100];
79
80 double energy=p->mass();
81
82 int i,more;
83 int ndaugjs;
84 int kf[100];
85 EvtId id[100];
86 int type[MAX_DAUG];
87
88 double px[100],py[100],pz[100],e[100];
89
90 if ( p->getNDaug() != 0 ) { return;}
91 do{
92 EvtPythia::pythiacont(&energy,&ndaugjs,kf,px,py,pz,e);
93
94 for(i=0;i<ndaugjs;i++)
95 {
96
97 id[i]=EvtPDL::evtIdFromStdHep(kf[i]);
98
99 type[i]=EvtPDL::getSpinType(id[i]);
100
101 // have to protect against negative mass^2 for massless particles
102 // i.e. neutrinos and photons.
103 // this is uggly but I need to fix it right now....
104
105 if (px[i]*px[i]+py[i]*py[i]+pz[i]*pz[i]>=e[i]*e[i])
106 e[i]=sqrt(px[i]*px[i]+py[i]*py[i]+pz[i]*pz[i])+0.0000000000001;
107
108 p4[i].set(e[i],px[i],py[i],pz[i]);
109
110 }
111
112 int channel=EvtDecayTable::inChannelList(p->getId(),ndaugjs,id);
113
114 more=((channel!=-1)&&(channel!=p->getChannel()));
115
116 }while(more);
117
118 p->makeDaughters(ndaugjs,id);
119
120 for(i=0;i<ndaugjs;i++)
121 p->getDaug(i)->init( id[i], p4[i] );
122
123 return ;
124}
125
const int MAX_DAUG
int dc[18]
Definition EvtPyGaGa.cc:42
void pystat_(int &)
struct @10 decaych_
struct @9 decaych_
void pystat_(int &)
************Class m_ypar INTEGER m_KeyWgt INTEGER m_nphot INTEGER m_KeyGPS INTEGER m_IsBeamPolarized INTEGER m_EvtGenInterface DOUBLE PRECISION m_Emin DOUBLE PRECISION m_sphot DOUBLE PRECISION m_Xenph DOUBLE PRECISION m_q2 DOUBLE PRECISION m_PolBeam2 DOUBLE PRECISION m_xErrPb *COMMON c_KK2f $ !CMS energy average $ !Spin Polarization vector first beam $ !Spin Polarization vector second beam $ !Beam energy spread[GeV] $ !minimum hadronization energy[GeV] $ !input READ never touch them !$ !debug facility $ !maximum weight $ !inverse alfaQED $ !minimum real photon energy
Definition KK2f.h:50
void checkNArg(int a1, int a2=-1, int a3=-1, int a4=-1)
static int inChannelList(EvtId parent, int ndaug, EvtId *daugs)
Definition EvtId.hh:27
static EvtId evtIdFromStdHep(int stdhep)
Definition EvtPDL.cc:244
static EvtSpinType::spintype getSpinType(EvtId i)
Definition EvtPDL.hh:61
void makeDaughters(int ndaug, EvtId *id)
virtual void init(EvtId part_n, const EvtVector4R &p4)=0
EvtId getId() const
int getNDaug() const
EvtParticle * getDaug(int i)
double mass() const
int getChannel() const
EvtDecayBase * clone()
Definition EvtPyGaGa.cc:57
void initProbMax()
Definition EvtPyGaGa.cc:70
virtual ~EvtPyGaGa()
Definition EvtPyGaGa.cc:46
void getName(std::string &name)
Definition EvtPyGaGa.cc:52
void init()
Definition EvtPyGaGa.cc:62
void decay(EvtParticle *p)
Definition EvtPyGaGa.cc:75
static void pythiaInit(int f)
static void pythiacont(double *, int *, int *, double *, double *, double *, double *)
Definition EvtPythia.cc:200
void set(int i, double d)