From 3b7aec8806358cfe49c88d116a7a7069f913cfca Mon Sep 17 00:00:00 2001 From: lintao <lintao51@gmail.com> Date: Sun, 10 Nov 2019 20:23:47 +0800 Subject: [PATCH] WIP: start to migrate the GenTools. --- Generator/CMakeLists.txt | 14 ++++++++- Generator/src/GenAlgo.cpp | 61 +++++++++++++++++++++---------------- Generator/src/GenAlgo.h | 5 ++- Generator/src/GenReader.h | 4 +-- Generator/src/GtGunTool.cpp | 34 +++++++++++++++++++++ Generator/src/GtGunTool.h | 33 ++++++++++++++++++++ Generator/src/IGenTool.h | 13 ++++++-- 7 files changed, 132 insertions(+), 32 deletions(-) create mode 100644 Generator/src/GtGunTool.cpp create mode 100644 Generator/src/GtGunTool.h diff --git a/Generator/CMakeLists.txt b/Generator/CMakeLists.txt index a9a5cd9f..b62828d5 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 902a43dc..6c3784ef 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 499449e1..0fd060dc 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 b9abac0a..e8abee90 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 00000000..b4087cce --- /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 00000000..4138a8ee --- /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 87af6bd8..ef43bc74 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(); }; -- GitLab