Loading src/modules/GenericPropagation/GenericPropagationModule.cpp +9 −2 Original line number Diff line number Diff line Loading @@ -249,6 +249,9 @@ void GenericPropagationModule::initialize() { // Prepare trapping model trapping_ = Trapping(config_); // Prepare trapping model detrapping_ = Detrapping(config_); } void GenericPropagationModule::run(Event* event) { Loading Loading @@ -541,11 +544,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 state = CarrierState::TRAPPED; Loading src/modules/GenericPropagation/GenericPropagationModule.hpp +2 −0 Original line number Diff line number Diff line Loading @@ -27,6 +27,7 @@ #include "objects/DepositedCharge.hpp" #include "objects/PropagatedCharge.hpp" #include "physics/Detrapping.hpp" #include "physics/ImpactIonization.hpp" #include "physics/Mobility.hpp" #include "physics/Recombination.hpp" Loading Loading @@ -108,6 +109,7 @@ namespace allpix { Recombination recombination_; ImpactIonization multiplication_; Trapping trapping_; Detrapping detrapping_; // Precalculated value for Boltzmann constant: double boltzmann_kT_; Loading src/modules/TransientPropagation/TransientPropagationModule.cpp +16 −3 Original line number Diff line number Diff line Loading @@ -127,6 +127,9 @@ void TransientPropagationModule::initialize() { // Prepare trapping model trapping_ = Trapping(config_); // Prepare detrapping model detrapping_ = Detrapping(config_); // Impact ionization model multiplication_ = ImpactIonization(config_); Loading Loading @@ -466,10 +469,20 @@ TransientPropagationModule::propagate(Event* event, 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 state = CarrierState::TRAPPED; Loading src/modules/TransientPropagation/TransientPropagationModule.hpp +2 −0 Original line number Diff line number Diff line Loading @@ -25,6 +25,7 @@ #include "objects/PropagatedCharge.hpp" #include "objects/Pulse.hpp" #include "physics/Detrapping.hpp" #include "physics/ImpactIonization.hpp" #include "physics/Mobility.hpp" #include "physics/Recombination.hpp" Loading Loading @@ -110,6 +111,7 @@ namespace allpix { Recombination recombination_; ImpactIonization multiplication_; 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 @@ -249,6 +249,9 @@ void GenericPropagationModule::initialize() { // Prepare trapping model trapping_ = Trapping(config_); // Prepare trapping model detrapping_ = Detrapping(config_); } void GenericPropagationModule::run(Event* event) { Loading Loading @@ -541,11 +544,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 state = CarrierState::TRAPPED; Loading
src/modules/GenericPropagation/GenericPropagationModule.hpp +2 −0 Original line number Diff line number Diff line Loading @@ -27,6 +27,7 @@ #include "objects/DepositedCharge.hpp" #include "objects/PropagatedCharge.hpp" #include "physics/Detrapping.hpp" #include "physics/ImpactIonization.hpp" #include "physics/Mobility.hpp" #include "physics/Recombination.hpp" Loading Loading @@ -108,6 +109,7 @@ namespace allpix { Recombination recombination_; ImpactIonization multiplication_; Trapping trapping_; Detrapping detrapping_; // Precalculated value for Boltzmann constant: double boltzmann_kT_; Loading
src/modules/TransientPropagation/TransientPropagationModule.cpp +16 −3 Original line number Diff line number Diff line Loading @@ -127,6 +127,9 @@ void TransientPropagationModule::initialize() { // Prepare trapping model trapping_ = Trapping(config_); // Prepare detrapping model detrapping_ = Detrapping(config_); // Impact ionization model multiplication_ = ImpactIonization(config_); Loading Loading @@ -466,10 +469,20 @@ TransientPropagationModule::propagate(Event* event, 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 state = CarrierState::TRAPPED; Loading
src/modules/TransientPropagation/TransientPropagationModule.hpp +2 −0 Original line number Diff line number Diff line Loading @@ -25,6 +25,7 @@ #include "objects/PropagatedCharge.hpp" #include "objects/Pulse.hpp" #include "physics/Detrapping.hpp" #include "physics/ImpactIonization.hpp" #include "physics/Mobility.hpp" #include "physics/Recombination.hpp" Loading Loading @@ -110,6 +111,7 @@ namespace allpix { Recombination recombination_; ImpactIonization multiplication_; Trapping trapping_; Detrapping detrapping_; // Precalculated value for Boltzmann constant: double boltzmann_kT_; Loading