Commit 33e2ec86 authored by Simon Spannagel's avatar Simon Spannagel
Browse files

PixelHit: allow to add reference to PixelPulse object if available

parent 2240425a
Loading
Loading
Loading
Loading
+4 −4
Original line number Diff line number Diff line
@@ -54,13 +54,13 @@
#pragma link C++ class allpix::Object::PointerWrapper < allpix::PixelCharge> + ;
#pragma link C++ class allpix::Object::BaseWrapper < allpix::PixelCharge> + ;

#pragma link C++ class allpix::PixelHit + ;
#pragma link C++ class allpix::Object::PointerWrapper < allpix::PixelHit> + ;
#pragma link C++ class allpix::Object::BaseWrapper < allpix::PixelHit> + ;

#pragma link C++ class allpix::PixelPulse + ;
#pragma link C++ class allpix::Object::PointerWrapper < allpix::PixelPulse> + ;
#pragma link C++ class allpix::Object::BaseWrapper < allpix::PixelPulse> + ;

#pragma link C++ class allpix::PixelHit + ;
#pragma link C++ class allpix::Object::PointerWrapper < allpix::PixelHit> + ;
#pragma link C++ class allpix::Object::BaseWrapper < allpix::PixelHit> + ;

// Vector of Object for internal storage
#pragma link C++ class std::vector < allpix::Object*> + ;
+20 −1
Original line number Diff line number Diff line
@@ -19,9 +19,15 @@

using namespace allpix;

PixelHit::PixelHit(Pixel pixel, double local_time, double global_time, double signal, const PixelCharge* pixel_charge)
PixelHit::PixelHit(Pixel pixel,
                   double local_time,
                   double global_time,
                   double signal,
                   const PixelCharge* pixel_charge,
                   const PixelPulse* pixel_pulse)
    : pixel_(std::move(pixel)), local_time_(local_time), global_time_(global_time), signal_(signal) {

    pixel_pulse_ = PointerWrapper<PixelPulse>(pixel_pulse);
    pixel_charge_ = PointerWrapper<PixelCharge>(pixel_charge);
    if(pixel_charge != nullptr) {
        // Get the unique set of MC particles
@@ -57,6 +63,19 @@ const PixelCharge* PixelHit::getPixelCharge() const {
    return pixel_charge;
}

/**
 * @throws MissingReferenceException If the pointed object is not in scope
 *
 * Object is stored as TRef and can only be accessed if pointed object is in scope
 */
const PixelPulse* PixelHit::getPixelPulse() const {
    auto* pixel_pulse = pixel_pulse_.get();
    if(pixel_pulse == nullptr) {
        throw MissingReferenceException(typeid(*this), typeid(PixelPulse));
    }
    return pixel_pulse;
}

/**
 * @throws MissingReferenceException If the pointed object is not in scope
 *
+16 −3
Original line number Diff line number Diff line
@@ -19,6 +19,7 @@
#include "MCParticle.hpp"
#include "Object.hpp"
#include "PixelCharge.hpp"
#include "PixelPulse.hpp"

#include "Pixel.hpp"

@@ -36,9 +37,14 @@ namespace allpix {
         * @param global_time Timing of the occurrence of the hit in global reference frame
         * @param signal Signal data produced by the digitizer
         * @param pixel_charge Optional pointer to the related pixel charge
         * @param pixel_pulse Optional pointer to the related pixel pulse this his might have been derived from
         */
        PixelHit(
            Pixel pixel, double local_time, double global_time, double signal, const PixelCharge* pixel_charge = nullptr);
        PixelHit(Pixel pixel,
                 double local_time,
                 double global_time,
                 double signal,
                 const PixelCharge* pixel_charge = nullptr,
                 const PixelPulse* pixel_pulse = nullptr);

        /**
         * @brief Get the pixel hit
@@ -76,6 +82,12 @@ namespace allpix {
         */
        const PixelCharge* getPixelCharge() const;

        /**
         * @brief Get related pixel pulse
         * @return Possible related pixel pulse
         */
        const PixelPulse* getPixelPulse() const;

        /**
         * @brief Get the Monte-Carlo particles resulting in this pixel hit
         * @return List of all related Monte-Carlo particles
@@ -98,7 +110,7 @@ namespace allpix {
        /**
         * @brief ROOT class definition
         */
        ClassDefOverride(PixelHit, 6); // NOLINT
        ClassDefOverride(PixelHit, 7); // NOLINT
        /**
         * @brief Default constructor for ROOT I/O
         */
@@ -114,6 +126,7 @@ namespace allpix {
        double signal_{};

        PointerWrapper<PixelCharge> pixel_charge_;
        PointerWrapper<PixelPulse> pixel_pulse_;
        std::vector<PointerWrapper<MCParticle>> mc_particles_;
    };