diff --git a/CMakeLists.txt b/CMakeLists.txt index 9cd458c..01a680e 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -19,6 +19,7 @@ target_sources( include/SHiP/SimHit.hpp include/SHiP/SimParticle.hpp include/SHiP/SimResult.hpp + include/SHiP/RecParticle.hpp ) target_link_libraries(SHiPDataModel PUBLIC ROOT::Core) set_target_properties(SHiPDataModel PROPERTIES LINKER_LANGUAGE CXX) @@ -29,6 +30,7 @@ root_generate_dictionary( SHiP/SimHit.hpp SHiP/SimParticle.hpp SHiP/SimResult.hpp + SHiP/RecParticle.hpp MODULE SHiPDataModel LINKDEF diff --git a/include/SHiP/LinkDef.h b/include/SHiP/LinkDef.h index 271aa85..33ad6b5 100644 --- a/include/SHiP/LinkDef.h +++ b/include/SHiP/LinkDef.h @@ -13,4 +13,8 @@ #pragma link C++ class SHiP::SimResult+; #pragma link C++ class std::vector+; #pragma link C++ class std::vector+; + +// Reconstruction +#pragma link C++ class SHiP::RecParticle+; +#pragma link C++ class std::vector+; #endif diff --git a/include/SHiP/RecParticle.hpp b/include/SHiP/RecParticle.hpp new file mode 100644 index 0000000..dc03f19 --- /dev/null +++ b/include/SHiP/RecParticle.hpp @@ -0,0 +1,38 @@ +#pragma once + +#include +#include +#include + +namespace SHiP { + +/// Reconstructed particle +struct RecParticle { + std::int32_t trackId{0}; + std::int32_t parentId{0}; + std::int32_t pdgCode{0}; + std::array vertex{0, 0, 0}; ///< Production vertex [mm] + std::array endpoint{0, 0, 0}; ///< End point [mm] + std::array momentum{0, 0, 0}; ///< Initial momentum [GeV/c] + double energy{0}; ///< Initial kinetic energy [GeV] + double time{0}; ///< Production time [ns] + std::int32_t creatorProcess{0}; + double ipPV{0}; ///< IP wrt to the PV (at 0,0,0) [mm] +}; + +inline RecParticle fromSimParticle(SimParticle const& sp) { + return { + .trackId = sp.trackId, + .parentId = sp.parentId, + .pdgCode = sp.pdgCode, + .vertex = sp.vertex, + .endpoint = sp.endpoint, + .momentum = sp.momentum, + .energy = sp.energy, + .time = sp.time, + .creatorProcess = sp.creatorProcess, + .ipPV = 0.0, + }; +} + +} // namespace SHiP