#include #include #include #include "GeometryDescriptor.hh" #include "G4System.hh" namespace py = pybind11; template void makeGeometryDescriptor(M & m, std::string name){ py::class_(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 & (GeometryDescriptor::*)()) &GeometryDescriptor::getLayers) .def("getLayers", (const std::vector & (GeometryDescriptor::*)() const) &GeometryDescriptor::getLayers) .def("isAssigned", &GeometryDescriptor::isAssigned) .def("getNSensors", &GeometryDescriptor::getNSensors); } template void makeG4System(M &m, std::string name) { py::class_(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 void makeLayer(M &m, std::string name){ py::class_(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 void makeSensor(M &m, std::string name){ py::class_(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"); }