Commit 48c24f21 authored by Simon Spannagel's avatar Simon Spannagel
Browse files

DepositionGeant4: check for exclusive params, invert logic, add default back

parent 30a5938c
Loading
Loading
Loading
Loading
+19 −14
Original line number Diff line number Diff line
@@ -171,22 +171,27 @@ GeneratorActionG4::GeneratorActionG4(const Configuration& config)
            single_source->GetPosDist()->SetPosRot1(angref1);
            single_source->GetPosDist()->SetPosRot2(angref2);

            if (config_.has("beam_divergence")){
            if(config_.count({"beam_divergence", "focus_point"}) > 1) {
                throw InvalidCombinationError(config_,
                                              {"beam_divergence", "focus_point"},
                                              "Beam divergence and beam focus point are mutually exclusive!");
            }

            if(config_.has("focus_point")) {
                // Set beam to focus
                single_source->GetAngDist()->SetAngDistType("focused");
                auto focus_point = config_.get<G4ThreeVector>("focus_point");
                single_source->GetAngDist()->SetFocusPoint(focus_point);
            } else {
                // Set angle distribution parameters
                // NOTE beam2d will always fire in the -z direction of the system
                single_source->GetAngDist()->SetAngDistType("beam2d");
                single_source->GetAngDist()->DefineAngRefAxes("angref1", angref1);
                single_source->GetAngDist()->DefineAngRefAxes("angref2", angref2);
              auto divergence = config_.get<G4TwoVector>("beam_divergence");
                auto divergence = config_.get<G4TwoVector>("beam_divergence", G4TwoVector(0., 0.));
                single_source->GetAngDist()->SetBeamSigmaInAngX(divergence.x());
                single_source->GetAngDist()->SetBeamSigmaInAngY(divergence.y());
            }
            else if (config_.has("focus_point")) {
              // Set beam to focus
              single_source->GetAngDist()->SetAngDistType("focused");
              auto focus_point = config_.get<G4ThreeVector>("focus_point");
              single_source->GetAngDist()->SetFocusPoint(focus_point);
            }

        } else if(source_type == SourceType::SPHERE) {