| Classes | Job Modules | Data Objects | Services | Algorithms | Tools | Packages | Directories | Tracs |

In This Package:

GtHepEvtGenTool.cc

Go to the documentation of this file.
00001 #include "GtHepEvtGenTool.h"
00002 #include "HepEvt2HepMC.h"
00003 
00004 #include "Event/HepMCEvent.h"
00005 #include "HepMC/GenEvent.h"
00006 
00007 #include <cstdio>
00008 
00009 
00010 
00011 GtHepEvtGenTool::GtHepEvtGenTool(const std::string& type,
00012                                  const std::string& name,
00013                                  const IInterface* parent)
00014     : GaudiTool(type,name,parent)
00015     , m_parser(0)
00016 {
00017     declareInterface<IHepMCEventMutator>(this);
00018 
00019     declareProperty("HepEvtDataSource",m_source = "","Source of HEPEvt data");
00020 }
00021 
00022 GtHepEvtGenTool::~GtHepEvtGenTool() {}
00023 
00024 StatusCode GtHepEvtGenTool::initialize()
00025 {
00026     info() << "GtHepEvtGenTool::initialize()" << endreq;
00027 
00028     if (this->GaudiTool::initialize().isFailure()) {
00029         fatal() << "Parent Tool class initialization failed" << endreq;
00030         return StatusCode::FAILURE;
00031     }
00032 
00033     return StatusCode::SUCCESS;
00034 }
00035 
00036 StatusCode GtHepEvtGenTool::finalize()
00037 {
00038     if (m_parser) delete m_parser; m_parser = 0;
00039 
00040     return this->GaudiTool::finalize();
00041 }
00042 
00043 StatusCode GtHepEvtGenTool::mutate(HepMC::GenEvent& event)
00044 {
00045     if (!m_parser) {
00046         if ("" == m_source) {
00047             fatal() << "No HEPEvt source string given." << endreq;
00048             return StatusCode::FAILURE;
00049         }
00050         m_parser = new HepEvt2HepMC;
00051         if (m_parser->fill(m_source.c_str()).isFailure()) {
00052             fatal () << "Failed to fill primary vertices using \""
00053                      << m_source << "\"" << endreq;
00054             return StatusCode::FAILURE;
00055         }
00056         info () << "Filled HEPEvt cache with " << m_parser->cacheSize()
00057                 << " events" << endreq;
00058     }
00059     else {
00060         if( m_parser->cacheSize()>0 )  {
00061             debug () << "Reusing cache with " << m_parser->cacheSize()
00062                     << " events left" << endreq;
00063         } else {
00064             warning() << "WARNING: Reuse input source! Recommend more input lines!"<< endreq;
00065             if (m_parser->fill(m_source.c_str()).isFailure()) {
00066               fatal () << "Failed to fill primary vertices using \""
00067                        << m_source << "\"" << endreq;
00068               return StatusCode::FAILURE;
00069             }
00070             info () << "Filled HEPEvt cache with " << m_parser->cacheSize()
00071                     << " events" << endreq;
00072         }
00073     }
00074 
00075     HepMC::GenEvent* new_event=0;
00076     if (m_parser->generate(new_event).isFailure()) {
00077         fatal() << "Failed to generate new event" << endreq;
00078         if (new_event) delete new_event;
00079         return StatusCode::FAILURE;
00080     }
00081     event = *new_event;
00082     delete new_event;
00083 
00084     HepMC::FourVector pos = event.signal_process_vertex()->position();
00085     debug() << "HepEvt at (" <<pos.x() << "," << pos.y() << "," << pos.z() << ")" << endreq;
00086 
00087     return StatusCode::SUCCESS;
00088 }
| Classes | Job Modules | Data Objects | Services | Algorithms | Tools | Packages | Directories | Tracs |

Generated on Mon Apr 11 20:55:36 2011 for GenTools by doxygen 1.4.7