Commit e91e8d3e authored by Paul Schütze's avatar Paul Schütze Committed by Simon Spannagel
Browse files

Enable detrapping in GenProp and TransProp

(cherry picked from commit 94118135)
parent f686f1a3
Loading
Loading
Loading
Loading
+9 −2
Original line number Diff line number Diff line
@@ -582,6 +582,9 @@ void GenericPropagationModule::initialize() {

    // Prepare trapping model
    trapping_ = Trapping(config_);

    // Prepare trapping model
    detrapping_ = Detrapping(config_);
}

void GenericPropagationModule::run(Event* event) {
@@ -850,11 +853,15 @@ GenericPropagationModule::propagate(const ROOT::Math::XYZPoint& pos,
                trapping_time_histo_->Fill(static_cast<double>(Units::convert(runge_kutta.getTime(), "ns")), charge);
            }

            auto detrap_time = detrapping_(type, probability_distribution(random_generator), std::sqrt(efield.Mag2()));
            if((initial_time + runge_kutta.getTime() + detrap_time) < integration_time_) {
                LOG(DEBUG) << "De-trapping charge carrier after " << Units::display(detrap_time, {"ns", "us"});
                // De-trap and advance in time if still below integration time
                LOG(DEBUG) << "De-trapping charge carrier after " << Units::display(traptime, {"ns", "us"});
                runge_kutta.advanceTime(traptime);
                runge_kutta.advanceTime(detrap_time);

                if(output_plots_) {
                    detrapping_time_histo_->Fill(static_cast<double>(Units::convert(detrap_time, "ns")), charge);
                }
            } else {
                // Mark as trapped otherwise
                is_trapped = true;
+2 −0
Original line number Diff line number Diff line
@@ -25,6 +25,7 @@
#include "objects/DepositedCharge.hpp"
#include "objects/PropagatedCharge.hpp"

#include "physics/Detrapping.hpp"
#include "physics/Mobility.hpp"
#include "physics/Recombination.hpp"
#include "physics/Trapping.hpp"
@@ -109,6 +110,7 @@ namespace allpix {
        Mobility mobility_;
        Recombination recombination_;
        Trapping trapping_;
        Detrapping detrapping_;

        // Precalculated value for Boltzmann constant:
        double boltzmann_kT_;
+17 −4
Original line number Diff line number Diff line
@@ -105,6 +105,9 @@ void TransientPropagationModule::initialize() {
    // Prepare trapping model
    trapping_ = Trapping(config_);

    // Prepare detrapping model
    detrapping_ = Detrapping(config_);

    // Check for magnetic field
    has_magnetic_field_ = detector->hasMagneticField();
    if(has_magnetic_field_) {
@@ -381,13 +384,23 @@ TransientPropagationModule::propagate(Event* event,
                                   timestep_);

        // Check if the charge carrier has been trapped:
        auto [trapped, traptime] =
        auto trapped =
            trapping_(type, probability_distribution(event->getRandomEngine()), timestep_, std::sqrt(efield.Mag2()));
        if(trapped) {
            if((initial_time + runge_kutta.getTime() + traptime) < integration_time_) {
            if(output_plots_) {
                trapping_time_histo_->Fill(static_cast<double>(Units::convert(runge_kutta.getTime(), "ns")), charge);
            }

            auto detrap_time =
                detrapping_(type, probability_distribution(event->getRandomEngine()), std::sqrt(efield.Mag2()));
            if((initial_time + runge_kutta.getTime() + detrap_time) < integration_time_) {
                // De-trap and advance in time if still below integration time
                LOG(TRACE) << "De-trapping charge carrier after " << Units::display(traptime, {"ns", "us"});
                runge_kutta.advanceTime(traptime);
                LOG(TRACE) << "De-trapping charge carrier after " << Units::display(detrap_time, {"ns", "us"});
                runge_kutta.advanceTime(detrap_time);

                if(output_plots_) {
                    detrapping_time_histo_->Fill(static_cast<double>(Units::convert(detrap_time, "ns")), charge);
                }
            } else {
                // Mark as trapped otherwise
                is_trapped = true;
+2 −0
Original line number Diff line number Diff line
@@ -22,6 +22,7 @@
#include "objects/DepositedCharge.hpp"
#include "objects/Pulse.hpp"

#include "physics/Detrapping.hpp"
#include "physics/Mobility.hpp"
#include "physics/Recombination.hpp"
#include "physics/Trapping.hpp"
@@ -101,6 +102,7 @@ namespace allpix {
        Mobility mobility_;
        Recombination recombination_;
        Trapping trapping_;
        Detrapping detrapping_;

        // Precalculated value for Boltzmann constant:
        double boltzmann_kT_;