Go to the documentation of this file.00001
00002 #include <iostream>
00003
00004 #include "Pythia6EGun.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 Pythia6EGun::Pythia6EGun( const ParameterSet& pset ) :
00019 Pythia6ParticleGun(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 fAddAntiParticle = pgun_params.getParameter<bool>("AddAntiParticle");
00030
00031 }
00032
00033 Pythia6EGun::~Pythia6EGun()
00034 {
00035 }
00036
00037 void Pythia6EGun::generateEvent()
00038 {
00039
00040 Pythia6Service::InstanceWrapper guard(fPy6Service);
00041
00042
00043
00044
00045
00046
00047 HepMC::GenVertex* Vtx = new HepMC::GenVertex( HepMC::FourVector(0.,0.,0.));
00048
00049
00050
00051 fEvt = new HepMC::GenEvent() ;
00052
00053 int ip=1;
00054 for ( size_t i=0; i<fPartIDs.size(); i++ )
00055 {
00056 int particleID = fPartIDs[i];
00057 int py6PID = HepPID::translatePDTtoPythia( particleID );
00058 int dum = 0;
00059 double ee=0,the=0,eta=0;
00060 double mass = pymass_(particleID);
00061
00062
00063
00064
00065 pyjets.p[4][ip-1]=mass;
00066
00067 double phi = (fMaxPhi-fMinPhi)*pyr_(&dum)+fMinPhi;
00068 ee = (fMaxE-fMinE)*pyr_(&dum)+fMinE;
00069 eta = (fMaxEta-fMinEta)*pyr_(&dum)+fMinEta;
00070 the = 2.*atan(exp(-eta));
00071
00072 py1ent_(ip, py6PID, ee, the, phi);
00073
00074 double px = pyjets.p[0][ip-1];
00075 double py = pyjets.p[1][ip-1];
00076 double pz = pyjets.p[2][ip-1];
00077
00078 HepMC::FourVector p(px,py,pz,ee) ;
00079 HepMC::GenParticle* Part =
00080 new HepMC::GenParticle(p,particleID,1);
00081 Part->suggest_barcode( ip ) ;
00082 Vtx->add_particle_out(Part);
00083
00084 if(fAddAntiParticle)
00085 {
00086 ip = ip + 1;
00087 HepMC::GenParticle* APart = addAntiParticle( ip, particleID, ee, eta, phi );
00088 if ( APart ) Vtx->add_particle_out(APart) ;
00089 }
00090 ip++;
00091 }
00092
00093 fEvt->add_vertex(Vtx);
00094
00095
00096 pyexec_();
00097
00098 return;
00099 }
00100
00101 DEFINE_FWK_MODULE(Pythia6EGun);