diff --git a/Generator/CMakeLists.txt b/Generator/CMakeLists.txt index a9a5cd9f9e5946684d60058219d2b28725528c08..b62828d58a0372891fbb51fc888fb9f4df6db9e7 100644 --- a/Generator/CMakeLists.txt +++ b/Generator/CMakeLists.txt @@ -1,6 +1,18 @@ ######################################## gaudi_subdir(Generator v0r0) -set(GenAlgo_srcs src/GenAlgo.cpp src/GenEvent.cpp src/IGenTool.cpp src/StdHepRdr.cpp src/GenReader.cpp src/GenPrinter.cpp src/LCAscHepRdr.cc src/HepevtRdr.cpp src/SLCIORdr.cpp src/HepMCRdr.cpp) +set(GenAlgo_srcs + src/IGenTool.cpp + src/GenAlgo.cpp + src/GenEvent.cpp + src/GenReader.cpp + # src/StdHepRdr.cpp + # src/GenPrinter.cpp + # src/LCAscHepRdr.cc + # src/HepevtRdr.cpp + # src/SLCIORdr.cpp + # src/HepMCRdr.cpp + src/GtGunTool.cpp +) set(GenAlgo_incs src) find_package(ROOT COMPONENTS RIO Tree TreePlayer MathCore Net Graf3d Graf Gpad REQUIRED) diff --git a/Generator/src/GenAlgo.cpp b/Generator/src/GenAlgo.cpp index 902a43dc961c2c66b5cab10dd188183f2c0653db..6c3784ef40cc8586946b0e9398c8bc05964494a3 100644 --- a/Generator/src/GenAlgo.cpp +++ b/Generator/src/GenAlgo.cpp @@ -13,12 +13,12 @@ #include "IGenTool.h" #include "GenEvent.h" -#include "StdHepRdr.h" -#include "HepevtRdr.h"// not correct still -#include "SLCIORdr.h" -#include "HepMCRdr.h" -#include "GenPrinter.h" -#include "GenWriter.h" +// #include "StdHepRdr.h" +// #include "HepevtRdr.h"// not correct still +// #include "SLCIORdr.h" +// #include "HepMCRdr.h" +// #include "GenPrinter.h" +// #include "GenWriter.h" using namespace std; @@ -26,32 +26,41 @@ DECLARE_COMPONENT(GenAlgo) GenAlgo::GenAlgo(const std::string& name, ISvcLocator* pSvcLocator): GaudiAlgorithm(name, pSvcLocator) { declareProperty("MCParticle", m_hdl, "MCParticle collection (output)"); + declareProperty("GenTools", m_genToolNames, "List of GenTools"); m_evtid = 0; } StatusCode GenAlgo::initialize() { - - cout << "initialize start" << endl; - string generatorName = m_input_file.value(); - string outputName = m_output_file.value(); - string format = m_input_format.value(); - IGenTool* gen_reader; - if(format=="stdhep") gen_reader = new StdHepRdr(generatorName); - else if(format=="slcio") gen_reader = new SLCIORdr(generatorName); - else if(format=="hepmc") gen_reader = new HepMCRdr(generatorName); - else{cout << "Error : unsupport format for generator input file" << endl; return StatusCode::FAILURE; } - //IGenTool* gen_reader = new HepevtRdr(generatorName); - m_genTools.push_back(gen_reader); - if(m_print.value()) { - IGenTool* gen_printer = new GenPrinter(generatorName); - m_genTools.push_back(gen_printer); + if (m_genToolNames.size()==0) { + error() << "Please specify the gentools to be used in GenAlgo." << endmsg; + return StatusCode::FAILURE; + } + + for (auto gtname: m_genToolNames) { + m_genTools.push_back(gtname); } + + // cout << "initialize start" << endl; + // string generatorName = m_input_file.value(); + // string outputName = m_output_file.value(); + // string format = m_input_format.value(); + // IGenTool* gen_reader; + // if(format=="stdhep") gen_reader = new StdHepRdr(generatorName); + // else if(format=="slcio") gen_reader = new SLCIORdr(generatorName); + // else if(format=="hepmc") gen_reader = new HepMCRdr(generatorName); + // else{cout << "Error : unsupport format for generator input file" << endl; return StatusCode::FAILURE; } + // //IGenTool* gen_reader = new HepevtRdr(generatorName); + // m_genTools.push_back(gen_reader); + // if(m_print.value()) { + // IGenTool* gen_printer = new GenPrinter(generatorName); + // m_genTools.push_back(gen_printer); + // } //IGenTool* gen_writer = new GenWriter (outputName); //m_genTools.push_back(gen_writer); - cout << "initialize done" << endl; + // cout << "initialize done" << endl; return StatusCode::SUCCESS; } @@ -62,8 +71,8 @@ GenAlgo::execute() { auto mcCol = m_hdl.createAndPut(); MyHepMC::GenEvent m_event(*mcCol); - for(std::vector<IGenTool*>::iterator it=m_genTools.begin(); it != m_genTools.end(); ++it) { - if ((*it)->mutate(m_event)) {} + for(auto gentool: m_genTools) { + if (gentool->mutate(m_event)) {} else { cout << "Have read all events, stop now." << endl; auto ep = serviceLocator()->as<IEventProcessor>(); @@ -84,8 +93,8 @@ GenAlgo::execute() { StatusCode GenAlgo::finalize() { cout << "finalize" << endl; - for(std::vector<IGenTool*>::iterator it=m_genTools.begin(); it != m_genTools.end(); ++it) { - if ((*it)->finish()) {} + for(auto gentool: m_genTools) { + if (gentool->finish()) {} else {cout << "finish Failed" << endl; return StatusCode::FAILURE; } } return StatusCode::SUCCESS; diff --git a/Generator/src/GenAlgo.h b/Generator/src/GenAlgo.h index 499449e16538d5ee4ff89111241065e907dc2ab6..0fd060dc2a004a32f3ec0d27e9b50e8f42d163ad 100644 --- a/Generator/src/GenAlgo.h +++ b/Generator/src/GenAlgo.h @@ -4,6 +4,7 @@ #include <GaudiKernel/Algorithm.h> #include "GaudiKernel/Property.h" +#include <GaudiKernel/ToolHandle.h> #include "GaudiAlg/GaudiAlgorithm.h" #include "FWCore/DataHandle.h" @@ -36,7 +37,9 @@ private: Gaudi::Property<bool> m_do_write{this, "WriteFile", "NULL"}; std::vector<std::string> m_genToolNames; - std::vector<IGenTool*> m_genTools; + // std::vector<IGenTool*> m_genTools; + ToolHandleArray<IGenTool> m_genTools; + int m_evtid; int m_evtMax; //MyHepMC::GenEvent m_event; diff --git a/Generator/src/GenReader.h b/Generator/src/GenReader.h index b9abac0a8a6c994872e73d094a07a65c1a99d87b..e8abee90134aee82c9d0c2946dc9f9fd6b9b3c43 100644 --- a/Generator/src/GenReader.h +++ b/Generator/src/GenReader.h @@ -6,11 +6,11 @@ using namespace std; -class GenReader: public IGenTool{ +class GenReader: virtual public IGenTool{ public: ~GenReader(); - virtual bool configure()=0; + virtual bool configure_gentool()=0; virtual bool mutate(MyHepMC::GenEvent& event)=0; virtual bool finish()=0; virtual bool isEnd()=0; diff --git a/Generator/src/GtGunTool.cpp b/Generator/src/GtGunTool.cpp new file mode 100644 index 0000000000000000000000000000000000000000..b4087cce9e3dc0364d965f011a2319802170a566 --- /dev/null +++ b/Generator/src/GtGunTool.cpp @@ -0,0 +1,34 @@ +#include "GtGunTool.h" + +DECLARE_COMPONENT(GtGunTool) + +StatusCode +GtGunTool::initialize() { + StatusCode sc; + + return sc; +} + +StatusCode +GtGunTool::finalize() { + StatusCode sc; + return sc; +} + +bool +GtGunTool::mutate(MyHepMC::GenEvent& event) { + + return true; +} + +bool +GtGunTool::finish() { + return true; +} + +bool +GtGunTool::configure_gentool() { + + return true; +} + diff --git a/Generator/src/GtGunTool.h b/Generator/src/GtGunTool.h new file mode 100644 index 0000000000000000000000000000000000000000..4138a8ee029d73a9bae7f7c59bf6d00f77383fad --- /dev/null +++ b/Generator/src/GtGunTool.h @@ -0,0 +1,33 @@ +#ifndef GtGunTool_h +#define GtGunTool_h + +/* + * Description: + * A particle gun to generate particles. + * User could specify following: + * * PDGID or Particle Name + * * Status: this is used for extension. + * * Momentum or TotalEnergy or KineticEnergy + * * Position and Time + */ + +#include <GaudiKernel/AlgTool.h> +#include "IGenTool.h" + +class GtGunTool: public extends<AlgTool, IGenTool> { +public: + using extends::extends; + + // Overriding initialize and finalize + StatusCode initialize() override; + StatusCode finalize() override; + + // IGenTool + bool mutate(MyHepMC::GenEvent& event) override; + bool finish() override; + bool configure_gentool() override; + +}; + + +#endif diff --git a/Generator/src/IGenTool.h b/Generator/src/IGenTool.h index 87af6bd8167d7f1d57415b537de53923c136a34a..ef43bc747cbc324d16137c467ade9872b0b8e220 100644 --- a/Generator/src/IGenTool.h +++ b/Generator/src/IGenTool.h @@ -1,14 +1,23 @@ #ifndef IGenTool_h #define IGenTool_h 1 +/* + * IGenTool is used to mutate an event. Several tools could be used + * together to create a full event. + * + * ChangeLog: + * - 2019.11.10, Tao Lin, make the IGenTool a Gaudi tool. + */ + +#include "GaudiKernel/IAlgTool.h" #include "GenEvent.h" -class IGenTool { +class IGenTool: virtual public IAlgTool { public: virtual bool mutate(MyHepMC::GenEvent& event)=0; virtual bool finish()=0; - virtual bool configure()=0; + virtual bool configure_gentool()=0; virtual ~IGenTool(); };