From ecc8a003bf0008f0fb5452cf73016c64303b3841 Mon Sep 17 00:00:00 2001
From: Ludovic Hussonnois <ludovic.hussonnois@c-s.fr>
Date: Mon, 13 Mar 2017 14:35:09 +0100
Subject: [PATCH] ENH: Compute and write contingency table.

---
 .../app/otbTrainVectorClassifier.cxx          | 19 ++++++++++++++++++-
 1 file changed, 18 insertions(+), 1 deletion(-)

diff --git a/Modules/Applications/AppClassification/app/otbTrainVectorClassifier.cxx b/Modules/Applications/AppClassification/app/otbTrainVectorClassifier.cxx
index 6be1137700..0dbd9d2a55 100644
--- a/Modules/Applications/AppClassification/app/otbTrainVectorClassifier.cxx
+++ b/Modules/Applications/AppClassification/app/otbTrainVectorClassifier.cxx
@@ -18,6 +18,7 @@
 
 // Validation
 #include "otbConfusionMatrixCalculator.h"
+#include "otbContingencyTableCalculator.h"
 
 namespace otb
 {
@@ -81,11 +82,27 @@ private:
       }
     else
       {
-      // TODO Compute Contingency Table
+      WriteContingencyTable();
       }
   }
 
 
+  void WriteContingencyTable()
+  {
+    // Compute contingency table
+    typedef ContingencyTableCalculator<ClassLabelType> ContigencyTableCalcutaltorType;
+    ContigencyTableCalcutaltorType::Pointer contingencyTableCalculator = ContigencyTableCalcutaltorType::New();
+    contingencyTableCalculator->Compute(predictedList->Begin(), predictedList->End(),
+                                        classificationListSamples.labeledListSample->Begin(),
+                                        classificationListSamples.labeledListSample->End());
+    ContingencyTable<ClassLabelType> contingencyTable = contingencyTableCalculator->GetContingencyTable();
+
+    // Write contingency table
+    std::ofstream outFile;
+    outFile.open( this->GetParameterString( "io.confmatout" ).c_str() );
+    outFile << contingencyTable.to_csv();
+  }
+
 
   ConfusionMatrixCalculatorType::Pointer
   ComputeConfusionMatrix(const TargetListSampleType::Pointer &predictedListSample,
-- 
GitLab