Commit 65310157 authored by Simon Spannagel's avatar Simon Spannagel
Browse files

Recombination: parse model in class itself

parent 308ce511
Loading
Loading
Loading
Loading
+1 −5
Original line number Diff line number Diff line
@@ -562,11 +562,7 @@ void GenericPropagationModule::initialize() {
    mobility_ = Mobility(config_, detector->hasDopingProfile());

    // Prepare recombination model
    try {
        recombination_ = Recombination(config_.get<std::string>("recombination_model"), detector->hasDopingProfile());
    } catch(ModelError& e) {
        throw InvalidValueError(config_, "recombination_model", e.what());
    }
    recombination_ = Recombination(config_, detector->hasDopingProfile());
}

void GenericPropagationModule::run(Event* event) {
+1 −5
Original line number Diff line number Diff line
@@ -84,11 +84,7 @@ void ProjectionPropagationModule::initialize() {
    }

    // Prepare recombination model
    try {
        recombination_ = Recombination(config_.get<std::string>("recombination_model"), detector_->hasDopingProfile());
    } catch(ModelError& e) {
        throw InvalidValueError(config_, "recombination_model", e.what());
    }
    recombination_ = Recombination(config_, detector_->hasDopingProfile());

    if(detector_->hasMagneticField() && !config_.get<bool>("ignore_magnetic_field")) {
        throw ModuleError("This module should not be used with magnetic fields. Add the option 'ignore_magnetic_field' to "
+1 −5
Original line number Diff line number Diff line
@@ -89,11 +89,7 @@ void TransientPropagationModule::initialize() {
    mobility_ = Mobility(config_, detector->hasDopingProfile());

    // Prepare recombination model
    try {
        recombination_ = Recombination(config_.get<std::string>("recombination_model"), detector->hasDopingProfile());
    } catch(ModelError& e) {
        throw InvalidValueError(config_, "recombination_model", e.what());
    }
    recombination_ = Recombination(config_, detector->hasDopingProfile());

    // Check for magnetic field
    has_magnetic_field_ = detector->hasMagneticField();
+19 −14
Original line number Diff line number Diff line
@@ -162,10 +162,12 @@ namespace allpix {

        /**
         * Recombination constructor
         * @param model       Name of the recombination model
         * @param config      Configuration of the calling module
         * @param doping      Boolean to indicate presence of doping profile information
         */
        Recombination(const std::string& model, bool doping = false) {
        Recombination(const Configuration& config, bool doping = false) {
            try {
                auto model = config.get<std::string>("recombination_model");
                if(model == "srh") {
                    model_ = std::make_unique<ShockleyReadHall>(doping);
                } else if(model == "auger") {
@@ -179,6 +181,9 @@ namespace allpix {
                    throw InvalidModelError(model);
                }
                LOG(DEBUG) << "Selected recombination model \"" << model << "\"";
            } catch(const ModelError& e) {
                throw InvalidValueError(config, "recombination_model", e.what());
            }
        }

        /**