Loading src/modules/GenericPropagation/GenericPropagationModule.cpp +9 −2 Original line number Diff line number Diff line Loading @@ -582,6 +582,9 @@ void GenericPropagationModule::initialize() { // Prepare trapping model trapping_ = Trapping(config_); // Prepare trapping model detrapping_ = Detrapping(config_); } void GenericPropagationModule::run(Event* event) { Loading Loading @@ -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; Loading src/modules/GenericPropagation/GenericPropagationModule.hpp +2 −0 Original line number Diff line number Diff line Loading @@ -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" Loading Loading @@ -109,6 +110,7 @@ namespace allpix { Mobility mobility_; Recombination recombination_; Trapping trapping_; Detrapping detrapping_; // Precalculated value for Boltzmann constant: double boltzmann_kT_; Loading src/modules/TransientPropagation/TransientPropagationModule.cpp +17 −4 Original line number Diff line number Diff line Loading @@ -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_) { Loading Loading @@ -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; Loading src/modules/TransientPropagation/TransientPropagationModule.hpp +2 −0 Original line number Diff line number Diff line Loading @@ -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" Loading Loading @@ -101,6 +102,7 @@ namespace allpix { Mobility mobility_; Recombination recombination_; Trapping trapping_; Detrapping detrapping_; // Precalculated value for Boltzmann constant: double boltzmann_kT_; Loading Loading
src/modules/GenericPropagation/GenericPropagationModule.cpp +9 −2 Original line number Diff line number Diff line Loading @@ -582,6 +582,9 @@ void GenericPropagationModule::initialize() { // Prepare trapping model trapping_ = Trapping(config_); // Prepare trapping model detrapping_ = Detrapping(config_); } void GenericPropagationModule::run(Event* event) { Loading Loading @@ -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; Loading
src/modules/GenericPropagation/GenericPropagationModule.hpp +2 −0 Original line number Diff line number Diff line Loading @@ -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" Loading Loading @@ -109,6 +110,7 @@ namespace allpix { Mobility mobility_; Recombination recombination_; Trapping trapping_; Detrapping detrapping_; // Precalculated value for Boltzmann constant: double boltzmann_kT_; Loading
src/modules/TransientPropagation/TransientPropagationModule.cpp +17 −4 Original line number Diff line number Diff line Loading @@ -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_) { Loading Loading @@ -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; Loading
src/modules/TransientPropagation/TransientPropagationModule.hpp +2 −0 Original line number Diff line number Diff line Loading @@ -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" Loading Loading @@ -101,6 +102,7 @@ namespace allpix { Mobility mobility_; Recombination recombination_; Trapping trapping_; Detrapping detrapping_; // Precalculated value for Boltzmann constant: double boltzmann_kT_; Loading