geant events for multiple scattering
This commit is contained in:
@@ -30,34 +30,61 @@
|
||||
#include "Core/Vector.h"
|
||||
#include "Math/Dense.h"
|
||||
|
||||
#include "Detectors/ChamberHitEvent.h"
|
||||
#include <string>
|
||||
|
||||
namespace uLib {
|
||||
namespace Geant {
|
||||
|
||||
class GeantEventData {
|
||||
// Forward declaration for friend access
|
||||
class SteppingAction;
|
||||
|
||||
///////////////////////////////////////////////////////////////////////////////
|
||||
/// GeantEvent — output of a Geant4 simulation run.
|
||||
///
|
||||
/// m_Momentum and m_GenVector are set from the EmitterPrimary at generation.
|
||||
/// During simulation, each scattering interaction deposits a Delta in m_Path,
|
||||
/// recording the change of momentum and direction at each step boundary.
|
||||
///////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
class GeantEvent {
|
||||
|
||||
public:
|
||||
uLibGetMacro(EventID, Id_t) uLibGetMacro(Momentum, Scalarf)
|
||||
uLibConstRefMacro(GenPos, Vector3f) uLibConstRefMacro(GenDir, Vector3f)
|
||||
uLibConstRefMacro(ChEvents, Vector<ChamberHitEventData>)
|
||||
|
||||
/// A single interaction step along the muon path.
|
||||
struct Delta {
|
||||
Scalarf m_Length; ///< step length through the solid
|
||||
Scalarf m_Momentum; ///< momentum magnitude at this step
|
||||
HVector3f m_Direction; ///< direction after scattering
|
||||
std::string m_SolidName; ///< name of the solid where interaction occurred
|
||||
|
||||
uLibGetMacro(Length, Scalarf)
|
||||
uLibGetMacro(Momentum, Scalarf)
|
||||
uLibConstRefMacro(Direction, HVector3f)
|
||||
uLibConstRefMacro(SolidName, std::string)
|
||||
|
||||
Delta() : m_Length(0), m_Momentum(0), m_Direction(HVector3f::Zero()) {}
|
||||
};
|
||||
|
||||
// --- Read-only accessors (public) --- //
|
||||
uLibGetMacro(EventID, Id_t)
|
||||
uLibGetMacro(Momentum, Scalarf)
|
||||
uLibConstRefMacro(GenVector, HLine3f)
|
||||
uLibConstRefMacro(Path, Vector<Delta>)
|
||||
|
||||
private:
|
||||
friend class GeantEvent;
|
||||
Id_t m_EventID;
|
||||
Scalarf m_Momentum;
|
||||
Vector3f m_GenPos;
|
||||
Vector3f m_GenDir;
|
||||
Vector<ChamberHitEventData> m_ChEvents;
|
||||
};
|
||||
HLine3f m_GenVector;
|
||||
Vector<Delta> m_Path;
|
||||
|
||||
class GeantEvent : public GeantEventData {
|
||||
public:
|
||||
uLibSetMacro(EventID, Id_t) uLibSetMacro(Momentum, Scalarf)
|
||||
uLibRefMacro(GenPos, Vector3f) uLibRefMacro(GenDir, Vector3f)
|
||||
uLibRefMacro(ChEvents, Vector<ChamberHitEventData>)
|
||||
GeantEvent() : m_EventID(0), m_Momentum(0), m_GenVector(HLine3f()), m_Path() {}
|
||||
|
||||
// SteppingAction can populate the private fields during simulation
|
||||
friend class SteppingAction;
|
||||
};
|
||||
|
||||
} // namespace Geant
|
||||
} // namespace uLib
|
||||
|
||||
#endif // GEANTEVENT_H
|
||||
#endif // U_GEANTEVENT_H
|
||||
|
||||
Reference in New Issue
Block a user