Go to the documentation of this file.00001
00002 #include <iostream>
00003
00004 #include "Pythia6PtGun.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 Pythia6PtGun::Pythia6PtGun( 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 fMinPt = pgun_params.getParameter<double>("MinPt");
00028 fMaxPt = pgun_params.getParameter<double>("MaxPt");
00029 fAddAntiParticle = pgun_params.getParameter<bool>("AddAntiParticle");
00030
00031 }
00032
00033 Pythia6PtGun::~Pythia6PtGun()
00034 {
00035 }
00036
00037 void Pythia6PtGun::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 pt=0, mom=0, ee=0, the=0, eta=0;
00060 double mass = pymass_(py6PID);
00061
00062
00063
00064
00065 pyjets.p[4][ip-1]=mass;
00066
00067 double phi = (fMaxPhi-fMinPhi)*pyr_(&dum)+fMinPhi;
00068
00069 eta = (fMaxEta-fMinEta)*pyr_(&dum)+fMinEta;
00070
00071 the = 2.*atan(exp(-eta));
00072
00073 pt = (fMaxPt-fMinPt)*pyr_(&dum)+fMinPt;
00074
00075 mom = pt/sin(the);
00076 ee = sqrt(mom*mom+mass*mass);
00077
00078 py1ent_(ip, py6PID, ee, the, phi);
00079
00080 double px = pyjets.p[0][ip-1];
00081 double py = pyjets.p[1][ip-1];
00082 double pz = pyjets.p[2][ip-1];
00083
00084 HepMC::FourVector p(px,py,pz,ee) ;
00085 HepMC::GenParticle* Part =
00086 new HepMC::GenParticle(p,particleID,1);
00087 Part->suggest_barcode( ip ) ;
00088 Vtx->add_particle_out(Part);
00089
00090 if(fAddAntiParticle)
00091 {
00092 ip = ip + 1;
00093 HepMC::GenParticle* APart = addAntiParticle( ip, particleID, ee, eta, phi );
00094 if ( APart ) Vtx->add_particle_out(APart) ;
00095 }
00096 ip++;
00097 }
00098
00099 fEvt->add_vertex(Vtx);
00100
00101
00102 pyexec_();
00103
00104 return;
00105 }
00106
00107 DEFINE_FWK_MODULE(Pythia6PtGun);