From 1f3981c3f57b273206ba9984b35cfa9d5af1c4f6 Mon Sep 17 00:00:00 2001
From: Adam Reichold <adam.reichold@ufz.de>
Date: Mon, 28 Mar 2022 10:19:08 +0200
Subject: [PATCH] Do not check for equivalence/reusability if matrices/pests
 are actually identical.

---
 multi-pathogen-sampling.R |  4 ++--
 src/main.rs               | 15 ++++++++-------
 2 files changed, 10 insertions(+), 9 deletions(-)

diff --git a/multi-pathogen-sampling.R b/multi-pathogen-sampling.R
index c1ca4a5..11fc350 100644
--- a/multi-pathogen-sampling.R
+++ b/multi-pathogen-sampling.R
@@ -77,7 +77,7 @@ matches <- function(requirement, action) {
 
   equivalent_matrices <- FALSE
 
-  if (action$pest == "Xanthomonas citri" || action$pest == "Aleurocanthus citriperdus") {
+  if (!same_matrix && (action$pest == "Xanthomonas citri" || action$pest == "Aleurocanthus citriperdus")) {
     if (action$matrix_ == "shoots" || action$matrix_ == "fruits") {
       if (requirement$matrix_ == "shoots" || requirement$matrix_ == "fruits") {
         equivalent_matrices <- TRUE
@@ -87,7 +87,7 @@ matches <- function(requirement, action) {
 
   reusable_sample <- FALSE
 
-  if (action$matrix_ == "shoots" || action$matrix_ == "fruits") {
+  if (!same_pest && (action$matrix_ == "shoots" || action$matrix_ == "fruits")) {
     if (action$pest == "Trioza erytreae" || action$pest == "Citrus leprosis") {
       if (requirement$pest == "Trioza erytreae" || requirement$pest == "Citrus leprosis") {
         reusable_sample <- TRUE
diff --git a/src/main.rs b/src/main.rs
index bcaafbf..7a43613 100644
--- a/src/main.rs
+++ b/src/main.rs
@@ -252,8 +252,8 @@ fn matches(
             let same_matrix = requirement.matrix == action.matrix;
 
             // Does the pest implied by the action have equivalent matrices matching the requirement?
-            let equivalent_matrices =
-                problem
+            let equivalent_matrices = !same_matrix
+                && problem
                     .equivalent_matrices
                     .iter()
                     .any(|equivalent_matrices| {
@@ -263,11 +263,12 @@ fn matches(
                     });
 
             // Is the matrix implied by the action resuable for sampling a pest matching the requirement?
-            let reusable_sample = problem.reusable_samples.iter().any(|reusable_sample| {
-                reusable_sample.matrix.contains(action.matrix.0)
-                    && reusable_sample.pests.contains(action.pest.0)
-                    && reusable_sample.pests.contains(requirement.pest.0)
-            });
+            let reusable_sample = !same_pest
+                && problem.reusable_samples.iter().any(|reusable_sample| {
+                    reusable_sample.matrix.contains(action.matrix.0)
+                        && reusable_sample.pests.contains(action.pest.0)
+                        && reusable_sample.pests.contains(requirement.pest.0)
+                });
 
             let matches = (same_pest || reusable_sample) && (same_matrix || equivalent_matrices);
 
-- 
GitLab