Kernel calculation can now align with Akvo data from the YAML.
authorTrevor Irons <Trevor.Irons@lemmasoftware.org>
Tue, 30 May 2017 20:32:52 +0000 (14:32 -0600)
committerTrevor Irons <Trevor.Irons@lemmasoftware.org>
Tue, 30 May 2017 20:32:52 +0000 (14:32 -0600)
examples/KernelV0-2.cpp
include/KernelV0.h
src/KernelV0.cpp

index a970e88..44d28a1 100644 (file)
@@ -23,7 +23,7 @@ using namespace Lemma;
 
 int main(int argc, char** argv) {
 
-    if (argc<3) {
+    if (argc<5) {
         std::cout << "./KernelV0-2 Kernel.yaml TxString RxString  vtkoutput<true/false> \n";
         return(EXIT_SUCCESS);
     }
@@ -35,7 +35,8 @@ int main(int argc, char** argv) {
     std::vector<std::string> rx = {std::string(argv[3])};
 
     std::cout << "argv[4]\t" << argv[4] << std::endl;
-    if( std::string(argv[4]) == "true") {
+    if( std::string(argv[4]) == "true" || std::string(argv[4]) == "True") {
+        std::cout << "Using VTK, output files may be very large" << std::endl;
         Kern->CalculateK0( tx, rx, true ); // 3rd argument is vtk output
     } else {
         std::cout << "not using VTK" << std::endl;
index fc2cf16..efaa96a 100644 (file)
@@ -139,7 +139,7 @@ namespace Lemma {
                 bool vtkOutput=false );
 
         /**
-         *  Aligns the kernel settings with an Akvo Processed dataset.
+         *  Aligns the kernel pulse settings with an Akvo Processed dataset.
          */
         void AlignWithAkvoDataset( const YAML::Node& node ) ;
 
index 84766d2..60cd189 100644 (file)
@@ -53,12 +53,19 @@ namespace Lemma {
         tol = node["tol"].as<Real>();
         minLevel = node["minLevel"].as<int>();
         maxLevel = node["maxLevel"].as<int>();
-        Taup = node["Taup"].as<Real>();
-        PulseI = node["PulseI"].as<VectorXr>();
         Interfaces = node["Interfaces"].as<VectorXr>();
         Size = node["IntegrationSize"].as<Vector3r>();
         Origin = node["IntegrationOrigin"].as<Vector3r>();
 
+        if (node["AlignWithAkvoData"]) {
+            // Match pulse info with dataset
+            AlignWithAkvoDataset( YAML::LoadFile( node["AlignWithAkvoData"].as<std::string>()));
+        } else {
+            // Read Pulse info direct from Kernel file
+            PulseI = node["PulseI"].as<VectorXr>();
+            Taup = node["Taup"].as<Real>();
+        }
+
         if (node["SigmaModel"]) {
             if (node["SigmaModel"].Tag() == "LayeredEarthEM") {
                 SigmaModel = LayeredEarthEM::DeSerialize(node["SigmaModel"]);
@@ -159,8 +166,8 @@ namespace Lemma {
             std::cout << node["processed"] << std::endl;
         }
         if (node["pulseType"].as<std::string>() == "FID") {
-            PulseI  = node["Pulse 1"]["current"].as<VectorXr>();
-            this->SetPulseDuration( node["pulseLength"].as<double>() );
+            PulseI  = node["Pulses"]["Pulse 1"]["current"].as<VectorXr>();
+            this->SetPulseDuration( node["pulseLength"][0].as<double>() );
         } else {
             std::cerr << "Pulse Type " << node["PulseType"] << "is not supported\n";
         }