CMS 3D CMS Logo

/data/refman/pasoursint/CMSSW_5_3_0/src/GeneratorInterface/Pythia6Interface/plugins/Pythia6EGun.cc

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    // ParameterSet defpset ;
00023    ParameterSet pgun_params = 
00024       pset.getParameter<ParameterSet>("PGunParameters"); // , defpset ) ;
00025    fMinEta     = pgun_params.getParameter<double>("MinEta"); // ,-2.2);
00026    fMaxEta     = pgun_params.getParameter<double>("MaxEta"); // , 2.2);
00027    fMinE       = pgun_params.getParameter<double>("MinE"); // ,  0.);
00028    fMaxE       = pgun_params.getParameter<double>("MaxE"); // ,  0.);
00029    fAddAntiParticle = pgun_params.getParameter<bool>("AddAntiParticle"); //, false) ;  
00030 
00031 }
00032 
00033 Pythia6EGun::~Pythia6EGun()
00034 {
00035 }
00036 
00037 void Pythia6EGun::generateEvent()
00038 {
00039    
00040    Pythia6Service::InstanceWrapper guard(fPy6Service);  // grab Py6 instance
00041 
00042    // now actualy, start cooking up the event gun 
00043    //
00044 
00045    // 1st, primary vertex
00046    //
00047    HepMC::GenVertex* Vtx = new HepMC::GenVertex( HepMC::FourVector(0.,0.,0.));
00048 
00049    // here re-create fEvt (memory)
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]; // this is PDG - need to convert to Py6 !!!
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          // fill p(ip,5) (in PYJETS) with mass value right now,
00063          // because the (hardcoded) mstu(10)=1 will make py1ent
00064          // pick the mass from there
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]; // pt*cos(phi) ;
00075          double py     = pyjets.p[1][ip-1]; // pt*sin(phi) ;
00076          double pz     = pyjets.p[2][ip-1]; // mom*cos(the) ;
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    // run pythia
00096    pyexec_();
00097    
00098    return;
00099 }
00100 
00101 DEFINE_FWK_MODULE(Pythia6EGun);