79 lines
2.9 KiB
C++
79 lines
2.9 KiB
C++
|
|
#include <pybind11/pybind11.h>
|
|
#include <pybind11/stl.h>
|
|
#include <pybind11/operators.h>
|
|
|
|
#include "GeometryDescriptor.hh"
|
|
#include "G4System.hh"
|
|
|
|
namespace py = pybind11;
|
|
|
|
|
|
template<class M>
|
|
void makeGeometryDescriptor(M & m, std::string name){
|
|
|
|
py::class_<GeometryDescriptor>(m, name.data()).def(py::init())
|
|
.def("addLayer", &GeometryDescriptor::addLayer, py::arg("thickness"), py::arg("material"), py::arg("isActive")=true, py::arg("nx")=1, py::arg("ny")=-1)
|
|
.def("getXYWidth", &GeometryDescriptor::getXYWidth)
|
|
// bind overloaded getLayers function
|
|
.def("getLayers", (std::vector<Layer> & (GeometryDescriptor::*)()) &GeometryDescriptor::getLayers)
|
|
.def("getLayers", (const std::vector<Layer> & (GeometryDescriptor::*)() const) &GeometryDescriptor::getLayers)
|
|
.def("isAssigned", &GeometryDescriptor::isAssigned)
|
|
.def("getNSensors", &GeometryDescriptor::getNSensors);
|
|
|
|
}
|
|
|
|
|
|
template <class M>
|
|
void makeG4System(M &m, std::string name)
|
|
{
|
|
py::class_<G4System>(m, name.data()).def(py::init())
|
|
.def("init", &G4System::init, py::arg("cw")).def("run_visualize", &G4System::run_visualize, py::arg("partSpecies"), py::arg("minEnergy_GeV"), py::arg("maxEnergy_GeV"))
|
|
.def("run_gui", &G4System::run_gui)
|
|
.def("run_batch", &G4System::run_batch, py::arg("nEvents"), py::arg("partSpecies"), py::arg("minEnergy_GeV"), py::arg("maxEnergy_GeV"), py::arg("filename")="_1234567890_Hits.root")
|
|
.def("applyUICommand", &G4System::applyUICommand, py::arg("command"))
|
|
.def("displayEvent", &G4System::displayEvent)
|
|
// .def("printMaterial", &G4System::printMaterial, py::arg("name"))
|
|
//.def("check", &G4System::check)
|
|
.def("getGeometryDescriptor", &G4System::getGeometryDescriptor);
|
|
}
|
|
|
|
// create bindings for Layer class
|
|
template<class M>
|
|
void makeLayer(M &m, std::string name){
|
|
py::class_<Layer>(m, name.data()).def(py::init())
|
|
.def_readwrite("thickness", &Layer::thickness)
|
|
.def_readwrite("material", &Layer::material)
|
|
.def_readwrite("nx", &Layer::nx)
|
|
.def_readwrite("ny", &Layer::ny)
|
|
.def_readwrite("isActive", &Layer::isActive)
|
|
.def_readwrite("sens_xwidth", &Layer::sens_xwidth)
|
|
.def_readwrite("sens_ywidth", &Layer::sens_ywidth)
|
|
.def_readwrite("sensors", &Layer::sensors);
|
|
}
|
|
|
|
// create bindings for sensor class
|
|
template<class M>
|
|
void makeSensor(M &m, std::string name){
|
|
py::class_<Sensor>(m, name.data()).def(py::init())
|
|
.def("getEnergy", &Sensor::getEnergy)
|
|
.def("getPos", &Sensor::getPos)
|
|
.def("getSize", &Sensor::getSize)
|
|
.def("getX", &Sensor::getX)
|
|
.def("getY", &Sensor::getY)
|
|
.def("getZ", &Sensor::getZ)
|
|
.def("getdx", &Sensor::getdx)
|
|
.def("getdy", &Sensor::getdy)
|
|
.def("getdz", &Sensor::getdz);
|
|
}
|
|
|
|
|
|
|
|
PYBIND11_MODULE(minicalo, m)
|
|
{
|
|
m.doc() = "pybind11 plugin"; // optional module docstring
|
|
makeGeometryDescriptor(m, "GeometryDescriptor");
|
|
makeG4System(m, "G4System");
|
|
makeSensor(m, "Sensor");
|
|
makeLayer(m, "Layer");
|
|
} |