Skip to content
Snippets Groups Projects
Commit 3b7aec88 authored by lintao@ihep.ac.cn's avatar lintao@ihep.ac.cn
Browse files

WIP: start to migrate the GenTools.

parent a520ce43
No related branches found
No related tags found
No related merge requests found
########################################
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)
......
......@@ -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;
......
......@@ -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;
......
......@@ -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;
......
#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;
}
#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
#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();
};
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment