Go to the documentation of this file.00001
00002 #include <iostream>
00003
00004 #include "Pythia6PartonEGun.h"
00005
00006 #include "FWCore/Utilities/interface/Exception.h"
00007
00008 #include "FWCore/Framework/interface/EDProducer.h"
00009 #include "FWCore/Framework/interface/EventSetup.h"
00010
00011 #include "SimDataFormats/GeneratorProducts/interface/HepMCProduct.h"
00012
00013 #include "FWCore/Framework/interface/MakerMacros.h"
00014
00015 using namespace edm;
00016 using namespace gen;
00017
00018 Pythia6PartonEGun::Pythia6PartonEGun( const ParameterSet& pset ) :
00019 Pythia6PartonGun(pset)
00020 {
00021
00022
00023 ParameterSet pgun_params =
00024 pset.getParameter<ParameterSet>("PGunParameters");
00025 fMinEta = pgun_params.getParameter<double>("MinEta");
00026 fMaxEta = pgun_params.getParameter<double>("MaxEta");
00027 fMinE = pgun_params.getParameter<double>("MinE");
00028 fMaxE = pgun_params.getParameter<double>("MaxE");
00029
00030 }
00031
00032 Pythia6PartonEGun::~Pythia6PartonEGun()
00033 {
00034 }
00035
00036 void Pythia6PartonEGun::generateEvent()
00037 {
00038
00039 Pythia6Service::InstanceWrapper guard(fPy6Service);
00040
00041
00042
00043
00044
00045
00046 HepMC::GenVertex* Vtx = new HepMC::GenVertex( HepMC::FourVector(0.,0.,0.));
00047
00048
00049
00050 fEvt = new HepMC::GenEvent() ;
00051
00052 int ip=1;
00053
00054 int py6PID = HepPID::translatePDTtoPythia( fPartonID );
00055 int dum = 0;
00056 double ee=0, the=0, eta=0;
00057 double mass = pymass_(py6PID);
00058
00059
00060
00061
00062 pyjets.p[4][ip-1]=mass;
00063
00064 double phi = (fMaxPhi-fMinPhi)*pyr_(&dum)+fMinPhi;
00065 ee = (fMaxE-fMinE)*pyr_(&dum)+fMinE;
00066 eta = (fMaxEta-fMinEta)*pyr_(&dum)+fMinEta;
00067 the = 2.*atan(exp(-eta));
00068
00069 py1ent_(ip, py6PID, ee, the, phi);
00070
00071 double px = pyjets.p[0][ip-1];
00072 double py = pyjets.p[1][ip-1];
00073 double pz = pyjets.p[2][ip-1];
00074
00075 HepMC::FourVector p(px,py,pz,ee) ;
00076 HepMC::GenParticle* Part = new HepMC::GenParticle(p,fPartonID,1);
00077 Part->suggest_barcode( ip ) ;
00078 Vtx->add_particle_out(Part);
00079
00080
00081 ip = ip + 1;
00082 HepMC::GenParticle* APart = addAntiParticle( ip, fPartonID, ee, eta, phi );
00083 if ( APart )
00084 {
00085 Vtx->add_particle_out(APart) ;
00086 }
00087 else
00088 {
00089
00090 }
00091
00092
00093
00094 double qmax = 2.*ee;
00095
00096 joinPartons( qmax );
00097
00098 fEvt->add_vertex(Vtx);
00099
00100
00101 pyexec_();
00102
00103 return;
00104 }
00105
00106 DEFINE_FWK_MODULE(Pythia6PartonEGun);